Complessità di calcolo della parità di formula CNF read-double opposta (


11

In una formula CNF letta due volte opposta, ogni variabile appare due volte, una volta positiva e una volta negativa.

Sono interessato al problema , che consiste nel calcolare la parità del numero di incarichi soddisfacenti di una formula CNF letta due volte opposta.Rtw-Opp-CNF

Non sono riuscito a trovare alcun riferimento sulla complessità di tale problema. Il più vicino che sono riuscito a trovare è che la versione di conteggio è # P-completa (vedere la sezione 6.3 in questo documento ).#Rtw-Opp-CNF#P

Grazie in anticipo per il vostro aiuto.


Aggiornamento del 10 aprile 2016

  • In questo articolo , il problema è mostrato essere P- completo, tuttavia la formula prodotta dalla riduzione da 3 SAT non è in CNF e non appena si tenta di riconvertirlo in CNF si ottiene un formula tre volte di lettura.Rtw-Opp-SATP3SAT
  • La versione monotona è mostrata come P completa in questo documento . In tale articolo, t Rtw-Opp-CNF viene rapidamente citato alla fine della sezione 4: Valiant afferma che è degenerato. Non è chiaro per me cosa significhi esattamente essere degenerato, né cosa implica in termini di durezza.Rtw-Mon-CNFPRtw-Opp-CNF

Aggiornamento 12 aprile 2016

Sarebbe anche molto interessante sapere se qualcuno ha mai studiato la complessità del problema . Data una formula CNF opposta per la lettura due volte, tale problema richiede di calcolare la differenza tra il numero di assegnazioni soddisfacenti con un numero dispari di variabili impostato su true e il numero di assegnazioni soddisfacenti con un numero pari di variabili impostato su true. Non ho trovato alcuna letteratura a riguardo.ΔRtw-Opp-CNF


Aggiornamento 29 maggio 2016

Come sottolineato da Emil Jeřábek nel suo commento, non è vero che Valiant abbia affermato che il problema è degenerato. Ha solo detto che una versione più limitata di tale problema, Pl-Rtw-Opp-3CNF , è degenerata. Nel frattempo, continuo a non sapere cosa significhi esattamente degenerare, ma almeno ora sembra chiaro che sia sinonimo di mancanza di potere espressivo.Rtw-Opp-CNFPl-Rtw-Opp-3CNF


TRtw-Opp-CNF è duro come ⊕Rtw-Mon-CNF. Puoi creare il gadget di negazione: (i0 v x0 v x1) (x1 v x2) (i1 v x0 v x2). Se i0 = i1, allora weight = 0 (nel modulo 2). Altrimenti peso = 1.

Non riesco a trovare la riduzione da tRtw-Mon-CNF a ⊕Rtw-Opp-CNF, ma ho trovato un algoritmo polinomiale per risolvere ⊕Rtw-Opp-CNF. Quindi ⊕Rtw-Opp-CNF è più semplice.

Non riesco a trovare una menzione di tRtw-Opp-CNF nel documento di Valiant. Sostiene che lPl-Rtw-Opp-3CNF è "degenerato", ma ciò comporta diverse restrizioni aggiuntive.
Emil Jeřábek,

@EmilJeřábek: hai decisamente ragione. Sono stato fuorviato dalla mia ignoranza del significato di "degenerato" e ho applicato lo stesso tipo di ragionamento che viene normalmente applicato in presenza di risultati di completezza: se un certo problema è completo per una classe, rimuovendo le restrizioni da esso ovviamente si preserva la completezza. Anche se non so ancora cosa significhi esattamente "degenerare" , mi è almeno chiaro ora che tale termine è in qualche modo sinonimo di debolezza (cioè mancanza di potere espressivo), quindi il ragionamento di cui sopra non può essere applicato. Ho corretto la domanda di conseguenza.
Giorgio Camerani,

1
@Maciej: Davvero? Come funziona il tuo algoritmo polinomiale?
Giorgio Camerani,

Risposte:


3

Si scopre che ogni formula opposta a leggere due volte ha un numero pari di incarichi soddisfacenti. Ecco una buona dimostrazione di ciò, anche se probabilmente si potrebbe eliminare la terminologia teorica dei grafi.

Sia una formula CNF con lettura opposta per due volte. Senza perdita di generalità, nessuna clausola contiene sia una variabile che la sua negazione.ϕ

Considera il grafico cui set di vertici è rappresentato dalle clausole di ϕ e per ogni variabile x , aggiungiamo un bordo (non indirizzato) che è incidente sulle due clausole contenenti x . Il nostro presupposto WLOG in ϕ dice che questo grafico non ha loop automatici. Inoltre, pensa a etichettare ciascun bordo con la variabile che lo definisce; in questo modo possiamo distinguere tra bordi paralleli.Gϕxxϕ

Un orientamento di è un grafo orientato i cui bordi sono formate assegnando una direzione per ciascun bordo in G . Chiama un orientamento di G ammissibile se ogni vertice di G ha un bordo in uscita. È facile vedere che soddisfino assegnazioni a φ sono in corrispondenza biunivoca con orientamenti ammissibili di G .GGG GϕG

Ora sostengo che il numero di orientamenti ammissibili di è pari. L'argomento è "per involuzione": costruisco una mappa Φ con le seguenti proprietà:GΦ

  1. è totalmente definito (ogni orientamento ammissibile è mappato da qualche parte)Φ
  2. invia orientamenti ammissibili a orientamenti ammissibiliΦ
  3. è un'involuzione ( Φ Φ è l'identità)ΦΦΦ
  4. non ha punti fissiΦ

