21#include <spot/twa/twagraph.hh>
22#include <spot/misc/bddlt.hh>
23#include <spot/misc/trival.hh>
24#include <spot/twaalgos/backprop.hh>
106 struct SPOT_API
mtdfa:
public std::enable_shared_from_this<mtdfa>
114 mtdfa(
const bdd_dict_ptr& dict) noexcept
121 dict_->unregister_all_my_variables(
this);
124 std::vector<bdd> states;
125 std::vector<formula> names;
143 return states.size();
153 return states.size() + bdd_has_true(states);
158 bool is_empty()
const;
170 bool labels =
true)
const;
189 twa_graph_ptr
as_twa(
bool state_based =
false,
bool labels =
true)
const;
225 bool ignore_non_registered_ap =
false);
232 return controllable_variables_;
237 bdd controllable_variables_ = bddtrue;
240 typedef std::shared_ptr<mtdfa> mtdfa_ptr;
241 typedef std::shared_ptr<const mtdfa> const_mtdfa_ptr;
269 bool fuse_same_bdds =
true,
270 bool simplify_terms =
true,
271 bool detect_empty_univ =
true);
274 enum ltlf_synthesis_backprop {
278 dfs_strict_node_backprop,
315 const std::vector<std::string>& outvars,
316 ltlf_synthesis_backprop backprop
318 bool one_step_preprocess =
false,
319 bool realizability =
false,
320 bool fuse_same_bdds =
true,
321 bool simplify_terms =
true,
322 bool detect_empty_univ =
true);
357 bool minimize =
true,
bool order_for_aps =
true,
358 bool want_names =
true,
359 bool fuse_same_bdds =
true,
360 bool simplify_terms =
true);
386 SPOT_API mtdfa_ptr product(
const mtdfa_ptr& dfa1,
const mtdfa_ptr& dfa2);
390 SPOT_API mtdfa_ptr
product_or(
const mtdfa_ptr& dfa1,
const mtdfa_ptr& dfa2);
397 SPOT_API mtdfa_ptr
product_xor(
const mtdfa_ptr& dfa1,
const mtdfa_ptr& dfa2);
405 SPOT_API mtdfa_ptr
product_xnor(
const mtdfa_ptr& dfa1,
const mtdfa_ptr& dfa2);
413 const mtdfa_ptr& dfa2);
434 bool simplify_terms =
true);
437 bool detect_empty_univ =
true,
438 const std::vector<std::string>* outvars =
nullptr,
439 bool do_backprop =
false,
440 bool realizability =
false,
441 bool one_step_preprocess =
false,
444 mtdfa_ptr ltlf_synthesis_with_dfs(
formula f,
445 const std::vector<std::string>*
447 bool realizability =
false,
448 bool ont_step_preprocess =
false);
451 std::pair<formula, bool> leaf_to_formula(
int b,
int term)
const;
453 formula terminal_to_formula(
int t)
const;
455 int formula_to_terminal(
formula f,
bool may_stop =
false);
456 bdd formula_to_terminal_bdd(
formula f,
bool may_stop =
false);
457 int formula_to_terminal_bdd_as_int(
formula f,
bool may_stop =
false);
459 bdd combine_and(bdd left, bdd right);
460 bdd combine_or(bdd left, bdd right);
461 bdd combine_implies(bdd left, bdd right);
462 bdd combine_equiv(bdd left, bdd right);
463 bdd combine_xor(bdd left, bdd right);
464 bdd combine_not(bdd b);
468 bddExtCache* get_cache()
475 std::unordered_map<formula, int> formula_to_var_;
476 std::unordered_map<bdd, formula, bdd_hash> propositional_equiv_;
478 std::unordered_map<formula, bdd> formula_to_bdd_;
479 std::unordered_map<formula, int> formula_to_int_;
480 std::vector<formula> int_to_formula_;
483 bool simplify_terms_;
499 SPOT_API std::vector<bool>
514 SPOT_API std::vector<bool>
517 SPOT_API std::vector<trival>
521 #include <spot/graph/adjlist.hh>
535 const std::vector<bool>& winning_states);
538 const std::vector<trival>& winning_states);
558 bool preserve_names =
false);
585 SPOT_API twa_graph_ptr
Definition backprop.hh:31
"Semi-internal" class used to implement spot::ltlf_to_mtdfa()
Definition ltlf2dfa.hh:431
A Transition-based ω-Automaton.
Definition twa.hh:619
mtdfa_ptr product_or(const mtdfa_ptr &dfa1, const mtdfa_ptr &dfa2)
Combine two MTDFAs to sum their languages.
mtdfa_ptr twadfa_to_mtdfa(const twa_graph_ptr &twa)
Convert a TWA (representing a DFA) into an MTDFA.
mtdfa_ptr product_xor(const mtdfa_ptr &dfa1, const mtdfa_ptr &dfa2)
Combine two MTDFAs to build the exclusive sum of their languages.
twa_graph_ptr mtdfa_strategy_to_mealy(mtdfa_ptr strategy, bool labels=true)
Convert an MTDFA representing a strategy to a TwA with the "synthesis-output" property.
mtdfa_ptr product_xnor(const mtdfa_ptr &dfa1, const mtdfa_ptr &dfa2)
Combine two MTDFAs to keep words that are handled similarly in both operands.
mtdfa_ptr ltlf_to_mtdfa_compose(formula f, const bdd_dict_ptr &dict, bool minimize=true, bool order_for_aps=true, bool want_names=true, bool fuse_same_bdds=true, bool simplify_terms=true)
Convert an LTLf formula into a MTDFA, with a compositional approach.
mtdfa_ptr ltlf_to_mtdfa(formula f, const bdd_dict_ptr &dict, bool fuse_same_bdds=true, bool simplify_terms=true, bool detect_empty_univ=true)
Convert an LTLf formula into a MTDFA.
std::vector< bool > mtdfa_winning_region(mtdfa_ptr dfa)
Compute the winning region of the MTDFA interpreted as a game.
mtdfa_ptr minimize_mtdfa(const mtdfa_ptr &dfa)
Minimize a MTDFA.
mtdfa_ptr ltlf_to_mtdfa_for_synthesis(formula f, const bdd_dict_ptr &dict, const std::vector< std::string > &outvars, ltlf_synthesis_backprop backprop=dfs_node_backprop, bool one_step_preprocess=false, bool realizability=false, bool fuse_same_bdds=true, bool simplify_terms=true, bool detect_empty_univ=true)
Solve (or start solving) LTLf synthesis.
mtdfa_ptr mtdfa_winning_strategy(mtdfa_ptr dfa, bool backprop_nodes)
Compute a strategy for an MTDFA interpreted as a game.
mtdfa_ptr mtdfa_restrict_as_game(mtdfa_ptr dfa)
Build a generalized strategy from a set of winning states.
backprop_graph mtdfa_to_backprop(mtdfa_ptr dfa, bool early_stop=true, bool preserve_names=false)
Build a backprop_graph from dfa.
mtdfa_ptr product_implies(const mtdfa_ptr &dfa1, const mtdfa_ptr &dfa2)
Combine two MTDFAs to build an implication.
Definition automata.hh:26
std::vector< bool > mtdfa_winning_region_lazy(mtdfa_ptr dfa)
Compute the winning region of the MTDFA interpreted as a game. Lazy version.
std::vector< trival > mtdfa_winning_region_lazy3(mtdfa_ptr dfa)
Compute the winning region of the MTDFA interpreted as a game. Lazy version.
twa_graph_ptr complement(const const_twa_graph_ptr &aut, const output_aborter *aborter=nullptr)
Complement a TωA.
statistics about an mtdfa instance
Definition ltlf2dfa.hh:45
unsigned nodes
Number of internal nodes (or decision nodes)
Definition ltlf2dfa.hh:62
unsigned long long paths
Number of paths between a root and a leaf (terminal or constant)
Definition ltlf2dfa.hh:83
unsigned terminals
Number of terminal nodes.
Definition ltlf2dfa.hh:69
unsigned aps
number of atomic propositions
Definition ltlf2dfa.hh:57
bool has_false
Whether the true and false constants are used.
Definition ltlf2dfa.hh:76
bool has_true
Whether the true and false constants are used.
Definition ltlf2dfa.hh:75
unsigned states
number of roots
Definition ltlf2dfa.hh:50
unsigned long long edges
Number of pairs (root, leaf) for which a path exists.
Definition ltlf2dfa.hh:88
a DFA represented using shared multi-terminal BDDs
Definition ltlf2dfa.hh:108
unsigned num_states() const
The number of states in the automaton.
Definition ltlf2dfa.hh:151
twa_graph_ptr as_twa(bool state_based=false, bool labels=true) const
Convert this automaton to a spot::twa_graph.
void set_controllable_variables(const std::vector< std::string > &vars, bool ignore_non_registered_ap=false)
declare a list of controllable variables
bdd_dict_ptr get_dict() const
get the bdd_dict associated to this automaton
Definition ltlf2dfa.hh:207
std::vector< formula > aps
The list of atomic propositions possibly used by the automaton.
Definition ltlf2dfa.hh:135
void set_controllable_variables(bdd vars)
declare a list of controllable variables
mtdfa_stats get_stats(bool nodes, bool paths) const
compute some statistics about the automaton
bdd get_controllable_variables() const
Returns the conjunction of controllable variables.
Definition ltlf2dfa.hh:230
unsigned num_roots() const
the number of MTBDDs roots
Definition ltlf2dfa.hh:141
std::ostream & print_dot(std::ostream &os, int index=-1, bool labels=true) const
Print the states array of MTBDD in graphviz format.
mtdfa(const bdd_dict_ptr &dict) noexcept
create an empty mtdfa
Definition ltlf2dfa.hh:114