Мова значень афінної функції


10

Запишіть для десяткового розширення (без провідних ). Нехай і - цілі числа, . Розглянемо мову десяткових розкладів кратних плюс константа:ˉ nn¯ nn0aabba>0a>0aa

M = { ¯ ax + bxN}

M={ax+b¯¯¯¯¯¯¯¯¯¯¯¯¯¯xN}

Є регулярними? без контексту?МM

(Контраст з мовою графіка афінної функції )

Я думаю, що це спричинить гарне домашнє завдання, тому відповіді, які починаються з підказки чи двох, пояснюють не лише те, як вирішити питання, а й як вирішити, які методи використовувати, були б вдячні.


Щойно я усвідомлюю, що відповів на конкретний випадок, дотримуючись ідеї @vonbrand. DFA, який приймає десяткові подання натурального числа, діленого на 43,
Гендрик,

Відповіді:


9

Дуже просто: Припустимо, числа записуються у десятковій формі (інші бази обробляються тривіальною модифікацією). Побудова ДКА, з стану 0, 1, ..., . Стартовий стан дорівнює 0, а зі стану на вводі цифра переходить у стан . прийняття є (може знадобитися налаштування, якщо ).a a - 1 q d ( 10 q + d ) mod a b mod a b > aaa1qd(10q+d)modabmodab>a


1
Дуже приємно - набагато краще, ніж моє!
Девід Льюїс

8

Він регулярний. Давайте спочатку попрацюємо у двійковому, що узагальнить будь-яку базу> 1. Нехай - мова, про яку йдеться. При a = 1, b = 0 отримаємоМ а , бMa,b

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

який є всіма рядками над без провідних нулів, що є регулярним (побудуйте для нього регулярний вираз).{ 0 , 1 }{0,1}

Тепер для будь-якого , з b ще 0, отримуємо від шляхом множення числово на a, тобто, виконуючи перетворення у кожному рядку . Це можна зробити побіжно шляхом послідовності зсувів та доповнень які залежать від бітів фіксованого рядка . Дві трансформації, які нам потрібні, це:М , 0 М 1 , 0 ˉ х¯ х М , 0 х ˉaMa,0M1,0x¯ax¯¯¯¯¯¯Ma,0xa¯

ˉ х ¯ 2 х ˉ х ˉ х 0x¯2x¯¯¯¯¯ що єx¯x¯0

і

ˉ х ¯ 2 х + хx¯2x+x¯¯¯¯¯¯¯¯¯¯¯¯¯¯

Об'єднання 0 праворуч явно зберігає регулярність. Таким чином, нам залишається лише довести, що друга операція зберігає регулярність. Це можна зробити за допомогою перетворювача з кінцевим станом, що працює на справа наліво. Це найважчий крок. Я пропоную це робити за допомогою програми псевдокоду та деякої кінцевої допоміжної пам'яті (як деякі бітні змінні), а не з використанням станів. Поки пам'ять має фіксований розмір на всіх входах і ви скануєте строго справа наліво, це перетворення в кінцевому стані і зберігає регулярність.ˉ xx¯

Нарешті, щоб отримати від нам потрібно чисельно додати до кожного рядка, але це робиться з аналогічним перетворювачем який залежить від фіксованого числа b.M a , b M a , 0 b T bMa,bMa,0bTb

Щоб зробити те саме в будь-якій базі, додатково покажіть, як виконати множення на у цій базі, використовуючи перетворювач який залежить від d. З цим ми можемо множитися на багатоцифрові числа і все ще залишатися в звичайних мовах. Або ми можемо уточнити це, сказавши, що множення на - це просто повторне додавання.d S d ddSdd

Ти хотів лише натяків. Кожен з цих кроків залежить від досить складної теореми / методики, тому доведення тих, хто отримає повний доказ, стане додатковою роботою.


Ваш FA не сприймає як вхід, тому я не бачу, як те, що ви пишете, показує, що мова, яку ви шукаєте, є регулярною. Зауважте, що не кожна програма, що використовує кінцеву пам'ять, відповідає FA: важливо, щоб вона могла пройти лише один раз і зліва направо над входом, враховуючи кожен символ введення рівно один раз. ˉ xx¯
Рафаель

@Raphael Ви можете ходити справа наліво, якщо вам подобається, що важливо, щоб це було послідовно. Я не можу знайти недолік у доказовому ескізі Девіда; виклик перетворювачів трохи менш елементарний, ніж я передбачав, але це виглядає дійсно.
Жил "ТАК - перестань бути злим"

@ Gilles: Перш за все, він не пояснює, як переплутати множення на і додавання до результату за один прохід ; він навіть зменшує множення на "послідовність зрушень і доповнень ". Кожна зміна та додавання - це добре, але як зробити послідовність? По-друге, і що ще важливіше, він показує, як побудувати перетворювач, який обчислює ; що це НЕ відразу дасть вам FA , який приймає . Наприклад, перемножувати числа легко, але факторинг (нібито) не є. Тож вам потрібен хоча б додатковий аргумент. б х ˉ х¯ х + Ь Мabax x¯ax+b¯¯¯¯¯¯¯¯¯¯¯¯¯¯ M
Рафаель

