+theorem lt_exp_to_lt:
+\forall a,n,m. S O < a \to exp a n < exp a m \to n < m.
+intros.
+elim (le_to_or_lt_eq n m)
+ [assumption
+ |apply False_ind.
+ apply (lt_to_not_eq ? ? H1).
+ rewrite < H2.
+ reflexivity
+ |apply (le_exp_to_le a)
+ [assumption
+ |apply lt_to_le.
+ assumption
+ ]
+ ]
+qed.
+
+theorem lt_exp_to_lt1:
+\forall a,n,m. O < a \to exp n a < exp m a \to n < m.
+intros.
+elim (le_to_or_lt_eq n m)
+ [assumption
+ |apply False_ind.
+ apply (lt_to_not_eq ? ? H1).
+ rewrite < H2.
+ reflexivity
+ |apply (le_exp_to_le1 ? ? a)
+ [assumption
+ |apply lt_to_le.
+ assumption
+ ]
+ ]
+qed.
+
+theorem times_exp:
+\forall n,m,p. exp n p * exp m p = exp (n*m) p.
+intros.elim p
+ [simplify.reflexivity
+ |simplify.
+ rewrite > assoc_times.
+ rewrite < assoc_times in ⊢ (? ? (? ? %) ?).
+ rewrite < sym_times in ⊢ (? ? (? ? (? % ?)) ?).
+ rewrite > assoc_times in ⊢ (? ? (? ? %) ?).
+ rewrite < assoc_times.
+ rewrite < H.
+ reflexivity
+ ]
+qed.
+
+theorem monotonic_exp1: \forall n.
+monotonic nat le (\lambda x.(exp x n)).
+unfold monotonic. intros.
+simplify.elim n
+ [apply le_n
+ |simplify.
+ apply le_times;assumption
+ ]
+qed.
+