ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Hoàng Thế Tùng
XÂY DỰNG HỆ THỐNG GIẢI BÀI TOÁN SMT
HIỆU NĂNG CAO – PHẦN MÁY TRẠM
KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Ngành: Công nghệ phần mềm
Cán bộ hướng dẫn: TS. Trương Anh Hoàng
Cán bộ đồng hướng dẫn:
TS. Phạm Ngọc Hùng
HÀ NỘI - 2010
Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm
2010
Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN
GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng
Lời cảm ơn
Trước hết, tôi xin gửi lời cảm ơn chân thành và sâu sắc đến Tiến sỹ Trương
Anh Hoàng và Tiến sỹ Phạm Ngọc Hùng, những người đã trực tiếp hướng dẫn tôi
trong suốt quá trình nghiên cứu và phát triển đề tài nghiên cứu này. Để có được
những kết quả nghiên cứu như hiện nay, tôi vô cùng biết ơn sự quan tâm, hướng dẫn
nhiệt tình của hai thầy trong thời gian vừa qua.
Tôi xin chân thành cảm ơn các thầy cô trong trường Đại học công nghệ, Đại
học Quốc Gia Hà Nội nói chung, và các thầy cô trong khoa công nghệ thông tin nói
riêng, những người đã nhiệt tình giảng dạy, giúp tôi có những kiến thức quý báu để tôi
có thể hoàn thành được đề tài luận văn này.
Tôi xin bày tỏ lòng cảm ơn đến các anh chị cao học, và các bạn trong nhóm
nghiên cứu đã cùng tôi tìm hiểu và xây dựng hoàn chỉnh hệ thống giải quyết bài toán
Satisfiability Modulo Theories (SMT) với hiệu năng cao, giúp tôi có thể hoàn thành tốt
phần nghiên cứu của mình.
Và cuối cùng, tôi xin gửi lời cảm ơn đến gia đình, bạn bè và những người thân đã
bên cạnh, động viên giúp tôi hoàn thành tốt luận văn của mình.
Hà Nội, tháng 05/2010
Hoàng Thế Tùng
Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm
2010
Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN
GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng
Tóm tắt nội dung
Vấn đề giải quyết các bài toán Satisfiability Modulo Theories (SMT) hiện nay
đang được nghiên cứu và phát triển ở nhiều nơi trên thế giới. Cho đến ngày nay, nhiều
trường đại học, tổ chức đã nghiên cứu và đưa ra những bộ giải giải quyết bài toán
SMT (hay còn gọi là SMT solver). Ví dụ như Z3 của Mcrosoft, yices của SRI, CVC3
của một số trường đại học danh tiếng của Mỹ. hay boolector, openSMT của một số
trường đại học danh tiếng khác… Tuy nhiên, mỗi solver có một lợi thế ưu điểm riêng
đối với các dạng khác nhau của bài toán SMT. Vậy vấn đề đặt ra là làm sao để tận
dụng được hết các ưu điểm đó cho từng bài toán.
Để giải quyết vấn đề ấy, nhóm nghiên cứu đã nghiên cứu và xây dựng một hệ
thống giải quyết bài toán SMT trực tuyến, kết hợp nhiều bộ giải khác nhau để đưa ra
được lời giải tối ưu cho từng bài toán SMT.
Trong khuôn khổ khóa luận tốt nghiệp này của cá nhân tôi, tôi đã xây dựng hai
hệ thống con của hệ thống đã nêu trên là hệ thống trên máy khách (users) và trên máy
trạm (sử dụng để gọi các Solver). Hệ thống trên máy khách sẽ đảm nhiệm việc cung
cấp một giao diện lập trình ứng dụng (Application Programming Interface hay API) để
người dùng sử dụng có thể xây dựng bài toán SMT theo chuẩn thư viện SMT (SMT-
LIB) và sau đó là gửi bài toán đến máy chủ (server). Hệ thống trên máy trạm sẽ tiếp
nhận bài toán từ máy chủ và gọi các bộ giải để giải quyết bài toán đó và gửi về máy
chủ kết quả.
Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm
2010
Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN
GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng
Mục lục
Chương 1.
Mở đầu 1
1.1.
Giới thiệu 1
1.2.
Bài toán đặt ra 1
1.3.
Cấu trúc nội dung tài liệu 2
Chương 2.
Kiến thức nền tảng 3
2.1.
Giới thiệu SMT 3
2.2.
Bộ giải SMT (SMT solver) 3
2.3.
Thư viện SMT (SMT-LIB) 4
2.3.1.
Cấu trúc cơ bản của SMT-LIB 4
2.3.2.
Khuôn dạng của SMT-LIB 5
Chương 3.
Phân tích hệ thống 12
3.1.
Mô hình hệ thống 12
3.2.
Mô hình ca sử dụng của hệ thống 13
3.3.
Mô hình hoạt động 15
Chương 4.
Phương hướng giải quyết vấn đề 17
4.1.
Lựa chọn phương thức kết nối 17
4.2.
Lựa chọn ngôn ngữ lập trình 17
4.3.
Xác định dữ liệu đầu vào, đầu ra của hệ thống 17
Chương 5.
Mô tả hệ thống 19
5.1.
Quy định cách thức giao tiếp với máy chủ 19
5.2.
Phần máy khách 20
5.2.1.
Quy định giao tiếp với máy chủ 20
5.2.2.
Các lớp của hệ thống máy khách 21
5.2.2.1.
Lớp config 21
5.2.2.2.
Lớp Client: 21
5.2.2.3.
Lớp NetSolver 21
5.2.2.4.
Lớp Bench_attribute 22
5.2.2.5.
Lớp Formula 22
5.2.2.6.
Lớp func_decl 23
5.2.2.7.
Lớp pred_decl 24
Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm
2010
Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN
GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng
5.2.2.8.
Lớp Term 24
5.2.2.9.
Lớp annotation 24
5.2.2.10.
Lớp varDecl 24
5.2.2.11.
Lớp fvarDecl 24
5.2.2.12.
Lớp Arith_symb 25
5.2.2.13.
Lớp Identifier 25
5.2.2.14.
Lớp quant_var 25
5.3.
Phần máy trạm 26
5.3.1.
Cơ chế làm việc của máy trạm 26
5.3.2.
Quy định giao tiếp với máy chủ 27
5.3.3.
Hoạt động của hệ thống máy trạm 28
5.3.4.
Các lớp của hệ thống máy trạm 30
5.3.4.1.
Biểu đồ lớp của hệ thống 30
5.3.4.2.
Lớp config 30
5.3.4.3.
Lớp sessionID 30
5.3.4.4.
Lớp Solver 31
5.3.4.5.
Lớp ReadThread 31
5.3.4.6.
Lớp WriteThread 34
5.4.
Tổng kết 34
Chương 6.
Cài đặt và thử nghiệm 36
6.1.
Cài đặt 36
6.2.
Bài toán thực nghiệm 36
6.2.1.
Xây dựng bài toán SMT dựa trên các hàm API 36
6.2.2.
Thử nghiệm kết nối với máy chủ và toàn hệ thống 37
Hướng phát triển tiếp theo của hệ thống 40
Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm
2010
Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN
GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng
Danh sách các bảng trong tài liệu
Bảng 1: Luật sinh một toán hạng 7
Bảng 2: Luật sinh một công thức 8
Bảng 3: Luật sinh một thuyết 8
Bảng 4: Luật sinh một logic 8
Bảng 5 Luật sinh một chuẩn 9
Bảng 6: Các lý thuyết nền được quy chuẩn trong SMT-LIB 1.2 9
Bảng 7: Các Logic quy chuẩn được đưa ra trong SMT-LIB 1.2 10
Bảng 8 Bảng dữ liệu các tệp tin đầu vào thử nghiệm 37
Bảng 9: Kết quả thời gian của thực nghiệm 37
Bảng 10: Kêt quả trả về của thực nghiệm 38
Danh sách các hình trong tài liệu
Hình 3.1 Mô hình hệ thống giải bài toán SMT hiệu năng cao. 12
Hình 3.2: Mô hình ca sử dụng của hệ thống 14
Hình 3.3: Mô hình hoạt động của hệ thống 15
Hình 5.1: Biểu đồ lớp của hệ thống máy trạm 30
Danh sách từ viết tắt trong tài liệu
Từ viết tắt Từ chuẩn Diễn giải
SMT Satisfiability Modulo Theories
Các lý thuyết module về
tính thỏa được
SMT-LIB
Satisfiability Modulo Theories -
Liblary
Thư viện các lý thuyết
module về tính thỏa được
API
Application Programming
Interface
Giao diện lập trình ứng
dụng
Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm
2010
Trang 1
Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN
GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng
Chương 1. Mở đầu
1.1. Giới thiệu
Hiện nay, cùng với sự phát triển bùng nổ của hầu hết các ngành khoa học,
ngành khoa học máy tính cũng có những tiến bộ to lớn. Song song với đó, nhu cần
nghiên cứu về việc giải hoặc đưa ra tính khả thi của một biểu thức logic ngày càng
được quan tâm và phát triển. Bởi lẽ, rất nhiều các ứng dụng hay những sự tính toán
trong ngành khoa học máy tính cần đến những công thức logic phức tạp. Trong
khoảng hai thập niên gần đây, ngành khoa học máy tính đã có những tiến bộ lớn đối
với việc tự động chứng minh hay bác bỏ tính đúng đắn của một biểu thức logic. Tuy
nhiên việc chứng minh các biểu thức logic sẽ khó khăn hơn nhiều nếu đặt chúng trong
một nền lý thuyết thay vì chứng minh một cách tổng quát [1,2]. Những vấn đề này
được gọi là các lý thuyết module về tính thỏa được (Satisfiability Modulo Theories
hay còn được viết tắt là SMT [1]).
Cho đến nay, nhiều trường đại học cùng những nhà nghiên cứu khoa học máy
tính đã có những nghiên cứu, sản phẩm để giải quyết vấn đề này. Tuy nhiên, việc xây
dựng một bộ giải các vấn đề SMT tối ưu cho mọi trường hợp và rất khó khăn. Vì vậy,
vấn đề được đặt ra là kết hợp các bộ giải SMT đó để có được một bộ giải tối ưu nhất
về mặt thời gian.
1.2. Bài toán đặt ra
Đối với việc giải quyết các vấn đề SMT, nhiều trường đại học cũng như các cơ
quan, tổ chức lớn trên thế giới đã có những nghiên cứu và đưa ra những sản phẩm của
mình. Tuy nhiên, với mỗi sản phẩm, họ đưa vào những thuật toán khác nhau để giải
quyết vấn đề này. Trong khuôn khổ đồ án, việc nghiên cứu cơ chế, và tính đúng đắn
của những bộ giải này không được đề cập đến (kết quả đưa ra của các bộ giải sẽ được
coi là luôn đúng đắn) mà sẽ tập trung vào việc sử dụng những bộ giải này như là
những công cụ giải quyết vấn đề SMT được đưa vào. Với những kết quả đưa ra bởi
các bộ giải này, cần có một kết trả được trả về tối ưu nhất về mặt thời gian.
Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm
2010
Trang 2
Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN
GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng
Để giải quyết vấn đề nói trên, cần có một hệ thống phân phối các vấn đề SMT
cho các bộ giải và nhận về kết quả trả về tối ưu nhất về mặt thời gian. Ngoài ra để tiện
cho việc sử dụng và phát triển hệ thống, cần có một thư viện các hàm nhúng hỗ trợ
người sử dụng xây dựng các vấn đề SMT.
1.3. Cấu trúc nội dung tài liệu
Tài liệu này nhằm giới thiệu về bài toán SMT và mô tả hệ thống giải quyết bài
toán đó trực tuyến. Chương mở đầu của tài liệu giới thiệu qua về bài toán SMT và bài
toán đặt ra cho việc xây dựng hệ thống giải quyết bài toán SMT đó.
Chương thứ hai của tài liệu đề cập tới một số kiến thức về SMT và cấu trúc,
khuôn dạng của bài toán SMT được xây dựng theo chuẩn SMT-LIB. Chương này được
coi là kiến thức nền tảng để xây dựng hệ thống giải quyết bài toán SMT hiệu năng cao.
Những kiến thức trong chương này sẽ được sử dụng để xây dựng các hàm API cho hệ
thống máy khách và một số thành phần của hệ thống máy trạm.
Chương ba và chương bốn là phần phân tích và hướng giải quyết vấn đề xây
dựng hệ thống giải bài toán SMT hiệu năng cao. Chương ba sẽ tập trung hơn vào vấn
đề phân tích, đưa ra một cái nhìn tổng quan về hệ thống và quy trình hệ thống sẽ hoạt
động. Chương bốn sẽ là một số lựa chọn giải pháp để giải quyết một số vấn đề khi xây
dựng hệ thống.
Hệ thống giải bài toán SMT hiệu năng cao phần máy trạm và máy khách sẽ được
mô tả chi tiết trong chương năm. Ở chương này, hệ thống các hàm API trên máy khách
sẽ được mô tả rất chi tiết và có thể coi là tài liệu hướng dẫn cho người dùng sử dụng
các hàm API này.
Chương sáu sẽ đưa ra phần thực nghiệm và đánh giá kết quả của hệ thống. Trong
chương này, kết quả của một số thực nghiệm hệ thống sẽ được đưa ra nhằm đưa ra một
số ưu điểm mà hệ thống có được.
Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm
2010
Trang 3
Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN
GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng
Chương 2. Kiến thức nền tảng
2.1. Giới thiệu SMT
Tính thỏa mãn là một trong những vấn đề quan trọng nhất của ngành khoa học
máy tính. Các vấn đề cần tính thỏa mãn được ứng dụng trong cả phát triển phần cứng
cũng như phần mềm, đặc biệt là kiểm định phần cứng, kiểm thử, lập lịch, đồ thị [3].
Trong các lĩnh vực nói trên, nhiều các ứng dụng được xây dựng dựa trên việc
tạo ra các công thức tiền tố và việc chứng minh tính hợp lệ của chúng. Cho dù hai thập
niên gần đây, việc chứng minh tính hợp lệ của các định lý, biểu thức tiền tố có những
tiến bộ đáng kể, tuy nhiên, không phải công thức nào cũng có thể chứng minh một
cách tự động được. Lý do của vấn đề này là bởi lẽ nhiều công thức không quan tâm
đến tính khả thi trong trường hợp tổng quát mà chỉ được quan tâm trong một lý thuyết
nền tảng [2,1]. Việc nghiên cứu tính khả thi của các công thức trong một lý thuyết nền
tảng được gọi là các lý thuyết module về tính thỏa được (Satisfiability Modulo
Theories hay SMT) và các công cụ để chứng minh một cách tự động các tính khả thi
của những vẫn đề SMT được gọi là bộ giải SMT (SMT solver).
Lý thuyết về SMT sẽ được đề cập cụ thể hơn trong phần giới thiệu về thư viện
SMT.
2.2. Bộ giải SMT (SMT solver)
Trên thực tế, việc xây dựng và sử dụng các bộ giải SMT được phát triển khá
sớm, từ đầu những năm 1980. Tại thời điểm đó, một số bộ giải được xây dựng bởi
Greg Nelson và Derek Oppent tại trường đại học Stanford , Robert Shostak tại SRI, và
Robert Boyer và J Moore tại trường đại học ở Texas. Đến cuối những năm 1990, việc
nghiên cứu SMT hiện đại dựa trên lợi thế của công nghệ SAT đã xây dựng nhiều bộ
giải SMT tiến bộ hơn [4].
Như đã đề cập ở trên, trong khuôn khổ đồ án, việc đánh giá về tính đúng đắn,
các nghiên cứu về thuật giải của từng bộ giải sẽ không được đề cập đến. Vấn đề được
Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm
2010
Trang 4
Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN
GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng
đặt ra ở đây là kết quả của bộ giải nào sẽ được đưa ra sớm nhất. Hiện nay, có rất nhiều
các bộ giải như Absolver, Boolector, CVC3, OpenSMT, Yices, Z3…
Do yêu cầu của hệ thống là phải đưa ra được giá trị thỏa mãn (nếu bài toán
SMT đó có thỏa mãn) nên bộ giải hệ thống sử dụng phải hỗ trợ chức năng này. Ngoài
ra hệ thống sử dụng đầu vào theo chuẩn của SMT-Lib và ngắt thời gian giải một bài
toán (trong trường hợp bài toán cần thời gian giải quá lớn), do đó, bộ giải cần phải có
hỗ trợ những chức năng này khi hoạt động. Từ những yêu cầu đó, nhóm nghiên cứu và
phát triển hệ thống đã quyết định sử dụng song song hai bộ giải là Yices của SRI
International và Z3 của Microsoft. Hai bộ giải này tuy có cấu trúc khác nhau nhưng
cùng được dựa trên thuật giải DPLL (Davis-Putnam-Logemann-Loveland) [5]. Việc
tìm hiểu, phân tích cấu trúc cũng như thuật toán của hai bộ giải này sẽ không được đề
cập cụ thể ở đây.
2.3. Thư viện SMT (SMT-LIB)
Đề giải quyết các vấn đề SMT, việc nghiên cứu và đưa ra một chuẩn đầu vào là
rất cần thiết. Thông thường, mỗi bộ giải SMT đều có một quy định riêng cho chuẩn
đầu vào của mình, tuy nhiên như vậy sẽ thực sự khó khăn đối với việc thực thi một đầu
vào bởi các bộ giải khác nhau. Vì vậy, việc nghiên cứu và đưa ra một chuẩn đầu vào
thống nhất là rất cần thiết.
Khoảng tháng tư năm 2004, Silvio Rainise và Cesare Tinelli đã đưa ra chuẩn về
SMT-LIB đầu tiên [6]. Thời gian sau đó, họ liên tục cải tiến chuẩn đầu vào, bổ sung
những quy định chuẩn, thuyết mới. Cho đến nay, hai tác giả này đã và đang xây dựng
chuẩn SMT-LIB đã có phiên bản 2.0, tuy nhiên việc xây dựng đầu vào dựa trên chuẩn
mới này chưa được phổ biến. Hầu hết các bộ giải cũng như đầu vào cho các vấn đề
SMT-LIB đều được sử dụng bởi chuẩn 1.2 mà họ đã xây dựng vào khoảng tháng 8
năm 2006.
2.3.1. Cấu trúc cơ bản của SMT-LIB
Như đã nói ở trên, vấn đề SMT là việc kiểm tra biểu thức logic φ có thỏa mãn
được hay không trong lý thuyết nền T hay có một khuôn mẫu của T là khả thi. Vì vậy,
kiến trúc cơ bản của một SMT-LIB thường bao gồm các vấn đề sau [7]:
Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm
2010
Trang 5
Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN
GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng
- Một thủ tục logic cơ sở (underlying logic): Định dạng SMT-LIB hiện tại có hai
định nghĩa về ngữ nghĩa của logic cơ sở. Thứ nhất là dịch nghĩa sang những
biểu thức tiền tố cổ điển, có nghĩa là thủ tục của logic cơ sở giúp cho việc
chuyển đổi sang khung làm việc của công cụ có sẵn hoặc giúp kiểm tra kết quả
một cách dễ dàng hơn. Nghĩa thứ hai là chi phối ngữ nghĩa đại số dựa trên
nhiều khuôn mẫu rút gọn.
- Một lý thuyết nền (background theory): là những lý thuyết nền dùng để kiểm
chứng tính thỏa mãn. Những lý thuyết cơ bản bao gồm lý thuyết số thực, lý
thuyết mảng Phiên bản hiện tại của SMT-LIB chỉ hỗ trỡ những lý thuyết cơ
bản này.
- Một ngôn ngữ đầu vào (input language): Là lớp các biểu thức được chấp nhận
như là đầu vào của SMT-LIB.
2.3.2. Khuôn dạng của SMT-LIB
Một thư viện SMT được xây dựng theo chuẩn và dựa trên những định nghĩa sau
(theo [7]):
Định nghĩa 1 (Ký hiệu của SMT-LIB – SMT-LIB signature): Một ký hiệu SMT-
LIB Σ là một bộ dữ liệu bao gồm:
- Một tập không rỗng
∑
⊆
ௌ
ܲ các ký hiệu phân cấp (sort symbol), một tập
hợp ký hiệu hàm (function symbol)
∑
⊆
ி
ܨ và tập hợp các ký hiệu vị từ
(predicate symbol)
∑
⊆
ܲ;
- Một toàn ánh (total mapping) từ các biến (term variables) X tới Σ
S
;
- Một quan hệ toàn phương (total relation) từ Σ
F
đến (Σ
S
)
+
, một chuỗi các
thành phần của Σ
S
, không bao giờ có một cặp định dạng (f,s
1
…s
n
s) và
(f,s
1
…s
n
s’) với s và s’ khác nhau;
- Một quan hệ toàn phương từ Σ
P
tới (Σ
S
)*, thứ tự các thành phần Σ
P
.
Định nghĩa 2 (Công thức trong SMT-LIB – SMT-LIB formula): Các công thức
trong ngôn ngữ SMT-LIB là một tập hợp tất cả các công thức đúng cú pháp
đóng (closed well-formed formula).
Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm
2010
Trang 6
Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN
GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng
Định nghĩa 3 (khai báo lý thuyết – theory decl): chỉ tồn tại một khai báo lý
thuyết trong một bài toán SMT-LIB và phải thỏa mãn những giới hạn sau:
- Chúng bao gồm các khai báo của thuộc tính “sort” và “definition”;
- Chúng chứa ít nhất một khai báo với một thuộc tính;
- Không tồn tại khai báo định dạng f,s
1
…s
n
s và f,s
1
…s
n
s’ cho cùng một ký
tự hàm f mà s và s’ khác nhau;
- Tất cả các rút gọn trong khai báo ký tự hàm, vị từ được liệt kê trong khai
báo thuộc tính “sort”;
- Định nghĩa của lý thuyết được quy định trong thuộc tính “definition” và
chỉ liên quan đến các khai báo ký tự phân cấp, ký tự hàm và ký tự vị từ;
- Công thức trong thuộc tính “axiom” được xây dựng trên các khái báo ký
tự trong các thuộc tính “sort”, “funs”, “pred”.
Định nghĩa 4 (Khai báo Logic): Chỉ có một luật Logic được khai báo trong một
bài toán SMT và phải được thỏa mãn các giới hạn sau:
- Chúng bao gồm các khai báo thuộc tính “theory” và “language”;
- Chúng chứa ít nhất một khai báo đối với một thuộc tính;
- Giá trị của thuộc tính “theory” phải trùng với tên của thuyết T cho vài khai
báo của D
T
trong SMT-LIB.
Định nghĩa 5 (Khai báo về chuẩn): luật khai báo chuẩn phải thỏa mãn những
giới hạn sau:
- Chúng chứa chính xác một khai báo của thuộc tính “logic”, “formula” và
“status”;
- Giá trị của thuộc tính “logic” phải trùng khớp với tên của logic L cho vài
khai báo D
L
trong SMT-LIB;
- Mỗi một ký hiệu được khai báo trong thuộc tính “extrasorts”, “extrafuns”
và “extrapred” cần phải là một phần của các ký hiệu được định nghĩa trong
thuộc tính “language” của logic L;
- Có thể có hơn một khai báo của thuộc tính “extrasort”;
Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm
2010
Trang 7
Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN
GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng
- Có thể có hơn một khai báo của thuộc tính “extrafuns”, và mỗi thuộc tính
“funs” của khai báo thuyết liên kết tới D
L
phải thỏa mãn yêu cầu 3 của
định nghĩa 3;
- Ký hiệu rút gọn trong khai báo “extrafuns” hoặc “extrapred” hoặc được
khai báo trong “extrasort” hoặc thuộc về ký hiệu của logic L;
- Công thức trong khai báo thuộc tính “assumption” và “formula” là ngôn
ngữ của L và các ký hiệu của chúng được khai báo trong thuộc tính
“extrasorts” “extrafuns” và “extrapred”.
Từ những định nghĩa trên, việc xây dựng một bài toán SMT dựa trên chuẩn
SMT-LIB sẽ theo cấu trúc sau [7]:
Bảng 1: Luật sinh một toán hạng
(1)
< simple_identifier> ::= Chuỗi các ký tự, số, dấu chấm(.), nháy đơn(‘)
và g
ạ
ch dư
ớ
i , b
ắ
t đ
ầ
u b
ở
i ký t
ự
(2)
< user_value_content> ::= Bất kỳ chuỗ ký tự có thể in ra được
(3)
< user_value> ::= {< user_value_content>}
(4)
<numeral> ::= 0 | chuỗi không rỗng các chữ số bắt đầu khác 0
(5)
<rational> ::= <numeral>.0*<numeral>
(6)
<
indexed_
identifier
>
::=
<
simple_identifier
>[
<numeral>(:<numeral>)*]
(7)
<identifier> ::= <simple_identifier> | <indexed_identifier>
(8)
<var> ::= ?< simple_identifier >
(9)
<fvar> ::= $< simple_identifier >
(10)
<attribute> ::= : <simple_identifier>
(11)
<arith_symb> ::= Chuỗi không rỗng các ký tự:
=, >, <, &, @, #, +, -, *, /, %, |, ~
(12)
<funs_symb>
::=
<identifier> | <arith_symb>
(13)
<pred_symb> ::= <identifier> | <arith_symb> | distinct
(14)
<sort_symb> ::= <identifier>
(15)
<annotation> ::= <attribute> | <attribute> < user value>
(16)
<base_term> ::= <var> | <numeral> | <rational> | <identifier>
(17)
<an_term> ::= <base_term> | (<base_term> <annotation>
+
)
| (<funs_symb> <an_term>
+
<annotation>*)
| (ite <an_formula> <an_terrm> <an_term>
<annotation>*)
Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm
2010
Trang 8
Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN
GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng
Bảng 2: Luật sinh một công thức
(1)
<prop_atom> ::= true | false | <fvar> | <identifier>
(2)
<an_atom> ::= <prop_atom> | ( <prop_atom> <annotation>
+
)
| (<pred_symb> <an_term>
+
<annotation>*)
(3)
<connective> ::= not | implies | if_then_else | and | or | xor | iff
(4)
<quant_symb>
::=
exists | forall
(5)
<quant_var> ::= ( <var> <sort_symb>)
(6)
<an_formula> ::= <an_atom>
| ( <connective> <an formula>
+
<annotation>* )
| (<quant_symb> <quant_var>
+
<an_formula>
<annotation>* )
| (let (<var> <an_term>) <an_formula> <annotation>*
)
| ( flet ( <fvar> <an_formula> ) <an_formula>
<annotation>* )
Bảng 3: Luật sinh một thuyết
(1)
<string_content> ::= chuỗi liên tiếp các ký tự
(2)
<string> ::= “<string_content>”
(3)
<fun_symb_decl> ::= (<func_symb> <sort_symb>
+
<annotation>*)
| (<numeral> <sort_symb> <annotation>*)
| (<rational> <sort_sumb> <annotation>*)
(4)
<pred_symb_decl> ::= (<pred_symb> <sort_symb>* <annotation>*)
(5)
<theory_name> ::= <identifier>
(6)
<theory_attribute> ::= :sort ( <sort_symb>
+
)
| :funs (<fun_symb_decl>
+
)
| :preds (<pred_symb_decl>)
| :definition <string>
| :axioms <string>
| <annotation>
(7)
<theory> ::= (theory <theory_name> <theory_atrribute>
+
)
Bảng 4: Luật sinh một logic
(1)
<logic_name> ::= <identifier>
(2)
<logic_attribute> ::= : theory <theory_name>
| :language <string>
| :extensions <string>
| :notes <string>
Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm
2010
Trang 9
Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN
GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng
| <annotation>
(3)
<logic> ::= (logic <logic_name> <logic_attribute>
+
)
Bảng 5 Luật sinh một chuẩn
(1)
<status> ::= sat | unsat | unknown
(2)
<bench_name> ::= <identifier>
(3)
<bench_attribute> ::= :logic <logic_name>
| :assumption <an_formula>
| :formula <an_formula>
| :status <status>
| :extrasorts ( <sort_symb>
+
)
| :extrafuns ( <fun_symb_decl>
+
)
| :extrapreds ( <pred_symb_decl>
+
)
| :notes <string>
| <annotation>
(4)
benchmark ::= ( benchmark <bench_name> <bench attribute>
+
)
Các lý thuyết nền cơ bản đã được nghiên cứu và đưa ra:
Bảng 6: Các lý thuyết nền được quy chuẩn trong SMT-LIB 1.2
Arrays
Các hàm mảng
ArraysEx
Các hàm mảng mở rộng
Fixed_Size_BitVectors[32]
Bit vector 32 bit
Fixed_Size_BitVectors
Bit vector với kích cỡ tùy ý.
BitVector_ArraysEx
Bit vector với kích cỡ tùy ý và mảng chứa kiểu
dữ liệu bit vector
Empty
Thuyết trống với ký hiệu rỗng
Ints
Số nguyên
Int_Arrays
Mảng số nguyên
Int_ArraysEx
Mảng giá trị được đánh thứ tự số nguyên với tiền
đề mở rộng
Int_Int_Real_Array_ArraysEx
Mảng của mảng các số nguyên và số thực với tiền
đề mở rộng
Reals
Số thực
Reals_Ints
Số nguyên và số thực
Nội dung cụ thể của từng lý thuyết xin được không đề cập đến ở đây để tránh
việc trình bày lan man không cần thiết.
Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm
2010
Trang 10
Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN
GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng
Các logic cơ bản được áp dụng trong định dạng của SMT-LIB:
Bảng 7: Các Logic quy chuẩn được đưa ra trong SMT-LIB 1.2
AUFLIA
Các công thức tuyến tính trên thuyết mảng số nguyên với
những ký tự phân cấp, hàm và thuộc tính tự do.
AUFLIRA
Các công thức tuyến tính với ký hiệu hàm và ký hiệu vị từ
trong thuyết 10 nêu trên
AUFNIRA
Công thức với các ký tự hàm và vị từ tự do dựa trên thuyết 10
LIA
Công thức tuyến tính trên các phép toán số nguyên
LRA
Công thức tuyến tính trên các phép toán số thực
QF_A
Công thức lượng từ tự do trên thuyết mảng không mở rộng
QF_AUFBV
Công thức lượng tự trên thuyết bitvector và mảng bitvector với
các ký hiệu hàm và ký hiệu vị từ tự do.
QF_AUFLIA
Công thức tuyến tính và lượng từ tự do trên thuyết mảng các số
nguyên với ký tự phân cấp, ký tự hàm và ký tự lượng từ.
QF_AX
Công thức lượng từ tự do trên thuyết của mảng mở rộng
QF_BV
Công thức lượng từ tự do với thuyết bitvector cố định kích cỡ
QF_IDL
Logic khác trên số nguyên. Ví dụ bất đẳng thức x-y <b với x,y
là các biến nguyên và b là một hằng số nguyên
QF_LIA
Tổ hợp giữa bất đẳng thức của đa thức tuyến tính trên biến số
nguyên
QF_LRA
Tổ hợp bất đẳng thức giữa đa thức tuyến tính trên biến số thực
QF_NIA
Tổ hợp bất đẳng thức giữa đa thức tuyến tính trên biến số
nguyên với ít nhất một đa thức không tuyến tính
QF_RDL
Logic khác của số thực, ví dụ bất đẳng thức x – y < b với x,y là
số thực và b là một hằng số hữu tỷ
QF_UF
Công thức vô lượng hóa (Unquantified formulas) xây dựng
trên ký hiệu của ký tự phân cấp, ký tự hàm, ký tự vị từ không
QF_UFIDL
Logic khác trên số nguyên nhưng với những ký tự phân cấp, ký
tự hàm, ký tự vị từ không được giải thích
QF_UFBV
Công thức vô lượng hóa trên kiểu bitvectors với ký tự hàm và
ký tự vị từ.
QF_UFLIA
Phép tính số nguyên vô lượng hóa tuyến tính với ký tự phân
cấp, ký tự hàm và ký tự vị từ
QF_UFLRA
Phép tính số thực vô lượng hóa tuyến tính với ký tự phân cấp,
ký tự hàm và ký tự vị từ
QF_UFNRA
Phép tính số thực vô lượng hóa không tuyến tính với ký tự
phân cấp, ký tự hàm và ký tự vị từ
Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạm
2010
Trang 11
Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN
GVHD: TS. Trương Anh Hoàng GVĐHD: TS. Phạm Ngọc Hùng
UFNIA
Phép tính số nguyên không tuyến tính với ký tự phân cấp, hàm
và vị từ không xác định.
Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạ m
2010
Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN
GVHD:
TS. Trương Anh Hoàng
GVĐHD:
TS. Ph
ạ
m Ng
ọ
c Hùng
Chương 3. Phân tích hệ thống
3.1. Mô hình hệ thống
Để giải một bài toán SMT một cách song song giữa các bộ giải, đồng thời đảm
bảo được hiệu năng cao cho hệ thống, nhóm nghiên cứu đã đưa ra hướng giải quyết là
xây dựng hệ thống giải quyết vấn đề SMT trực tuyến qua mạng. Hệ thống sẽ được chia
ra làm ba phần rõ rệt là phần máy khách gửi yêu cầu giải quyết vấn đề, phần máy chủ
xử lý và phân phối các vấn đề nhận được, và phần máy trạm giải quyết vấn đề được
yêu cầu. Mô hình hệ thống được xây dựng như sau:
Hình 3.1 Mô hình hệ thống giải bài toán SMT hiệu năng cao.
Việc xây dựng phát triển hệ thống giải quyết vấn đề SMT trực tuyến sẽ đáp ứng
được yêu cầu về hiệu năng xử lý đầu vào. Hệ thống sẽ tiếp nhận một lúc nhiều vấn đề
Xây d
ự
ng h
ệ
th
ố
ng gi
ả
i bài toán SMT hi
ệ
u n
ă
ng cao – Ph
ầ
n máy tr
ạ
m
2010
Trang 13
Sinh viên: Hoàng Th
ế
Tùng – K51CNPM – Khoa CNTT -
Đ
H Công ngh
ệ
-
Đ
H QGHN
GVHD: TS. Tr
ươ
ng Anh Hoàng GV
Đ
HD: TS. Ph
ạ
m Ng
ọ
c Hùng
t
ừ
nhi
ề
u ng
ườ
i s
ử
d
ụ
ng tr
ự
c tuy
ế
n. V
ớ
i m
ỗ
i v
ấ
n
đề
nh
ậ
n
đượ
c, h
ệ
th
ố
ng s
ẽ
phân ph
ố
i
cho t
ấ
t c
ả
các b
ộ
gi
ả
i và ch
ờ
đợ
i k
ế
t qu
ả
tr
ả
v
ề
t
ố
i
ư
u nh
ấ
t v
ề
m
ặ
t th
ờ
i gian
để
tr
ả
v
ề
cho phía yêu c
ầ
u.
Đố
i v
ớ
i nh
ữ
ng b
ộ
gi
ả
i
đư
a ra k
ế
t qu
ả
sau s
ẽ
nh
ậ
n
đượ
c tín hi
ệ
u d
ừ
ng
x
ử
lý v
ấ
n
đề
đ
ó. Do h
ệ
th
ố
ng
đượ
c xây d
ự
ng tr
ự
c tuy
ế
n, nên vi
ệ
c nh
ậ
n cùng m
ộ
t lúc
nhi
ề
u yêu c
ầ
u c
ầ
n x
ử
lý là
đ
i
ề
u t
ấ
t y
ế
u, vì v
ậ
y, h
ệ
th
ố
ng máy ch
ủ
v
ừ
a
đả
m nh
ậ
n vi
ệ
c
chia m
ộ
t v
ấ
n
đề
cho nhi
ề
u máy tr
ạ
m x
ử
lý, v
ừ
a ph
ả
i x
ử
lý
đồ
ng th
ờ
i cùng lúc nhi
ề
u
yêu c
ầ
u nh
ư
v
ậ
y. V
ề
phía máy tr
ạ
m, m
ỗ
i máy tr
ạ
m s
ẽ
luôn nh
ậ
n và x
ử
lý nhi
ề
u các
v
ấ
n
đề
m
ộ
t lúc và ph
ả
i tr
ả
v
ề
k
ế
t qu
ả
t
ươ
ng
ứ
ng cho m
ỗ
i v
ấ
n
đề
.
Để
ti
ệ
n cho ng
ườ
i s
ử
d
ụ
ng bên phía máy khách, h
ệ
th
ố
ng c
ầ
n ph
ả
i có m
ộ
t th
ư
vi
ệ
c các hàm nhúng API
để
ng
ườ
i s
ử
d
ụ
ng tr
ự
c ti
ế
p xây d
ự
ng v
ấ
n
đề
SMT và g
ử
i lên phía máy ch
ủ
.
3.2. Mô hình ca s
ử
d
ụ
ng c
ủ
a h
ệ
th
ố
ng
Đố
i v
ớ
i hai h
ệ
th
ố
ng con
đượ
c cài
đặ
t trên máy khách và máy tr
ạ
m, thì máy ch
ủ
đượ
c coi nh
ư
là m
ộ
t tác nhân trung gian giúp duy trì t
ươ
ng tác gi
ữ
a chúng v
ớ
i nhau.
Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạ m
2010
Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN
GVHD:
TS. Trương Anh Hoàng
GVĐHD:
TS. Ph
ạ
m Ng
ọ
c Hùng
Hình 3.2: Mô hình ca sử dụng của hệ thống
Ở phía máy khách (user), người sử dụng sẽ tạo bài toán SMT, hoặc chỉ định cho
hệ thống tệp tin SMT cần thiết phải kiểm tra tính thỏa mãn để hệ thống sẽ gửi lên phía
máy chủ (server). Sau khi gửi bài toán lên phía máy chủ, hệ thống trên máy khách sẽ
chờ cho máy chủ gửi kết quả về và nhận kết quả trả về. Viêc gửi bài toán SMT bên
phía máy khách sẽ bao gồm cả việc gửi yêu cầu thời gian ngắt của các bộ giải SMT.
Với máy trạm (solver) sau khi kết nối và nhận được tệp tin chứa vấn đề SMT
cần giải quyết, hệ thống sẽ gọi lệnh chạy các công cụ giải SMT. Sau khi đưa ra được
kết quả, hoặc sau khi nhận được tín hiệu ngắt từ phía máy chủ, máy trạm sẽ gửi lại kết
quả đến máy chủ để máy chủ gửi lại phía máy khách.
Xây dựng hệ thống giải bài toán SMT hiệu năng cao – Phần máy trạ m
2010
Sinh viên: Hoàng Thế Tùng – K51CNPM – Khoa CNTT - ĐH Công nghệ - ĐH QGHN
GVHD:
TS. Trương Anh Hoàng
GVĐHD:
TS. Ph
ạ
m Ng
ọ
c Hùng
3.3. Mô hình hoạt động
Hình 3.3: Mô hình hoạt động của hệ thống
Từ biểu đồ hoạt động của hệ thống, ta có thể xác định được các công việc tuần
tự của hệ thống và cách làm việc của hệ thống như sau:
Xây d
ự
ng h
ệ
th
ố
ng gi
ả
i bài toán SMT hi
ệ
u n
ă
ng cao – Ph
ầ
n máy tr
ạ
m
2010
Trang 16
Sinh viên: Hoàng Th
ế
Tùng – K51CNPM – Khoa CNTT -
Đ
H Công ngh
ệ
-
Đ
H QGHN
GVHD: TS. Tr
ươ
ng Anh Hoàng GV
Đ
HD: TS. Ph
ạ
m Ng
ọ
c Hùng
Khi h
ệ
th
ố
ng ho
ạ
t
độ
ng, các máy khách s
ẽ
k
ế
t n
ố
i
đế
n máy ch
ủ
và xây d
ự
ng bài
toán SMT. Bài toán SMT có th
ể
đ
ã
đượ
c mô t
ả
b
ằ
ng t
ệ
p tin hay
đượ
c xây d
ự
ng b
ằ
ng
ch
ươ
ng trình v
ớ
i vi
ệ
c s
ử
d
ụ
ng h
ệ
th
ố
ng
đượ
c cài
đặ
t trên. Sau khi xác
đị
nh bài toán
SMT, h
ệ
th
ố
ng máy khách s
ẽ
g
ử
i bài toán toán
đ
ó cho máy ch
ủ
đồ
ng th
ờ
i g
ử
i thông tin
v
ề
th
ờ
i gian gi
ớ
i h
ạ
n th
ự
c hi
ệ
n gi
ả
i bài toán và ch
ờ
đợ
i k
ế
t qu
ả
tr
ả
v
ề
t
ừ
phía máy ch
ủ
.
Máy ch
ủ
l
ắ
ng nghe các k
ế
t n
ố
i c
ủ
a máy khách, khi nh
ậ
n
đượ
c bài toán SMT và
tham s
ố
v
ề
th
ờ
i gian th
ự
c hi
ệ
n bài toán g
ử
i t
ừ
máy khách, máy ch
ủ
s
ẽ
phân ph
ố
i các
bài toán
đ
ó cho các máy tr
ạ
m có b
ộ
gi
ả
i các bài toán SMT
đ
ang k
ế
t n
ố
i
đế
n máy ch
ủ
và
đ
ón ch
ờ
k
ế
t qu
ả
ph
ả
n h
ồ
i t
ừ
máy tr
ạ
m.
Máy tr
ạ
m s
ẽ
nh
ậ
n bài toán t
ừ
máy ch
ủ
và b
ắ
t
đầ
u vi
ệ
c th
ự
c hi
ệ
n gi
ả
i bài toán,
khi
đ
ó giá tr
ị
v
ề
tr
ễ
th
ờ
i gian cho m
ỗ
i bài toán s
ẽ
đượ
c s
ử
d
ụ
ng. Sau khi h
ệ
th
ố
ng trên
máy tr
ạ
m g
ọ
i các b
ộ
gi
ả
i
để
gi
ả
i quy
ế
t v
ấ
n
đề
đượ
c
đư
a t
ớ
i, s
ẽ
có hai tr
ườ
ng h
ợ
p x
ả
y
ra ti
ế
p sau
đ
ó. Tr
ườ
ng h
ợ
p m
ộ
t là máy tr
ạ
m
đ
ó s
ẽ
gi
ả
i ra k
ế
t qu
ả
nhanh nh
ấ
t và g
ử
i v
ề
phía máy ch
ủ
k
ế
t qu
ả
. Tr
ườ
ng h
ợ
p th
ứ
hai là nh
ậ
n
đượ
c tín hi
ệ
u ng
ắ
t ti
ế
n trình (do
đ
ã
có máy tr
ạ
m khác g
ử
i
đượ
c k
ế
t qu
ả
đế
n máy ch
ủ
), khi
đ
ó, m
ộ
t l
ệ
nh ng
ắ
t ti
ế
n trình
đ
ang
đượ
c th
ự
c thi s
ẽ
đượ
c g
ọ
i. Và
ở
tr
ườ
ng h
ợ
p này, máy tr
ạ
m không g
ử
i gì v
ề
phía
máy ch
ủ
n
ữ
a.
Phía máy khách sau khi nh
ậ
n
đượ
c k
ế
t qu
ả
c
ủ
a h
ệ
th
ố
ng s
ẽ
hi
ể
n th
ị
cho ng
ườ
i
dùng th
ấ
y
đượ
c k
ế
t qu
ả
c
ủ
a bài toán mà h
ệ
th
ố
ng g
ử
i
đế
n.
Xây d
ự
ng h
ệ
th
ố
ng gi
ả
i bài toán SMT hi
ệ
u n
ă
ng cao – Ph
ầ
n máy tr
ạ
m
2010
Trang 17
Sinh viên: Hoàng Th
ế
Tùng – K51CNPM – Khoa CNTT -
Đ
H Công ngh
ệ
-
Đ
H QGHN
GVHD: TS. Tr
ươ
ng Anh Hoàng GV
Đ
HD: TS. Ph
ạ
m Ng
ọ
c Hùng
Ch
ươ
ng 4. Ph
ươ
ng h
ướ
ng gi
ả
i quy
ế
t v
ấ
n
đề
4.1. L
ự
a ch
ọ
n ph
ươ
ng th
ứ
c k
ế
t n
ố
i
Bài toán
đượ
c
đặ
t ra là xây d
ự
ng h
ệ
th
ố
ng tr
ự
c tuy
ế
n, vì v
ậ
y c
ầ
n có ph
ươ
ng
th
ứ
c k
ế
t n
ố
i phù h
ợ
p v
ớ
i nh
ữ
ng yêu c
ầ
u
đ
ã
đượ
c nêu ra trong ph
ầ
n trên. Có hai
ph
ươ
ng th
ứ
c k
ế
t n
ố
i
đượ
c
đư
a ra l
ự
a ch
ọ
n là xây d
ự
ng h
ệ
th
ố
ng d
ự
a trên các k
ế
t n
ố
i
c
ủ
a webservice ho
ặ
c s
ử
d
ụ
ng k
ế
t n
ố
i socket.
Đố
i v
ớ
i ph
ươ
ng th
ứ
c k
ế
t n
ố
i d
ự
a trên webservice, th
ờ
i gian k
ế
t n
ố
i s
ẽ
ch
ậ
m h
ơ
n
r
ấ
t nhi
ề
u so v
ớ
i k
ế
t n
ố
i tr
ự
c ti
ế
p qua socket. Tuy nhiên, v
ớ
i ph
ươ
ng th
ứ
c k
ế
t n
ố
i
socket, ta ph
ả
i t
ự
xây d
ự
ng cách th
ứ
c giao ti
ế
p gi
ữ
a máy tr
ạ
m v
ớ
i máy ch
ủ
và máy ch
ủ
v
ớ
i máy khách.
Do yêu c
ầ
u t
ố
i
ư
u v
ề
m
ặ
t th
ờ
i gian
đượ
c quan tâm hàng
đầ
u, vì v
ậ
y ph
ươ
ng
th
ứ
c
đượ
c t
ố
i
ư
u cho h
ệ
th
ố
ng là xây d
ự
ng giao ti
ế
p qua k
ế
t n
ố
i socket.
4.2. L
ự
a ch
ọ
n ngôn ng
ữ
l
ậ
p trình
Do ph
ươ
ng th
ứ
c k
ế
t n
ố
i
đượ
c l
ự
a ch
ọ
n là k
ế
t n
ố
i socket, vì v
ậ
y c
ầ
n m
ộ
t ngôn
ng
ữ
l
ậ
p trình b
ậ
c cao
để
ti
ệ
n cho vi
ệ
c xây d
ự
ng cách th
ứ
c giao ti
ế
p gi
ữ
a máy ch
ủ
-
máy tr
ạ
m và máy ch
ủ
- máy khách. M
ặ
t khác, do các b
ộ
gi
ả
i có th
ể
đượ
c cài
đặ
t trên
nhi
ề
u n
ề
n h
ệ
đ
i
ề
u hành khác nhau, nên c
ầ
n có ngôn ng
ữ
l
ậ
p trình h
ỗ
tr
ợ
vi
ệ
c ch
ạ
y trên
nhi
ề
u h
ệ
đ
i
ề
u hành khác nhau. Chính vì các lý do này, nhóm nghiên c
ứ
u
đ
ã quy
ế
t
đị
nh
s
ử
d
ụ
ng ngôn ng
ữ
l
ậ
p trình Java
để
xây d
ự
ng h
ệ
th
ố
ng.
4.3. Xác
đị
nh d
ữ
li
ệ
u
đầ
u vào,
đầ
u ra c
ủ
a h
ệ
th
ố
ng
Để
t
ă
ng hi
ệ
u n
ă
ng c
ủ
a h
ệ
th
ố
ng gi
ả
i bài toán SMT, h
ệ
th
ố
ng có s
ử
d
ụ
ng nhi
ề
u
các b
ộ
gi
ả
i khác nhau. Tuy r
ằ
ng m
ỗ
i b
ộ
gi
ả
i có m
ộ
t chu
ẩ
n
đầ
u vào riêng, nh
ư
ng
để
ti
ệ
n cho vi
ệ
c gi
ả
i quy
ế
t v
ấ
n
đề
m
ộ
t cách nhanh chóng và hi
ệ
u qu
ả
, h
ệ
th
ố
ng ch
ỉ
s
ử
d
ụ
ng
đầ
u vào bài toán SMT theo chu
ẩ
n c
ủ
a SMT-LIB. Hi
ệ
n nay, h
ầ
u h
ế
t các công c
ụ
gi
ả
i các bài toán
đề
u h
ỗ
tr
ợ
chu
ẩ
n SMT-LIB, vì v
ậ
y,
để
tránh vi
ệ
c ph
ả
i chu
ẩ
n hóa
đầ
u
vào cho m
ỗ
i bài toán nh
ằ
m
đả
m b
ả
o hi
ệ
u n
ă
ng cao v
ề
m
ặ
t th
ờ
i gian, h
ệ
th
ố
ng yêu c
ầ
u
Xây d
ự
ng h
ệ
th
ố
ng gi
ả
i bài toán SMT hi
ệ
u n
ă
ng cao – Ph
ầ
n máy tr
ạ
m
2010
Trang 18
Sinh viên: Hoàng Th
ế
Tùng – K51CNPM – Khoa CNTT -
Đ
H Công ngh
ệ
-
Đ
H QGHN
GVHD: TS. Tr
ươ
ng Anh Hoàng GV
Đ
HD: TS. Ph
ạ
m Ng
ọ
c Hùng
đầ
u vào c
ủ
a ng
ườ
i s
ử
d
ụ
ng ph
ả
i
đ
áp
ứ
ng nghiêm ng
ặ
t các
đ
i
ề
u ki
ệ
n xây d
ự
ng m
ộ
t bài
toán d
ướ
i quy ch
ẩ
n c
ủ
a SMT-LIB.
H
ệ
th
ố
ng
đượ
c chia ra thành ba thành ph
ầ
n v
ớ
i ch
ứ
c n
ă
ng và vai trò khác nhau,
do
đ
ó v
ớ
i m
ỗ
i h
ệ
th
ố
ng con s
ẽ
có m
ộ
t
đầ
u vào
đầ
u ra riêng
ứ
ng v
ớ
i t
ừ
ng ch
ứ
c n
ă
ng
c
ủ
a h
ệ
th
ố
ng con
đ
ó.
V
ớ
i h
ệ
th
ố
ng
đượ
c cài
đặ
t trên máy khách, ng
ườ
i dùng s
ẽ
đư
a vào t
ệ
p tin ch
ứ
a
bài toán SMT ho
ặ
c xây d
ự
ng bài toán SMT d
ự
a trên các hàm nhúng API mà h
ệ
th
ố
ng
xây d
ự
ng. Bài toán s
ẽ
đượ
c g
ử
i lên máy ch
ủ
và ch
ờ
máy ch
ủ
ph
ả
n h
ồ
i v
ề
k
ế
t qu
ả
.
Đố
i v
ớ
i h
ệ
th
ố
ng
đượ
c cài
đặ
t trên máy ch
ủ
,
đầ
u vào nh
ậ
n t
ừ
máy khách (bài
toán SMT) s
ẽ
là
đầ
u ra chuy
ể
n t
ớ
i máy tr
ạ
m. Và
đầ
u vào th
ứ
hai là k
ế
t qu
ả
nh
ậ
n
đượ
c
t
ừ
máy tr
ạ
m c
ũ
ng là
đầ
u ra
để
chuy
ể
n t
ớ
i máy khách.
Trên máy tr
ạ
m có duy nh
ấ
t m
ộ
t b
ộ
d
ữ
li
ệ
u
đầ
u vào là bài toán SMT nh
ậ
n
đượ
c
t
ừ
máy ch
ủ
và m
ộ
t b
ộ
d
ữ
li
ệ
u
đầ
u ra duy nh
ấ
t là k
ế
t qu
ả
c
ủ
a vi
ệ
c gi
ả
i bài toán SMT
đ
ó.
Xây d
ự
ng h
ệ
th
ố
ng gi
ả
i bài toán SMT hi
ệ
u n
ă
ng cao – Ph
ầ
n máy tr
ạ
m
2010
Trang 19
Sinh viên: Hoàng Th
ế
Tùng – K51CNPM – Khoa CNTT -
Đ
H Công ngh
ệ
-
Đ
H QGHN
GVHD: TS. Tr
ươ
ng Anh Hoàng GV
Đ
HD: TS. Ph
ạ
m Ng
ọ
c Hùng
Ch
ươ
ng 5. Mô t
ả
h
ệ
th
ố
ng
Hệ thống giải bài toán SMT hiệu năng cao được chia làm ba hệ thống con với chức
năng và tác dụng riêng. Trong giới hạn tài của tài liệu này, hệ thống con cài đặt trên
máy chủ sẽ không được đề cập đến. Trong phần này, hệ thống cài đặt trên máy khách
và máy trạm sẽ đươc giải thích và mô tả chi tiết.
5.1. Quy
đị
nh cách th
ứ
c giao ti
ế
p v
ớ
i máy ch
ủ
Do h
ệ
th
ố
ng hoàn toàn
đượ
c xây d
ự
ng b
ằ
ng ph
ươ
ng pháp k
ế
t n
ố
i socket, vì v
ậ
y
c
ầ
n ph
ả
i có m
ộ
t cách th
ứ
c giao ti
ế
p phù h
ợ
p gi
ữ
a các h
ệ
th
ố
ng con v
ớ
i nhau. D
ự
a trên
ý t
ưở
ng c
ủ
a ngôn ng
ữ
XML, nhóm nghiên c
ứ
u
đ
ã
đư
a ra và th
ố
ng nh
ấ
t vi
ệ
c s
ử
d
ụ
ng
các th
ẻ
đươ
c quy
đị
nh s
ẵ
n
để
giao ti
ế
p gi
ữ
a các h
ệ
th
ố
ng con v
ớ
i nhau.
Các th
ẻ
s
ẽ
đượ
c
đị
nh ngh
ĩ
a
đ
úng nh
ư
quy chu
ẩ
n c
ủ
a XML v
ớ
i quy
đị
nh sau:
-
Th
ẻ
m
ở
s
ẽ
có d
ạ
ng <
tên thẻ
>
-
Th
ẻ
đ
óng s
ẽ
có d
ạ
ng <
/tên thẻ
>
Đố
i v
ớ
i th
ẻ
đơ
n thì không c
ầ
n có th
ẻ
đ
óng.
C
ụ
th
ể
, các th
ẻ
đượ
c quy
đị
nh trong h
ệ
th
ố
ng nh
ư
sau:
-
C
ặ
p th
ẻ
<
hello
> </
hello
> : th
ể
hi
ệ
n s
ự
b
ắ
t tay k
ế
t n
ố
i gi
ữ
a các thành ph
ầ
n trong
h
ệ
th
ố
ng v
ớ
i nhau.
-
C
ặ
p th
ẻ
<
file
> <
/file
>: th
ể
hi
ệ
n vi
ệ
c b
ắ
t
đầ
u chuy
ể
n d
ữ
li
ệ
u t
ừ
t
ệ
p tin ch
ứ
a bài
toán SMT gi
ữ
a các h
ệ
th
ố
ng con trong h
ệ
th
ố
ng
-
C
ặ
p th
ẻ
<result> </result>: th
ể
hi
ệ
n n
ộ
i dung k
ế
t qu
ả
c
ủ
a bài toán SMT
đượ
c
tr
ả
v
ề
-
Th
ẻ
đơ
n <
destroy
>: là tín hi
ệ
u ng
ắ
t k
ế
t n
ố
i
đượ
c máy ch
ủ
g
ử
i
đế
n máy tr
ạ
m
-
Th
ẻ
đơ
n <
exit
>: th
ể
thi
ệ
n s
ự
k
ế
t thúc k
ế
t n
ố
i gi
ữ
a ng
ườ
i dùng v
ớ
i máy ch
ủ