Giảm SAT trực tiếp xuống 3-SAT


18

Ở đây, mục tiêu là giảm một vấn đề SAT tùy ý xuống còn 3-SAT trong thời gian đa thức bằng cách sử dụng số lượng mệnh đề và biến số ít nhất. Câu hỏi của tôi được thúc đẩy bởi sự tò mò. Ít chính thức hơn, tôi muốn biết: "Mức giảm 'tự nhiên nhất' từ SAT xuống 3-SAT là gì?"

Bây giờ mức giảm mà tôi luôn thấy trong sách giáo khoa diễn ra như sau:

  1. Trước tiên, hãy lấy ví dụ về SAT của bạn và áp dụng định lý Cook-Levin để giảm nó thành mạch SAT.

  2. Sau đó, bạn hoàn thành công việc bằng cách giảm tiêu chuẩn của mạch SAT xuống còn 3-SAT bằng cách thay thế các cổng bằng các mệnh đề.

Trong khi điều này hoạt động, các mệnh đề 3-SAT kết quả cuối cùng trông gần như không có gì giống như các mệnh đề SAT mà bạn đã bắt đầu, do ứng dụng ban đầu của định lý Cook-Levin.

Bất cứ ai cũng có thể thấy làm thế nào để giảm trực tiếp hơn, bỏ qua bước mạch trung gian và trực tiếp đến 3-SAT? Tôi thậm chí sẽ hài lòng với việc giảm trực tiếp trong trường hợp đặc biệt của n-SAT.

. -SAT ví dụ ...)

EDIT: Dựa trên câu trả lời của ratchet, hiện tại rõ ràng việc giảm n-SAT là hơi tầm thường (và tôi thực sự nên nghĩ rằng một lần cẩn thận hơn một chút trước khi đăng). Tôi sẽ để câu hỏi này mở ra một chút trong trường hợp ai đó biết câu trả lời cho tình huống chung hơn, nếu không tôi sẽ đơn giản chấp nhận câu trả lời của ratchet.


7
Tôi không hiểu việc sử dụng Cook-Levin trong (1). Không phải boolean-công thức-SAT đã là một trường hợp đặc biệt của SAT-SAT trong đó cấu trúc đồ thị của mạch xảy ra là một cái cây?
Luca Trevisan

Câu trả lời:


28

Mỗi mệnh đề SAT có 1, 2, 3 hoặc nhiều biến. Mệnh đề 3 biến có thể được sao chép mà không có vấn đề

Mệnh đề biến 1 và 2 {a1}{a1,a2}có thể được mở rộng {a1,a1,a1}{a1,a2,a1}tương ứng.

Mệnh đề với hơn 3 biến {a1,a2,a3,a4,a5}thể được mở rộng để {a1,a2,s1}{!s1,a3,s2}{!s2,a4,a5}s1s2biến mới có giá trị sẽ phụ thuộc vào biến trong mệnh đề ban đầu là đúng


6
Cẩn thận. Ai nói đầu vào SAT phải có "mệnh đề"?
Jeffε

6
Câu hỏi cho biết "Tôi thậm chí sẽ hạnh phúc với việc giảm trực tiếp trong trường hợp đặc biệt của n-SAT"
Ryan Williams

Đúng, làm việc đó! Tôi đoán tôi nên suy nghĩ kỹ hơn một chút trước khi thêm dòng cuối cùng đó, nhưng nếu tôi không nhận được câu trả lời cho câu hỏi chung chung hơn, tôi sẽ chấp nhận điều này.
Mikola

1
@Mikola Có lẽ phép biến đổi Tseitin hoặc Plaisted-Greenbaum mang lại cho bạn 3CNF? (Tôi không chắc là tôi hiểu câu hỏi đầy đủ :))
Mikolas

