Definition e_P1 (b : wsort) (U : TS b) : nat :=
  (fix F (w : wsort) (t : TS w) {struct t} : nat :=
     match t with
     | var n => power2 (S n)
     | app t0 t1 => F wt t0 + F wt t1
     | lambda t0 => F wt t0 + 2
     | env t0 t1 => F wt t0 * F ws t1
     | id => 2
     | shift => 2
     | cons t0 t1 => F wt t0 + F ws t1
     | comp t0 t1 => F ws t0 * F ws t1
     | lift t0 => F ws t0
     | meta_X _ => 2
     | meta_x _ => 2
     end) b U.(* var *) 
(* app *) 
(* lam *) 
(* env *) 
(*  id *)  
(*  |  *) 
(*  .  *) 
(*  o  *) 
(*  || *) 
(*  X  *) 
(*  x  *)  

Notation P1 := (e_P1 _) (only parsing).

(* Specifications: *)
Theorem gt_P1_1 : forall (b : wsort) (M : TS b), e_P1 _ M > 1.
Theorem P1_app : forall M N : terms, reg_app M N -> e_P1 _ M = e_P1 _ N.
Theorem P1_lambda : forall M N : terms, reg_lambda M N -> e_P1 _ M > e_P1 _ N.
Theorem P1_clos : forall M N : terms, reg_clos M N -> e_P1 _ M = e_P1 _ N.
Theorem P1_varshift1 : forall M N : terms, reg_varshift1 M N -> e_P1 _ M = e_P1 _ N.
Theorem P1_varshift2 : forall M N : terms, reg_varshift2 M N -> e_P1 _ M = e_P1 _ N.
Theorem P1_fvarcons : forall M N : terms, reg_fvarcons M N -> e_P1 _ M > e_P1 _ N.
Theorem P1_fvarlift1 : forall M N : terms, reg_fvarlift1 M N -> e_P1 _ M > e_P1 _ N.
Theorem P1_fvarlift2 : forall M N : terms, reg_fvarlift2 M N -> e_P1 _ M > e_P1 _ N.
Theorem P1_rvarcons : forall M N : terms, reg_rvarcons M N -> e_P1 _ M > e_P1 _ N.
Theorem P1_rvarlift1 : forall M N : terms, reg_rvarlift1 M N -> e_P1 _ M = e_P1 _ N.
Theorem P1_rvarlift2 : forall M N : terms, reg_rvarlift2 M N -> e_P1 _ M = e_P1 _ N.
Theorem P1_assenv : forall M N : sub_explicits, reg_assenv M N -> e_P1 _ M = e_P1 _ N.
Theorem P1_mapenv : forall M N : sub_explicits, reg_mapenv M N -> e_P1 _ M = e_P1 _ N.
Theorem P1_shiftcons : forall M N : sub_explicits, reg_shiftcons M N -> e_P1 _ M > e_P1 _ N.
Theorem P1_shiftlift1 : forall M N : sub_explicits, reg_shiftlift1 M N -> e_P1 _ M = e_P1 _ N.
Theorem P1_shiftlift2 : forall M N : sub_explicits, reg_shiftlift2 M N -> e_P1 _ M = e_P1 _ N.
Theorem P1_lift1 : forall M N : sub_explicits, reg_lift1 M N -> e_P1 _ M = e_P1 _ N.
Theorem P1_lift2 : forall M N : sub_explicits, reg_lift2 M N -> e_P1 _ M = e_P1 _ N.
Theorem P1_liftenv : forall M N : sub_explicits, reg_liftenv M N -> e_P1 _ M > e_P1 _ N.
Theorem P1_idl : forall M N : sub_explicits, reg_idl M N -> e_P1 _ M > e_P1 _ N.
Theorem P1_idr : forall M N : sub_explicits, reg_idr M N -> e_P1 _ M > e_P1 _ N.
Theorem P1_liftid : forall M N : sub_explicits, reg_liftid M N -> e_P1 _ M = e_P1 _ N.
Theorem P1_id : forall M N : terms, reg_id M N -> e_P1 _ M > e_P1 _ N.