Beispiel #1
0
    def formulaVars(self, f: Formula) -> Set[str]:
        """ List variables in formula f.

        This depends on correct implementation of subf() and Variable.name.
        """
        if isinstance(f, Variable):
            return set([f.name()])
        return set.union(set(), *(self.formulaVars(sf) for sf in f.subf()))
Beispiel #2
0
 def formulaIsSatisfied(self, f: Formula, v: Valuation):
     if isinstance(f, Variable):
         return v[f.name()]
     elif isinstance(f, Negation):
         return not self.formulaIsSatisfied(f.subf()[0], v)
     elif isinstance(f, Conjunction):
         return all(self.formulaIsSatisfied(sf, v) for sf in f.subf())
     elif isinstance(f, Disjunction):
         return any(self.formulaIsSatisfied(sf, v) for sf in f.subf())
     elif isinstance(f, Implication):
         return (not self.formulaIsSatisfied(
             f.subf()[0], v)) or self.formulaIsSatisfied(f.subf()[1], v)
     elif isinstance(f, Equivalence):
         return self.formulaIsSatisfied(f.subf()[0],
                                        v) == self.formulaIsSatisfied(
                                            f.subf()[1], v)
     else:
         raise TypeError("Formula expected, got %s" % repr(f))
Beispiel #3
0
 def formulaDeg(self, f: Formula) -> int:
     if isinstance(f, Variable):
         return 0
     return sum(self.formulaDeg(sf) for sf in f.subf()) + 1