Quanto è pratica la teoria degli automi?


37

Esiste sempre un modo per applicare argomenti relativi all'informatica teorica. Ma i libri di testo e i corsi di laurea di solito non spiegano il motivo per cui la teoria degli automi è un argomento importante e se ha ancora applicazioni pratiche. Pertanto, gli studenti universitari potrebbero avere difficoltà a comprendere l'importanza della teoria degli automi e potrebbero pensare che non sia più di alcuna utilità pratica.

La teoria degli automi è ancora utile nella pratica?

Dovrebbe far parte del curriculum di laurea triennale?


4
Penso che questo sia fuori tema qui; si prega di consultare le FAQ .
Jukka Suomela,

3
Ho sentimenti contrastanti riguardo alla "off = topic". Ovviamente non si tratta di un livello di ricerca, ma questa particolare domanda sulla pertinenza della teoria degli automi è frequente.
Suresh Venkat,

18
Penso che questo sia perfettamente in argomento. Quali sono le applicazioni della teoria degli automi finiti? Non è diverso da Vertex Cover Applications nel mondo reale e non abbiamo chiuso la domanda.
Peter Shor,

4
A proposito, questa domanda è strettamente correlata e le sue risposte potrebbero dare qualche motivazione pratica anche per lo studio della teoria degli automi finiti: "A cosa servono le espressioni regolari? ".
Jukka Suomela,

2
Devo dire che la qualità e la varietà delle risposte rendono irrilevante la questione "portata". Spero che con tre voti ravvicinati già, questa domanda non vacilli oltre il limite.
Suresh Venkat,

Risposte:


