Module lambda_calculus:host
e ::= var(string)
| abs(string, e)
| app(e, e)
| intE(int)
| plus(e, e)
Projection e :
Module lambda_calculus:host
Judgment eval : e* e
------------------------------ [E-Abs]
eval abs(X, Body) abs(X, Body)
eval E1 abs(X, Body)
eval E2 V2
subst X V2 Body B
eval B V
-------------------- [E-App]
eval app(E1, E2) V
-------------------- [E-Int]
eval intE(I) intE(I)
eval E1 intE(I1)
eval E2 intE(I2)
I1 + I2 = I
------------------------- [E-Plus]
eval plus(E1, E2) intE(I)
Extensibella_Stand_In {
|{e}- E ~~> E_T
eval E_T V
--------------- [E-Q]
eval E V
}
Judgment subst : string e e* e
------------------ [S-Var-Eq]
subst X R var(X) R
X != Y
----------------------- [S-Var-NEq]
subst X R var(Y) var(Y)
----------------------------------- [S-Abs-Eq]
subst X R abs(X, Body) abs(X, Body)
X != Y
subst X R Body B
-------------------------------- [S-Abs-NEq]
subst X R abs(Y, Body) abs(Y, B)
subst X R E1 S1
subst X R E2 S2
--------------------------------- [S-App]
subst X R app(E1, E2) app(S1, S2)
------------------------- [S-Int]
subst X R intE(I) intE(I)
subst X R E1 S1
subst X R E2 S2
----------------------------------- [S-Plus]
subst X R plus(E1, E2) plus(S1, S2)
Click on a command or tactic to see a detailed view of its use.
Module lambda_calculus:host. Projection_Constraint proj_is : forall E E', |{e}- E ~~> E' -> is_e E -> is_e E'. %Generally a good idea to include this so extensions can prove things %based on the structure of a term Proj_Rel is_e E. Ext_Ind forall E, is_e E. [Show Proof] Projection_Constraint proj_same : forall E E1 E2, |{e}- E ~~> E1 -> |{e}- E ~~> E2 -> E1 = E2. Extensible_Theorem subst_exists : forall X R E, IsE : is_e E -> IsX : is_string X -> IsR : is_e R -> exists S, subst X R E S on IsE. [Show Proof] Extensible_Theorem subst_is : forall X R E S, IsE : is_e E -> IsX : is_string X -> IsR : is_e R -> S : subst X R E S -> is_e S on S. [Show Proof] Extensible_Theorem eval_is : forall E V, IsE : is_e E -> Ev : eval E V -> is_e V on Ev. [Show Proof] Extensible_Theorem subst_unique : forall X R E SA SB, IsE : is_e E -> IsX : is_string X -> IsR : is_e R -> SA : subst X R E SA -> SB : subst X R E SB -> SA = SB on SA. [Show Proof] Extensible_Theorem eval_unique : forall E VA VB, IsE : is_e E -> EvA : eval E VA -> EvB : eval E VB -> VA = VB on EvA. [Show Proof] %anything evaluation-related must be the same across projection Projection_Constraint proj_subst : forall X R E S E', Proj : |{e}- E ~~> E' -> IsE : is_e E -> IsX : is_string X -> IsR : is_e R -> S : subst X R E S -> exists S', subst X R E' S'. Projection_Constraint proj_subst_same : forall X R E S E' S', Proj : |{e}- E ~~> E' -> IsE : is_e E -> IsX : is_string X -> IsR : is_e R -> S : subst X R E S -> S' : subst X R E' S' -> S = S'. Projection_Constraint proj_eval : forall E E' V, Proj : |{e}- E ~~> E' -> IsE : is_e E -> Ev : eval E V -> exists V', eval E' V'. Projection_Constraint proj_eval_same : forall E E' V V', Proj : |{e}- E ~~> E' -> IsE : is_e E -> Ev : eval E V -> Ev' : eval E' V' -> V = V'. Ext_Size eval E V. Proj_Rel eval E V. Ext_Ind forall E V, eval E V. [Show Proof]