Escriba para la expansión decimal de (sin encabezado ). Deje y ser enteros, con . Considere el lenguaje de las expansiones decimales de los múltiplos de más una constante:0
¿ M es regular? sin contexto?
(Contraste con el lenguaje de la gráfica de una función afín )
Creo que esta sería una buena pregunta para la tarea, por lo que las respuestas que comienzan con una pista o dos y explican no solo cómo resolver la pregunta sino también cómo decidir qué técnicas usar serían apreciadas.
formal-languages
context-free
regular-languages
integers
Gilles 'SO- deja de ser malvado'
fuente
fuente
Respuestas:
Muy simple: suponga que los números se escriben en decimal (otras bases se manejan mediante una modificación trivial). Construir un DFA, con estados 0, 1, ..., . El estado inicial es 0, y desde el estado en la entrada, el dígito va al estado . El estado de aceptación es (podría necesitar un ajuste si ).a - 1 q d ( 10 q + d ) mod a b mod a b > aa a−1 q d (10q+d)moda bmoda b>a
fuente
Es regular. Primero trabajemos en binario, que se generalizará a cualquier base> 1. Sea el idioma en cuestión. Para a = 1, b = 0 obtenemosMa,b
que es todas las cadenas sobre sin ceros a la izquierda, lo cual es regular (construya una expresión regular para ello).{0,1}
Ahora para cualquier , con b todavía 0 obtenemos de multiplicando numéricamente por a, es decir, realizando la transformación en cada cadena de . Eso se puede hacer a nivel de bits mediante una secuencia de cambios y adiciones de que dependen de los bits de la cadena fija . Las dos transformaciones que necesitamos son:M a , 0 M 1 , 0 ˉ x → ¯ a x M a , 0 x ˉ aa Ma,0 M1,0 x¯→ax¯¯¯¯¯¯ Ma,0 x a¯
ˉ x → ˉ x 0x¯→2x¯¯¯¯¯ que esx¯→x¯0
y
Concatenar un 0 a la derecha conserva claramente la regularidad. Por lo tanto, solo tenemos que demostrar que la segunda operación conserva la regularidad. La forma de hacerlo es con un transductor de estado finito trabajando en de derecha a izquierda. Ese es el paso más difícil. Sugiero hacerlo con un programa de pseudocódigo y un poco de memoria auxiliar finita (como algunas variables de bit) en lugar de usar estados. Siempre que la memoria tenga un tamaño fijo en todas las entradas y escanee estrictamente de derecha a izquierda, es una transducción de estado finito y conserva la regularidad.x¯
Finalmente, para obtener de necesitamos agregar numéricamente a cada cadena, pero eso se hace con un transductor similar que depende del número fijo b. M a , 0 b T bMa,b Ma,0 b Tb
Para hacer lo mismo en cualquier base, muestre adicionalmente cómo realizar la multiplicación por un solo dígito en esa base, utilizando un transductor que depende de d. Con eso, podemos multiplicar por números de varios dígitos y aún permanecer en los idiomas regulares. O bien, podemos precisar esto diciendo que la multiplicación por es una suma repetida.S d dd Sd d
Solo querías pistas. Cada uno de esos pasos depende de un teorema / técnica bastante complejo, por lo que probarlos para obtener una prueba completa será un trabajo adicional.
fuente
Sugerencia n. ° 1 : primero resuelva el problema más popular "escriba un autómata que reconozca las representaciones decimales / binarias de los números divisibles por 3" cuando el bit menos significativo aparezca primero.
Pregunta intermedia: pruebe que es regular.{ax+b¯¯¯¯¯¯¯¯¯¯¯¯¯¯∣ax+b≥0x∈Z}
Sugerencia n. ° 2 : El gráfico de la función "módulo " es finito. Puede calcularlo para cada en que es tanto el conjunto de dígitos como el idioma de su autómata.a d { 0 , … , 9 }(n↦10n+d) a d {0,…,9}
Consejo # 3 : Ahora, reemplace con . ¿Qué cambia esto? Intente utilizar el hecho de que los lenguajes regulares son estables por intersección en lugar de construir un autómata ad-hoc . x ∈ Nx∈Z x∈N
Sugerencia n. ° 4 : ahora suponga que es un número primo (de modo que es un campo) y que todavía estamos en el caso dondeZ / a Z x ∈ Za Z/aZ x∈Z . Ahora usamos una representación donde el primer bit es el bit más significativo . ¿Puedes construir el autómata de la misma manera?
Pista # 5 : no siempre tienes que construir un autómata para probar que un idioma es regular. ¿Cómo puedes usar los resultados anteriores para demostrar que es regular? (con el bit más significativo primero)M
fuente
Estoy siguiendo la idea de @vonbrand:
Pista 1:
Resuelve primero para . Puedes usar el Teorema de Myhill-Nerode .b=0
Pista 2:
Resuelva el caso general, reutilice el autómata inducido por el caso .b=0
fuente
El lenguaje es regular.
Sugerencia: expulsar nueves
Idea de prueba
Para y b < 9 ,a=9 b<9
Para manejar otros valores de que son coprimos con 10 ,a 10
Para manejar valores de cuyos únicos factores primos son 2 y 5 ,a 2 5
Para generalizar a todos los valores de y b ,a b
Tenga en cuenta que utilizamos la técnica que sea conveniente; Las tres técnicas elementales principales (expresiones regulares, autómatas finitos, propiedades de teoría de conjuntos) están representadas en esta demostración.
Prueba detallada
Sea con un ′ coprimo con 10 . Deje M ′ = { ¯ a ′a=2p5qa′ a′ 10 y M ″ = { ¯ 2 p 5 qM′={a′x+b¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯∣x∈Z∧a′x+b≥0} . Por aritmética elemental, los números iguales a b módulo a son exactamente los números iguales a b módulo a ′ y a b módulo 2 p 5 q , entonces M ∩ { ¯ x ∣ x ≥ b } = M ′ ∩ M ″ ∩ { ¯ x ∣ x ≥ b } . Dado que la intersección de los idiomas regulares es regular, yM′′={2p5qx+b¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯∣x∈Z∧2p5qx+b≥0} b a b a′ b 2p5q M∩{x¯¯¯∣x≥b}=M′∩M′′∩{x¯¯¯∣x≥b} es regular porque es el complemento de un lenguaje finito (por lo tanto, regular), si M ′ y M ″ también son regulares, entonces M ∩ { ¯ x ∣ x ≥ b } es regular; y M es, por lo tanto, regular ya que es la unión de ese lenguaje con un conjunto finito. Por lo tanto, para concluir la prueba, es suficiente demostrar que M ' y M ″ son regulares.{x¯¯¯∣x≥b} M′ M′′ M∩{x¯¯¯∣x≥b} M M′ M′′
Comencemos con , es decir, números módulo 2 p 5 q . Los enteros cuya decimal expansión está en M " se caracterizan por su último m un x ( p , q ) dígitos, ya que el cambio dígitos además medios que dejan la adición de un múltiplo de 10 m una x ( p , q ) que es un múltiplo de 2 p 5 q . Por lo tanto, 0 ∗ M ″ = ℵ ∗ F dondeM′′ 2p5q M′′ max(p,q) 10max(p,q) 2p5q 0∗M′′=ℵ∗F es el alfabeto de todos los dígitos y F es un conjunto finito de palabras de longitud m a x ( p , q ) , y M ″ = ( ℵ ∗ F ) ∩ ( ( ℵ ∖ { 0 } ) ℵ ∗ ) es un idioma.ℵ F max(p,q) M′′=(ℵ∗F)∩((ℵ∖{0})ℵ∗)
Ahora pasamos a , es decir, los números del módulo a ′ donde a ′ es coprimo con 10 . Si a ′ = 1, entonces M ′ es el conjunto de expansiones decimales de todos los naturales, es decir, M ′ = { 0 } ∪ ( ( ℵ ∖ { 0 } ) ℵ ∗ ) , que es un lenguaje normal. Imaginemos ahora un ' > 1 . Deje k = a ′ -M′ a′ a′ 10 a′=1 M′ M′={0}∪((ℵ∖{0})ℵ∗) a′>1 . Según el pequeño teorema de Fermat, 10 a ′ - 1 ≡ 1k=a′−1 , lo que significa que a ′ divide 10 k - 1 . Construimos un autómata finito determinista que reconocerá 0 ∗ M ′ de la siguiente manera:10a′−1≡1moda′ a′ 10k−1 0∗M′
El estado alcanzado desde una palabra ¯ x satisface i ≡ | ¯ x |(i,u) x¯¯¯ y u ≡ xi≡|x¯¯¯|modk . Esto se puede probar por inducción sobre la palabra, siguiendo las transiciones en el autómata; las transiciones se calculan para esto, usando el hecho de que 10 k ≡ 1u≡xmod10k−1 . Así, el autómata reconoce las expansiones decimales (permitiendo ceros iniciales) de los números de la forma u + y 10 k con u ≡ b10k≡1mod10k−1 u+y10k ; desde 10 k ≡ 1u≡bmoda′ , el autómata reconoce las expansiones decimales de los números iguales a b módulo a ′ permitiendo ceros iniciales, que es 0 ∗ M ′ . Este lenguaje se demuestra así regular. Finalmente, M ′ = ( 0 ∗ M ′ ) ∩ ( ( ℵ ∖ { 0 } ) ℵ ∗ ) es un lenguaje regular.10k≡1moda′ b a′ 0∗M′ M′=(0∗M′)∩((ℵ∖{0})ℵ∗)
Para generalizar a bases distintas de , reemplace 2 y 5 anteriores por todos los factores primos de la base.10 2 5
Prueba formal
Dejado como ejercicio para el lector, en su probador de teoremas favorito.
fuente