学一些coq指令

f_equal用法,消去等号两边函数的相同部分
举例:

goal : x + (y + (-y)) + z = x + z

此时f_equal后,目标变为

goal : x + (y + (-y)) = x

rewrite !用法,相当于repeat rewrite
eg: rewrite !plus_Sn_m 相当于 repeat rewrite plus_Sn_m

progress (tac)
如果tac生效就继续,不成功就失败
eg: repeat progess (try rewrite lemmax).

rename
将变量重命名
eg: rename n into m.
change 将假设的自由变元改一下
eg: change (forall b, P b) in H0.

SearchAbout x 搜所有关于x的命题
eg: SearchAbout plus.

specialize (H a)对H里的forall x,将变量x实例化为a

P->Q的证明 实际上就是 P的证明到Q的证明的一个函数

Goal : forall P, ~ ~ P.
Proof.
intros.
exact (fun H0: ~ P => H0 H).

如果编译不通过,可以将上一个.v的代码写成下面这个形式粘贴过来

Module X.
...
End X.
End X.
Import X
Class Group : Type := {
  A: Type
  e: A
  mul : A -> A -> A
  inv : A -> A
  assoc : forall x y z: A, mul (mul (x y)) z = mul x (mul y z)
  left_unit : forall (x: A), mul (inv x) x = e
  left_inv : forall (x: A), mul (inv x) x = e 
  }.

(*将Group的元素转化为一个类型*)
Coersion A : Group >-> Sortclass.

Theorem fact1 : forall (G: Group) (x: G) x + (- x) = 0.

revert m H 将假设里的H : P m 移至目标 变为 forall m, P m ->

同时归纳定义两种类型

Inductive A : Type :=
| a1 : A
| a2 : B -> A
with B : Type :=
| b1 : B
| b2 : A -> B -> B.
posted @ 2021-11-26 22:31  钉子戳戳戳  阅读(144)  评论(0)    收藏  举报