Я не будую FSA. Я починаю з набору, який легко відображається як регулярний ( ), а потім перетворюю всі рядки в ньому з кінцевою серії операцій, кожна з яких зберігає регулярність. Для цього потрібна кількість проходів (перетворювачів). Але це нормально, оскільки послідовність перетворювачів і структура кожного заздалегідь фіксуються виходячи лише з і . Кожен прохід (перетворювач) зберігає регулярність, тому немає необхідності переплутати їх за один прохід. Так, не "елементарно". Але побудувати FSA за один раз, за ​​один прохід, було б жахливо складно. М 1 , 0 а бM1,0ab
Девід Льюїс

1
@Raphael - так, це дуже потужно. Насправді багато нестандартних сімей також закриті під перетворювачами кінцевого стану. І ви можете використовувати перетворювачі як механізми скорочення, отримуючи цілу теорію "структурної" складності нерегулярних мов.
Девід Льюїс

8

Підказка №1 : спочатку вирішіть більш популярну задачу "написати автомат, який розпізнає десяткові / двійкові представлення чисел, ділених на 3", коли перший з'являється найменш значущий біт .

Проміжне запитання: доведіть, що є регулярним.{ ¯ ax + bax + b 0x Z }{ax+b¯¯¯¯¯¯¯¯¯¯¯¯¯¯ax+b0xZ}

Підказка №2 : Графік функції "modulo " є кінцевим. Ви можете обчислити його для кожного у що є набором цифр і мовою вашого автомата.( n 10 n + d ) a d { 0 , , 9 }(n10n+d)ad{0,,9}

Підказка # 3 : Тепер, замініть з . Що це змінює? Спробуйте використати той факт, що звичайні мови стабільні за допомогою перетину замість того, щоб будувати спеціальний автомат.x Z x NxZxN

Підказка # 4 : Припустимо тепер , що просте число (так що є полем) і що ми все ще в тому випадку , коли . Зараз ми використовуємо представлення, де перший біт є найбільш значущим бітом. Чи можете ви побудувати автомат таким же чином?a Z / a Z x ZaZ/aZxZ

Підказка №5 : вам не завжди потрібно будувати автомат, щоб довести, що мова є регулярною. Як можна використовувати попередні результати, щоб довести, що регулярний? (з найзначнішим бітом першим)МM


Не соромтесь коментувати, якщо відчуваєте, що це не годиться.
jmad

Підказка №1 - це великий крок. У підказці №4 важливо усвідомити, що і різні. Перейшовши через відчуваєте себе як об'їзд, вам потрібно керувати символом знака: чому б не залишитися в ? a { 2 , 5 } a 10 Z Na{2,5}a10ZN
Жил "ТАК - перестань бути злим"

@Gilles: Я хотів сказати коли та , тому що втомливо розпізнавати. ¯ a x + b ax+b0xZ3x+1234ax+b¯¯¯¯¯¯¯¯¯¯¯¯¯¯ax+b0xZ3x+1234
jmad

@Gilles: Я думаю, що підказка №1 занадто крута, щоб її зіпсувати. Ви, напевно, маєте рацію щодо підказки №4.
jmad

5

Я дотримуюся ідеї @vonbrand:

Підказка 1:

Розв’яжіть спочатку для . Ви можете використовувати теорему Міхілла-Нерода .b = 0b=0

Визначимо наступне відношення . Очевидно, це відношення еквівалентності. Крім того, це правильно-конгруентно, оскільки якщо ми додамо цифру то отримаємо . Нарешті, він насичує , оскільки - клас еквівалентності . Оскільки у кількості класів є теорема Міхілла-Нерода, то вона є регулярною. Асоційований FSA є мінімальним і має стан.ˉ x ˉ y :x yмодa d ˉ xˉ yx¯y¯:xymodad10 x + d 10 y + dмодаˉ x d ˉ y dLL[0]ax¯y¯10x+d10y+dmodax¯dy¯dLL[0]a

Підказка 2:

Вирішіть загальний випадок, повторно використовуйте автомати, викликані випадком .b = 0b=0

Ми знаємо, що мова є регулярною для . Тому просто взяти стан FSA для мови. Тепер ми будуємо FSA для . Припустимо, що має цифр. Тоді FSA розгалужується, як 10-річне дерево глибиною і містить усі шляхи до чисел з цифрами. Усі стани, до яких можна дійти з числом, не у формі , відкидають інакше, приймаючи. Нарешті, ми з'єднуємо частину дерева FSA з автоматом , відповідно до решти діленням на .b = 0 a M b = 0 L b k k k a x + b M ab=0aMb=0Lbkkkax+bMa


Я розумію техніку, але не деталі. Чи не підказка 1 також стосується випадку ? Крім того, для мод 10 , я б очікувати 10 держав (НЕ )? a = 1 aa=1a
Гендрик Ян

3

Мова регулярна.

Підказка: викиньте дев’ять


Доказ ідеї

