Extensibella Example: stlc:let

Language Specification

File: def.sos

[Reduce File] [Raw File]
Module stlc:let

Builds on stlc:host

tm ::= ...
     | let(string, tm, tm)


typeOf Ctx T1 Ty
----------------------------------------------------- [Proj-Let]
Ctx |{tm}- let(X, T1, T2) ~~> app(abs(X, Ty, T2), T1)



eval T1 T11
----------------------------------- [E-Let-Step]
eval let(X, T1, T2) let(X, T11, T2)


value T1
subst X T1 T2 V
--------------------- [E-Let-Subst]
eval let(X, T1, T2) V



X != Y
subst X R T1 S1
subst X R T2 S2
--------------------------------------- [S-Let-NEq]
subst X R let(Y, T1, T2) let(Y, S1, S2)


subst X R T1 S1
--------------------------------------- [S-Let-Eq]
subst X R let(X, T1, T2) let(X, S1, T2)



typeOf Ctx T1 Ty1
typeOf (X, Ty1)::Ctx T2 Ty2
----------------------------- [T-Let]
typeOf Ctx let(X, T1, T2) Ty2

Reasoning

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

Click on a command or tactic to see a detailed view of its use.

Module stlc:let.

Prove_Constraint stlc:host:proj_ty_is.


Prove stlc:host:type_is. [Show Proof]



Prove_Constraint stlc:host:proj_is. [Show Proof]



Prove stlc:host:type_unique. [Show Proof]



Prove_Constraint stlc:host:proj_ty_unique.


Prove_Constraint stlc:host:proj_tm_unique. [Show Proof]



Prove stlc:host:subst_is. [Show Proof]



Prove stlc:host:eval_is. [Show Proof]



Prove stlc:host:subst_unique. [Show Proof]



Prove stlc:host:value_eval_false.


Prove stlc:host:eval_unique. [Show Proof]



Prove stlc:host:ty_lookup. [Show Proof]



Prove stlc:host:subst_type_preservation. [Show Proof]



Prove stlc:host:type_preservation. [Show Proof]



Prove stlc:host:subst_total. [Show Proof]



Prove stlc:host:canonical_forms.


Prove stlc:host:progress. [Show Proof]


Back to example home