felipeagc / generalized_refocusing

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Generalized Refocusing

This is the Coq formalization that accompanies the papers Generalized Refocusing: from Hybrid Strategies to Abstract Machines and Deriving an Abstract Machine for Strong Call by Need. The code was tested under Coq version 8.11.1

The repository contains several examples in the examples directory.

  • The simplest is addition.

  • The most standard are call by name and call by value strategies. Both these strategies are uniform; the examples contain comments and are meant to illustrate the refocusing idea.

  • A relatively simple but instructive example is lambda calculus with strictness operator, see Fig. 7 and 8 in the first paper. It contains a simple hybrid strategy and illustrates the idea of generalized refocusing.

  • A machine with an environment for full ᵦ-normalization derived from a language with explicit substitutions is here

  • Weak call-by-need

  • Strong call by need is the most complicated of our examples. It is the development supporting the second paper.

In three cases: MiniML, lambda calculus with the normal-order strategy, and lambda calculus with the normal-order strategy and simple explicit substitutions the examples also contain a manually defined machine and a proof of equivalence between this machine and the automatically generated one.

About


Languages

Language:Coq 98.5%Language:Haskell 1.3%Language:Shell 0.2%