Công Nghệ Thông Tin, it, phầm mềm, website, web, mobile app, trí tuệ nhân tạo, blockchain, AI, machine learning - Công Nghệ Thông Tin, it, phầm mềm, website, web, mobile app, trí tuệ nhân tạo, blockchain, AI, machine learning - Công nghệ thông tin UBND TỈNH QUẢNG NAM TRƯỜNG ĐẠI HỌC QUẢNG NAM KHOA: CÔNG NGHỆ THÔNG TIN ---------- ĐINH BÁ QUANG TÌM HIỂU HỆ THỐNG VIẾT LẠI SỐ HẠNG VÀ MINH HỌA BẰNG PHẦN MỀM TỰ ĐỘNG ĐIỀU CHẾ HÓA CHẤT KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC Quảng Nam, tháng 04 năm 2017 UBND TỈNH QUẢNG NAM TRƯỜNG ĐẠI HỌC QUẢNG NAM KHOA: CÔNG NGHỆ THÔNG TIN --------- KHÓA LUẬN TỐT NGHIỆP Tên đề tài: TÌM HIỂU HỆ THỐNG VIẾT LẠI SỐ HẠNG VÀ MINH HỌA BẰNG PHẦN MỀM TỰ ĐỘNG ĐIỀU CHẾ HÓA CHẤT Sinh viên thực hiện: ĐINH BÁ QUANG MSSV: 2113021028 CHUYÊN NGÀNH CÔNG NGHỆ THÔNG TIN KHÓA: 2013 – 2017 Cán bộ hướng dẫn ThS. HUỲNH TẤN KHẢI Quảng Nam, ngày 14 tháng 04 năm 2017 LỜI CẢM ƠN Trong thời gian hoàn thành đề tài này, tôi xin tỏ lòng biết ơn sâu sắc đến Thầy Huỳnh Tấn Khải, đã tận tình hướng dẫn tôi trong suốt quá trình tìm hiểu và thực hiện làm khóa luận. Tôi cũng xin chân thành cảm ơn quý Thầy, Cô khoa Công Nghệ Thông Tin trường Đại Học Quảng Nam đã tận tình truyền đạt kiến thức cho tôi trong suốt 4 năm học. Với vốn kiến thức được tiếp thu trong quá trình học không chỉ là nền tảng cho quá trình nghiên cứu đề tài mà còn là hành trang quý báu để tôi bước vào đời một cách vững chắc và tự tin. Tôi cũng thầm biết ơn sự ủng hộ của gia đình, bạn bè - những người thân yêu luôn ủng hộ và là chỗ dựa tinh thần vững chắc cho tôi. Cuối cùng, tôi xin kính chúc quý Thầy, Cô và gia đình dồi dào sức khỏe và thành công trong sự nghiệp cao quý. Quảng Nam, ngày 13 tháng 04 năm 2017 Sinh viên thực hiện Đinh Bá Quang MỤC LỤC PHẦN I: MỞ ĐẦU ............................................................................................... 1 1.1. Lý do chọn đề tài ...................................................................................... 1 1.2. Mục tiêu của đề tài.................................................................................... 2 1.3. Đối tượng và phạm vi nghiên cứu ............................................................ 2 1.4. Phương pháp nghiên cứu .......................................................................... 2 1.5. Đóng góp của đề tài .................................................................................. 2 1.6. Cấu trúc đề tài ........................................................................................... 2 PHẦN II: NỘI DUNG........................................................................................... 3 CHƯƠNG I. CƠ SỞ TOÁN HỌC ........................................................................ 3 1.1. Giới thiệu .................................................................................................. 3 1.1.1. Hệ thống viết lại số hạng (Term Rewiting System – TRS) là gì?...... 3 1.1.2. Các khái niệm cơ bản trong TRS ....................................................... 6 1.2. Luật viết lại có điều kiện ........................................................................ 10 1.2.1. Các khái niệm ................................................................................... 10 1.2.2. Ví dụ minh họa ................................................................................. 11 1.3. Ứng dụng của hệ thống viết lại số hạng (TRS) trong thực tế ................. 12 1.3.1. Dùng TRS để tổ hợp dịch vụ Web ................................................... 12 1.3.2. Xây dựng phần mềm tự động điều chế hóa chất .............................. 12 1.4. Hướng tiếp cận của đề tài ....................................................................... 13 1.5. Kết chương ............................................................................................. 13 CHƯƠNG II. MÔ HÌNH CẤU TRÚC SỬ DỤNG HỆ THỐNG VIẾT LẠI ..... 14 2.1. Mô hình cấu trúc và các lớp xử lý .......................................................... 14 2.1.1. Module hệ thống viết lại số hạng ..................................................... 15 2.1.2. Module quản lý các cặp quan trọng ................................................. 22 2.1.3. Module thi hành ............................................................................... 25 2.2. Sử dụng hệ thống viết lại số hạng giải quyết bài toán ............................ 33 2.2.1. Các hàm thực hiện ............................................................................ 33 2.2.2. Ví dụ ................................................................................................. 38 2.3. Kết chương ............................................................................................. 39 CHƯƠNG III. ỨNG DỤNG MINH HỌA BẰNG PHẦN MỀM TỰ ĐỘNG ĐIỀU CHẾ HÓA CHẤT ..................................................................................... 40 3.1. Ý tưởng bài toán ..................................................................................... 40 3.2. Các lớp xử lý của hệ thống viết lại số hạng............................................ 42 3.2.1. Lớp luật có điều kiện – ConditionalRule ......................................... 42 3.2.2. Lớp luật – Rules .................................................................................. 42 3.2.3. Lớp thay thế - Substitution ................................................................. 49 3.2.4. Lớp Term ............................................................................................ 50 3.3. Áp dụng điều chế hóa chất ..................................................................... 53 PHẦN III: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ........................................ 55 1. Kết luận ...................................................................................................... 55 2. Hướng phát triển trong tương lai ............................................................... 55 PHẦN IV: TÀI LIỆU THAM KHẢO ................................................................ 56 BẢNG CÁC TỪ VIẾT TẮT TRS Term Rewriting System TRSM Term Rewriting System Module CPM Critical Pair Module EM Execution Module DANH MỤC HÌNH ẢNH Hình 1.1 Biểu diễn tính hợp nhất Hình 1.2 Ví dụ khả năng rút gọn về Term Hình 1.3 Ví dụ các vị trí của một Term Hình 2.1 Module của một TermRewritingSystem Hình 2.2 Module của một Critical Pair Hình 2.3 Module của một Execution Hình 2.4 Mô hình lớp TermRewritingSystem Hình 2.5 Lớp Symbol trong TermRewritingSystem Hình 2.6 Cấu trúc thừa kế của một Symbol Hình 2.7 Lớp Term Hình 2.8 Lớp Rule Hình 2.9 Lớp TRS Hình 2.10 Mô hình lớp module Critical Pair Hình 2.11 Lớp Substitution Hình 2.12 Lớp Critical Pair Hình 2.13 Lớp Position Hình 2.14 Mô hình lớp module Execution Hình 2.15 Lớp ExecutionTree Hình 2.16 Lớp ExecutionNode Hình 2.17 Cấu trúc cây khởi tạo Hình 2.18 Bước 1 của cây Hình 2.19 Bước 2 của cây Hình 2.20 Bước 3 của cây Hình 2.21 Bước 4 của cây Hình 2.22 Bước 5 của cây Hình 2.23 Bước 6 của cây Hình 2.24 Bước 7 của cây Hình 2.25 Bước 8 của cây Hình 2.26 Phương thức Gettrace trả về danh sách dữ liệu Hình 2.27 Các bước thực hiện hàm Lift(s,t) Hình 2.28 Các bước thực hiện hàm Rewrite(r,t) Hình 2.29 Các bước thực hiện hàm Matches(add,ori) Hình 2.30 Các bước thực hiện hàm Normal(r,t) Hình 3.1 Sơ đồ khối bài toán Hình 3.2 Chương trình tự động điều chế hóa chất 1 PHẦN I: MỞ ĐẦU 1.1. Lý do chọn đề tài Trong toán học và các ngành khoa học nghiên cứu phương trình được xem là một đối tượng phổ biến nhất. Đôi khi ta luôn cố gắng để đi tìm lời giải sau hàng loạt các mệnh đề logic đã cho trước, tùy vào thời gian tính toán, tùy vào cách áp dụng các mệnh đề logic khác nhau nhưng kết quả cuối cùng mà ta đi đến là một kết quả tối giản nhất. Những lý luận đi tìm lời giải cho phương trình như vậy cũng rất quan trọng trong nhiều ứng dụng của ngành khoa học máy tính, nó bao gồm các phép tính toán đại số, chứng minh lý thuyết tự động và các ngôn ngữ lập trình. Khoa học máy tính là một ngành khoa học mà ở đó tập hợp các kỹ thuật toán học, các thuật toán, giải thuật và ngôn ngữ lập trình hỗ trợ cho việc phát triển một hệ thống phần mềm và phần cứng. Với việc áp dụng lý luận đi tìm lời giải cho phương trình vào kỹ thuật lập trình ứng dụng, công việc tính toán tìm kiếm kết quả sẽ trở nên nhanh chóng và chính xác. Có một phương pháp được tạo ra để thực hiện công việc lý luận trên thành một hệ thống đó là : Hệ thống viết lại số hạng-Term Rewriting System. Viết lại số hạng là một hệ thống tính toán đáng ngạc nhiên dựa trên việc lặp đi lặp lại các quy tắc có sẵn mà ta đã xây dựng trước để tìm ra kết quả tối giản nhất. Với việc tự động tìm ra lời giải logic thông qua các bộ luật (hay có thể gọi là các qui tắc) hệ thống viết lại rút ngắn thời gian tính toán, giảm độ phức tạp trong việc tìm kết quả của phương trình. Đối với ngành khoa học máy tính hệ thống viết lại số hạng có đầy đủ sức mạnh của một máy Turing nhưng khác ở chỗ máy Turing chỉ giải quyết các vấn đề liên quan đến việc xử lý các ký tự trong khi đó hệ thống này hỗ trợ bất kỳ kiểu dữ liệu đầu vào nào đó, bạn có thể đưa vào kiểu ký tự, số, chuỗi... hệ thống đều có thể làm việc được. Chính những yêu cầu đơn giản trên hệ thống viết lại số hạng hiện tại đang được nghiên cứu và áp dụng rộng rãi trong các ứng dụng tin học thực tế giảm thiểu tối đa vấn đề thời gian cho việc tìm kiếm kết quả, ta có thể kể đến như sử dụng vào tối ưu các dịch vụ web, sử dụng viết các phần mềm tự động điều chế hóa chất, pha màu sơn... 2 Với mong muốn đưa đến cái nhìn rõ nét hơn về hệ thống viết lại số hạng này, tôi đã chọn đề tài “ Tìm hiểu hệ thống viết lại số hạng và minh họa bằ ng phần mềm tự động điều chế hóa chất ” làm đề tài khóa luận tốt nghiệp cho mình. 1.2. Mục tiêu của đề tài Tìm hiểu về hệ thống viết lại số hạng - Term Rewriting System. Xây dựng phần mềm tự động điều chế hóa chất. 1.3. Đối tượng và phạm vi nghiên cứu Đối tượng nghiên cứu: Hệ thống “Term Rewriting System”. Phạm vi nghiên cứu: Nghiên cứu các vấn đề xoay quanh việc sử dụng, cách thức hoạt động của hệ thống viết lại số hạng rồi xây dựng ứng dụng demo. 1.4. Phương pháp nghiên cứu Thu thập thông tin, nghiên cứu tài liệu liên quan đến đề tài. Tham khảo sách, báo và từ Internet. 1.5. Đóng góp của đề tài Cung cấp kiến thức về hệ thống viết lại số hạng. Cung cấp một ứng dụng để giải quyết bài toán viết lại số hạng. 1.6. Cấu trúc đề tài Ngoài phần mở đầu và kết luận, phần nội dung khóa luận gồm ba chương: Chương 1: Cơ sở toán học về hệ thống viết lại số hạng – Term Rewriting System, chương này giới thiệu sơ lược thế nào là một hệ thống viết lại số hạng, đưa ra các ví dụ để làm rõ. Chương 2: Mô hình cấu trúc sử dụng, chương này đề cập đến mô hình cấu trúc của hệ thống viết lại số hạng, gồm có các module nào, các lớp được hình thành ra sao, đồng thời đưa ra các hàm để giải quyết bài toán. Chương 3: Ứng dụng minh họa bằng phần mềm tự động điều chế hóa chất. 3 PHẦN II: NỘI DUNG CHƯƠNG I. CƠ SỞ TOÁN HỌC 1.1. Giới thiệu 1.1.1. Hệ thống viết lại số hạng (Term Rewiting System – TRS) là gì? Trong toán học, khoa học máy tính và logic học có một phương pháp được xem là một tập hợp mà ở đó nó bao gồm các kỹ thuật toán học, các bộ luật để phát triển phần mềm và các hệ thống phần cứng. Trong công nghệ phần mềm chúng ta có thể sử dụng phương pháp này để khai thác sức mạnh của các ký hiệu và chứng minh toán học. Phương pháp này chính là Hệ thống viết lại số hạng (Term Rewriting System – TRS ), với phương pháp này các quy tắc viết lại được sử dụng để xác định các thuộc tính và yêu cầu của chương trình. Tất cả chúng ta đã từng học từng sử dụng hệ thống viết lại mà chúng ta không hề hay biết, ngay khi chúng ta còn ở trường học. Khi chúng ta đơn giản hóa một phương trình toán học chúng ta có thể làm như sau: (3 + 4) ൈ (4 + 2) → 7 ൈ (4 + 2) → 7 ൈ 6 → 42 (1) Cách đơn giản phương trình này là việc sử dụng các phép toán cộng và nhân được bổ sung vào, các luật này giống như: 0 + 1 → 1, 0 + 2 → 2, 0 + 3 → 3, ..., 0 ൈ 1 → 0, 0 ൈ 2 → 0, ... với việc kết hợp các tổng để rồi tích các tổng đã tính lại với nhau ta tìm ra kết quả. Cũng có thể hiểu rằng TRS là tập các luật được xây dựng bằng các dữ liệu đầu vào, quá trình xây dựng được lặp đi lặp lại với các điều kiện khác nhau cho đến khi thu được kết quả đơn giản nhất. Ý tưởng của TRS được làm rõ qua ví dụ về “Coffee Can Problem”, ta có hai giống cà phê đen và trắng ta được phép sắp xếp theo thứ tự nào đó (ngẫu nhiên) – đây là đầu vào (Input). white white black black white white black black (2) Các bộ luật (qui tắc) được quy định là: black white→ black white black → black (3) black black → white white white → black 4 Bộ qui tắc này là một ví dụ điển hình cho hệ thống viết lại. Mỗi qui tắc đều diễn ra một động thái, một quy phạm đúng, đầu tiên bất kỳ hạt cà phê nào màu trắng khi được kết hợp với hạt đen thì đều cho ra màu đen và ngược lại, tiếp đến nếu hai hạt cùng màu thì sẽ cho ra hạt có màu còn lại. Ví dụ dưới đây là một chuỗi các luật được lặp đi lặp lại trong suốt quá trình tìm lời giải đơn giản nhất. white white black black white white black black white white black black white black black white white white white black black white white white black black white white black black white black black black black white Mục tiêu của bài toán là tìm ra càng ít hạt cà phê càng tốt, ta có thể thấy rằng với một số lẻ hạt cà phê đen bài toán sẽ luôn tìm ra lời giải cuối cùng là một hạt màu đen. Ví dụ trên cơ bản làm rõ hệ thống viết lại số hạng là gì, nó bao gồm các đầu vào, mô hình xây dựng các bộ luật (qui tắc), và đầu ra là một kết quả đơn giản nhất. Các đặc tính quan trọng của một TRS bao gồm: Không xác định: Sử dụng các luật không xác định, có nghĩa là trong một bài toán, một phép giải chúng ta có thể sử dụng các quy tắc, các luật khác nhau: (3+4) ൈ (4+2) → 7ൈ (4+2) → 7 ൈ 4+7 ൈ 2 → 7 ൈ 4 +14 → 28+14 → 42 (4) Chúng ta có thể nhìn thấy ở mỗi bước của (2) các luật được sử dụng một cách linh hoạt nhưng vẫn tuân thủ đúng quy tắc toán học ta gọi đây là một chuỗi ghi đè hợp lệ. Nói chung, quá trình viết lại là không xác định trước. Kết quả cuối cùng giống nhau: Tính độc đáo của việc sử dụng các luật một cách không xác định trước nằm ở chỗ chúng đều cho ra một kết quả cuối cùng giống nhau, mặc dù đường đi lời giải khác nhau. Chấm dứt: Mỗi lần viết lại đều có thể được mở rộng ra để dễ dàng tiếp cận kết quả, và cũng có thể loại trừ để kết thúc bài toán. 5 Hợp nhất : Tính hợp nhất có tính chất làm đảm bảo các luật trong cùng hệ thống được viết lại bằng những cách khác nhau nhưng cho ra kết quả tương tự. Hợp nhất thì bao gồm hợp nhất cục bộ và hợp nhất toàn bộ, để làm rõ ta có ví dụ sau: Cho R={ F, R } là một hệ thống viết lại số hạng, chúng ta nói rằng R là : Hợp nhất cục bộ nếu : cho tất cả ,ሻ ܺ,ܨሺ ܶ ߳ ’ݐ ,ݐ ,ݏ bất kỳ khi nào → ݏ ݐ và ݏ→ t’, ta có u߳ T(F,X) như vậy t → ∗ u và t ’ → ∗ u. Hợp nhất toàn bộ nếu : cho tất cả s, t, t ’߳ T(F,X), bất kỳ khi nào s → ∗ t và s → ∗t ’ , ta có u߳ T(F,X) như vậy t → ∗ u và t ’ → ∗ u. Hình 1.1 : Tính hợp nhất Để có thể hiểu rõ về hệ thống viết lại số hạng, ta khảo sát hệ thống sau. Hệ thống dùng để đặc tả phép cộng của các số tự nhiên bằng cách sử dụng hằng số 0 và hàm s với tập luật : x + 0 → x Luật R1 x + s(y) → s(x+y) Luật R2 x + y → y + x Luật R3 Trong đó, x và y là các biến số. Khi một biểu thức phù hợp với vế trái của một luật, ta có thể viết lại biểu thức đó dưới dạng vế phải. Ví dụ 1: Với biểu thức s(s(0)) + 0, nếu thay x bằng s(s(0)) (vì x là biến số nên có thể được thay bằng các biểu thức) thì biểu thức này theo đúng cấu trúc vế 6 trái của luật R1, nên có thể viết lại thành s(s(0)) (vì áp dụng R1, kết quả là x mà x = s(s(0))). Quá trình trên có thể được biểu diễn thành: s(s(0)) + 0 → s(s(0)) R1 Trong hệ thống này, các số tự nhiên được biểu diễn bằng cách đếm số lượng hàm s trong một số hạng. Ví dụ 2: Số 0 được biểu diễn bằng 0, 1 được biểu diễn bằng s(0), 2 được biểu diễn bằng s(s(0)). Phép cộng được thể hiện trong các luật cũng chính là phép cộng hai số tự nhiên. Ví dụ 3: Khi thực hiện phép cộng số 1 (được biểu diễn bằng s(0)) và số 2 (được biểu diễn bằng s(s(0))), ta tìm cách áp dụng các luật để có thể loại bỏ được tất cả các dấu + trong biểu thức được tạo thành: s(0) + s(s(0)) → s(s(0) + s(0)) R2 → s(s(s(0) + 0) R2 → s(s(s(0))) R3 Như vậy kết quả của phép cộng là s(s(s(0))) là biểu diễn của số 3 . Ta cũng có thể áp dụng các luật theo một thứ tự khác để ra được kết quả cuối cùng: s(0) + s(s(0)) → s(s(0)) + s(0) R3 → s(s(s(0)) + 0) R2 → s(s(s(0))) R1 Một hệ thống được đặc tả gồm các luật như trên gọi là hệ thống viết lại số hạng. Việc tìm hiểu về hệ thống viết lại số hạng liên quan đến cách điều hướng các luật này và các điều kiện để đảm bảo hệ thống luật tạo ra có sức mạnh tính toán bằng với hệ thống phương trình mà nó được tạo ra từ trước đó. 1.1.2. Các khái niệm cơ bản trong TRS a) Tập chữ kí Một tập chữ kí (Signature) ∑ là một tập các ký hiệu hàm, trong đó mỗi f߳ ∑ được liên kết với một số không âm n là bậc của f . So sánh với khái niệm hàm số trong ngôn ngữ lập trình, tập chữ kí chính là tập chứa tên các hàm số với bậc của một tập chữ kí chính là số lượng thông số của hàm số đó.Tập các phần tử có cùng bậc n của ∑ được ký hiệu là ∑ (n). Hằng số là tập các phần tử có bậc 0 của ∑: ∑ (0). 7 b) Term Khái niệm Term được xây dựng dựa trên các ký hiệu biến, signature. Cho ∑ là một tập chữ kí và X là một tập các biến sao cho ∑ ∩ X ≠ ∅ (không thể có ký hiệu nào vừa là biến, vừa thuộc tập chữ kí được). Tập tất các các Term được ký hiệu T( ∑, X ) được đặc tả một cách đệ quy: tất cả biến đều là Term: X ⊂ T(∑ , X). Ví dụ 4: 0, s đều là các Term, với f thuộc tập chữ kí (f߳ ∑), nếu t 1 , t 2, … t n đều là các Term thì f( t 1, t 2 , … t n ) là một Term: f( t 1, t 2, … t n )߳ ∑. Ví dụ 5: s(s(0)), s(0) + 0 đều là các Term. (Phép + ở đây là một hàm số có 2 thông số. c) Rút gọn → Đây là một quan hệ nhị phân trên tập hợp T( ∑, X ). Thay vì viết (a, b) ϵ → , ta thường viết dưới dạng a → b. Ví dụ 6: → = {(x+0, x), (x+ s(y), s(x+y)), (x+y, y+x)}. Ta có thể biểu diễn quan hệ trên dưới dạng: {x + 0 → x, x + s(y) →s (x+y), x + y → y + x}. x được gọi là khả rút gọn nếu và chỉ nếu tồn tại một giá trị y để mà x → y. x được gọi là ở dạng chuẩn nếu và chỉ nếu x không khả rút gọn. y được gọi là một chuẩn của x nếu và chỉ nếu x → y và y ở dạng chuẩn. Ví dụ 7: Để minh họa các khái niệm, ta dùng biểu diễn trực quan của 2 cách áp dụng luật để tính s(0) + s(s(0)) : Hình 1.2 : Ví dụ về khả năng rút gọn về Term. 8 Giải thích: s(0) + s(s(0)) khả rút gọn. s(s(s(0))) ở dạng chuẩn . s(0) + s(0) không ở dạng chuẩn . s(s(s(0))) là một chuẩn của s(s(0) + s(0)). d) Tập biến: Là tập các biến số có mặt trong Term t. Ví dụ 8: Var(0) = ሼሽ vì Term 0 không có biến số; var (x + s(y)) = { x , y } vì có 3 ký hiệu trong term x + s(y) là x, s và y trong đó s là một hàm số: s߳ ∑, x và y là biến: x,y߳ X. e) Luật viết lại: Là là một luật có dạng VT → VP sao cho VT không phải là một biến và Var(VT) ⊇ Var(VP). f) Hệ thống viết lại số hạng: Là một tập hợp gồm các luật viết lại. Ví dụ 9: Hệ thống gồm các luật {x + 0 → x, x + s(y) → s (x + y), x + y → y + x }, trong đó ∑ = {s, 0}, X = {x, y} là một hệ thống viết lại số hạng. g) Vị trí của term Cho S là một tập chữ kí, X là một tập các biến ( ∑ ∩ X ≠ ∅ ) và s, t là các Term. Tập các vị trí của Term s là tập hợp Pos(s) (Position) là một chuỗi các số dương được định nghĩa một cách đệ quy: Nếu s là biến thì Pos(s) = {߳ }. (߳ là một ký hiệu dùng để mô tả rằng tập các vị trí của Term là tập rỗng). Nếu s=f(s1 ,...,sn ) thì Pos(s) = {߳ } ∪ ⋃ ݅ሼ ୀଵ p߳ Pos(si)} . Vị trí của Term là một khái niệm rất quan trọng để có khả năng lập trình hóa việc áp dụng một luật lên một subterm (term thay thế) của một term cho trước. Ví dụ 10: Để biểu diễn s(s(0)+ s(0)) → s(s(s(0)+ 0))) khi áp dụng luật R2 : x + s(y) → s( x + y ), ta cần phải biết luật này được áp dụng trên term thay thế nào của Term ban đầu( trong trường hợp này là term thay thế s(0)+ s(0) củ a s(s(0) + s(0) ). Vị trí của term thay thế được biểu diễn trực quan theo hình cây. Cây con của một nút sẽ có phần đầu là vị trí của nút cha và nối thêm một số chỉ số thứ tự 9 của nó (ví dụ: nếu nút cha có vị trí là 12 thì nút con đầu tiên của nó có vị trí là 121). Nút gốc có vị trí là߳ . Ta có biểu diễn trực quan của Term t = s(y) + s(s(x) + 0. Hình 1.3: Ví dụ minh họa các vị trí của Term Giải thích : Pos(t) = {߳ , 1, 11, 2, 21, 211, 212, 2111 }. Trong ví dụ trên, t = 8 vì Pos(t) có 8 phần tử߳ , 1, 11, 2, 21, 211, 212 và 2111 . Với p là một phần tử của Pos(s), term thay thế của s tại vị trí p, ký hiệu là sp được định nghĩa đệ quy trên chuỗi số của p như sau: s߳ = s f(s1 , s2,…,s n) iq = siq . (5) Khái niệm ‘term thay thế’ này giúp người lập trình dễ dàng xác định term thay thế nào của Term ban đầu được áp dụng các luật. Term thay thế tại vị trí߳ chính là Term ban đầu. Term thay thế tại vị trí iq (với q là một số) là cây con thứ q của si. Trong Term t đã xác định ở trên, ta có: t 2 = s(s(x) + 0) (cây con thứ hai tính từ nút gốc); t 21 = s(x) + 0 (cây con thứ nhất của t 2 ). Với p là một phần tử của Pos(s), st p là Term được tạo ra từ s bằng cách thay thế subterm tại vị trí p bởi t. st߳ = t f(s1 ,..., sn )t iq = f(s1 ,..., s it q ,...,sn ) (6) Ví dụ 11: s(s(0) + s(0)) → s(s(s(0) + 0))) khi áp dụng luật R2: x + s(y) → s(x+y) tức là ta thay thế subterm s(0) + s(0) bằng s(s(0) + 0), ta chỉ cần dùng ký hiệu s(s(0) + s(0)) s(s(0) + 0 1. 10 h) Sự thay thế Với các khái niệm về Term , ta vẫn chưa thể xác định được hoàn toàn việc áp dụng một luật trên Term cho trước. Ví dụ 12: s(s(0) + s(0)) → s(s(s(0) + 0))) khi áp dụng luật R2: x + s(y) → s(x+y). Ta cần phải xác định được một ánh xạ: x thành s(0), y thành 0 thì mới có thể sử dụng luật R2 được. Đó cũng chính là khái niệm của sự thay thế (substitution ). Cho ∑ là một tập chữ kí và V là một tập các biến. Một sự thay thế trên T( ∑, V ), hay nói đơn giản là sự thay thế, là một hàm σ: V → T( ∑, V ) sao cho σ (x) ≠ x cho một số giới hạn các biến x . Ví dụ 13: Để áp dụng luật R2: x+s(y) → s(x+y) trên Term s(s(0) + s(0)) → s(s(s(0) + 0))), ta cần định nghĩa phép thay thế ߪ = {x ↦ s(0), y ↦ 0 } . Áp dụng phép thay thế này trên luật R2, ta được: s(0) + s(0) → s(s(0) + 0) . Sau đó, ta lấy được kết quả của việc áp dụng luật R2 bằng cách thực hiện: t s(s(0) + 0 1. i) Tập ߪ Dom(ߪ) là tập hợp các biến sau cho giá trị của nó bị thay đổi khi áp dụng phép thay thế ߪ . Ví dụ 14: Với phép thay thế ߪ = { x ↦ s(0), y ↦ s(s(0)), z ↦ z } thì Dom(ߪ) = { x, y }. 1.2. Luật viết lại có điều kiện 1.2.1. Các khái niệm a) Đồng nhất thức Cho ( ∑ là một tập chữ kí và V là một tập các biến vô hạn đếm được sao cho (∑ ∩ X ≠ ∅. Một ∑- đồng nhất thức (hay đơn giản là đồng nhất thức) là một cặp ሺݏ, ݐሻ ∈ ܶ ሺሺ ∑, ܸሻ ܶ ݔ ሺሺ ∑, ܸሻ. Các đồng nhất thức được viết thành s → t. b) Quan hệ giản lược Cho E là một tập các ( ∑- đồng nhất thức. Quan hệ giản lược →E ܶ ⊆ ሺሺ ∑,ܸ ሻ x T( ∑ , V ) được định nghĩa: s →E t nếu và chỉ nếu ∃(l,r) ∈ E, p ∈ Pos(s), ߪ ∈ Sub. sp = (l) and t = s ߪ(r)p. 11 Ví dụ 15: Cho G := {f{x, f(y, z)) →f(f(x, y), z), f(e, x) →x, f(i(x), x) → e} . Khi đó f(i(e), f(e, e)) →G f(f(i(e),e),e) →G f(e,e) →G e. Lần giản lược đầu tiên diễn ra tại vị trí p 1 =߳ với cặp đồng nhất thức đầu tiên và phép thay thế ߪ1 = { x ↦i(e), y ↦ e , z ↦ e }. Lần giản lược thứ hai diễn ra tại vị trí p 2 = 1 với đồng nhất thức thứ 3 và phép thay thế ߪ2 = { x ↦ e }. Lần giản lược thứ ba diễn ra ở vị trí p 3 =߳ với đồng nhất thức thứ hai và phép thay thế ߪ3 = { x ↦ e }. 1.2.2. Ví dụ minh họa Ta lấy ví dụ ở mục 1.1 để phát triển, hệ thống được mở rộng rộng ra để biểu diễn không chỉ các số tự nhiên mà cả các số âm bằng cách thêm hàm p để mô tả các giá trị âm. Như vậy, ( ∑ = { 0 , s, p } trong đó 0 là hằng số, s và p là các hàm có một thông số. Để có thể biểu diễn giá trị số trong trường hợp có cả hai hàm s và p, hệ thống cần thêm vào ba luật: x + p(y) → p(x+y) Luật R4 s(p(x)) →x Luật R5 p(s(x)) → x Luật R6 Như vậy tập luật của toàn bộ hệ thống thành năm luật: x + 0 → x Luật R1 x + s(y) → s(x+y) Luật R2 x + y → y + x Luật R3 s(p(x)) → x Luật R4 p(s(x)) → x Luật R5 Với việc sử dụng sử dụng năm luật này ta có thể biểu diễn bất kỳ số nguyên nào. Ví dụ 16: -3 được biểu diễn bằng p(p(p(0))), 2 được biểu diễn bằng s(s(0)). Tính toán tổng của hai số nguyên bất kỳ : -3+2 ta làm như sau : 12 p(p(p(0)))+s(s(0)) → s(p(p(p(0)))+s(0)) R2 → s(s(p(p(p(0)))+0)) R2 → s(s(p(p(p(0))))) R1 → s(p(p(0))) R4 → p(0) R4 (7) p(0) chính là dạng biểu diễn của -1. 1.3. Ứng dụng của hệ thống viết lại số hạng (TRS) trong thực tế 1.3.1. Dùng TRS để tổ hợp dịch vụ Web Các dịch vụ web có sẵn thường rất cơ bản, chỉ phục vụ cho những thao tác đơn giản của người dùng. Trong khi đó, nhu cầu sử dụng của người dùng ngày càng cao, thường phải kết hợp nhiều dịch vụ web đơn này để có thể thực hiện được công việc mong muốn. Các phương pháp tổ hợp dịch vụ web hiện nay còn đơn giản và tốn nhiều thời gian. Với số lượng dịch vụ web ngày càng nhiều, việc tổ hợp các dịch vụ web bằng tay là không khả thi. Hơn nữa, người dùng không chỉ yêu cầu tìm được dịch vụ web có các chức năng mong muốn mà còn đòi hỏi dịch vụ này phải là dịch vụ tốt nhất tìm được (chi phí nhỏ nhất, độ tin cậy cao nhất, …). Ngày nay, số lượng các dịch vụ web được cập nhật một cách liên tục đòi hỏi các chương trình tổ hợp cần phải cập nhật các thay đổi này mà không ảnh hưởng đến quá trình thực thi của chương trình. Ta có thể sử dụng hệ thống viết lại số hạng. Hệ thống chuyển đổi các dịch vụ web có sẵn thành các luật với đặc tả đi kèm về chất lượng dịch vụ và điều kiện thực hiện dịch vụ. Chương trình xét khả năng áp dụng từng luật và chọn ra luật áp dụng tốt nhất cho đến khi thỏa mãn được yêu cầu của dịch vụ web cần tổ hợp. Trong quá trình tổ hợp, chương trình có khả năng thay đổi số lượng, đặc tả của các dịch vụ có sẵn để phù hợp với các cập nhật xảy ra. 1.3.2. Xây dựng phần mềm tự động điều chế hóa chất Ta sử dụng hệ thống viết lại số hạng để giải các bài toán khi đưa ra các luật mô tả bài toán đó cùng với đặc tả của vấn đề cần giải quyết. Hệ thống dựa trên các luật có sẵn để đưa vấn đề này thành dạng chuẩn mong muốn. Phần mềm bao gồm 2 thành phần chính: đầu vào (dữ liệu cần thiết để thực hiện một quá trình tạo hóa chất) và đầu ra (dữ liệu có được sau khi thực hiện điều chế). Đặc điểm này hoàn toàn giống với khái niệm luật trong hệ thống viết lại số hạng: khi một biểu thức phù hợp với vế trái của một luật, ta có thể viết lại biểu thức đó 13 dưới dạng vế phải. Mỗi phương trình điều chế sẵn có được mô tả bằng một luật trong hệ thống. Việc điều chế một hóa chất là một quá trình tìm ra thứ tự áp dụng các chất, các phản ứng có sẵn từ một tập các dữ liệu đầu vào đã có để có thể có được tập dữ liệu đầu ra như mong muốn. Việc tính toán trên hệ thống viết lại số hạng cũng dựa vào biểu thức cần tính và sử dụng các luật để đưa biểu thức này về dạng chuẩn mà không thể rút gọn lại được nữa. Như vậy, tự động điều chế hóa chất chỉ là một dạng hệ thống viết lại đơn giản trong đó biểu thức cần tính được dựa trên các dữ liệu đầu vào của các phản ứng hóa học. Việc áp dụng các luật (được xây dựng từ các phương trình hóa học có sẵn) dừng lại khi các yêu cầu đầu ra của một hoạt động điều chế một chất nào đó được thỏa mãn. 1.4. Hướng tiếp cận của đề tài Mục tiêu của đề tài là tìm hiểu thế nào là hệ thống viết lại số hạng – TRS, nó có gì mới được tạo lập từ đâu, đề tài mang đến cái nhìn rõ nét về mô hình và các lớp hoạt động của một TRS, qua đó xây dựng ra một ứng dụng tự động điều chế hóa chất bằng hệ thống này. Ứng dụng này có khả năng tổ hợp tự động một số lượng lớn phương trình phản ứng hóa học đơn lại với nhau bằng việc đơn giản hóa các đặc tả phức tạp của chuỗi phản ứng và mô tả chúng bằng các luật theo hệ thống viết lại số hạng. 1.5. Kết chương Trong chương này, chúng ta đã cơ bản tiếp cận cơ sở toán học về một hệ thống viết lại số hạng. Một hệ thống viết lại số hạng bao gồm các khái niệm cơ bản nào, để đi giải quyết cách làm việc của một hệ thống viết lại chúng ta sẽ đi phân tích sâu hơn trong chương 2. 14 CHƯƠNG II. MÔ HÌNH CẤU TRÚC SỬ DỤNG HỆ THỐNG VIẾT LẠI 2.1. Mô hình cấu trúc và các lớp xử lý Cấu trúc của một TRS bao gồm ba phần chính : Term Rewriting System Module (TRSM): Module này có trách nhiệm lưu giữ các cấu trúc dữ liệu chính của hệ thống. Critical Pair Module (CPM): Bao gồm các lớp cần thiết để tính toán và quản lý các cặp trọng điểm của hệ thống. Execution Module (EM): Module này có chức năng theo dõi các hoạt động được thực hiện trong một kì của hệ thống. Hình 2.1: Biểu đồ module của một Term Rewriting System. Hình 2.2: Biểu đồ module của Critical Pair 15 Hình 2.3: Biểu đồ module của Execution. Ngoài ra còn có một lớp phụ trợ, Parser, có nhiệm vụ phân tích tệp .trs và xây dựng một đối tượng TermRewritingSystem. 2.1.1. Module hệ thống viết lại số hạng Đây là một bộ phận cốt lõi của một mô hình TRS, nó lưu giữ các dữ liệu cấu trúc của hệ thống và cho phép các module khác truy cập các thuộc tính trong nó. Cấu trúc dữ liệu này được chọn và biểu diễn trên một cây cú pháp, mỗi đối tượng Term đại diện cho một nút trong cây đó, và có một tham chiếu đến Symbol trên nó. Mỗi Symbol trong hệ thống viết lại số hạng chỉ được đặc trưng bởi một và chỉ một Symbol mà thôi và nó lưu trữ danh sách tất cả các nút trên các cây nơi nó được sử dụng. Mô hình dưới đây là cấu trúc của một TRSM, nó bao gồm bốn lớp thực hiện các chức năng riêng: Lớp Symbol Lớp Term Lớp Rule Lớp Lớp TermRewritingSystem 16 Hình 2.4: Mô hình lớp của TRS a) Lớp Symbol Lớp Symbol được sử dụng để lưu trữ các đặc tính của mỗi ký hiệu trong hệ thống viết lại số hạng, một symbol có thể là một biến “variable”, một hàm “function” hoặc cũng có thể là một hằng số “constant”. Một đối tượng symbol là đại diện cho các loại của chúng và tất cả các thuộc tính liên quan của nó đều được lưu trữ trên một mảng nơi mà chúng diễn ra các sự kiện (.Instances0, .Instances1, .Instances2, ...). 17 Hình 2.5: Lớp Symbol Kiểu dữ liệu của Type và Notation (TermType và FunctionNotation) là một bảng liệt kê có các giá trị có thể là Function, Variable, Constant and Null, Prefix, Infix, Postfix. Notation đại diện cho cách mà một hàm bất kỳ được in ra và các symbol không phải là hàm đều là giá trị NULL. Thuộc tính Arity chỉ được sử dụng trên các ký hiệu hàm. Đối với tất cả các ký hiệu khác phải là 0. Hàm Init được sử dụng bởi phương thức “constructor ” và kiểm tra các ràng buộc của lớp : Nếu symbol là một biến hoặc là một hằng số thì Arity phải bằng 0 và Notation có giá trị là NULL. Nếu symbol là một hàm “function” Arity phải lớn hơn 0 và Notation phải khác NULL. Nếu symbol là một hàm với Infix Notation thì Arity phải bằng 2. Nếu symbol là một hàm với Postfix Notatio thì Arity phải bằng 1. Phương thức Instantiate tạo ra một Term mới và thêm nó vào danh sách cá thể. 18 Hình 2.6: Cấu trúc thừa kế của “symbol” b) Lớp Term Term là giá trị khởi tạo cho một symbol vì vậy nó sẽ có tham chiếu đến đối tượng symbol được chứa trong nó. Term hoạt động như nút của cây giải thuật, nếu nó là gốc thì nó được phép tham chiếu đến các thuộc tính “Parent ” còn nếu nó không là root thì nó vẫn được tham chiếu đến các thuộc tính con trong đó. Thuộc tính “IsLinear” đặc trưng cho tính chất “Linear” của một Term. Để tăng tốc quá trình thực thi của thuật toán mỗi Term sẽ lưu giữ một đối tượng từ điển để theo dõi số lượng các sự kiện diễn ra, mỗi khi Term thay đổi số lượng sự kiện (bằng cách thêm, xóa hoặc thay thế các subterms ở bất kỳ độ sâu nào trong cấu trúc cây) đối tượng từ điển này sẽ cập nhật các giá trị của nó. 19 Hình 2.7: Lớp Term Các phương thức của lớp này bao gồm: Clone: Clone có nhiệm vụ nhân bản Term hiện tại và trả về một bản sao. GetSubTerm: Trả về “subterm” tại một vị trí xác định. MatchingUnification: Tính toán các thay thế cần thiết để thống nhất một Term nhất định nào đó. Nếu không có mathchingu...
NỘI DUNG
1.1 Giới thiệu 1.1.1 Hệ thống viết lại số hạng (Term Rewiting System – TRS) là gì?
Trong toán học, khoa học máy tính và logic học có một phương pháp được xem là một tập hợp mà ở đó nó bao gồm các kỹ thuật toán học, các bộ luật để phát triển phần mềm và các hệ thống phần cứng Trong công nghệ phần mềm chúng ta có thể sử dụng phương pháp này để khai thác sức mạnh của các ký hiệu và chứng minh toán học Phương pháp này chính là Hệ thống viết lại số hạng
(Term Rewriting System – TRS), với phương pháp này các quy tắc viết lại được sử dụng để xác định các thuộc tính và yêu cầu của chương trình Tất cả chúng ta đã từng học từng sử dụng hệ thống viết lại mà chúng ta không hề hay biết, ngay khi chúng ta còn ở trường học Khi chúng ta đơn giản hóa một phương trình toán học chúng ta có thể làm như sau:
(3 + 4) (4 + 2) → 7 (4 + 2) → 7 6 → 42 (1) Cách đơn giản phương trình này là việc sử dụng các phép toán cộng và nhân được bổ sung vào, các luật này giống như: 0 + 1 → 1, 0 + 2 → 2, 0 + 3 →
3, , 0 1 → 0, 0 2 → 0, với việc kết hợp các tổng để rồi tích các tổng đã tính lại với nhau ta tìm ra kết quả
Cũng có thể hiểu rằng TRS là tập các luật được xây dựng bằng các dữ liệu đầu vào, quá trình xây dựng được lặp đi lặp lại với các điều kiện khác nhau cho đến khi thu được kết quả đơn giản nhất Ý tưởng của TRS được làm rõ qua ví dụ về “Coffee Can Problem”, ta có hai giống cà phê đen và trắng ta được phép sắp xếp theo thứ tự nào đó (ngẫu nhiên) – đây là đầu vào (Input) white white black black white white black black (2) Các bộ luật (qui tắc) được quy định là: black white→black white black → black (3) black black → white white white → black
CƠ SỞ TOÁN HỌC
Giới thiệu
Trong toán học, khoa học máy tính và logic học có một phương pháp được xem là một tập hợp mà ở đó nó bao gồm các kỹ thuật toán học, các bộ luật để phát triển phần mềm và các hệ thống phần cứng Trong công nghệ phần mềm chúng ta có thể sử dụng phương pháp này để khai thác sức mạnh của các ký hiệu và chứng minh toán học Phương pháp này chính là Hệ thống viết lại số hạng
(Term Rewriting System – TRS), với phương pháp này các quy tắc viết lại được sử dụng để xác định các thuộc tính và yêu cầu của chương trình Tất cả chúng ta đã từng học từng sử dụng hệ thống viết lại mà chúng ta không hề hay biết, ngay khi chúng ta còn ở trường học Khi chúng ta đơn giản hóa một phương trình toán học chúng ta có thể làm như sau:
(3 + 4) (4 + 2) → 7 (4 + 2) → 7 6 → 42 (1) Cách đơn giản phương trình này là việc sử dụng các phép toán cộng và nhân được bổ sung vào, các luật này giống như: 0 + 1 → 1, 0 + 2 → 2, 0 + 3 →
3, , 0 1 → 0, 0 2 → 0, với việc kết hợp các tổng để rồi tích các tổng đã tính lại với nhau ta tìm ra kết quả
Cũng có thể hiểu rằng TRS là tập các luật được xây dựng bằng các dữ liệu đầu vào, quá trình xây dựng được lặp đi lặp lại với các điều kiện khác nhau cho đến khi thu được kết quả đơn giản nhất Ý tưởng của TRS được làm rõ qua ví dụ về “Coffee Can Problem”, ta có hai giống cà phê đen và trắng ta được phép sắp xếp theo thứ tự nào đó (ngẫu nhiên) – đây là đầu vào (Input) white white black black white white black black (2) Các bộ luật (qui tắc) được quy định là: black white→black white black → black (3) black black → white white white → black
Bộ qui tắc này là một ví dụ điển hình cho hệ thống viết lại Mỗi qui tắc đều diễn ra một động thái, một quy phạm đúng, đầu tiên bất kỳ hạt cà phê nào màu trắng khi được kết hợp với hạt đen thì đều cho ra màu đen và ngược lại, tiếp đến nếu hai hạt cùng màu thì sẽ cho ra hạt có màu còn lại Ví dụ dưới đây là một chuỗi các luật được lặp đi lặp lại trong suốt quá trình tìm lời giải đơn giản nhất white white black black white white black black white white black black white black black white white white white black black white white white black black white white black black white black black black black white
Mục tiêu của bài toán là tìm ra càng ít hạt cà phê càng tốt, ta có thể thấy rằng với một số lẻ hạt cà phê đen bài toán sẽ luôn tìm ra lời giải cuối cùng là một hạt màu đen Ví dụ trên cơ bản làm rõ hệ thống viết lại số hạng là gì, nó bao gồm các đầu vào, mô hình xây dựng các bộ luật (qui tắc), và đầu ra là một kết quả đơn giản nhất
Các đặc tính quan trọng của một TRS bao gồm:
Không xác đị nh: Sử dụng các luật không xác định, có nghĩa là trong một bài toán, một phép giải chúng ta có thể sử dụng các quy tắc, các luật khác nhau:
(3+4) (4+2) → 7 (4+2) → 7 4+7 2 → 7 4 +14 → 28+14 → 42 (4) Chúng ta có thể nhìn thấy ở mỗi bước của (2) các luật được sử dụng một cách linh hoạt nhưng vẫn tuân thủ đúng quy tắc toán học ta gọi đây là một chuỗi ghi đè hợp lệ Nói chung, quá trình viết lại là không xác định trước
K ế t qu ả cu ố i cùng gi ố ng nhau: Tính độc đáo của việc sử dụng các luật một cách không xác định trước nằm ở chỗ chúng đều cho ra một kết quả cuối cùng giống nhau, mặc dù đường đi lời giải khác nhau
Ch ấ m d ứ t: Mỗi lần viết lại đều có thể được mở rộng ra để dễ dàng tiếp cận kết quả, và cũng có thể loại trừ để kết thúc bài toán
H ợ p nh ấ t : Tính hợp nhất có tính chất làm đảm bảo các luật trong cùng hệ thống được viết lại bằng những cách khác nhau nhưng cho ra kết quả tương tự
Hợp nhất thì bao gồm hợp nhất cục bộ và hợp nhất toàn bộ, để làm rõ ta có ví dụ sau:
Cho R={ F, R } là một hệ thống viết lại số hạng, chúng ta nói rằng R là :
Hợp nhất cục bộ nếu : cho tất cả , , ’ , , bất kỳ khi nào → và → t’, ta có u T(F,X) như vậy t → ∗ u và t ’ → ∗ u
Hợp nhất toàn bộ nếu : cho tất cả s, t, t ’ T(F,X), bất kỳ khi nào s → ∗ t và s → ∗ t ’ , ta có u T(F,X) như vậy t → ∗ u và t ’ → ∗ u
Hình 1.1 : Tính hợp nhất Để có thể hiểu rõ về hệ thống viết lại số hạng, ta khảo sát hệ thống sau Hệ thống dùng để đặc tả phép cộng của các số tự nhiên bằng cách sử dụng hằng số 0 và hàm s với tập luật : x + 0 → x [Luật R1] x + s(y) → s(x+y) [Luật R2] x + y → y + x [Luật R3]
Trong đó, x và y là các biến số
Khi một biểu thức phù hợp với vế trái của một luật, ta có thể viết lại biểu thức đó dưới dạng vế phải
Ví dụ 1: Với biểu thức s(s(0)) + 0, nếu thay x bằng s(s(0)) (vì x là biến số nên có thể được thay bằng các biểu thức) thì biểu thức này theo đúng cấu trúc vế trái của luật R1, nên có thể viết lại thành s(s(0)) (vì áp dụng R1, kết quả là x mà x = s(s(0))) Quá trình trên có thể được biểu diễn thành: s(s(0)) + 0 → s(s(0)) [R1]
Trong hệ thống này, các số tự nhiên được biểu diễn bằng cách đếm số lượng hàm s trong một số hạng
Ví dụ 2: Số 0 được biểu diễn bằng 0, 1 được biểu diễn bằng s(0), 2 được biểu diễn bằng s(s(0))
Phép cộng được thể hiện trong các luật cũng chính là phép cộng hai số tự nhiên
Ví dụ 3: Khi thực hiện phép cộng số 1 (được biểu diễn bằng s(0)) và số 2 (được biểu diễn bằng s(s(0))), ta tìm cách áp dụng các luật để có thể loại bỏ được tất cả các dấu + trong biểu thức được tạo thành: s(0) + s(s(0)) → s(s(0) + s(0)) [R2] → s(s(s(0) + 0) [R2] → s(s(s(0))) [R3]
Như vậy kết quả của phép cộng là s(s(s(0))) là biểu diễn của số 3
Ta cũng có thể áp dụng các luật theo một thứ tự khác để ra được kết quả cuối cùng: s(0) + s(s(0)) → s(s(0)) + s(0) [R3] → s(s(s(0)) + 0) [R2] → s(s(s(0))) [R1]
Một hệ thống được đặc tả gồm các luật như trên gọi là hệ thống viết lại số hạng Việc tìm hiểu về hệ thống viết lại số hạng liên quan đến cách điều hướng các luật này và các điều kiện để đảm bảo hệ thống luật tạo ra có sức mạnh tính toán bằng với hệ thống phương trình mà nó được tạo ra từ trước đó
1.1.2 Các khái niệm cơ bản trong TRS a) Tập chữ kí
Một tập chữ kí (Signature) ∑ là một tập các ký hiệu hàm, trong đó mỗi f
∑ được liên kết với một số không âm n là bậc của f So sánh với khái niệm hàm số trong ngôn ngữ lập trình, tập chữ kí chính là tập chứa tên các hàm số với bậc của một tập chữ kí chính là số lượng thông số của hàm số đó.Tập các phần tử có cùng bậc n của ∑ được ký hiệu là ∑ (n) Hằng số là tập các phần tử có bậc 0 của
Khái niệm Term được xây dựng dựa trên các ký hiệu biến, signature Cho
Luật viết lại có điều kiện
Cho ( ∑ là một tập chữ kí và V là một tập các biến vô hạn đếm được sao cho (∑ ∩ X ≠ ∅ Một ∑- đồng nhất thức (hay đơn giản là đồng nhất thức) là một cặp , ∈ ∑, ∑, Các đồng nhất thức được viết thành s → t b) Quan hệ giản lược
Cho E là một tập các ( ∑- đồng nhất thức Quan hệ giản lược → E ⊆ ∑, x T( ∑ , V ) được định nghĩa: s → E t nếu và chỉ nếu ∃(l,r) ∈ E, p ∈ Pos(s), ∈ Sub s|p = (l) and t = s[ (r)]p
Lần giản lược đầu tiên diễn ra tại vị trí p 1 = với cặp đồng nhất thức đầu tiên và phép thay thế 1 = { x↦i(e), y↦ e , z ↦ e }
Lần giản lược thứ hai diễn ra tại vị trí p 2 = 1 với đồng nhất thức thứ 3 và phép thay thế 2 = { x ↦ e }
Lần giản lược thứ ba diễn ra ở vị trí p 3 = với đồng nhất thức thứ hai và phép thay thế 3 = { x ↦ e }
Ta lấy ví dụ ở mục 1.1 để phát triển, hệ thống được mở rộng rộng ra để biểu diễn không chỉ các số tự nhiên mà cả các số âm bằng cách thêm hàm p để mô tả các giá trị âm Như vậy, ( ∑ = { 0 , s, p } trong đó 0 là hằng số, s và p là các hàm có một thông số Để có thể biểu diễn giá trị số trong trường hợp có cả hai hàm s và p, hệ thống cần thêm vào ba luật: x + p(y) → p(x+y) [Luật R4] s(p(x)) →x [Luật R5] p(s(x)) → x [Luật R6]
Như vậy tập luật của toàn bộ hệ thống thành năm luật: x + 0 → x [Luật R1] x + s(y) → s(x+y) [Luật R2] x + y → y + x [Luật R3] s(p(x)) → x [Luật R4] p(s(x)) → x [Luật R5]
Với việc sử dụng sử dụng năm luật này ta có thể biểu diễn bất kỳ số nguyên nào
-3 được biểu diễn bằng p(p(p(0))), 2 được biểu diễn bằng s(s(0))
Tính toán tổng của hai số nguyên bất kỳ : -3+2 ta làm như sau : p(p(p(0)))+s(s(0)) → s(p(p(p(0)))+s(0)) [R2] → s(s(p(p(p(0)))+0)) [R2] → s(s(p(p(p(0))))) [R1] → s(p(p(0))) [R4] → p(0) [R4] (7) p(0) chính là dạng biểu diễn của -1.
Ứng dụng của hệ thống viết lại số hạng (TRS) trong thực tế
Các dịch vụ web có sẵn thường rất cơ bản, chỉ phục vụ cho những thao tác đơn giản của người dùng Trong khi đó, nhu cầu sử dụng của người dùng ngày càng cao, thường phải kết hợp nhiều dịch vụ web đơn này để có thể thực hiện được công việc mong muốn Các phương pháp tổ hợp dịch vụ web hiện nay còn đơn giản và tốn nhiều thời gian Với số lượng dịch vụ web ngày càng nhiều, việc tổ hợp các dịch vụ web bằng tay là không khả thi Hơn nữa, người dùng không chỉ yêu cầu tìm được dịch vụ web có các chức năng mong muốn mà còn đòi hỏi dịch vụ này phải là dịch vụ tốt nhất tìm được (chi phí nhỏ nhất, độ tin cậy cao nhất, …) Ngày nay, số lượng các dịch vụ web được cập nhật một cách liên tục đòi hỏi các chương trình tổ hợp cần phải cập nhật các thay đổi này mà không ảnh hưởng đến quá trình thực thi của chương trình
Ta có thể sử dụng hệ thống viết lại số hạng Hệ thống chuyển đổi các dịch vụ web có sẵn thành các luật với đặc tả đi kèm về chất lượng dịch vụ và điều kiện thực hiện dịch vụ Chương trình xét khả năng áp dụng từng luật và chọn ra luật áp dụng tốt nhất cho đến khi thỏa mãn được yêu cầu của dịch vụ web cần tổ hợp Trong quá trình tổ hợp, chương trình có khả năng thay đổi số lượng, đặc tả của các dịch vụ có sẵn để phù hợp với các cập nhật xảy ra
1.3.2 Xây dựng phần mềm tự động điều chế hóa chất
Ta sử dụng hệ thống viết lại số hạng để giải các bài toán khi đưa ra các luật mô tả bài toán đó cùng với đặc tả của vấn đề cần giải quyết Hệ thống dựa trên các luật có sẵn để đưa vấn đề này thành dạng chuẩn mong muốn Phần mềm bao gồm 2 thành phần chính: đầu vào (dữ liệu cần thiết để thực hiện một quá trình tạo hóa chất) và đầu ra (dữ liệu có được sau khi thực hiện điều chế) Đặc điểm này hoàn toàn giống với khái niệm luật trong hệ thống viết lại số hạng: khi một biểu thức phù hợp với vế trái của một luật, ta có thể viết lại biểu thức đó dưới dạng vế phải Mỗi phương trình điều chế sẵn có được mô tả bằng một luật trong hệ thống
Việc điều chế một hóa chất là một quá trình tìm ra thứ tự áp dụng các chất, các phản ứng có sẵn từ một tập các dữ liệu đầu vào đã có để có thể có được tập dữ liệu đầu ra như mong muốn Việc tính toán trên hệ thống viết lại số hạng cũng dựa vào biểu thức cần tính và sử dụng các luật để đưa biểu thức này về dạng chuẩn mà không thể rút gọn lại được nữa Như vậy, tự động điều chế hóa chất chỉ là một dạng hệ thống viết lại đơn giản trong đó biểu thức cần tính được dựa trên các dữ liệu đầu vào của các phản ứng hóa học Việc áp dụng các luật (được xây dựng từ các phương trình hóa học có sẵn) dừng lại khi các yêu cầu đầu ra của một hoạt động điều chế một chất nào đó được thỏa mãn.
Hướng tiếp cận của đề tài
Mục tiêu của đề tài là tìm hiểu thế nào là hệ thống viết lại số hạng – TRS, nó có gì mới được tạo lập từ đâu, đề tài mang đến cái nhìn rõ nét về mô hình và các lớp hoạt động của một TRS, qua đó xây dựng ra một ứng dụng tự động điều chế hóa chất bằng hệ thống này Ứng dụng này có khả năng tổ hợp tự động một số lượng lớn phương trình phản ứng hóa học đơn lại với nhau bằng việc đơn giản hóa các đặc tả phức tạp của chuỗi phản ứng và mô tả chúng bằng các luật theo hệ thống viết lại số hạng.
Kết chương
Trong chương này, chúng ta đã cơ bản tiếp cận cơ sở toán học về một hệ thống viết lại số hạng Một hệ thống viết lại số hạng bao gồm các khái niệm cơ bản nào, để đi giải quyết cách làm việc của một hệ thống viết lại chúng ta sẽ đi phân tích sâu hơn trong chương 2
MÔ HÌNH CẤU TRÚC SỬ DỤNG HỆ THỐNG VIẾT LẠI
Mô hình cấu trúc và các lớp xử lý
Cấu trúc của một TRS bao gồm ba phần chính :
Term Rewriting System Module (TRSM): Module này có trách nhiệm lưu giữ các cấu trúc dữ liệu chính của hệ thống
Critical Pair Module (CPM): Bao gồm các lớp cần thiết để tính toán và quản lý các cặp trọng điểm của hệ thống
Execution Module (EM): Module này có chức năng theo dõi các hoạt động được thực hiện trong một kì của hệ thống
Hình 2.1: Biểu đồ module của một Term Rewriting System
Hình 2.2: Biểu đồ module của Critical Pair
Hình 2.3: Biểu đồ module của Execution
Ngoài ra còn có một lớp phụ trợ, Parser, có nhiệm vụ phân tích tệp trs và xây dựng một đối tượng TermRewritingSystem
2.1.1 Module hệ thống viết lại số hạng Đây là một bộ phận cốt lõi của một mô hình TRS, nó lưu giữ các dữ liệu cấu trúc của hệ thống và cho phép các module khác truy cập các thuộc tính trong nó Cấu trúc dữ liệu này được chọn và biểu diễn trên một cây cú pháp, mỗi đối tượng Term đại diện cho một nút trong cây đó, và có một tham chiếu đến
Symbol trên nó Mỗi Symbol trong hệ thống viết lại số hạng chỉ được đặc trưng bởi một và chỉ một Symbol mà thôi và nó lưu trữ danh sách tất cả các nút trên các cây nơi nó được sử dụng
Mô hình dưới đây là cấu trúc của một TRSM, nó bao gồm bốn lớp thực hiện các chức năng riêng:
Hình 2.4: Mô hình lớp của TRS a) Lớp Symbol
Lớp Symbol được sử dụng để lưu trữ các đặc tính của mỗi ký hiệu trong hệ thống viết lại số hạng, một symbol có thể là một biến “variable”, một hàm
“function” hoặc cũng có thể là một hằng số “constant” Một đối tượng symbol là đại diện cho các loại của chúng và tất cả các thuộc tính liên quan của nó đều được lưu trữ trên một mảng nơi mà chúng diễn ra các sự kiện (.Instances[0], .Instances[1], Instances[2], )
Kiểu dữ liệu của Type và Notation (TermType và FunctionNotation) là một bảng liệt kê có các giá trị có thể là [Function, Variable, Constant] and [Null, Prefix, Infix, Postfix]
Notation đại diện cho cách mà một hàm bất kỳ được in ra và các symbol không phải là hàm đều là giá trị NULL
Thuộc tính Arity chỉ được sử dụng trên các ký hiệu hàm Đối với tất cả các ký hiệu khác phải là 0
Hàm Init được sử dụng bởi phương thức “constructor” và kiểm tra các ràng buộc của lớp :
Nếu symbol là một biến hoặc là một hằng số thì Arity phải bằng 0 và
Notation có giá trị là NULL
Nếu symbol là một hàm “function” Arity phải lớn hơn 0 và Notation phải khác NULL
Nếu symbol là một hàm với Infix Notation thì Arity phải bằng 2
Nếu symbol là một hàm với Postfix Notatio thì Arity phải bằng 1
Phương thức Instantiate tạo ra một Term mới và thêm nó vào danh sách cá thể
Hình 2.6: Cấu trúc thừa kế của “symbol” b) Lớp Term
Term là giá trị khởi tạo cho một symbol vì vậy nó sẽ có tham chiếu đến đối tượng symbol được chứa trong nó Term hoạt động như nút của cây giải thuật, nếu nó là gốc thì nó được phép tham chiếu đến các thuộc tính “Parent ” còn nếu nó không là root thì nó vẫn được tham chiếu đến các thuộc tính con trong đó
Thuộc tính “IsLinear” đặc trưng cho tính chất “Linear” của một Term Để tăng tốc quá trình thực thi của thuật toán mỗi Term sẽ lưu giữ một đối tượng từ điển để theo dõi số lượng các sự kiện diễn ra, mỗi khi Term thay đổi số lượng sự kiện (bằng cách thêm, xóa hoặc thay thế các subterms ở bất kỳ độ sâu nào trong cấu trúc cây) đối tượng từ điển này sẽ cập nhật các giá trị của nó
Các phương thức của lớp này bao gồm:
Clone: Clone có nhiệm vụ nhân bản Term hiện tại và trả về một bản sao
GetSubTerm: Trả về “subterm” tại một vị trí xác định
Matching/Unification: Tính toán các thay thế cần thiết để thống nhất một Term nhất định nào đó Nếu không có mathching/unification thì trả về kết quả là NULL
Replace: Thuộc tính này có nhiệm vụ thay thế các “subterm” tại một vị trí nhất định nào đó
Split: Thuộc tính này sẽ lấy vị trí của một đối số “Argument” và phân chia vị trí các Term thành ba phần: phần trước vị trí được lấy, phần subterm của vị trí được lấy, và phần sau của vị trí được lấy
ToString: Chuyển đổi Term thành kiểu text c) Lớp Rule
Các qui tắc viết lại trong TRS được đặc trưng bởi một đối tượng có tên là
“Rule” Nó tham chiếu đến hai đối tượng trong Term: the left-hand và the right- hand
Lớp Rule có ba phương thức chính:
Apply: Phương thức này chứa các tham số : Term, Position , sub Nó sẽ trả về kết quả là một Term đã được xác định vị trí
GetCriticalPairs: Phương thức cần lấy một qui tắc làm tham số và trả về là danh sách các cặp đối trọng
GetRedexes: Phương thức lấy một Term làm tham số, trả về danh sách các lần xuất hiện của qui tắc cho Term Một Redex được hình thành bởi một Position của Term và một Substitution d) Lớp TermRewritingSystem
TermRewritingSystem là lớp cốt lõi của mô hình này Nó cho phép tạo ra các hệ thống viết lại số hạng và cung cấp các phương thức giúp kiểm tra các thuộc tính của nó
List of Rules: Đây là một mảng các qui tắc của hệ thống viết lại số hạng, ta có thể truy cập đến mỗi qui tắc trong mảng (.Rules[0], Rules[1], Rules[2],
List of Variables: Đây là thư viện đặc trưng cho các symbol của một biến được dùng trong hệ thống viết lại số hạng Các biến này sẽ được truy cập bởi một tên được khai báo bằng kiểu String (.Variables[“x”], Variables[“y”], Variables[“z”], )
List of Functions: Đây là thư viện đặc trưng cho các symbol của một hàm được dùng trong hệ thống viết lại số hạng Các biến này sẽ được truy cập bởi một tên được khai báo bằng kiểu String (.Functions[“f”], Functions[“g”],
List of Constants: Đây là thư viện đặc trưng cho các symbol của một hằng được dùng trong hệ thống viết lại số hạng Các biến này sẽ được truy cập
22 bởi một tên được khai báo bằng kiểu String (.Constants[“a”], Constants[“b”],
Các phương thức Instantiate, NewRule và NewSymbol được dùng để tạo ra một phần tử mới của Term, Symbol hoặc Rule trong lớp TermRewritingSystem này
2.1.2 Module quản lý các cặp quan trọng
Module này lưu trữ các thông tin về các cặp quan trọng(Critical Pair- CP) trong hệ thống
Hình 2.10: Mô hình lớp của module Critical Pair a) Lớp Substitution
Sử dụng hệ thống viết lại số hạng giải quyết bài toán
Để sử dụng ngôn ngữ lập trình sử dụng hệ thống viết lại số hạng, chương trình cần phải hiện thực các hàm, trong các định nghĩa hàm dưới đây, hằng số cũng được xem là một biến: a) InDomain(x, s): xác định xem một biến x có thuộc Domain của phép thay thế s hay không Hàm InDomain xét từng cặp thay thế trong s (ví dụ: phép thay thế x ↦ s(0) sẽ được biểu diễn bằng cặp (x, s(0))), nếu cặp nào có phần tử đầu tiên giống x thì hàm sẽ trả về kết quả true, ngược lại thì kết quả là false b) Application(s, x): áp dụng phép thay thế s trên biến x Hàm Application xét từng cặp thay thế trong s, nếu cặp nào có phần tử đầu tiên giống x thì trả về kết quả là phần tử thứ hai
Ví dụ 18: Với s= { x ↦ s(0), y ↦ s(s(0)), z ↦ z} thì Application( s, x ) trả về kết quả là s(0)
34 c) Lift(s,t): áp dụng phép thay thế s trên một Term t:
Nếu t là một biến, hàm lift dùng hàm InDomain để kiểm tra xem biến này có thuộc Domain của phép thay thế s không o Nếu biến không thuộc Domain của s thì hàm Llift trả về giá trị của biến đó o Nếu biến thuộc Domain của s, trả về kết quả của hàm Application o Nếu t không phải là biến thì t có dạng funct(t1, …, tn), hàm Lift áp dụng phép thay thế trên từng subterm để ra được t1’, …, tn’ và trả về kết quả là funct(t1’, …, tn’)
Hình 2.27: Các bước thực hiện của hàm Lift(s,t) d) Occurs( x, t ): kiểm tra biến x có là biến của Term t hay không
Nếu t là 1 biến, hàm sẽ trả về true nếu t= x; ngược lại trả về false
Nếu t không phải là biến thì t có dạng funct(t1, …, tn) Kết quả của hàm Occurs là phép toán Or của kết quả việc thực hiện hàm Occurs trên từng subterm con của t e) Rewrite(r,t): áp dụng tập luật r trên term t Một luật VT → VP được biểu diễn bằng cặp ( VT, VP )
Nếu tập luật rỗng, báo lỗi
Nếu tập luật có ít nhất một luật, xét luật đầu tiên trong tập luật Dùng hàm match (sẽ đặc tả sau) để kiểm tra xem luật này có khả năng áp dụng trên term t không o Nếu có khả năng áp dụng, hàm match sẽ trả về một phép thay thế để có thể áp dụng luật đã xét Khi đó, ta sử dụng hàm lift để áp dụng phép thay thế này trên vế phải của luật o Nếu không có khả năng áp dụng, ta tiếp tục gọi hàm Rewrite trên các luật còn lại của tập luật
Hình 2.28: Các bước thực hiện của hàm Rewrite(r,t) f) Match(p, t): kiểm tra xem term t có thỏa mãn Pattern p hay không Nếu có, trả về phép thay thế phù hợp Hàm Match gọi hàm Matches với hai thông số: thông số thứ nhất là một tập hợp có một phần tử là cặp số (p, t), thông số thứ hai là một tập rỗng g) Matches(add, ori): tạo ra thêm các cặp thay thế mới vào phép thay thế ori bằng cách thêm vào phép thay thế add Hàm Matches báo lỗi nếu không thể hợp nhất được 2 phép thay thế này
Nếu add rỗng, trả về kết quả là phép thay thế ori
Nếu add không rỗng, xét cặp thay thế đầu tiên (l, r):
36 o Nếu l là một biến x, dùng hàm InDomain để kiểm tra xem biến x có nằm trong Domain của phép thay thế ori không
Nếu có thì kiểm tra xem r có trùng với kết quả áp dụng phép thay thế ori trên biến x không
Nếu có thì tiếp tục dùng hàm Matches để xét các cặp thay thế còn lại của add (vì phép thay thế này đã tồn tại)
Nếu không thì báo lỗi ( vì cặp thay thế đầu tiên của add mâu thuẫn với phép thay thế ori)
Nếu biến x không nằm trong Domain của ori thì thêm phép thay thế này vào trong phép thay thế ori và áp dụng hàm Matches trên các phép thay thế còn lại của add o Nếu l là một Term t và r là một biến x thì báo lỗi (vì phép thay thế này không hợp lệ) o Nếu l và r đều có dạng là một hàm của các subterm: l = funcl(l1, … ln ), r = funcr(r1, …rm)
Nếu funcl và funcr là cùng một hàm (khi đó số lượng thông số phải bằng nhau nên n=m), thay thế cặp (l, r) bằng các cặp (l1, r1), …, (ln, rn) trong add và áp dụng hàm Matches trên phép thay thế add vừa tạo
Nếu funcl khác funcr thì báo lỗi vì phép thay thế này không hợp lệ
Hình 2.29: Các bước thực hiện của hàm Matches(add, ori) h) Normal(r, t): Trả về dạng chuẩn của Term t dựa trên tập luật r
Nếu Term t là biến x, hàm trả về chính biến này (vì biến là đã ở dạng chuẩn)
Nếu Term t là một hàm funct có các subterm: t1, …, tn, gọi hàm Normal trên các subterm này để được danh sách subterm mới đều đã ở dạng chuẩn: t1’,
…, tn’ Gọi u = funct(t1’, …, tn’) Gọi hàm Rewrite(r, u) để biến đổi u theo tập luật r, được kết quả u’ Tiếp tục gọi hàm Normal trên u’ để ra được kết quả cuối cùng (Nếu kết quả của hàm Rewrite(r, u) trả về lỗi thì u chính là kết quả cần tìm)
Hình 2.30: Các bước thực hiện của hàm Normal(r,t)
2.2.2 Ví dụ Để hiểu rõ hơn về cách sử dụng hệ thống viết lại số hạng trong lập trình, ta đi vào từng bước phân tích các bước tính toán được giá trị Term t = s(0) + s(s(0)) từ hệ thống viết lại số hạng dưới đây: x + 0 → x [Luật R1] x + s(y) → s(x+y) [Luật R2] x + y → y + x [Luật R3]
Giá trị của Term sẽ được tính toán bằng cách gọi hàm: Normal (r, s(0) + s(s(0))) (Với r là tập luật gồm 3 luật của hệ thống)
Term cần tính là hàm + với 2 thông số là t1 = s(0) và t2 = s(s(0)) Do đó, các thông số này cần được chuyển sang dạng chuẩn: t’1 = Normal(r, s(0)), t’2 =
Normal(s(s(0)) Giá trị của Term t là giá trị trả về của Rewrite( t’1 + t’2 ) o t’1 = Normal(r, s(0) ): s(0) là hàm có thông số bằng 0, cần tính Normal(0) và tính Rewrite( r, s(Normal(0)) )
0 là một biến nên t’1 = Normal(0) = 0
Rewrite(r, s(Normal(0))) = Rewrite(r, s(0)): sử dụng hàm Match để so sánh s(0) với vế trái của các luật xem có khả năng áp dụng luật nào trong tập luật không Dễ thấy s(0) không thể tạo ra phép thay thế nào khi được xét với các luật (Vế trái của 3 luật đều có hàm + trong khi s(0) lại không có) Rewrite(r, s(0)) = s(0)
Kết quả: t’1 = s(0) o t’2 = Normal( r, s(s(0))): s(s(0) ) là hàm có thông số bằng s(0) → cần tính Normal(s(0)) và tính Rewrite( r, s(Normal(s(0))) )
Như trên đã tính: Normal(s(0)) = s(0)
Rewrite( r, s(Normal(s(0))) ) = Rewrite(r, s(s(0))): sử dụng hàm Match để so sánh s(s(0)) với vế trái của các luật xem có khả năng áp dụng luật nào trong tập luật không Dễ thấy s(s(0)) không thể tạo ra phép thay thế nào khi được xét với các luật (Vế trái của 3 luật đều có hàm + trong khi s(s(0)) lại không có) Rewrite(r, s(s(0))) = s(s(0))
Rewrite(t’1 + t’2) = Rewrite(s(0) + s(s(0))): sử dụng hàm Match để so sánh s(0) + s(s(0)) với vế trái của các luật theo thứ tự xem có khả năng áp dụng luật nào trong tập luật không o Đối với luật R1 (x + 0 → x), vế trái là hàm + với một thông số là 0 nên không trùng (match) với s(0) + s(s(0)) o Đối với luật R2 (x + s(y) → s(x+y)), sử dụng hàm Match, ta được phép thay thế: = { x ↦ s(0), y ↦ s(0) } Áp dụng phép thay thế này lên vế phải, ta được kết quả: s(s(0) + s(0)) o Quá trình trên lại tiếp tục được áp dụng cho đến khi không có luật nào phù hợp thì dừng lại Khi đó ta được kết quả cuối cùng của giá trị Term t là: s(s(s(0))).
Kết chương
Chương này ta đã đi giải quyết việc hình thành một hệ thống viết lại thông qua việc tìm hiểu các mô hình cấu trúc và các lớp xử lý, để làm rõ một hệ thống viết lại số hạng được hoạt động như thế nào chúng ta sẽ đi giải quyết trong chương ba bằng việc đi áp dụng hệ thống viết lại bằng một ứng dụng
CHƯƠNG III ỨNG DỤNG MINH HỌA BẰNG PHẦN MỀM
TỰ ĐỘNG ĐIỀU CHẾ HÓA CHẤT
Trong chương 2, chúng ta đã đi tìm hiểu về mô hình và cấu trúc các lớp hoạt động của một hệ thống viết lại số hạng Chương này ta sẽ sử dụng các tính chất của hệ thống viết lại số hạng để minh họa một ứng dụng.
Ý tưởng bài toán
Vấn đề cốt lõi của một TRS là việc đưa ra một tập đầu vào (Input), một bộ luật (hay còn gọi là bộ qui tắc) đã được xây dựng sẵn từ đó đưa ra các dạng chuẩn mà ta mong muốn (Output) Để giải quyết một bài toán bằng hệ thống này ta đều phải xây dựng dựa trên ba thành phần chính được nêu trên
Bài toán ứng dụng tự động điều chế hóa chất gồm ba thành phần chính: đầu vào (các chất hóa học cần thiết để thực hiện các phản ứng hóa học), một bộ luật (các phương trình phản ứng) và đầu ra (các chất có được sau khi thực hiện các phương trình phản ứng) Đặc điểm này hoàn toàn giống với khái niệm luật trong hệ thống viết lại số hạng: khi một biểu thức phù hợp với vế trái của một luật, ta có thể viết lại biểu thức đó dưới dạng vế phải Mỗi phương trình phản ứng sẵn có được mô tả bằng một luật trong hệ thống
Hình 3.1: Sơ đồ khối bài toán
Việc điều chế hóa chất là một quá trình tìm ra thứ tự áp dụng các phản ứng hóa học có sẵn từ một tập các dữ liệu đầu vào đã có để có thể có được tập dữ liệu đầu ra như mong muốn Việc tính toán trên hệ thống viết lại số hạng cũng dựa vào biểu thức cần tính và sử dụng các luật để đưa biểu thức này về dạng chuẩn mà không thể rút gọn lại được nữa Như vậy, bài toán điều chế hóa chất chỉ là một dạng hệ thống viết lại đơn giản trong đó biểu thức cần tính được dựa trên các dữ liệu đầu vào Việc áp dụng các luật (được xây dựng từ các phương trình sẵn có) dừng lại khi các yêu cầu đầu ra của bài toán đã được thỏa mãn
Quá trình tính toán để tạo ra một chất được thực hiện như sau:
- Các đầu vào và đầu ra cần được đọc vào để bắt đầu quá trình tổ hợp Đầu vào dùng là điểm bắt đầu, đầu ra là điều kiện để dừng chương trình Nếu không còn luật nào có khả năng được áp dụng nhưng đầu ra của ứng dụng điều chế vẫn chưa được thỏa mãn thì báo lỗi về cho người dùng
- Chương trình bắt đầu dò từng luật trong danh sách để xét xem luật hiện tại có khả năng áp dụng không
Bảng 3.1: Bảng giá trị đầu vào, đầu ra của hệ thống Ở đây ta lấy ví dụ: Chúng ta cần điều chế chất Na2CO3 từ ba chất đầu vào là Na, H2O, CO2, ta xây dựng bộ luật gồm :
PT1: and(Na, H2O) -> and(NaOH)
PT2: and(NaOH, CO2) -> and(Na2CO3) Chương trình sẽ dừng khi đầu ra được tìm thấy là chất Na2CO3
Thông tin Đầu vào luật đang xét Na,H2O,CO2 Đầu ra luật đang xét Na2CO3
Các lớp xử lý của hệ thống viết lại số hạng
3.2.1 Lớp luật có điều kiện – ConditionalRule public class ConditionalRule:Rule { private String condition; public ConditionalRule(String nameRule, Term leftTerm, Term rightTerm, String newCondition):base(nameRule, leftTerm, rightTerm)
} public bool isConditionSatisfied(Substitutions subs) {
String replaced_condition = condition; bool value = false;
String assignment = ""; for(int i=0;i return if(term.IsVariable()|| term.IsConstant()) { return term;
} // nếu term là một hàm > thay đổi tất cả các tham chiếu đến dạng bình thường
Term[]arrPars = new Term[term.GetNumberOfParameters()]; for(int i = 0; i return null if(rules.Count == 0)
46 Debug.WriteLine("The rule set of system is empty."); return null;
} // tìm luật đầu tiên và áp dụng int i = 0; bool found = false; while (ioriginal.GetNumberOfParame ters())
} bool match = false; savedIndex.Clear(); for(int iPar=0;iPar