Quão prática é a teoria dos autômatos?


37

Sempre existe uma maneira de aplicação em tópicos relacionados à ciência da computação teórica. Mas livros didáticos e cursos de graduação geralmente não explicam a razão pela qual a teoria dos autômatos é um tópico importante e se ainda tem aplicações na prática. Portanto, os estudantes de graduação podem ter problemas para entender a importância da teoria dos autômatos e podem pensar que não tem mais utilidade prática.

A teoria dos autômatos ainda é útil na prática?

Deveria fazer parte do currículo de graduação em ciências da computação?


4
Eu acho que isso é fora de tópico aqui; por favor veja o FAQ .
Jukka Suomela 9/10/11

3
Eu tenho sentimentos confusos sobre o 'off = topic'-ness disso. Obviamente, não é o nível de pesquisa, mas essa questão específica da relevância da teoria dos autômatos é uma que surge com frequência.
Suresh Venkat

18
Eu acho que isso é perfeitamente tópico. Quais são as aplicações da teoria dos autômatos finitos? Não é diferente dos aplicativos de cobertura de vértices no mundo real , e não fechamos essa pergunta.
quer

4
A propósito, essa questão está intimamente relacionada, e suas respostas também podem dar alguma motivação prática para o estudo da teoria dos autômatos finitos: "Para que servem as expressões regulares? ".
Jukka Suomela 10/10

2
Devo dizer que a qualidade e a variedade de respostas tornam a questão do "escopo" irrelevante. Espero que, com três votos próximos, essa questão não seja exagerada.
Suresh Venkat

Respostas:


51
  1. Já usou uma ferramenta como grep / awk / sed? Expressões regulares formam o coração dessas ferramentas.

  2. Você ficará surpreso com a quantidade de códigos que pode evitar com o uso de expressões regulares por princípios - em "projetos práticos", como um servidor de email.

  3. Se você é formado em ciências da computação, com certeza estará escrevendo um compilador / intérprete para um (pelo menos um pequeno) idioma. Se você já tentou essa tarefa antes e ficou preso, apreciará o quanto uma pequena teoria (também conhecida como gramática livre de contexto) pode ajudá-lo. Essa teoria transformou uma tarefa outrora impossível em algo que pode ser concluído em um fim de semana. (E ganhou o inventor um prêmio de Turing - google BNF).

  4. Se você é formado em ciências da computação, em algum momento, precisa se sentar e pensar sobre os fundamentos filosóficos da computação, e não apenas sobre o quão interessante é a próxima versão da API do Android. Em uma nota relacionada, o trabalho da universidade não é prepará-lo para os próximos 5 anos da sua vida, mas prepará-lo para os próximos 50. A única coisa que eles podem fazer nesse sentido é ajudá-lo a pensar - pense da teoria dos autômatos como um desses cursos.


32

Uma das manifestações mais práticas do CS é a Construção de Compiladores. Em 1965, Knuth iniciou o estudo de analisadores de LR. Rapidamente (em menos de uma década), tivemos analisadores LALR, que são um subconjunto de autômatos determinísticos de empilhamento que nos permitem implementar turnos / reduzir analisadores.

No cerne da viabilidade e eficiência da análise de LALR, há uma prova (por Knuth) de que "prefixos" do idioma acabam sendo regulares (seu autômato finito). Esta é a gênese de geradores automatizados de análise, como yacc / bison etc.

É seguro dizer que as linguagens de programação como as conhecemos devem muito de sua eficiência de compilação a esses desenvolvimentos.

Aqui está outro exemplo: o coração do protocolo TCP / IP é uma máquina de estados finitos. Quanto mais prático isso pode ser?

Todo estudante sério de CS, principalmente os práticos, deve prestar atenção à teoria dos autômatos. É a base de grande parte da riqueza da Ciência da Computação.


A análise de arquivos de origem não é realmente a parte interessante (e importante) de um compilador, portanto não acho seguro dizer que "as linguagens de programação como as conhecemos devem muito de sua eficiência de compilação a esses desenvolvimentos". Além disso, é possível analisar idiomas usando ferramentas diferentes, por exemplo, PEGs ou combinadores de análise (por exemplo, parsec).
Jan Špaček