Для і ,a = 9 b < 9a=9b<9

побудувати автомат з станів, позначених від до . - початковий стан, а один кінцевий стан - . З стану , на цифрі , перехід у стан .9 0 8 0 b s d ( s + d )9080bsdм о д9(s+d)mod9

Для обробки інших значень які є спільними з ,a 10a10

групи цифр в пакетах , щоб знайти такі , що ділить (наприклад , взяти , якщо , тому що ).k a 10 k - 1 k = 3 a = 37 999 = 27 × 37ka10k1k=3a=37999=27×37

Для обробки значень яких тільки прості чинники і ,a 2 5a25

зауважте, що мова йде про кінцеву кількість цифр наприкінці.

Щоб узагальнити всі значення і ,a bab

використовуйте той факт, що об'єднання та перетин регулярних мов є регулярними, що кінцеві мови є регулярними, і що множини є точно кратними обох, коли та є одночасними.a 1a 2 a 1 a 2a1a2a1a2

Зауважте, що ми використовуємо будь-яку техніку зручно; три основні елементарні прийоми (регулярні вирази, кінцеві автомати, задані теоретичні властивості) представлені у цьому доказі.


Детальний доказ

Нехай з coprime з . Нехай і . За елементарною арифметикою числа, рівні модулю є рівно числами, рівними modulo і modulo , тому . Оскільки перетин регулярних мов є регулярним, іa = 2 p 5 q a a 10 M = { ¯ a a=2p5qaa10x + bxZax + b 0 } M = { ¯ 2 p 5 qM={ax+b¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯xZax+b0}x + bxZ2p5qx + b 0 } b a b a b 2 p 5 q M { ¯ xM′′={2p5qx+b¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯xZ2p5qx+b0}babab2p5qx b } = M M { ¯ xx b } { ¯ xx b } M M M { ¯ xx M{x¯¯¯xb}=MM′′{x¯¯¯xb}{x¯¯¯xb}регулярна, тому що є доповненням кінцевої (отже, регулярної) мови, якщо і також регулярні, то є регулярним; і тому є регулярним, оскільки це об'єднання цієї мови з кінцевим набором. Отже, для завершення доказу достатньо довести, що і є регулярними.MM′′b } M M M M{x¯¯¯xb}MMM′′

Почнемо з , тобто чисел по модулю . Цілі числа, десяткове розширення яких знаходиться в , характеризуються останніми цифрами, оскільки зміна цифр надалі ліворуч означає додавання кратного який кратний . Звідси де - алфавіт усіх цифр і - кінцевий набір слів довжиною , а - звичайна мова.M 2 p 5 q M m a x ( p , q ) 10 m a x (M′′2p5qM′′max(p,q) p , q ) 2 p 5 q 0 M = FF m a x (p,q) M =( F)(({10max(p,q)2p5q0M′′=FFmax(p,q)0 } ) )M′′=(F)(({0}))

Тепер ми переходимо до , тобто числа по модулю де є співвідношенням з . Якщо то - це набір десяткових розширень усіх натуралів, тобто , що є a звичайна мова. Тепер ми припускаємо, . Нехай . За малою теоремою Ферма , що означає, що ділить . Ми будуємо детермінований кінцевий автомат, який розпізнає наступним чином:M a a 10 aMaa10 = 1 M M = { 0 } ( ( { 0 } ) ) a > 1 k = a - 1 10 a - 11a=1MM={0}(({0}))a>1k=a1модa a 10 k - 1 0 M 10a11modaa10k10M

  • Стани . Перша частина являє собою позицію цифри, а друга частина являє собою числовий модуль .[ 0 , k - 1 ] × [ 0 , 10 k - 2 ] 10 k - 1[0,k1]×[0,10k2]10k1
  • Початковий стан дорівнює .( 0 , 0 )(0,0)
  • Існує перехід, позначений від до iff і .d ( i , u ) ( j , v ) v d 10 i + ud(i,u)(j,v)мод10 к - 1 j i + 1vd10i+umod10k1модк
  • Стан є остаточним iff (зауважте, що ділить ).( i , u ) u bмодa a 10 k - 1

Стан досягнутий від слова задовольняє і . Це можна довести індукцією над словом, дотримуючись переходів на автоматі; для цього обчислюються переходи, використовуючи той факт, що . Таким чином, автомат розпізнає десяткові розширення (дозволяючи початкові нулі) чисел виду з ; оскільки , автомат розпізнає десяткові розширення чисел, рівних modulo дозволяючи початкові нулі, що є( i , u ) ¯ x i | ¯ x |модk u xмод10 к - 1 10 к1мод10 k - 1 u + y 10 k u bмодa 10 k1модa b a 0 M M = ( 0 M ) ( ( { 0 } ) ) . Таким чином, ця мова виявляється регулярною. Нарешті, є звичайною мовою.

Щоб узагальнити основи, відмінні від , замініть вище і усіма основними коефіцієнтами основи.10 2 5

Офіційне підтвердження

Залишилося як вправа для читача, у вашій улюбленій теоремі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.