Ví dụ về thuật toán thiếu bằng chứng về tính chính xác


18

Chúng tôi có logic Hoare. Tại sao vẫn có khả năng thuật toán đúng nhưng không có bằng chứng nào cho thấy nó đúng? Giả sử thuật toán được biểu thị bằng C. Sau đó, chúng ta có thể lập luận từng bước rằng nó đang làm những gì nó phải làm.

Vì vậy, câu hỏi của tôi là:

Cho tôi một ví dụ về thuật toán đúng nhưng không có bằng chứng về tính đúng.

EDIT: Tôi nghĩ rằng một nền tảng nhỏ có thể giúp làm rõ nơi tôi sẽ đến. Hãy để tôi trích dẫn Scott Aaronson:

Từ những năm 1970, đã có suy đoán rằng P NP có thể độc lập (nghĩa là không thể chứng minh cũng không thể bác bỏ) khỏi các hệ tiên đề tiêu chuẩn cho toán học, như lý thuyết tập hợp Zermelo-Fraenkel. Để rõ ràng, điều này có nghĩa là một trong hai

  1. một thuật toán đa thời gian cho các vấn đề hoàn thành NP không tồn tại, nhưng chúng ta không bao giờ có thể chứng minh nó (ít nhất là không phải trong các hệ thống chính thức thông thường của chúng ta), hoặc nếu không

  2. một thuật toán thời gian đa thức cho các vấn đề NP-đầy đủ không tồn tại, nhưng một trong hai chúng ta không bao giờ có thể chứng minh rằng nó hoạt động, hoặc chúng ta không bao giờ có thể chứng minh rằng nó tạm dừng trong thời gian đa thức.

Tôi đang đề cập đến khả năng thứ hai. Vì Aaronson có thể tự tin liệt kê nó như một khả năng, tôi nghĩ rằng phải có một ví dụ hiện có của loại 2. Đó là lý do tại sao tôi hỏi câu hỏi này. Nhưng có vẻ như một câu trả lời nhanh chóng và rõ ràng không được xem.


17
Điều đó có nghĩa gì khi nói rằng một thuật toán là chính xác nếu chúng ta không có bằng chứng về sự đúng đắn?
David Richerby

14
Bạn có nghĩa là "bằng chứng chính xác là không thể" hoặc "không ai chứng minh nó là chính xác"?
gnasher729

12
Các thuật toán không cần phải chính xác ... giả sử bạn có điều này: (1) đặt một thùng rỗng trên bệ cửa sổ vào buổi sáng. (2) đưa nó xuống vào buổi tối. (3) đo thể tích nước trong xô. (4) lặp lại vào sáng hôm sau. Đây là một mô tả về một thuật toán, nhưng nó không mô tả bất cứ điều gì có thể, mà không có một đoạn, được gọi là "chính xác". Thật thú vị, hầu hết các mã lập trình trên thế giới được viết theo cách đặc biệt này: nó hoàn toàn không liên quan đến tính chính xác của những gì nó làm.
wvxvw

@wvxvw Tôi đang bối rối, vậy thuật toán "chính xác" nghĩa là gì? Nếu nó làm những gì nó dự định làm, điều đó không có nghĩa là nó đúng? Nếu mục tiêu của kịch bản của bạn là tìm ra lượng nước trung bình thu được trong xô trong khi mưa, thì mỗi ngày, thuật toán có chính xác trong trường hợp đó không?
Abdul

8
@chi bạn không hiểu ... không phải các lập trình viên không quan tâm đến tính chính xác của mã của họ, mà đối với một số thuật toán, khái niệm "chính xác" không được áp dụng. Sử dụng một số ứng dụng .NET WindowsForms, có tác dụng gì đó: "đặt nút này với nhãn này ở vị trí này, sau đó đặt nút khác ở vị trí khác này và cứ thế ..." - có thể có một số giải thích về điều này chương trình thực hiện, theo đó những gì nó có thể được đánh giá là (trong) chính xác (ví dụ: nhà thiết kế đồ họa nói rằng nó "trông xấu xí"), nhưng đó là tất cả.
wvxvw

