Um tipo de conversão é simplesmente o inverso da conversão k-sat-para-3-sat:
Lembre-se, a conversão de k-sat em "j" -sat, j < k:
→(x1∨x2. . . ∨xj∨...∨xk)(x1∨x2. ..xj∨d) ∧(d¯¯¯∨xj+1∨xj+2...xk)
Aqui, dé uma variável fictícia, que significa algo como "Esta cláusula não é verdadeira, mas outra cláusula que eu conheço é". A outra cláusula é a cláusula seguinte que foi separada da original. O exemplo acima é um exemplo em que2j≥k, caso contrário, o segundo nó de divisão ainda será maior que j, e devemos dividi-lo novamente, da mesma maneira.
Invertendo a conversão
(x1∨x2...xj)∧(x¯¯¯j∨xj+1∨...xk) então você pode combinar as cláusulas em:
(x1∨x2...xj−1∨xj+1∨xj+2∨...xk)
Observe a falta xj nesta nova fórmula.
Obviamente, você não tem garantia de encontrar cláusulas como essa em uma fórmula arbitrária, portanto, a menor garantiank+m é igual a nk.
No entanto, em fórmulas comuns, uma variável e sua negação aparecerão na fórmula; caso contrário, você pode executar a eliminação literal literal (descrita aqui ). Para simplificar, vamos também assumir quek +m≥2k−2. Então podemos combinar duas cláusulas que contêm um literal em uma e sua negação na outra. Como todo literal deve ter outra cláusula com negação, pode-se adivinhar empiricamente que você deve ser capaz de reduzir pela metade o número de cláusulas (você pode ficar preso a alguns literais e suas negações em cláusulas já unidas e, assim, ficará preso a algumas cláusulas não articuláveis no final; juntar cláusulas como essa pode ser outro problema interessante).
EDITAR:
Após reflexão, percebi que xjdeve ser gratuito e não ser usado em nenhum outro lugar da fórmula para recolher as duas cláusulas às quais pertence. Portanto, esse tipo de cláusula (uma contendo um literal e a outra sua negação, com esse literal não sendo usado em nenhum outro lugar da fórmula) é muito mais raro do que eu pensava anteriormente. Portanto, a resposta real é que não há garantia de quanto podemos reduzir o número de cláusulas na fórmula.