在Coq战术语言中,
之间有什么区别 intro
和
intros
?
答案 0 :(得分:7)
intro
和intros
的行为会有所不同如果目标既不是产品也不是以let定义开头,则策略
intro
会应用策略hnf
,直到可以应用策略intro
或目标不是头部 - 还原
另一方面,intros
,作为intro
策略的变体,
重复
intro
直到它遇到头部常数。它永远不会减少头部常数,它永远不会失败。
示例:
Goal not False.
(* does nothing *)
intros.
(* unfolds `not`, revealing `False -> False`;
moves the premise to the context *)
intro.
Abort.
注意:如果提供了参数(intro
/ intros
),intro contra
和intros contra
都会做同样的事情。
intros
是多变量的,intro
只能带0或1个参数Goal True -> True -> True.
Fail intro t1 t2.
intros t1 t2. (* or `intros` if names do not matter *)
Abort.
intro
不支持intro-patterns Goal False -> False.
Fail intro [].
intros [].
Qed.
有关简介模式的一些信息可以在manual或Software Foundations一书中找到。另请参阅this example几个介绍模式的不太重要的组合。
intros
不支持after
/ before
/ at top
/ at bottom
次我们说我们有这样的证明状态
H1 : True
H2 : True /\ True
H3 : True /\ True /\ True
==========
True /\ True /\ True /\ True -> True
然后,例如intro H4 after H3
将修改证明状态,如下所示:
H1 : True
H2 : True /\ True
H4 : True /\ True /\ True /\ True
H3 : True /\ True /\ True
==========
True
和intro H4 after H1
将产生
H4 : True /\ True /\ True /\ True
H1 : True
H2 : True /\ True
H3 : True /\ True /\ True
==========
True