Abstract
We present a semantics for an applied call-by-value lambda-calculus
that is compositional, extensional, and elementary. We present four
different views of the semantics: 1) as a relational (big-step)
semantics that is not operational but instead declarative, 2) as a
denotational semantics that does not use domain theory, 3) as a
non-deterministic interpreter, and 4) as a variant of the intersection
type systems of the Torino group. We prove that the semantics is
correct by showing that it is sound and complete with respect to
operational semantics on programs and that is sound with respect to
contextual equivalence. We have not yet investigated whether it is
fully abstract. We demonstrate that this approach to semantics is
useful with three case studies. First, we use the semantics to prove
correctness of a compiler optimization that inlines function
application. Second, we adapt the semantics to the polymorphic
lambda-calculus extended with general recursion and prove semantic
type soundness. Third, we adapt the semantics to the call-by-value
lambda-calculus with mutable references.
The paper that accompanies these Isabelle theories is available on arXiv.
The paper that accompanies these Isabelle theories is available on arXiv.
License
Topics
Session Decl_Sem_Fun_PL
- Lambda
- SmallStepLam
- BigStepLam
- ValuesFSet
- ValuesFSetProps
- RelationalSemFSet
- DeclSemAsDenotFSet
- EquivRelationalDenotFSet
- ChangeEnv
- DeclSemAsNDInterpFSet
- InterTypeSystem
- Values
- ValueProps
- DeclSemAsDenot
- DenotLam5
- EquivDenotInterTypes
- DenotSoundFSet
- DenotCompleteFSet
- DenotCongruenceFSet
- DenotEqualitiesFSet
- Optimizer
- SystemF
- MutableRef
- MutableRefProps