Example #1
0
 def test_mrs_robinson(self):
     f1 = Function("f",[Variable("X")])
     f2 = Function("f",[Variable("Y")])
     sigma = u.mrs_robinson(f1,f2)
     f1 = u.substitute(f1,sigma)
     f2 = u.substitute(f2,sigma)
     self.assertTrue(f1==f2)
Example #2
0
 def test_mrs_robinson(self):
     f1 = Function("f", [Variable("X")])
     f2 = Function("f", [Variable("Y")])
     sigma = u.mrs_robinson(f1, f2)
     f1 = u.substitute(f1, sigma)
     f2 = u.substitute(f2, sigma)
     self.assertTrue(f1 == f2)
Example #3
0
def s_wrapper(formula, sups):
    if type(formula) == f.Relation:
        return u.substitute(formula, sups)
    elif type(formula) == f.UnaryOperator and type(formula.term) == f.Relation:
        return f.UnaryOperator("~", u.substitute(formula.term, sups))
    else:
        assert (False)
Example #4
0
def split_any(disjunction):

    result_set = set()

    for formula in disjunction:
        if is_splittable(formula):
            #alpha
            if type(formula) == f.BinaryOperator and formula.op == "&":
                d = list(disjunction)
                d.remove(formula)
                d1 = deepcopy(d)
                d1.append(formula.terms[0])
                result_set.add(Disjunction(d1))

                d.append(formula.terms[1])
                result_set.add(Disjunction(d))
                break

            # is beta
            if type(formula) == f.BinaryOperator and formula.op == "|":
                d = list(disjunction)
                d.remove(formula)
                d.append(formula.terms[0])
                d.append(formula.terms[1])
                result_set.add(Disjunction(d))
                break

            # is gamma
            if type(formula) == f.Quantor and formula.op == '!':
                d = list(disjunction)
                d.remove(formula)
                rewrite = {}
                free_vars = set()
                for var in formula.variables:
                    t = gen_free().__next__()
                    t = f.Variable(t)
                    rewrite[var] = t
                    free_vars.add(t)
                d.append(u.substitute(formula.term, rewrite))
                d = Disjunction(d)
                d.free_vars = free_vars
                result_set.add(d)
                break

            # is delta
            if type(formula) == f.Quantor and formula.op == '?':
                d = list(disjunction)
                d.remove(formula)
                rewrite = {}
                for var in formula.variables:
                    t = gen_free_func().__next__()
                    t = f.Function(t, list(disjunction.free_vars))
                    rewrite[var] = t
                    # TODO: do we need this, ask him
                    #disjunction.free_vars.add(t)
                d.append(u.substitute(formula.term, rewrite))
                result_set.add(Disjunction(d))
                break

    return result_set
Example #5
0
def rewrite_quantor(quantor_formula, not_negated, new_quantor):

    global substitutions
    old = deepcopy(substitutions)

    for var in quantor_formula.variables:
        substitutions[var] = f.Variable(gen_uniq_varname(var))

    if not_negated:
        new_term = transform(quantor_formula.term)
    else:
        new_term = transform(quantor_formula.term.negate())

    new_vars = [ u.substitute(var,substitutions) for var in quantor_formula.variables ]

    substitutions = old

    return f.Quantor(new_quantor, new_vars, new_term)
Example #6
0
def rewrite_quantor(quantor_formula, not_negated, new_quantor):

    global substitutions
    old = deepcopy(substitutions)

    for var in quantor_formula.variables:
        substitutions[var] = f.Variable(gen_uniq_varname(var))

    if not_negated:
        new_term = transform(quantor_formula.term)
    else:
        new_term = transform(quantor_formula.term.negate())

    new_vars = [
        u.substitute(var, substitutions) for var in quantor_formula.variables
    ]

    substitutions = old

    return f.Quantor(new_quantor, new_vars, new_term)
Example #7
0
def transform_relation(relation):

    global substitutions
    terms = [ u.substitute(term, substitutions) for term in relation ]
    return f.Relation(relation.name, terms)
Example #8
0
def transform_relation(relation):

    global substitutions
    terms = [u.substitute(term, substitutions) for term in relation]
    return f.Relation(relation.name, terms)