Extensibella Example: lambda_calculus:let

Language Specification

File: def.sos

[Reduce File] [Raw File]
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)

Reasoning

[Show All Proofs] [Hide All Proofs] [Raw File]

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]


Back to example home