]> matita.cs.unibo.it Git - helm.git/blobdiff - matita/matita/lib/tutorial/chapter2.ma
tutorial
[helm.git] / matita / matita / lib / tutorial / chapter2.ma
index 14ae1b679e4e10b77eee87baa181937562148670..502e59a40df07f81b67d32e269ea96d613cd2316 100644 (file)
@@ -29,11 +29,9 @@ follows: *)
 let rec add n (m:nat) ≝ 
 match n with
 [ O ⇒ m
-| S a ⇒ add (S a) m
+| S a ⇒ S (add a m)
 ].
 
-check 
-
 (* Observe that the definition of a recursive function requires the keyword 
 "let rec" instead of "definition". The specification of formal parameters is 
 different too. In this case, they come before the body, and do not require a λ. 
@@ -375,3 +373,20 @@ normalize // qed.
 example quotient8: witness … (div2Pagain (twice (twice (twice (twice (S O)))))) 
        = 〈twice (twice (twice (S O))), ff〉.
 // qed. 
+
+(********************)
+
+inductive Pari : nat → Prop ≝
+   | pariO : Pari O
+   | pari2 : ∀x. Pari x → Pari (S (S x)).
+   
+definition natPari ≝ Sub nat Pari.
+
+definition addPari: natPari → natPari → natPari.
+* #a #Ha * #b #Hb check mk_Sub @(mk_Sub … (add a b))  
+elim Ha
+  [normalize @Hb
+  |#x #Hx #Hind normalize @pari2 @Hind
+  ]
+qed.    
+