The files included in this folder are implementations of the examples presented in the paper "Language Constructs for Non-Well-Founded Computation", submitted to POPL 2013.

System requirements
=============
The files have been tested with OCaml 3.12.0, under Mac OS X Lion and Linux Ubuntu. To compile, you need a working installation of OCaml 3.12.0 and Makefile. 

To compile: From a command line, cd to the folder where this readme is and do "make".
To clean up: run "make clean"
To execute: run "./wf.exe"

Overview of the files
=============
(in the order they should be read)
- main.ml: the main file containing all the test cases
- corecursive.ml: the Corecursive functor, allowing to build non-well-founded recursive functions
- gaussian.ml: an implementation of a Gaussian elimination algorithm

Examples:
- stream/stream.ml: an example showing arithmetic expressions on streams
- stream/descending.ml: the descending sequences example
- stream/equality.ml: equality on streams
- substitution/fv.ml: free variables example
- substitution/substitution.ml: substitution example
- substitution/alexandra.ml: substituion example, alternate solution
- probability/probability.ml: probability of heads in a probability scheme
- probability/dexter.ml: probability of heads, alternate solution
- probability/flips.ml: expected number of flips in a probability scheme
- probability/outcome.ml: outcome function of a probability scheme
- ai.ml: abstract interpretation for while loops
- padic/*.ml: a library for calculating with p-adic numbers. The main file is
              padic/padic.ml
- ifloat/*.ml: a library for calculating with infinite precisions floats. The 
               main file is float/ifloat.ml

Automatic partitioning:
- automatic/fhgen.ml: a preliminary implementation of automatically generating code for creating a functor fh on functions.
- automatic/dfg_untyped.ml: a preliminary implementation of automatically separating
a recursive function into a gamma and an alpha.


The authors
