Logic¶
Automaton¶
- class ggsolver.logic.Automaton(**kwargs)[source]¶
Represents an Automaton.
\[\mathcal{A} = (Q, \Sigma := 2^{AP}, \delta, q_0, F)\]In the Automaton class, each component is represented as a function.
The set of states \(Q\) is represented by Automaton.states function,
The set of atomic propositions \(AP\) is represented by Automaton.atoms function,
The set of symbols \(\Sigma\) is represented by Automaton.sigma function,
The transition function \(\delta\) is represented by Automaton.delta function,
The initial state \(q_0\) is represented by Automaton.init_state function.
An automaton may have one of the following acceptance conditions:
(
Automaton.ACC_REACH
, 0)(
Automaton.ACC_SAFETY
, 0)(
Automaton.ACC_BUCHI
, 0)(
Automaton.ACC_PARITY
, 0)(
Automaton.ACC_PREF_LAST
, None)(
Automaton.ACC_ACC_PREF_MP
, None)
- ACC_BUCHI = 'Buchi'¶
- ACC_COBUCHI = 'co-Buchi'¶
- ACC_PARITY = 'Parity Min Even'¶
- ACC_PREF_LAST = 'Preference Last'¶
- ACC_PREF_MP = 'Preference MostPreferred'¶
- ACC_REACH = 'Reach'¶
- ACC_SAFETY = 'Safety'¶
- ACC_TYPES = ['undefined', 'Reach', 'Safety', 'Buchi', 'co-Buchi', 'Parity Min Even', 'Preference Last', 'Preference MostPreferred']¶
Acceptance conditions supported by Automaton.
- acc_cond()[source]¶
Acceptance condition of the automaton.
- Returns
(2-tuple) A value of type (acc_type, acc_set) where acc_type is from
Automaton.ACC_TYPES
and acc_set is either an integer or a list of integer.
- acc_type()[source]¶
Acceptance type of the automaton.
- Returns
A value from
Automaton.ACC_TYPES
.
- atoms()[source]¶
Returns a list/tuple of atomic propositions.
- Returns
(list of str) A list of atomic proposition.
- final(state)[source]¶
Returns the acceptance set associated with the given state.
- Parameters
state – (an element of self.states()) A valid state.
- Returns
(int) Acceptance set associated with the given state.
- from_automaton(aut: Automaton)[source]¶
Constructs an Automaton from another Automaton instance. The input automaton’s acceptance condition must match that of a current Automaton.
SpotAutomaton¶
- class ggsolver.logic.SpotAutomaton(formula=None, options=None, atoms=None)[source]¶
SpotAutomaton constructs an
Automaton
from an LTL specification string using spot (https://spot.lrde.epita.fr/) with customizations for ggsolver.Customizations: Since ggsolver contains several algorithms for reactive/controller synthesis, we prefer to construct deterministic automata. Given an LTL formula, SpotAutomaton automatically determines the best acceptance condition that would result in a deterministic automaton..
Programmer’s note: The graphified version of automaton does not use PL formulas as edge labels. This is intentionally done to be able to run our codes on robots that may not have logic libraries installed.
- acc_cond()[source]¶
Returns acceptance condition according to ggsolver definitions: See ACC_REACH, … variables in Automaton class. See
SpotAutomaton.spot_acc_cond()
for acceptance condition in spot’s nomenclature.
- delta(state, inp)[source]¶
Transition function of automaton. For a deterministic automaton, returns a single state. Otherwise, returns a list/tuple of states.
- Parameters
state – (object) A valid state.
inp – (list) List of atoms that are true (an element of sigma).
- is_inherently_weak()[source]¶
Is it the case that accepting and rejecting cycles cannot be mixed in the same SCC?
- is_semi_deterministic()[source]¶
Is the automaton semi-deterministic? See https://spot.lrde.epita.fr/doxygen/namespacespot.html#a56b3f00b7b93deafb097cad595998783
- is_stutter_invariant()[source]¶
The property recognized by the automaton is stutter-invariant (see https://www.lrde.epita.fr/~adl/dl/adl/michaud.15.spin.pdf)
- is_terminal()[source]¶
Automaton is weak, accepting SCCs are complete, accepting edges may not go to rejecting SCCs. An automaton is weak if the transitions of an SCC all belong to the same acceptance sets.
- is_unambiguous()[source]¶
There is at most one run accepting a word (but it might be recognized several time). See https://spot.lrde.epita.fr/concepts.html.
PL¶
- class ggsolver.logic.PL(f_str, atoms=None)[source]¶
PL formula is internally represented as spot.formula instance.
- allsat()[source]¶
Generates the set of all satisfying assignments to atoms of the given propositional logic formula.
Note
Complexity: Exponential in the number of atoms.
- atoms()[source]¶
Gets the list of atoms associated with PL formula.
The list may contain atoms that do not appear in the formula, if the user has provided it. :return: (List[str]) List of atoms.
- evaluate(true_atoms)[source]¶
Evaluates a propositional logic formula given the set of true atoms.
- Parameters
true_atoms – (Iterable[str]) A propositional logic formula.
- Returns
(bool) True if formula is true, otherwise False.
- simplify()[source]¶
Simplifies a propositional logic formula.
We use the boolean_to_isop=True option for spot.simplify. See https://spot.lrde.epita.fr/doxygen/classspot_1_1tl__simplifier__options.html
- Returns
(str) String representing simplified formula.
- translate()[source]¶
Translate a propositional logic formula to an automaton. :return: (
SpotAutomaton
) SpotAutomaton representing the automaton for PL formula.
ScLTL¶
LTL¶
- class ggsolver.logic.LTL(f_str, atoms=None)[source]¶
LTL formula is internally represented as spot.formula instance.
- evaluate(true_atoms)[source]¶
Evaluates a propositional logic formula given the set of true atoms.
- Parameters
true_atoms – (Iterable[str]) A propositional logic formula.
- Returns
(bool) True if formula is true, otherwise False.
- simplify()[source]¶
Simplifies a propositional logic formula.
We use the boolean_to_isop=True option for spot.simplify. See https://spot.lrde.epita.fr/doxygen/classspot_1_1tl__simplifier__options.html
- Returns
(str) String representing simplified formula.