• • 
– – – 
•                  •      –           •      –           •    • 
Inductive	  Z’	  :	  Set	  :=	  |	  Z’pos	  :	  nat	  -­‐>	  Z’	  |	  Z’zero	  :	  Z’	  |	  Z’neg	  :	  nat	  -­‐>	  Z’.	 ...
Require	  Import	  Setoid.	  Require	  Import	  Relation_Definitions.	  Require	  Import	  Arith.	  Require	  Import	  Com...
(*	  Z’eq Z’                                           	  *)	  Lemma	  Zeq_refl	  :	  reflexive	  Z	  Zeq.	  Lemma	  Zeq_s...
(*	  Z’                               	  *)	  Definition	  Zplus	  (z	  z:Z)	  :	  Z	  :=	  	  	  let	  (a,b)	  :=	  z	  i...
(*	                                           	  *)	  Lemma	  Zeq_plus_id_l	  :	  forall	  z	  a,	  Zplus	  (mkZ	  a	  a)	...
• •      – •      –      –           •           •           •           •           •           • •      –         Coq.QA...
Coq setoid 20110129
Upcoming SlideShare
Loading in …5
×

Coq setoid 20110129

2,209 views
2,106 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,209
On SlideShare
0
From Embeds
0
Number of Embeds
68
Actions
Shares
0
Downloads
9
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Coq setoid 20110129

  1. 1. • • 
  2. 2. – – – 
  3. 3. •  •  –  •  –  •  • 
  4. 4. Inductive  Z’  :  Set  :=  |  Z’pos  :  nat  -­‐>  Z’  |  Z’zero  :  Z’  |  Z’neg  :  nat  -­‐>  Z’.  Inductive  Z’  :  Set  :=  |  mkZ’  :  nat  -­‐>  nat  -­‐>  Z.  
  5. 5. Require  Import  Setoid.  Require  Import  Relation_Definitions.  Require  Import  Arith.  Require  Import  Compare_dec.  Require  Import  Omega.  Inductive  Z  :  Set  :=  |  mkZ  :  nat  -­‐>  nat  -­‐>  Z.  Definition  Zeq  (z  z:Z)  :  Prop  :=      let  (a,b)  :=  z  in      let  (c,d)  :=  z  in      a  +  d  =  b  +  c.  Notation  "a  =Z=  b"  :=  (Zeq  a  b)  (at  level  70).  
  6. 6. (*  Z’eq Z’  *)  Lemma  Zeq_refl  :  reflexive  Z  Zeq.  Lemma  Zeq_sym  :  symmetric  Z  Zeq.  Lemma  Zeq_trans  :  transitive  Z  Zeq.  (*  Z’  Z’eq   Setoid    *)  Add  Parametric  Relation  :  Z  Zeq      reflexivity  proved  by  Zeq_refl      symmetry  proved  by  Zeq_sym      transitivity  proved  by  Zeq_trans      as  Z_rel.  
  7. 7. (*  Z’  *)  Definition  Zplus  (z  z:Z)  :  Z  :=      let  (a,b)  :=  z  in      let  (c,d)  :=  z  in      mkZ  (a+c)  (b+d).  (*  Z’plus    Z’  Z’eq   well-­‐defined      x  =Z=  y  -­‐>  x0  =Z=  y0  -­‐>  Zplus  x  x0  =Z=  Zplus  y  y0   .  *)  Add  Parametric  Morphism  :  Zplus  with      signature  Zeq  ==>  Zeq  ==>  Zeq  as  Z_plus_mor.  Proof.    Qed.  
  8. 8. (*    *)  Lemma  Zeq_plus_id_l  :  forall  z  a,  Zplus  (mkZ  a  a)  z  =Z=  z.  Lemma  Zeq_plus_comm  :  forall  z  z,  Zplus  z  z  =Z=  Zplus  z  z.  (*  rewrite   setoid_rewrite    *)  Lemma  Zeq_plus_id_r  :  forall  z  a,  Zplus  z  (mkZ  a  a)  =Z=  z.    Proof.      intros.    setoid_rewrite  (Zeq_plus_comm  z  (mkZ  a  a)).      apply  Zeq_plus_id_l.  Qed.  (*    tactic        setoid_reflexivity,  setoid_rewrite,  setoid_replace    *)  
  9. 9. • •  – •  –  –  •  •  •  •  •  • •  –  Coq.QArith.QArith_base  

×