(* Definition des composantes du calcul *)

  Inductive calc : Set :=
    | Pos : calc
    | Neg : calc.(* Definition des composantes du calcul *)

  Inductive calc : Set :=
    | Pos : calc
    | Neg : calc.(* Definition des composantes du calcul *)

  Inductive calc : Set :=
    | Pos : calc
    | Neg : calc.Inductive srt_v6 : Set :=
    | Sprop : calc -> srt_v6
    | Stype : nat -> srt_v6.Inductive srt_v6 : Set :=
    | Sprop : calc -> srt_v6
    | Stype : nat -> srt_v6.Inductive srt_v6 : Set :=
    | Sprop : calc -> srt_v6
    | Stype : nat -> srt_v6.Inductive axiom_v6 : srt_v6 -> srt_v6 -> Prop :=
    | ax_prop : forall (c : calc) (n : nat), axiom_v6 (Sprop c) (Stype n)
    | ax_type : forall n m : nat, n < m -> axiom_v6 (Stype n) (Stype m).Inductive axiom_v6 : srt_v6 -> srt_v6 -> Prop :=
    | ax_prop : forall (c : calc) (n : nat), axiom_v6 (Sprop c) (Stype n)
    | ax_type : forall n m : nat, n < m -> axiom_v6 (Stype n) (Stype m).Inductive axiom_v6 : srt_v6 -> srt_v6 -> Prop :=
    | ax_prop : forall (c : calc) (n : nat), axiom_v6 (Sprop c) (Stype n)
    | ax_type : forall n m : nat, n < m -> axiom_v6 (Stype n) (Stype m).Inductive rules_v6 : srt_v6 -> srt_v6 -> srt_v6 -> Prop :=
    | rule_prop_l : forall (c : calc) (s : srt_v6), rules_v6 (Sprop c) s s
    | rule_prop_r :
        forall (c : calc) (s : srt_v6), rules_v6 s (Sprop c) (Sprop c)
    | rule_type :
        forall n m p : nat,
        n <= p -> m <= p -> rules_v6 (Stype n) (Stype m) (Stype p).Inductive rules_v6 : srt_v6 -> srt_v6 -> srt_v6 -> Prop :=
    | rule_prop_l : forall (c : calc) (s : srt_v6), rules_v6 (Sprop c) s s
    | rule_prop_r :
        forall (c : calc) (s : srt_v6), rules_v6 s (Sprop c) (Sprop c)
    | rule_type :
        forall n m p : nat,
        n <= p -> m <= p -> rules_v6 (Stype n) (Stype m) (Stype p).Inductive rules_v6 : srt_v6 -> srt_v6 -> srt_v6 -> Prop :=
    | rule_prop_l : forall (c : calc) (s : srt_v6), rules_v6 (Sprop c) s s
    | rule_prop_r :
        forall (c : calc) (s : srt_v6), rules_v6 s (Sprop c) (Sprop c)
    | rule_type :
        forall n m p : nat,
        n <= p -> m <= p -> rules_v6 (Stype n) (Stype m) (Stype p).Inductive rules_v6 : srt_v6 -> srt_v6 -> srt_v6 -> Prop :=
    | rule_prop_l : forall (c : calc) (s : srt_v6), rules_v6 (Sprop c) s s
    | rule_prop_r :
        forall (c : calc) (s : srt_v6), rules_v6 s (Sprop c) (Sprop c)
    | rule_type :
        forall n m p : nat,
        n <= p -> m <= p -> rules_v6 (Stype n) (Stype m) (Stype p).Inductive univ_v6 : srt_v6 -> srt_v6 -> Prop :=
    | univ_prop : forall (c : calc) (n : nat), univ_v6 (Sprop c) (Stype n)
    | univ_type : forall n m : nat, n <= m -> univ_v6 (Stype n) (Stype m).Inductive univ_v6 : srt_v6 -> srt_v6 -> Prop :=
    | univ_prop : forall (c : calc) (n : nat), univ_v6 (Sprop c) (Stype n)
    | univ_type : forall n m : nat, n <= m -> univ_v6 (Stype n) (Stype m).Inductive univ_v6 : srt_v6 -> srt_v6 -> Prop :=
    | univ_prop : forall (c : calc) (n : nat), univ_v6 (Sprop c) (Stype n)
    | univ_type : forall n m : nat, n <= m -> univ_v6 (Stype n) (Stype m).Definition univ : srt_v6 -> srt_v6 -> Prop := clos_refl_trans _ univ_v6.Inductive inv_univ : srt_v6 -> srt_v6 -> Prop :=
    | iu_prop : forall c : calc, inv_univ (Sprop c) (Sprop c)
    | iu_pr_ty : forall (c : calc) (n : nat), inv_univ (Sprop c) (Stype n)
    | iu_type : forall n m : nat, n <= m -> inv_univ (Stype n) (Stype m).Inductive inv_univ : srt_v6 -> srt_v6 -> Prop :=
    | iu_prop : forall c : calc, inv_univ (Sprop c) (Sprop c)
    | iu_pr_ty : forall (c : calc) (n : nat), inv_univ (Sprop c) (Stype n)
    | iu_type : forall n m : nat, n <= m -> inv_univ (Stype n) (Stype m).Inductive inv_univ : srt_v6 -> srt_v6 -> Prop :=
    | iu_prop : forall c : calc, inv_univ (Sprop c) (Sprop c)
    | iu_pr_ty : forall (c : calc) (n : nat), inv_univ (Sprop c) (Stype n)
    | iu_type : forall n m : nat, n <= m -> inv_univ (Stype n) (Stype m).Inductive inv_univ : srt_v6 -> srt_v6 -> Prop :=
    | iu_prop : forall c : calc, inv_univ (Sprop c) (Sprop c)
    | iu_pr_ty : forall (c : calc) (n : nat), inv_univ (Sprop c) (Stype n)
    | iu_type : forall n m : nat, n <= m -> inv_univ (Stype n) (Stype m).

Lemma univ_inv : forall s s' : srt_v6, univ s s' -> forall P : Prop, (inv_univ s s' -> P) -> P.