Ejemplo n.º 1
0
 /**
  * Generate the tree
  */
 public override void generateTree()
 {
     LTL2DSTAR_Options rec_opt = _options;
     rec_opt.recursion();
     _left_tree = new LTL2DSTAR_Tree_Rabin(_left, buchiAutomata, rec_opt, _sched);
     addChild(_left_tree);
     _right_tree = new LTL2DSTAR_Tree_Rabin(_right, buchiAutomata, rec_opt, _sched);
     addChild(_right_tree);
 }
Ejemplo n.º 2
0
 /** Generate tree */
 public override void generateTree()
 {
     LTL2DSTAR_Options opt = _options;
     opt.automata = automata_type.RABIN;
     //opt.scheck_path = ""; // disable scheck
     _tree_rabin = new LTL2DSTAR_Tree_Rabin(_ltl, this.buchiAutomata, opt, _sched);
     addChild(_tree_rabin);
 }
Ejemplo n.º 3
0
        /**
         * Constructor
         * @param ltl The LTL formula
         * @param options the LTL2DSTAR options
         * @param sched a reference back to the scheduler
         */
        public LTL2DSTAR_Tree_Union(LTLFormula ltl, BuchiAutomata ba, LTL2DSTAR_Options options, LTL2DSTAR_Scheduler sched)
            : base(ltl, ba, options, sched)
        {
            _left_tree = null;
            _right_tree = null; //(0)

            _left = _ltl.getSubFormula(_ltl.getRootNode().getLeft());

            _right = _ltl.getSubFormula(_ltl.getRootNode().getRight());

            generateTree();
        }
Ejemplo n.º 4
0
        /** Generate the tree */
        public override void generateTree()
        {
            LTL2DSTAR_Tree_Rabin rabin = null;
            LTL2DSTAR_Tree_Streett streett = null;

            if (_options.automata == automata_type.RABIN || _options.automata == automata_type.RABIN_AND_STREETT)
            {
                rabin = new LTL2DSTAR_Tree_Rabin(_ltl, buchiAutomata, _options, _sched);
            }

            if (_options.automata == automata_type.STREETT || _options.automata == automata_type.RABIN_AND_STREETT)
            {
                streett = new LTL2DSTAR_Tree_Streett(_ltl.negate().toPNF(), buchiAutomata, _options, _sched);
            }

            if (rabin != null && streett != null)
            {
                int rabin_est = rabin.guestimate();
                int streett_est = streett.guestimate();

                //if (_options.verbose_scheduler) {
                //  std::cerr << "NBA-Estimates: Rabin: "<<rabin_est <<
                //    " Streett: " << streett_est << std::endl;
                //}

                if (rabin_est <= streett_est)
                {
                    addChild(rabin);
                    addChild(streett);
                }
                else
                {
                    addChild(streett);
                    addChild(rabin);
                }
            }
            else
            {
                if (rabin != null)
                    addChild(rabin);
                if (streett != null)
                    addChild(streett);
            }

            if (_options.opt_safra.stutter)
            {
                StutterSensitivenessInformation stutter_information = new StutterSensitivenessInformation();
                stutter_information.checkLTL(_ltl);

                if (!stutter_information.isCompletelyInsensitive() && _options.opt_safra.partial_stutter_check)
                {
                    NBA nba = null;
                    NBA complement_nba = null;
                    if (rabin != null)
                    {
                        nba = rabin.getNBA();
                    }
                    else if (streett != null)
                    {
                        nba = streett.getNBA();
                    }

                    if (rabin != null && streett != null)
                    {
                        complement_nba = streett.getNBA();
                    }

                    if (nba == null)
                    {
                        stutter_information.checkPartial(_ltl, buchiAutomata, _sched.getLTL2DRA());//////////add buchiAutomata
                    }
                    else if (complement_nba == null)
                    {
                        stutter_information.checkPartial(nba, buchiAutomata, _ltl.negate().toPNF(), _sched.getLTL2DRA());///////////add buchiAutomata
                    }
                    else
                    {
                        stutter_information.checkNBAs(nba, complement_nba);
                    }
                }

                if (rabin != null)
                {
                    rabin.setStutterInformation(stutter_information);
                }
                if (streett != null)
                {
                    streett.setStutterInformation(stutter_information);
                }
            }
        }