Require Export Bool.
Require Export Arith.
Require Export Compare_dec.
Require Export Peano_dec.
Require Export MyList.
Require Export MyRelations.
Set Implicit Arguments.
Unset Strict Implicit.
Definition max_nat (n m : nat) :=
match le_gt_dec n m with
| left _ => m
| right _ => n
end.
intros.
unfold max_nat in |- *.
elim (le_gt_dec n m); auto with arith.
Qed.
Require Export Relation_Definitions.
Definition decide (P : Prop) := {P} + {~ P}.
Hint Unfold decide: core.
Inductive Acc3 (A B C : Set) (R : relation (A * (B * C))) :
A -> B -> C -> Prop :=
Acc3_intro :
forall (x : A) (x0 : B) (x1 : C),
(forall (y : A) (y0 : B) (y1 : C),
R (y, (y0, y1)) (x, (x0, x1)) -> Acc3 R y y0 y1) ->
Acc3 R x x0 x1.

Lemma Acc3_rec :
forall (A B C : Set) (R : relation (A * (B * C))) (P : A -> B -> C -> Set),
(forall (x : A) (x0 : B) (x1 : C),
(forall (y : A) (y0 : B) (y1 : C),
R (y, (y0, y1)) (x, (x0, x1)) -> P y y0 y1) ->
P x x0 x1) ->
forall (x : A) (x0 : B) (x1 : C), Acc3 R x x0 x1 -> P x x0 x1.