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

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

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

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

Comentários

  • Acho que isso está fora do assunto aqui; consulte as Perguntas frequentes .
  • Tenho opiniões divergentes sobre o ‘ off = topic ‘ -ness disso. É ‘ obviamente não é nível de pesquisa , mas esta questão particular da relevância da teoria dos autômatos é aquela que surge com frequência.
  • Acho que isso está perfeitamente no assunto. Quais são as aplicações da teoria dos autômatos finitos? Não é diferente de Aplicação de capa de vértice no mundo real , e não ‘ fechamos essa pergunta.
  • A propósito, esta pergunta está intimamente relacionada e suas respostas pode fornecer alguma motivação prática para o estudo da teoria dos autômatos finitos também: ” Para que servem as expressões regulares? “.
  • Devo dizer que a qualidade e a variedade das respostas tornam o ” escopo ” irrelevante. Espero que, com três votos acertados já, esta pergunta não ‘ balance além do limite.

Resposta

  1. Você 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 codificação que pode evitar pelo uso de expressões regulares – em “projetos práticos”, como um e-mail servidor.

  3. Se você é um especialista em CS, com certeza estará escrevendo um compilador / intérprete para uma (pelo menos uma pequena) linguagem. Se você já tentou esta tarefa antes e travou, você “apreciará o quanto um pouco de teoria (também conhecida como gramáticas livres de contexto) pode ajudá-lo. Essa teoria transformou uma tarefa antes impossível em algo que pode ser concluído em um fim de semana. (E conquistou o inventor um prêmio Turing – google BNF).

  4. Se você for um especialista em CS, em algum momento, você precisa sentar e pensar sobre os fundamentos filosóficos da computação, e não sobre como é legal a próxima versão da API do Android. Por outro lado, é função da universidade não prepará-lo para os próximos 5 anos de sua vida, mas prepará-lo para os próximos 50. A única coisa que eles podem fazer a esse respeito é ajudá-lo a pensar – pensar da teoria dos autômatos como um desses cursos.

Resposta

Uma das manifestações mais práticas de CS é construção de compilador. Em 1965, Knuth iniciou o estudo de analisadores LR. Rapidamente (em menos de uma década), tínhamos analisadores LALR, que são um subconjunto de autômatos pushdown determinísticos que nos permitem implementar analisadores de mudança / redução.

No centro da viabilidade e eficiência da análise LALR está uma prova (por Knuth) de que os “prefixos” da linguagem acabam sendo regulares (seu autômato finito). Esta é a gênese de geradores de analisadores automatizados 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 estado finito. Quanto mais prático pode ser?

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

Comentários

  • A análise de arquivos de origem não é realmente a parte interessante (e importante) de um compilador, então eu não ‘ Não acho que seja seguro dizer que ” 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 linguagens usando diferentes ferramentas, por exemplo PEGs ou combinadores de análise (ou seja, parsec).

Resposta

Você consegue ouvir aquele ruído ? É o som de mil teoremas brilhantes, aplicações e ferramentas rindo no paraíso teórico-autômato.

