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)
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)
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)
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
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)
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)
def transform_relation(relation): global substitutions terms = [ u.substitute(term, substitutions) for term in relation ] return f.Relation(relation.name, terms)
def transform_relation(relation): global substitutions terms = [u.substitute(term, substitutions) for term in relation] return f.Relation(relation.name, terms)