Esempio n. 1
0
            /// <summary>
            /// Returns an enumerator of k random witnesses, or unbounded (default) if k is not positive.
            /// If the language is empty then the enumeration is empty.
            /// </summary>
            public IEnumerable <Sequence <T> > GenerateWitnesses(int k = 0)
            {
                Automaton <Sequence <T> > reach_aut = MkReachAut();

                if (reach_aut.IsEmpty)
                {
                    yield break;
                }
                else
                {
                    int i = 0;
                    while (true)
                    {
                        var path    = new List <Sequence <T> >(reach_aut.ChoosePathToSomeFinalState(new Chooser()));
                        var witness = Sequence <T> .AppendAll(path.ToArray());

                        yield return(witness);

                        if (k > 0)
                        {
                            i += 1;
                            if (i == k)
                            {
                                break;
                            }
                        }
                    }
                    yield break;
                }
            }
        static string GetMember(Z3Provider z3p, Automaton <Expr> C)
        {
            //z3p.Chooser.RandomSeed = 123;
            var    sExpr = new List <Expr>(C.ChoosePathToSomeFinalState(z3p.Chooser)).ToArray();
            string s     = new String(Array.ConvertAll(sExpr, m => z3p.GetCharValue(z3p.MainSolver.FindOneMember(m).Value)));

            return(s);
        }
Esempio n. 3
0
        /// <summary>
        /// Gets the atom of a predicate.
        /// </summary>
        public Automaton <S> GetAtom(Automaton <S> psi)
        {
            if (!IsAtomic)
            {
                throw new AutomataException(AutomataExceptionKind.BooleanAlgebraIsNotAtomic);
            }

            if (psi.IsEmpty)
            {
                return(psi);
            }

            var path  = new List <S>(psi.ChoosePathToSomeFinalState(new Chooser()));
            var moves = new List <Move <S> >();

            for (int i = 0; i < path.Count; i++)
            {
                moves.Add(Move <S> .Create(i, i + 1, solver.GetAtom(path[i])));
            }

            var atom = Automaton <S> .Create(solver, 0, new int[] { path.Count }, moves);

            return(atom);
        }
 static string GetMember(Z3Provider z3p, Automaton<Expr> C)
 {
     //z3p.Chooser.RandomSeed = 123;
     var sExpr = new List<Expr>(C.ChoosePathToSomeFinalState(z3p.Chooser)).ToArray();
     string s = new String(Array.ConvertAll(sExpr, m => z3p.GetCharValue(z3p.MainSolver.FindOneMember(m).Value)));
     return s;
 }
Esempio n. 5
0
 /// <summary>
 /// Choose a path of symbolic terms from the initial state to some final state.
 /// Uses Solver.Chooser to control the random choices.
 /// </summary>
 public IEnumerable <TERM> ChoosePathToSomeFinalState()
 {
     return(automaton.ChoosePathToSomeFinalState(Solver.Chooser));
 }