Una volta che questi sono stabiliti, possiamo osservare che le orbite hanno dimensione 2 e suddivide gli orientamenti ammissibili di G . Ne consegue che il numero di orientamenti ammissibili è pari.ΦG

Per definire , lascia che G sia un orientamento ammissibile, e considera di spezzare G nei suoi componenti fortemente connessi. Sends invia quindi G all'orientamento formato invertendo tutti i bordi all'interno dei componenti fortemente collegati. Le proprietà vengono quindi verificate direttamente:ΦGGΦG

  1. Ogni grafico diretto può essere suddiviso in componenti fortemente collegati.
  2. Considera il "DAG di componenti fortemente connessi" in ; chiamalo grafico del quoziente. Si noti che Φ ( G ) avrà la stessa struttura quoziente, poiché Φ non influisce sui bordi tra SCC e i grafici fortemente collegati rimangono fortemente collegati quando si invertono tutti i loro bordi. Inoltre, se un SCC ha più di un vertice, tutti i suoi vertici costituenti hanno un bordo in arrivo. Se un SCC ha un solo vertice e non è una fonte nel quoziente, tutti i suoi vertici costituenti hanno un bordo in arrivo. Quindi per mostrare Φ ( G )GΦ(G)ΦΦ(G)è ammissibile, è sufficiente dimostrare che gli SCC che sono sorgenti nel quoziente hanno più vertici. Ma questo segue il fatto che ogni vertice nel componente ha un fronte in arrivo, che deve provenire da un altro vertice nel componente poiché non ha auto-loop e il componente è una fonte nel quoziente.G
  3. Ciò deriva dal fatto che la struttura quoziente di coincide con la struttura di quoziente G .Φ(G)G
  4. Per ammissibilità, ha un ciclo, e quindi alcuni SCC con un bordo al suo interno.G

Bella osservazione! Un modo più semplice di vedere questo (come dici tu, "elimina la terminologia grafico-teorica") è osservare che se un incarico a soddisfa F, allora anche l'incarico a '(x) = 1-a (x) soddisfa F. Ciò può essere mostrato facilmente per induzione sul numero di variabili di F.
lupo,

Non penso come dato è un'involuzione. Ad esempio, considera il grafico a 4 elementi con bordi diretti 0 1 2 0 3 1 . Questo è un orientamento ammissibile. Supponiamo che il suo primo ciclo sia 0 1 2 0 ; poi, dopo aver invertito questo ciclo, nasce un nuovo ciclo, vale a dire. 0 3 1 0 . Se questo ciclo viene ordinato prima di quello originale, siamo nei guai. Φ01203101200310
Emil Jeřábek,

@holf Anche la tua osservazione è sbagliata. Considera il CNF con le clausole , ¬ x y ¬ z e ¬ y z . Ciò è soddisfatto dall'assegnazione ( 1 , 1 , 1 ) , ma non da ( 0 , 0 , 0 ) . x¬xy¬z¬yz(1,1,1)(0,0,0)
Emil Jeřábek,

Penso che la seguente definizione di potrebbe funzionare. Sia M l'insieme di vertici x con la proprietà che per ogni y raggiungibile da un percorso (diretto) da x , x è raggiungibile da un percorso da y . (Come logico modale lo descriverei come l'unione dei cluster finali della chiusura riflessiva transitiva del grafico diretto, non so come lo chiamerebbero i teorici dei grafici.) Quindi invertire tutti i bordi con la sorgente (quindi anche il bersaglio) in M . ΦMxyxxyM
Emil Jeřábek,