30

Você consegue ouvir esse barulho ? É o som de mil teoremas brilhantes, aplicações e ferramentas rindo no céu da teoria dos autômatos.

Idiomas e autômatos são conceitos elegantes e robustos que você encontrará em todas as áreas da ciência da computação. Os idiomas não são secos e formalistas da pré-história da computação. A perspectiva da teoria da linguagem destila questões aparentemente complicadas sobre objetos sofisticados e opacos em declarações simples sobre palavras e árvores. As linguagens formais desempenham um papel na ciência da computação semelhante ao ponto de vista fundamental e revolucionário trazido pela álgebra e topologia à matemática clássica. Aqui estão alguns problemas práticos, bastante complicados, práticos que são abordados através da teoria da linguagem.

  1. Você deseja detectar ocorrências duplicadas de uma frase em um documento e excluir a segunda ocorrência. Em essência, você deseja substituir uma sequência em um idioma.
  2. Um programa contém uma violação de afirmação? Um driver de dispositivo respeita certos protocolos ao interagir com o kernel? O comportamento de um programa é um conjunto de execuções; em outras palavras, uma linguagem. A propriedade de correção é outro idioma. O problema de correção do programa equivale a uma verificação de inclusão de idioma.
  3. Seu software pode ficar preso em um loop infinito? Um algoritmo distribuído contém um livelock? Precisamos de idiomas sobre palavras infinitas, mas a exibição de inclusão de idiomas ainda se aplica.
  4. Você deseja criar um desinfetante para detectar Javascript malicioso inserido em um aplicativo Web. O conjunto de seqüências maliciosas é uma linguagem. O conjunto de cadeias inseridas nos formulários em outro idioma. Você deseja determinar se a interseção desses idiomas não está vazia.
  5. Monitoramento em tempo de execução de sistemas reativos e de missão crítica. Você deseja projetar um monitor de software que supervisiona a operação do seu processo químico ou rastreia atualizações em um banco de dados financeiro. Esses são os problemas de inclusão e interseção da linguagem do coração.
  6. Reconhecimento de padrões com suas inúmeras aplicações. Você deseja detectar padrões nos dados genômicos, no texto, em uma série de relatórios de erros. São problemas em que recebemos palavras de um idioma desconhecido e precisamos adivinhar o idioma. Estes são problemas de inferência de linguagem.
  7. Dado um conjunto de documentos XML, você deseja fazer a engenharia reversa de um esquema que se aplique a esses documentos. Documentos XML podem ser idealizados em árvores. Um esquema é então uma especificação de uma linguagem de árvore e o problema de inferência de esquema é um problema de inferência de linguagem sobre linguagens de árvore.
  8. Muitos aplicativos requerem raciocínio aritmético automatizado. Suponha que fixemos uma teoria lógica como a aritmética de Presburger, na qual temos os números naturais, a adição e o predicado menor que. Uma fórmula com n variáveis ​​representa um conjunto de vetores n-dimensionais. Um vetor é uma sequência de dígitos e pode ser codificado como uma palavra. Um predicado é então um conjunto de palavras; uma linguagem. Operações lógicas como conjunção, disjunção e negação tornam-se interseção, união e complemento de linguagens (quantificação existencial é um tipo de projeção).

A redução sugerida acima trata as linguagens como objetos matemáticos abstratos. Para aplicar essas idéias na prática, precisamos de uma estrutura de dados para representar linguagens e algoritmos para manipular essas estruturas de dados.

Digite autômatos. Os autômatos nos permitem reduzir perguntas sobre objetos matemáticos abstratos, como linguagens, a perguntas algorítmicas concretas sobre gráficos rotulados. A linguagem e a teoria dos autômatos, além de um número insano de aplicações práticas, fornecem um serviço intelectual muito significativo. Podemos pensar em problemas que vão desde a formatação de códigos postais a procedimentos de decisão para lógica monádica de segunda ordem em um espaço conceitual uniforme e organizado. Quão incrível é isso!

Eu não disse nada sobre procedimentos lógicos e de decisão. (Sim, eles têm aplicações práticas.) Consulte a resposta de Kaveh para obter uma visão geral autorizada.


