Nền tảng toán học
Chứng minh hình thức (Lean)
Phần mềm chứng minh như Lean kiểm tra một chứng minh toán học giống cách trình biên dịch kiểm tra một chương trình: quy câu hỏi "chứng minh này đúng không?" về việc kiểm tra phán đoán kiểu , do một hạt nhân tin cẩn nhỏ xác nhận.
Trực giácVì sao tin một chứng minh bạn không đọc hết được?
Mathlib, thư viện toán học của Lean 4, hiện có tới hàng triệu dòng chứng minh — nhiều hơn bất kỳ ai có thể đọc hết từng dòng. Nhưng các nhà toán học vẫn tin nó, giống như ta tin con dấu kiểm định thang máy chứ không tự hàn lại từng sợi cáp: một quy trình kiểm tra nhỏ, cố định (hạt nhân) đã xác nhận từng bước một, và hạt nhân đó đủ ngắn để soát bằng tay.
Đại họcPhép tính các cấu trúc quy nạp
Định nghĩa: Hạng thức, kiểu, và phán đoán kiểu
Lô-gíc gốc của Lean là Phép tính các cấu trúc quy nạp (CIC): một lý thuyết kiểu phụ thuộc, nơi kiểu có thể phụ thuộc vào giá trị (kiểu hàm phụ thuộc , đọc là "với mọi , có một giá trị kiểu "), và kiểu mới được xây bằng khai báo quy nạp (số tự nhiên, danh sách, kiểu bằng nhau mệnh đề). Mọi đối tượng được phân loại bởi phán đoán kiểu : "trong ngữ cảnh , hạng thức có kiểu ".
Theo tương ứng Curry–Howard, một mệnh đề chính là một kiểu, và một chứng minh của là một hạng thức thuộc kiểu đó — chứng minh chính là lập trình. Đây là lý do tại sao thuật toán kiểm tra kiểu, thứ vốn đã phải tồn tại để dịch chương trình, cũng đủ để kiểm chứng minh.
| Tầng | Việc | Độ tin cẩn |
|---|---|---|
| Bộ dịch chi tiết / tactic | Tìm hạng thức chứng minh từ script tactic mức cao | Không cần tin: lỗi ở đây chỉ tốn thời gian |
| Hạt nhân | Kiểm lại rằng thật sự có kiểu | Tin cẩn: đây là tiêu chí de Bruijn |
Nâng caoTiêu chí de Bruijn và phép bằng qua Eq.rec
Tiêu chí de Bruijn nói một phần mềm chứng minh đáng tin khi có một hạt nhân nhỏ, kiểm tra độc lập, xác nhận mọi hạng thức chứng minh, nên : tính đúng đắn dựa trên vài trăm dòng mã, không dựa vào bộ máy tactic đã sinh ra hạng thức đó. Phép bằng quy nạp được định nghĩa bởi một hàm dựng duy nhất , và phép khử (quy tắc J) là nguyên thủy duy nhất hạt nhân cần để suy ra mọi tính chất khác của phép bằng.
Tồn tại hạng thức chỉ dựng từ và ; tính đối xứng là một định lý của CIC, không phải một tiên đề thêm.
Vì sao đúng?
Nếu phép bằng cần tiên đề riêng cho đối xứng, kết hợp, tương thích..., hạt nhân tin cẩn sẽ phình ra theo mỗi tính chất mới của . Suy ra tất cả từ một phép khử giữ hạt nhân nhỏ.
Chứng minh
Cố định . Ta muốn một hàm nhận (với tuỳ ý) và trả về chứng minh . Áp dụng với motive — một họ mệnh đề chỉ số theo điểm và chứng minh nối với .
Phép khử yêu cầu một chứng minh cho trường hợp gốc , tức ; ta cấp . Điều này hợp lệ vì trường hợp gốc luôn được chỉ số bởi tại điểm khởi đầu .
sau đó trả, với mọi và mọi , một chứng minh của . Thay : ta nhận đúng chứng minh của .
Gói lại thành cho ra hạng thức kiểu . Hạt nhân chấp nhận nó chỉ bằng cách khớp phép áp dụng này với chữ ký kiểu của — không cần lập luận về khái niệm "đối xứng" ở mức hạt nhân.
Tồn tại hạng thức chỉ dựng từ .
Vì sao đúng?
Nối các phép bằng ( nên ) được dùng trong hầu như mọi chứng minh; nếu đây là tiên đề thay vì hạng thức suy ra được, hạt nhân phải tin tiên đề đó thay vì xác nhận nó bằng tính toán.
Chứng minh
Cố định và . Cho với tuỳ ý, ta muốn chứng minh . Áp dụng lên với motive , chỉ số theo điểm và chứng minh nối với .
Trường hợp gốc cần là , tức — chính là . Vậy là chứng minh trường hợp gốc cấp cho .
sau đó trả, với mọi và mọi , một chứng minh của , đúng như ta cần.
Vậy có kiểu . Chú ý mẫu hình chung với đối xứng: cả hai chứng minh đều "vận chuyển" một sự kiện theo một phép bằng bằng cách chọn motive phù hợp, rồi để quy tắc rút gọn cố định của hạt nhân cho trên làm việc thật.
Đại họcỨng dụng thực tiễn: từ trình biên dịch đến số học
Chứng minh hình thức không còn là thứ chỉ nằm trong phòng thí nghiệm. CompCert, một trình biên dịch C được xác minh hình thức trong Coq, có chứng minh do máy kiểm rằng mã assembly nó sinh ra luôn hoạt động như chương trình nguồn — điều không bộ kiểm thử nào đảm bảo được. AWS và Signal dùng mã mật mã đã xác minh hình thức (trong công cụ như thư viện TLS s2n của AWS, HACL và F) để loại bỏ hẳn nhiều lớp lỗi an toàn bộ nhớ và lỗi kênh kề. Và trong toán học thuần túy, Thí nghiệm Tensor Lỏng (2020–2022) của Lean đã hình thức hóa một định lý khó của Peter Scholze trong toán học cô đặc, và nhóm của Terence Tao đã hình thức hóa chứng minh giả thuyết Polynomial Freiman–Ruzsa (PFR) trong Lean chỉ vài tháng sau khi chứng minh của con người xuất hiện năm 2023.
Ví dụ: Kiểm kiểu chứng minh
Chỉ ra, ở mức hạt nhân, vì sao hạng thức xây bằng quy nạp cho được chấp nhận.
Lời giải
Phép cộng trên định nghĩa bằng quy nạp trên đối số thứ hai: và . Vậy trường hợp gốc của đích rút gọn bằng tính toán về , chính là — hạt nhân chấp nhận không cần lập luận lô-gíc gì, chỉ mở định nghĩa.
Với định lý tổng quát , trường hợp gốc này tầm thường theo định nghĩa trên, nên phát biểu này không cần quy nạp (khác với , cần quy nạp vì đệ quy trên đối số thứ hai).
Vai trò của hạt nhân chỉ là mở theo định nghĩa đệ quy trên hạng thức , ra , rồi kiểm hai vế của đích bằng nhau theo định nghĩa — quy "chứng minh này đúng không" về một tính toán kết thúc, đúng là tiêu chí de Bruijn hoạt động.
Ví dụ: Dịch đã xác minh như một phép bằng có kiểu
CompCert phát biểu định lý đúng đắn của nó như một tính chất bảo toàn ngữ nghĩa. Giải thích "chứng minh là một hạng thức thuộc kiểu đó" mang lại gì cho kỹ sư so với việc kiểm thử trình biên dịch thông thường.
Lời giải
Định lý của CompCert có dạng "với mọi chương trình nguồn dịch ra assembly , mọi hành vi quan sát được của là hành vi của " — một phát biểu định lượng phổ dụng trên mọi chương trình nguồn, không chỉ những chương trình trong bộ kiểm thử.
Bộ kiểm thử chỉ kiểm hữu hạn cặp và không thể loại trừ lỗi dịch sai ở chương trình số 4.000.001. Một hạng thức chứng minh Coq của phát biểu định lượng phổ dụng thì được kiểm kiểu một lần, cho toàn bộ lượng từ, bởi hạt nhân — cùng hạt nhân dùng cho mọi bổ đề khác của CompCert, nên không có niềm tin mới nào được đưa thêm cho mỗi trường hợp kiểm thử.
Vì hạng thức chứng minh là toàn phần và định lý nói về chính mã nguồn Coq thật của trình biên dịch (trích xuất sang OCaml), bất kỳ thay đổi nào phá vỡ đảm bảo đơn giản sẽ không qua được kiểm kiểu, bắt được các hồi quy mà bộ kiểm thử hồi quy hữu hạn hoàn toàn bỏ lỡ — đây chính xác là lý do mã CompCert sinh ra có không lỗi dịch sai nào bị các chiến dịch fuzzing tìm thấy, trong khi các chiến dịch đó tìm thấy hàng trăm lỗi ở GCC và Clang.
Phán đoán kiểu khẳng định điều gì?
Tiêu chí de Bruijn được tóm tắt tốt nhất là:
Trong chứng minh , mệnh đề nào được cấp cho trường hợp gốc ?
Hệ thống thực tế nào dựa vào chứng minh máy kiểm rằng assembly sinh ra luôn hoạt động như chương trình nguồn?
Tài liệu tham khảo
- Leonardo de Moura, Sebastian Ullrich (2021). The Lean 4 Theorem Prover and Programming Language
- Xavier Leroy (2009). Formal verification of a realistic compiler
- Terence Tao, et al. (2023). A Proof of the Polynomial Freiman-Ruzsa Conjecture · arXiv:2311.05762