Escreva para a expansão decimal de (sem avanço ). Deixe e ser inteiros, com . Considere o idioma das expansões decimais dos múltiplos de mais uma constante:0
é regular? sem contexto?
(Contraste com o idioma do gráfico de uma função afim )
Eu acho que isso seria uma boa pergunta para a lição de casa; portanto, as respostas que começam com uma ou duas dicas e explicam não apenas como resolver a questão, mas também como decidir quais técnicas usar serão apreciadas.
formal-languages
context-free
regular-languages
integers
Gilles 'SO- parar de ser mau'
fonte
fonte
Respostas:
Muito simples: suponha que os números sejam escritos em decimal (outras bases são tratadas por uma modificação trivial). Construir um DFA, com estados 0, 1, ..., . O estado inicial é 0 e, do estado na entrada, o dígito passa para o estado . O estado de aceitação é (pode ser necessário um ajuste se ).a a−1 q d b mod a b > a(10q+d)moda bmoda b>a
fonte
Isso é regular. Vamos primeiro trabalhar em binário, que generalizará para qualquer base> 1. Seja o idioma em questão. Para a = 1, b = 0, obtemosMa,b
que é todas as strings acima de sem zeros à esquerda, o que é regular (construa uma expressão regular para ela).{0,1}
Agora, para qualquer , com b ainda 0, obtemos de multiplicando numericamente por a, ou seja, executando a transformação em cada sequência de . Isso pode ser feito bit a bit por uma sequência de turnos e adições de que dependem dos bits da cadeia fixa . As duas transformações que precisamos são:H um , 0 M 1 , 0 ˉ x → ¯ um x M um , 0 x ˉ uma Ma,0 M1,0 x¯→ax¯¯¯¯¯¯ Ma,0 x a¯
ˉ x → ˉ x 0x¯→2x¯¯¯¯¯ que éx¯→x¯0
e
Concatenar um 0 à direita preserva claramente a regularidade. Portanto, temos apenas que provar que a segunda operação preserva a regularidade. A maneira de fazer isso é com um transdutor de estado finito trabalhando em da direita para a esquerda. Esse é o passo mais difícil. Sugiro fazê-lo com um programa de pseudo-código e alguma memória auxiliar finita (como algumas variáveis de bit) em vez de usar estados. Contanto que a memória tenha um tamanho fixo em todas as entradas e você digitalize estritamente da direita para a esquerda, é uma transdução de estado finito e preserva a regularidade.x¯
Finalmente, para obter de , precisamos adicionar numericamente a cada string, mas isso é feito com um transdutor semelhante que depende do número fixo b. M a , 0 b T bMa,b Ma,0 b Tb
Para fazer o mesmo em qualquer base, mostre adicionalmente como realizar a multiplicação com um único dígito nessa base, usando um transdutor que depende de d. Com isso, podemos multiplicar por números de vários dígitos e ainda permanecer nos idiomas regulares. Ou, podemos refiná-lo dizendo que a multiplicação por é apenas uma adição repetida.S d dd Sd d
Você queria apenas dicas. Cada uma dessas etapas depende de um teorema / técnica bastante complexo, portanto, provar que essas provas são completas será o trabalho extra.
fonte
Dica 1 : primeiro resolva o problema mais popular "escreva um autômato que reconheça as representações decimais / binárias dos números divisíveis por 3" quando o bit menos significativo aparecer primeiro.
Pergunta intermediária: prove que é regular.{ax+b¯¯¯¯¯¯¯¯¯¯¯¯¯¯∣ax+b≥0x∈Z}
Dica 2 : O gráfico da função "módulo " é finito. Você pode calculá-lo para cada em que é o conjunto de dígitos e o idioma do seu autômato.a d { 0 , … , 9 }(n↦10n+d) a d {0,…,9}
Dica # 3 : agora, substitua com . O que isso muda? Tente usar o fato de que linguagens regulares são estáveis por interseção em vez de criar um autômato ad-hoc . x ∈ Nx∈Z x∈N
Dica # 4 : agora supor que é um número primo (de modo que é um campo) e que ainda estamos no caso em que . Agora usamos uma representação em que o primeiro bit é o bit mais significativo . Você pode construir o autômato da mesma maneira?Z / a Z x ∈ Za Z/aZ x∈Z
Dica 5 : você nem sempre precisa criar um autômato para provar que uma linguagem é regular. Como você pode usar os resultados anteriores para provar que é regular? (com o bit mais significativo primeiro)M
fonte
Estou seguindo a ideia de @vonbrand:
Dica 1:
Resolva primeiro para . Você pode usar o teorema de Myhill-Nerode .b=0
Dica 2:
Resolva o caso geral, reutilize o autômato induzido pelo caso .b=0
fonte
O idioma é regular.
Dica: expulse nove
Ideia de prova
Para e ,a=9 b<9
Para manipular outros valores de que são coprime com ,a 10
Para manipular valores de cujos únicos fatores primos são e ,a 2 5
Para generalizar para todos os valores de e ,a b
Observe que usamos a técnica que for mais conveniente; as três principais técnicas elementares (expressões regulares, autômatos finitos, propriedades da teoria dos conjuntos) estão representadas nesta prova.
Prova detalhada
Seja com coprime com . Seja e . Por aritmética elementar, os números iguais a módulo são exatamente os números iguais a módulo e módulo , então . Como a interseção de idiomas regulares é regular ea=2p5qa′ a′ 10 M ″ = { ¯ 2 p 5 qM′={a′x+b¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯∣x∈Z∧a′x+b≥0} M′′={2p5qx+b¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯∣x∈Z∧2p5qx+b≥0} b a b a′ b 2p5q M∩{x¯¯¯∣x≥b}=M′∩M′′∩{x¯¯¯∣x≥b} {x¯¯¯∣x≥b} é regular porque é o complemento de uma linguagem finita (portanto regular), se e também são regulares, então é regular; e é, portanto, regular, pois é a união dessa linguagem com um conjunto finito. Portanto, para concluir a prova, basta provar que e são regulares.M′ M′′ M∩{x¯¯¯∣x≥b} M M′ M′′
Vamos começar com , ou seja, números módulo . Os números inteiros cuja expansão decimal está em são caracterizados por seus últimos dígitos , pois alterar os dígitos à esquerda significa adicionar um múltiplo de que é um múltiplo de . Portanto, onde é o alfabeto de todos os dígitos e é um conjunto finito de palavras de comprimento e é um idioma comum.M′′ 2p5q M′′ max(p,q) 10max(p,q) 2p5q 0∗M′′=ℵ∗F ℵ F max(p,q) M′′=(ℵ∗F)∩((ℵ∖{0})ℵ∗)
Passamos agora para , ou seja, números módulo onde é coprime com . Se então é o conjunto de expansões decimais de todos os naturais, ou seja, , que é um linguagem regular. Agora assumimos . Seja . Pelo pequeno teorema de Fermat, , ou seja, a divide . Construímos um autômato finito determinístico que reconhecerá seguinte maneira:M′ a′ a′ 10 a′=1 M′ M′={0}∪((ℵ∖{0})ℵ∗) a′>1 k=a′−1 10a′−1≡1moda′ a′ 10k−1 0∗M′
O estado alcançado a partir de uma palavra satisfaz e . Isso pode ser provado por indução sobre a palavra, após as transições no autômato; as transições são calculadas para isso, usando o fato de que . Assim, o autômato reconhece as expansões decimais (permitindo zeros iniciais) dos números da forma com ; Como , o autômato reconhece as expansões decimais dos números iguais a módulo permitindo zeros iniciais, o que é(i,u) x¯¯¯ i≡|x¯¯¯|modk u≡xmod10k−1 10k≡1mod10k−1 u+y10k u≡bmoda′ 10k≡1moda′ b a′ 0∗M′ . Esta linguagem é assim provada regular. Finalmente, é uma linguagem comum.M′=(0∗M′)∩((ℵ∖{0})ℵ∗)
Para generalizar para bases diferentes de , substitua e acima por todos os fatores primos da base.10 2 5
Prova formal
Deixado como um exercício para o leitor, no seu provador de teoremas favorito.
fonte