Existem muitos métodos para provar que um idioma não é regular , mas o que preciso fazer para provar que um idioma é regular?
Por exemplo, se me é dado que é regular, como posso provar que o a seguir também é regular?
Posso desenhar um autômato finito não determinístico para provar isso?
Respostas:
Sim, se você puder criar um dos seguintes:
para alguma língua , então é regular. Existem modelos mais equivalentes , mas os itens acima são os mais comuns.LL L
Também existem propriedades úteis fora do mundo "computacional". também é regular seL
você pode construí-lo executando determinadas operações em idiomas regulares e essas operações são fechadas para idiomas regulares , como
e mais , ou
No exemplo dado, temos alguns idiomas (regulares) como base e queremos dizer algo sobre uma linguagem derivada dele. Seguindo a primeira abordagem - construa um modelo adequado para - podemos assumir o modelo equivalente a que desejamos; permanecerá abstrato, é claro, já que é desconhecido. Na segunda abordagem, podemos usar diretamente e aplicar propriedades de fechamento para obter uma descrição para .L ′ L ′ L L L L ′L L′ L′ L L L L′
fonte
Métodos elementares
Métodos lógicos (geralmente usados na verificação formal)
Métodos avançados
Lemas sofisticados de bombeamento. Veja, por exemplo,
[1] J. Jaffe, um lema de bombeamento necessário e suficiente para idiomas regulares, Sigact News - SIGACT 10 (1978) 48-49.
[2] A. Ehrenfeucht, R. Parikh e G. Rozenberg, Lemmas de bombeamento para conjuntos regulares, SIAM J. Comput. 10 (1981), 536-541.
[3] S. Varricchio, Uma condição de bombeamento para conjuntos regulares, SIAM J. Comput. 26 (1997) 764-771.
Bem quase ordens. Ver
[4] W. Bucher, A. Ehrenfeucht, D. Haussler, Sobre reguladores totais gerados por relações de derivação, Theor. Comput. Sci. 40 (1985) 131-148.
[5] M. Kunz, soluções regulares de desigualdades de linguagem e quase-ordens de poço .
Suporte à série .N
Métodos algébricos baseados em transduções (consulte também Operações preservando idiomas regulares ).
fonte
A resposta de Ran G. fornece uma lista bastante extensa dos modelos equivalentes que podem ser usados para especificar idiomas regulares (e a lista continua, autômatos bidirecionais, lógica MSO, mas isso é coberto pelo link em 'modelos mais equivalentes '). E, como Raphael enfatiza, precisamos de um argumento para convencer o público de que a representação escolhida é realmente correta.
Reconsiderando a pergunta, ele adiciona 'Por exemplo '. Isso significa que precisamos fornecer uma construção válida que, considerando qualquer um dos modelos acima, assumimos que especifique a linguagem , transforme esse modelo em um para . Esse geralmente será o mesmo tipo de modelo, mas não precisa ser: podemos, por exemplo, começar com uma FSA determinística para e terminar com uma não determinística para .… L L′ L L′
Isso inclui a possibilidade de usar operações de fechamento: na operação fornecida explicitamente no exemplo, temos .L′=(Σ∗∖L)⋅Σ∗
Portanto, o que quero dizer é que a resposta é ótima, mas devemos adicionar a "construção de para ", quando não estiver construindo um idioma específico a partir do zero.L L′
fonte
Ocasionalmente, você encontrará um idioma especificado como "todas as cadeias de caracteres onde cada substring do elemento de satisfaz ", onde é alguma constante fixa. Nesse caso, o idioma será regular. A idéia aqui é definir um autômato finito em que alguns dos estados "lembram" os símbolos de entrada vistos mais recentemente , como na resposta a esta pergunta .s k s k k
<some property>
fonte
Outro método, não coberto pelas respostas acima, é a transformação finita de autômatos . Como um exemplo simples, vamos mostrar que os idiomas regulares estão fechados na operação de reprodução aleatória , definida da seguinte forma: Você pode mostrar o fechamento em ordem aleatória usando as propriedades de fechamento, mas também pode mostrá-lo diretamente usando os DFAs. Suponha que seja um DFA que aceite (para ). Construímos um novo DFA seguinte maneira:
Uma versão mais sofisticada desse método envolve adivinhação . Como exemplo, vamos mostrar que os idiomas regulares são fechados sob reversão , ou seja, (Aqui .) Essa é uma das operações de fechamento padrão, e o fechamento com reversão ocorre facilmente com a manipulação de expressões regulares (que pode ser considerada a contrapartida da transformação de autômatos finitos em expressões regulares) - apenas inverta a expressão regular. Mas você também pode provar o fechamento usando NFAs. Suponha que seja aceito por um DFA . Construímos um NFA
(Podemos nos livrar de se permitirmos vários estados iniciais.) O componente de adivinhação aqui é o estado final da palavra após a reversão.q′0
Adivinhar muitas vezes envolve também verificar. Um exemplo simples é o fechamento em rotação : Suponha que seja aceito pelo DFA . Construímos um NFA , que opera da seguinte maneira. O NFA adivinha primeiro . Em seguida, verifica se e que , movendo-se de para não determinística. Isso pode ser formalizado da seguinte maneira:
Outra variante da técnica incorpora contadores limitados. Como exemplo, vamos considerar o fechamento da distância de edição de alteração : Dado um DFA para , e construa um NFA para do seguinte modo:
fonte
Um idioma é regular se você puder escrever um scanner que decida sobre seqüências arbitrárias, se pertencem ou não ao idioma, usando não mais do que uma quantidade fixa de memória - ou seja, o reconhecimento pode ser feito no espaço O (1) .
fonte
A transformação de expressão regular é uma maneira de provar o fechamento em determinadas operações. Os dois exemplos mais simples são fechamento sob reversão e fechamento sob homomorfismo .
Dada uma expressão regular representando uma linguagem , podemos construir uma expressão regular para , a linguagem do verso de todas as palavras em , recursivamente:r L LR L
Toda a ação acontece no final regra . Como exemplo, você pode verificar se . Estabelece indução estruturais que a linguagem da é, de fato . ( 0 ∗ 1 ∗ ) R = 1 ∗ 0 ∗ r R L R(r1r2)R=rR2rR1 (0∗1∗)R=1∗0∗ rR LR
Outro exemplo simples é o fechamento sob homomorfismo. Dado um homomorfismo e uma expressão regular para uma linguagem , podemos obter uma expressão regular para substituindo todas as instâncias de em por . r L h ( L ) σ r h ( σ )h:Σ→Δ∗ r L h(L) σ r h(σ)
fonte
Outra maneira é criar o idioma usando operações nas quais você sabe que eles estão fechados. Esta é uma extensão para exibir uma expressão regular, pois você tem muito mais operações disponíveis (inverter a corda, complemento, interseção, cortar um pedaço, apenas manter uma parte, homomorfismos e homomorfismos inversos, ...)
fonte