Tôi đã tự hỏi tại sao phần mở rộng dành riêng cho k = 1 được đề cập bởi ratchet không xuất hiện trong bất kỳ cuốn sách nào (ít nhất là những cuốn tôi đã gặp cho đến nay). Lý do của tôi là theo định nghĩa, một nghĩa đen có thể là 'không phải là a1' mà không thể được mở rộng như {a1, a1, a1}. Mặt khác, bạn không thể thực hiện {'not a1', 'not a1', 'not a1]} vì nó cần một logic khác để xác định xem sat ban đầu có bao gồm nghĩa đen bị phủ định hay không. Đây là lý do (có lẽ) tất cả các tác giả bao gồm Michael R. Garey và David S. Johnson đã sử dụng một phần mở rộng khác nhau được trình bày bởi 'Carlos Linares López' trong bài đăng của mình ở đây.
KGhatak


19

Nếu bạn cần giảm từ k-SAT xuống 3-SAT, thì câu trả lời của ratchet hoạt động tốt.

Nếu bạn muốn giảm trực tiếp từ công thức mệnh đề chung sang CNF (và xuống 3-SAT) thì - ít nhất là từ "phối cảnh người giải quyết SAT" - Tôi nghĩ rằng câu trả lời cho câu hỏi của bạn Thế nào là giảm tự nhiên nhất ... ? , là: Không có giảm "tự nhiên" !

Từ kết luận của Chương 2 - "Mã hóa CNF" của cuốn sách (rất hay): Cẩm nang về sự hài lòng :

...
Thường có nhiều cách để mô hình hóa một vấn đề nhất định trong CNF, và một vài hướng dẫn được biết để lựa chọn trong số đó. Thường có một sự lựa chọn các tính năng vấn đề để mô hình hóa như các biến và một số có thể cần phải suy nghĩ đáng kể để khám phá. Mã hóa Tseitin nhỏ gọn và cơ học nhưng trong thực tế không phải lúc nào cũng dẫn đến mô hình tốt nhất, và một số biểu mẫu con có thể được mở rộng tốt hơn. Một số mệnh đề có thể được bỏ qua bởi các xem xét phân cực, và ngụ ý, phá vỡ đối xứng hoặc mệnh đề bị chặn có thể được thêm vào. Các bảng mã khác nhau có thể có những ưu điểm và nhược điểm khác nhau, chẳng hạn như kích thước hoặc mật độ giải pháp, và đâu là lợi thế cho một người giải SAT có thể là bất lợi cho người khác. Nói tóm lại, mô hình hóa CNF là một nghệ thuật và chúng ta thường phải tiến hành bằng trực giác và thử nghiệm.
...

Thuật toán được biết đến nhiều nhất là thuật toán Tseitin (G. Tseitin. Về độ phức tạp của đạo hàm trong phép tính mệnh đề. Tự động hóa lý luận: Các giấy tờ cổ điển trong Logic tính toán, 2: 466 Nott483, 1983. Springer-Verlag.)

Để có phần giới thiệu tốt về mã hóa CNF, hãy đọc cuốn sách được gợi ý Sổ tay o Sự hài lòng . Bạn cũng có thể đọc một số tác phẩm gần đây và xem các tài liệu tham khảo; ví dụ:

  • P. Jackson và D. Sheridan. Chuyển đổi hình thức mệnh đề cho các mạch Boolean. Trong HH Hoos và DG Mitchell, các biên tập viên, Lý thuyết và Ứng dụng của Kiểm tra mức độ hài lòng, Hội nghị quốc tế lần thứ 7, SAT 2004 , tập 3542 của LNCS, trang 183 phản ứng198. Springer, 2004. (nhằm mục đích giảm số lượng mệnh đề)
  • P. Manolios, D. Vroon, Mạch hiệu quả để chuyển đổi CNF. Trong lý thuyết và ứng dụng của kiểm tra mức độ hài lòng - SAT 2007 (2007), trang 4-9

15

Hãy để tôi đăng một giải pháp khác tương tự như của Ratchel nhưng hơi khác. Điều này được lấy trực tiếp từ chương 9 của Phiên bản 2 của "Hướng dẫn thiết kế thuật toán" của Steven Skiena

  • Nếu mệnh đề chỉ có một chữ C = {z1}, thì hãy tạo hai biến mới v1 và v2 và bốn mệnh đề 3 chữ mới: {v1, v2, z1}, {! V1, v2, z1}, {v1 ,! v2, z1} và {! v1 ,! v2, z1}. Lưu ý rằng cách duy nhất mà cả bốn mệnh đề này có thể được thỏa mãn đồng thời là nếu z1 = T, điều đó cũng có nghĩa là C gốc sẽ được thỏa mãn
  • Nếu mệnh đề có hai chữ, C = {z1, z2}, thì hãy tạo một biến mới v1 và hai mệnh đề mới: {v1, z1, z2} và {! V1, z1, z2}. Một lần nữa, cách duy nhất để thỏa mãn cả hai mệnh đề này là có ít nhất một trong số z1 và z2 là đúng, do đó thỏa mãn C
  • Nếu mệnh đề có ba chữ, C = {z1, z2, z3}, chỉ cần sao chép C vào ví dụ 3-SAT không thay đổi
  • Nếu mệnh đề có nhiều hơn 3 chữ C = {z1, z2, ..., zn}, thì hãy tạo n-3 biến mới và n-2 mệnh đề mới trong một chuỗi, trong đó cho 2 <= j <= n-2 , Cij = {v1, j-1, zj + 1 ,! Vi, j}, Ci1 = {z1, z2 ,! Vi, 1} và Ci, n-2 = {vi, n-3, zn-1, zn}

1
@TayfunPay Bạn có thể giải thích lý do tại sao bạn coi giải pháp này là chính xác hơn? Các biến trùng lặp có vẻ tự nhiên hơn đối với tôi và không vi phạm bất kỳ định nghĩa nào về 3SAT mà tôi đã thấy. Có một số kỹ thuật làm cho giải pháp này tốt hơn?
crockeea
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.