Fixpoint exp_2 (n : nat) : nat :=
  match n return nat with
  | O =>
      (*O*)  1 
      (*S p*) 
  | S p => 2 * exp_2 p
  end.Fixpoint exp_n (n m : nat) {struct m} : nat :=
  match m return nat with
  | O =>
      (*O*)  1 
      (*S p*) 
  | S p => n * exp_n n p
  end.

Lemma exp_n_incr : forall n m p : nat, n <= m -> exp_n n p <= exp_n m p.