Ngôn ngữ của các giá trị của hàm affine


10

Viết để mở rộng thập phân của (không có đầu ). Đặt và là các số nguyên, với . Xem xét ngôn ngữ của bản mở rộng thập phân của các bội số của một cộng một hằng số:ˉ nn¯ nn0mộtabbmột>0a>0a

M = { ¯ mộtx + bxN}

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

MM thường xuyên? bối cảnh miễn phí?

(Tương phản với Ngôn ngữ của đồ thị của hàm affine )

Tôi nghĩ rằng điều này sẽ làm cho một câu hỏi bài tập về nhà tốt, vì vậy câu trả lời bắt đầu bằng một hoặc hai gợi ý và giải thích không chỉ cách giải câu hỏi mà còn làm thế nào để quyết định những kỹ thuật sử dụng sẽ được đánh giá cao.


Ngay bây giờ tôi nhận ra tôi đã trả lời một trường hợp cụ thể của nó, theo ý tưởng của @vonbrand. DFA chấp nhận biểu diễn thập phân của số tự nhiên chia hết cho 43
Hendrik

Câu trả lời:


9

aa1qd(10q+d)moda(10q+d)modabmodabmodab>ab>a


1
Rất đẹp - tốt hơn nhiều so với của tôi!
David Lewis

8

Nó là thường xuyên. Trước tiên chúng ta hãy làm việc trong hệ nhị phân, sẽ khái quát hóa cho bất kỳ cơ sở nào> 1. Đặt M a , bMa,b là ngôn ngữ được đề cập. Với a = 1, b = 0 chúng ta nhận được

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

đó là tất cả các chuỗi trên { 0 , 1 }{0,1} mà không có các số 0 đứng đầu, là số thường (tạo biểu thức chính quy cho nó).

Bây giờ đối với bất kỳ một , với b vẫn 0 chúng ta có M một , 0 từ M 1 , 0 bằng cách nhân số lượng của một, có nghĩa là, thực hiện việc chuyển đổi ˉ x¯ một x trên mỗi chuỗi của M một , 0 . Điều đó có thể được thực hiện theo từng bit bằng một chuỗi các dịch chuyển và bổ sung của x phụ thuộc vào các bit của chuỗi cố định ˉ a . Hai biến đổi chúng ta cần là:aMa,0M1,0x¯ax¯¯¯¯¯¯Ma,0xa¯

ˉ x ¯ 2 x ˉ x ˉ x 0x¯2x¯¯¯¯¯x¯x¯0

ˉ x ¯ 2 x + xx¯2x+x¯¯¯¯¯¯¯¯¯¯¯¯¯¯

Nối 0 ở bên phải bảo tồn rõ ràng sự đều đặn. Do đó, chúng tôi chỉ phải chứng minh rằng hoạt động thứ hai duy trì sự đều đặn. Cách để làm điều đó là với một bộ chuyển đổi trạng thái hữu hạn làm việc trên ˉ x từ phải sang trái. Đó là bước khó nhất. Tôi đề nghị làm điều đó với một chương trình mã giả và một số bộ nhớ phụ hữu hạn (như một số biến bit) thay vì sử dụng các trạng thái. Miễn là bộ nhớ có kích thước cố định trên tất cả các đầu vào và bạn quét nghiêm ngặt từ phải sang trái, đó là sự tải nạp trạng thái hữu hạn và duy trì tính đều đặn.x¯

Cuối cùng, để có được M a , b từ M a , 0 , chúng ta cần thêm số b vào từng chuỗi, nhưng điều đó được thực hiện với một bộ chuyển đổi tương tự T b phụ thuộc vào số b cố định.Ma,bMa,0bTb

Để làm tương tự trong bất kỳ cơ sở nào, hãy trình bày thêm cách thực hiện phép nhân với một chữ số d trong cơ sở đó, sử dụng bộ chuyển đổi S d phụ thuộc vào d. Cùng với đó, chúng ta có thể nhân với số có nhiều chữ số và vẫn còn trong các ngôn ngữ thông thường. Hoặc, chúng ta có thể giải thích điều này bằng cách nói rằng phép nhân với d chỉ là phép cộng lặp lại.dSdd

Bạn chỉ muốn gợi ý. Mỗi bước trong số đó phụ thuộc vào một định lý / kỹ thuật khá phức tạp, vì vậy việc chứng minh những bước đó để có được một bằng chứng hoàn chỉnh sẽ là công việc phụ.


FA của bạn không lấy ˉ x làm đầu vào, vì vậy tôi không thấy những gì bạn viết cho thấy ngôn ngữ trong tay là thường xuyên. Lưu ý rằng không phải mọi chương trình sử dụng bộ nhớ hữu hạn đều tương ứng với FA: điều quan trọng là chỉ có thể đi một lầntừ trái sang phải qua đầu vào, xem xét mọi ký hiệu đầu vào chính xác một lần. x¯
Raphael