haha, a ironia
Praveen Soni

16

Como foi explicado nas outras respostas, a teoria dos autômatos é importante conceitualmente como um modelo computacional simples que entendemos bem, e expressões regulares e autômatos têm muitas aplicações na vida real.

Aqui está um pequeno exemplo de pesquisa moderna que remonta à teoria dos autômatos para entender um conceito moderno. Neste artigo, os pesquisadores provam que todos os idiomas regulares possuem testadores de propriedades: "Os idiomas regulares são testáveis ​​com um número constante de consultas"


15

Não são apenas autômatos de baunilha. Você está aprendendo sobre o básico (estados de aceitação, transições epsilon, ...) de um modelo (computacional) que ajuda a raciocinar sobre o que pode e, mais importante, o que não pode ser expresso com algumas linguagens de consulta. Alguns resultados interessantes incluem:

(e é claro que estou pulando muitas outras aulas)

Basicamente, é um modelo muito geral. Suas aulas provavelmente enfatizarão o vínculo entre autômatos, linguagens e lógica.

Se eu estivesse olhando para relacionar isso com ferramentas "mundanas" concretas, passaria uma manhã de lazer na biblioteca lendo algumas partes (AB?) De Foundations of Databases por Abiteboul & al, e tentando conectar isso de volta ao material da aula . Claro que é apenas uma das (muitas) maneiras de procurar aplicativos de uma classe de autômatos, e acho que não é o mais óbvio - mas é exatamente por isso que é um exercício interessante.


14

Como já apontado em várias respostas, a Teoria dos Autômatos nos cursos da UG fornece uma estrutura conceitual básica para a introdução de tópicos mais avançados (e práticos) e também para apontar conexões negligenciadas; por exemplo: Diagramas de Decisão Binária (eles são DFA minimizados; depois de ensinar o DFA, geralmente ensino a solução de quebra-cabeças baseada em BDD); scripts, incluindo BioPerl e BioPython (e uma excelente configuração para reforçar quantas correspondências não intencionais podem estar ocultas nos regexps de scripts do mundo real), depuração formal (propriedades do estado como FA negada, interseção) e até mesmo programação de alarme de intruso ou VCR (todos os dias a situação de estresse de um autômato mal especificado ensina através de exemplos incompletos; talvez formalizada usando a síntese de interfaces de usuário baseada em cenários de play-in / play-out de Harel). Eu também uso a configuração para ensinar Python '


11
Bem-vindo, Ganesh!
Suresh Venkat

11
Uma ótima maneira de ensinar autômatos. Você gostaria de compartilhar suas anotações de aula?
Martin Berger

9

Vou dar outra resposta de um ângulo prático totalmente diferente: máquinas de estados finitos (ou pelo menos algumas generalizações / extensões simples) são frequentemente usadas no lado da IA ​​da programação de jogos. Eles fornecem um excelente modelo para encapsular o comportamento dos personagens; por exemplo, um inimigo pode ter estados representando 'patrulha', 'busca', 'abordagem', 'ataque', 'defesa', 'recuo', 'morte' etc. etc. com transições bem definidas entre eles. Isso não envolve nenhum dos aspectos formais dos autômatos, como linguagens regulares e afins, mas o conceito de autômato é muito básico.


8

Vimos que a linguagem que contrasta teoria e prática, colocando uma acima da outra, é a própria consumação da ignorância - que prova que um homem não está familiarizado com os primeiros elementos do pensamento e é uma ótima maneira de provar sua mente tão pervertida que é incapaz de lhes ser ensinada.

- James Mill (escrevendo pseudônimo de "PQ"), "Teoria e Prática", London and Westminster Review , abril de 1836


8

Houve uma pesquisa considerável relacionada à teoria dos autômatos na verificação de modelos usada na indústria. Confira as palestras recentes de Moshe Vardi no Fields Institute , em particular a 3ª palestra "Lógica, Autômatos, Jogos e Algoritmos", para saber por que a teoria dos autômatos ainda é importante e útil.

Abstrato:

