コード例 #1
0
        public IFormula visit(UniversalFormula f)
        {
            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)
                {
                    var newVar = srs.getFreshVariable(f.var);
                    var ns     = new Substitution(f.var, new Variable(newVar));
                    return(new And(
                               new UniversalFormula(f.var, c.f1, f.attributes, f.triggers).visit(this),
                               new UniversalFormula(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 And(new UniversalFormula(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 UniversalFormula(f.var, c.f2, f.attributes, f.triggers).visit(this)));
                }
                else
                {
                    return(c.visit(this));
                }
            }
            else 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)
                {
                    return(new UniversalFormula(f.var, f.f.visit(this), f.attributes, f.triggers));
                }
                else if (i1)
                {
                    return(new Or(new UniversalFormula(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 UniversalFormula(f.var, c.f2, f.attributes, f.triggers).visit(this)));
                }
                else
                {
                    return(c.visit(this));
                }
            }
            else
            {
                return(new UniversalFormula(f.var, f.f.visit(this), f.attributes, f.triggers));
            }
        }
コード例 #2
0
 public IFormula visit(UniversalFormula f)
 {
     return(new UniversalFormula(f.var, f.f.visit(this), f.attributes, f.triggers));
 }
コード例 #3
0
 public IFormula visit(UniversalFormula f)
 {
     return(new ExistentialFormula(f.var, f.f.visit(n), f.attributes, f.triggers));
 }
コード例 #4
0
        public IFormula visit(UniversalFormula f)
        {
            var nf = f.f.visit(this);

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