@Raphael Bạn có thể đi từ phải sang trái nếu bạn thích, điều quan trọng là nhất quán. Tôi không thể tìm thấy một lỗ hổng trong bản phác thảo bằng chứng của David; việc gọi các bộ chuyển đổi là một chút ít hơn so với tôi hình dung, nhưng nó có vẻ hợp lệ.
Gilles 'SO- ngừng trở thành ác quỷ'

@Gilles: Trước hết, anh ta không giải thích làm thế nào để xen kẽ phép nhân bằng a và thêm b vào kết quả trong một lần ; ông thậm chí giảm nhân bởi một để "một chuỗi các thay đổi và bổ sung của x ". Mỗi ca làm việc và bổ sung đều ổn, nhưng làm thế nào để thực hiện trình tự? Thứ hai, và quan trọng hơn, ông cho thấy làm thế nào để xây dựng một bộ chuyển đổi mà tính ˉ x¯ một x + b ; điều đó không ngay lập tức cung cấp cho bạn một FA chấp nhận Mabax x¯ax+b¯¯¯¯¯¯¯¯¯¯¯¯¯¯ M. Ví dụ, nhân số là dễ dàng nhưng bao thanh toán là (được cho là) ​​thì không. Vì vậy, bạn cần ít nhất một đối số bổ sung.
Raphael

Tôi không xây dựng một FSA. Tôi bắt đầu với một tập hợp dễ dàng được hiển thị là chính quy ( M 1 , 0 ) và sau đó chuyển đổi tất cả các chuỗi trong đó bằng một chuỗi các thao tác hữu hạn, mỗi chuỗi đều duy trì tính đều đặn. Điều này đòi hỏi một số đường chuyền (đầu dò). Nhưng điều đó không sao, vì trình tự các bộ chuyển đổi và cấu trúc của mỗi bộ được cố định trước chỉ dựa trên ab . Mỗi đường chuyền (đầu dò) bảo toàn tính đều đặn, do đó không cần xen kẽ chúng trong một lượt. Có, không phải "tiểu học". Nhưng việc xây dựng một FSA trong một lần, với một lần vượt qua, sẽ vô cùng phức tạp. M1,0ab
David Lewis

1
@Raphael - vâng, điều đó rất mạnh mẽ. Trên thực tế, nhiều gia đình không thường xuyên cũng bị đóng cửa dưới các bộ chuyển đổi trạng thái hữu hạn. Và, bạn có thể sử dụng các bộ chuyển đổi làm cơ chế khử, nhận được toàn bộ lý thuyết về độ phức tạp "cấu trúc" của các ngôn ngữ không thông thường.
David Lewis

8

Gợi ý số 1 : trước tiên hãy giải quyết vấn đề phổ biến hơn "viết một máy tự động nhận ra các biểu diễn thập phân / nhị phân của các số chia hết cho 3" khi bit nhỏ nhất xuất hiện đầu tiên.

Câu hỏi Intermediate: chứng minh rằng { ¯ mộtx + bax + b 0x Z } là thường xuyên.{ax+b¯¯¯¯¯¯¯¯¯¯¯¯¯¯ax+b0xZ}

Gợi ý # 2 : Đồ thị của hàm ( n 10 n + d ) "modulo một " là hữu hạn. Bạn có thể tính toán cho mỗi d trong { 0 , Mạnh , 9 } , cả hai chữ số và ngôn ngữ của máy tự động của bạn.(n10n+d)ad{0,,9}

Gợi ý # 3 : Bây giờ, thay thế x Z với x N . Điều này thay đổi gì? Cố gắng sử dụng thực tế là các ngôn ngữ thông thường ổn định bằng giao lộ thay vì xây dựng một máy tự động đặc biệt .xZxN

Gợi ý # 4 : Bây giờ giả sử rằng một là một số nguyên tố (do đó Z / một Z là một lĩnh vực) và rằng chúng ta vẫn còn trong trường hợp x Z . Bây giờ chúng ta sử dụng một đại diện trong đó bit đầu tiên là bit đáng kể nhất . Bạn có thể xây dựng automaton theo cách tương tự?aZ/aZxZ

Gợi ý số 5 : bạn không phải luôn luôn xây dựng một máy tự động để chứng minh một ngôn ngữ là thường xuyên. Làm thế nào bạn có thể sử dụng kết quả trước đó để chứng minh rằng M là thường xuyên? (với bit đáng kể nhất đầu tiên)M


