apply nat_elim2
[intros.apply False_ind.apply (not_le_Sn_O ? H)
|intros.rewrite < minus_n_O.
- autobatch
+ change in H1 with (n<n1);
+ apply lt_minus_m; autobatch depth=2;
|intros.
generalize in match H2.
apply (nat_case n1)
rewrite > eq_minus_S_pred.
apply lt_pred
[unfold lt.apply le_plus_to_minus_r.applyS H1
- |apply H[autobatch|assumption]
+ |apply H[autobatch depth=2|assumption]
]
]
qed.
theorem lt_O_minus_to_lt: \forall a,b:nat.
O \lt b-a \to a \lt b.
-intros.
+intros. applyS (lt_minus_to_plus O a b). assumption;
+(*
rewrite > (plus_n_O a).
rewrite > (sym_plus a O).
apply (lt_minus_to_plus O a b).
assumption.
+*)
qed.
theorem lt_minus_to_lt_plus:
\forall n,m,p. n - m < p \to n < m + p.
intros 2.
apply (nat_elim2 ? ? ? ? n m)
- [simplify.intros.autobatch.
+ [simplify.intros.
+ lapply depth=0 le_n; autobatch;
|intros 2.rewrite < minus_n_O.
intro.assumption
|intros.
intros.
apply sym_eq.
apply plus_to_minus.
-autobatch.
+autobatch;
qed.
theorem distributive_times_minus: distributive nat times minus.
theorem eq_plus_minus_minus_minus: \forall n,m,p:nat. p \le m \to m \le n \to
p+(n-m) = n-(m-p).
-intros.
+intros.
apply sym_eq.
apply plus_to_minus.
rewrite < assoc_plus.