Bahasa dari nilai-nilai fungsi affine


10

Tulis untuk ekspansi desimal (tanpa awalan ). Biarkan dan menjadi bilangan bulat, dengan . Pertimbangkan bahasa ekspansi desimal kelipatan ditambah konstanta:n¯n0aba>0a

M={ax+b¯xN}

Apakah biasa? bebas konteks?M

(Berbeda dengan Bahasa dari grafik fungsi affine )

Saya pikir ini akan menjadi pertanyaan pekerjaan rumah yang baik, jadi jawaban yang dimulai dengan satu atau dua petunjuk dan menjelaskan tidak hanya bagaimana memecahkan pertanyaan tetapi juga bagaimana memutuskan teknik apa yang akan digunakan akan dihargai.


Baru saja saya menyadari saya telah menjawab kasus tertentu, mengikuti gagasan @vonbrand. DFA yang menerima representasi desimal dari bilangan alami yang dapat dibagi oleh 43
Hendrik

Jawaban:


9

Sangat sederhana: Misalkan angka ditulis dalam desimal (basis lainnya ditangani dengan modifikasi sepele). Membangun DFA, dengan negara 0, 1, ..., . Status awal adalah 0, dan dari status pada input, digit menuju ke status . Status penerimaan adalah (mungkin perlu jika ).a - 1 q d ( 10 q + d ) mod a b mod a b > aaa1qd(10q+d)modabmodab>a


1
Sangat bagus - jauh lebih baik daripada milikku!
David Lewis

8

Itu biasa. Pertama mari kita bekerja dalam biner, yang akan digeneralisasi ke basis apa pun> 1. Biarkan menjadi bahasa yang dipertanyakan. Untuk a = 1, b = 0 kita dapatkanMa,b

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

yang semua string di atas tanpa memimpin nol, yang biasa (membangun ekspresi reguler untuk itu).{0,1}

Sekarang untuk setiap , dengan b masih 0 kita mendapatkan dari dengan mengalikan angka dengan, yaitu, melakukan transformasi pada setiap string . Itu bisa dilakukan bitwise dengan urutan shift dan penambahan yang bergantung pada bit string tetap . Dua transformasi yang kita butuhkan adalah:M a , 0 M 1 , 0 ˉ x¯ a x M a , 0 x ˉ aaMa,0M1,0x¯ax¯Ma,0xa¯

ˉ x ˉ x 0x¯2x¯ yang merupakanx¯x¯0

dan

x¯2x+x¯

Menggabungkan 0 di sebelah kanan jelas mempertahankan keteraturan. Dengan demikian, kita hanya perlu membuktikan bahwa operasi kedua mempertahankan keteraturan. Cara untuk melakukannya adalah dengan transduser berhingga bekerja pada dari kanan ke kiri. Itu langkah paling sulit. Saya sarankan melakukannya dengan program pseudo-code dan beberapa memori tambahan yang terbatas (seperti beberapa variabel bit) daripada menggunakan status. Selama memori berukuran tetap di atas semua input dan Anda memindai dengan ketat dari kanan ke kiri, ini adalah transduksi keadaan terbatas dan menjaga keteraturan.x¯

Akhirnya, untuk mendapatkan dari kita perlu menambahkan numerik ke setiap string, tetapi itu dilakukan dengan transduser yang serupa yang tergantung pada nomor tetap b. M a , 0 b T bM.Sebuah,bM.Sebuah,0bTb

Untuk melakukan hal yang sama di basis apa pun, perlihatkan juga cara melakukan perkalian dengan satu digit di basis itu, menggunakan transduser yang tergantung pada d. Dengan itu, kita dapat mengalikan angka multi-digit dan tetap menggunakan bahasa biasa. Atau, kita dapat menyelesaikan ini dengan mengatakan bahwa perkalian dengan hanyalah penambahan berulang.S d ddSdd

Anda hanya menginginkan petunjuk. Masing-masing langkah tergantung pada teorema / teknik yang cukup kompleks, jadi membuktikan bahwa mereka untuk mendapatkan bukti lengkap akan menjadi pekerjaan tambahan.


