Tulis untuk ekspansi desimal (tanpa awalan ). Biarkan dan menjadi bilangan bulat, dengan . Pertimbangkan bahasa ekspansi desimal kelipatan ditambah konstanta:0
Apakah biasa? bebas konteks?
(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.
formal-languages
context-free
regular-languages
integers
Gilles 'SANGAT berhenti menjadi jahat'
sumber
sumber
Jawaban:
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 > aSebuah a - 1 q d ( 10 q+ d) mod a b mod a b > a
sumber
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 dapatkanM.a , b
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 ˉ aSebuah M.a , 0 M.1 , 0 x¯→ a x¯¯¯¯¯¯ M.a , 0 x Sebuah¯
ˉ x → ˉ x 0x¯→ 2 x¯¯¯¯¯ yang merupakanx¯→ x¯0
dan
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.a , b M.a , 0 b Tb
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 dd Sd d
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.
sumber
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.{ ax + b¯¯¯¯¯¯¯¯¯¯¯¯¯¯∣ ax + b ≥ 0x ∈ Z }
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.( n ↦ 10 n + d) Sebuah d { 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 .x ∈ Z x ∈ N
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?Sebuah Z / a Z x ∈ Z
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.
sumber
Saya mengikuti gagasan @vonbrand:
Petunjuk 1:
Selesaikan dulu untuk . Anda mungkin menggunakan Teorema Myhill-Nerode .b = 0
Petunjuk 2:
Selesaikan kasus umum, gunakan kembali otomat yang disebabkan oleh kasus .b = 0
sumber
Bahasanya teratur.
Petunjuk: mengusir sembilan
Ide bukti
Untuk dan b < 9 ,a = 9 b < 9
Untuk menangani nilai-nilai lain dari yang coprime dengan 10 ,Sebuah 10
Untuk menangani nilai-nilai yang hanya faktor utama yang 2 dan 5 ,Sebuah 2 5
Untuk menggeneralisasi ke semua nilai dan b ,Sebuah b
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 ′a = 2hal5qSebuah′ Sebuah′ 10 dan M ″ = { ¯ 2 p 5 qM.′= { a′x + b¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯∣ x ∈ Z ∧ a′x + b ≥ 0 } . 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 " ∩ { ¯ x ∣ x ≥ b } . Karena persimpangan bahasa reguler adalah biasa, danM.′ ′= { 2hal5qx + b¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯∣x∈Z∧2p5qx+b≥0} b a b a′ b 2p5q M∩{x¯¯¯∣x≥b}=M′∩M′′∩{x¯¯¯∣x≥b} teratur karena merupakan pelengkap dari bahasa yang terbatas (maka teratur), jika M ′ dan M ″ juga teratur, maka M ∩ { ¯ x ∣ x ≥ 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¯¯¯∣x≥b} M′ M′′ M∩{x¯¯¯∣x≥b} M M′ M′′
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 manaM′′ 2p5q M′′ max(p,q) 10max(p,q) 2p5q 0∗M′′=ℵ∗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.ℵ F max(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 ′ -M′ a′ a′ 10 a′=1 M′ M′={0}∪((ℵ∖{0})ℵ∗) a′>1 . Dengan teorema kecil Fermat, 10 a ′ - 1 ≡ 1k=a′−1 , yang artinya a ′ membagi 10 k - 1 . Kami membuat otomat terbatas deterministik yang akan mengenali 0 ∗ M ′ sebagai berikut:10a′−1≡ 1modSebuah′ Sebuah′ 10k- 1 0∗M.′
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 k ≡ 1u ≡ xmod10k- 1 . Jadi automaton mengenali ekspansi desimal (memungkinkan nol awal) dari angka-angka dari bentuk u + y 10 k dengan u ≡ b10k≡ 1mod10k- 1 kamu + y10k ; sejak 10 k ≡ 1u ≡ bmodSebuah′ , 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.10k≡ 1modSebuah′ b Sebuah′ 0∗M.′ M.′= ( 0∗M.′) ∩ ( ( ℵ ∖ { 0 } ) ℵ∗)
Untuk menggeneralisasi ke pangkalan selain , ganti 2 dan 5 di atas dengan semua faktor utama pangkalan.10 2 5
Bukti formal
Ditinggalkan sebagai latihan untuk pembaca, dalam pepatah teorema favorit Anda.
sumber