在coq tactics语言中,intro和intros之间有什么区别

时间:2018-04-26 01:04:07

标签: coq coq-tactic

在Coq战术语言中,

之间有什么区别

intro

intros

1 个答案:

答案 0 :(得分:7)

如果没有提供参数,

introintros的行为会有所不同

根据reference manual

  

如果目标既不是产品也不是以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 contraintros 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.

有关简介模式的一些信息可以在manualSoftware 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