FA Anda tidak mendapatkan sebagai input, jadi saya tidak melihat bagaimana apa yang Anda tulis menunjukkan bahwa bahasa yang digunakan adalah bahasa biasa. Perhatikan bahwa tidak setiap program yang menggunakan memori terbatas berkorespondensi dengan FA: penting bahwa hanya bisa sekali dan dari kiri ke kanan atas input, mengingat setiap simbol input tepat sekali. x¯
Raphael

@ Raphael Anda dapat beralih dari kanan ke kiri jika suka, yang penting adalah konsisten. Saya tidak dapat menemukan cacat pada sketsa bukti David; meminta transduser sedikit kurang mendasar daripada yang saya bayangkan, tetapi terlihat valid.
Gilles 'SANGAT berhenti menjadi jahat'

@Gilles: Pertama-tama, dia tidak menjelaskan bagaimana interleave perkalian dengan dan menambahkan b ke hasil dalam satu pass ; dia bahkan mengurangi perkalian dengan a menjadi "urutan shift dan penambahan x ". Setiap perubahan dan penambahan baik-baik saja, tetapi bagaimana melakukan urutannya? Kedua, dan yang lebih penting, dia menunjukkan bagaimana membangun transduser yang menghitung ˉ x¯ a x + b ; itu tidak segera memberi Anda FA yang menerima MSebuahbSebuahx x¯Sebuahx+b¯ M.. Misalnya, mengalikan angka itu mudah tetapi anjak piutang (diduga) tidak. Jadi, Anda membutuhkan setidaknya argumen tambahan.
Raphael

Saya tidak membangun FSA. Saya mulai dengan satu set yang dengan mudah ditunjukkan menjadi teratur ( ) dan kemudian mengubah semua string di dalamnya dengan serangkaian operasi yang terbatas, yang masing-masing menjaga keteraturan. Ini membutuhkan sejumlah lintasan (transduser). Tapi tidak apa-apa, karena urutan transduser dan struktur masing-masing diperbaiki terlebih dahulu hanya berdasarkan a dan b . Setiap pass (transduser) menjaga keteraturan, jadi tidak perlu untuk menyisipkannya dalam satu pass. Ya, bukan "dasar". Tetapi membangun FSA dalam sekali jalan, dengan satu langkah, akan sangat rumit. M.1,0Sebuahb
David Lewis

1
@ Raphael - ya, itu sangat kuat. Bahkan, banyak keluarga tidak tetap juga ditutup di bawah transduser negara-terbatas. Dan, Anda dapat menggunakan transduser sebagai mekanisme reduksi, mendapatkan keseluruhan teori kompleksitas "struktural" dari bahasa non-reguler.
David Lewis

8

Petunjuk # 1 : pertama-tama selesaikan masalah yang lebih populer "tulis automaton yang mengenali representasi desimal / biner dari angka yang dapat dibagi 3" ketika bit paling tidak signifikan muncul terlebih dahulu.

Pertanyaan Menengah: membuktikan bahwa teratur.{Sebuahx+b¯Sebuahx+b0xZ}

Petunjuk # 2 : Grafik fungsi "modulo a " adalah terbatas. Anda dapat menghitungnya untuk setiap d dalam { 0 , , 9 } yang merupakan himpunan digit dan bahasa automaton Anda.(n10n+d)Sebuahd{0,...,9}

Petunjuk # 3 : sekarang, menggantikan dengan x N . Apa yang berubah ini? Cobalah untuk menggunakan fakta bahwa bahasa reguler stabil oleh persimpangan alih-alih membangun otomat ad-hoc .xZxN

Petunjuk # 4 : sekarang menganggap bahwa adalah bilangan prima (sehingga Z / a Z adalah bidang) dan bahwa kita masih dalam kasus di mana x Z . Kami sekarang menggunakan representasi di mana bit pertama adalah bit yang paling signifikan . Bisakah Anda membuat otomat dengan cara yang sama?SebuahZ/SebuahZxZ

Petunjuk # 5 : Anda tidak selalu harus membuat otomat untuk membuktikan bahwa bahasa itu teratur. Bagaimana Anda dapat menggunakan hasil sebelumnya untuk membuktikan bahwa adalah reguler? (dengan bit paling signifikan pertama)M.


Jangan ragu untuk berkomentar jika Anda merasa ini tidak pantas.
jmad

