示例#1
0
    def validate(self, cells):
        for func in self.funcs:
            func.map = func.getmap(cells)
        for clause in self.clauses:
            valuations = crossiter([range(var.sort.size) for var in clause.vars])
            for valuation in valuations:
                #                print clause.code()
                # print clause.code(), cells, valuation
                accept = clause.fastaccept(cells, *valuation)

                if 0:
                    _accept = clause.accepts(valuation)
                    assert accept == _accept

                if not accept:
                    indexs = clause.refutation(cells, *valuation)
                    refutation = list((index, cells[index]) for index in indexs)
                    refutation.sort()
                    if self.debug:
                        print clause
                        print clause.code(), ":"
                        print " ".join("%s = %s" % (var.name, valuation[i]) for i, var in enumerate(clause.vars))
                        print cells
                        print clause.refutation_code()
                        print refutation
                        for func in clause.funcs:
                            _cells = [(cell if idx in indexs else None) for idx, cell in enumerate(cells)]
                            print func.tablestr(_cells)
                        print
                    return refutation
        #            print
        return None
示例#2
0
 def __init__(self, theory, sorts, funcs):
     self.theory = theory
     self.sorts = sorts
     self.funcs = funcs
     self.sizeiter = crossiter([s.sizes for s in sorts])