Nền tảng toán học
Định lý bất toàn Gödel
Mọi hệ hình thức đủ mạnh để mô tả số học đều chứa những mệnh đề đúng mà nó không chứng minh được, và không thể tự chứng minh tính nhất quán của chính mình — một giới hạn nền tảng được phát hiện năm 1931, làm thay đổi logic học, lý thuyết tính toán và triết học toán học.
Trực giácMột câu tự nói về chính nó
Xét câu: "Câu này không thể chứng minh được." Nếu nó chứng minh được, nó sẽ sai (vì nó nói nó không chứng minh được), điều này tệ cho một hệ chứng minh chỉ chứng minh những điều đúng. Vậy nó phải không chứng minh được — nhưng khi đó điều nó nói lại đúng. Ta đã tìm ra một mệnh đề đúng nhưng không chứng minh được. Đây không phải một trò chơi chữ rẻ tiền; năm 1931 Kurt Gödel đã chỉ ra cách xây dựng một câu thuần túy số học, trung thực, có đúng hành vi này bên trong bất kỳ hệ hình thức đủ mạnh nào.
Phổ thôngMột hệ hình thức là một trò chơi với luật cố định
Hãy hình dung một hệ hình thức giống như cờ vua: một thế cờ khởi đầu cố định (tiên đề), các luật cố định để di chuyển quân (quy tắc suy luận), và một ván đấu "thắng" khi đạt tới một thế cờ hợp lệ (một định lý được chứng minh). Các luật này không biết gì về thế giới thực — một máy tính có thể kiểm tra từng nước đi một cách máy móc, mà không cần hiểu một chứng minh "nghĩa là" gì. Phát hiện của Gödel chính là về điều này: dù bạn cố định tiên đề và luật cho số học như thế nào, một số sự thật đúng về các số sẽ không bao giờ đạt tới được như một "thế cờ hợp lệ" trong trò chơi.
Đại họcĐúng so với chứng minh được, và mã hóa Gödel
Định nghĩa: Tính nhất quán và tính đầy đủ
Một hệ hình thức là nhất quán (không mâu thuẫn) nếu không có mệnh đề nào mà chứng minh được cả lẫn (viết là và ). Hệ là đầy đủ nếu với mọi câu trong ngôn ngữ của nó, hoặc hoặc . Và được tiên đề hóa hiệu quả nếu một máy tính có thể quyết định một văn bản cho trước có phải là một chứng minh hợp lệ trong hay không.
Làm sao một công thức về các con số lại có thể nói về các chứng minh? Bằng mã hóa Gödel: gán một số tự nhiên duy nhất cho mỗi ký hiệu, mỗi công thức , và mỗi dãy công thức (hệt như máy tính lưu mọi tập tin thành một con số). Việc kiểm tra một dãy công thức có phải là chứng minh hợp lệ hay không là một phép tính cơ giới trên các con số đó, nên "số mã hóa một chứng minh của công thức có mã " là một quan hệ số học thông thường chỉ dùng , , và các lượng từ. Khái niệm chứng minh được trong trở thành công thức số học .
Đọc một công thức như một chuỗi ký hiệu hữu hạn, và gọi là các mã số của những ký hiệu đó theo thứ tự (chẳng hạn, một bảng tra cố định gán cho mỗi ký hiệu của ngôn ngữ một số nhỏ). Mã của toàn bộ công thức, , khi đó chính là con số ở trên: số mũ trên số nguyên tố thứ , tức (tức là ), ghi lại mã của ký hiệu thứ . Vì mọi số tự nhiên đều phân tích ra thừa số nguyên tố theo đúng một cách duy nhất, con số này luôn có thể giải mã ngược lại thành chuỗi ký hiệu ban đầu — mã hóa công thức thành số không làm mất thông tin gì, hệt như máy tính lưu một tệp văn bản thành một dãy byte.
Phương trình ở trên, , là hình dạng chung của mọi câu đường chéo (điểm bất động): với một lý thuyết , nó tạo ra một câu tương đương chứng minh được với khẳng định "Tôi, , không chứng minh được trong ." Đây không phải mẹo riêng cho ví dụ của Gödel — cùng một công thức đó dựng được một câu tự quy chiếu cho bất kỳ tính chất nào diễn đạt được trong số học, và đó chính là lý do vòng vẽ dưới đây không có phụ thuộc nào mà nó không khép lại được: mũi tên rời khỏi luôn tìm được đường quay trở lại .
Cho là một hệ hình thức nhất quán, được tiên đề hóa hiệu quả và đủ mạnh để diễn đạt số học sơ cấp. Khi đó tồn tại một câu trong ngôn ngữ của đúng trên tập số tự nhiên chuẩn , nhưng (và nếu là -nhất quán thì cũng có ). Nói riêng, không đầy đủ.
Vì sao đúng?
Nhờ bổ đề đường chéo (người họ hàng hình thức của lập luận đường chéo Cantor), số học có thể dựng một câu thỏa — một câu tự khẳng định rằng nó không chứng minh được trong . Nếu , thì đúng, nên , mâu thuẫn với tính nhất quán. Do đó — đó chính xác là điều khẳng định, khiến đúng trên . (Về sau Rosser đã bỏ được giả thiết -nhất quán.)
Chứng minh
Bước 1 (số học hóa cú pháp). Cố định một cách mã hóa tính toán được, gán cho mỗi ký hiệu, mỗi công thức, và mỗi dãy hữu hạn công thức trong ngôn ngữ của một số tự nhiên duy nhất, gọi là số Gödel của nó. Vì được tiên đề hóa hiệu quả, quan hệ — " là mã của một chứng minh cho công thức có mã " — có thể diễn đạt bằng một công thức số học chỉ dùng , và các lượng từ, vì việc kiểm tra một chứng minh từng dòng là một thủ tục cơ giới hữu hạn. Đặt .
Bước 2 (bổ đề đường chéo). Với mọi công thức số học có một biến tự do, bổ đề đường chéo tạo ra một câu sao cho — khẳng định về chính mã của nó rằng đúng với nó. Áp dụng điều này cho : ta thu được một câu với . Nói nôm na, nói rằng "Tôi không chứng minh được trong ."
Bước 3 (). Giả sử phản chứng rằng . Vì được tiên đề hóa hiệu quả, bản thân chứng minh này có một mã , nên đúng, do đó (các sự kiện số học chứng minh được về những con số cụ thể thì tự chúng cũng chứng minh được trong ). Nhưng tương đương đường chéo kết hợp với lại cho . Vậy chứng minh được cả một mệnh đề lẫn phủ định của nó, mâu thuẫn với tính nhất quán. Do đó .
Bước 4 ( đúng, và — với giả thiết -nhất quán — ). Vì , không số nào mã hóa một chứng minh của , nên đúng trên ; theo tương đương đường chéo, đây chính xác là điều khẳng định, nên đúng. Nếu cũng chứng minh được phủ định của , tức , thì kết hợp điều này với tương đương đường chéo sẽ cho — "có số nào đó mã hóa một chứng minh của " — mà không hề có một chứng minh cụ thể nào làm chứng, đúng là tình huống mà -nhất quán loại trừ. Vậy với -nhất quán, cũng đúng, và không đầy đủ.
Cho là một hệ hình thức nhất quán, được tiên đề hóa hiệu quả, mở rộng số học Peano (hoặc đủ mạnh để hình thức hóa vị từ chứng minh của chính nó), và đặt là câu số học diễn đạt rằng nhất quán. Khi đó .
Vì sao đúng?
Chính phép chứng minh của định lý thứ nhất — "nếu nhất quán thì không chứng minh được " — có thể được hình thức hóa ngay bên trong , cho ra . Nếu chứng minh được , quy tắc modus ponens sẽ suy ra , mâu thuẫn với định lý thứ nhất.
Chứng minh
Bước 1 (vị từ chứng minh được hình thức hóa được, chứ không chỉ định nghĩa được). Vì được xây dựng từ quan hệ cơ giới, kiểm tra được , ba "điều kiện suy dẫn được" sau tự chúng chứng minh được ngay bên trong (đây là chỗ lập luận cần mở rộng số học Peano, chứ không chỉ cần nhất quán): () nếu chứng minh được thì chứng minh được ; () chứng minh được ; () chứng minh được .
Bước 2 (hình thức hóa chính lập luận của Định lý 1). Theo tương đương đường chéo, . Lập luận không hình thức của Định lý 1 — "nếu chứng minh được, thì chính chứng minh đó sẽ làm chứng cho , và tương đương đường chéo khi đó sẽ trao cho ta một chứng minh của luôn" — không dùng gì ngoài thao tác cơ giới trên ký hiệu đã được bao trùm bởi ()–(), nên nó có thể được mô phỏng từng bước như một suy diễn hình thức ngay bên trong , cho ra . Vì chứng minh được cả lẫn phủ định của nó cho phép suy ra bằng nguyên lý ex falso quodlibet, điều này cho , tức .
Bước 3 (kết luận). Giả sử phản chứng rằng . Kết hợp với bằng modus ponens, sẽ chứng minh được . Nhưng Định lý 1 đã cho thấy với nhất quán — mâu thuẫn. Vậy không thể chứng minh được , đúng như khẳng định.
Vào thập niên 1920, David Hilbert đề xướng chương trình Hilbert: tiên đề hóa toàn bộ toán học rồi chứng minh, chỉ bằng những lập luận hữu hạn đơn giản trên các ký hiệu, rằng hệ tiên đề đó là nhất quán và đầy đủ. Hai định lý của Gödel chỉ ra rằng điều này không thể thực hiện đúng như mong muốn: số học Peano thậm chí không tự chứng minh được tính nhất quán của chính nó, chưa nói tới lý thuyết tập hợp, nếu không dùng những nguyên lý mạnh hơn chính hệ đang được kiểm tra.
Với mọi lý thuyết bậc nhất và mọi câu , khi và chỉ khi đúng trong mọi mô hình của ().
Vì sao đúng?
Được Gödel chứng minh năm 1929 (luận án tiến sĩ của ông), định lý này nói rằng các quy tắc suy luận của logic bậc nhất là đầy đủ: chúng không bỏ sót hệ quả logic nào. Định lý bất toàn (1931) không mâu thuẫn với điều đó: không chứng minh được là vì có những mô hình phi chuẩn trong đó sai, dù đúng trong mô hình chuẩn .
Chứng minh
Bước 1 (tính đúng đắn — chiều dễ, kéo theo ). Lập luận bằng quy nạp theo độ dài của một chứng minh hình thức của từ . Mọi tiên đề của đúng trong bất kỳ mô hình nào của theo định nghĩa; mọi tiên đề thuần túy logic (chẳng hạn ) là hằng đúng, đúng dưới mọi cách diễn giải bất kỳ. Và mỗi quy tắc suy luận bảo toàn tính đúng trong : với modus ponens, nếu và thì tự động . Vậy mọi dòng của chứng minh đều đúng trong , đặc biệt dòng cuối, , cũng đúng; vì là một mô hình bất kỳ của , nên .
Bước 2 (tính đầy đủ — chiều khó, bằng phản đảo: kéo theo ). Giả sử . Khi đó tập nhất quán (nếu nó chứng minh được một mâu thuẫn, sẽ chứng minh được bằng phản chứng). Dùng phương pháp Henkin, mở rộng nó thành một tập nhất quán tối đại có nhân chứng: mỗi khi nằm trong , một hằng số mới được thêm vào sao cho cũng nằm trong . Dựng mô hình số hạng có các phần tử là những số hạng đóng của ngôn ngữ mở rộng, đồng nhất theo đẳng thức chứng minh được trong , với các quan hệ và hàm được diễn giải trực tiếp từ . Một phép quy nạp theo độ dài số hạng ("bổ đề chân lý") khi đó cho với mọi câu .
Bước 3 (lắp ráp mô hình, và kết luận). Vì , bổ đề chân lý cho , và vì mọi tiên đề của đều nằm trong , cũng có . Vậy là một mô hình thực sự của trong đó sai, tức . Điều này chứng minh mệnh đề phản đảo của Bước 2, và kết hợp với Bước 1, đúng khi và chỉ khi — đây chính là kết quả trong luận án tiến sĩ năm 1929 của Gödel, sau này được Leon Henkin (1949) tinh gọn lại thành phép dựng mô hình số hạng dùng ở đây.
Nâng caoBất toàn, bài toán dừng và các bài toán không quyết định được
Không tồn tại thuật toán (máy Turing) nào nhận mã của một chương trình tùy ý cùng dữ liệu vào và luôn dừng với câu trả lời đúng cho việc có dừng hay không.
Vì sao đúng?
Giả sử quyết định được việc dừng. Ta dựng một máy chạy , rồi lặp vô hạn nếu trả lời "dừng", và dừng nếu trả lời "lặp". Đưa cho chính mã của nó: dừng khi và chỉ khi nói rằng nó lặp — mâu thuẫn. Đây là người anh em song sinh bên phía tính toán của câu đường chéo Gödel.
Chứng minh
Bước 1 (giả sử tồn tại bộ quyết định việc dừng). Giả sử phản chứng rằng tồn tại một thuật toán sao cho luôn dừng và trả lời đúng "dừng" nếu chương trình có mã dừng trên đầu vào , và "lặp" nếu ngược lại.
Bước 2 (dựng một máy đường chéo từ ). Định nghĩa một thuật toán mới mà, với đầu vào là mã một chương trình , trước hết tính — chạy với được đưa vào làm cả hai vai trò chương trình lẫn đầu vào. Nếu trả lời "dừng", thì cố tình đi vào vòng lặp vô hạn; nếu trả lời "lặp", thì dừng ngay lập tức (chẳng hạn, trả về ).
Bước 3 (đưa cho chính mã của nó). Vì tự nó là một thuật toán, nó có một mã, và không gì ngăn ta chạy trên chính mã đó: xét . Có hai trường hợp, cả hai đều bất khả: nếu dừng, thì theo cách dựng điều này xảy ra chính xác khi trả lời "lặp" — nghĩa là đã báo sai rằng trên không dừng, dù nó vừa mới dừng. Nếu ngược lại chạy mãi mãi, điều này xảy ra chính xác khi trả lời "dừng" — nghĩa là đã báo sai rằng nó dừng, dù nó lặp vô hạn.
Bước 4 (kết luận). Dù trường hợp nào, cũng cho câu trả lời sai trên đầu vào , mâu thuẫn với giả thiết rằng luôn đúng. Vậy không thể tồn tại thuật toán như thế: bài toán dừng không quyết định được.
Bài toán dừng suy ra ngay định lý bất toàn thứ nhất: nếu một hệ đúng đắn, được tiên đề hóa hiệu quả mà lại đầy đủ cho số học, ta có thể quyết định có dừng hay không chỉ bằng cách liệt kê lần lượt mọi chứng minh trong cho tới khi tìm thấy một chứng minh rằng dừng hoặc một chứng minh rằng nó không dừng. Và tính không quyết định được còn vươn tới tận số học thông thường: bài toán thứ 10 của Hilbert (`hilbert-tenth-problem`), hỏi về một thuật toán kiểm tra phương trình đa thức hệ số nguyên có nghiệm nguyên hay không, đã được Davis, Putnam, Robinson và Matiyasevich (1970) chứng minh là không có thuật toán như vậy. Hệ quả là, trong bất kỳ hệ nhất quán nào, cũng có một phương trình Diophantine cụ thể vô nghiệm nguyên nhưng không thể chứng minh tính vô nghiệm của nó.
Đại họcỨng dụng thực tiễn và Ví dụ minh họa
Giới hạn của Gödel và Turing không chỉ là chuyện tò mò triết học: chúng đặt ra những ranh giới cứng cho những gì công cụ phần mềm có thể hứa hẹn. Mọi công cụ phân tích tĩnh kiểu "chứng minh chương trình của tôi không có lỗi", mọi bộ chứng minh định lý tự động hoàn toàn, và mọi phần mềm diệt virus tuyên bố phát hiện mọi hành vi độc hại đều đụng thẳng vào những định lý này — một số câu hỏi về chương trình đơn giản là không quyết định được bằng bất kỳ thuật toán nào, dù có bao nhiêu sức mạnh tính toán hay sự khôn khéo được đổ vào. Hai ví dụ dưới đây làm điều này cụ thể: một ví dụ cho thấy thu nhỏ bộ máy đánh số nằm ở trung tâm chứng minh, ví dụ kia cho thấy một công việc kỹ thuật phần mềm thực thụ thừa hưởng tính không quyết định được trực tiếp từ bài toán dừng.
Ví dụ
Cố định một bảng tra chơi mẫu cho một bảng chữ cái logic nhỏ: , , . Dùng công thức mã hóa Gödel, tính mã của chuỗi ba ký hiệu "".
Lời giải
Bước 1 (đọc ra mã các ký hiệu theo thứ tự). Chuỗi "" có ba ký hiệu theo thứ tự: , , . Tra bảng ta được dãy mã , , .
Bước 2 (áp dụng công thức mã hóa). Với ký hiệu, công thức là , dùng ba số nguyên tố đầu tiên làm cơ số.
Bước 3 (tính từng lũy thừa của số nguyên tố). , , và .
Bước 4 (nhân lại). . Vì phân tích duy nhất thành , bất kỳ ai cầm con số duy nhất này đều khôi phục lại được các số mũ và do đó đọc lại được đúng chuỗi gốc "" — không có thông tin nào bị mất trong việc mã hóa.
Ví dụ
Một nhóm phân tích tĩnh muốn thêm một tính năng vào công cụ của họ: cho mã nguồn của bất kỳ hàm nào trong ngôn ngữ của họ, luôn dừng và báo cáo đúng liệu có một đầu vào nào đó khiến ném ra ngoại lệ con trỏ null hay không. Hãy chứng minh không thể tồn tại như vậy, bằng cách quy bài toán dừng về nó.
Lời giải
Bước 1 (quy bài toán dừng về việc phát hiện con trỏ null). Giả sử phản chứng rằng tồn tại. Với một chương trình và đầu vào tùy ý — một thể hiện của bài toán dừng — dựng một hàm mới (không có đầu vào riêng) như sau: trước hết mô phỏng chạy trên từng bước một, không dùng con trỏ null nào trong đoạn mã mô phỏng đó.
Bước 2 (gắn tín hiệu quan sát được). Ngay sau khi mô phỏng kết thúc — điều này chỉ xảy ra nếu dừng — thực thi thêm một dòng cố tình giải tham chiếu một con trỏ null, ném ra ngoại lệ. Nếu mô phỏng của không bao giờ kết thúc, dòng này không bao giờ được chạy tới và không có ngoại lệ nào được ném ra cả.
Bước 3 (phép quy chính xác). Theo cách dựng, ném ra một ngoại lệ con trỏ null trên một đầu vào nào đó khi và chỉ khi dừng: "một đầu vào nào đó" ở đây không quan trọng vì bỏ qua tham số của nó, nhưng quyết định của công cụ về trả lời chính xác câu hỏi dừng cho .
Bước 4 (mâu thuẫn). Chạy bộ quyết định giả định như khi đó sẽ quyết định được, với và tùy ý, liệu có dừng hay không — nhưng định lý ở trên đã cho thấy không thuật toán nào làm được điều đó. Vậy tính năng phân tích tĩnh không thể tồn tại cho các chương trình tùy ý, dù phân tích có tinh vi đến đâu.
Nghiên cứuCác mệnh đề độc lập tự nhiên và giả thuyết continuum
Câu của Gödel trông có vẻ nhân tạo — nó được chế tạo riêng để tự nói về chứng minh của chính mình. Liệu tính bất toàn có bao giờ chạm tới những câu hỏi mà các nhà toán học vốn đã đặt ra từ trước không? Có. Ví dụ nổi tiếng nhất là giả thuyết continuum (`continuum-hypothesis`) của Cantor: có tồn tại tập hợp nào có lực lượng nằm nghiêm ngặt giữa lực lượng của và lực lượng của không? Gödel (1940) chứng minh rằng lý thuyết tập hợp ZFC không thể bác bỏ giả thuyết này (bằng cách dựng vũ trụ kiến thiết được ), còn Paul Cohen (1963) phát minh phương pháp forcing (ép buộc) để chứng minh rằng ZFC cũng không thể chứng minh được nó. Ngay trong số học, định lý Paris–Harrington (1977) và định lý Goodstein (1944, được Kirby–Paris chứng minh là độc lập năm 1982) là những sự kiện tổ hợp thực thụ về các số hữu hạn, đúng trên nhưng không chứng minh được trong số học Peano.
Vì sao định lý bất toàn thứ nhất của Gödel không áp dụng cho số học Presburger (lý thuyết bậc nhất của chỉ có phép cộng , không có phép nhân )?
Định lý bất toàn thứ hai của Gödel nói gì về một hệ hình thức nhất quán, được tiên đề hóa hiệu quả và mở rộng số học Peano?
Gödel chứng minh một định lý đầy đủ năm 1929 và một định lý bất toàn năm 1931. Vì sao hai định lý này không mâu thuẫn nhau?
Nếu một hệ hình thức đúng đắn, được tiên đề hóa hiệu quả mà lại đầy đủ cho số học, điều đó sẽ kéo theo hệ quả gì cho bài toán dừng?
Tài liệu tham khảo
- Kurt Gödel (ed. Jean van Heijenoort) (1967). On formally undecidable propositions of Principia Mathematica and related systems I (1931), in From Frege to Gödel · DOI:10.1007/BF01700692
- Peter Smith (2013). An Introduction to Gödel's Theorems · DOI:10.1017/cbo9780511800962
- Torkel Franzén (2005). Gödel's Theorem: An Incomplete Guide to Its Use and Abuse