(* *)
(**************************************************************************)
-set "baseuri" "cic:/matita/nat/generic_iter_p".
-
+include "nat/div_and_mod_diseq.ma".
include "nat/primes.ma".
include "nat/ord.ma".
reflexivity.
qed.
-
-
theorem false_to_iter_p_gen_Sn:
\forall n:nat. \forall p:nat \to bool. \forall A:Type. \forall g:nat \to A.
\forall baseA:A. \forall plusA: A \to A \to A.
reflexivity.
qed.
-
theorem eq_iter_p_gen: \forall p1,p2:nat \to bool. \forall A:Type.
\forall g1,g2: nat \to A. \forall baseA: A.
\forall plusA: A \to A \to A. \forall n:nat.
intros.
elim k
-[ rewrite < (plus_n_O n).
- simplify.
+[ simplify.
rewrite > H in \vdash (? ? ? %).
rewrite > (H1 ?).
reflexivity
rewrite > sym_plus.
rewrite > (div_plus_times ? ? ? H5).
rewrite > (mod_plus_times ? ? ? H5).
- rewrite > H4.
- simplify.reflexivity.
+ reflexivity.
]
| reflexivity
]
rewrite > sym_plus.
rewrite > (div_plus_times ? ? ? H5).
rewrite > (mod_plus_times ? ? ? H5).
- rewrite > H4.
- simplify.reflexivity.
+ reflexivity.
]
| reflexivity
]
]
qed.
-
-(* da spostare *)
-
+theorem eq_iter_p_gen_pred:
+\forall A:Type.
+\forall baseA: A.
+\forall plusA: A \to A \to A.
+\forall n,p,g.
+p O = true \to
+(symmetric A plusA) \to (associative A plusA) \to (\forall a:A.(plusA a baseA) = a) \to
+iter_p_gen (S n) (\lambda i.p (pred i)) A (\lambda i.g(pred i)) baseA plusA =
+plusA (iter_p_gen n p A g baseA plusA) (g O).
+intros.
+elim n
+ [rewrite > true_to_iter_p_gen_Sn
+ [simplify.apply H1
+ |assumption
+ ]
+ |apply (bool_elim ? (p n1));intro
+ [rewrite > true_to_iter_p_gen_Sn
+ [rewrite > true_to_iter_p_gen_Sn in ⊢ (? ? ? %)
+ [rewrite > H2 in ⊢ (? ? ? %).
+ apply eq_f.assumption
+ |assumption
+ ]
+ |assumption
+ ]
+ |rewrite > false_to_iter_p_gen_Sn
+ [rewrite > false_to_iter_p_gen_Sn in ⊢ (? ? ? %);assumption
+ |assumption
+ ]
+ ]
+ ]
+qed.
+
definition p_ord_times \def
\lambda p,m,x.
match p_ord x p with
]
qed.
-(* lemmino da postare *)
-theorem lt_times_to_lt_div: \forall i,n,m. i < n*m \to i/m < n.
-intros.
-cut (O < m)
- [apply (lt_times_n_to_lt m)
- [assumption
- |apply (le_to_lt_to_lt ? i)
- [rewrite > (div_mod i m) in \vdash (? ? %).
- apply le_plus_n_r.
- assumption
- |assumption
- ]
- ]
- |apply (lt_times_to_lt_O ? ? ? H)
- ]
-qed.
-
theorem iter_p_gen_knm:
\forall A:Type.
\forall baseA: A.
[ assumption
| assumption
]
- | rewrite > H14.
+ | unfold ha.
+ unfold ha12.
+ unfold ha22.
+ rewrite > H14.
rewrite > H13.
apply sym_eq.
apply div_mod.
rewrite > Hcut.
assumption
]
- | rewrite > Hcut1.
+ | unfold ha.
+ unfold ha12.
+ rewrite > Hcut1.
rewrite > Hcut.
assumption
]
- | rewrite > Hcut1.
+ | unfold ha.
+ unfold ha22.
+ rewrite > Hcut1.
rewrite > Hcut.
assumption
]
| cut(O \lt m1)
[ cut(O \lt n1)
[ apply (lt_to_le_to_lt ? ((h11 i j)*m1 + m1) )
- [ apply (lt_plus_r).
+ [ unfold ha.
+ apply (lt_plus_r).
assumption
| rewrite > sym_plus.
rewrite > (sym_times (h11 i j) m1).
|assumption
]
]
-qed.
-
-
-
+qed.
\ No newline at end of file