{"id":20083854,"url":"https://github.com/teschiopol/clf","last_synced_at":"2025-08-03T21:38:55.622Z","repository":{"id":255907790,"uuid":"853792972","full_name":"teschiopol/clf","owner":"teschiopol","description":"CLF Exam","archived":false,"fork":false,"pushed_at":"2024-09-10T18:51:22.000Z","size":73,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-13T01:49:08.240Z","etag":null,"topics":["complexity","computability"],"latest_commit_sha":null,"homepage":"https://teschiopol.github.io/clf","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/teschiopol.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-09-07T14:54:19.000Z","updated_at":"2024-09-10T18:51:26.000Z","dependencies_parsed_at":"2024-09-10T20:44:50.626Z","dependency_job_id":null,"html_url":"https://github.com/teschiopol/clf","commit_stats":null,"previous_names":["teschiopol/clf"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teschiopol%2Fclf","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teschiopol%2Fclf/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teschiopol%2Fclf/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teschiopol%2Fclf/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/teschiopol","download_url":"https://codeload.github.com/teschiopol/clf/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241515958,"owners_count":19975140,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["complexity","computability"],"created_at":"2024-11-13T15:49:14.811Z","updated_at":"2025-03-02T13:44:58.996Z","avatar_url":"https://github.com/teschiopol.png","language":"Shell","readme":"# CLF\n\n## Cap 2 - Linguaggi Context-Free\n\n### Cap 2.1 Grammatiche Context-Free\n\nUna quadrupla (V, $\\sum$, R, S) dove:\n\n- V è insieme delle variabili\n- $\\sum$ è insieme terminali\n- R è insieme delle regole\n- S è stato iniziale\n\n#### Progettare grammatiche context-free\n\nPrima si costruisce il DFA per il linguaggio regolare, poi lo si trasforma in CFG.\n\n- Una variabile R per ogni stato\n- Regola R\u003csub\u003ei\u003c/sub\u003e -\u003e aR\u003csub\u003eq\u003c/sub\u003e se c'è transazione da stato i a stato q tramite a nel DFA\n- Regola  R\u003csub\u003ei\u003c/sub\u003e -\u003e $\\epsilon$ se stato i è accettante\n\nGrammatiche possono generare stessa stringa in modi diversi, sono dette ambigue. Se linguaggi possono essere generati solo così, sono detti inerentemente ambigui. Es: a\u003csup\u003ei\u003c/sup\u003eb\u003csup\u003ej\u003c/sup\u003ec\u003csup\u003ek\u003c/sup\u003e | i = j oppure j = k\n\n#### Forma normale di Chomsky\n\nSe ogni regola della grammatica è della forma:\n\n- A -\u003e BC\n- A -\u003e a\n\nPer ottenerla:\n\n- Aggiungiamo nuova variabile iniziale\n- Eliminiamo le regola A -\u003e $\\epsilon$, poi in ogni regola dove appare A nel lato destro, scriviamo tutte le occorenze senza la A.\n  - A -\u003e $\\epsilon$ fa diventare S -\u003e ASA | aB in S -\u003e ASA | aB | SA | AS | S\n- Eliminiamo le regole unitarie A -\u003e B, poi aggiungiamo A -\u003e u per la regola B -\u003e u, dove u è una stringa di variabili e terminali\n- Rimpiazziamo le regole A-\u003eu\u003csub\u003e1\u003c/sub\u003eu\u003csub\u003e2\u003c/sub\u003eu\u003csub\u003e3\u003c/sub\u003e in poi con A-\u003eu\u003csub\u003e1\u003c/sub\u003eA\u003csub\u003e1\u003c/sub\u003e e A\u003csub\u003e1\u003c/sub\u003e-\u003eu\u003csub\u003e2\u003c/sub\u003eA\u003csub\u003e2\u003c/sub\u003e e A\u003csub\u003e2\u003c/sub\u003e -\u003e u\u003csub\u003e3\u003c/sub\u003e.\n- Infine convertimo le u\u003csub\u003ei\u003c/sub\u003e che sono terminali con una nuova regola U\u003csub\u003ei\u003c/sub\u003e -\u003e u\u003csub\u003ei\u003c/sub\u003e e sostituiamo i terminali.\n\n### Cap 2.2 Automi a Pila\n\nSono potenti automi che hanno a disposizione una pilla pushdown per contenere quantità non limitata di dati. Tra deterministici e non deterministici c'è differenza computazionale.\n\nAutomi a pila non deterministici sono computazionalmente equivalenti alle grammatiche context-free.\n\nUna sestupla (Q, $\\sum$, $\\Gamma$, $\\delta$, q\u003csub\u003e0\u003c/sub\u003e, F) dove:\n\n- Q è insieme degli stati\n- $\\sum$ è alfabeto dell'input\n- $\\delta$ è funzione transizione Qx$\\sum$\u003csub\u003e$\\epsilon$\u003c/sub\u003e x$\\Gamma$\u003csub\u003e$\\epsilon$\u003c/sub\u003e  -\u003e P(Qx$\\Gamma$\u003csub\u003e$\\epsilon$\u003c/sub\u003e )\n- $\\Gamma$ è alfabeto della pila\n- q\u003csub\u003e0\u003c/sub\u003e è stato iniziale\n- F è insieme degli stati accettanti\n\nNel diagramma di stato si scrive a,b -\u003e c che vuol dire\n\n- legge input a\n- toglie b dalla cima della pila\n- scrive c sulla pila\n\nSe a è vuoto, può leggere e scrivere sulla pila senza input\nSe b è vuoto, può scrivere senza togliere dalla pila\nSe c è vuoto, può togliere dalla pila senza scrivere\n\n#### Equivalenza con le grammatiche context-free\n\nUn linguaggio è context-free se e solo se esiste un automa a pila che lo riconosce.\n\nSe un linguaggio è context-free, allora esiste un automa a pila che lo riconosce.\n\n```Convertiamo da una CFG G a un PDA P```\n\nDobbiamo realizzare una pila che dato un input, riuscirà a generarlo. Alla fine li confronteremo e accetteremo se uguali.\nPer 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.\n\n1) Inserisce simbolo marcato $ e la prima variabile nella pila\n2) Se sulla cima della pila c'è A, scegli non deterministicamente una regola per A e sostituisce con la parte destra di A\n3) 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\n4) Se sulla cima c'è il simbolo $, entra nello stato accettante. L'input è stato completamente letto\n5) Ripete dal punto 2\n\nNuova notazione (r, u) $\\in$ $\\delta$(q, a, s)\nSiamo nello stato q, leggiamo a dal input, s è nella cima della pila. Andremo allo stato r e nella pila sostituiremo s con u.\n\nNel diagramma del PDA avremo stato q\u003csub\u003estart\u003c/sub\u003e con inserimento di \\$.\nLettura variabile iniziale.\nStato q\u003csub\u003eloop\u003c/sub\u003e con le regole per i terminali e sostituzione parte destra per le variabili.\nStato q\u003csub\u003eaccept\u003c/sub\u003e quando leggo il $ dalla pila e sono quindi vuoto.\n___\n\nSe un linguaggio è riconosciuto da un automa a pila, allora è context-free.\n\n```Convertiamo da PDA a CFG```\n\nG dovrebbe generare una stringa, se quella stringa fa andare P da uno stato iniziale ad accettante.\n\nIdeare una variabile A\u003csub\u003epq\u003c/sub\u003e che porta la pila da p a q, nello stesso stato.\n\nIl PDA sarà\n\n- unico stato accettante\n- svuota la pila prima di accettare\n- una transizione o push o pop\n\n___\n\nOgni linguaggio regolare è context-free.\nQuesto perché un linguaggio regolare è riconosciuto da un automa finito. Quest'ultimo è un automa a pila che ignora la sua pila.\n\n### Cap 2.3 Linguaggi non Context-Free\n\n#### Pumping Lemma\n\nSe 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:\n\n1) per ogni i \u003e= 0, uv\u003csup\u003ei\u003c/sup\u003exy\u003csup\u003ei\u003c/sup\u003ez $\\in$ A\n2) |vy| \u003e 0\n3) |vxy| \u003c= p\n\nAlcuni linguaggi non context-free:\n\n- a\u003csup\u003en\u003c/sup\u003eb\u003csup\u003en\u003c/sup\u003ec\u003csup\u003en\u003c/sup\u003e  | n \u003e= 0 -\u003e pumping up\n- a\u003csup\u003ei\u003c/sup\u003eb\u003csup\u003ej\u003c/sup\u003ec\u003csup\u003ek\u003c/sup\u003e | 0 \u003c= i \u003c= j \u003c= k -\u003e pumping up e pumping down\n- ww | w $\\in$ {0, 1}\u003csup\u003e*\u003c/sup\u003e -\u003e usando 0\u003csup\u003ep\u003c/sup\u003e1\u003csup\u003ep\u003c/sup\u003e0\u003csup\u003ep\u003c/sup\u003e1\u003csup\u003ep\u003c/sup\u003e\n\n## Cap 3 - La tesi di Church-Turing\n\n### Cap 3.1 Macchine di Turing\n\nSimile ad un automa, memoria illimitata.\n\n- Può sia scrivere sia leggere sul nastro\n- La testina si muove a destra e sinistra\n- Nastro è infinito\n- Gli stati di accettazione e rifiuto sono immediati\n\n#### Definizione formale di macchina di Turing\n\nUna setupla (Q, $\\sum$, $\\Gamma$, $\\delta$, q\u003csub\u003e0\u003c/sub\u003e, q\u003csub\u003eaccept\u003c/sub\u003e, q\u003csub\u003ereject\u003c/sub\u003e) dove:\n\n- Q è insieme degli stati\n- $\\sum$ è alfabeto dell'input senza simbolo blank\n- $\\delta$ è funzione transizione Qx$\\Gamma$ -\u003e Qx$\\Gamma$x{L, R}\n- $\\Gamma$ è alfabeto del nastro con blank\n- q\u003csub\u003e0\u003c/sub\u003e è stato iniziale\n- q\u003csub\u003eaccept\u003c/sub\u003e è stato di accettazione\n- q\u003csub\u003ereject\u003c/sub\u003e è stato di rifiuto\n\nLa configurazione è lo stato della macchina durante la computazione, composto dalla posizione della testina e della situazione del nastro.\n\nLa configurazione C\u003csub\u003e1\u003c/sub\u003e produce la configurazione C\u003csub\u003e2\u003c/sub\u003e se la MdT passa tra le due in un unico passo.\n\nUn linguaggio è \u003cstrong\u003eTuring-riconoscibile\u003c/strong\u003e se esiste una MdT che lo riconosce.\n\nL'insieme delle stringhe che M accetta rappresenta il linguaggio riconosciuto da M.\n\nUna stringa è accettata se produce una serie di configurazioni che terminano in uno stato di accettazione.\n\nLe 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.\n\nUn linguaggio è \u003cstrong\u003eTuring-decidibile\u003c/strong\u003e se esiste una MdT che lo decide.\n\nOgni linguaggio decidibile è Turing-riconoscibile.\n\n#### Esempi di macchine di Turing\n\nDescrizione di come si muove la testina, dei controlli che fa sullo stato che è ed eventuali sostituzioni.\n\n### Cap 3.2 Varianti di macchine di Turing\n\nSono delle varianti che non vanno però a modificare la classe di linguaggi riconosciuti o aumentare il potere computazionale.\n\n#### Macchina di Turing multinastro\n\nInizialmente solo nastro 1 ha input, gli altri vuoti. Ogni testina è su un nastro.\n\nOgni macchina multinastro ha una MdT a nastro singolo equivalente.\n\nLo 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.\n\n#### Macchina di Turing non deterministica\n\nAvrà una funzione di transizione\n\nQx$\\Gamma$ -\u003e P(Qx$\\Gamma$x{L, R})\n\nOgni macchina di Turing non deterministica ha una MdT deterministica equivalente.\n\nSi 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.\n\nQuindi il nastro 3 avrà la scelta successiva del passo. Se vuota o non valida, resetta con la stringa successiva del cammino.\n\nQuesto per evitare loop su un cammino infinito.\n\nN può diventare un decisore se si fermasse su ogni input di ogni ramificazione.\n\n#### Enumeratori\n\nHa una stampante collegata, che genera un output delle stringhe che compongono il linguaggio.\n\nLa TM esegue l'input e lo confronta con E. Se appare, accetta.\n\nE invece ignora l'input ed esegue M su ogni stringa. Se M accetta, E stampa la stringa.\n\n### Cap 3.3 Definizione di algoritmo\n\n#### I problemi di Hilbert\n\nIl decimo è verificare con un algoritmo se un polinomio ha una radice intera.\n\nRiuscire a dimostrare l'esistenza o meno di un algoritmo, avendo però definito formalmente cos'è un algoritmo.\n\nLa tesi di Church-Turing dimostra il collegamento tra una nozione intuitiva e una definizione formale, di algoritmo.\n\nNoi 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.\n\n#### Terminologia per la descrizione di MdT\n\nDescriviamo l'input della macchina, che è spesso una stringa o trasformato in tale. Verifichiamo in caso che sia nella forma corretta.\n\n## Cap 4 - Decidibilità\n\n### Cap 4.1 Linguaggi decidibili\n\n#### Problemi decidibili relativi a linguaggi regolari\n\nProblema dell'accettazione per DFA.\n\nA\u003csub\u003eDFA\u003c/sub\u003e è il linguaggio per indicare se un automa finito deterministico accetta una data stringa.\n\nEsso è decidibile. Quindi verificare il linguaggio è equivalente a verificare la decibilità del problema computazionale.\n\nM decide A\u003csub\u003eDFA\u003c/sub\u003e:\n\n1) Su input \u003cB, w\u003e dove B è un DFA e w è una stringa\n2) Simula B su w\n3) Se la simulazione termina in uno stato di accettazione, accetta. Se non termina in uno stato di accettazione, rifiuta.\n\n##### A\u003csub\u003eNFA\u003c/sub\u003e è decidibile\n\nTrasformiamo l'NFA in un DFA equivalente C.\nEseguiamo C su M.\nAccetta, se accetta. Altrimenti rifiuta.\n\n##### A\u003csub\u003eREX\u003c/sub\u003e è decidibile\n\nConverte in un NFA equivalente.\nEsegue su N.\nAccetta, se accetta. Altrimenti rifiuta.\n\n##### E\u003csub\u003eDFA\u003c/sub\u003e è decidibile\n\nTest del vuoto. {\\\u003cA\\\u003e | A è un DFA e L(A) = $\\varnothing$}\n\n1) Marca stato iniziale di A\n2) Ripete finché non sono marcati nuovi stati:\n3) Marca uno stato che ha una transizione proveniente da uno stato già marcato\n4) Se nessuno stato di accettazione è marcato, accetta. Altrimenti rifiuta.\n\n##### EQ\u003csub\u003eDFA\u003c/sub\u003e è decidibile\n\nCostruiamo linguaggio L(C) = (L(A) interseca $\\overline{L(B)}$ ) U ($\\overline{L(A)}$ interseca L(B))\n\nSolo stringhe riconosciute da A o da B, differenza simmetrica.\n\nSe L(C) è vuoto allora L(A) e L(B) sono uguali.\n\n1) Costruiamo DFA C\n2) Eseguiamo TM di E su input C\n3) Accetta, se accetta. Altrimenti rifiuta.\n\n#### Problemi decidibili relativi a linguaggi context-free\n\n##### A\u003csub\u003eCFG\u003c/sub\u003e è decidibile\n\nPer 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\n\n1) Convertiamo G in una grammatica equivalente in forma normale di Chomsky\n2) Lista tutte le derivazioni di 2n-1 passi o un passo se n=0\n3) Se una di queste genera w, accetta. Altrimenti rifiuta.\n\n##### E\u003csub\u003eCFG\u003c/sub\u003e è decidibile\n\nNon possiamo usare teorema precedente dato che ci possono essere infinite w.\nPartiamo quindi al contrario cercando tutte le variabili che generano stringhe di terminali.\n\n1) Marca tutti i terminali di G\n2) Ripete finché nessuna nuova variabile viene marcata:\n3) Marca una variabile A che ha la regola in G, A -\u003e U\u003csub\u003e1\u003c/sub\u003eU\u003csub\u003e2\u003c/sub\u003eU\u003csub\u003en\u003c/sub\u003e dove ogni simbolo è già stato marcato.\n4) Se la variabile iniziale non è segnata, accetta. Altrimenti rifiuta.\n\n##### EQ\u003csub\u003eCFG\u003c/sub\u003e non è decidibile\n\nQuesto perché la classe dei linguaggi context-free non è chiusa rispetto a complemento o intersezione.\n\n##### Ogni linguaggio context-free è decidibile\n\nA è un CFL.\n\nG una CFG per A, progettiamo una TM M che decide A.\n\nCreiamo una copia di G in M. Su input w\n\n1) Esegue TM S su G, w\n2) Se S accetta, accetta. Altrimenti rifiuta.\n\nTuring-riconoscibili\nDecidibili\nContext-free\nRegolari\n\n### Cap 4.2 Indecidibilità\n\n##### A\u003csub\u003eTM\u003c/sub\u003e non è decidibile\n\nEssendo però riconoscibile, dimostra che i riconoscitori sono più potenti dei decisori.\n\nMacchina universale U che cicla su M se M cicla su w.\n\n#### Il metodo della diagonalizzazione\n\nServe a dimostrare l'indecidibilità di A\u003csub\u003eTM\u003c/sub\u003e.\n\nFunzione 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à.\n\nInsieme R dei numeri reali non è numerabile.\n\nL'insieme dei linguaggi è non numerabile, mentre l'insieme delle MdT si. Quindi alcuni linguaggi non sono ne decidibili ne turing-riconoscibili.\n\n#### Un linguaggio indecidibile\n\nDimostriamo per assurdo, usando un decisore H che si ferma su M.\n\n- Accetta se M accetta w\n- Rifiuta se M non accetta w\n\nCostruiamo una MT D che chiama H per determinare M.\n\n- Esegue H su input \\\u003cM, \\\u003cM\\\u003e \\\u003e\n- Accetta se H rifiuta, rifiuta se H accetta\n\nSe provassimo D(\\\u003cD\\\u003e) avremmo\n\n- Accetta se D non accetta\n- Rfiuta se D non rifiuta\n\nOvviamente una contraddizione. Quindi ne D ne H possono esistere.\n\n#### Un linguaggio non Turing-riconoscibile\n\nSe un linguaggio ed il suo complemento sono turing-riconoscibili, allora è decidibile.\n\nSe un linguaggio è decidibile allora è riconoscibile. Il complemento di un linguaggio decidibile è anch'esso decidibile.\n\nM\u003csub\u003e1\u003c/sub\u003e riconosce A e M\u003csub\u003e2\u003c/sub\u003e riconosce $\\overline{A}$, M è decisore per A.\n\n1) Esegue sia M\u003csub\u003e1\u003c/sub\u003e sia M\u003csub\u003e2\u003c/sub\u003e su w in parallelo\n2) Se M\u003csub\u003e1\u003c/sub\u003e accetta, accetta; se M\u003csub\u003e2\u003c/sub\u003e accetta, rifiuta.\n\nDato 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.\n\n##### $\\overline{A~TM~}$ non è turing-riconoscibile\n\nQuesto perché A\u003csub\u003eTM\u003c/sub\u003e è riconoscibile e abbiamo visto essere non decidibile, quindi $\\overline{A~TM~}$ non può essere coTuring riconoscibile.\n\n## Cap 5 - Riducibilità\n\nRidurre un problema in modo che risolvendo il secondo, si abbia anche una soluzione al primo.\n\nSe A è riducibile a B, e A è indecidibile allora anche B lo è.\n\n### Cap 5.1 Problemi indecidibili dalla teoria dei linguaggi\n\nProblema della fermata, decidere se una MdT si ferma dato un input.\n\n##### HALT\u003csub\u003eTM\u003c/sub\u003e è indecidibile\n\nPer assurdo supponiamo che è decidibile e dimostriamo che A\u003csub\u003eTM\u003c/sub\u003e è riducibile a HALT\u003csub\u003eTM\u003c/sub\u003e.\n\nAbbiamo R che decide HALT\u003csub\u003eTM\u003c/sub\u003e. Costruiamo S per decidere A\u003csub\u003eTM\u003c/sub\u003e.\n\n- Esegue R su (M, 2)\n- Se R rifiuta, rifiuta\n- Se R accetta, simula M su w finchè non si ferma\n- Se M accetta, accetta. Se rifiuta, rifiuta\n\nSe R decide HALT\u003csub\u003eTM\u003c/sub\u003e allora S dedice A\u003csub\u003eTM\u003c/sub\u003e ma è indecidibile, quindi anche HALT\u003csub\u003eTM\u003c/sub\u003e lo è.\n\n##### E\u003csub\u003eTM\u003c/sub\u003e è indecidibile\n\nQui avremo S che esegue una modifica di M\u003csub\u003e1\u003c/sub\u003e, dove controllo che l'input sia = a w.\n\n- Costruiamo M\u003csub\u003e1\u003c/sub\u003e\n- Esegue R su M\u003csub\u003e1\u003c/sub\u003e\n- Se R accetta, rifiuta. Se R rifiuta, accetta\n\nSe R decide E\u003csub\u003eTM\u003c/sub\u003e allora S dedice A\u003csub\u003eTM\u003c/sub\u003e ma è indecidibile, quindi anche E\u003csub\u003eTM\u003c/sub\u003e lo è.\n\n##### REGULAR\u003csub\u003eTM\u003c/sub\u003e è indecidibile\n\n- Costruiamo M\u003csub\u003e2\u003c/sub\u003e\n- Se x ha forma 0\u003csup\u003en\u003c/sup\u003e1\u003csup\u003en\u003c/sup\u003e, accetta\n- Se non ha forma, esegue M e accetta, se accetta\n- Esegue R su M\u003csub\u003e2\u003c/sub\u003e\n- Se R accetta, accetta. se R rifiuta, rifiuta\n\n##### EQ\u003csub\u003eTM\u003c/sub\u003e è indecidibile\n\nRiduciamo da E\u003csub\u003eTM\u003c/sub\u003e, quindi fissiamo che una delle due TM abbia il linguaggio vuoto.\n\n- Eseguiamo R su (M, M\u003csub\u003e1\u003c/sub\u003e) dove M\u003csub\u003e1\u003c/sub\u003e rifiuta ogni input\n- Se R accetta, allora accetta. Se R rifiuta, rifiuta.\n\nSe R dedice EQ\u003csub\u003eTM\u003c/sub\u003e, S dedice E\u003csub\u003eTM\u003c/sub\u003e. Questo non è possibile.\n\n#### Riduzioni mediante storie di computazione\n\nUna storia di computazione è l'insieme di configurazioni da C\u003csub\u003e1\u003c/sub\u003e a C\u003csub\u003el\u003c/sub\u003e dove C\u003csub\u003el\u003c/sub\u003e accetta per M.\n\nAutoma linearmente limitato: la testina non si sposta fuori dal input.\n\n##### A\u003csub\u003eLBA\u003c/sub\u003e è decidibile\n\nIl numero di configurazioni è = stati * lunghezza nastro * simboli\u003csup\u003en\u003c/sup\u003e\n\n- Simula M per qng\u003csup\u003en\u003c/sup\u003e passi o finchè non si ferma\n- Se M è ferma, accetta se ha accettato. Rifiuta, se ha rifiutato. Se non si è fermata, rifiuta.\n\nQuesto perché altrimenti tornerebbe su una stessa configurazione, andando quindi in ciclo.\n\n##### E\u003csub\u003eLBA\u003c/sub\u003e è indecidibile\n\nTramite un LBA. Dove accetta se esiste una configurazione accettante per M, altrimenti rifuta. E ritorna l'opposto.\n\nCioè se R accetta, vuol dire che insieme vuoto.\n\nIl decisore quindi per A\u003csub\u003eTM\u003c/sub\u003e farebbe l'opposto.\n\nL'unica stringa accettante sarebbe w, quindi M accetta w. Di conseguenza S accetta (M, w) ma non è possibile.\n\n##### ALL\u003csub\u003eCFG\u003c/sub\u003e è indecidibile\n\nUna CFG genera tutte le possibili stringhe.\n\n### Cap 5.3 Riducibilità mediante funzione\n\n#### Funzioni calcolabili\n\nSe esiste una MdT che si ferma avendo solo f(w) sul nastro su input w.\n\n#### Definizione formale di riducibilità mediante funzione\n\nUn linguaggio si dice riducibile mediante funzione, indicato con A \u003c=\u003csub\u003em\u003c/sub\u003e B, se esiste una funzione calcolabile da $\\sum$* -\u003e $\\sum$*, dove per ogni w, w $\\in$ A sse f(w) $\\in$ B.\nf è chiamata riduzione da A a B.\n\n### Cap 6.3 Turing riducibilità\n\nUn oracolo è un dispositivo che riferisce se w appartiene al linguaggio.\nUna MdT con oracolo, può interrogare un oracolo. M\u003csup\u003eB\u003c/sup\u003e oracolo per linguaggio B.\n\nTramite oracolo, E\u003csub\u003eTM\u003c/sub\u003e è decidibile rispetto a A\u003csub\u003eTM\u003c/sub\u003e.\n\nTuring riducibilità: A \u003c=\u003csub\u003eT\u003c/sub\u003e B se A è decidibile rispettto a B.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fteschiopol%2Fclf","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fteschiopol%2Fclf","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fteschiopol%2Fclf/lists"}