Eu sei que idiomas que podem ser definidos usando expressões regulares e reconhecíveis pelo DFA / NFA (autômatos finitos) são equivalentes. Também não existe DFA para o idioma . Mas ainda assim ele pode ser escrito usando expressões regulares (para que o assunto qualquer linguagem não-regular pode ser) como . Mas sabemos que toda linguagem que tem uma expressão regular tem um DFA que a reconhece (contradição com minha afirmação anterior). Sei que isso é trivial, mas a definição de expressão regular inclui a condição de que ela deve ser finita?{ ϵ } ∪ { 01 } ∪ { 0011 } . . . . . .
10
Respostas:
Se fosse permitido que expressões regulares fossem infinitas, qualquer idioma teria sido regular.
Dada a linguagem , sempre podemos definir a expressão regular , que define exatamente . (Exemplo: a expressão regular define .)L={w1,w2,…} R=w1+w2+⋯ L
R1=ϵ+0+1+00+01+10+11+⋯ L1={0,1}∗
Sabemos que algumas línguas não são regulares, portanto, isso mostra que expressões regulares infinitas descrevem uma classe maior de línguas do que expressões regulares finitas.
fonte
Sim, deve ser finito. Imagine que você tem esse conjunto infinito de correspondências possíveis, e sua entrada é
011
. Você seria capaz de rejeitá-lo? Você ficaria sem jogos para conferir?Existe alguma linguagem que, por essa definição, não seja regular ? E o conjunto de todos os pares de programas e entradas, de modo que o programa especificado pare na entrada especificada?
Agora, se você tivesse um programa que enumerasse as strings em um idioma em ordem lexicográfica,
Atualizar
Para esclarecer um pouco com base no feedback dos comentários, a razão pela qual nem todos os idiomas deste formulário são regulares é por definição. Se, por exemplo, você procurar a prova do teorema de Kleene, isso depende do fato de que uma expressão regular deve ser finita para provar que gera uma máquina de estados finitos.
Por que definimos uma linguagem "regular" dessa maneira? Como toda linguagem formal é um subconjunto das strings de um alfabeto, e todo conjunto de strings pode ser expresso como uma união de singletons, portanto, se chamarmos qualquer conjunto de strings de um idioma "regular", o idioma regular seria apenas sinônimo de idioma . Essa não é uma definição muito útil, especialmente porque não podemos realmente implementá-la em hardware ou software. Não podemos armazenar uma lista infinita arbitrária em nenhum lugar ou construir uma máquina de estado infinito.
Como sugeri, no entanto, se você tiver uma maneira de enumerar todas as seqüências de caracteres em um idioma em ordem, poderá criar uma decisão a partir disso (aceite quando vir a sequência exata, rejeite quando encontrar uma sequência que vem depois da sequência que você está procurando) e vice-versa (para cada sequência em ordem, execute-a pelo decider e faça a saída se e somente se for aceita). Portanto, se considerássemos todos os idiomas enumeráveis regulares , todos os idiomas decidíveis seriam “regulares” e precisaríamos de um novo termo para os idiomas reconhecidos por máquinas de estados finitos e suas codificações equivalentes como expressões finitas.
fonte
Suponha que expressões regulares pudessem ser infinitas.
Assim, o idioma definido por {ϵ} ∪ {01} ∪ {0011} ... será regular. Para cada idioma regular existe um NFA. Uma maneira de obter esse NFA seria ter NFAs individuais para cada um dos {ϵ}, {01}, {0011} ... e combiná-los usando as transições ϵ. Como existem infinitas expressões regulares distintas, precisaremos combinar sub-NFAs infinitos. No entanto, a NFA pode ter apenas um número finito de estados (definição de NFA).
Portanto, não existe NFA que possa definir a linguagem definida pela união de infinitas expressões regulares, o que implica que a linguagem não é regular.
Portanto, não há expressão regular que possa definir o mesmo idioma que o idioma definido pela união de infinitas expressões regulares.
Assim, expressões regulares podem ter apenas expressões finitas.
fonte