(* End of proof of lem_couple_reunion_prop                                 *)

(***************************************************************************)
(*                        Les n-uplets                                     *)
(***************************************************************************)
Inductive isTupple : nat -> E -> Prop :=
  | c_0_tupple : isTupple 0 Vide
  | c_1_tupple : forall a : E, isTupple 1 a
  | c_2_tupple : forall a b : E, isTupple 2 (couple a b)
  | c_n_tupple :
      forall (a b : E) (n : nat),
      isTupple (S (S n)) b -> isTupple (S (S (S n))) (couple a b).(* End of proof of lem_couple_reunion_prop                                 *)

(***************************************************************************)
(*                        Les n-uplets                                     *)
(***************************************************************************)
Inductive isTupple : nat -> E -> Prop :=
  | c_0_tupple : isTupple 0 Vide
  | c_1_tupple : forall a : E, isTupple 1 a
  | c_2_tupple : forall a b : E, isTupple 2 (couple a b)
  | c_n_tupple :
      forall (a b : E) (n : nat),
      isTupple (S (S n)) b -> isTupple (S (S (S n))) (couple a b).(* End of proof of lem_couple_reunion_prop                                 *)

(***************************************************************************)
(*                        Les n-uplets                                     *)
(***************************************************************************)
Inductive isTupple : nat -> E -> Prop :=
  | c_0_tupple : isTupple 0 Vide
  | c_1_tupple : forall a : E, isTupple 1 a
  | c_2_tupple : forall a b : E, isTupple 2 (couple a b)
  | c_n_tupple :
      forall (a b : E) (n : nat),
      isTupple (S (S n)) b -> isTupple (S (S (S n))) (couple a b).(* End of proof of lem_couple_reunion_prop                                 *)

(***************************************************************************)
(*                        Les n-uplets                                     *)
(***************************************************************************)
Inductive isTupple : nat -> E -> Prop :=
  | c_0_tupple : isTupple 0 Vide
  | c_1_tupple : forall a : E, isTupple 1 a
  | c_2_tupple : forall a b : E, isTupple 2 (couple a b)
  | c_n_tupple :
      forall (a b : E) (n : nat),
      isTupple (S (S n)) b -> isTupple (S (S (S n))) (couple a b).(* End of proof of lem_couple_reunion_prop                                 *)

(***************************************************************************)
(*                        Les n-uplets                                     *)
(***************************************************************************)
Inductive isTupple : nat -> E -> Prop :=
  | c_0_tupple : isTupple 0 Vide
  | c_1_tupple : forall a : E, isTupple 1 a
  | c_2_tupple : forall a b : E, isTupple 2 (couple a b)
  | c_n_tupple :
      forall (a b : E) (n : nat),
      isTupple (S (S n)) b -> isTupple (S (S (S n))) (couple a b).Fixpoint cart_power (m : nat) : E -> E :=
  fun a : E =>
  match m with
  | O => Vide
  | S O => a
  | S (S n as N) => cartesien a (cart_power N a)
  end.

(* Specifications: *)
Lemma cart_power_eq1 : forall a : E, cart_power 0 a = Vide.
Lemma cart_power_eq2 : forall a : E, cart_power 1 a = a.
Lemma cart_power_eq3 : forall (n : nat) (a : E), cart_power (S (S n)) a = cartesien a (cart_power (S n) a).
Lemma lem_eq_cart_power : forall a : E, cart_power 2 a = cartesien a a.