Tôi đang sử dụng bộ giải Z2 SMT để giải quyết một vấn đề mà tôi đã thể hiện trong logic QF_BV, sử dụng ngôn ngữ SMTLIB 2.Lấy một lõi "không" tốt với z3 (logic QF_BV)
Mô hình không hài lòng và tôi đang cố gắng để người giải quyết tạo ra một lõi không xác định.
Mô hình của tôi bao gồm một số ràng buộc 'bắt buộc', mà tôi chỉ định sử dụng câu lệnh assert
.
Các xác nhận mà tôi muốn được xem xét cho thế hệ không lõi, đã được chỉ định bằng cách sử dụng cấu trúc (assert (! (EXPR) :named NAME))
.
Z3 cung cấp cho tôi unsat
, như mong đợi. Tuy nhiên, Z3 dường như luôn đổ một "unsat-core" tầm thường bao gồm TẤT CẢ các xác nhận được đặt tên.
Tôi biết rằng có tồn tại một tập hợp con các xác nhận được đặt tên của tôi, đó là một unsat-core. Tôi tìm thấy lõi này bằng cách sử dụng Yices SMT solver, mà thường xuyên mang lại cho tôi tương đối nhỏ hơn unsat-lõi. Mô hình Yices giống với mô hình Z3 (khá nhiều bản dịch từng dòng từ SMT2 sang ngôn ngữ nhập Yices).
Sản xuất các tính năng "tốt" không phải là một tính năng cụ thể của trình giải quyết, hoặc có bất kỳ đề xuất/thay đổi chung nào mà tôi có thể thực hiện để giúp Z3 cung cấp cho tôi cốt lõi tốt hơn không?
Cảm ơn bạn đã trả lời! Tôi đã tải lên tập lệnh mẫu [tại đây] (https://gist.github.com/2fe5ce8cf42af9ffaf59). Tôi đã bao gồm một mô tả ngắn gọn để giúp hiểu. Bạn có thể vui lòng xem liệu bạn có bất kỳ gợi ý nào cho tôi không? – dhrumeel
Tôi nhận được kịch bản của bạn, tôi sẽ cập nhật câu trả lời. BTW, thiếu '#' s trước một số bit-vector literals. –