inductive predicates unit vs true inductive unit : set := tt : unit inductive true : prop := i :...
TRANSCRIPT
Inductive Predicates Unit vs True
Inductive unit : Set := tt : unit Inductive True : Prop := I : True Curry Howard Isomorphism But Coq distinguish Proof and Program
Efficiency? Proof Prevalence?
Propositional Logic not = fun A : Prop => A -> False
: Prop -> Prop Inductive and (A : Prop) (B : Prop) : Prop :=
conj : A -> B -> A /\ B Inductive or (A : Prop) (B : Prop) : Prop :=
or_introl : A -> A \/ B | or_intror : B -> A \/ B
Bool Vs Prop bool is datatype of two members, true, false Prop is primitive type in Coq, and True, False
are two members in Prop Coq use Constructive Logic, while P\/~P is not
allowed Issues
bool is decidable Constructive logic allow us to extract program
from proof We can write program by proof a theorem, though
maybe less efficient
First-Order Logic forall and exists
forall is built-in exists:
Inductive ex (A : Type) (P : A -> Prop) : Prop := ex_intro : forall x : A, P x -> ex P
Tactics Tauto
Solve intuition logic, only unfold not Intuition
Use tauto, and apply tactics Intuition=intuition auto.
Firstorder Extend tauto to firstorder logic
Trivial Restricted auto
auto Eauto
Auto using eapply, generate ‘_’
Basic dependant type Inductive isZero : nat -> Prop :=
| IsZero : isZero 0. Inductive even : nat -> Prop :=
| EvenO : even O| EvenSS : forall n, even n -> even (S (S n)).
Example of product: forall a:A,B (s,s’,s’’) 约束 分类(s,s’,s’) s,s’ {Set,Prop} 普通的类型(Type,Prop,Prop)
(s,Type,Type) Type denpends on a value
(Type,Type,Type) High order type