< Module mtc:shared_declarations.
< Extensible_Theorem type_preservation : forall TG E Ty EG V, Rel : typeOfCtx TG EG -> Ty : typeOf TG E Ty -> Ev : eval EG E V -> valueType V Ty on Ev. Proof completed.
< Extensible_Theorem value_evalStep_false : forall E E', V : value E -> Ev : evalStep E E' -> false on V. Proof completed.
< Extensible_Theorem subst_unique : forall X R E EA EB, SA : subst X R E EA -> SB : subst X R E EB -> EA = EB on SA. Proof completed.
< Extensible_Theorem evalStep_unique : forall E EA EB, EvA : evalStep E EA -> EvB : evalStep E EB -> EA = EB on EvA. Proof completed.
< Extensible_Theorem ty_lookup : forall G1 G2 E Ty, Ty : typeOf G1 E Ty -> L : (forall X XTy, lookup G1 X XTy -> lookup G2 X XTy) -> typeOf G2 E Ty on Ty. Proof completed.
< Theorem empty_ty_any : forall E Ty G, typeOf [] E Ty -> typeOf G E Ty. ============================ forall E Ty G, typeOf [] E Ty -> typeOf G E Ty
< intros T. Variables: E Ty G T : typeOf [] E Ty ============================ typeOf G E Ty
< backchain ty_lookup. Variables: E Ty G T : typeOf [] E Ty ============================ forall X XTy, lookup [] X XTy -> lookup G X XTy
< intros L. Variables: E Ty G X XTy T : typeOf [] E Ty L : lookup [] X XTy ============================ lookup G X XTy
< case L. Proof completed.
< Extensible_Theorem subst_preservation : forall X XTy TG E Ty R E', Ty : typeOf ((X, XTy)::TG) E Ty -> S : subst X R E E' -> RTy : typeOf [] R XTy -> typeOf TG E' Ty on S. Proof completed.
< Extensible_Theorem evalStep_type_preservation : forall E Ty E', Ty : typeOf [] E Ty -> Ev : evalStep E E' -> typeOf [] E' Ty on Ev. Proof completed.
< Extensible_Theorem canonical_form : forall V Ty, V : value V -> Ty : typeOf [] V Ty -> canon Ty V on V. Proof completed.
< Extensible_Theorem subst_is : forall X R E E', IsE : is_e E -> IsR : is_e R -> S : subst X R E E' -> is_e E' on S. Proof completed.
< Extensible_Theorem evalStep_is : forall E E', IsE : is_e E -> Ev : evalStep E E' -> is_e E' on Ev. Proof completed.
< Extensible_Theorem subst_total : forall X R E, IsE : is_e E -> IsX : is_string X -> IsR : is_e R -> exists E', subst X R E E' on IsE. Variables: X R IH : forall X R E, is_e E * -> is_string X -> is_e R -> exists E', subst X R E E' IsE : is_e nilE @ IsX : is_string X IsR : is_e R ============================ exists E', subst X R nilE E'
< skip. Proof completed.
< Extensible_Theorem progress : forall E Ty, IsE : is_e E -> Ty : typeOf [] E Ty -> value E \/ (exists E', evalStep E E') on Ty. Proof completed.