Linguagens e autômatos são conceitos elegantes e robustos que você encontrará em todas as áreas da ciência da computação. As línguas não são objetos de segunda mão formalistas da pré-história da computação.A perspectiva da teoria da linguagem destila questões aparentemente complicadas sobre objetos opacos e sofisticados 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 para a matemática clássica. Aqui estão alguns problemas práticos bastante complicados que são abordados por meio da teoria da linguagem.

  1. Você deseja localizar 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 uma linguagem.
  2. Um programa contém uma violação de asserçã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, um idioma. A propriedade de correção é outro idioma. O problema de correção do programa equivale a uma verificação de inclusão de linguagem.
  3. Seu software pode ficar preso em um loop infinito? Um algoritmo distribuído contém um livelock? Precisamos de idiomas em vez de palavras infinitas, mas a visão de inclusão de idioma ainda se aplica.
  4. Você deseja construir um sanitizer para detectar Javascript malicioso inserido em um aplicativo da web. O conjunto de strings maliciosas é uma linguagem. O conjunto de strings inserido nos formulários em outro idioma. Você deseja determinar se a interseção dessas linguagens 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 supervisione a operação de seu processo químico ou rastreie as atualizações de um banco de dados financeiro. Esses são, no fundo, problemas de inclusão e interseção de linguagem.
  6. Reconhecimento de padrões com suas inúmeras aplicações. Você deseja detectar padrões em dados genômicos, em texto, em uma série de relatórios de bug. São problemas em que recebemos palavras de uma língua desconhecida e temos que adivinhar a língua. Esses são problemas de inferência de linguagem.
  7. Dado um conjunto de documentos XML, você deseja fazer engenharia reversa de um esquema que se aplica a esses documentos. Documentos XML podem ser idealizados como á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 em 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 (a 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.

Insira autômatos. Os autômatos nos permitem reduzir questões sobre objetos matemáticos abstratos, como linguagens, a questões algorítmicas concretas sobre gráficos rotulados. Linguagens e teoria de 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 CEPs até procedimentos de decisão para lógica monádica de segunda ordem em um espaço conceitual uniforme e organizado. Isso é incrível!

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

Comentários

  • haha, a ironia

Resposta

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

Aqui está um pequeno exemplo para pesquisa moderna que volta à teoria dos autômatos para entender um conceito moderno. Neste artigo, os pesquisadores provam que todas as linguagens regulares têm testadores de propriedade: “Linguagens regulares são testáveis com um número constante de consultas”

Resposta

Não se trata apenas de autômatos convencionais. Você está aprendendo o básico (aceitar estados, transições épsilon, …) de a (computacional) modelo 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 muito de outras classes)

Basicamente, é um modelo muito geral. Suas aulas provavelmente irão enfatizar a ligação entre autômatos, linguagens e lógica.

Se eu estivesse procurando relacionar isso a ferramentas “mundanas” concretas, eu “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 de aula. Claro que é apenas uma das (muitas) maneiras de procurar aplicativos de uma classe de autômato, e acho que não a mais óbvia – mas é exatamente por isso que é um exercício interessante.

Resposta

Conforme já apontado em várias respostas, a Teoria dos Autômatos em cursos UG fornece a 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ários (eles são DFA minimizados; depois de ensinar DFA, geralmente ensino solução de quebra-cabeças baseada em BDD); scripts incluindo em BioPerl e BioPython (e uma ótima configuração para reforçar quantas correspondências não intencionais podem estar ocultas em expressões regulares de script do mundo real), depuração formal (propriedades de estado como FA negado, interseção) e até mesmo VCR ou programação de alarme de intruso doméstico (situação de estresse diário de um autômato mal especificado ensinado por meio de exemplos incompletos; talvez formalizado usando a síntese de interfaces de usuário baseada em cenário play-in / play-out de Harel). Eu também uso a configuração para ensinar Python (quase) puramente subconjunto funcional, incluindo mapas, lambdas e compreensões de conjuntos, usando os quais é possível codificar algoritmos FA padrão, muitas vezes de uma maneira virtualmente indistinguível das definições matemáticas.

Comentários

  • Bem-vindo, Ganesh!
  • Uma ótima maneira de ensinar autômatos. Você estaria disposto a compartilhar suas notas de aula?

Resposta

Tem havido considerável pesquisa relacionada à teoria dos autômatos na verificação de modelos usados na indústria. Verifique as palestras recentes de Moshe Vardi no Fields Institute , em particular a terceira aula “Lógica, Autômatos, Jogos e Algoritmos” para uma amostra de por que a teoria dos autômatos é ainda importante e útil.

Resumo:

