Qual è il significato delle lingue sensibili al contesto (Tipo 1)?


34

Vedendo che nella Gerarchia di Chomsky le lingue di tipo 3 possono essere riconosciute da una macchina a stati senza memoria esterna (cioè un automa finito), il tipo 2 da una macchina a stati con un singolo stack (cioè un automa a spinta) e il tipo 0 da una macchina a stati con due pile (o, equivalentemente, un nastro, come nel caso delle macchine di Turing), come si adattano le lingue di tipo 1 in questa immagine? E quali vantaggi porta a determinare che una lingua non è solo Tipo 0 ma Tipo 1?


2
Poiché stai chiedendo qui e non in cstheory.SE (come suggerito da @Sunil), ti suggerisco di aggiungere anche una breve descrizione / definizione di Tipo 1, che potrebbe non essere un termine familiare per tutti.
Janoma,

5
@Sunil No, non lo sarebbe. Questa non è una domanda a livello di ricerca (e anche se lo fosse, sarebbe comunque in tema qui perché non escludiamo domande a livello di ricerca - almeno è quello che ricordo di essere stato il risultato della discussione su area51).
sepp2k,

3
@Janoma: Perché dovrebbe aiutare a includere informazioni che possono essere facilmente consultate (non contano come rumore)?
Maschera di bit

4
@Janoma Penso che la linea guida generale dovrebbe essere quella di spiegare i concetti che qualcuno che sarebbe in grado di rispondere alla domanda potrebbe non sapere (se la linea guida spiegasse tutto ciò che alcuni utenti del sito potrebbero non sapere, spiegheremmo tutto sempre e questo non è certamente lo standard su altri siti SE). E non penso che qualcuno che non conosce la gerarchia di Chomsky sarebbe in grado di rispondere alla domanda. Ovviamente non fa male spiegare il più possibile (a patto che la domanda non sia noiosa): non penso che sia necessario in questo caso.
sepp2k,

4
Ogni maggiore informatico conosce (o dovrebbe conoscere) la gerarchia di Chomsky. Tutti gli altri possono cercarlo negli anni '20. Un link a forse Wikipedia dovrebbe essere sufficiente qui.
Raffaello

Risposte:


19

I linguaggi sensibili al contesto sono esattamente i linguaggi che possono essere riconosciuti da una macchina di Turing usando spazio lineare e non determinismo. Puoi simulare una tale macchina di Turing usando il tempo esponenziale, in modo da poter riconoscere tale linguaggio in tempo esponenziale. Fare nota che il problema di riconoscere alcuni linguaggi sensibili al contesto è Completa, il che significa che siamo abbastanza sicuro che non si può fare meglio di tempo esponenziale.PSPACE

Confrontando questo con le lingue di tipo 0, ciò significa che puoi almeno dire qualcosa su quanto tempo ci vuole per riconoscere la lingua. Una lingua di tipo 0 potrebbe non essere nemmeno decidibile: la lingua di tutte le macchine di Turing che si fermano è una lingua di tipo 0, ma poiché riconoscere questa lingua è esattamente il problema di arresto, non è decidibile.

