A package of symbolic algorithms using binary decision diagrams (BDDs) for synthesizing implementations from temporal logic specifications. This is useful for designing systems, especially vehicles that carry humans.
-
Synthesis algorithms for Moore or Mealy implementations of:
- generalized Streett(1) specifications (known as GR(1))
- generalized Rabin(1) specifications (counter-strategies to GR(1))
- detection of trivial realizability in GR(1) specifications.
See
omega.games.gr1and the examplegr1_synthesis_intro. -
Enumeration of state machines (as
networkxgraphs) from the synthesized symbolic implementations. Seeomega.games.enumeration. -
Facilities to simulate the resulting implementations with little and readable user code. See
omega.stepsand the examplemoore_moore. -
Code generation for the synthesized symbolic implementations. This code is correct-by-construction. See
omega.symbolic.codegen. -
Minimal covering with a symbolic algorithm to find a minimal cover, and to enumerate all minimal covers. Used to convert BDDs to minimal formulas. See
omega.symbolic.coverandomega.symbolic.cover_enum, and the exampleminimal_formula_from_bdd. -
First-order linear temporal logic (LTL) with rigid quantification and substitution. See
omega.logic.lexyacc,omega.logic.ast, andomega.logic.syntax. -
Bitblaster of quantified integer arithmetic (integers -> bits). See
omega.logic.bitvector. -
Translation from past to future LTL, using temporal testers. See
omega.logic.past. -
Symbolic automata that manage first-order formulas by seamlessly using binary decision diagrams (BDDs) underneath. You can:
- declare variables and constants
- translate:
- formulas to BDDs and
- BDDs to minimal formulas via minimal covering
- quantify
- substitute
- prime/unprime variables
- get the support of predicates
- pick satisfying assignments (or work with iterators)
- define operators
See
omega.symbolic.temporalandomega.symbolic.folfor more details. -
Facilities to write symbolic fixpoint algorithms. See
omega.symbolic.fixpointandomega.symbolic.prime, and the examplereachability_solver. -
Conversion from graphs annotated with formulas to temporal logic formulas. These graphs can help specify transition relations. The translation is in the spirit of predicate-action diagrams.
See
omega.symbolic.logicizerandomega.automatafor more details, and the examplesymbolic. -
Enumeration and plotting of state predicates and actions represented as BDDs. See
omega.symbolic.enumeration.
In doc/doc.md.
import omega.symbolic.fol as _fol
ctx = _fol.Context()
ctx.declare(
x=(0, 10),
y=(-2, 5),
z='bool')
u = ctx.add_expr(
r'(x <= 2) /\ (y >= -1)')
v = ctx.add_expr(
r'(y <= 3) => (x > 7)')
r = u & ~ v
expr = ctx.to_expr(r)
print(expr)pip install omega
The package and its dependencies are pure Python.
For solving demanding games, install the Cython module dd.cudd
that interfaces to CUDD.
Instructions are available at dd.
BSD-3, see LICENSE file.