Lý thuyết tính toán

Môn học Lý thuyết tính toán (Theory of Computation)

cung cấp những kiến thức cơ bản về :

 Các mô hình tính toán lý thuyết :

 Các máy truy cập ngẫu nhiên

 Các ôtômat hữu hạn trạng thái

 Ngôn ngữ hình thức vàvăn phạm

 Lý thuyết độ phức tạp tính toán

 Máy Turing và khái niệm tính được

 Các hàm đệ quy

 Các khái niệm về

pdf10 trang | Chia sẻ: Mr Hưng | Lượt xem: 1429 | Lượt tải: 0download
Nội dung tài liệu Lý thuyết tính toán, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
1Lý thuyết tính toán (Theory of Computation) PGS.TS. Phan Huy Khánh khanhph@vnn.vn Chương 1 Mở đầu 2/56 Chào mọi người ! Bonjour Tout le Monde ! Hello Everyone! 他 ﺾ 好 ! Привет Kаждый ! 3/56 Mục đích môn học Môn học Lý thuyết tính toán (Theory of Computation) cung cấp những kiến thức cơ bản về :  Các mô hình tính toán lý thuyết :  Các máy truy cập ngẫu nhiên  Các ôtômat hữu hạn trạng thái  Ngôn ngữ hình thức và văn phạm  Lý thuyết độ phức tạp tính toán  Máy Turing và khái niệm tính được  Các hàm đệ quy  Các khái niệm về bài toán, thuật toán, tính giải được, tính quyết định... 4/56 Kiến thức yêu cầu  Môn học yêu cầu một số kiến thức tiên quyết :  Tin học đại cương  Toán rời rạc  Cấu trúc dữ liệu và giải thuật  Sinh viên nắm được :  Các mô hình tính toán tổng quát  Các khái niệm cơ bản về độ phức tạp tính toán, phương pháp chứng minh hình thức  Có khả năng minh hoạ hoạt động của các mô hình đó bằng thuật toán, chương trình 5/56 Tài liệu tham khảo  Giáo trình PPT “Lý thuyết Tính toán”   www.cs.berkeley.edu/~vandam/CS172/  Keywords to findout on internet (Google):  Computation | Computing Theory  Computability | Decidability  Formal Language | Automata Theory  Set | Graph Theory 6/56 Đánh giá kết quả học tập  Yêu cầu :  Hiểu nội dung trình bày trên lớp  Thực hiện các bài tập về nhà  Khả năng thực hành  Tinh thần thái độ và năng lực học tập  Nghe giảng, ghi chép  Trả lời và đặt câu hỏi  Tham khảo tài liệu, truy cập internet  Tham gia học nhóm, tập thảo luận và thuyết trình   Kiểm tra cuối kỳ :  Thi viết (60 phút) 27/56 Nội dung môn học Chương 1 Mở đầu : cơ sở của môn học Chương 2 Ôtômat hữu hạn Chương 3 Văn phạm và ôtômat đẩy xuống Chương 4 Máy Turing Chương 5 Hàm đệ quy Chương 6 Máy RAM Chương 7 Lý thuyết độ phức tạp tính toán 8/56 Đâu là giới hạn của Tin học ?  Nghiên cứu về bài toán (problem) :  Lớp các bài toán giải được (resolvability)  Lời giải, hay thuật toán, để giải bài toán  Lớp các bài toán không giải được (và sẽ không bao giờ giải được, dù với sự tiến bộ của công nghệ thông tin trong tương lai)  Nghiên cứu lý thuyết cách giải các bài toán  Mô hình tính toán ?  Độ phức tạp tính toán ?  Tính quyết định 9/56 Đâu là giới hạn của Tin học ?  Giới hạn của Vật lý :  Không tồn tại chuyển động vĩnh cửu vì : Mâu thuẫn với các định luật về nhiệt động lực học Chuyển động vĩnh cửu (Perpetual Motion) là chuyển động không ngừng, không cần tiêu tốn năng lượng 10/56 Những chủ đề chính của Tin học lý thuyết  Nghiên cứu các mô hình tính toán :  Các ngôn ngữ hình thức (Formal Languages)  Các ôtômat hữu hạn (Finite Automaton)  Máy Turing (Turing Machine)  Các hàm đệ quy (Recursive Functions)  Máy RAM (Random Access Memory Machine)  Độ phức tạp tính toán (Computational Complexity)  Mật mã học (Cryptology)  Và các hướng nghiên cứu mới trong lý thuyết tính toán  Mối quan hệ giữa các mô hình tính toán khác nhau  Cơ sở để thiết kế MTĐT (phần cứng) và thuật toán (phần mềm) trong hiện tại và tương lai 11/56 Chương mở đầu : cơ sở của môn học  Một số kiến thức Toán học cơ sở  Bảng chữ và câu  Khái niệm ngôn ngữ  Máy trừu tượng  Vấn đề biểu diễn ngôn ngữ 12/56 Một số kiến thức Toán học cơ sở  Lôgích học  Tập hợp, quan hệ  Ánh xạ và hàm  Tính đếm được của các tập hợp vô hạn  Đồ thị và cây  Phép chứng minh quy nạp  Các cấu trúc rời rạc 313/56 Bảng chữ và câu  Bảng chữ (alphabet) :  là một tập hữu hạn các ký tự (characters), hay ký tượng/ ký hiệu (symbol), ký hiệu bởi chữ cái Hy lạp   Kích thước của bảng chữ là số phần tử của bảng chữ đó, ký hiệu ||, hay Card() (Cardinality)  Ví dụ một số bảng chữ  : { # } | = 1 { 0, 1 } || = 2 { , , ,  } || = 4 {0, 1, 2, ... , 9} Chữ số thập phân, || = 10 {I, V, X, L, C, D, M} Chữ số La Mã {aA, bB, cC, ... , zZ} Chữ cái La tinh {, , , ... , } chữ cái Hi Lạp Bảng mã ASCII Các nét viết chữ Hán 14/56 Câu trên bảng chữ   Cho trước một bảng chữ  nào đó  Một câu (phrase, word), hay xâu (string), trên  :  là một dãy hữu hạn các phần tử của , ký hiệu bởi w (hay x, y, u, v...)  Độ dài của một câu là số ký tự có mặt trong câu, ký hiệu là |w| hay length(w)  Độ dài câu là hữu hạn, nhưng không hạn chế là có bao nhiêu ký tự  Một câu có thể có từ 0 đến n ký tự tuỳ ý  Câu có độ dài bằng 0 được gọi là câu rỗng (empty word), ký hiệu , hoặc e, hoặc  hoặc  15/56 Ví dụ về câu trên bảng chữ   Ví dụ Bảng chữ  Câu trên  { 0, 1 } , 0, 1, 00, 01, 10, 11, 100... { a....z } a, ab, zt, computer { 0, ..., 7, , , ,  } 432, 1234,  ASCII Một chương trình C, Pascal, Java, VB...  Cho một câu w có có |w|=n, người ta có thể trích ra từ w một ký tự nào đó có vị trí xác định trong phạm vi 1..n  Ví dụ câu w=aaabbaabbba có |w|=11, có thể trích ra các ký tự :  w(1) = a, ..., w(4) = b, ..., w(11) = a 16/56 Phép ghép tiếp các câu  Cho hai câu u và v trên   Phép ghép tiếp (Concatenation) của u và v là câu w = uv  Nghĩa là câu w gồm hai phần : u đgl là tiền tố (prefix)  rồi đến v là hậu tố (postfix) của w  Trường hợp câu w = xuy là ghép tiếp của ba câu x, u, y, u đgl trung tố (infix) của w  Người ta còn gọi câu rỗng  là câu đơn vị vì có w = w = w với w là một câu bất kỳ trên  Returning 17/56 Các phép toán khác trên xâu  Cho các câu w trên   Phép Đảo ngược (Reversion) một câu w, ký hiệu wR :  Là câu w được viết theo thứ tự ngược lại  Rõ ràng R =   wR = w đgl câu đối xứng : OMO, akitOMOtika...  Phép Lũy thừa (power) xâu  wn = www (n lần)  w0 =  với mọi w Quy ước chỉ định một câu (denotation) ỉ ị i 18/56 Khái niệm ngôn ngữ  Một ngôn ngữ hình thức (nói gọn ngôn ngữ) :  là tập hợp các câu được xây dựng trên cùng một bảng chữ đã cho   Ví dụ :  * là ngôn ngữ gồm tập tất cả các xâu trên bảng chữ  kể cả xâu rỗng  + là ngôn ngữ gồm tập tất cả các xâu trên bảng chữ  KHÔNG CÓ xâu rỗng  + = * -    là ngôn ngữ trống (tập trống)  Ví dụ  L1 = {a, ab, abb, bba, bbb} là ngôn ngữ hữu hạn trên {a, b}  L2 = {(ab)n | n > 0} là ngôn ngữ vô hạn trên {a, b} Chú ý {}   Chú ý : Người ta dùng phép “hình thức” (Fomal) để đối lập với “tự nhiên (Natural) i t ì t l i l i t i l t r 419/56 Máy trừu tượng (machine)  Mô hình IPO : nhận dữ liệu vào (data) và cho kết quả ra (result)  Hai cách nhìn :  Cách nhìn chức năng (functional look)  Cách nhìn cấu trúc (structural look)  Phân biệt các kiểu máy trừu tượng (machine type) theo bản chất của kết quả tính toán Máy Dữ liệu vào Dữ liệu ra 20/56 Chức năng đoán nhận câu Máy đoán nhận câu :  Giả sử dữ liệu vào w*, kết quả ra r{0, 1}, hay {False, True }  Tập hợp câu vào w đgl ngôn ngữ (language)  Có ba khả năng cho kết quả : 1. True hoặc False 2. Một kết quả khác 3. Không cho kết quả nào  Hai tập hợp câu vào ứng với hai khả năng đầu là bù nhau nếu máy cho kết quả cho mọi dữ liệu vào 21/56 Chức năng tính toán Máy tính toán (computation machine)  Giả sử dữ liệu vào w*, kết quả ra là một câu r trên một bảng chữ  nào đó  Khi đó, máy thực hiện tính hàm f từ * vào * : f : *  * Nghĩa là w  *, f(w)  *  Hàm f được gọi là hàm toàn phần (partial function) nếu với mọi câu vào w*, máy đều cho kết quả f(w)*  Người ta cũng nói kiểu máy đoán nhận chỉ là trường hợp đặc biệt của kiểu máy tính 22/56 Cách nhìn cấu trúc (structural look) Máy được xác định bởi một tập hữu hạn các phép toán Mỗi phép toán mô tả một phần cấu trúc của máy Phép toán sơ cấp (elementary operation) là phép toán nhỏ nhất (không chia cắt nhỏ hơn) Máy thực hiện (execution) mỗi phép toán trong một khoảng thời gian hữu hạn và xác định Chương trình (program) là tập hợp các phép toán sơ cấp để giải một bài toán nào đó Một tính toán (computation) là việc thực hiện lần lượt các phép toán sơ cấp theo một thứ tự xác định trước 23/56 Mô hình tính toán  Định nghĩa các lớp máy có cùng nguyên lý hoạt động  Thay đổi chương trình để giải bài toán trên cùng một máy mà không thay đổi máy giải  Mô hình tính toán (computation model), ký hiệu T là sự mô tả :  tất cả các phép toán sơ cấp  những đối tượng nào có thể tác động phép toán  cách thực hiện chương trình trên máy  Một trường hợp riêng (instance) của mô hình là máy cụ thể Mô hình + Chương trình = Máy  Mô hình tính toán T được gọi là một Tmáy 24/56 Một số thuật ngữ  Làm sao để có thể biết :  Lớp ngôn ngữ đoán nhận được (recognized), hay Tnhận biết được ?  Lớp các hàm tính được (computable) hay Ttính được ?  Lớp các ngôn ngữ liệt kê được (enumerable) hay Tliệt kê được ?  So sánh hai mô hình : T1 mạnh hơn T2 khi : Nếu T2 nhận biết được (tính được, liệt kê được) thì T1 cũng nhận biết được (tính được, liệt kê được)  T1 và T2 tương đương (equivalent) nếu T1 mạnh hơn T2 và ngược lại  T1 và T2 là không thể so sánh với nhau được nếu không tồn tại mô hình nào ít ra đủ mạnh hơn mô hình kia 525/56 Khái niệm bài toán (problem)  Một bài toán là :  Mô tả cách biểu diễn (hữu hạn) các phần tử của một tập hợp hữu hạn hay vô hạn đếm được  Một phát biểu liên quan đến các phần tử của tập hợp này  Kết quả có thể đúng, hoặc sai, tùy việc chọn phần tử  Bài toán trong Tin học lý thuyết :  Khác với khái niệm bài toán thông thường trong Toán học  Khác với bài toán hiểu theo nghĩa thông dụng 26/56 Một số ví dụ bài toán (1) Bài toán 1 :  Dữ liệu: Một số nguyên viết trong hệ 10  Câu hỏi : Số nguyên đã cho có là số nguyên tố hay không ? Bài toán 2 :  Dữ liệu : Một số nguyên viết trong hệ 10  Câu hỏi : Số nguyên này được viết dưới dạng tổng của 4 số bình phương ? Bài toán 3 :  Dữ liệu : Một số nguyên viết dưới dạng tích của các số hạng trong hệ 10  Câu hỏi : Số nguyên đã cho có là số nguyên tố hay không ? Bài toán 4 :  Dữ liệu : Một đồ thị hữu hạn G được biểu diễn bởi một danh sách các đỉnh và các cung, mỗi đỉnh được biểu diễn bởi một số nguyên trong hệ 10  Câu hỏi : Có tồn tại đường đi Hamilton (đi qua hết tất cả các đỉnh của đồ thị, mỗi đỉnh đi qua đúng một lần) trong đồ thị đã cho không ? 27/56 Một số ví dụ bài toán (2) Bài toán 5 :  Dữ liệu : Một biểu thức chính quy (regular expression) được xây dựng trên một bảng chữ  (là một biểu thức nhận được từ các câu w* bởi các phép hoặc, phép ghép tiếp, phép * và lấy bù)  Câu hỏi : Có phải biểu thức đã cho chỉ định ngôn ngữ trống (empty language) ? Bài toán 3n+1 (bài toán dừng) : chưa có câu trả lời về tính dừng function threen(n: integer): integer;{ recursive } begin if (n = 1) then 1 else if odd(n then threen(3*n+1) else threen(n div 2); end; 28/56 Bài toán tương ứng Post (Post’s correspondence problem) Dữ liệu : Một dãy hữu hạn các cặp câu (u1, v1), (u2, v2)..., (uk, vk) Câu hỏi : Tồn tại hay không một dãy chỉ số i1 , i2 ,...in sao cho thoả mãn ui1 ui2... uin = vi1 vi2... vin ? Ví dụ : cho * = {a, b, c } Và dãy các cặp câu : {(ab, aba), (ab, ba), (bab, ba), (ab, bab) } Cho câu : babababab Tồn tại dãy chỉ số {3 , 2, 2, 4} sao cho thoả mãn : bab.ab.ab.ab = ba.ba.ba.bab 29/56 Một số khái niệm khác  Kết hợp bài toán P với ngôn ngữ đặc trưng (characteristic language) LP* Ngôn ngữ LP = { w D * |  lời giải f(w) = true }  Bài toán ngược CP nhận được từ P bằng cách :  giữ nguyên cách biểu diễn các dữ liệu  đặt ngược lại câu hỏi Ngôn ngữ LCP = { w D * | Không  lời giải, hay f(w) = false } Ví dụ : Bài toán 1’ :  Dữ liệu : Cho một số nguyên viết trong hệ 10  Câu hỏi : Số nguyên này không phải là một số nguyên tố ?  Máy giải (solve) bài toán P nếu và chỉ nếu :   w *, máy cho phép xác định, trong một khoảng thời gian hữu hạn, nếu w LP hay w LCP  Phân lớp các bài toán tùy theo độ phức tạp (complexity)  Một bài toán là tầm thường (trivial) nếu LP =  hoặc nếu LCP =  * LP 30/56 Các phép toán trên ngôn ngữ  Ngôn ngữ là một tập hợp do đó có thể áp dụng các phép toán trên tập hợp :  Đối với các phần tử :  Đối với ngôn ngữ :  Cho L1, L2 và L là các ngôn ngữ, các phép toán:  Phép hợp L1  L2 = {w | w  L1 hoặc w  L2}  Phép giao L1  L2 = {w | w  L1 và w  L2}  Phép hiệu L1 – L2 = {w | w  L1 và w  L2}  Phép bù  L’ = {w | w  L} hoặc L’ = * - L          L2L1 L 631/56 Các phép toán trên ngôn ngữ  Phép ghép nối :  L1L2 = = {w | w = uv, u  L1 và v  L2}  Phép nghịch đảo :  LR = {w | wR  L}  Phép lũy thừa :  Ln = LLL (n lần)  Li = LLi-1 = Li-1L với i>0  L0 = {}  Ví dụ :  Cho L = { tic, tac, toe } khi đó :  L2 = LL = { tictic, tictac, tictoe, tactic, tactac, tactoe, toetic, toetac, toetoe } Ghép nối L1 có m câu, và L2 có n câu, được ngng có ??? câum.n Là bản số của tích ĐêCac (Cartesian Product) í i 32/56 Các phép toán trên ngôn ngữ  Phép bao đóng (closure) :  L* = L0  L1   Ln  =  Phép bao đóng dương :  L+ = L1  L2   Ln  =  Nhận xét :  L+ = LL* = L*L  L* = L+  {  }  Ví dụ :  Cho L = { tic, tac, toe } khi đó :  L* = { , tic, tac, toe, tictic, tictac, tictoe, tactic, tactac, tactoe, toetic, toetac, toetoe, tictictic, tictictac, ... }    0i iL   1i iL Khái niệm hữu hạn, vô hạn được hiểu như thế nào ? •Liên quan đến các phần tử của một tập hợp : khái niệm đếm (liệt kê) được •Người ta đặt song ánh các phần tử với số tự nhiên  •hữu hạn ? tập hợp có n phần tử, nK<, bị chặn trên •vô hạn ? tập hợp có n phần tử tuỳ ý, không bị chặn trên i i , i t i t t t : i i li t i t t t i t i t t , , ị t t t t , ị t 33/56 Ví dụ khác về ngôn ngữ  Cho  = {0..9}  { ., +, - }, xay dựng các lớp số :  Mọi câu trên là ghép tuỳ ý các chữ số 0..9, ., +, - tuy nhiên chỉ ghi nhận (xét) những câu là số có nghĩa  Số tự nhiên  = {0, 1, 2, ..., i, i+1, ... } i0,    Số nguyên  = { ..., -3, -2, -1, 0, 1, 2, ... } |i|0,    Số hữu tỷ  = { ..., -2/2, -2/3, -1/2, 0, 1/2, 2/2, ... } |m/n|0,    Số vô tỷ  = { ..., ..., ... } =    { ..., ..., ... } 34/56 Các ngôn ngữ chính quy (NNCQ)   tập hợp các ngôn ngữ chính quy (Regular Languages) trên  :  Được định nghĩa dựa trên các ngôn ngữ sơ cấp và các phép toán hội ( : “nhặt ra”), ghép và đóng lặp *  Là tập hợp nhỏ nhất (chứa ít phần tử nhất) các ngôn ngữ thõa mãn các điều kiện sau : 1.   , {} 2. { a }   với a   3. Nếu A, B  , thì AB, A.B và A*    Rõ ràng  là tập hợp bé nhất do được xây dựng từ các tập sơ cấp , {  } và { a } bởi các phép hội, ghép và bao đóng 35/56 Ví dụ xây dựng tập NNCQ   Cho ={}, những phần tử-ngôn ngữ có ngay (tự có) :    , {}, {}   Những ngôn ngữ L được xây dựng kiểu quy nạp (đệ quy) :  Luật : Nếu A, B  , thì AB, A.B và A*    A={}, B= {}, AB={, }, A.B={}={}, B* = {, , , , ... n, ... }, n bất kỳ n>0  Vậy sau bước này ta có : , {}, {}, {}, ..., {, , , , ... n, ... }  Và cứ thế tiếp tục xây dựng  36/56 (1) Biểu thức chính quy (BTCQ)  Người ta sử dụng các biểu thức chính quy (Regular Expressions) để biểu diễn các ngôn ngữ chính qui trên   Qui tắc xây dựng BTCQ trên  là các biểu thức được tạo thành theo các bước quy nạp như sau : 1. ,  và a, với mọi phần tử a của  đều là những BTCQ 2. Nếu  và  là hai BTCQ , thì (), (), ()* cũng là những BTCQ Chú ý 1 : Khi viết một BTCQ, có thể bỏ các dấu ngoặc đơn theo mức ưu tiên giảm dần : chẳng hạn viết a* thay vì (a)* Chú ý 2 : Có thể viết a+b thay vì viết ab Ví dụ, biểu thức ((0 (1*)) + 0) có thể viết 01*+ 0 i i , i i i ì i ì i í , i i 737/56 (2) Biểu diễn ngôn ngữ bởi biểu thức chính qui  Ngôn ngữ L() được biểu diễn (hay được chỉ định) bởi BTCQ  theo các bước quy nạp như sau : 1. L() = , L() = {  }, L(a) = { a } cho a  2. L((  )) = L()  L() 3. L(()) = L()L() 4. L(()*) = L()*  Từ (1) và (2) ta có tính chất sau : Một ngôn ngữ là chính qui nếu và chỉ nếu (nễu, khĩ ) ngôn ngữ đó được chỉ định bởi một biểu thức chính qui  Nhận xét :  Các BTCQ cũng tạo thành một ngôn ngữ vì chúng là những xâu ký tự trên bảng chữ  Đọc pxi 38/56 Bao đóng của bảng chữ   Cho bảng chữ , khi đó, L = { a | a   } là một NNCQ  Bao đóng của L là L* = * là một NNCQ có vô hạn câu  Có thể liệt kê hết (đếm được) tất cả các câu của *  Ví dụ * = (a + b)*  a b aa ab ba bb aaa aab aba abb baa bab bba bbb ...... ...... 1 2 3 4 5 6 7 8 ......  Cho  = {a, b} thì ta đã có một thứ tự tiền định a đứng trước b  Cho hai câu w1, w2 khi đó w1 đứng trước w2 khĩ |w1|| w2| , ì i ị i , i ĩ 39/56 Nghịch đảo câu xong thì cũng chính nó ! Đọc xuôi, đọc ngược như nhau Đứng bên tê, ngó bên ni, cũng rứa Đứng bên ni, ngó bên tê, cũng rứa Đi qua, đi lai, y chang ! Hai ký tự cách đều đầu và cuối câu y chang ! ị t ì í ! i, t , i, r i, t , r i , i l i, ! i t i ! Một số ví dụ _ 1  Cho bảng chữ  = { a, b }, có thể xây dựng được một số NNCQ trên  như sau : L1 = {, a, aa, aab } L1 có 4 câu L2 = { w  * | |w|  8 } L2 gồm các câu có độ dài  8 L3 = { w  * | |w| là một số lẻ } L3 gồm các câu có độ dài lẻ L4 = { w  * | na(w) = nb(w) } = {, ab, ba, aabb, abab, baab, ... } L4 gồm các câu có số chữ a đúng bằng số chữ b L5 = { w  * | w = wR } = {, aa, bb, aba, bab, abba, baab, ... } L5 gồm các câu đối xứng (palindrome) Có thể có thêm các nhận xét gì về các câu đối xúng ? t t t ì i 40/56 Ví dụ về một thuật toán kiểm tra câu đối xứng Func PalinCheck(w: string): bool OK = true; i=1, l=len(w) if l>0 then while OK and i<=l and w(i)=w(l) do i++; l-- Return OK w1 w2 wl-1 wl... i++ l-- 41/56 Một số ví dụ _ 2  Cho bảng chữ , a  , w  * và L  *  Khi đó :  ak = aa ... a k chữ a liên tiếp  wk = ww ... w ghép liên tiếp k câu w  k =  ...  = { w  * | |w| = k }  Lk = LL ... L ngôn ngữ gồm các câu là ghép k câu tuỳ ý của L  Trường hợp đặc biệt k = 0 :  a0 = w0 =   0 = L0 = {  }  Chú ý {  }   :  {  } có một câu là   còn  không có câu nào ! 42/56 Một số tính chất  Với quy ước L() là NNCQ đbdb BTCQ   Khi đó :  L() = L() khi và chỉ khi  =  Nghĩa là : Hai BTCQ bằng nhau cùng biểu diễn một NNCQ  Để chứng minh rằng hai tập hợp A và B đã cho là bằng nhau A = B cần chỉ ra AB và BA Nghĩa là cần CM hai chiều “” và “” 843/56 Một số ví dụ _ 3  Chứng minh rằng :  Các BTCQ : (a*b)*  (b*a)* và * cùng chỉ định một ngôn ngữ chính qui ?  Bằng cách “cùng L hai BTCQ” : L1 = L((a*b)*  (b*a)*) và L2 = L((a  b)*) = L(*) với  = { a, b } Cần CM rằng L1 = L2?  Từ nay về sau để đơn giản, ta viết w thay vì wL()  Lời giải là CM hai chiều “” và “” : “” : Rõ ràng L1 = (a*b)*(b*a)*  L2 = *, vì * là bao đóng “” : Để chứng minh điều ngược lại, ta xét một câu : w = w1w2...wn  * Cần chứng minh w  (a*b)*(b*a)* 44/56 a*b (a*b)* a*b (a*b)* Chứng minh w  (a*b)*(b*a)*  Giả sử w = w1w2...wn  * Xảy ra bốn trường hợp như sau : 1. w = an, do đó w  ( a )*  ( b*a )*  (a*b)*(b*a)* 2. w = bn, do đó w  ( b )*  ( a*b )*  (a*b)*(b*a)* 3. w chứa a và b, kết thúc bởi b. Ta có : w = a . . . ab b . . . b a . . . ab b . . . b Do đó, w  (a*b)*(b*a)* 4. w chứa a và b và kết thúc bởi a. Tương tự trường hợp 3, ta cũng có : w  L((a*b)*(b*a)*) 45/56 Các ngôn ngữ phi chính qui  Nhận xét :  Các BTCQ là vô hạn đếm được  Các BTCQ chỉ biểu diễn tập vô hạn đếm được NNCQ, nhưng không biểu diễn hết mọi ngôn ngữ  Tồn tại những ngôn ngữ phi chính qui và không có đủ các BTCQ để biểu diển mọi ngôn ngữ  Mọi ngôn ngữ không thể là chinh qui :  Tập hợp các ngôn ngữ và tập hợp các tập hợp con của một tập hợp đếm được (tập hợp các câu) là không đếm được  Tập hợp các NNCQ là đếm được vì mỗi NNCQ được biểu diển bởi một BTCQ và tập hợp các BTCQ là đếm được  Sẽ có nhiều ngôn ngữ khác với NNCQ 46/56 Có vô hạn không đếm được ngôn ngữ  = { a, b } * = { a, b }* Tập các NNCQ  Các ngôn ngữ phi CQ  Có 2n tập hợp con của một tập hợp A có n phần tử  Nếu A có vô hạn đếm được phần tử thì 2A có vô hạn không đếm được phần tử t t t t t t ì t 47/56 Ví dụ tập con  Cho A = { cục, cọ, cẫng) Hỏi có bao nhiêu tập hợp con của A ?  Trả lời : có 2|A|=23 = 8 tập hợp con của A  Đó là các tập hợp con : { rỗng, {cục} , {cọ} , {cẫng}, {cục , cọ}, {cục , cẫng } , {cọ,cẫng}, {cục, cọ, cẫng} }  Lý thuyết số  , ,  vô hạn đếm được  vô hạn không đếm được (lấp đầy trục số)  Dựng bằng compa-êke số - 0 1 2 ... + 2 2 48/56 Vấn đề biểu diễn ngôn ngữ  Một ngôn ngữ trên bảng chữ  là tập hợp con của +  Cho L+, làm sao để biểu diễn hết mọi câu wL ? Khi L có hữu hạn câu, chỉ việc liệt kê các câu Khi L có vô hạn câu, không thể liệt kê hết các câu của L, mà phải tìm cách biểu diễn hữu hạn :  Nếu L gồm các câu có một số tính chất nhất quán P nào đó, dùng tân từ để biểu diễn tính chất P đó L = { w* | P(w) }  Nếu L là NNCQ, sử dụng BTCQ  chỉ định L : L = L()  L tuỳ ý, không phải là NNCQ : sử dụng ôtômat và văn phạm - Ôtômat đoán nhận câu của một ngôn ngữ - Văn phạm sản sinh ra câu cho một ngôn ngữ Chi rứa ? 949/56 Ví dụ biểu diễn ngôn ngữ  Ngôn ngữ có vô hạn câu :  L1 = { ai  i là một số nguyên tố }, hay = { a2, a3, a5, a7, , a11, a13, }  L2 = { aibj  i  j  0 }, hay = { , a, ab, aab, aabb, } là ngôn ngữ gồm các câu có một dãy con a rồi đến một dãy con b, trong đó số con a bên trái nhiều hơn hoặc bằng số con b bên phải  L3 = (ab)* = { , ab, abab, ababab, } là ngôn ngữ gồm các câu có các cặp ab tuỳ ý (0..n cặp) 50/56 Ví dụ sản sinh ra câu của ngôn ngữ  Cho L là ngôn ngữ trên { a, b } được định nghĩa như sau : 1.   L 2. Nếu w  L thì awb  L 3. L không còn câu nào khác nữa (ngoài 1 và 2)  Qui luật sản sinh các câu của L như sau :  Từ (1), L = {  } Coi  là w, từ (2), ta có câu awb = ab = ab, L = { , ab }  Lại do (2), ta có L = { , ab, aabb, aaabbb, ... }  Cứ thế, ta có mọi câu của L có dạng aibi  i  0  Có thể biểu diễn L dưới dạng :  L = { aibi  i  0 } 51/56 Ví dụ đoán nhận một câu của ngôn ngữ  Giả sử định nghĩa ngôn ngữ L gồm các câu w :  Có thể thu gọn w về câu rỗng  : w    Thu gọn bằng cách thay thế dần các xâu con ab của w bởi   Ví dụ :  w = ab  L vì : ab    w = aabbab  L vì : aabbab  abab  ab    Coi a, b lần lượt là cặp dấu ngoặc đơn ( và ) :  L gồm các cặp dấu ngoặc đơn cân bằng nhau không cài nhau thu được từ một biểu thức toán học nào đó  Ví dụ, từ biểu thức (3*(x  y))  (x + 1), thực hiện bỏ hết các ký hiệu toán tử và toán hạng, ta nhận được câu ngoặc đơn cân bằng (())(), là câu aabbab 52/56 Bài tập 1 1. r + s = s + r 2. r + (s + t) = (r + s) + t 3. r (s + t) = rs + rt 4. r = r = r 5. r +  = r 6. ( + r)* = r* 7. r = r =  8. (r*)* = r* 9. r + r = r 10. r(st ) = (rs)t 11. * =  12. (r*s*)* = (r + s)* 13. r + r* = r* 14. (r + s)t = rt + st Cho các biểu thức chính qui r, s, t, trong đó nếu r = s thì có nghĩa L(r) = L(s) Chứng minh các tinh chất sau (dấu + ~ dấu ): 53/56 Bài tập_2 2. Tìm các BTCQ chỉ định phần bù của các ngôn ngữ sau :  (ab)*b  ((ab)(ab))* 3. Cho ngôn ngữ L trên bảng chữ { a, b } được định nghĩa như sau :    L  Nếu w  L thì awb  L  Nếu w  L thì bwa  L  Nếu w1, w2  L thì w1w2  L Chứng minh bằng quy nạp rằng : ngôn ngữ L theo cách định nghĩa trên khĩ L gồm mọi câu có số chữ a đúng bằng số chữ b (viết gọn na(w) = nb(w) ? Phép CM quy nạp (induction) : •Cần CM P(n), n  ? •Thử trường hợp P(0), P(1) •Giả sử P(n) đúng Cần CM rằng P(n+1) đúng i i i 54/56 Phép chứng minh Mệnh đề Pitagore: a2+b2=c2i Tiên đề/Định đề (công nhận) i ị Bổ đềĐịnh lýị lHệ quả Trời sinh ra thế !i i 10 55/56 CM r + s = s + r  “L” hai vế, cần CM rằng L(r + s) = L(s + r) :  Thật vậy, biến đổi vế trái : L(r + s) = (theo đn) = L(r)  L(s) = {w  * | w  L(r)  w  L(s) } = {w  * | w  L(s)  w  L(r) } (không tin, lập bảng chân lý) = L(s + r) (đpcm) (Qed-Quote Erat Demonstandum)  56/56 CM (r*s*)* = (r + s)*  Sử dụng định nghĩa ngôn ngữ L* để CM :  Đặt L1= (r*s*)*, L2 = (r + s)*, CM L1= L2 bằng cách CM L1 L2 và L2  L1  L1 L2 là hiển nhiên vì L2 là một bao đóng chưá mọi câu từ các BTCQ r và s  L2  L1 ? Theo đn L1={w|k: wkr*s*, w= w0w1 ... wk} Cho w L, CM wL1 w = r* = r* ()  r* s* w = s* = () s*  r* s* w = r*s*  r* s** = L1 r, s

Các file đính kèm theo tài liệu này:

  • pdflt3_ch1_modau_8571.pdf
Tài liệu liên quan