Petunjuk # 1 adalah langkah besar. Dalam petunjuk # 4, penting untuk menyadari bahwa dan sebuah 10 berbeda. Melalui Z terasa seperti jalan memutar, Anda harus mengelola karakter tanda: mengapa tidak tetap di N ? Sebuah{2,5}Sebuah10ZN
Gilles 'SO- stop being evil'

@Gilles: Saya ingin mengatakan ketika sebuah x + b 0 dan x Z , karena 3 x + 1234 membosankan untuk mengenali. Sebuahx+b¯Sebuahx+b0xZ3x+1234
jmad

@Gilles: Saya pikir Petunjuk # 1 terlalu keren untuk dimanjakan. Anda mungkin benar tentang Petunjuk # 4.
jmad

5

Saya mengikuti gagasan @vonbrand:

Petunjuk 1:

Selesaikan dulu untuk . Anda mungkin menggunakan Teorema Myhill-Nerode .b=0

Kami mendefinisikan hubungan berikut . Ini jelas merupakan hubungan ekivalensi. Lebih lanjut itu kongruen-kanan, karena jika kita menambahkan angka d kita mendapatkan ˉ xˉ yx¯y¯:xymodSebuahd. Akhirnya ia menjenuhkanL, karenaLadalah kelas ekivalensi[0]. Karenamemiliki jumlah kelas terbatas yang kita miliki oleh Teorema Myhill-Nerode bahwa itu adalah reguler. FSA terkait minimal dan memilikisebuahnegara.x¯y¯10x+d10y+dmodSebuahx¯dy¯dL.L.[0]Sebuah

Petunjuk 2:

Selesaikan kasus umum, gunakan kembali otomat yang disebabkan oleh kasus .b=0

Kita tahu bahasanya teratur untuk . Oleh karena itu hanya mengambil sebuah negara FSA M untuk b = 0 bahasa. Sekarang kita membangun FSA untuk L . Asumsikan b memiliki digit k . Kemudian cabang-cabang FSA seperti pohon 10-ary dari kedalaman k dan berisi semua jalur ke angka dengan digit k . Semua negara yang dapat dihubungi dengan angka yang tidak dalam bentuk a x + b menolak jika tidak menerima. Akhirnya kami menghubungkan bagian pohon FSA dengan otomat Mb=0SebuahM.b=0L.bkkkSebuahx+bM., menurut sisanya oleh divisi oleh .Sebuah


Saya mengerti tekniknya, tetapi tidak detailnya. Bukankah Petunjuk 1 juga membahas kasus ? Selain itu, untuk mod 10 saya harapkan 10 negara (bukan a )? Sebuah=1Sebuah
Hendrik Jan

3

Bahasanya teratur.

Petunjuk: mengusir sembilan


Ide bukti

Untuk dan b < 9 ,a=9b<9

buat otomat dengan status berlabel 0 hingga 8 . 0 adalah kondisi awal, dan kondisi terakhir adalah b . Dari status s , pada digit d , transisi ke status ( s + d )9080bsd .(s+d)mod9

Untuk menangani nilai-nilai lain dari yang coprime dengan 10 ,a10

digit kelompok dalam paket untuk menemukan beberapa sehingga sebuah membagi 10 k - 1 (misalnya take k = 3 jika suatu = 37 karena 999 = 27 × 37 ).ka10k1k=3a=37999=27×37

Untuk menangani nilai-nilai yang hanya faktor utama yang 2 dan 5 ,Sebuah25

perhatikan bahwa ini semua tentang jumlah digit yang terbatas di bagian akhir.

Untuk menggeneralisasi ke semua nilai dan b ,Sebuahb

menggunakan fakta bahwa serikat dan persimpangan bahasa reguler biasa, bahwa bahasa-bahasa yang terbatas teratur, dan bahwa kelipatan persis kelipatan baik ketika sebuah 1 dan sebuah 2 adalah coprime.Sebuah1Sebuah2Sebuah1Sebuah2

Perhatikan bahwa kami menggunakan teknik mana yang nyaman; tiga teknik dasar utama (ekspresi reguler, automata terbatas, set-theoretic properties) semuanya diwakili dalam bukti ini.


Bukti terperinci

