PCF with Contracts and Symbolic Values
This collection implements four core programming languages, useful for studying PCF, contracts, and symbolic execution:
PCF: a core typed language (with natural numbers, errors and recursion).
Symbolic PCF ('PCF): an extension of PCF endowed with a notion of "symbolic values", written
(• T), which represents an abstraction of all values of type
Contract PCF (CPCF): an extension of PCF endowed with behavioral software contracts. Contracts include arbitrary predicates written in PCF and higher-order contracts, written
(C ... -> C). The monitor of a contract against a computation is written
(C ⚖ M). When a contract fails,
blameis signalled and indicates who is to blame.
Symbolic CPCF ('CPCF): an extension of Contract PCF endowed with symbolic values written
(• T C ...), which represents an abstraction of all values of type
These languages are available as
#lang languages that include static
#lang pcf <option> #lang spcf <option> #lang cpcf <option> #lang scpcf <option>
option ::= | traces | stepper
These languages are also available as Redex models.
LANG/examples.rkt: examples written in each language.
LANG/redex.rkt: Redex models of each language.
tests/LANG/: tests for each language.
Installation and testing
You will need Racket 188.8.131.52 or later.
% raco pkg install pcf