(* *)
(**************************************************************************)
-set "baseuri" "cic:/matita/library_auto/nat/congruence".
+set "baseuri" "cic:/matita/library_autobatch/nat/congruence".
include "auto/nat/relevant_equations.ma".
include "auto/nat/primes.ma".
\lambda n,m,p:nat. mod n p = mod m p.
interpretation "congruent" 'congruent n m p =
- (cic:/matita/library_auto/nat/congruence/congruent.con n m p).
+ (cic:/matita/library_autobatch/nat/congruence/congruent.con n m p).
notation < "hvbox(n break \cong\sub p m)"
(*non associative*) with precedence 45
intros.
whd.
apply (trans_eq ? ? (y \mod p))
-[ (*qui auto non chiude il goal*)
+[ (*qui autobatch non chiude il goal*)
apply H
-| (*qui auto non chiude il goal*)
+| (*qui autobatch non chiude il goal*)
apply H1
]
qed.
theorem le_to_mod: \forall n,m:nat. n \lt m \to n = n \mod m.
intros.
-auto.
+autobatch.
(*apply (div_mod_spec_to_eq2 n m O n (n/m) (n \mod m))
[ constructor 1
[ assumption
theorem mod_mod : \forall n,p:nat. O<p \to n \mod p = (n \mod p) \mod p.
intros.
-auto.
+autobatch.
(*rewrite > (div_mod (n \mod p) p) in \vdash (? ? % ?)
[ rewrite > (eq_div_O ? p)
[ reflexivity
intros.
apply (div_mod_spec_to_eq2 n p (n/p) (n \mod p)
(n/(m*p)*m + (n \mod (m*p)/p)))
-[ auto.
+[ autobatch.
(*apply div_mod_spec_div_mod.
assumption*)
| constructor 1
- [ auto
+ [ autobatch
(*apply lt_mod_m_m.
assumption*)
| rewrite > times_plus_l.
rewrite > assoc_plus.
rewrite < div_mod
[ rewrite > assoc_times.
- rewrite < div_mod;auto
+ rewrite < div_mod;autobatch
(*[ reflexivity
| rewrite > (times_n_O O).
apply lt_times;assumption
\forall n,p:nat. O < p \to congruent n (n \mod p) p.
intros.
unfold congruent.
-auto.
+autobatch.
(*apply mod_mod.
assumption.*)
qed.
intros.
unfold congruent.
apply (div_mod_spec_to_eq2 n p (div n p) (mod n p) (r +(div m p)) (mod m p))
-[ auto
+[ autobatch
(*apply div_mod_spec_div_mod.
assumption*)
| constructor 1
- [ auto
+ [ autobatch
(*apply lt_mod_m_m.
assumption*)
|
(*rewrite > (sym_times p (m/p)).*)
(*rewrite > sym_times.*)
rewrite > assoc_plus.
- auto paramodulation.
+ autobatch paramodulation.
rewrite < div_mod.
assumption.
assumption.
apply (eq_times_plus_to_congruent n m p n2)
[ assumption
| rewrite < sym_plus.
- apply minus_to_plus;auto
+ apply minus_to_plus;autobatch
(*[ assumption
| rewrite > sym_times. assumption
]*)
rewrite > (div_mod n p) in \vdash (? ? % ?)
[ rewrite > (div_mod m p) in \vdash (? ? % ?)
[ rewrite < (sym_plus (m \mod p)).
- auto
+ autobatch
(*rewrite < H1.
rewrite < (eq_minus_minus_minus_plus ? (n \mod p)).
rewrite < minus_plus_m_m.
((n / p)*p*(m / p) + (n / p)*(m \mod p) + (n \mod p)*(m / p)))
[ assumption
| apply (trans_eq ? ? (((n/p)*p+(n \mod p))*((m/p)*p+(m \mod p))))
- [ apply eq_f2;auto(*;apply div_mod.assumption.*)
+ [ apply eq_f2;autobatch(*;apply div_mod.assumption.*)
| apply (trans_eq ? ? (((n/p)*p)*((m/p)*p) + (n/p)*p*(m \mod p) +
(n \mod p)*((m / p)*p) + (n \mod p)*(m \mod p)))
[ apply times_plus_plus
| apply eq_f2
[ rewrite < assoc_times.
- auto
+ autobatch
(*rewrite > (assoc_times (n/p) p (m \mod p)).
rewrite > (sym_times p (m \mod p)).
rewrite < (assoc_times (n/p) (m \mod p) p).
rewrite > (mod_times n m p H).
rewrite > H1.
rewrite > H2.
-auto.
+autobatch.
(*
apply sym_eq.
apply mod_times.
congruent (pi n f m) (pi n (\lambda m. mod (f m) p) m) p.
intros.
elim n;simplify
-[ auto
+[ autobatch
(*apply congruent_n_mod_n.
assumption*)
| apply congruent_times
[ assumption
- | auto
+ | autobatch
(*apply congruent_n_mod_n.
assumption*)
| (*NB: QUI AUTO NON RIESCE A CHIUDERE IL GOAL*)