A abordagem teórica dos autômatos aos procedimentos de decisão, introduzida por Buechi, Elgot, Rabin e Trakhtenbrot nas décadas de 1950 e 1960, é uma das abordagens mais fundamentais para os procedimentos de decisão. Recentemente, essa abordagem encontrou aplicações industriais na verificação formal de sistemas de hardware e software. O caminho da lógica para os algoritmos práticos passa não apenas pelos autômatos, mas também pelos jogos, cujos aspectos algorítmicos foram os estudos de Chandra, Kozen e Stockmeyer no final dos anos 1970. Nesta palestra, descrevemos o caminho da lógica para os algoritmos via autômatos e jogos.

Os slides e arquivos de áudio das palestras estão disponíveis aqui: 1 , 2 , 3 .


6

Devemos levar em consideração a semântica das palavras "prático" e "aplicação". Para alguns alunos, prático é qualquer coisa que os ajude a passar nos exames; para outros, qualquer coisa que surja em um emprego. Nos dois casos, a Teoria dos Autômatos é realmente muito prática.

Como outros apontam, você usará gramáticas, por exemplo, ao estudar compiladores. Mas mais do que isso: entender todo o conceito de ter diferentes estados e regras para transições entre eles pode torná-lo um programador melhor quando você percebe, por exemplo, que seu código é redundante aqui e ali, e que quando você o aprimora, você estão aplicando no seu código as mesmas idéias conceituais por trás da minimização do DFA.

Da mesma forma para "aplicação". O que você entende por essa palavra? Mesmo se você for um "engenheiro pé-no-chão", verá e usará idéias semelhantes às da Teoria de Autômatos em projetos do mundo real: código de programação, diagramas de fluxo e até o conceito simples e brilhante de pilha. Para nerds teóricos como eu, considero aplicações da Teoria de Autômatos em outras áreas, como lógica, álgebra e teoria de modelos finitos. Certamente, provavelmente nunca precisarei usar o lema de bombeamento durante as compras em um supermercado, mas teoremas como esse me ajudaram a entender a estrutura de certas classes de idiomas, sem mencionar as estruturas lógicas e algébricas com as quais estão em correspondência. E isso é algo que eu valorizo ​​mais do que qualquer medida de praticidade.


5

Juntamente com as lógicas, os autômatos podem oferecer maneiras de verificar estatemens como

Aφ

AφAφ

φAφAφL(A)L(Aφ)


3

Autômatos finitos, geralmente escritos como máquinas de estados finitos em diferentes contextos ou com suas variantes probabilísticas Os modelos de Markov ocultos podem ser aplicados ao reconhecimento de padrões e à quantificação da estrutura de um padrão. Por exemplo, qual é o menor autômato finito estocástico que irá gerar seqüências de caracteres de acordo com mais ou menos uma determinada distribuição de probabilidade ou propriedades estatísticas correspondentes de uma amostra de sequências de caracteres (ou séries temporais) de alguma distribuição.

Veja, por exemplo , CSSR , um algoritmo para reconstruir cegamente estados ocultos; é mais eficiente e flexível do que os modelos Hidden Markov.


11
Para adicionar ao lado prático, os Modelos Hidden Markov são usados ​​em programas de reconhecimento de fala, como o Kurzweil.
tdyen

3

Outra aplicação mais prática da teoria dos autômatos é o desenvolvimento da inteligência artificial. A inteligência artificial foi desenvolvida a partir do conceito de autômato finito. A rede neural de robôs é construída com base na teoria dos autômatos. Afinal, os robôs também são autômatos.


2

Alguns deram ótimas respostas quando se trata de como se relaciona com a indústria. O que deveria ser importante é o seu valor científico, e a teoria de Autômatos é frequentemente a porta para entender primeiro um nível mais alto de teoria da computação nos estudos de um estudante de graduação. A teoria dos autômatos possui um grande conjunto de teoremas que surgem por toda parte na Ciência da Computação Teórica, e especialmente quando se quer falar sobre aplicações como os Compiladores. Seu valor científico (não está desatualizado, como poderia ser? É a teoria central do campo.) É prático para qualquer cientista interessado em computação. É prático, pois é um conhecimento útil para quem entende ou deseja entender a natureza da computação. Se você não encontrar uso, questiono a pesquisa ou mesmo a intenção de estudar CS, pois não é programação (isso '

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.