Inductive calc : Set :=
    | Pos : calc
    | Neg : calc.Inductive calc : Set :=
    | Pos : calc
    | Neg : calc.Inductive calc : Set :=
    | Pos : calc
    | Neg : calc.Inductive srt_ecc : Set :=
    | Sprop : calc -> srt_ecc
    | Stype : calc -> nat -> srt_ecc.Inductive srt_ecc : Set :=
    | Sprop : calc -> srt_ecc
    | Stype : calc -> nat -> srt_ecc.Inductive srt_ecc : Set :=
    | Sprop : calc -> srt_ecc
    | Stype : calc -> nat -> srt_ecc.Inductive axiom_ecc : srt_ecc -> srt_ecc -> Prop :=
    | ax_prop : forall (c : calc) (n : nat), axiom_ecc (Sprop c) (Stype c n)
    | ax_type :
        forall (c : calc) (n m : nat),
        n < m -> axiom_ecc (Stype c n) (Stype c m).Inductive axiom_ecc : srt_ecc -> srt_ecc -> Prop :=
    | ax_prop : forall (c : calc) (n : nat), axiom_ecc (Sprop c) (Stype c n)
    | ax_type :
        forall (c : calc) (n m : nat),
        n < m -> axiom_ecc (Stype c n) (Stype c m).Inductive axiom_ecc : srt_ecc -> srt_ecc -> Prop :=
    | ax_prop : forall (c : calc) (n : nat), axiom_ecc (Sprop c) (Stype c n)
    | ax_type :
        forall (c : calc) (n m : nat),
        n < m -> axiom_ecc (Stype c n) (Stype c m).Inductive rules_ecc : srt_ecc -> srt_ecc -> srt_ecc -> Prop :=
    | rule_prop_l : forall (c : calc) (s : srt_ecc), rules_ecc (Sprop c) s s
    | rule_prop_r :
        forall (c : calc) (s : srt_ecc), rules_ecc s (Sprop c) (Sprop c)
    | rule_type :
        forall (c1 c2 : calc) (n m p : nat),
        n <= p -> m <= p -> rules_ecc (Stype c1 n) (Stype c2 m) (Stype c2 p).Inductive rules_ecc : srt_ecc -> srt_ecc -> srt_ecc -> Prop :=
    | rule_prop_l : forall (c : calc) (s : srt_ecc), rules_ecc (Sprop c) s s
    | rule_prop_r :
        forall (c : calc) (s : srt_ecc), rules_ecc s (Sprop c) (Sprop c)
    | rule_type :
        forall (c1 c2 : calc) (n m p : nat),
        n <= p -> m <= p -> rules_ecc (Stype c1 n) (Stype c2 m) (Stype c2 p).Inductive rules_ecc : srt_ecc -> srt_ecc -> srt_ecc -> Prop :=
    | rule_prop_l : forall (c : calc) (s : srt_ecc), rules_ecc (Sprop c) s s
    | rule_prop_r :
        forall (c : calc) (s : srt_ecc), rules_ecc s (Sprop c) (Sprop c)
    | rule_type :
        forall (c1 c2 : calc) (n m p : nat),
        n <= p -> m <= p -> rules_ecc (Stype c1 n) (Stype c2 m) (Stype c2 p).Inductive rules_ecc : srt_ecc -> srt_ecc -> srt_ecc -> Prop :=
    | rule_prop_l : forall (c : calc) (s : srt_ecc), rules_ecc (Sprop c) s s
    | rule_prop_r :
        forall (c : calc) (s : srt_ecc), rules_ecc s (Sprop c) (Sprop c)
    | rule_type :
        forall (c1 c2 : calc) (n m p : nat),
        n <= p -> m <= p -> rules_ecc (Stype c1 n) (Stype c2 m) (Stype c2 p).Inductive univ_ecc : srt_ecc -> srt_ecc -> Prop :=
      univ_type :
        forall (c : calc) (n m : nat),
        n <= m -> univ_ecc (Stype c n) (Stype c m).Inductive univ_ecc : srt_ecc -> srt_ecc -> Prop :=
      univ_type :
        forall (c : calc) (n m : nat),
        n <= m -> univ_ecc (Stype c n) (Stype c m).Definition univ : relation srt_ecc := clos_refl_trans _ univ_ecc.Inductive inv_univ : srt_ecc -> srt_ecc -> Prop :=
    | iu_prop : forall c : calc, inv_univ (Sprop c) (Sprop c)
    | iu_type :
        forall (c : calc) (n m : nat),
        n <= m -> inv_univ (Stype c n) (Stype c m).Inductive inv_univ : srt_ecc -> srt_ecc -> Prop :=
    | iu_prop : forall c : calc, inv_univ (Sprop c) (Sprop c)
    | iu_type :
        forall (c : calc) (n m : nat),
        n <= m -> inv_univ (Stype c n) (Stype c m).Inductive inv_univ : srt_ecc -> srt_ecc -> Prop :=
    | iu_prop : forall c : calc, inv_univ (Sprop c) (Sprop c)
    | iu_type :
        forall (c : calc) (n m : nat),
        n <= m -> inv_univ (Stype c n) (Stype c m).

Lemma ecc_inf_rule : forall x1 x2 : srt_ecc, {x3 : srt_ecc | rules_ecc x1 x2 x3 & forall s1 s2 s3 : srt_ecc, rules_ecc s1 s2 s3 -> univ x1 s1 -> univ x2 s2 -> univ x3 s3}.