Fiquei me perguntando quando os idiomas que continham o mesmo número de instâncias de duas substrings seriam regulares. Eu sei que o idioma que contém o número igual de 1s e 0s não é regular, mas é um idioma como , onde = número de instâncias da substring "001" é igual ao número de instâncias da substring " 100 " regular? Observe que a string "00100" seria aceita.
Minha intuição me diz que não é, mas sou incapaz de provar isso; Não posso transformá-lo em uma forma que possa ser bombeada através do lema de bombeamento, então como posso provar isso? Por outro lado, tentei criar um DFA ou um NFA ou uma expressão regular e falhei nessas frentes também, então como devo proceder? Eu gostaria de entender isso em geral, não apenas para a linguagem proposta.
fonte
Respostas:
Uma resposta extraída da pergunta.
Como apontado por Hendrik Jan, deve haver um auto-loop 0 adicional no q5.
fonte
É uma pergunta complicada. Tente construir uma sequência que contenha dois 001 e não contenha 100 e veja por que você não pode fazê-lo. Se X = "número de 001" e Y = "número de 100", X = Y ou X = Y ± 1.
Depois que você realiza o truque, torna-se altamente improvável que o idioma seja irregular e a construção de um DFA é bastante simples. Existem apenas 8 estados com suas transições se o próximo símbolo for 0/1:
O estado inicial é S0, e S0, S1, C0, C1, C2 são estados de aceitação.
fonte