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_least_prod : forall (e : env) (t : term), wf_type cts_pts_functor e t -> red_to_wf_prod_dec cts_pts_functor e t.