A abordagem autómato-teórica para 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 aos algoritmos práticos passa não apenas por autômatos, mas também por meio de jogos, cujos aspectos algorítmicos foram estudos de Chandra, Kozen e Stockmeyer no final dos anos 1970. Nesta apresentação geral, descrevemos o caminho da lógica aos algoritmos por meio de autômatos e jogos.

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

Resposta

Vou lançar outra resposta de um ângulo prático totalmente diferente: máquinas de estado finito (ou pelo menos algumas generalizações / extensões simples delas) são frequentemente usadas na IA lado da programação do jogo. Eles acabaram por fornecer um excelente modelo para encapsular o comportamento do personagem; por exemplo, um inimigo pode ter estados representando “patrulha”, “busca”, “abordagem”, “ataque”, “defesa”, “recuo”, “morte”, etc. com transições bem definidas entre eles. Isso não envolve nenhum dos aspectos formais dos autômatos, como linguagens regulares e semelhantes, mas o conceito do autômato é muito central.

Resposta

Vimos que a linguagem que contrasta teoria e prática, colocando uma sobre a outra, é a própria consumação da ignorância – que prova que o homem não está familiarizado com os primeiros elementos do pensamento, e contribui muito para provar que sua mente é tão pervertida que é incapaz de aprender com eles.

– James Mill (escrevendo pseudonimamente como“ PQ”),“ Theory and Practice ”, London and Westminster Review , abril de 1836

Answer

Devemos levar em conta 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 trabalho. Em ambos os casos, a Teoria dos Autômatos é muito prática.

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

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

Resposta

Conjugados com a lógica, os autômatos podem oferecer maneiras de verifique estados como

$ \ qquad A \ models \ varphi $

para um autômato $ A $ e uma fórmula $ \ varphi $. Se $ A $ é o modelo de um sistema e $ \ varphi $ uma formalização das propriedades desejadas, você obtém a verificação do sistema, uma preocupação muito prática com um número crescente de aplicações viáveis.

Considerando o lado dos autômatos das coisas leva a bons algoritmos. Por exemplo, se $ \ varphi $ é uma fórmula LTL e $ A $ um autômato Büchi (ou seja, um autômato finito em execução infinita), você pode traduzir $ \ varphi $ a um autômato equivalente $ A_ \ varphi $ e verifique se $ \ cal {L} (A) \ subseteq \ cal {L} (A_ \ varphi) $

Resposta

Autômatos finitos, muitas vezes escritos como máquinas de estados finitos em diferentes contextos ou com suas variantes probabilísticas. Modelos ocultos de Markov 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 strings de acordo, mais ou menos, com uma dada distribuição de probabilidade, ou combinando propriedades estatísticas de uma amostra de strings (ou séries temporais) de alguma distribuição.

Veja, por exemplo, CSSR , um algoritmo para reconstrução cega de estados ocultos; é mais eficiente e flexível do que os modelos ocultos de Markov.

Comentários

  • Para aumentar o lado prático, os modelos ocultos de Markov são usados no reconhecimento de fala programas como o Kurzweil.

Resposta

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

Resposta

Alguns deram ótimas respostas quando se trata de como isso se relaciona com a indústria. O que deve ser importante é seu valor científico, e a teoria dos autômatos costuma ser a porta de entrada para compreender primeiro um nível superior de teoria da computação nos estudos de um aluno de graduação. A teoria dos autômatos tem um grande conjunto de teoremas que surgem por toda parte na Ciência da Computação Teórica, especialmente quando se quer falar sobre aplicações como Compiladores. Seu valor científico (não está desatualizado, como poderia ser? É a teoria central para o campo.) É prático para qualquer cientista que esteja interessado em computação. É prático porque é um conhecimento útil para aqueles que entendem ou desejam para entender a natureza da computação. Se você não conseguir encontrar uso nela, questiono as pesquisas ou mesmo a intenção de estudar CS, pois não é programação (é uma aplicação de CS), é uma ciência formal.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *