Library MetaCoq.Erasure.EArities






Lemma isErasable_Proof Σ Γ t :
  Is_proof Σ Γ t isErasable Σ Γ t.

Lemma it_mkProd_isArity:
   (l : list context_decl) A,
    isArity A
    isArity (it_mkProd_or_LetIn l A).

Lemma isArity_ind_type (Σ : global_env_ext) mind ind idecl :
  wf Σ
  declared_inductive (fst Σ) mind ind idecl
  isArity (ind_type idecl).

Lemma isWfArity_prod_inv:
   (Σ : global_env_ext) (Γ : context) (x : name) (x0 x1 : term),
    isWfArity typing Σ Γ (tProd x x0 x1) ( s : universe, Σ;;; Γ |- x0 : tSort s) × isWfArity typing Σ (Γ,, vass x x0) x1
.

Lemma isArity_subst:
   x2 : term, s n, isArity x2 isArity (subst s n x2).

Lemma isArity_typing_spine:
   (Σ : global_env_ext) (Γ : context) (L : list term) (T x4 : term),
    wf Σ wf_local Σ Γ
    Is_conv_to_Arity Σ Γ x4 typing_spine Σ Γ x4 L T Is_conv_to_Arity Σ Γ T.

Lemma inds_nth_error ind u l n t :
  nth_error (inds ind u l) n = Some t n, t = tInd {| inductive_mind := ind ; inductive_ind := n |} u.

Lemma it_mkProd_arity :
   (l : list context_decl) (A : term), isArity (it_mkProd_or_LetIn l A) isArity A.

Lemma isArity_mkApps t L : isArity (mkApps t L) isArity t L = [].

Lemma typing_spine_red :
   (Σ : PCUICAst.global_env_ext) Γ (args args' : list PCUICAst.term) (X : All2 (red Σ Γ) args args') (bla : wf Σ)
    (T x x0 : PCUICAst.term) (t0 : typing_spine Σ Γ x args x0) (c : Σ;;; Γ |- x0 T) (x1 : PCUICAst.term)
    (c0 : Σ;;; Γ |- x1 x), isWfArity_or_Type Σ Γ T typing_spine Σ Γ x1 args' T.

Lemma invert_it_Ind_red1 Σ L i u l t Γ : wf Σ
  red1 Σ Γ (it_mkProd_or_LetIn L (mkApps (tInd i u) l)) t L' l', t = it_mkProd_or_LetIn L' (mkApps (tInd i u) l').

Lemma invert_it_Ind_red Σ L i u l t Γ : wf Σ
  red Σ Γ (it_mkProd_or_LetIn L (mkApps (tInd i u) l)) t L' l', t = it_mkProd_or_LetIn L' (mkApps (tInd i u) l').

Lemma it_mkProd_red_Arity Σ c0 i u l : wf Σ
  ¬ Is_conv_to_Arity Σ [] (it_mkProd_or_LetIn c0 (mkApps (tInd i u) l)).

Lemma invert_it_Ind_eq_prod:
   (u : universe_instance) (i : inductive) (x : name) (x0 x1 : term) (x2 : context) (x3 : list term),
    tProd x x0 x1 = it_mkProd_or_LetIn x2 (mkApps (tInd i u) x3) (L' : context) (l' : list term), x1 = it_mkProd_or_LetIn L' (mkApps (tInd i u) l').

Lemma tConstruct_no_Type (Σ : global_env_ext) ind c u x1 : wf Σ
  isErasable Σ [] (mkApps (tConstruct ind c u) x1)
  Is_proof Σ [] (mkApps (tConstruct ind c u) x1).

Inductive conv_decls (Σ : global_env_ext) Γ (Γ' : context) : (x y : context_decl), Type :=
| conv_vass : (na na' : name) (T T' : term),
                
                Σ;;; Γ |- T = T' conv_decls Σ Γ Γ' (vass na T) (vass na' T')
| conv_vdef_type : (na : name) (b T : term),
    
    conv_decls Σ Γ Γ' (vdef na b T) (vdef na b T).

Lemma conv_context_refl (Σ : global_env_ext) Γ :
  wf Σ wf_local Σ Γ
  context_relation (@conv_decls Σ) Γ Γ.

Lemma context_conversion_red1 (Σ : global_env_ext) Γ Γ' s t : wf Σ
   context_relation (@conv_decls Σ) Γ Γ' red1 Σ Γ s t red Σ Γ' s t.

Lemma context_conversion_red (Σ : global_env_ext) Γ Γ' s t : wf Σ
  context_relation (@conv_decls Σ) Γ Γ' red Σ Γ s t red Σ Γ' s t.

Lemma isWfArity_or_Type_red:
   (Σ : global_env_ext) (Γ : context) (T : term), wf Σ wf_local Σ Γ
    isWfArity_or_Type Σ Γ T x5 : term, red Σ Γ T x5 isWfArity_or_Type Σ Γ x5.

Lemma is_prop_sort_sup:
   x1 x2 : universe, is_prop_sort (Universe.sup x1 x2) is_prop_sort x2.

Lemma is_prop_sort_prod x2 x3 :
  is_prop_sort (Universe.sort_of_product x2 x3) is_prop_sort x3.

Lemma sort_typing_spine:
   (Σ : global_env_ext) (Γ : context) (L : list term) (u : universe) (x x0 : term),
    wf Σ
    is_prop_sort u
    typing_spine Σ Γ x L x0 Σ;;; Γ |- x : tSort u u', Σ;;; Γ |- x0 : tSort u' × is_prop_sort u'.

Lemma arity_type_inv (Σ : global_env_ext) Γ t T1 T2 : wf Σ wf_local Σ Γ
  Σ ;;; Γ |- t : T1 isArity T1 Σ ;;; Γ |- t : T2 Is_conv_to_Arity Σ Γ T2.

Lemma Is_type_app (Σ : global_env_ext) Γ t L T :
  wf Σ
  wf_local Σ Γ
  Σ ;;; Γ |- mkApps t L : T
  isErasable Σ Γ t
  isErasable Σ Γ (mkApps t L).

Lemma Is_type_lambda (Σ : global_env_ext) Γ na T1 t :
  wf Σ
  wf_local Σ Γ
  isErasable Σ Γ (tLambda na T1 t)
  isErasable Σ (vass na T1 :: Γ) t.

Lemma Is_type_red (Σ : global_env_ext) Γ t v:
  wf Σ
  red Σ Γ t v
  isErasable Σ Γ t
  isErasable Σ Γ v.

Lemma Is_type_eval (Σ : global_env_ext) Γ t v:
  wf Σ
  eval Σ Γ t v
  isErasable Σ Γ t
  isErasable Σ Γ v.