Spatial and Action Based Resolver
Switch branches/tags
Nothing to show
Clone or download



SABR (Spatial and Action Based Resolver) is a constraint programming language designed with an emphasis on spatial and temporal logic.

Programs compile to CNF (Conjunctive Normal Form), which is then solved by a CNF solver.

The goal of the language is to make representing operations research problems not just possible, but also intuitive and the solving of these problems efficient.

From a theoretical perspective, the language can also be used to prove a problem is NP-Easy and to verify properties about automata and systems that can be modeled as automata such as circuits and programs.


SABR is installed using

Build SABR and the CNF solver:

python build

For more commands:

python help


To run SABR, provide an optional flag, the number of stages to use, and the input source path. The solution can be found in result.txt.


./sabr 20 test/Simple/simple.tb

For more commands:

./sabr --help


Testing can be done with

Runs all tests:

python all

For more commands:

python help	


Let's see what the traditional river crossing puzzle looks like in SABR. A more detailed walkthrough is also available.

Sym { west east }

# each cell on the board can be any symbol
Board { cabbage goat wolf sailor }
Start { west west west west }
End { east east east east }

# transitions for object Crew
# sailor can take one passenger east or west
Trans SailEast:Crew { west west => east east }
Trans SailWest:Crew { east east => west west }

# describe object Crew's cells
DesObj Goat:Crew { sailor goat }
DesObj Cabbage:Crew { sailor cabbage }
DesObj Wolf:Crew { sailor wolf }
DesObj Alone:Crew { sailor sailor }

# options for object Watch, at least one must match
# sailor needs to be watching these two if they are together
Opt Watch { side side side }
Opt Watch { !side !side side }
Opt Watch { !side side !side }

DesObj Watch { sailor goat cabbage }
DesObj Watch { sailor wolf goat }

Running ./sabr 10 source.tb shows us the answer to the puzzle in result.txt (


For more documentation check /doc/LANGUAGE. Simple python module can be found at /module/