Mari dengan sebuah ' coprime dengan 10 . Biarkan M = { ¯ a Sebuah=2hal5qSebuahSebuah10 dan M = { ¯ 2 p 5 qM.={Sebuahx+b¯xZSebuahx+b0} . Dengan aritmatika dasar, angka sama untuk b modulo suatu yang persis angka sama untuk b modulo sebuah ' dan b modulo 2 p 5 q , sehingga M { ¯ x | x b } = M 'M "{ ¯ xx b } . Karena persimpangan bahasa reguler adalah biasa, danM.={2hal5qx+b¯xZ2hal5qx+b0}bSebuahbSebuahb2hal5qM{x¯xb}=MM{x¯xb} teratur karena merupakan pelengkap dari bahasa yang terbatas (maka teratur), jika M dan M juga teratur, maka M { ¯ xx b } teratur; dan M karena itu teratur karena merupakan penyatuan bahasa itu dengan set yang terbatas. Jadi untuk menyimpulkan bukti itu sudah cukup untuk membuktikan bahwa M dan M adalah teratur.{x¯xb}MMM{x¯xb}MMM

Mari kita mulai dengan , yaitu angka modulo 2 p 5 q . Bilangan bulat yang ekspansi desimalnya dalam M ditandai dengan digit m a x ( p , q ) terakhir mereka , karena mengubah digit lebih jauh ke kiri berarti menambahkan kelipatan 10 m a x ( p , q ) yang merupakan kelipatan dari 2 p 5 q . Maka 0 M = F di manaM2p5qMmax(p,q)10max(p,q)2p5q0M=F adalah alfabet dari semua digit dan F adalah himpunan kata-kata dengan panjang terbatas m a x ( p , q ) , dan M = ( F ) ( ( { 0 } ) ) adalah regular bahasa.Fmax(p,q)M=(F)(({0}))

Kita sekarang beralih ke , yaitu angka modulo sebuah ' di mana sebuah ' adalah coprime dengan 10 . Jika suatu ' = 1 maka M ' adalah himpunan ekspansi desimal dari semua alami, yaitu M ' = { 0 } ( ( { 0 } ) * ) , yang merupakan bahasa reguler. Kita sekarang menganggap sebuah ' > 1 . Biarkan k = a -Maa10a=1MM={0}(({0}))a>1 . Dengan teorema kecil Fermat, 10 a - 11k=a1 , yang artinya a membagi 10 k - 1 . Kami membuat otomat terbatas deterministik yang akan mengenali 0 M sebagai berikut:10Sebuah-11modSebuahSebuah10k-10M.

  • Statusnya adalah . Bagian pertama merepresentasikan posisi digit dan bagian kedua merepresentasikan modulo angka 10 k - 1 .[0,k-1]×[0,10k-2]10k-1
  • Keadaan awal adalah .(0,0)
  • Ada transisi berlabel dari ( i , u ) ke ( j , v ) iff v d 10 i + ud(saya,kamu)(j,v) dan j i + 1vd10saya+kamumod10k-1 .jsaya+1modk
  • Keadaan adalah final jika u b(saya,kamu) (catatan bahwa sebuah ' membagi 10 k - 1 ).kamubmodSebuahSebuah10k-1

Keadaan dicapai dari kata ¯ x memenuhi i | ¯ x |(saya,kamu)x¯ dan u xsaya|x¯|modk . Ini dapat dibuktikan dengan induksi atas kata, mengikuti transisi pada automaton; transisi dihitung untuk ini, menggunakan fakta bahwa 10 k1kamuxmod10k-1 . Jadi automaton mengenali ekspansi desimal (memungkinkan nol awal) dari angka-angka dari bentuk u + y 10 k dengan u b10k1mod10k-1kamu+y10k ; sejak 10 k1kamubmodSebuah , otomaton mengenali ekspansi desimal dari angka yang sama dengan b modulo a ′ yang memungkinkan nol awal, yaitu 0 M . Bahasa ini dengan demikian terbukti teratur. Akhirnya, M = ( 0 M ) ( ( { 0 } ) ) adalah bahasa biasa.10k1modSebuahbSebuah0M.M.=(0M.)(({0}))

Untuk menggeneralisasi ke pangkalan selain , ganti 2 dan 5 di atas dengan semua faktor utama pangkalan.1025

Bukti formal

Ditinggalkan sebagai latihan untuk pembaca, dalam pepatah teorema favorit Anda.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.