Module walkthrough:host tm ::= var(string) | abs(string, ty, tm) | app(tm, tm) Projection tm : [(string, ty)] ty ::= arrowTy(ty, ty) | intTy Projection ty : Judgment eval : tm* tm Judgment subst : string tm tm* tm Judgment value : tm* eval T1 T11 ----------------------------- [E-App-Step1] eval app(T1, T2) app(T11, T2) value T1 eval T2 T21 ----------------------------- [E-App-Step2] eval app(T1, T2) app(T1, T21) value T2 subst X T2 Body V -------------------------------- [E-App-Subst] eval app(abs(X, Ty, Body), T2) V Extensibella_Stand_In { Ctx |{tm}- T ~~> T_T eval T_T T2 -------------------- [E-Q] eval T T1 } X != Y ----------------------- [S-Var-NEq] subst X R var(Y) var(Y) ------------------ [S-Var-Eq] subst X R var(X) R X != Y subst X R B S ------------------------------------- [S-Abs-NEq] subst X R abs(Y, Ty, B) abs(Y, Ty, S) ------------------------------------- [S-Abs-Eq] subst X R abs(X, Ty, B) abs(X, Ty, B) subst X R T1 S1 subst X R T2 S2 --------------------------------- [S-App] subst X R app(T1, T2) app(S1, S2) ------------------- [V-Abs] value abs(X, Ty, T) Judgment typeOf : [(string, ty)] tm* ty lookup Ctx X Ty -------------------- [T-Var] typeOf Ctx var(X) Ty typeOf (X, Ty1)::Ctx Body Ty2 ---------------------------------------------- [T-Abs] typeOf Ctx abs(X, Ty1, Body) arrowTy(Ty1, Ty2) typeOf Ctx T1 arrowTy(Ty1, Ty2) typeOf Ctx T2 Ty1 ------------------------------- [T-App] typeOf Ctx app(T1, T2) Ty2
Click on a command or tactic to see a detailed view of its use.
Module walkthrough:host. Extensible_Theorem typeOf_unique : forall Ctx T TyA TyB, TyA : typeOf Ctx T TyA -> TyB : typeOf Ctx T TyB -> TyA = TyB on TyA. [Show Proof] Extensible_Theorem ty_lookup : forall Ctx1 Ctx2 T Ty, Ty : typeOf Ctx1 T Ty -> L : (forall X XTy, lookup Ctx1 X XTy -> lookup Ctx2 X XTy) -> typeOf Ctx2 T Ty on Ty. [Show Proof] Theorem empty_ty_any : forall T Ty Ctx, typeOf [] T Ty -> typeOf Ctx T Ty. [Show Proof] Extensible_Theorem subst_type_preservation : forall T Ctx X XTy Ty R S, TTy : typeOf ((X, XTy)::Ctx) T Ty -> S : subst X R T S -> RTy : typeOf [] R XTy -> typeOf Ctx S Ty on S. [Show Proof] Extensible_Theorem type_preservation : forall T Ty T', Ty : typeOf [] T Ty -> Ev : eval T T' -> typeOf [] T' Ty on Ev. [Show Proof] Projection_Constraint proj_type_same : forall G T Ty T_T, G |{tm}- T ~~> T_T -> typeOf G T Ty -> typeOf G T_T Ty. Ext_Size eval T T'. Proj_Rel eval T T'. Ext_Ind forall G T T' Ty, eval T T' with Ty : typeOf G T Ty. [Show Proof]