https://github.com/kamirus/lambda-formalizations
Lambda Calculi Formalizations in Coq using nested datatypes for a type-safe term representation
https://github.com/kamirus/lambda-formalizations
control-operators coq-formalization effect-handlers effect-system lambda-calculus nested-datatypes preservation progress stlc theorem-proving
Last synced: 2 months ago
JSON representation
Lambda Calculi Formalizations in Coq using nested datatypes for a type-safe term representation
- Host: GitHub
- URL: https://github.com/kamirus/lambda-formalizations
- Owner: Kamirus
- License: mit
- Created: 2021-04-29T08:50:17.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2022-09-15T10:20:04.000Z (about 3 years ago)
- Last Synced: 2025-03-18T04:35:23.717Z (7 months ago)
- Topics: control-operators, coq-formalization, effect-handlers, effect-system, lambda-calculus, nested-datatypes, preservation, progress, stlc, theorem-proving
- Language: Coq
- Homepage:
- Size: 388 KB
- Stars: 4
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Lambda Calculi Formalizations
- **Simply Typed Lambda Calculus**
- [Term representation using Nested Datatypes](Terms.v)
- [Progress and Preservation](STLC_Generic.v)
- [Legacy: Type-Level de Bruijn indices](stlc.v) (unnecessarily difficult approach)
- **Delimited-Control Operators shift0/dollar**:
- Introduction : [Delimited Control](DelimitedControl.md)
- **Contribution**:
- Formalize `λ$` calculus with its **evaluation** strategy
- Introduce an **evaluation** strategy for `λc$` (a fine-grained version of `λ$`)
- Define **similarity** relations to prove **correspondance** between both calculi in a form of **simulations** which state that: *similar terms compute to similar values*
- [`λ$` calculus](LambdaDollar.v) (paper reference: [section 2.2](https://ii.uni.wroc.pl/~dabi/publications/APLAS12/materzok-biernacki-aplas12.pdf))
- [`λc$` calculus: a Fine-Grained version of `λ$`](LambdaLetDollar.v) (paper reference: [Figure 1](https://dl.acm.org/doi/10.1145/3479394.3479399))
- Correspondence between `λ$` and `λc$`:
- [Simulation: `λ$` to `λc$`](LambdaDollarToLet.v)
- [Simulation: `λc$` to `λ$`](LambdaLetToDollar.v)Create Makefile with `coq_makefile -f _CoqProject *.v -o Makefile`
## Future Work
- Examine the potential of supporting the `control0` operator for the current evaluation strategy
- Develop the alternative evaluation strategy - the hybrid (reduces differently when under the delimiter) one that aggressively duplicates `$`
- Simplify both calculi to the most common format to showcase the fine-grained difference - single term-tree `tm A`, two different reductions
- Remove call-by-value nature from both, let let-bindings do the rest
- Explore a different similarity relation strategy - instead of substituting similar terms try to work on common skeletons (`tm A`) with a substitution (`A → val`) of similar values