Implementation of the Combinatory Logic Synthesizer algorithm in F#.
(CL)S-F# is based on inhabitant search in combinatory logic with intersection types with constructors. In particular, given a set of typed combinators Γ and a type τ, (CL)S-F# enumerates applicative terms, built from combinators in Γ, that can be assigned the type τ. For a detailed theoretical backround see Section 4.1 in the PhD thesis by Andrej Dudenhefner.
The Visual Studio 2017 solution file cls-fsharp.sln
contains the cls-fsharp-core
project (synthesis algorithm) together with the cls-fsharp-experiments
project (examples).
The cls-fsharp-core
project is a Visual Studio 2017 Library
and can be used independently from the main solution.
Inhabitants are constructed by first using the method getAllInhabitants
that, given a set of typed combinators Γ and a type τ, constructs a TreeGrammar
G spanning the set of applicative terms M, built from combinators in Γ, such that M can be assigned the type τ.
Particular terms can be enumerated using the method listMinimalCombinatorTerms
from G.
The cls-fsharp-experiments
project is a Visual Studio 2017 Exe
and, provided the library, can be compiled and executed.
It demonstrates individual library features in functional program synthesis, object-oriented program synthesis, and process synthesis scenarios.