Record norm_sound_CTS : Set := 
    {ncts_sr : rule_sound cts_pts_functor hdr;
     ncts_typ_sn :
      forall (e : env) (t T : term),
      typ cts_pts_functor e t T -> sn red_step e t;
     ncts_axiom : forall s : sort, ppal_dec (axiom s) rt_univ;
     ncts_rule :
      forall x1 x2 : sort,
      {x3 : sort | rule x1 x2 x3 & 
      forall s1 s2 s3 : sort,
      rule s1 s2 s3 -> rt_univ x1 s1 -> rt_univ x2 s2 -> rt_univ x3 s3};
     ncts_hierarchy :
      forall s1 s2 : sort,
      rt_univ s1 s2 -> typed_sort axiom s2 -> typed_sort axiom s1}.Record norm_sound_CTS : Set := 
    {ncts_sr : rule_sound cts_pts_functor hdr;
     ncts_typ_sn :
      forall (e : env) (t T : term),
      typ cts_pts_functor e t T -> sn red_step e t;
     ncts_axiom : forall s : sort, ppal_dec (axiom s) rt_univ;
     ncts_rule :
      forall x1 x2 : sort,
      {x3 : sort | rule x1 x2 x3 & 
      forall s1 s2 s3 : sort,
      rule s1 s2 s3 -> rt_univ x1 s1 -> rt_univ x2 s2 -> rt_univ x3 s3};
     ncts_hierarchy :
      forall s1 s2 : sort,
      rt_univ s1 s2 -> typed_sort axiom s2 -> typed_sort axiom s1}.Record norm_sound_CTS : Set := 
    {ncts_sr : rule_sound cts_pts_functor hdr;
     ncts_typ_sn :
      forall (e : env) (t T : term),
      typ cts_pts_functor e t T -> sn red_step e t;
     ncts_axiom : forall s : sort, ppal_dec (axiom s) rt_univ;
     ncts_rule :
      forall x1 x2 : sort,
      {x3 : sort | rule x1 x2 x3 & 
      forall s1 s2 s3 : sort,
      rule s1 s2 s3 -> rt_univ x1 s1 -> rt_univ x2 s2 -> rt_univ x3 s3};
     ncts_hierarchy :
      forall s1 s2 : sort,
      rt_univ s1 s2 -> typed_sort axiom s2 -> typed_sort axiom s1}.Record norm_sound_CTS : Set := 
    {ncts_sr : rule_sound cts_pts_functor hdr;
     ncts_typ_sn :
      forall (e : env) (t T : term),
      typ cts_pts_functor e t T -> sn red_step e t;
     ncts_axiom : forall s : sort, ppal_dec (axiom s) rt_univ;
     ncts_rule :
      forall x1 x2 : sort,
      {x3 : sort | rule x1 x2 x3 & 
      forall s1 s2 s3 : sort,
      rule s1 s2 s3 -> rt_univ x1 s1 -> rt_univ x2 s2 -> rt_univ x3 s3};
     ncts_hierarchy :
      forall s1 s2 : sort,
      rt_univ s1 s2 -> typed_sort axiom s2 -> typed_sort axiom s1}.Record norm_sound_CTS : Set := 
    {ncts_sr : rule_sound cts_pts_functor hdr;
     ncts_typ_sn :
      forall (e : env) (t T : term),
      typ cts_pts_functor e t T -> sn red_step e t;
     ncts_axiom : forall s : sort, ppal_dec (axiom s) rt_univ;
     ncts_rule :
      forall x1 x2 : sort,
      {x3 : sort | rule x1 x2 x3 & 
      forall s1 s2 s3 : sort,
      rule s1 s2 s3 -> rt_univ x1 s1 -> rt_univ x2 s2 -> rt_univ x3 s3};
     ncts_hierarchy :
      forall s1 s2 : sort,
      rt_univ s1 s2 -> typed_sort axiom s2 -> typed_sort axiom s1}.Record norm_sound_CTS : Set := 
    {ncts_sr : rule_sound cts_pts_functor hdr;
     ncts_typ_sn :
      forall (e : env) (t T : term),
      typ cts_pts_functor e t T -> sn red_step e t;
     ncts_axiom : forall s : sort, ppal_dec (axiom s) rt_univ;
     ncts_rule :
      forall x1 x2 : sort,
      {x3 : sort | rule x1 x2 x3 & 
      forall s1 s2 s3 : sort,
      rule s1 s2 s3 -> rt_univ x1 s1 -> rt_univ x2 s2 -> rt_univ x3 s3};
     ncts_hierarchy :
      forall s1 s2 : sort,
      rt_univ s1 s2 -> typed_sort axiom s2 -> typed_sort axiom s1}.

Lemma cumul_infer_rule : forall x1 x2 : sort, {x3 : sort | ppal (rule_sat cts_pts_functor x1 x2) (fun s1 s2 => forall e : env, rt_cumul e (Srt s1) (Srt s2)) x3}.