GetChar() static private method

static private GetChar ( EvaluationContext ec, Expr t ) : char
ec EvaluationContext
t Microsoft.Z3.Expr
return char
Example #1
0
        internal override void RunQuery(EvaluationContext ec)
        {
            var st1 = subexpressions[0].GetST(ec);
            var st2 = subexpressions[1].GetST(ec);

            ICounterexample <Expr> witness1 = null;

            //var witness1 = st1.Diff(st2, 1); //try first to find a short counterexample
            if (witness1 == null && st1.Eq1(st2))
            {
                ec.tw.WriteLine("Result: Partial-Equivalent, checking domain equivalence ...");
                #region now check also domain-equivalence
                var sfa0 = st1.ToSFA();
                var sfa1 = st2.ToSFA();

                var sfa0_1 = sfa0.Minus(sfa1);
                if (sfa0_1.IsEmpty)
                {
                    ec.tw.WriteLine(" dom(LHS) is subset of dom(RHS)");
                    var sfa1_0 = sfa1.Minus(sfa0);
                    if (sfa1_0.IsEmpty)
                    {
                        ec.tw.WriteLine(" dom(RHS) is subset of dom(LHS)");
                        ec.tw.WriteLine("Result: Equivalent");
                    }
                    else
                    {
                        ec.tw.WriteLine("Result: Not Domain-Equivalent");
                        var w = new List <char>();
                        foreach (var t in sfa1_0.ChoosePathToSomeFinalState())
                        {
                            w.Add(Expression.GetChar(ec, t));
                        }
                        string s = new String(w.ToArray());
                        ec.tw.WriteLine("Counterexample: dom(RHS)-dom(LHS) contains {0}", Microsoft.Automata.StringUtility.Escape(s));
                    }
                }
                else
                {
                    ec.tw.WriteLine("Result: Not Domain-Equivalent");
                    var w = new List <char>();
                    foreach (var t in sfa0_1.ChoosePathToSomeFinalState())
                    {
                        w.Add(Expression.GetChar(ec, t));
                    }
                    string s = new String(w.ToArray());
                    ec.tw.WriteLine("Counterexample: dom(LHS)-dom(RHS) contains {0}", Microsoft.Automata.StringUtility.Escape(s));
                }
                #endregion
            }
            else
            {
                //var witness = (witness1 == null ? st1.Diff(st2) : witness1); //find, if needed, a longer witness
                ec.tw.WriteLine("Result: Not Partial-Equivalent");
                //ec.tw.WriteLine("Counterexample input: {0}", Microsoft.Automata.StringUtility.Escape(witness.Input.StringValue));
                //ec.tw.WriteLine("LHS: {0}", Microsoft.Automata.StringUtility.Escape(witness.Output1.StringValue));
                //ec.tw.WriteLine("RHS: {0}", Microsoft.Automata.StringUtility.Escape(witness.Output2.StringValue));
            }
        }