51
  1. Hai mai usato uno strumento come grep / awk / sed? Le espressioni regolari costituiscono il cuore di questi strumenti.

  2. Rimarrai sorpreso dalla quantità di codice che puoi evitare usando le espressioni regolari, in "progetti pratici", come un server di posta elettronica.

  3. Se sei un CS maggiore, sicuramente scriverai un compilatore / interprete per una (almeno una piccola) lingua. Se hai mai provato questo compito prima e ti sei bloccato, apprezzerai quanto una piccola teoria (alias grammatiche libere dal contesto) può aiutarti. Questa teoria ha reso un compito una volta impossibile qualcosa che può essere completato in un fine settimana. (E ha vinto l'inventore un premio Turing - google BNF).

  4. Se sei un CS maggiore, a un certo punto, devi rilassarti e pensare alle basi filosofiche dell'informatica, e non solo a quanto sia bella la prossima versione dell'API Android. In una nota correlata, è compito dell'università non prepararti per i prossimi 5 anni della tua vita, ma prepararti per i prossimi 50. L'unica cosa che possono fare al riguardo è aiutarti a pensare - pensa della teoria degli automi come uno di quei corsi.


32

Una delle manifestazioni più pratiche di CS è Compiler Construction. Nel 1965, Knuth iniziò lo studio dei parser LR. Rapidamente (in meno di un decennio), abbiamo avuto parser LALR che sono un sottoinsieme di automi deterministici di pushdown che ci permettono di implementare parser di spostamento / riduzione.

Al centro della fattibilità e dell'efficienza dell'analisi LALR c'è una prova (di Knuth) che i "prefissi" della lingua risultano regolari (il tuo automa finito). Questa è la genesi di generatori di parser automatizzati come yacc / bison ecc.

È sicuro affermare che i linguaggi di programmazione come li conosciamo devono molto della loro efficienza di compilazione a questi sviluppi.

Ecco un altro esempio: il cuore del protocollo TCP / IP è una macchina a stati finiti. Quanto più pratico può ottenere?

Ogni studente CS serio, specialmente quelli pratici, dovrebbe prestare attenzione alla teoria degli automi. È la base per gran parte della ricchezza dell'informatica.


L'analisi dei file sorgente non è in realtà la parte interessante (e importante) di un compilatore, quindi non penso che sia sicuro affermare che "i linguaggi di programmazione come li conosciamo devono molto della loro efficienza di compilazione a questi sviluppi". Inoltre, è possibile analizzare le lingue utilizzando strumenti diversi, ad esempio PEG o analisi combinatori (cioè parsec).
Jan Špaček,

30

Riesci a sentire quel rumore ? È il suono di mille teoremi, applicazioni e strumenti brillanti che ridono nel paradiso teorico degli automi.

Le lingue e gli automi sono concetti eleganti e robusti che troverai in ogni area dell'informatica. Le lingue non sono secche, formaliste da parte della preistoria informatica. La prospettiva della teoria del linguaggio trasforma domande apparentemente complicate su oggetti sofisticati e opachi in semplici dichiarazioni su parole e alberi. I linguaggi formali svolgono un ruolo nell'informatica simile al punto di vista fondamentale e rivoluzionario portato dall'algebra e dalla topologia alla matematica classica. Ecco alcuni problemi pratici, abbastanza complicati, pratici che vengono affrontati tramite la teoria del linguaggio.

  1. Si desidera individuare occorrenze duplicate di una frase in un documento ed eliminare la seconda occorrenza. In sostanza, si desidera sostituire una sequenza in una lingua.
  2. Un programma contiene una violazione delle asserzioni? Un driver di dispositivo rispetta determinati protocolli quando interagisce con il kernel? Il comportamento di un programma è un insieme di esecuzioni; in altre parole, una lingua. La proprietà correttezza è un'altra lingua. Il problema di correttezza del programma equivale a un controllo dell'inclusione della lingua.
  3. Il tuo software può essere bloccato in un ciclo infinito? Un algoritmo distribuito contiene un livelock? Abbiamo bisogno di lingue su infinite parole, ma la vista di inclusione della lingua è ancora valida.
  4. Volete creare un disinfettante per rilevare Javascript dannoso inserito in un'applicazione Web. L'insieme di stringhe dannose è una lingua. L'insieme di stringhe è entrato nelle forme in un'altra lingua. Si desidera determinare se l'intersezione di queste lingue non è vuota.
  5. Monitoraggio run-time di sistemi reattivi e mission-critical. Si desidera progettare un monitor software che sovrintenda al funzionamento del processo chimico o tenere traccia degli aggiornamenti in un database finanziario. Questi sono problemi di inclusione e intersezione del linguaggio cardiaco.
  6. Riconoscimento di modelli con le sue numerose applicazioni. Si desidera rilevare modelli nei dati genomici, nel testo, in una serie di segnalazioni di bug. Questi sono problemi in cui ci vengono date parole da una lingua sconosciuta e dobbiamo indovinare la lingua. Questi sono problemi di inferenza linguistica.
  7. Dato un insieme di documenti XML, si desidera decodificare uno schema che si applica a questi documenti. I documenti XML possono essere idealizzati in un albero. Uno schema è quindi una specifica di una lingua dell'albero e il problema di inferenza dello schema è un problema di inferenza della lingua rispetto alle lingue dell'albero.
  8. Molte applicazioni richiedono un ragionamento aritmetico automatizzato. Supponiamo di fissare una teoria logica come l'aritmetica di Presburger, in cui abbiamo i numeri naturali, l'addizione e il predicato tutt'altro che. Una formula con n variabili rappresenta un insieme di vettori n-dimensionali. Un vettore è una sequenza di cifre e può essere codificato come una parola. Un predicato è quindi un insieme di parole; una lingua. Operazioni logiche come congiunzione, disgiunzione e negazione diventano intersezione, unione e complemento delle lingue (la quantificazione esistenziale è una sorta di proiezione).

La riduzione accennata sopra tratta le lingue come oggetti matematici astratti. Per applicare queste idee in pratica, abbiamo bisogno di una struttura di dati per rappresentare linguaggi e algoritmi per manipolare queste strutture di dati.

Inserisci automi. Gli automi ci consentono di ridurre le domande su oggetti matematici astratti come i linguaggi a domande concrete e algoritmiche sui grafici etichettati. La teoria delle lingue e degli automi, oltre a un numero folle di applicazioni pratiche, fornisce un servizio intellettuale molto significativo. Possiamo pensare a problemi che vanno dalla formattazione dei codici postali alle procedure decisionali per la logica monadica del secondo ordine in uno spazio concettuale uniforme e ordinato. Quanto è fantastico!

Non ho detto nulla sulla logica e sulle procedure decisionali. (Sì, hanno applicazioni pratiche.) Vedi la risposta di Kaveh per una panoramica autorevole.


ahah, l'ironia
Praveen Soni,

16

Come è stato spiegato nelle altre risposte, la teoria degli automi è concettualmente importante come un semplice modello computazionale che comprendiamo bene, e le espressioni regolari e gli automi hanno molte applicazioni nella vita reale.

Ecco un piccolo esempio per la ricerca moderna che risale alla teoria degli automi per comprendere un concetto moderno. In questo documento i ricercatori dimostrano che tutte le lingue normali hanno tester di proprietà: "Le lingue normali sono verificabili con un numero costante di query"


15

Non sono solo automi alla vaniglia. Stai imparando le basi (accettare stati, transizioni epsilon, ...) di un modello (computazionale) che aiuta a ragionare su ciò che può e, cosa più importante, ciò che non può essere espresso con alcuni linguaggi di query. Alcuni risultati interessanti includono:

(e ovviamente sto saltando molte altre classi)

Fondamentalmente, è un modello molto generale. Le tue lezioni probabilmente enfatizzeranno il legame tra automi, lingue e logica.

Se stessi cercando di mettere in relazione questo con strumenti "mondani" concreti, passerei una piacevole mattinata in biblioteca leggendo un paio di parti (AB?) Da Foundations of D Database di Abiteboul & al, e cercando di ricollegarlo a materiale di classe . Naturalmente è solo uno dei (molti) modi di cercare applicazioni di una classe di automi, e credo che non sia il più ovvio, ma è proprio per questo che è un esercizio interessante.


14

Come già sottolineato in varie risposte, la teoria degli automi nei corsi UG offre uno schema concettuale di base per introdurre argomenti più avanzati (e pratici) e anche per evidenziare connessioni trascurate; ad esempio: Diagrammi decisionali binari (sono DFA minimizzati; dopo aver insegnato DFA, insegno spesso alla risoluzione di puzzle basata su BDD); scripting incluso in BioPerl e BioPython (e un'ottima impostazione in cui rafforzare quante corrispondenze indesiderate possono essere nascoste nelle regexps di script del mondo reale), debug formale (proprietà dello stato come FA negata, intersezione) e persino videoregistratore o programmazione di allarmi domestici (ogni giorno la situazione di stress di un automa mal specificato viene insegnata attraverso esempi incompleti; forse formalizzata usando la sintesi di interfacce utente basata sullo scenario play-in / play-out di Harel). Uso anche l'impostazione per insegnare a Python


1
Benvenuto Ganesh!
Suresh Venkat,

1
Un bel modo di insegnare gli automi. Saresti disposto a condividere i tuoi appunti?
Martin Berger,

9

Lancio un'altra risposta da un punto di vista pratico completamente diverso: le macchine a stati finiti (o almeno alcune semplici generalizzazioni / estensioni di esse) sono spesso utilizzate dal lato AI della programmazione di gioco. Si scoprono per fornire un modello eccellente per incapsulare il comportamento del personaggio; per esempio, un nemico potrebbe avere stati che rappresentano "pattuglia", "ricerca", "avvicinamento", "attacco", "difesa", "ritirata", "morire", ecc. con transizioni ben definite tra di loro. Ciò non implica nessuno degli aspetti formali degli automi come i linguaggi normali e simili, ma il concetto di automa è molto fondamentale.


8

Abbiamo visto che il linguaggio che contrappone la teoria e la pratica, ponendo l'uno sopra l'altro, è la vera consumazione dell'ignoranza - che dimostra che un uomo non è a conoscenza dei primissimi elementi del pensiero, e fa di tutto per dimostrare mente di essere così pervertito da essere incapace di insegnare loro.

- James Mill (scrivendo pseudonimo di "PQ"), "Theory and Practice", London and Westminster Review , aprile 1836


8

Vi sono state ricerche considerevoli relative alla teoria degli automi nel controllo dei modelli utilizzati nel settore. Controlla le recenti lezioni di Moshe Vardi al Fields Institute , in particolare la terza lezione "Logica, automi, giochi e algoritmi" per un assaggio del perché la teoria degli automi è ancora importante e utile.

Astratto:

L'approccio teorico degli automi alle procedure decisionali, introdotto da Buechi, Elgot, Rabin e Trakhtenbrot negli anni '50 e '60, è uno degli approcci più fondamentali alle procedure decisionali. Di recente, questo approccio ha trovato applicazioni industriali nella verifica formale di sistemi hardware e software. Il percorso dalla logica agli algoritmi pratici passa non solo attraverso gli automi, ma anche attraverso i giochi, i cui aspetti algoritmici sono stati gli studi di Chandra, Kozen e Stockmeyer alla fine degli anni '70. In questo discorso di sintesi descriviamo il percorso dalla logica agli algoritmi tramite automi e giochi.

Le diapositive e i file audio delle lezioni sono disponibili qui: 1 , 2 , 3 .


6

Dobbiamo tenere conto della semantica delle parole "pratico" e "applicazione". Per alcuni studenti, la pratica è tutto ciò che li aiuterà a superare gli esami; per gli altri, tutto ciò che verrà in un lavoro. In entrambi i casi, la teoria degli automi è davvero molto pratica.

Come altri sottolineano, utilizzerai le grammatiche, ad esempio, quando studi i compilatori. Ma anche di più: comprendere l'intero concetto di avere stati e regole diversi per le transizioni tra di loro può renderti un programmatore migliore quando ti rendi conto, ad esempio, che il tuo codice è ridondante qua e là e che quando lo migliori, tu stai applicando nel tuo codice le stesse idee concettuali alla base della minimizzazione di DFA.

Allo stesso modo per "applicazione". Cosa capisci con quella parola? Anche se sei un "ingegnere terra-terra" vedrai e utilizzerai idee simili a quelle della teoria degli automi nei progetti del mondo reale: codice di programmazione, diagrammi di flusso e persino il semplice ma geniale concetto di stack. Per i secchioni della teoria come me, considero le applicazioni della teoria degli automi in altre aree, come la logica, l'algebra e la teoria dei modelli finiti. Sicuramente, non avrò mai bisogno di usare il lemma del pompaggio mentre faccio shopping in un supermercato, ma teoremi del genere mi hanno aiutato a capire la struttura di alcune classi di lingue, per non parlare delle logiche e delle strutture algebriche con cui sono in corrispondenza. E questo è qualcosa che apprezzo più di qualsiasi misura di praticità.


5

Combinati con le logiche, gli automi possono offrire modi per controllare gli stati di stato come

UNφ

UNφUNφ

φUNφUNφL(UN)L(UNφ)


3

Gli automi finiti, spesso scritti come macchine a stati finiti in contesti diversi, o con le loro varianti probabilistiche I modelli di Markov nascosti possono essere applicati al riconoscimento di modelli e alla quantificazione della struttura di un modello. Ad esempio, qual è il più piccolo automa finito stocastico che genererà le stringhe in base, più o meno, a una data distribuzione di probabilità, o abbinando le proprietà statistiche di un campione di stringhe (o serie temporali) da una certa distribuzione.

Vedi ad esempio CSSR , un algoritmo per la ricostruzione cieca di stati nascosti; è più efficiente e flessibile rispetto ai modelli Markov nascosti.


1
Per aggiungere al lato pratico, i modelli nascosti di Markov sono utilizzati nei programmi di riconoscimento vocale come Kurzweil.
tdyen,

3

Un'altra applicazione più pratica della teoria degli automi è lo sviluppo dell'intelligenza artificiale. L'intelligenza artificiale è stata sviluppata dal concetto di automa finito. La rete neurale di robot è costruita sulla base della teoria degli automi. Dopo tutto, anche i robot sono automi.


2

Alcuni hanno dato ottime risposte quando si tratta di come si rapporta all'industria. Ciò che dovrebbe essere importante è il suo valore scientifico, e la teoria degli automi è spesso la porta per capire prima un livello superiore di teoria del calcolo negli studi di uno studente universitario. La teoria degli automi ha una grande serie di teoremi che compaiono ovunque nell'informatica teorica, e specialmente quando si vuole parlare di applicazioni come i compilatori. Il suo valore scientifico (non è obsoleto, come potrebbe essere? È la teoria di base sul campo.) È pratico per qualsiasi scienziato interessato al calcolo. È pratico in quanto conoscenza utile a coloro che comprendono o vogliono comprendere la natura del calcolo. Se non riesci a trovarci utile, metto in dubbio la ricerca o l'intenzione di studiare CS in quanto non sta programmando

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.