Section 一
Require Import ZArith.
Open Scope Z_scope.
Section ss.
End.
Qed.
Print t.
Check type.
apply t.
apply t with(v:=m v2:=n ).
eapply t.
eexact H.
Search Zle.
SearchPattern(_+_<=_)%Z. SearchPattern(?X1 * _ <=?X1 * _)%Z.
le_S : forall n m : nat, n <= m -> n <= S m
transparent theorem vs opaque theorem:
以Defined.尾;以Qed.结尾。
unfold transparent_theorem.
unfold id at n1 ... nk. 指定在哪几阶展开。
5.2 Logic Connectives.
not:
elim False.这个能推出任何命题。等价于apply False_ind.exact False.
否定命题的理解:
引入规则:如果能从A真推导出任何命题为真,必然蕴含~A真。
削去规则:如果A,~A同时为真,必然蕴含所有的命题为真。
当Hypothesis中有A真,同时又推导出~A真,用destruct(~A)可以为推导引入False到推导的前提中,从而可以证明任何的goal。
True:
引入规则:空(无任何前提条件)蕴含True为真。
没有规则,即是说,如果我们知道True为真这个前提,我们得不出任何新的东西。
False:
没有引入规则,和削去规则对应,仅当all为真,才能引入False为真。而这是不可能的。
削去规则:如果False真,必然蕴含anything为真。
unfold not. unfold not at 1 2. unfold ~p == p->False.
or_introl.
or_intror.
repeat tac.
assert ( ~~~P->~P ). 引入一个引理。先证明该引理,后使用。
cut (~~~P->~P). 引入一个引理。先使用该引理,后证明。
exact vs assumption. exact指定前提or假定的名称,assumption自动查找。
5.3 Equality and Rewriting
reflexivity. 证明数上的相等。不会计算(规约)包含有自由变量的等式。
ring. 同上,但会计算包含自由变量的等式。 存在于ZArithRing.
rewrite e. e has the form e: a=b ,作用是把goal中的每个a替换为b,可能会产生多个goal。
rewrite <- e. 同上,但是把每个b替换为a。
rewrite [<-] e in H. rewrite operates on a Hypothesis.
pattern x [at 1]. x is the 模式。at 1指定匹配的范围。
Search eq.
SearchRewrite (1*_)%Z. 参数为模式。可以使用匿名_。
chap6. Inductive Data Types.
Inductive id:Set := a | b |c .
coq course note:
一些等价关系
当假设可以直接用于证明goal时,exact h = apply h =assumption 三者等价。
rewrite [<- or ->] H.
simpl. 应用于goal,让goal作beta规约.
reflexivity.判断等式形式的goal是否等式两边相等.
elim k.展开k的定义,一般会产生多个subgoal,但每个subgoal要相对简单了.从而易证.
induction t. 按照t所属的induction 类型的定义展开,或说是按结构归纳证明。t以bound变量形式出现在goal中。
inversion_clear H. 展开H假设。
rewrite <- H 3 in H0. 把假设H0中的项用H3的左项重写。H0中的项和H3中的右项相同。
Require Import Classical. 将 classical逻辑引入,
elim (classic (exists x : D, ~ Drinks x)).
应用上述tactic后会产生下面两个新的goal:
(exists x : D, ~ Drinks x) -> old_goal
~ (exists x : D, ~ Drinks x) -> old_goal.
回顾elim的用法 elim H. 会把goal变成 H->old_goal.
unfold not in H. 把假设中的~展开。
注意with / in / at 用法的区别:
with 一般用在apply H with (boundvar:=var). 中,用来指定要应用的假设中的变量用假设中的那个变量来代换,
比如在应用传递规则的时候,我们一定要指定中间传递变量y应该绑定到那个假设中的变量。
in 一般用来指出操作/作用所应用的领域,如常见的 rewrite <- H 3 in H0. in的作用是指出要把H0中的某项怎么重写。
at 一般用来指出展开的幅度、层次等。如unfold not at 1,表示只展开最外层的not。等等
elimtype False. 如果goal不好证明,我们可以把goal换成证明False为真,因为False能证明一切。
elimtype False.作用相当于cut False.当然elim I.相当于 cut I. intro Hn; elim Hn; clear Hn.
apply not_ex_not_all. 把goal forall x : D, Drinks x 转换成 ~ (exists n : D, ~ Drinks n)
assert (subgoal). 将会产生新的subgoal,且要求先证明该subgoal,再证明原goal。
elim (H1 H2). 如果H1、H2互为否命题,则H1 H2会产生False,而False可以推导出一切。
False相关: False有削去规则,没有引入规则。即是说我们不可能证明False为真。elim False.可以证明任何goal。
8.9.4 injection ident
http://coq.inria.fr/doc/Reference-Manual010.html#@tactic82
8.8.7 subst ident
http://coq.inria.fr/doc/Reference-Manual010.html#@tactic75
This tactic applies to a goal which has ident in its context and (at least) one hypothesis, say H, of type ident=t or t=ident. Then it replaces ident by t everywhere in the goal (in the hypotheses and in the conclusion) and clears ident and H from the context.
Section 二
二、 types and expressions
1. Gallina specification language.
2. Expressions à programs type à ?
3. Interpertation Scopes:
Open Scope Z_scope/nat_scope
4. Type Checking
Check t%[nat|Z]
O=0%nat 大写的字母O
5. Simple type:
1) atomic types.
2) arrow types.
6. A->B->C equals A->(B->C) .
1) Fun 接受参数A返回B->C.
2) Fun 接受A,B返回C。
7. def/dec, global/local
1) declaration: variable/constant x:A
2) definition: variable/constant x:=t:A . while t is well-formed.
3) Environment: Global variables, 用constant声明
4) Context: local variables, 用variable 声明
8. Sections and Local Variables.
9. Computing.
三、 Propositions and Proofs.