Hãy bình luận nếu bạn cảm thấy điều này không phù hợp.
jmad

Gợi ý số 1 là một bước lớn. Trong gợi ý # 4, điều quan trọng là nhận ra rằng một { 2 , 5 }một 10 là khác nhau. Đi qua Z cảm thấy như một đường vòng, bạn phải quản lý ký tự dấu hiệu: tại sao không ở lại N ? a{2,5}a10ZN
Gilles 'SO- ngừng trở thành ác quỷ'

@Gilles: Tôi muốn nói ¯ một x + b khi một x + b 0x Z , vì 3 x + 1234 là tẻ nhạt để nhận ra. ax+b¯¯¯¯¯¯¯¯¯¯¯¯¯¯ax+b0xZ3x+1234
jmad

@Gilles: Tôi nghĩ Hint # 1 quá tuyệt để được chiều chuộng. Bạn có thể đúng về Gợi ý số 4.
jmad

5

Tôi đang làm theo ý tưởng của @vonbrand:

Gợi ý 1:

Giải trước cho b = 0 . Bạn có thể sử dụng Định lý Myhill-Nerode .b=0

Chúng tôi xác định mối quan hệ sau ˉ xˉ y :x ymoda . Đây rõ ràng là một mối quan hệ tương đương. Hơn nữa nó là phải đồng dư, vì nếu chúng ta thêm một chữ số d chúng tôi nhận ˉ xˉ yx¯y¯:xymodad10 x + d 10 y + dmodmộtˉ x d ˉ y d. Cuối cùng, nó bão hòaL, vìLlà lớp tương đương[0]. Kể từcó một số hữu hạn các lớp chúng ta có bởi Myhill-Nerode lý rằng đó là bình thường. FSA liên quan là tối thiểu và cómộttrạng thái.x¯y¯10x+d10y+dmodax¯dy¯dLL[0]a

Gợi ý 2:

Giải quyết trường hợp chung, sử dụng lại máy tự động gây ra bởi trường hợp b = 0 .b=0

Chúng tôi biết rằng ngôn ngữ là thường xuyên cho b = 0 . Do đó chỉ đơn giản là lấy một nhà nước FSA M cho b = 0 ngôn ngữ. Bây giờ chúng ta xây dựng một FSA cho L . Giả sử bk chữ số. Sau đó, các nhánh của FSA giống như một cây 10 độ sâu k và chứa tất cả các đường dẫn đến các số có chữ số k . Tất cả các trạng thái có thể đạt được với một số không ở dạng a x + b đều từ chối chấp nhận. Cuối cùng, chúng tôi kết nối phần cây của FSA với máy tự động Mb=0aMb=0Lbkkkax+bM, theo phần còn lại của phép chia bởi a .a


Tôi hiểu kỹ thuật, nhưng không phải là chi tiết. Không phải Gợi ý 1 cũng nhấn vào trường hợp a = 1 sao? Hơn nữa, đối với mod 10 tôi sẽ mong đợi 10 trạng thái (không phải a )? a=1a
Hendrik ngày

3

Ngôn ngữ là thường xuyên.

Gợi ý: bỏ ra số tiền phạt


Ý tưởng bằng chứng

Với a = 9b < 9 ,a=9b<9

xây dựng một máy tự động với 9 trạng thái được dán nhãn từ 0 đến 8 . 0 là trạng thái ban đầu và trạng thái cuối cùng là b . Từ trạng thái s , trên chữ số d , chuyển sang trạng thái ( s + d )9080bsdm o d9 .(s+d)mod9

Để xử lý các giá trị khác của một số nguyên tố cùng với 10 ,a10

nhóm chữ số trong các gói để tìm một số k sao cho a chia 10 k - 1 (ví dụ: lấy k = 3 nếu a = 37999 = 27 × 37 ).ka10k1k=3a=37999=27×37

Để xử lý các giá trị của một yếu tố duy nhất là 25 ,a25

lưu ý rằng đó là tất cả về một số chữ số hữu hạn ở cuối.

Để khái quát cho tất cả các giá trị của ab ,ab

sử dụng thực tế là công đoàn và giao điểm của ngôn ngữ thường xuyên là thường xuyên, mà ngôn ngữ hữu hạn là bình thường, và rằng các bội số của một 1một 2 là chính xác bội số của cả hai khi một 1một 2 nguyên tố cùng nhau.a1a2a1a2

Lưu ý rằng chúng tôi sử dụng bất kỳ kỹ thuật nào là thuận tiện; ba kỹ thuật cơ bản chính (biểu thức chính quy, automata hữu hạn, thuộc tính lý thuyết tập hợp) đều được trình bày trong bằng chứng này.


Bằng chứng chi tiết

