Écrivez pour l'expansion décimale de (sans interligne ). Soit et entiers, avec . Considérez le langage des expansions décimales des multiples de plus une constante:ˉ n0
a
M = { ¯ ax + b ∣x∈N}
est-il régulier? sans contexte?M
(Contraste avec la langue du graphique d'une fonction affine )
Je pense que cela ferait une bonne question de devoirs, donc les réponses qui commencent par un indice ou deux et expliquent non seulement comment résoudre la question mais aussi comment décider quelles techniques utiliser seraient appréciées.
formal-languages
context-free
regular-languages
integers
Gilles 'SO- arrête d'être méchant'
la source
la source
Réponses:
Très simple: supposons que les nombres soient écrits en décimal (les autres bases sont gérées par une modification triviale). Construire un DFA, avec états 0, 1, ..., . L'état de départ est 0 et à partir de l'état en entrée, le chiffre passe à l'état . L'état d'acceptation est (peut nécessiter une modification si ).a a - 1 q d ( 10 q + d ) mod a b mod a b > aa a−1 q d (10q+d)moda bmoda b>a
la source
C'est régulier. Travaillons d'abord en binaire, qui généralisera à n'importe quelle base> 1. Soit le langage en question. Pour a = 1, b = 0 on obtientM a , bMa,b
M 1 , 0 = { 1 , 10 , 11 , 100 , 101 , . . . }M1,0={1,10,11,100,101,...}
qui est toutes les chaînes sur sans zéros non significatifs, ce qui est régulier (construisez une expression régulière pour cela).{ 0 , 1 }{0,1}
Maintenant pour tout , avec b toujours 0, nous obtenons de en multipliant numériquement par a, c'est-à-dire en effectuant la transformation sur chaque chaîne de . Cela peut être fait au niveau du bit par une séquence de décalages et d'additions de qui dépendent des bits de la chaîne fixe . Les deux transformations dont nous avons besoin sont:a 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 → ¯ 2 x ˉ x → ˉ x 0x¯→2x¯¯¯¯¯ qui estx¯→x¯0
et
ˉ x → ¯ 2 x + xx¯→2x+x¯¯¯¯¯¯¯¯¯¯¯¯¯¯
La concaténation d'un 0 à droite préserve clairement la régularité. Il suffit donc de prouver que la deuxième opération conserve la régularité. Pour ce faire, un transducteur à états finis fonctionne sur de droite à gauche. C'est l'étape la plus difficile. Je suggère de le faire avec un programme de pseudo-code et de la mémoire auxiliaire finie (comme certaines variables de bits) plutôt que d'utiliser des états. Tant que la mémoire est d'une taille fixe sur toutes les entrées et que vous balayez strictement de droite à gauche, c'est une transduction à états finis et conserve la régularité.ˉ xx¯
Enfin, pour obtenir de nous devons ajouter numériquement à chaque chaîne, mais cela se fait avec un transducteur similaire qui dépend du nombre fixe b.M a , b M a , 0 b T bMa , b Ma , 0 b Tb
Pour faire de même dans n'importe quelle base, montrez en plus comment effectuer la multiplication par un seul chiffre dans cette base, en utilisant un transducteur qui dépend de d. Avec cela, nous pouvons multiplier par des nombres à plusieurs chiffres et rester dans les langues régulières. Ou, nous pouvons affiner cela en disant que la multiplication par est simplement une addition répétée.d S d dré Sré ré
Vous ne vouliez que des indices. Chacune de ces étapes dépend d'un théorème / technique assez complexe, donc prouver à ceux-ci d'obtenir une preuve complète sera le travail supplémentaire.
la source
Astuce n ° 1 : résolvez d'abord le problème le plus populaire "écrire un automate qui reconnaît les représentations décimales / binaires des nombres divisibles par 3" lorsque le bit le moins significatif apparaît en premier.
Question intermédiaire: prouver que est régulier.{ ¯ ax + b ∣ax + b ≥ 0x ∈ Z }{ ax + b¯¯¯¯¯¯¯¯¯¯¯¯¯¯∣ ax + b ≥ 0x ∈ Z }
Astuce # 2 : Le graphique de la fonction "modulo " est fini. Vous pouvez le calculer pour chaque dans qui est à la fois l'ensemble des chiffres et la langue de votre automate.( n ↦ 10 n + d ) a d { 0 , … , 9 }( n ↦ 10 n + d) une ré { 0 , … , 9 }
Astuce n ° 3 : maintenant, remplacez avec . Qu'est-ce que cela change? Essayez d'utiliser le fait que les langages réguliers sont stables par intersection au lieu de construire un automate ad-hoc .x ∈ Z x ∈ Nx ∈ Z x ∈ N
Astuce n ° 4 : supposons maintenant que un est un nombre premier ( de sorte que Z / un Z est un champ) et que nous sommes encore dans le cas où x ∈ Z . Nous utilisons maintenant une représentation où le premier bit est le bit le plus significatif . Pouvez-vous construire l'automate de la même manière?a Z/aZ x∈Z
Astuce # 5 : vous n'avez pas toujours besoin de construire un automate pour prouver qu'un langage est régulier. Comment pouvez-vous utiliser les résultats précédents pour prouver que M est régulier? (avec le bit le plus significatif en premier)M
la source
Je suis l'idée de @vonbrand:
Astuce 1:
Résolvez d'abord pour b = 0 . Vous pourriez utiliser le théorème de Myhill-Nerode .b=0
Astuce 2:
Résoudre le cas général, réutiliser l'automate induit par le cas .b = 0b=0
la source
La langue est régulière.
Astuce: éliminer les neuf
Idée de preuve
Pour a = 9 et b < 9 ,a=9 b<9
Pour gérer d'autres valeurs de a qui sont coprimes avec 10 ,a 10
Pour gérer les valeurs de a dont les seuls facteurs premiers sont 2 et 5 ,a 2 5
Pour généraliser à toutes les valeurs de a et b ,a b
Notez que nous utilisons la technique qui vous convient; les trois principales techniques élémentaires (expressions régulières, automates finis, propriétés de la théorie des ensembles) sont toutes représentées dans cette preuve.
Preuve détaillée
Soit a = 2 p 5 q a ' avec un ' premier avec 10 . Soit M ′ = { ¯ a ′a=2p5qa′ a′ 10 x + b ∣x∈Z∧a′x + b ≥ 0 } et M ″ = { ¯ 2 p 5 qM′={a′x+b¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯∣x∈Z∧a′x+b≥0} x + b ∣x∈Z∧2p5qx + b ≥ 0 } . Par arithmétique élémentaire, les nombres égaux à b modulo a sont exactement les nombres égaux à b modulo a ′ et à b modulo 2 p 5 q , donc M ∩ { ¯ x ∣ x ≥ b } = M ′ ∩ M ″ ∩ { ¯ x ∣ x ≥ b } . Étant donné que l'intersection des langues régulières est régulière, etM′′={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 } est régulier car c'est le complément d'un langage fini (donc régulier), si M ′ et M ″ sont également réguliers, alors M ∩ { ¯ x ∣ x ≥ b } est régulier; et M est donc régulier puisqu'il s'agit de l'union de cette langue avec un ensemble fini. Donc pour conclure la preuve il suffit de prouver que M ′ et M ″ sont réguliers.{x¯¯¯∣x≥b} M′ M′′ M∩{x¯¯¯∣x≥b} M M′ M′′
Commençons par M ″ , soit les nombres modulo 2 p 5 q . Les entiers dont l'expansion décimale est en M " sont caractérisés par leurs derniers m a x ( p , q ) chiffres, car changer les chiffres plus à gauche signifie ajouter un multiple de 10 m a x ( p , q ) qui est un multiple de 2 p 5 q . D'où 0 ∗ M ″ = ℵ ∗ F oùM′′ 2p5q M′′ max(p,q) 10max(p,q) 2p5q 0∗M′′=ℵ∗F ℵ est l'alphabet de tous les chiffres et F est un ensemble fini de mots de longueur m a x ( p , q ) , et M ″ = ( ℵ ∗ F ) ∩ ( ( ℵ ∖ { 0 } ) ℵ ∗ ) est un régulier Langue.ℵ F max(p,q) M′′=(ℵ∗F)∩((ℵ∖{0})ℵ∗)
Passons maintenant à M ′ , c'est-à-dire les nombres modulo a ′ où a ′ est coprime avec 10 . Si a ′ = 1 alors M ′ est l'ensemble des expansions décimales de tous les naturels, c'est-à-dire M ′ = { 0 } ∪ ( ( ℵ ∖ { 0 } ) ℵ ∗ ) , qui est une langue régulière. Nous supposons maintenant un ′ > 1 . Soit k = a ′ -M′ a′ a′ 10 a′=1 M′ M′={0}∪((ℵ∖{0})ℵ∗) a′>1 1 . Par le petit théorème de Fermat, 10 a ′ - 1 ≡ 1k=a′−1 moda ′ , c'est-à-dire que a ′ divise 10 k - 1 . Nous construisons un automate fini déterministe qui reconnaîtra 0 ∗ M ′ comme suit:10a′−1≡1moda′ a′ 10k−1 0∗M′
L'état ( i , u ) atteint par un mot ¯ x satisfait i ≡ | ¯ x |modk et u ≡ xmod10 k - 1 . Cela peut être prouvé par induction sur le mot, en suivant les transitions sur l'automate; les transitions sont calculées pour cela, en utilisant le fait que 10 k ≡ 1mod10 k - 1 . Ainsi l'automate reconnaît les expansions décimales (permettant les zéros initiaux) des nombres de la forme u + y 10 k avec u ≡ bmoda ′ ; depuis 10 k ≡ 1moda ' , l'automate reconnaît les expansions décimales des nombres égaux à b modulo a ' permettant des zéros initiaux, qui est 0 ∗ M ' . Cette langue s'est donc avérée régulière. Enfin, M ′ = ( 0 ∗ M ′ ) ∩ ( ( ℵ ∖ { 0 } ) ℵ ∗ ) est un langage régulier.
Pour généraliser aux bases autres que 10 , remplacer 2 et 5 ci-dessus par tous les facteurs premiers de la base.
Preuve formelle
À gauche comme exercice pour le lecteur, dans votre prouveur de théorème préféré.
la source