(********************************************************************)
(*      max                                                         *)


Fixpoint max (n m : nat) {struct n} : nat :=
  match n with
  | O => m
  | S p => match m with
           | O => S p
           | S q => S (max p q)
           end
  end.

(* Specifications: *)
Lemma le_n_max1 : forall n m : nat, n <= max n m.
Lemma le_n_max2 : forall n m : nat, n <= max m n.
Lemma max_n_n : forall n : nat, max n n = n.
Lemma max_Sn_n : forall n : nat, max (S n) n = S n.
Lemma max_n_Sn : forall n : nat, max n (S n) = S n.
Lemma max_n_O : forall n : nat, max n 0 = n.