Module lambda_calculus:let
Builds on lambda_calculus:host
e ::= ...
| let(string, e, e)
-------------------------------------------- [Proj-Let]
|{e}- let(X, E1, E2) ~~> app(abs(X, E2), E1)
eval E1 E11
subst X E11 E2 E
eval E V
--------------------- [E-Let]
eval let(X, E1, E2) V
X != Y
subst X R E1 S1
subst X R E2 S2
-------------------------------------------- [S-Let-NEq]
subst X R let(Y, E1, E2) app(abs(Y, S2), S1)
subst X R E1 S1
-------------------------------------------- [S-Let-Eq]
subst X R let(X, E1, E2) app(abs(X, E2), S1)
Click on a command or tactic to see a detailed view of its use.
Module lambda_calculus:let. Prove_Constraint lambda_calculus:host:proj_is. [Show Proof] Add_Proj_Rel lambda_calculus:host:is_e. Prove_Ext_Ind lambda_calculus:host:is_e. [Show Proof] Prove_Constraint lambda_calculus:host:proj_same. [Show Proof] Prove lambda_calculus:host:subst_exists. [Show Proof] Prove lambda_calculus:host:subst_is. [Show Proof] Prove lambda_calculus:host:eval_is. [Show Proof] Prove lambda_calculus:host:subst_unique. [Show Proof] Prove lambda_calculus:host:eval_unique. [Show Proof] Prove_Constraint lambda_calculus:host:proj_subst. [Show Proof] Prove_Constraint lambda_calculus:host:proj_subst_same. [Show Proof] Prove_Constraint lambda_calculus:host:proj_eval. [Show Proof] Prove_Constraint lambda_calculus:host:proj_eval_same. [Show Proof] Add_Ext_Size lambda_calculus:host:eval. Add_Proj_Rel lambda_calculus:host:eval. Prove_Ext_Ind lambda_calculus:host:eval. [Show Proof]