def clausulasCombinarMCD(transf, n): clausulas2 = [] for numG in xrange(n): varG = VariableSat(False, 'g', [numG]) varG1 = VariableSat(True, 'g', [numG]) clsPorLoMenos1 = '' for numCopiaX in xrange(n): numVarGX = transf.var2NumSimple(varG, numCopiaX) clsPorLoMenos1 = clsPorLoMenos1 + transf.var2NumSimple( varG1, numCopiaX) + ' ' for numCopiaY in xrange(numCopiaX + 1, n): numVarGY = transf.var2NumSimple(varG, numCopiaY) clausulas2.append(numVarGX + ' ' + numVarGY + ' 0\n') clausulaSimet = numVarGX + ' ' if numG > 0 and numCopiaX > 0: for numGmenor in xrange(numG): varG2 = VariableSat(True, 'g', [numGmenor]) clausulaSimet = clausulaSimet + transf.var2NumSimple( varG2, numCopiaX - 1) + ' ' clausulas2.append(clausulaSimet + '0\n') elif numG == 0 and numCopiaX == 0: varG2 = VariableSat(True, 'g', [0]) clausulas2.append(transf.var2NumSimple(varG2, 0) + ' 0\n') clausulas2.append(clsPorLoMenos1 + '0\n') return clausulas2
def clausula78a(varz, varg, varm, subObQ, subObV, vis, ltaux, c7, c8, vista, is_spec): global varsT global contribVT c8temp1 = [varz, varm.negarVar()] c8temp2 = [varm] lt = set([]) i = 0 for x in subObQ.orden: y = subObV.orden[i] varT = VariableSat(True, 't', [int(x), int(y)]) lt.add(varT) varsT[(int(x), int(y))]=varT contribVT.setdefault(vista, set([])).add((int(x), int(y))) c7temp = [varm.negarVar(), varz.negarVar(), varT] c7.append(c7temp) #if is_spec: #c7temp = [varm.negarVar(), varz.negarVar(), varT] #c7.append(c7temp) c8temp1.append(varT.negarVar()) c8temp2.append(varT.negarVar()) i = i + 1 ltaux.setdefault((varT,varm),set([])).add(varz) c8.append([varz.negarVar(), varg]) c8.append([varz.negarVar(), varm]) return lt
def variablesV(q, vistas): global varsV vnula = VariableSat(True, 'v', [-1]) lv = [vnula] varsV[-1] = vnula c2 = [] numVista = 0 for v in vistas: var = VariableSat(True, 'v', [numVista]) lv.append(var) varsV[numVista] = var numVista = numVista + 1 n = len(lv) for x in xrange(n): for y in xrange(x + 1, n): c2.append([lv[x].negarVar(), lv[y].negarVar()]) return lv, [lv], c2
def clausula78a(varz, varg, varm, subObQ, subObV, vis, ltaux, c7, c8): global varsT c8temp1 = [varz, varm.negarVar()] c8temp2 = [varm] lt = Set([]) i = 0 for x in subObQ.orden: y = subObV.orden[i] varT = VariableSat(True, 't', [int(x), int(y)]) lt.add(varT) varsT[(int(x), int(y))] = varT c7temp = [varm.negarVar(), varz.negarVar(), varT] c7.append(c7temp) c8temp1.append(varT.negarVar()) c8temp2.append(varT.negarVar()) i = i + 1 ltaux.setdefault((varT, varm), Set([])).add(varz) c8.append([varz.negarVar(), varg]) c8.append([varz.negarVar(), varm]) return lt
def clausulas678(q, vistas): global varsT global varsZ global varsG global varsV c6 = [] c7 = [] c8 = [] c9 = [] c10 = [] lz = [] lt = Set([]) ltaux = {} c6temp = [] c14temp = {} i = 0 for subOb in q.cuerpo: pred = subOb.predicado m = 0 varg = varsG[i] for v in vistas: j = 0 varm = varsV[m] c6temp = [varg.negarVar(), varm.negarVar()] c9temp = [] subObCubre = False for subObtemp in v.cuerpo: predtemp = subObtemp.predicado if pred == predtemp: varz = VariableSat(True, 'z', [i, j, m]) lz.append(varz) varsZ[(i, j, m)] = varz c6temp.append(varz) c9temp.append(varz) lttemp = clausula78a(varz, varg, varm, subOb, subObtemp, m, ltaux, c7, c8) lt |= lttemp subObCubre = True j = j + 1 c9 = c9 + clausula9(c9temp) m = m + 1 if len(c6temp) > 2: c6.append(c6temp) if not subObCubre == True: c14temp.setdefault(varm.negarVar(), []).append(varg.negarVar()) i = i + 1 return lt, lz, c6, c7, c8, c9, clausula14(c14temp), ltaux
def variablesG(q, lv): global varsG lg = [] c3 = [] numSO = 0 for v in q.cuerpo: var = VariableSat(True, 'g', [numSO]) lg.append(var) varsG[numSO] = var numSO = numSO + 1 for g in lg: c3temp = [lv[0].negarVar(), g.negarVar()] c3.append(c3temp) for v in lv[1:]: c3temp = [v.negarVar()] + lg c3.append(c3temp) return lg, c3