Dimostrando la chiusura sotto l'inversione delle lingue accettate dagli automi min-heap


16

Questa è una domanda di follow-up di questo .

In una precedente domanda sulle macchine a stati esotici , Alex ten Brink e Raphael hanno affrontato le capacità computazionali di un tipo particolare di macchina a stati: automi min-heap. Sono stati in grado di dimostrare che l'insieme delle lingue accettate da tali macchine ( HAL ) non è né un sottoinsieme né un superset dell'insieme delle lingue senza contesto. Vista la riuscita risoluzione e l'apparente interesse per tale questione, continuo a porre diverse domande di follow-up.

È noto che le lingue normali sono chiuse in una varietà di operazioni (potremmo limitarci a operazioni di base come unione, intersezione, complemento, differenza, concatenazione, stella di Kleene e inversione), mentre le lingue senza contesto hanno una chiusura diversa proprietà (sono chiuse sotto unione, concatenazione, stella di Kleene e inversione).

HAL è chiuso per inversione?


Quali sono gli usi di tali macchine? O è un esercizio accademico?
Dave Clarke,

@DaveClark Beh, sono per lo più un esercizio accademico (per quanto ne so, li ho appena inventati nella domanda collegata). Tuttavia, possono fare il calcolo nello stesso modo in cui possono fare altre macchine (DFA, TM, ecc.), Quindi forse potrebbe esserci un uso per loro.
Patrick87

Questa domanda illustra perché vuoi avere grammatiche che accompagnano i tuoi automi. Arr, il mio cervello!
Raffaello

4
Stavo cercando di dimostrarlo utilizzando un linguaggio del formato , ma ci è voluto troppo tempo e ho rinunciato. Forse questa idea sarebbe d'aiuto a chiunque. {xyy is a lexicographically sorted copy of x}
Ran G.

@RanG .: Penso che dovrebbe funzionare. Sono felice di assegnare la generosità a una risposta che dimostri che la lingua è in e fornisce un ragionamento decente che l'inversione non lo è. HAL
Raffaello

Risposte:


4

Considera la lingua (dove # 0 ( x ) indica il numero di zeri in x ).

L×2={xyzx,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,yz0x0y1x,y1z10 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=L×2R

L={zyxx,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 ,HL4n|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|=2nz,y#0(y)=n/2diversixs' tale chezyxL.(nn/2)XzyXL

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 ( nzy3ncΓ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)xsx1,x2

  1. Il prefisso di lunghezza di x 1 ha un numero di zeri diverso rispetto al prefisso di x 2 della stessa lunghezza.n/2x1x2
  2. 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 ( yzyx1px2sx1pxn/2x2sx2x1px2sx1x2 ), 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|Γ||Γ|


Bello! Dovrà rileggere la parte formale più tardi. 1) Annuncio ¹: vedi anche qui . 2) L'argomento si interrompe se consentiamo la scelta non deterministica del simbolo heap restituito (tra tutti i simboli della stessa priorità).
Raffaello
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.