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
def __init__(self, theory, sorts, funcs): self.theory = theory self.sorts = sorts self.funcs = funcs self.sizeiter = crossiter([s.sizes for s in sorts])