X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fsoftware%2Fmatita%2Ftests%2Fdecl.ma;h=3e1bdd3747fdd4b3cb7b5f217351746252b35aea;hb=b6afef7e73324824025a6d7f313129d55b72cfc6;hp=8ff56dde87398e467896aee5d7c3d58b8266e829;hpb=bf71f28526258043857cc389adda5ce58fd236be;p=helm.git diff --git a/helm/software/matita/tests/decl.ma b/helm/software/matita/tests/decl.ma index 8ff56dde8..3e1bdd374 100644 --- a/helm/software/matita/tests/decl.ma +++ b/helm/software/matita/tests/decl.ma @@ -12,7 +12,7 @@ (* *) (**************************************************************************) -set "baseuri" "cic:/matita/test/decl". + include "nat/times.ma". include "nat/orders.ma". @@ -22,8 +22,8 @@ theorem easy: ∀n,m. n * m = O → n = O ∨ m = O. assume m: nat. (* base case *) by (refl_eq ? O) we proved (O = O) (trivial). - by (or_introl ? ? trivial) we proved (O = O ∨ m = O) (trivial2). - by (λ_.trivial2) we proved (O*m=O → O=O ∨ m=O) (base_case). + by or_introl we proved (O = O ∨ m = O) (trivial2). + using (λ_.trivial2) we proved (O*m=O → O=O ∨ m=O) (base_case). (* inductive case *) we need to prove (∀n1. (n1 * m = O → n1 = O ∨ m = O) → (S n1) * m = O → (S n1) = O ∨ m = O) @@ -31,8 +31,8 @@ theorem easy: ∀n,m. n * m = O → n = O ∨ m = O. assume n1: nat. suppose (n1 * m = O → n1 = O ∨ m = O) (inductive_hyp). (* base case *) - by (or_intror ? ? trivial) we proved (S n1 = O ∨ O = O) (pre_base_case2). - by (λ_.pre_base_case2) we proved (S n1*O = O → S n1 = O ∨ O = O) (base_case2). + by or_intror we proved (S n1 = O ∨ O = O) (pre_base_case2). + using (λ_.pre_base_case2) we proved (S n1*O = O → S n1 = O ∨ O = O) (base_case2). (* inductive case *) we need to prove (∀m1. (S n1 * m1 = O → S n1 = O ∨ m1 = O) → @@ -41,15 +41,15 @@ theorem easy: ∀n,m. n * m = O → n = O ∨ m = O. suppose (S n1 * m1 = O → S n1 = O ∨ m1 = O) (useless). suppose (S n1 * S m1 = O) (absurd_hyp). simplify in absurd_hyp. - by (sym_eq ? ? ? absurd_hyp) we proved (O = S (m1+n1*S m1)) (absurd_hyp'). - by (not_eq_O_S ? absurd_hyp') we proved False (the_absurd). + by sym_eq we proved (O = S (m1+n1*S m1)) (absurd_hyp'). + by not_eq_O_S we proved False (the_absurd). by (False_ind ? the_absurd) done. (* the induction *) - by (nat_ind (λm.S n1 * m = O → S n1 = O ∨ m = O) base_case2 inductive_hyp2 m) + using (nat_ind (λm.S n1 * m = O → S n1 = O ∨ m = O) base_case2 inductive_hyp2 m) done. (* the induction *) - by (nat_ind (λn.n*m=O → n=O ∨ m=O) base_case inductive_case n) + using (nat_ind (λn.n*m=O → n=O ∨ m=O) base_case inductive_case n) done. qed. @@ -72,16 +72,46 @@ theorem easy2: ∀n,m. n * m = O → n = O ∨ m = O. ] qed. +theorem easy15: ∀n,m. n * m = O → n = O ∨ m = O. + assume n: nat. + assume m: nat. + (* base case *) + we proved (O = O) (trivial). + we proved (O = O ∨ m = O) (trivial2). + we proved (O*m=O → O=O ∨ m=O) (base_case). + (* inductive case *) + we need to prove + (∀n1. (n1 * m = O → n1 = O ∨ m = O) → (S n1) * m = O → (S n1) = O ∨ m = O) + (inductive_case). + assume n1: nat. + suppose (n1 * m = O → n1 = O ∨ m = O) (inductive_hyp). + (* base case *) + we proved (S n1 = O ∨ O = O) (pre_base_case2). + we proved (S n1*O = O → S n1 = O ∨ O = O) (base_case2). + (* inductive case *) + we need to prove + (∀m1. (S n1 * m1 = O → S n1 = O ∨ m1 = O) → + (S n1 * S m1 = O → S n1 = O ∨ S m1 = O)) (inductive_hyp2). + assume m1: nat. + suppose (S n1 * m1 = O → S n1 = O ∨ m1 = O) (useless). + suppose (S n1 * S m1 = O) (absurd_hyp). + simplify in absurd_hyp. + we proved (O = S (m1+n1*S m1)) (absurd_hyp'). + we proved False (the_absurd). + we proceed by cases on the_absurd to prove (S n1=O ∨ S m1=O). + (* the induction *) + using (nat_ind (λm.S n1 * m = O → S n1 = O ∨ m = O) base_case2 inductive_hyp2 m) + done. + (* the induction *) + using (nat_ind (λn.n*m=O → n=O ∨ m=O) base_case inductive_case n) +done. +qed. theorem easy3: ∀A:Prop. (A ∧ ∃n:nat.n ≠ n) → True. assume P: Prop. suppose (P ∧ ∃m:nat.m ≠ m) (H). by H we have P (H1) and (∃x:nat.x≠x) (H2). - (*BUG: by H2 let q:nat such that (q ≠ q) (Ineq). - *) - (* the next line is wrong, but for the moment it does the job *) - by H2 let q:nat such that False (Ineq). by I done. qed. @@ -92,9 +122,22 @@ assume p:nat. suppose (n=m) (H). suppose (S m = S p) (K). suppose (n = S p) (L). -obtain (S n) = (S m) by (eq_f ? ? ? ? ? H). +conclude (S n) = (S m) by H. = (S p) by K. - = n by (sym_eq ? ? ? L) + = n by L +done. +qed. + +theorem easy45: ∀n,m,p. n = m → S m = S p → n = S p → S n = n. +assume n: nat. +assume m:nat. +assume p:nat. +suppose (n=m) (H). +suppose (S m = S p) (K). +suppose (n = S p) (L). +conclude (S n) = (S m). + = (S p). + = n done. qed. @@ -104,7 +147,7 @@ assume n: nat. we proceed by induction on n to prove False. case O. the thesis becomes (O*O=O). - by (refl_eq ? O) done. + done. case S (m:nat). by induction hypothesis we know (m*O=O) (I). the thesis becomes (S m * O = O). @@ -130,9 +173,8 @@ theorem easy6: ∀t. O ≮ O → O < size t → t ≠ Empty. we proceed by induction on t to prove False. case Empty. the thesis becomes (O < size Empty → Empty ≠ Empty). - suppose (O < size Empty) (absurd). - (*Bug here: missing that is equivalent to *) - simplify in absurd. + suppose (O < size Empty) (absurd) + that is equivalent to (O < O). (* Here the "natural" language is not natural at all *) we proceed by induction on (trivial absurd) to prove False. (*Bug here: this is what we want @@ -145,11 +187,13 @@ theorem easy6: ∀t. O ≮ O → O < size t → t ≠ Empty. by induction hypothesis we know (O < size t1 → t1 ≠ Empty) (Ht1). assume t2: tree. by induction hypothesis we know (O < size t2 → t2 ≠ Empty) (Ht2). - suppose (O < size (Node t1 t2)) (Hyp). - (*BUG: that is equivalent to missed here *) - unfold Not. - suppose (Node t1 t2 = Empty) (absurd). - (* Discriminate should really generate a theorem to be useful with - declarative tactics *) - discriminate absurd. -qed. \ No newline at end of file + suppose (O < size (Node t1 t2)) (useless). + we need to prove (Node t1 t2 ≠ Empty) (final) + or equivalently (Node t1 t2 = Empty → False). + suppose (Node t1 t2 = Empty) (absurd). + (* Discriminate should really generate a theorem to be useful with + declarative tactics *) + destruct absurd. + by final + done. +qed.