RegSy: A Synthesizer for Regular Specifications over Unbounded Domains
RegSy (Regular Synthesis) is a synthesis tool that can be used to build functions from specification written in WS1S (or, equivalently, specifications given by automata, thanks to the WS1S-automata connection).
Paper Describing the Algorithm
Examples
Download
Running Regsy
- Make sure you have a recent Java distribution
- Make sure you have MONA tool used to build the automaton from WS1S specification. RegSy specifications are currently written as MONA input files
- To run the program use the syntax
./run filename input_tracks
For example, if filename is addition.mona and defines a predicate plus(x,y,z) (corresponding to the relation x + y = z), you can build a program for addition using
./run addition.mona "0 1"
“0 1” means that variables 0 and 1 (x and y) are the input tracks, and z will automatically be the output.
If you wish a program for substraction, you can type
./run addition.mona "0 2"
This way, x and z will be the input tracks, and the system will look for y such that x + y = z (y = z - x).
You can also try
./run addition.mona 2
so that z will be the input track, and once you give z, the system will return some x and y such that x + y = z
Once your function has been synthesized, you can try it on different inputs.
When you run some filename.mona on Regsy, it will automatically save the synthesized function on filename_tracks.sav; you can then run it using
./run -l addition_01.sav
Regsy also have a streaming functionality. You can use it using for instance on:
./run -k 0 not.mona 0
It will assume that the specification is k-causal (in that example, 0-causal) and then you will be able to give a file as input stream, and the program will display the output stream in return. The second 0 corresponds to the input track that you want to use.
Building Regsy
- Download and install scala (the code was tested with Scala 2.8 RC2).
- Type
./symbbuild