Câu trả lời:


50

Đây là một thuật toán cho chức năng nhận dạng:

  • Đầu vào: n
  • Kiểm tra xem chuỗi nhị phân thứ mã hóa bằng chứng 0 > 1 trong ZFC không và nếu có, đầu ra n + 1n0>1n+1
  • Mặt khác, đầu ra n

Hầu hết mọi người nghi ngờ thuật toán này tính toán hàm nhận dạng, nhưng chúng tôi không biết và chúng tôi không thể chứng minh nó trong khuôn khổ thường được chấp nhận cho toán học, ZFC .


2
Bạn có chắc chắn Kiểm tra xem chuỗi nhị phân thứ mã hóa bằng chứng 0 > 1 trong ZFCn0>1 có phải là thuật toán không?
Dmitry Grigoryev

23
Không, nhưng kiểm tra chắc chắn có thể được thực hiện bằng thuật toán (ví dụ: bằng máy Turing). Trong thực tế, đây là một trong những yêu cầu chúng tôi có đối với các hệ thống chứng minh - rằng tính hợp lệ của bằng chứng có thể kiểm tra được bằng thuật toán.
Yuval Filmus

6
@Puppy ZFC chứng minh . Nhưng nó cũng có thể chứng minh 0 > 1 nếu (f) nó không nhất quán. Gần như tất cả mọi người tin rằng ZFC là nhất quán, tất nhiên, nhưng vì các định lý không hoàn chỉnh, chúng tôi không thể biết điều đó chắc chắn. ¬(0>1)0>1
chi

1
@Nathaniel Không hề. Bạn có thể dễ dàng chứng minh tính đúng đắn của mọi thuật toán sách giáo khoa, ví dụ. Thuật toán này khác ở chỗ nó dựa vào tính nhất quán của ZFC, đây là điều mà bản thân ZFC không thể chứng minh được.
Yuval Filmus

1
@Nathaniel: Nếu bạn thích, hãy để chúng tôi tiếp tục cuộc thảo luận này trong trò chuyện .
dùng21820

9

Hầu hết các thuật toán đã không được chứng minh là đúng trong logic Hoare. Lý do chính là bằng chứng chính xác như vậy là cực kỳ đắt tiền kể từ tháng 1 năm 2017, có thể bằng một số đơn đặt hàng lớn so với lập trình 'đơn thuần'. Có rất nhiều công việc đang diễn ra để giảm chi phí này bằng tự động hóa, nhưng đó là một cuộc đấu tranh khó khăn.

Một lý do khác tại sao một thuật toán có thể không có bằng chứng chính xác và một thuật toán có liên quan trong thực tế hơn là hiện tượng không hoàn chỉnh mà Yuval và chi đã đề cập, là chúng ta có thể không biết thông số kỹ thuật này là gì. Vấn đề này có hai chiều.

  • Khách hàng không biết họ muốn gì. Đây là một vấn đề nổi tiếng trong công nghệ phần mềm và các kỹ sư phần mềm đã phát triển nhiều cách tiếp cận để giải quyết vấn đề này.

  • Các đặc điểm kỹ thuật là khó khăn. Một ví dụ điển hình là tính chính xác của các thuật toán mật mã. Chỉ gần đây Micali & Goldwasser đã giành được giải thưởng Turing khi chỉ định bảo mật mã hóa có nghĩa là gì. Tuy nhiên, xin lưu ý rằng định nghĩa đó (theo như tôi biết) đối với "mật mã lý thuyết" nơi bạn có tham số bảo mật nkhác nhau trên các số tự nhiên, và đối thủ là các máy Turing xác suất thời gian đa thức. Theo hiểu biết tốt nhất của tôi (vui lòng sửa lại cho tôi nếu tôi sai) có sự không phù hợp giữa lý thuyết và thực tiễn và các thuật toán cụ thể như AES và SHA256 không hoàn toàn nằm trong phạm vi của các thông số lý thuyết đó. Tôi không nghĩ rằng có đặc điểm kỹ thuật đầy đủ cho các thuật toán như vậy, do đó về nguyên tắc chúng ta không thể xác minh chúng theo nghĩa của logic Hoare.


