Đặt là một vectơ của các biến boolean. Gọi là hai mạch boolean trên . Nói rằng tương tự như nếu:x C D
nhỏ theo cấp số nhân, khi được vẽ đồng đều ngẫu nhiên từ (nói cách khác, chúng có chức năng gần như giống hệt nhau); và,
khác nhau về khoảng cách chỉnh sửa đồ thị với một lượng rất nhỏ (khoảng cách chỉnh sửa của chúng nhỏ hơn nhiều so với kích thước của mạch, giả sử, hoặc một số hằng số nhỏ), có nghĩa là gần như tất cả các cổng và dây của khớp với nhau một cổng và dây tương ứng trong , chỉ có một vài cổng được thêm / xóa / thay đổi.
Vấn đề của tôi: Tôi được cung cấp một mạch và tôi muốn biết liệu có tồn tại một mạch tương tự như nhưng không giống với (tức là, nơi tồn tại sao cho ).
Bất cứ ai có thể đề nghị một thuật toán để giải quyết vấn đề này?
Nếu có ích, chúng ta có thể hạn chế sự chú ý đến các mạch nhỏ hơn mạch (nghĩa là chúng ta muốn biết liệu có tồn tại mạch sao cho nhỏ hơn , tương tự như và tồn tại sao cho ).
Nếu có ích, bạn cũng có thể giả sử rằng chúng tôi được cung cấp các trường hợp kiểm tra nổi tiếng sao cho cho tất cả và chúng ta có thể hạn chế hơn nữa sự chú ý chỉ vào các mạch sao cho cho tất cả .
Điều này phát sinh từ một ứng dụng thực tế, vì vậy nếu bạn không thể giải quyết vấn đề này, vui lòng giải quyết bất kỳ biến thể hoặc trường hợp đặc biệt thú vị nào. Chẳng hạn, vui lòng khởi tạo bất kỳ tham số hoặc ngưỡng nào theo bất kỳ cách nào thuận tiện cho bạn. Bạn có thể giả sử các mạch không quá lớn (kích thước đa thức hoặc một cái gì đó). Vui lòng thay thế khoảng cách chỉnh sửa biểu đồ bằng một số biện pháp khác về kết quả gần khớp. Ngoài ra, trong thực tế, các bộ giải SAT thường có hiệu quả đáng ngạc nhiên đối với các mạch có cấu trúc phát sinh trong thực tế, do đó, có thể gọi một bộ giải SAT là một chương trình con / orory (ít nhất là nếu bạn gọi nó trên một ví dụ như SAT từ một mạch như ).
Ngoài ra, thiếu bất kỳ thuật toán nào, tôi cũng sẽ quan tâm đến câu hỏi tồn tại: đối với mạch "trung bình" , xác suất tồn tại một số đáp ứng tất cả các tiêu chí là gì? (Tôi hy vọng xác suất này rất thấp, nhưng tôi không có manh mối nếu đó là trường hợp.)
Ứng dụng thực tế là kiểm tra xem một mạch có thể chứa một quả trứng Phục sinh ẩn / ẩn. Giả thuyết về cách một thứ như vậy có thể được chèn vào như thế này. Chúng tôi bắt đầu với một mạch "vàng" , tính toán các chức năng mong muốn và không có cửa hậu ẩn. Sau đó, đối thủ thực hiện một thay đổi nhỏ thành để giới thiệu cửa hậu ẩn, thu được mạch đã sửa đổi . Mục đích của cửa hậu là thay đổi chức năng được tính bởi theo một cách nào đó. Nếu không quá nhỏ, sự thay đổi có thể được phát hiện một cách hợp lý bằng thử nghiệm ngẫu nhiên, do đó, một kẻ thù có thể sẽ cố gắng giữrất nhỏ. Tương tự, nếu khác với ở quá nhiều nơi, điều này có thể được nhận thấy bằng cách kiểm tra ngẫu nhiên mạch, do đó, một kẻ thù có thể sẽ cố gắng giảm thiểu số lượng thay đổi. (Và, có thể có một bộ thử nghiệm gồm đại diện cho các phiên bản của chức năng mong muốn, vì vậy chúng tôi biết rằng bất kể mạch "vàng" là gì, nó đều thỏa mãn cho tất cả .) Cuối cùng, chúng tôi được cung cấp mạch (chứ không phải mạch "vàng" ) và chúng tôi muốn biết liệu có thể là phiên bản sửa đổi của một số, nơi sửa đổi đã được thực hiện để giới thiệu một cửa hậu ẩn của loại này.