Considera la lingua
(dove # 0 ( x ) indica il numero di zeri in x ).
L×2={x⊥y⊥z∣x,y,z∈{0,1},#0(x)=#0(y) and |x|+|y|=z}
#0(x)x
È facile decidere usando una macchina HAL - osserva che la macchina deve tenere traccia di due proprietà: il numero di zeri in x vs y e la lunghezza di x , y (vs z ). Può spingere a nell'heap per ogni zero che vede in x (e poi pop per qualsiasi zero visto in y ); inoltre preme per qualsiasi bit in x , y (e successivamente si apre per qualsiasi bit di z ). Dal momento che tutte le s vengono spinte verso il basso nell'heap, non interferiscono con il conteggio. Il ⊥L×2xyx,yz0
x0
y1
x,y1
z1
0
⊥ funge da delimitatore e può essere praticamente ignorato.
Ora, lascia che , sia la lingua inversa. Cioè,
L = { z ⊥ y ⊥ x ∣ x , y , z ∈ { 0 , 1 } , # 0 ( x ) = # 0 ( y ) e | x | + | y | = Z }
Mostreremo che nessuna macchina HAL può decidere L .L=LR×2
L={z⊥y⊥x∣x,y,z∈{0,1},#0(x)=#0(y) and |x|+|y|=z}
L
L'intuizione è la seguente. Come sopra, la macchina deve tenere traccia sia della lunghezza di che del numero di zeri in x , y . Tuttavia, in questo caso è necessario seguirli contemporaneamente . Questo non può essere fatto tramite un heap. Più in dettaglio, dopo aver letto z , l'heap contiene informazioni sulla lunghezza di | x | + | y | . durante la lettura di y la macchina deve anche tenere nell'heap il numero di zeri in y . Tuttavia, queste informazioni non possono interferire con le informazioni che l'heap ha già sulla lunghezza che ci aspettiamo xzx,yz|x|+|y|yyxessere. In modo molto intuitivo, o le informazioni sul numero di zeri saranno "sotto" le informazioni sulla lunghezza di , e quindi non possiamo accedervi durante la lettura di x , oppure è "sopra" quelle informazioni, rendendole inaccessibili o il due informazioni saranno "miste" e diventeranno insignificanti.xx
Più formalmente, useremo una sorta di argomento di "pompaggio". Cioè, prenderemo un input molto lungo e mostreremo che lo "stato" della macchina deve ripetersi durante l'elaborazione di quell'input, il che ci permetterà di "sostituire" l'input una volta che la macchina ripete il suo "stato".
Per la prova formale, abbiamo bisogno di una semplificazione della struttura della macchina HAL, vale a dire che non contiene un "loop" di -transitions 1 . Con questo presupposto possiamo vedere che per ogni simbolo di input la macchina elabora, il contenuto dell'heap può aumentare / diminuire al massimo di c (per qualche costante abbastanza grande c ).ε1cc
Prova.
Supponiamo che decida L e consideri un input abbastanza lungo (diciamo, di lunghezza 4 n , quindi | x | = | y | = n ,HL4 n|x|=|y|=n , ignorando i ⊥ s in seguito). Per essere concreti, correggi z , y e supponi che # 0 ( y ) = n / 2 . Osservare che ci sono ( n| z| =2n⊥z, y#0( y) = n / 2diversixs' tale chez⊥y⊥x∈L.( nn / 2)Xz⊥ y⊥ x ∈ L
Considera il contenuto dell'heap immediatamente dopo l'elaborazione di . Esso contiene al massimo 3 n c simboli (in cui ogni simbolo è da un alfabeto fisso Γ ), con la nostra ipotesi. Tuttavia, ci sono ( nz⊥ y3ncΓdiversix'sche dovrebbero essere accettati (che è sostanzialmente maggiore della quantità di possibili diversi contenuti per l'heap, poiché questo aumenta in modo esponenziale, mentre il diverso numero di heap aumenta polinomialmente, vedi sotto). Prendi due inputx1,x2che dovrebbero essere accettati, in modo che valga quanto segue:(nn/2)x′sx1,x2
- Il prefisso di lunghezza di x 1 ha un numero di zeri diverso rispetto al prefisso di x 2 della stessa lunghezza.n/2x1x2
- Quando la macchina legge un prefisso di lunghezza della parte x , l'heap ha lo stesso aspetto per x 1 e x 2 , e inoltre, la macchina è nello stesso stato (ciò deve accadere per alcuni x 1 , x 2 , per abbastanza grande nn/2xx1x2x1,x2n20.8n2x1,x2diverse opzioni per il contenuto heap e lo stato 3 ).(3.5cn)|Γ||Q|3
È chiaro che la macchina deve accettare la parola , dove x p 1 è un prefisso di x della lunghezza n / 2 e x s 2 è un suffisso di x 2 della stessa lunghezza. Si noti che il numero di zeri in x p 1 x s 2 differisce dal numero di zeri in x 1 e x 2 (ovvero da # 0 ( yz⊥y⊥xp1xs2xp1xn/2xs2x2xp1xs2x1x2 ), a causa del modo in cui abbiamo scelto x 1 e x 2 , quindi abbiamo raggiunto una contraddizione.#0(y)x1x2
Questa ipotesi danneggia la generalità? Non credo, ma ciò richiede davvero una prova. Se qualcuno vede come aggirare questo presupposto extra, mi piacerebbe saperlo. 2 Ripariamo x 1 in modo che sia prefisso (di lunghezza n / 2 ha esattamente n / 4 zeri). Ricordiamo che usandol'approssimazione di Stirlingconosciamo quel registro ( n1
2 x1n/2n/4doveH()è lafunzione dell'entropia binaria. PoichéH(1/4)≈0,81abbiamo ( nlog(nk)≈nH(k/n)H()H(1/4)≈0.81per abbastanza granden. (nn/4)>20.8nn3Supponendo l'alfabetoΓ, ci sono| Γ| ndiverse stringhe di lunghezzan, quindi se si trattava di uno stack saremmo fregati. Tuttavia, inserire "01" in un heap equivale a premere "10": l'heap memorizza solo la versione ordinata del contenuto. Il numero di diversestringheordinatedi dimensionenè (n+1
3 Γ|Γ|nnn, per una costante| Γ| .(n+1|Γ|−1)≈n|Γ||Γ|