AES nằm trong phạm vi của các định nghĩa về bảo mật mật mã. (Bạn cần phải sử dụng các định nghĩa bảo mật cụ thể thay vì các định nghĩa tiệm cận, nhưng dù sao bạn cũng nên làm điều đó nếu bạn muốn bảo mật trong thực tế.)
DW

@DW Thú vị. Tôi đã không nhận thức được điều này. Làm thế nào là bản chất tiệm cận của mật mã lý thuyết bị phá vỡ? Bạn có thể vui lòng chỉ cho tôi về một bài báo về điều này? Điều gì về các hàm băm mật mã cụ thể?
Martin Berger

vi.wikipedia.org/wiki/Concittle_security và các tài liệu tham khảo được liệt kê ở đó. Các hàm băm là một trường hợp phức tạp hơn, bởi vì nó phụ thuộc vào những gì bạn sử dụng chúng cho - nhưng sự phức tạp chủ yếu là trực giao với bảo mật tiệm cận so với bảo mật cụ thể.
DW

2
Để mã hóa, bạn cần hai thuật toán: Một thuật toán mã hóa, một thuật toán giải mã. Một trong số họ không thể tự chính xác. Chúng chỉ có thể đúng trong một cặp (bạn chứng minh rằng giải mã một đầu vào được mã hóa tạo ra bản gốc). Nhưng để mã hóa, bạn muốn nó không bị bẻ khóa và đó là thứ bạn không thể nắm bắt được với "tính chính xác".
gnasher729

1
@DW Tôi phải không đồng ý phần nào. Trong khi các bài báo của Rogaway và Bellare ngụ ý tuyệt vời rằng chúng theo bất kỳ cách nào cho phép bằng chứng bảo mật của người nguyên thủy là sai lệch. Cả hai bài viết về cơ bản là về các giao thức (tức là họ cho rằng các nguyên thủy như AES, SHA, RSA, v.v.) là an toàn và sau đó chứng minh mọi thứ từ đó. Vấn đề thiết yếu của việc chứng minh các nguyên thủy tự an toàn vẫn còn. Nếu bạn có bất kỳ tài liệu tham khảo nào cho bằng chứng về sự nguyên thủy được bảo mật, tôi sẽ quan tâm. Ví dụ, bài báo thứ hai cho rằng RSA rất khó, đây là một vấn đề mở.
DRF

5

Điều này gắn liền với sự không hoàn hảo của logic cơ bản. Thật vậy, logic Hoare thường chứa quy tắc P suy yếu hoặc "trước bài" trong đó hàm ýP

PP{P}c{Q}QQ{P}c{Q}
cần phải được chứng minh trong một logic cơ bản, thường là đầu tiên đặt hàng Logic (FOL) với một số tiên đề hóa bộ lý thuyết như Zermelo-Fraenkel (ZF).PP,QQ

P(n)P(0)P(1)P(2)nN. P(n)

MnP(n)Mn. P(n)Mn. P(n)


5

Vấn đề: In "Có" nếu mọi số chẵn 4 là tổng của hai số nguyên tố và "Không" nếu có số chẵn 4 không phải là tổng của hai số nguyên tố.

Thuật toán: In "Có"

Hầu hết mọi người nghĩ rằng thuật toán là chính xác. Không có bằng chứng được biết đến, và hoàn toàn có thể không có bằng chứng.


3

Bất kỳ thuật toán nào là đúng nhưng chúng tôi không biết phải mất bao lâu để chuyển đổi thành thuật toán dừng trong một khoảng thời gian được bảo đảm nhưng chúng tôi không chắc liệu nó có đúng không.

nn+10log(n)20n

P=NP

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.