Đặt a = 2 p 5 q a với a cùng với 10 . Hãy M ' = { ¯ một 'a=2p5qaa10x + b |xZmột'x + b 0 } M " = { ¯ 2 p 5 qM={ax+b¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯xZax+b0}x + b |xZ2p5qx + b 0 } . Bởi số học tiểu học, các con số tương đương với b modulo một được chính xác những con số tương đương với b modulo một ' b modulo 2 p 5 q , vì vậy M { ¯ x | x b } = M 'M "{ ¯ xx b } . Vì giao điểm của các ngôn ngữ thông thường là thường xuyên vàM′′={2p5qx+b¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯xZ2p5qx+b0}babab2p5qM{x¯¯¯xb}=MM′′{x¯¯¯xb}{ ¯ x | x b } là bình thường bởi vì nó là phần bù của một hữu hạn (vì thế thường xuyên) ngôn ngữ, nếu M ' M " cũng là bình thường, sau đó M { ¯ x | x b } là thường xuyên; và M do đó là thường xuyên vì nó là sự kết hợp của ngôn ngữ đó với một tập hợp hữu hạn. Vì vậy, để kết luận chứng minh nó cũng đủ để chứng minh rằng M ' M " là bình thường.{x¯¯¯xb}MM′′M{x¯¯¯xb}MMM′′

Chúng ta hãy bắt đầu với M " , số tức là modulo 2 p 5 q . Các số nguyên có khai triển thập phân bằng M được đặc trưng bởi các chữ số m a x ( p , q ) cuối cùng của chúng , vì việc thay đổi các chữ số còn lại có nghĩa là thêm bội của 10 m a x ( p , q ) là bội số của 2 p 5 q . Do đó 0 * M " = * F nơiM′′2p5qM′′max(p,q)10max(p,q)2p5q0M′′=F là bảng chữ cái của tất cả các chữ số và F là một tập hợp hữu hạn các từ có độ dài m một x ( p , q ) , và M " = ( * F ) ( ( { 0 } ) * ) là thường xuyên ngôn ngữ.Fmax(p,q)M′′=(F)(({0}))

Bây giờ chúng ta chuyển sang M ' , tức là số modulo một ' nơi một ' là nguyên tố cùng nhau với 10 . Nếu một ' = 1 thì M ' là tập hợp các mở rộng thập phân của tất cả bẩm, tức là M ' = { 0 } ( ( { 0 } ) * ) , mà là một ngôn ngữ thông thường. Bây giờ chúng ta giả định một ' > 1 . Hãy k = một ' -Maa10a=1MM={0}(({0}))a>11 . Bởi định lý nhỏ Fermat, 10 một ' - 11k=a1modmột ' , mà là để nói rằng một ' chia 10 k - 1 . Chúng tôi xây dựng một automaton hữu hạn xác định rằng sẽ nhận ra 0 * M ' như sau:10a11modaa10k1

  • Các trạng thái là [ 0 , k - 1 ] × [ 0 , 10 k - 2 ] . Phần đầu tiên đại diện cho một vị trí chữ số và phần thứ hai đại diện cho một số modulo 10 k - 1 .
  • Trạng thái ban đầu là ( 0 , 0 ) .
  • Có một chuyển đổi được gắn nhãn d từ ( i , u ) sang ( j , v ) iff v d 10 i + umod10 k - 1 j i + 1modk .
  • Một nhà nước ( i , u ) là thức khi và chỉ khi u bmodmột ' (lưu ý rằng một ' chia 10 k - 1 ).

Trạng thái ( i , u ) đạt từ một từ ¯ x thỏa mãn i | ¯ x |modk bạn xmod10 k - 1 . Điều này có thể được chứng minh bằng cách cảm ứng qua từ, sau các chuyển đổi trên máy tự động; quá trình chuyển đổi được tính cho điều này, sử dụng thực tế là 10 k1mod10 k - 1 . Do đó, automaton nhận ra các mở rộng thập phân (cho phép các số 0 ban đầu) của các số có dạng u + y 10 k với u bmodmột ; từ 10 k1modmột ' , các automaton công nhận mở rộng thập phân của những con số tương đương với b modulo một ' phép zero ban đầu, đó là 0 * M ' . Ngôn ngữ này do đó được chứng minh thường xuyên. Cuối cùng, M ' = ( 0 * M ' ) ( ( { 0 } ) * ) là một ngôn ngữ thông thường.

Để khái quát hóa cho các cơ sở khác ngoài 10 , thay thế 25 ở trên bằng tất cả các yếu tố chính của cơ sở.

Bằng chứng chính thức

Còn lại như một bài tập cho người đọc, trong câu tục ngữ yêu thích của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.