Le grammatiche sensibili al contesto non sono molto utili nella pratica. Le grammatiche senza contesto sono intuitive con cui lavorare, ma come mostrano gli esempi su Wikipedia , le grammatiche sensibili al contesto diventano molto rapidamente disordinate. I programmi che usano lo spazio polinomiale sono progettati molto più facilmente (e la garantisce l'esistenza di un CSG equivalente che è solo polinomialmente più grande dell'uso dello spazio dell'algoritmo).PSPACE

Il motivo della loro esistenza è che formano un'estensione molto naturale di grammatiche senza contesto (si consente al contesto di determinare quali produzioni sono valide). Questo probabilmente avrà ispirato Chomsky a definirli e nominarli come lingue di tipo 1. Ricorda che questa definizione è stata fatta prima che i computer diventassero veloci come lo sono oggi: è più interessante per i teorici del linguaggio formale che per i programmatori.

Le grammatiche senza restrizioni diventano ancora più strane: non esiste più la nozione di "espandere" un non-terminale e sostituirlo con una produzione, possibilmente a seconda del contesto. Puoi modificare liberamente anche il contesto. Questo rende le grammatiche senza restrizioni ancora meno intuitive con cui lavorare: i programmi sono equivalenti e molto più intuitivi.


Ma le lingue sensibili al contesto sono utili! Vedi, ad esempio, questa discussione .
Raffaello

La sensibilità al contesto è utile, ma le grammatiche sensibili al contesto come modo per descrivere le lingue non sono molto utili all'IMO. Stai molto meglio usando altri mezzi per descrivere le funzionalità sensibili al contesto.
Alex ten Brink

Ma parli di lingue nella maggior parte delle risposte. Per quanto riguarda le grammatiche, ymmw. Esistono modelli grammaticali tra CFG e CSG che hanno applicazioni di modellazione naturale, ad esempio accoppiata / multi-CFG.
Raffaello

1
Hai ragione, sono stato sciatto con la distinzione tra lingue e grammatiche che vedo. Ho aggiornato la mia risposta.
Alex ten Brink

10

In generale, di solito si desidera conoscere la classe più piccola a cui appartiene una determinata lingua Questo perché classi più piccole possono essere riconosciute / accettate / generate da meccanismi più semplici (automi, grammatiche, espressioni regolari, ecc.), Il che è desiderabile.L

Ad esempio, la classe di linguaggi regolari ha buone proprietà di chiusura e, dato un DFA , puoi verificare in tempo lineare che una parola appartiene a L ( A ) . Al contrario, con una macchina Turing è necessario un tempo lineare solo per leggere l'output, che di solito accade prima che inizi effettivamente l'elaborazione.AL(A)

In breve, per le classi più piccole è necessario meno potere computazionale per risolvere il problema di decidere se una parola appartiene alla lingua.

Secondo Wikipedia , Chomsky ha definito grammatiche sensibili al contesto (cioè Tipo 1) per descrivere la sintassi dei linguaggi naturali. Questo è un po 'diverso rispetto ad altre classi di lingue, che sono state introdotte per descrivere le famiglie di stringhe utilizzate in matematica (ad es. La sintassi delle formule aritmetiche) anziché le lingue naturali (ad es. La sintassi di una frase grammaticalmente corretta in inglese) .


2
"In breve, per le classi più piccole è necessario meno potere computazionale per risolvere il problema di decidere se una parola appartiene alla lingua." esattamente, ma come si applica al Tipo 1 rispetto al Tipo 0? Questa è esattamente la domanda!
Maschera di bit

ccn

8

Nei linguaggi senza contesto, in qualsiasi punto dell'analisi di input, l'automa si trova in uno stato definito dal suo stack. Ogni produzione ha lo stesso comportamento nel consumare l'input indipendentemente da dove viene utilizzato.

Questo porta all'interessante proprietà che ogni produzione genera una sotto-lingua di quella generata da quelle più profonde nello stack e quindi per ogni coppia A e B di produzioni generate e consumate su qualsiasi input particolare abbiamo tre possibili casi:

  • a: l'input consumato da A è completamente contenuto nell'input consumato da B; o
  • b: l'input consumato da A contiene completamente l'input consumato da B; o
  • c: l'input consumato da A è completamente disgiunto dall'input consumato da B.

Ciò implica che non si verifica mai quanto segue:

  • d: l'input consumato da A si sovrappone parzialmente all'input consumato da B.

Contrariamente a ciò, nei linguaggi sensibili al contesto, il comportamento di ogni produzione dipende da dove viene utilizzato, quindi l'input consumato in una produzione non è una sotto-lingua di quelli più profondi nello stack (in effetti, elaborandolo con un lo stack non funzionerebbe). E abbiamo quella possibilità che potrebbe accadere.

Nel mondo reale, un caso in cui un linguaggio sensibile al contesto avrebbe senso è qualcosa di simile a <b> testo in grassetto </b>, <i> testo in corsivo </i> e <u> testo sottolineato </u> con questi tag html e lasciarli sovrapporsi, come "Questo è un <u> testo con <i> misti </u> tag sovrapposti </i>." Osserva che per analizzarlo e scoprire se tutti i tag iniziali corrispondono ai tag finali, un PDA non lo farà perché non è privo di contesto, ma un LBA lo farà facilmente.


7

Proprietà di chiusura

Di tutte le classi linguistiche della gerarchia di Chomsky, solo le lingue regolari e sensibili al contesto sono chiuse sotto integrazione . Quindi questa è una sorta di caratteristica unica dei linguaggi sensibili al contesto.

Contrariamente alle lingue senza contesto, le CS sono anche chiuse sotto intersezione e mescolano il prodotto .


6

Qualsiasi linguaggio di tipo 1 può essere riconosciuto da una macchina di Turing che utilizza solo spazio lineare (i cosiddetti automi con limiti lineari).


2
Sì, questa è la definizione. Ma come mi aiuta questa restrizione?
Maschera di bit

3
mi aiuta perché limita la potenza degli algoritmi che riconoscono i CSG su E anziché su EXP. Non so come ti aiuti :)
Suresh,

5

Le lingue di tipo 1 possono essere decise da automi limitati lineari , che sono macchine di Turing non deterministiche che possono usare solo una parte del nastro la cui dimensione è lineare rispetto alla dimensione di input.


4

La gerarchia di Chomsky classifica le grammatiche più delle lingue. Tuttavia, non è stato progettato per avere a che fare con il numero di nastri che un automa dovrebbe riconoscere, come hai suggerito per i tipi 2 e 3, anche se esiste un tipo di macchina di Turing che lo fa per le grammatiche di tipo 1.

Si noti inoltre che le lingue delle grammatiche di tipo 0 non sono tutte riconosciute da una macchina di Turing, ma possono essere enumerate solo da una macchina del genere: Tipo 0 significa enumerazione ricorsiva e le macchine di Turing riconoscono solo le lingue ricorsive.


4

Il linguaggio di programmazione moderno utilizza continuamente funzioni sensibili al contesto; cadono in un sottoinsieme che può essere deciso in modo efficiente.

Esempi sono l'analisi del nome e del tipo e l'inferenza del tipo.


3

Molti altri hanno affermato che le lingue di tipo 1 sono quelle che possono essere riconosciute dagli automi limitati lineari. Il problema dell'arresto è decidibile per gli automi limitati lineari, il che a sua volta significa che molte altre proprietà che sono indecidibili dal punto di vista computazionale per le lingue riconosciute dai tornitori sono decidibili per le lingue di tipo 1.

È vero che la prova che il problema dell'arresto è decidibile per gli automi limitati lineari si basa sul fatto che con una quantità finita di nastro possono entrare solo in un numero finito di stati, quindi se non si fermano in così tanti passaggi sai che sono loop e non si fermerà mai. Questa dimostrazione si applica tecnicamente a tutti i computer effettivi (che dispongono anche di memoria finita), ma ciò non ha alcun vantaggio pratico nel risolvere il problema di arresto per i programmi in esecuzione su di essi.

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.