-theorem lt_SSSSO_to_fact: \forall n.4<n \to
-fact (2*n) \le (exp 2 ((2*n)-2))*(fact n)*(fact n).
-intros.elim H
- [apply le_fact_10
- |rewrite > times_SSO.
- change in \vdash (? ? (? (? (? ? %) ?) ?)) with (2*n1 - O);
- rewrite < minus_n_O.
- rewrite > factS.
- rewrite > factS.
- rewrite < assoc_times.
- rewrite > factS.
- apply (trans_le ? ((2*(S n1))*(2*(S n1))*(fact (2*n1))))
- [apply le_times_l.
- rewrite > times_SSO.
- apply le_times_r.
- apply le_n_Sn
- |apply (trans_le ? (2*S n1*(2*S n1)*(2\sup(2*n1-2)*n1!*n1!)))
- [apply le_times_r.assumption
- |rewrite > assoc_times.
- rewrite > ab_times_cd in \vdash (? (? ? %) ?).
- rewrite < assoc_times.
- apply le_times_l.
- rewrite < assoc_times in \vdash (? (? ? %) ?).
- rewrite > ab_times_cd.
- apply le_times_l.
- rewrite < exp_S.
- rewrite < exp_S.
- apply le_exp
- [apply lt_O_S
- |rewrite > eq_minus_S_pred.
- rewrite < S_pred
- [rewrite > eq_minus_S_pred.
- rewrite < S_pred
- [rewrite < minus_n_O.
- apply le_n
- |elim H1;simplify
- [apply lt_O_S
- |apply lt_O_S
- ]
- ]
- |elim H1;simplify
- [apply lt_O_S
- |rewrite < plus_n_Sm.
- rewrite < minus_n_O.
- apply lt_O_S
- ]
- ]
+theorem lt_4_to_fact: ∀n.4<n →
+ fact (2*n) ≤ (exp 2 ((2*n)-2))*(fact n)*(fact n).
+#n #ltn elim ltn
+ [@le_fact_10
+ |#m #lem #Hind
+ cut (2*(S m) = S(S (2*m))) [normalize //] #H2 >H2
+ whd in match (minus (S(S ?)) 2); <minus_n_O
+ >factS >factS <associative_times >factS
+ @(transitive_le ? ((2*(S m))*(2*(S m))*(fact (2*m))))
+ [@le_times [2:@le_n] >H2 @le_times //
+ |@(transitive_le ? (2*S m*(2*S m)*(2\sup(2*m-2)*m!*m!)))
+ [@monotonic_le_times_r //
+ |>associative_times >ab_times_cd in ⊢ (?(??%)?);
+ <associative_times @le_times [2:@le_n]
+ <associative_times in ⊢ (?(??%)?);
+ >ab_times_cd @le_times [2:@le_n] >commutative_times
+ >(commutative_times 2) @(le_exp (S(S ((2*m)-2)))) [//]
+ >eq_minus_S_pred >S_pred
+ [>eq_minus_S_pred >S_pred [<minus_n_O @le_n |elim lem //]
+ |elim lem [//] #m0 #le5m0 #Hind
+ normalize <plus_n_Sm //