Inductive cumul : env -> term -> term -> Prop :=
    | c_eq : forall (e : env) (x y : term), conv hdr e x y -> cumul e x y
    | c_rule :
        forall (e : env) (s1 s2 : sort),
        univ s1 s2 -> cumul e (Srt s1) (Srt s2)
    | c_prod :
        forall (e : env) (A B C D : term),
        cumul e C A -> cumul (Ax C :: e) B D -> cumul e (Prod A B) (Prod C D).Inductive cumul : env -> term -> term -> Prop :=
    | c_eq : forall (e : env) (x y : term), conv hdr e x y -> cumul e x y
    | c_rule :
        forall (e : env) (s1 s2 : sort),
        univ s1 s2 -> cumul e (Srt s1) (Srt s2)
    | c_prod :
        forall (e : env) (A B C D : term),
        cumul e C A -> cumul (Ax C :: e) B D -> cumul e (Prod A B) (Prod C D).Inductive cumul : env -> term -> term -> Prop :=
    | c_eq : forall (e : env) (x y : term), conv hdr e x y -> cumul e x y
    | c_rule :
        forall (e : env) (s1 s2 : sort),
        univ s1 s2 -> cumul e (Srt s1) (Srt s2)
    | c_prod :
        forall (e : env) (A B C D : term),
        cumul e C A -> cumul (Ax C :: e) B D -> cumul e (Prod A B) (Prod C D).Inductive cumul : env -> term -> term -> Prop :=
    | c_eq : forall (e : env) (x y : term), conv hdr e x y -> cumul e x y
    | c_rule :
        forall (e : env) (s1 s2 : sort),
        univ s1 s2 -> cumul e (Srt s1) (Srt s2)
    | c_prod :
        forall (e : env) (A B C D : term),
        cumul e C A -> cumul (Ax C :: e) B D -> cumul e (Prod A B) (Prod C D).Definition cumul_rule : Basic_rule.Definition cts_pts_functor : PTS_sub_spec :=
    Build_PTS_sub_spec axiom rule (canonical_subtyping cumul_rule).

(* Specifications: *)
Lemma cumul_prod : forall (e : env) (T A B : term), rt_cumul (Ax T :: e) A B -> rt_cumul e (Prod T A) (Prod T B).