7.2.3 Semantic functions

𝒦:ConE:ExpUPKC:ExpUPKC𝒞:ComUPCC

Definition of 𝒦 deliberately omitted.

K=λρωκ.send(𝒦K)κ

I=λρωκ.hold

(lookupρI)

(single(λϵ.

ϵ=undefined

wrongundefined variable,

sendϵκ))

(E0E)=

λρωκ.

(permute(E0§E))

ρ

ω

(λϵ.(

(λϵ.applicate(ϵ1)(ϵ1)ωκ)

(unpermuteϵ)))

(lambda(I)ΓE0)=

λρωκ.λσ.

newσL

send

(

newσ|L,

λϵωκ.#ϵ=#I

tievals

(λα.

(λρ.𝒞Γρω(E0ρωκ))

(extendsρIα))

ϵ,

wrongwrong number of arguments

inE

κ

(update(newσ|L)unspecifiedσ),

wrongout of memoryσ

(lambda(I.I)ΓE0)=

λρωκ.λσ.

newσL

send

(

newσ|L,

λϵωκ.

#ϵ#I

tievalsrest

(λα.

(λρ.𝒞Γρω(E0ρωκ))

(extendsρ(I§I)α))

ϵ

(#I),

wrongtoo few argumentsinE)

κ

(update(newσ|L)unspecifiedσ),

wrongout of memoryσ

(lambdaIΓE0)=(lambda(.I)ΓE0)

(ifE0E1E2)=

λρωκ.E0ρω(single(λϵ.

truishϵE1ρωκ,

E2ρωκ))

(ifE0E1)=

λρωκ.E0ρω(single(λϵ.

truishϵE1ρωκ,

sendunspecifiedκ))

Here and elsewhere, any expressed value other than undefined may be used in place of unspecified.

(set!IE)=

λρωκ.Eρω(single(λϵ.assign

(lookupρI)

ϵ

(sendunspecifiedκ)))

=λρωκ.κ

E0E=

λρωκ.E0ρω(single(λϵ0.Eρω(λϵ.κ(ϵ0§ϵ))))

𝒞=λρωθ.θ

𝒞Γ0Γ=λρωθ.Γ0ρω(λϵ.𝒞Γρωθ)