示例#1
0
 def __init__(self, variable, equivalence, formula, newVariable=None):
     self.variable = variable
     self.equivalence = equivalence
     self.formula = formula
     if newVariable is None:
         self.newVariable = Variable()
     else:
         self.newVariable = newVariable
示例#2
0
class Unique(Formula):
    def __init__(self, variable, equivalence, formula, newVariable=None):
        self.variable = variable
        self.equivalence = equivalence
        self.formula = formula
        if newVariable is None:
            self.newVariable = Variable()
        else:
            self.newVariable = newVariable

    def _translate(self):
        formulaTranslate = self.formula.translate()
        all_others_are_equal = basicFormula.Not(
            basicFormula.Exists(
                self.newVariable,
                basicFormula.And(
                    basicFormula.And(
                        InDomain(self.newVariable, self.equivalence),
                        formulaTranslate.substituteVariable(self.variable, self.newVariable),
                    ),
                    basicFormula.Not(Equal(self.newVariable, self.variable, self.equivalence)),
                ),
            )
        )
        return basicFormula.And(formulaTranslate, all_others_are_equal)

    def substituteVariable(self, a, b):
        assert b != self.newVariable
        assert a != self.newVariable
        return Unique(
            variable=self.variable.substituteVariable(a, b),
            equivalence=self.equivalence.substituteVariable(a, b),
            formula=self.formula.substituteVariable(a, b),
            newVariable=self.newVariable,
        )

    def updateVariables(self):
        return Unique(
            variable=self.variable,
            equivalence=self.equivalence,
            formula=self.formula.updateVariables(),
            newVariable=self.newVariable.updateVariables(),
        )

    def render(self, context):
        return gl.newTextualGLStack(colors.variableColor, "%s ! in %s . " % (self.variable, self.equivalence)).stack(
            0, self.formula.render(context)
        )