60 likes | 189 Views
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
E N D
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