@Emil: Ah sì, hai ragione. Se capisco bene il tuo suggerimento, stai dicendo di spezzare l'orientamento in componenti fortemente collegati e invertire i bordi all'interno dei componenti. Penso che funzioni. Aggiornerò la mia risposta di conseguenza. Molte grazie!!
Andrew Morgan,

0

Non sono sicuro che la mia idea sia comprensibile, quindi spiegherò sull'esempio di Giorgio:

.(x1x2x3)(¬x1¬x3x4)(¬x4x5)(¬x2¬x5¬x6)

Innanzitutto devo cambiarlo sul modulo DNF:

.(x1x2x3)(¬x1¬x3x4)(¬x4x5)(¬x2¬x5¬x6)

Questo dovrebbe dare la stessa risposta. E non importa se calcolo il numero di soluzioni modulo 2 per questo:

= 0(x1x2x3)(¬x1¬x3x4)(¬x4x5)(¬x2¬x5¬x6)

o per questo:

= 1.(x1x2x3)(¬x1¬x3x4)(¬x4x5)(¬x2¬x5¬x6)

Quindi sto scegliendo il secondo. Ho delle implicazioni:

= ( x 1x 2x 3 )i0(x1x2x3)

= ( ¬ x 1¬ x 3x 4 )i1(¬x1¬x3x4)

= ( ¬ x 4x 5 )i2(¬x4x5)

= ( ¬ x 2¬ x 5¬ x 6 )i3(¬x2¬x5¬x6)

Ora sto costruendo un sistema di equazioni:

j0j1=1

j0j3=1

j0j1=1

j2j3=1

j3=1

Questo sistema ha una soluzione. 1 mod 2 = 1, quindi la risposta è 1. Ma verifica solo una volta. Se ogni variabile si presenta due volte, è possibile avere answer = 1?x6


Se il mio pensiero è OK, allora la risposta è "no". Naturalmente suppongo che la variabile si presenti una volta in positivo e una volta in negazione.
Maciej,

Ho dimenticato l'equazione per : j 1j 2 = 1. Ma risulta se lo stesso. Una soluzione: j 3 = 1, j 2 = 0, j 1 = 1, j 0 = 0.x4j1j2j3j2j1j0
Maciej

-1

scusa per il grande ritardo. Fino ad ora probabilmente il problema è stato risolto. In caso contrario, presenterò il mio algoritmo polinomiale per risolvere . Prima proviamo a calcolare il numero di soluzioni modulo 2 di questa equazione: f ( X )g ( X ) . Dove f e g sono funzioni logiche e X è un vettore di variabili. La parte comune, f ( X ) g ( X ) , si verifica due volte (una volta in f (X) e una volta in g (X)). Quindi nel modulo 2 la parte comune non è importante. Possiamo calcolare il numero di soluzioni modulo 2 di f ( X )Rtw-Opp-CNFf(X)g(X)f(X)g(X)f(X)e numero di soluzioni modulo 2 di e quindi sommare questi risultati modulo 2. Ora supponiamo che la funzione sia presentata in questo modulo:g(X)

,i0i1i2...in1

dove è un fattore implicito (intendo variabili collegate dall'operatore AND; ad esempio: x 0x 1¬ x 2 ).ijx0x1¬x2

2ki0i1i2...in1

i0i1i2...in1

ab=ab(ab)

1) ha tutte le variabili,

2) ogni variabile si verifica esattamente una (se la variabile si presenta due volte, allora abbiamo una parte positiva e una negativa, quindi questo darà come 0).

x0i0x0i1

j0j1=1

j0j1i0i1i0j0j02l


Rtw-Opp-CNF

@AndrewMorgan Ma una formula con una clausola univoca contenente tutte le variabili esattamente una volta non sarebbe una formula read-two. La restrizione è esattamente due volte, non al massimo due volte.
Giorgio Camerani,

x6(x1x2x3)(¬x1¬x3x4)(¬x4x5)(¬x2¬x5¬x6)x6

(x1x2)(x1¯)(x2¯)(x1x2)(x1¯x2¯)(x1)(x1¯)(x2)(x2¯)

@AndrewMorgan OK, ora vedo. Tuttavia, considera che anche nella famiglia di casi che intendi, il numero di incarichi soddisfacenti sembra rimanere pari. La domanda posta da Maciej nel suo commento si rivela difficile.
Giorgio Camerani,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.