Linguagem dos valores de uma função afim


10

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:n¯n0aba>0a

M={ax+b¯∣x∈N}

é regular? sem contexto?M

(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.


Agora mesmo, percebo que respondi a um caso específico, seguindo a ideia de @vonbrand. DFA que aceita representações decimais de um número natural divisível por 43
— Hendrik Jan

Respostas:


9

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 ).aa−1qdb mod a b > a(10q+d)modabmodab>a


11
Muito bom - muito melhor que o meu!
— David Lewis

8

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

M1,0={1,10,11,100,101,...}

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 ˉ umaMa,0M1,0x¯→ax¯Ma,0xa¯

ˉ x → ˉ x 0x¯→2x¯ que éx¯→x¯0

e

x¯→2x+x¯

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,bMa,0bTb

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 ddSdd

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.


Seu FA não recebe como entrada, portanto não vejo como o que você escreve mostra que o idioma atual é regular. Observe que nem todo programa que utiliza memória finita corresponde a FA: é importante que possa passar apenas uma vez e da esquerda para a direita sobre a entrada, considerando todos os símbolos de entrada exatamente uma vez. x¯
— Raphael

@ Rafael Você pode ir da direita para a esquerda, se quiser, o que importa é ser consistente. Não consigo encontrar uma falha no esboço de prova de David; invocar transdutores é um pouco menos elementar do que eu imaginava, mas parece válido.
— Gilles 'SO- stop be evil'

@Gilles: Primeiro de tudo, ele não explica como a multiplicação intercalam por e adicionando de ao resultado em uma passagem ; ele até reduz a multiplicação de para "uma sequência de turnos e adições de ". Cada turno e adição é bom, mas como fazer a sequência? Em segundo lugar, e mais importante, ele mostra como construir um transdutor que calcula ; isso não imediatamente dar-lhe um FA que aceita . Por exemplo, multiplicar números é fácil, mas fatorar (supostamente) não é. Então você precisa de pelo menos um argumento adicional. b um x ˉ x ↦ ¯ um x + b Mabax x¯↦ax+b¯ M
— Rafael

Não estou construindo uma FSA. Estou começando com um conjunto facilmente mostrado como regular ( ) e depois transformando todas as strings nele com uma série finita de operações, cada uma das quais preserva a regularidade. Isso requer um número de passes (transdutores). Mas tudo bem, pois a sequência de transdutores e a estrutura de cada um são previamente fixadas com base apenas em e . Cada passagem (transdutor) preserva a regularidade, portanto, não há necessidade de intercalá-las em uma passagem. Sim, não "elementar". Mas construir um FSA de uma só vez, com um passe, seria muito complexo. a bM1,0ab
— David Lewis

11
@ Rafael - sim, isso é muito poderoso. De fato, muitas famílias não regulares também são fechadas sob transdutores de estado finito. E você pode usar transdutores como mecanismos de redução, obtendo toda uma teoria da complexidade "estrutural" de linguagens não regulares.
— David Lewis

8

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)ad{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∈Zx∈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 ∈ ZaZ/aZx∈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


Fique à vontade para comentar se achar que isso não é apropriado.
— Jmad

Dica # 1 é um grande passo. Na dica 4, é importante perceber que e são diferentes. Passar por parece um desvio, você precisa gerenciar o caractere de sinal: por que não permanecer em ? um ⊥ 10 Z Na∈{2,5}a⊥10ZN
— Gilles 'SO- stop be evil'

@ Gilles: Eu queria dizer quando e , porque é tedioso para reconhecer. umx+b≥0x∈Z3x+1234ax+b¯ax+b≥0x∈Z3x+1234
— Jmad

@ Gilles: Eu acho que a dica 1 é muito legal para ser estragada. Você provavelmente está certo sobre a dica 4.
— Jmad

5

Estou seguindo a ideia de @vonbrand:

Dica 1:

Resolva primeiro para . Você pode usar o teorema de Myhill-Nerode .b=0

Definimos a seguinte relação . Esta é obviamente uma relação de equivalência. Além disso, é congruente à direita, pois, se anexarmos um dígito , obteremos . Finalmente, satura , pois é a classe de equivalência . Como possui um número finito de classes, temos pelo Teorema de Myhill-Nerode que ele é regular. A FSA associada é mínima e tem estados.d ˉ x ≈ ˉ yx¯≈y¯:⟺x≡ymodadx¯≈y¯⟺10x+d≡10y+dmoda⟺x¯d≈y¯dLL[0]≈a

Dica 2:

Resolva o caso geral, reutilize o autômato induzido pelo caso .b=0

Sabemos que o idioma é regular para . Assim simplesmente tomar a estado FSA para o idioma. Agora vamos construir uma FSA para . Suponha que tenha dígitos. Em seguida, o FSA se ramifica como uma árvore com 10 anos de profundidade e contém todos os caminhos para números com dígitos. Todos os estados que podem ser alcançados com um número que não está no formato estão rejeitando a aceitação. Finalmente, conectamos a parte da árvore da FSA ao autômato , de acordo com o restante da divisão por .b=0aMb=0Lbkkkax+bMa


Eu entendo a técnica, mas não os detalhes. A Dica 1 também não está abordando o caso ? Além disso, para o mod 10 eu esperaria 10 estados (não )? a=1a
— Jan Hendrik

3

O idioma é regular.

Dica: expulse nove


Ideia de prova

Para e ,a=9b<9

crie um autômato com estados rotulados de a . é o estado inicial e o único estado final é . Do estado , no dígito , faça a transição para o estado .9080bsd(s+d)mod9

Para manipular outros valores de que são coprime com ,a10

agrupe dígitos em pacotes para encontrar algum tal que divida (por exemplo, pegue se porque ).ka10k−1k=3a=37999=27×37

Para manipular valores de cujos únicos fatores primos são e ,a25

observe que se trata de um número finito de dígitos no final.

Para generalizar para todos os valores de e ,ab

use o fato de que a união e a interseção de idiomas regulares são regulares, que idiomas finitos são regulares e que os múltiplos de são exatamente os múltiplos de ambos quando e são coprimes.a1⋅a2a1a2

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′10M ″ = { ¯ 2 p 5 qM′={a′x+b¯∣x∈Z∧a′x+b≥0}M″={2p5qx+b¯∣x∈Z∧2p5qx+b≥0}baba′b2p5qM∩{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}MM′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″2p5qM″max(p,q)10max(p,q)2p5q0∗M″=ℵ∗FℵFmax(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′10a′=1M′M′={0}∪((ℵ∖{0})ℵ∗)a′>1k=a′−110a′−1≡1moda′a′10k−10∗M′

  • Os estados são . A primeira parte representa uma posição de dígito e a segunda parte representa um módulo numérico .[0,k−1]×[0,10k−2]10k−1
  • O estado inicial é .(0,0)
  • Existe uma transição rotulada de para se s e .d(i,u)(j,v)v≡d10i+umod10k−1j≡i+1modk
  • Um estado é final se (observe que divide ).(i,u)u≡bmoda′a′10k−1

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¯|modku≡xmod10k−110k≡1mod10k−1u+y10ku≡bmoda′10k≡1moda′ba′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.1025

Prova formal

Deixado como um exercício para o leitor, no seu provador de teoremas favorito.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.