Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/teschiopol/clf
CLF Exam
https://github.com/teschiopol/clf
complexity computability
Last synced: about 1 month ago
JSON representation
CLF Exam
- Host: GitHub
- URL: https://github.com/teschiopol/clf
- Owner: teschiopol
- Created: 2024-09-07T14:54:19.000Z (4 months ago)
- Default Branch: master
- Last Pushed: 2024-09-10T18:51:22.000Z (3 months ago)
- Last Synced: 2024-09-10T21:09:24.158Z (3 months ago)
- Topics: complexity, computability
- Language: Shell
- Homepage: https://teschiopol.github.io/clf
- Size: 71.3 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# CLF
## Cap 2 - Linguaggi Context-Free
### Cap 2.1 Grammatiche Context-Free
Una quadrupla (V, $\sum$, R, S) dove:
- V è insieme delle variabili
- $\sum$ è insieme terminali
- R è insieme delle regole
- S è stato iniziale#### Progettare grammatiche context-free
Prima si costruisce il DFA per il linguaggio regolare, poi lo si trasforma in CFG.
- Una variabile R per ogni stato
- Regola Ri -> aRq se c'è transazione da stato i a stato q tramite a nel DFA
- Regola Ri -> $\epsilon$ se stato i è accettanteGrammatiche possono generare stessa stringa in modi diversi, sono dette ambigue. Se linguaggi possono essere generati solo così, sono detti inerentemente ambigui. Es: aibjck | i = j oppure j = k
#### Forma normale di Chomsky
Se ogni regola della grammatica è della forma:
- A -> BC
- A -> aPer ottenerla:
- Aggiungiamo nuova variabile iniziale
- Eliminiamo le regola A -> $\epsilon$, poi in ogni regola dove appare A nel lato destro, scriviamo tutte le occorenze senza la A.
- A -> $\epsilon$ fa diventare S -> ASA | aB in S -> ASA | aB | SA | AS | S
- Eliminiamo le regole unitarie A -> B, poi aggiungiamo A -> u per la regola B -> u, dove u è una stringa di variabili e terminali
- Rimpiazziamo le regole A->u1u2u3 in poi con A->u1A1 e A1->u2A2 e A2 -> u3.
- Infine convertimo le ui che sono terminali con una nuova regola Ui -> ui e sostituiamo i terminali.### Cap 2.2 Automi a Pila
Sono potenti automi che hanno a disposizione una pilla pushdown per contenere quantità non limitata di dati. Tra deterministici e non deterministici c'è differenza computazionale.
Automi a pila non deterministici sono computazionalmente equivalenti alle grammatiche context-free.
Una sestupla (Q, $\sum$, $\Gamma$, $\delta$, q0, F) dove:
- Q è insieme degli stati
- $\sum$ è alfabeto dell'input
- $\delta$ è funzione transizione Qx$\sum$$\epsilon$ x$\Gamma$$\epsilon$ -> P(Qx$\Gamma$$\epsilon$ )
- $\Gamma$ è alfabeto della pila
- q0 è stato iniziale
- F è insieme degli stati accettantiNel diagramma di stato si scrive a,b -> c che vuol dire
- legge input a
- toglie b dalla cima della pila
- scrive c sulla pilaSe a è vuoto, può leggere e scrivere sulla pila senza input
Se b è vuoto, può scrivere senza togliere dalla pila
Se c è vuoto, può togliere dalla pila senza scrivere#### Equivalenza con le grammatiche context-free
Un linguaggio è context-free se e solo se esiste un automa a pila che lo riconosce.
Se un linguaggio è context-free, allora esiste un automa a pila che lo riconosce.
```Convertiamo da una CFG G a un PDA P```
Dobbiamo realizzare una pila che dato un input, riuscirà a generarlo. Alla fine li confronteremo e accetteremo se uguali.
Per farlo lavoreremo sulle stringhe intermedie generate ad ogni derivazione. Quindi distinguiamo il comportamento in base a se troviamo una variabile o un terminale sulla cima della pila.1) Inserisce simbolo marcato $ e la prima variabile nella pila
2) Se sulla cima della pila c'è A, scegli non deterministicamente una regola per A e sostituisce con la parte destra di A
3) Se sulla cima della pila c'è terminale a, legge l'input e lo confronta. Se sono uguali, ripete. Se sono diversi, rifiuta su questo ramo
4) Se sulla cima c'è il simbolo $, entra nello stato accettante. L'input è stato completamente letto
5) Ripete dal punto 2Nuova notazione (r, u) $\in$ $\delta$(q, a, s)
Siamo nello stato q, leggiamo a dal input, s è nella cima della pila. Andremo allo stato r e nella pila sostituiremo s con u.Nel diagramma del PDA avremo stato qstart con inserimento di \$.
Lettura variabile iniziale.
Stato qloop con le regole per i terminali e sostituzione parte destra per le variabili.
Stato qaccept quando leggo il $ dalla pila e sono quindi vuoto.
___Se un linguaggio è riconosciuto da un automa a pila, allora è context-free.
```Convertiamo da PDA a CFG```
G dovrebbe generare una stringa, se quella stringa fa andare P da uno stato iniziale ad accettante.
Ideare una variabile Apq che porta la pila da p a q, nello stesso stato.
Il PDA sarà
- unico stato accettante
- svuota la pila prima di accettare
- una transizione o push o pop___
Ogni linguaggio regolare è context-free.
Questo perché un linguaggio regolare è riconosciuto da un automa finito. Quest'ultimo è un automa a pila che ignora la sua pila.### Cap 2.3 Linguaggi non Context-Free
#### Pumping Lemma
Se A è linguaggio context-free, allora esiste un numero p tale che, se s è una stringa in A di lunghezza almeno p, può essere divisa in cinque parti s = uvxyz:
1) per ogni i >= 0, uvixyiz $\in$ A
2) |vy| > 0
3) |vxy| <= pAlcuni linguaggi non context-free:
- anbncn | n >= 0 -> pumping up
- aibjck | 0 <= i <= j <= k -> pumping up e pumping down
- ww | w $\in$ {0, 1}* -> usando 0p1p0p1p## Cap 3 - La tesi di Church-Turing
### Cap 3.1 Macchine di Turing
Simile ad un automa, memoria illimitata.
- Può sia scrivere sia leggere sul nastro
- La testina si muove a destra e sinistra
- Nastro è infinito
- Gli stati di accettazione e rifiuto sono immediati#### Definizione formale di macchina di Turing
Una setupla (Q, $\sum$, $\Gamma$, $\delta$, q0, qaccept, qreject) dove:
- Q è insieme degli stati
- $\sum$ è alfabeto dell'input senza simbolo blank
- $\delta$ è funzione transizione Qx$\Gamma$ -> Qx$\Gamma$x{L, R}
- $\Gamma$ è alfabeto del nastro con blank
- q0 è stato iniziale
- qaccept è stato di accettazione
- qreject è stato di rifiutoLa configurazione è lo stato della macchina durante la computazione, composto dalla posizione della testina e della situazione del nastro.
La configurazione C1 produce la configurazione C2 se la MdT passa tra le due in un unico passo.
Un linguaggio è Turing-riconoscibile se esiste una MdT che lo riconosce.
L'insieme delle stringhe che M accetta rappresenta il linguaggio riconosciuto da M.
Una stringa è accettata se produce una serie di configurazioni che terminano in uno stato di accettazione.
Le MdT che si fermano su ogni input sono dette decisori, in quanto decidono se accettare o rifiutare, non ciclano mai. Un decisore decide un linguaggio se riconosce tale linguaggio.
Un linguaggio è Turing-decidibile se esiste una MdT che lo decide.
Ogni linguaggio decidibile è Turing-riconoscibile.
#### Esempi di macchine di Turing
Descrizione di come si muove la testina, dei controlli che fa sullo stato che è ed eventuali sostituzioni.
### Cap 3.2 Varianti di macchine di Turing
Sono delle varianti che non vanno però a modificare la classe di linguaggi riconosciuti o aumentare il potere computazionale.
#### Macchina di Turing multinastro
Inizialmente solo nastro 1 ha input, gli altri vuoti. Ogni testina è su un nastro.
Ogni macchina multinastro ha una MdT a nastro singolo equivalente.
Lo si fa usando il simbolo # per delimitare l'inizio e la fine dei nastri, inoltre si aggiunge il simbolo puntato per identificare la testina virtuale dei vari nastri.
#### Macchina di Turing non deterministica
Avrà una funzione di transizione
Qx$\Gamma$ -> P(Qx$\Gamma$x{L, R})
Ogni macchina di Turing non deterministica ha una MdT deterministica equivalente.
Si esegue un approccio di ricerca ad albero in ampiezza. La MdT D avrà 3 nastri con input, copia di N, stato di D rispetto all'esplorazione su N.
Quindi il nastro 3 avrà la scelta successiva del passo. Se vuota o non valida, resetta con la stringa successiva del cammino.
Questo per evitare loop su un cammino infinito.
N può diventare un decisore se si fermasse su ogni input di ogni ramificazione.
#### Enumeratori
Ha una stampante collegata, che genera un output delle stringhe che compongono il linguaggio.
La TM esegue l'input e lo confronta con E. Se appare, accetta.
E invece ignora l'input ed esegue M su ogni stringa. Se M accetta, E stampa la stringa.
### Cap 3.3 Definizione di algoritmo
#### I problemi di Hilbert
Il decimo è verificare con un algoritmo se un polinomio ha una radice intera.
Riuscire a dimostrare l'esistenza o meno di un algoritmo, avendo però definito formalmente cos'è un algoritmo.
La tesi di Church-Turing dimostra il collegamento tra una nozione intuitiva e una definizione formale, di algoritmo.
Noi proviamo a verificare se è Turing-riconoscibile cercando una radice su un polinomio a singola variabile. Esso può diventare decidibile definendo poi i limiti entro il quale deve terminare. Questo modo però per trovare i limiti non è applicabile nel caso di più variabili. Ecco perché l'algoritmo del problema non esiste.
#### Terminologia per la descrizione di MdT
Descriviamo l'input della macchina, che è spesso una stringa o trasformato in tale. Verifichiamo in caso che sia nella forma corretta.
## Cap 4 - Decidibilità
### Cap 4.1 Linguaggi decidibili
#### Problemi decidibili relativi a linguaggi regolari
Problema dell'accettazione per DFA.
ADFA è il linguaggio per indicare se un automa finito deterministico accetta una data stringa.
Esso è decidibile. Quindi verificare il linguaggio è equivalente a verificare la decibilità del problema computazionale.
M decide ADFA:
1) Su input dove B è un DFA e w è una stringa
2) Simula B su w
3) Se la simulazione termina in uno stato di accettazione, accetta. Se non termina in uno stato di accettazione, rifiuta.##### ANFA è decidibile
Trasformiamo l'NFA in un DFA equivalente C.
Eseguiamo C su M.
Accetta, se accetta. Altrimenti rifiuta.##### AREX è decidibile
Converte in un NFA equivalente.
Esegue su N.
Accetta, se accetta. Altrimenti rifiuta.##### EDFA è decidibile
Test del vuoto. {\ | A è un DFA e L(A) = $\varnothing$}
1) Marca stato iniziale di A
2) Ripete finché non sono marcati nuovi stati:
3) Marca uno stato che ha una transizione proveniente da uno stato già marcato
4) Se nessuno stato di accettazione è marcato, accetta. Altrimenti rifiuta.##### EQDFA è decidibile
Costruiamo linguaggio L(C) = (L(A) interseca $\overline{L(B)}$ ) U ($\overline{L(A)}$ interseca L(B))
Solo stringhe riconosciute da A o da B, differenza simmetrica.
Se L(C) è vuoto allora L(A) e L(B) sono uguali.
1) Costruiamo DFA C
2) Eseguiamo TM di E su input C
3) Accetta, se accetta. Altrimenti rifiuta.#### Problemi decidibili relativi a linguaggi context-free
##### ACFG è decidibile
Per essere sicuri sia un decisore trasformiamo nella forma di Chomsky, così avremo al massimo 2n-1 passi dove n è la lunghezza di w. TM S
1) Convertiamo G in una grammatica equivalente in forma normale di Chomsky
2) Lista tutte le derivazioni di 2n-1 passi o un passo se n=0
3) Se una di queste genera w, accetta. Altrimenti rifiuta.##### ECFG è decidibile
Non possiamo usare teorema precedente dato che ci possono essere infinite w.
Partiamo quindi al contrario cercando tutte le variabili che generano stringhe di terminali.1) Marca tutti i terminali di G
2) Ripete finché nessuna nuova variabile viene marcata:
3) Marca una variabile A che ha la regola in G, A -> U1U2Un dove ogni simbolo è già stato marcato.
4) Se la variabile iniziale non è segnata, accetta. Altrimenti rifiuta.##### EQCFG non è decidibile
Questo perché la classe dei linguaggi context-free non è chiusa rispetto a complemento o intersezione.
##### Ogni linguaggio context-free è decidibile
A è un CFL.
G una CFG per A, progettiamo una TM M che decide A.
Creiamo una copia di G in M. Su input w
1) Esegue TM S su G, w
2) Se S accetta, accetta. Altrimenti rifiuta.Turing-riconoscibili
Decidibili
Context-free
Regolari### Cap 4.2 Indecidibilità
##### ATM non è decidibile
Essendo però riconoscibile, dimostra che i riconoscitori sono più potenti dei decisori.
Macchina universale U che cicla su M se M cicla su w.
#### Il metodo della diagonalizzazione
Serve a dimostrare l'indecidibilità di ATM.
Funzione iniettiva e suriettiva è detta biettiva: per ogni elemento di B esiste un solo elemento di A. Ogni elemento di A è mappato in unico elemento in B. Se tale funzione esiste, A e B hanno la stessa cardinalità.
Insieme R dei numeri reali non è numerabile.
L'insieme dei linguaggi è non numerabile, mentre l'insieme delle MdT si. Quindi alcuni linguaggi non sono ne decidibili ne turing-riconoscibili.
#### Un linguaggio indecidibile
Dimostriamo per assurdo, usando un decisore H che si ferma su M.
- Accetta se M accetta w
- Rifiuta se M non accetta wCostruiamo una MT D che chiama H per determinare M.
- Esegue H su input \ \>
- Accetta se H rifiuta, rifiuta se H accettaSe provassimo D(\) avremmo
- Accetta se D non accetta
- Rfiuta se D non rifiutaOvviamente una contraddizione. Quindi ne D ne H possono esistere.
#### Un linguaggio non Turing-riconoscibile
Se un linguaggio ed il suo complemento sono turing-riconoscibili, allora è decidibile.
Se un linguaggio è decidibile allora è riconoscibile. Il complemento di un linguaggio decidibile è anch'esso decidibile.
M1 riconosce A e M2 riconosce $\overline{A}$, M è decisore per A.
1) Esegue sia M1 sia M2 su w in parallelo
2) Se M1 accetta, accetta; se M2 accetta, rifiuta.Dato che M si ferma se una delle due macchine accetta, è un decisore. Inoltre accetta solo le stringhe di A, altrimenti respinge, quindi è un decisore per A, ed A è decidibile.
##### $\overline{A~TM~}$ non è turing-riconoscibile
Questo perché ATM è riconoscibile e abbiamo visto essere non decidibile, quindi $\overline{A~TM~}$ non può essere coTuring riconoscibile.
## Cap 5 - Riducibilità
Ridurre un problema in modo che risolvendo il secondo, si abbia anche una soluzione al primo.
Se A è riducibile a B, e A è indecidibile allora anche B lo è.
### Cap 5.1 Problemi indecidibili dalla teoria dei linguaggi
Problema della fermata, decidere se una MdT si ferma dato un input.
##### HALTTM è indecidibile
Per assurdo supponiamo che è decidibile e dimostriamo che ATM è riducibile a HALTTM.
Abbiamo R che decide HALTTM. Costruiamo S per decidere ATM.
- Esegue R su (M, 2)
- Se R rifiuta, rifiuta
- Se R accetta, simula M su w finchè non si ferma
- Se M accetta, accetta. Se rifiuta, rifiutaSe R decide HALTTM allora S dedice ATM ma è indecidibile, quindi anche HALTTM lo è.
##### ETM è indecidibile
Qui avremo S che esegue una modifica di M1, dove controllo che l'input sia = a w.
- Costruiamo M1
- Esegue R su M1
- Se R accetta, rifiuta. Se R rifiuta, accettaSe R decide ETM allora S dedice ATM ma è indecidibile, quindi anche ETM lo è.
##### REGULARTM è indecidibile
- Costruiamo M2
- Se x ha forma 0n1n, accetta
- Se non ha forma, esegue M e accetta, se accetta
- Esegue R su M2
- Se R accetta, accetta. se R rifiuta, rifiuta##### EQTM è indecidibile
Riduciamo da ETM, quindi fissiamo che una delle due TM abbia il linguaggio vuoto.
- Eseguiamo R su (M, M1) dove M1 rifiuta ogni input
- Se R accetta, allora accetta. Se R rifiuta, rifiuta.Se R dedice EQTM, S dedice ETM. Questo non è possibile.
#### Riduzioni mediante storie di computazione
Una storia di computazione è l'insieme di configurazioni da C1 a Cl dove Cl accetta per M.
Automa linearmente limitato: la testina non si sposta fuori dal input.
##### ALBA è decidibile
Il numero di configurazioni è = stati * lunghezza nastro * simbolin
- Simula M per qngn passi o finchè non si ferma
- Se M è ferma, accetta se ha accettato. Rifiuta, se ha rifiutato. Se non si è fermata, rifiuta.Questo perché altrimenti tornerebbe su una stessa configurazione, andando quindi in ciclo.
##### ELBA è indecidibile
Tramite un LBA. Dove accetta se esiste una configurazione accettante per M, altrimenti rifuta. E ritorna l'opposto.
Cioè se R accetta, vuol dire che insieme vuoto.
Il decisore quindi per ATM farebbe l'opposto.
L'unica stringa accettante sarebbe w, quindi M accetta w. Di conseguenza S accetta (M, w) ma non è possibile.
##### ALLCFG è indecidibile
Una CFG genera tutte le possibili stringhe.
### Cap 5.3 Riducibilità mediante funzione
#### Funzioni calcolabili
Se esiste una MdT che si ferma avendo solo f(w) sul nastro su input w.
#### Definizione formale di riducibilità mediante funzione
Un linguaggio si dice riducibile mediante funzione, indicato con A <=m B, se esiste una funzione calcolabile da $\sum$* -> $\sum$*, dove per ogni w, w $\in$ A sse f(w) $\in$ B.
f è chiamata riduzione da A a B.### Cap 6.3 Turing riducibilità
Un oracolo è un dispositivo che riferisce se w appartiene al linguaggio.
Una MdT con oracolo, può interrogare un oracolo. MB oracolo per linguaggio B.Tramite oracolo, ETM è decidibile rispetto a ATM.
Turing riducibilità: A <=T B se A è decidibile rispettto a B.