示例#1
0
        public IFormula visit(ExistentialFormula f)
        {
            if (f.f is Or)
            {
                var c  = f.f as Or;
                var i1 = c.f1.ffreeVariables.Contains(f.var);
                var i2 = c.f2.ffreeVariables.Contains(f.var);

                if (i1 && i2)
                {
                    var newVar = srs.getFreshVariable(f.var);
                    var ns     = new Substitution(f.var, new Variable(newVar));
                    return(new Or(
                               new ExistentialFormula(f.var, c.f1, f.attributes, f.triggers).visit(this),
                               new ExistentialFormula(newVar, c.f2.substitute(ns), f.attributes, from ts in f.triggers select from t in ts select t.substitute(ns)).visit(
                                   this)
                               ));
                }
                else if (i1)
                {
                    return(new Or(new ExistentialFormula(f.var, c.f1, f.attributes, f.triggers).visit(this), c.f2.visit(this)));
                }
                else if (i2)
                {
                    return(new Or(c.f1.visit(this), new ExistentialFormula(f.var, c.f2, f.attributes, f.triggers).visit(this)));
                }
                else
                {
                    return(c.visit(this));
                }
            }
            else if (f.f is And)
            {
                var c  = f.f as And;
                var i1 = c.f1.ffreeVariables.Contains(f.var);
                var i2 = c.f2.ffreeVariables.Contains(f.var);

                if (i1 && i2)
                {
                    return(new ExistentialFormula(f.var, f.f.visit(this), f.attributes, f.triggers));
                }
                else if (i1)
                {
                    return(new And(new ExistentialFormula(f.var, c.f1, f.attributes, f.triggers).visit(this), c.f2.visit(this)));
                }
                else if (i2)
                {
                    return(new And(c.f1.visit(this), new ExistentialFormula(f.var, c.f2, f.attributes, f.triggers).visit(this)));
                }
                else
                {
                    return(c.visit(this));
                }
            }
            else
            {
                return(new ExistentialFormula(f.var, f.f.visit(this), f.attributes, f.triggers));
            }
        }
示例#2
0
        public IFormula visit(ExistentialFormula f)
        {
            var fvs  = (from fv in f.f.ffreeVariables where fv != f.var select fv).ToArray();
            var fvts = TypeTuple.make(from fv in fvs select fv.type);
            var newF = srs.getFreshFunction("@sk", fvts, f.var.type);

            var fvTerms = (from fv in fvs select new Variable(fv)).ToArray <ITerm>();

            return(f.f.substitute(new Substitution(f.var, new FunctionApplicationFormula(newF, fvTerms))).visit(this));
        }
示例#3
0
 public IFormula visit(ExistentialFormula f)
 {
     return(new UniversalFormula(f.var, f.f.visit(n), f.attributes, f.triggers));
 }
示例#4
0
        public IFormula visit(ExistentialFormula f)
        {
            var nf = f.f.visit(this);

            return(!nf.ffreeVariables.Contains(f.var) ? nf : new ExistentialFormula(f.var, nf, f.attributes, f.triggers));
        }