- Lịch sử hình thức hóa toán học không bắt đầu với Lean; từ gần 60 năm trước, nhiều dòng hệ thống khác nhau đã tích lũy sẵn các kỹ thuật cốt lõi và thành tựu quan trọng
- Các công cụ như AUTOMATH năm 1968, họ LCF, HOL, Rocq, ACL2, Mizar đã tạo ra nhiều hình thức hóa rộng khắp, từ giải tích thực đến định lý số nguyên tố, định lý bốn màu và giả thuyết Kepler
- Lean đã nhanh chóng xây dựng các định nghĩa của toán học hiện đại nhờ thư viện lớn và cộng đồng năng động, nhưng propositions as types hay kiểu phụ thuộc không phải là con đường duy nhất cho proof assistant
- Isabelle nêu bật các ưu điểm như tự động hóa mạnh, khả năng đọc cao, và tránh kiểu phụ thuộc, đồng thời tiếp nối truyền thống LCF xây dựng việc kiểm tra chứng minh bằng rào chắn trừu tượng của kernel mà không cần proof object
- Khi xu hướng AI sắp xếp các chứng minh có cấu trúc và dịch chúng sang hệ thống khác ngày càng mạnh lên, gánh nặng phải xem một công cụ duy nhất là tiêu chuẩn tuyệt đối có thể sẽ còn giảm đi trong tương lai
Các hệ thống ban đầu và những dòng phát triển khác
-
AUTOMATH
- AUTOMATH từ năm 1968 đã bao gồm hầu hết các yếu tố cần thiết cho hình thức hóa toán học
- Năm 1977, Jutting đã dùng AUTOMATH để hình thức hóa Foundations of Analysis của Landau, bắt đầu từ logic thuần túy và đi tới cả xây dựng số phức
- Ông dùng lớp tương đương và tập số hữu tỉ, đồng thời cũng chứng minh hình thức tính đầy đủ Dedekind của trục số thực
- Thành tựu này không được lặp lại trong suốt 20 năm, mãi đến giữa thập niên 1990 việc hình thức hóa số thực mới xuất hiện lại trong HOL Light của John Harrison và Isabelle/HOL của Jacques Fleuriot
- Ký pháp rất bất tiện và hoàn toàn không có tự động hóa, nên chứng minh vừa dài vừa khó đọc
- Dù vậy, tác giả cho rằng nó xử lý lớp tương đương tốt hơn Rocq; khác với setoid hell mà người dùng Rocq thường gặp, Jutting đã thực hiện việc hình thức hóa lớp tương đương một cách điềm tĩnh
-
Boyer và Moore
Dòng phát triển sau LCF
- Edinburgh LCF tập trung vào lý thuyết ngôn ngữ lập trình, nhưng ý tưởng dùng ngôn ngữ hàm làm meta-language cho proof assistant đã lan rộng
- Nhiều nhóm ở Cambridge, INRIA, Cornell và nơi khác đã dùng ML để tạo ra các công cụ như HOL đời đầu, Coq (nay là Rocq), Nuprl
- Nhóm HOL tập trung vào kiểm chứng phần cứng, nhưng do kiểm chứng phần cứng dấu chấm động nên đã cần tới giải tích thực
- John Harrison đã chứng minh các kết quả toán học thực thụ như định lý số nguyên tố trong họ HOL thông qua công thức tích phân Cauchy
- Với mục tiêu kiểm chứng càng nhiều càng tốt trong 100 theorems, HOL Light thường xuyên đứng ở nhóm đầu
- Đến năm 2014, các hệ thống thuộc dòng này đã hình thức hóa nhiều định lý cao cấp
- Nhìn chung, các định lý này có chứng minh dài và phức tạp, quy mô hình thức hóa cũng rất lớn, và đóng vai trò then chốt trong việc giảm bớt những điểm còn nghi vấn của định lý
Sự trỗi dậy của cộng đồng Lean
- Các nhà toán học cho rằng những thành tựu hình thức hóa trước đó chưa chạm tới các cấu trúc tinh vi của toán học hiện đại dòng chính như Grothendieck schemes hay perfectoid spaces
- Tom Hales đã chọn hướng tích lũy các định nghĩa này thành thư viện, tập trung vào tích lũy định nghĩa hơn là chứng minh, và chọn Lean
- Ông đã trình bày hướng đi này trong chương trình Big Proof, nơi các ý tưởng tương tự cũng được thảo luận cùng lúc
- Kevin Buzzard nghe điều đó rồi quyết định thử dùng Lean trong giáo dục, từ đó tốc độ lan rộng tăng mạnh
- Một bước ngoặt quan trọng của cộng đồng Lean, theo tác giả, là thoát khỏi sự ám ảnh với chứng minh kiến tạo từng chi phối Rocq trong thời gian dài
- Trực giác luận xuất hiện sau nghịch lý Russell và kéo theo những hàm ý nhất định cho cả khái niệm số thực
- Martin-Löf type theory rõ ràng là một hình thức chủ nghĩa hình thức trực giác, nhưng tác giả viết rằng không thể nhìn Rocq đơn giản như vậy
- Dù thế, trong nhiều bài viết liên quan Rocq, chứng minh kiến tạo vẫn lặp đi lặp lại cả ở những chỗ không liên quan hoặc vô nghĩa; tác giả cho rằng xu hướng này đã cản trở ứng dụng toán học của Rocq và nhường vị trí đó cho Lean
propositions as types và sự khác biệt của LCF
- Propositions as types là tính đối ngẫu nối các ký hiệu logic ∀, ∃, →, ∧, ∨ với các toán tử tạo kiểu Π, Σ, →, ×, +
- Khuôn khổ này đẹp và có năng suất về mặt lý thuyết, nhưng không phải con đường duy nhất
- Nếu giới hạn proof assistant thành phần mềm kiểm tra chứng minh dựa trên nguyên lý propositions as types, thì phần lớn nghiên cứu của nửa thế kỷ qua sẽ bị đẩy ra ngoài định nghĩa
- Khi đó chỉ còn Rocq, Lean và Agda
- Ngay cả AUTOMATH cũng không phải một ví dụ của propositions as types; dù có những yếu tố giống Π và →, phần logic vẫn được đặt bằng các tiên đề như trong giáo trình logic thông thường
- Từ 50 năm trước, de Bruijn đã cho rằng cần tách kiểu và mệnh đề
- Ví dụ điển hình là phép chia phải nhận ba đối số, và giá trị của (x/y) sẽ phụ thuộc vào chứng minh của (y \ne 0), vì thế cần proof irrelevance
- Tác giả cũng nhấn mạnh rằng nhận thức cho rằng cách tiếp cận LCF cũng chính là propositions as types là không đúng sự thật
- Rocq và Lean có Prop, là sort của mệnh đề; tại đó mọi proof object của cùng một mệnh đề đều được đánh giá là cùng một giá trị, nhờ vậy cung cấp proof irrelevance
- Nhưng điều đó không làm các proof object khổng lồ biến mất; trong hệ thống thực tế chúng vẫn còn đó
- Khám phá cốt lõi của Robin Milner là trong LCF, bản thân proof object là không cần thiết
- Đưa kernel chứng minh vào abstract data type của ML, rồi dùng các quy tắc suy diễn làm constructor, thì có thể kiểm tra chứng minh một cách động
- Tác giả cho rằng nhờ abstraction barrier của ML, việc gian lận là bất khả thi
- Trong thời đại RAMmageddon, việc những term khổng lồ không chỉ ra điều gì mà vẫn chiếm hàng chục MB trở nên đặc biệt phi lý
- Tác giả cũng phê phán việc nghiên cứu tiếp tục đi theo hướng làm cho những term không cần thiết đó trông thanh nhã hơn
Lý do để chọn Isabelle
- Nếu đồng nghiệp dùng Lean, chuyên môn của nhóm cũng nằm ở Lean, và thư viện tiên đề cần thiết cũng có trên Lean, thì dùng Lean là lựa chọn tự nhiên
- Tuy vậy, nếu có thể tự do lựa chọn thì vẫn có lý do rõ ràng để cân nhắc Isabelle
-
Tự động hóa
- Tác giả xem tự động hóa mạnh nhất là ưu điểm nổi bật, và cho rằng ngay cả khi so với các “hammer” thường ngày thì cũng không gì sánh được với sledgehammer
- Tác giả cũng viết rằng mảng đại số máy tính cần được bàn riêng
-
Khả năng đọc
-
Tránh kiểu phụ thuộc
- Vì không có kiểu phụ thuộc, nó tránh được universe level và nhiều điểm kỳ quặc khiến người mới lúng túng
- Tác giả viết rằng ngay cả trong mathlib của Lean và SSReflect, Mathematical Components của Rocq, việc dùng kiểu phụ thuộc cũng không được khuyến khích
- Điểm khó cốt lõi của kiểu phụ thuộc là nếu triển khai đúng nghĩa thì bản thân việc kiểm tra kiểu sẽ trở nên không quyết định được
- Điều này là do việc quyết định đẳng thức là không quyết định được, và lúc ban đầu đây từng được xem là điều hiển nhiên
- Khoảng từ năm 1990, sự đồng thuận chuyển sang hướng làm cho kiểm tra kiểu trở nên quyết định được bằng cách hạ đẳng thức xuống definitional/intensional equality
- Kết quả là (T(N+1)) và (T(1+N)) trở thành hai kiểu khác nhau
- Những hạn chế này ảnh hưởng đến cả chứng minh thực tế, và bản thân việc kiểm tra definitional equality vẫn còn tốn kém tính toán
Toán học hiện đại vẫn làm được mà không cần kiểu phụ thuộc
- Tác giả viết rằng vào năm 2017, ông còn thận trọng hơn nhiều khi đánh giá Isabelle có thể gánh được tới mức toán học nào
- Khi đó, người ta rất dễ nghĩ rằng muốn xử lý những chủ đề như sau thì kiểu phụ thuộc là không thể thiếu
- Nhưng thông qua nghiên cứu liên quan đến Alexandria, tác giả đã học được nhiều điều, và kết luận then chốt là đừng cố nhồi mọi thứ vào kiểu
Hướng đi sắp tới và AI
- Lean làm đúng rất nhiều điều, và còn hỗ trợ cả khối chứng minh lồng nhau, nên về tiềm năng có thể trở thành một ngôn ngữ chứng minh đủ dễ đọc
- Giờ đây cộng đồng Lean cần thực sự tận dụng những tính năng như vậy, còn người dùng Isabelle thì phần lớn đã làm điều đó từ trước
- Sự minh bạch của văn bản chứng minh mà con người thực sự đọc được quan trọng hơn proof object để máy tính kiểm tra
- Sự trỗi dậy của AI càng làm khác biệt này rõ nét hơn
- Chứng minh do AI tạo ra thường khá lộn xộn, nhưng lại dễ dọn dẹp bằng sledgehammer, và nếu cấu trúc tốt thì dù chi tiết hơi quá vẫn có thể đọc được
- Làm như vậy sẽ dễ nắm luồng tiến triển và dễ rút gọn về dạng đơn giản hơn
- Gần đây cũng đã có nghiên cứu trong đó mô hình ngôn ngữ trực tiếp gọi sledgehammer
- AI cũng có thể dễ dàng dịch các chứng minh có cấu trúc, dễ đọc từ proof assistant này sang proof assistant khác
- Khi đó, gánh nặng của chính việc phải chọn hệ thống nào sẽ giảm đi
Bổ sung phần thiếu về Mizar
- Lịch sử hình thức hóa toán học sẽ không thể đầy đủ nếu thiếu Mizar và thư viện toán học đồ sộ của nó
- Ngôn ngữ Isar của Isabelle cũng chịu ảnh hưởng lớn từ Mizar
- Tác giả nói riêng để đính chính việc đã bỏ sót Mizar, và sẽ bàn về Mizar trong bài viết tiếp theo
1 bình luận
Ý kiến Hacker News
Phần lớn độc giả HN gần với lập trình viên hơn là nhà toán học, nên nhìn Lean từ góc độ lập trình thực tế hơn là từ góc độ chứng minh toán học có lẽ sẽ hữu ích hơn
Có cuốn sách về Lean dưới góc nhìn lập trình hàm là https://leanprover.github.io/functional_programming_in_lean/ khá hay
Tôi cũng đang học Lean nên có thể vẫn còn hơi lạc quan kiểu người mới, nhưng gần đây đang hướng tới việc viết và chứng minh những đoạn mã mà lập trình viên bình thường cũng dùng, như các thuật toán nén/giải nén thực tế kiểu ví dụ lean-zip
https://github.com/kiranandcode/lean-zip/blob/master/Zip/Nat...
https://github.com/dharmatech/symbolism.lean
Đây là bản port từ mã C#, và khả năng biểu đạt của Lean lớn đến mức đáng kinh ngạc
Trước đây tôi có thấy nó từng được nhắc đến khá nhiều, nhưng gần đây không theo dõi kỹ lĩnh vực này nữa
Ngoài ra tôi còn thấy thêm hai rào cản. Thứ nhất là bản thân việc biết phần mềm cần phải làm gì đã rất khó, và điều người dùng muốn làm không nhất thiết trùng với điều khách hàng trả tiền
Thứ hai là chất lượng công việc của nhiều lập trình viên vốn quá thấp, nên khó mà kỳ vọng họ xử lý tốt ngôn ngữ chân lý hơn các ngôn ngữ như Java
Tuy vậy, điểm thứ hai có thể sẽ biến mất khi được thay bằng các hệ thống AI biết chú ý cẩn thận những gì cần thiết, và khi đó cục diện có thể thay đổi
Theo tôi, lập trình hàm cũng chẳng liên quan nhiều tới đa số lập trình viên hơn là toán học thuần vốn từ lâu đã bị bỏ lại phía sau
Có vẻ tác giả bài viết hiểu Lean khá sai, mà điều đó càng lạ hơn vì ông ấy trông như người rất rành lĩnh vực này
Ông ấy dường như cho rằng Lean giữ nguyên đối tượng chứng minh, và cuối cùng kiểm tra một đối tượng chứng minh khổng lồ với mọi định nghĩa đã được bung hết ra, nhưng thực tế không phải vậy
Lean về cơ bản triển khai gần như đúng loại tối ưu hóa mà tác giả ca ngợi ở LCF. Có thể hình dung như việc vừa chứng minh vừa xóa bảng để tiếp tục
Trong Lean4, nếu viết bằng
theoremthay vìdefthì đối tượng chứng minh đó sẽ không còn được dùng nữa, và đây không chỉ là tối ưu hóa mà là một tính chất cốt lõi của ngôn ngữ. theorem là opaqueKể cả khi term chứng minh còn tồn tại thì cũng chỉ để người dùng có thể xem trong chế độ tương tác, còn kernel thậm chí không thể quan tâm đối tượng chứng minh đó thực ra là gì
Trong LCF, chứng minh và term là hai thứ khác nhau, và theo tôi vốn dĩ nên như vậy. Kiểu lẫn lộn theo Curry-Howard này là không cần thiết, nhưng nhiều người lại tưởng đó là cách duy nhất để làm toán bằng máy tính
Nếu muốn thì trong LCF bạn vẫn có thể lưu và dùng lại chứng minh, còn trong Lean nếu muốn thì cũng có thể xóa chúng đi như một tối ưu hóa
Cách tiếp cận kiểu trừu tượng có thể tiết kiệm bộ nhớ đôi chút, nhưng chỉ là khác biệt ở hệ số hằng chứ không cải thiện về mặt tiệm cận
Những lời phàn nàn kiểu Lean lãng phí hàng chục MB có lẽ quan trọng vào thập niên 1980–90, nhưng ngày nay có thể đó không còn là lợi thế mang tính quyết định nữa
Tôi thường nghe nói Lean tốt cho lập trình hàm, nhưng nếu đi từ Agda sang thì nó khá giống một bản hạ cấp vụng về
Mọi người cũng khen tactic của nó, nhưng theo trải nghiệm của tôi thì tactic của Coq mạnh hơn và dễ dùng hơn
Có thể tất cả chỉ là thiên kiến ấn tượng ban đầu, nhưng đến lúc này tôi thấy điểm mạnh của Lean không phải vì nó làm một thứ nào đó tốt nhất, mà vì nó khá ổn trên mọi mặt và cộng đồng lớn
Tôi hiểu vì sao nó hấp dẫn, nhưng cũng hơi tiếc vì cảm giác như phải đánh đổi bớt vẻ đẹp và sức mạnh
Tuy vậy, những hiệu ứng như thế thường ở thời điểm đó trông như sẽ tồn tại mãi mãi, nhưng thực tế lại không bền đến vậy. Nếu chỉ riêng điều đó là quan trọng thì Perl giờ vẫn phải là ông lớn
Riêng với Lean thì việc có thư viện lớn từ sớm là yếu tố đáng kể. Khá giống vai trò CPAN từng có với Perl
Nhưng nếu nhìn theo các định luật scaling thì với phần lớn người dùng, giá trị của thư viện lớn có lẽ chỉ tăng theo log của kích thước
https://pdodds.w3.uvm.edu/teaching/courses/2009-08UVM-300/do...
Lúc đầu khoảng cách này có vẻ không thể vượt qua, nhưng đến một lúc nào đó không nhất thiết phải bắt kịp quy mô; tính dễ dùng sẽ quan trọng hơn
Hơn nữa, việc port thư viện toán học lại rất hợp với LLM. Mã nguồn đã được kiểm chứng, đích đến cũng có thể kiểm chứng, và lộ trình suy luận nhìn chung cũng chuyển sang được
Nói ngược lại, nhờ LLM mà rào cản làm việc trên các nền tảng nhỏ hơn cũng thấp hơn dự đoán. Nếu tôi có thể chuyển thư viện bên đó sang nền tảng của mình, thì cũng có khả năng chuyển cả các chứng minh của tôi sang đó
Công cụ hoàn hảo không phải cốt lõi; quan trọng hơn là hoàn thành được việc với một công cụ đủ tốt
Lean thật sự có tiềm năng phát triển thành một ngôn ngữ hàm cho phát triển phần mềm, thậm chí có thể là người kế nhiệm của Haskell
Khác biệt chủ yếu có lẽ nằm ở hỗ trợ công cụ. Tài liệu của Agda nghèo nàn, cài đặt rồi vận hành trên hệ thống cũng phiền phức, và gần như ép bạn phải dùng Emacs
Trong khi đó Lean có tài liệu riêng hướng dẫn cả cách viết tiện ích
cat, và nhìn chung cho trải nghiệm tooling hiện đại hơn nhiềuThường lời khen tôi nghe nhiều nhất là về dependent pattern matching, và ở phần đó thì tôi thấy Lean khá yếu
Nhưng nếu ngay cả trong FP nói chung mà bạn cũng thấy Agda thân thiện hơn, tôi muốn nghe rõ là ở điểm nào
Isabelle/HOL thì bản thân ngôn ngữ cũng ổn, nhưng tooling có những khuyết điểm sâu sắc vượt xa chuyện bám vào mô hình desktop
Ngôn ngữ của nó không khác Lean đến mức chắc chắn là tốt hơn, và tôi cũng đồng ý với một số phê bình nhắm vào dependent type
Cuối cùng thì hai ngôn ngữ này chỉ đang chọn các đánh đổi khác nhau, và những lựa chọn đó đã khiến mỗi bên trở thành công cụ khá hiệu quả trong khu vực riêng của mình. Bản thân miền chứng minh rất rộng nên mỗi hệ hình sẽ có điểm mạnh điểm yếu khác nhau, còn Lean chỉ là tối ưu cho một phần khác của bài toán
Sledgehammer thì tốt, nhưng chuyện Lean có một thứ tương tự có lẽ chỉ còn là vấn đề thời gian
Nó có thể hữu ích ở giai đoạn dò tìm, nhưng lại tốn tài nguyên, và dù giúp làm chứng minh ngắn đi, tôi vẫn thích toàn bộ các bước chứng minh được hiện ra rõ ràng trong mã công khai hơn là kiểu
by sledgehammernửa như phép màuNgược lại, phát triển chính Isabelle thì đau đớn hơn Lean rất nhiều, đặc biệt là trong quá trình giao tiếp với các nhà phát triển
Thái độ trên mailing list kiểu không có bug, chỉ có hành vi ngoài dự kiến trông vừa trẻ con vừa thiếu chuyên nghiệp
Và việc châm chọc mức dùng RAM của các hệ giống Lean cũng khá buồn cười nếu nhìn vào cơn háu ăn bộ nhớ của chính Isabelle
Về cơ bản, độ khó của nó gần giống với việc dùng chứng minh hình thức ngay từ đầu
Cũng có thể tôi đang nhầm với một hệ HOL khác
grindcủa Mathlibhttps://leanprover-community.github.io/mathlib4_docs/Init/Gr...
Điểm thú vị của Lean là Lean là ngôn ngữ, nhưng thứ mọi người chủ yếu nói đến thực ra lại là thư viện Mathlib
Những người làm Mathlib có vẻ khá thực dụng, nên họ đưa logic cổ điển vào trong các kiểu của Lean và chỉ dùng một phần logic trực giác
“Một điều gì đó không thể vừa đúng vừa sai cùng lúc” không phải luật bài trung mà là luật không mâu thuẫn
Luật bài trung là
pđúng hoặcnot pđúnghttps://en.wikipedia.org/wiki/Law_of_noncontradiction
https://www.cslib.io https://www.github.com/leanprover/cslib
Logic trực giác về bản chất có ý nghĩa ở chỗ biến các lập luận toán học thành cấu trúc có thể tính toán được, nên khá thú vị khi nghĩ xem họ sẽ xử lý chuyện này thế nào
Thực ra, ngay khi bạn viết thuật toán bằng Lean thì bạn đã ở trong một dạng ràng buộc kiến tạo nào đó rồi, và cho mục đích ấy thì có lẽ chừng đó logic là đủ
phủ nhận, tức giận, mặc cả, trầm cảm, chấp nhận
Các bài giảng và bài viết liên quan của Andrej Bauer cũng đáng xem
https://www.youtube.com/watch?v=21qPOReu4FI
http://dx.doi.org/10.1090/bull/1556
Tôi nghĩ kiểu bài viết thế này nên có nhiều hơn
Ngay cả trước kiểu tư duy bầy đàn cứ mặc nhiên đẩy mọi người sang cứ dùng X đi, vẫn luôn có những lý do đủ thuyết phục để ít nhất xem xét phương án khác
Dù cuối cùng vẫn bỏ lựa chọn thay thế và theo dòng chính, tôi nghĩ chọn sau khi hiểu địa hình vẫn tốt hơn
Ngay bây giờ chúng ta vẫn đang tạo ra quá nhiều framework và lựa chọn thay thế, chắc phần nào vì thấy vui
Thay vì cải thiện công cụ hiện có hay đơn giản là làm việc thực tế, người ta thường lao vào sinh sôi vô tận ngôn ngữ, thư viện và build tool
Theo tôi, nếu số ngôn ngữ, thư viện và build tool hiện nay chỉ còn một nửa thì có khi còn tốt hơn
Càng rời xa dòng chính thì tài liệu càng ít, bug từ những góc ít ai khai phá càng nhiều, và số người có thể giúp đỡ bạn cũng càng giảm
Khi có hơn hai mươi lựa chọn chồng chất lên nhau, thì trung bình mà nói cứ chọn phương án tiêu chuẩn rồi đi tiếp là đúng hơn. Sự chú ý là hữu hạn; nếu viết báo cáo khảo sát cho từng dependency thì rốt cuộc lại không giải được bài toán chính
Chỉ có hai ngoại lệ: hoặc công cụ tiêu chuẩn thực sự không hợp với use case của tôi, hoặc chính công cụ tiêu chuẩn đó lại giao cắt mạnh với bài toán cốt lõi mà tôi đang cố giải
Cuộc thảo luận này khiến tôi liên tưởng đến những bài viết chỉ ra giới hạn của Python trong tính toán khoa học
Khi một cộng đồng vượt qua khối lượng tới hạn quanh một công cụ đủ ổn, điều đó sẽ lấn át hầu hết các yếu tố còn lại
Nó tạo ra đà phát triển, rồi tutorial, bài giải thích và tài liệu tốt hơn cứ chồng lên nhau, đến mức gần như đạt vận tốc thoát
Lean có vẻ đang ở đúng vị trí đó, còn có cả Terrance Tao làm người ủng hộ mạnh mẽ
Vì thế, câu nói kiểu “ngôn ngữ X tốt hơn” không hẳn là sai hoàn toàn, nhưng lại dễ bỏ lỡ câu hỏi quan trọng hơn
Cốt lõi là liệu nó có thực sự tốt hơn công cụ mà ai cũng biết, có thể dùng ngay, và đang nhận nhiều thời gian cải tiến hơn hay không
Cuối cùng trông khá giống tình huống worse is better, hoặc ít nhất là tốt và phổ biến thì cũng đã đủ
Đặc biệt trong lĩnh vực này, kết quả dịch còn có thể được kiểm chứng tự động ở mức đáng kể, nên bản thân lựa chọn ban đầu có thể không phải vấn đề quá lớn
AI có thể tự viết mã mà không cần một thư viện cộng đồng khổng lồ, và cũng không cần cả triệu tutorial trôi nổi trên Internet vì nó có thể đọc trực tiếp tài liệu và đặc tả
Cũng không cần tránh những ngôn ngữ không có thị trường việc làm. AI đâu cần xây dựng sự nghiệp, nó chỉ cần làm xong việc đang được giao
Vì thế những ngôn ngữ nhỏ và DSL vốn trước đây không có cơ hội giờ có thể lại có cửa được chấp nhận
Tôi nghĩ AI cũng có thể chấm dứt tình trạng đơn văn hóa ngôn ngữ đã kéo dài trong lập trình
Câu “hầu như mọi thứ ngày nay được hình thức hóa bằng hệ nào thì AUTOMATH cũng đã có thể hình thức hóa bằng nó” nghe khá giống với việc nói rằng ngày nay mọi thứ viết bằng ngôn ngữ hiện đại thì 50 năm trước cũng đều có thể viết bằng assembly
Về mặt kỹ thuật có thể đúng, nhưng về mặt kinh tế thì hoàn toàn khác
Khoảng 15 năm trước tôi từng thử động vào Coq/Rocq và vài công cụ khác, nhưng thấy phần mềm bản thân nó khó hiểu kinh khủng, thậm chí còn hơn cả các khái niệm
Điểm lạ ở proof assistant / interactive theorem prover là tính chất interactive khiến nó thành kiểu kết hợp giữa ngôn ngữ và IDE, và trên thực tế hai thứ này gắn với nhau rất chặt
Vì vậy khó mà nói riêng về ngôn ngữ; cũng phải xét luôn môi trường mà nó được dùng trong
Tôi không phải fan cuồng của VS Code, nhưng rõ ràng một IDE mở rộng được đã được vô số người dùng, được đổ rất nhiều tiền vào và được mài giũa thì đi trước xa các môi trường của những lựa chọn khác
Những lộ trình nhập môn tuyệt vời như Natural Numbers Game dường như cũng chỉ khả thi nhờ khả năng hack và hệ sinh thái của VS Code
Tuy vậy, điều tôi lo khi học Lean là khả năng mở rộng cú pháp giống con dao hai lưỡi
Sau khi học ngôn ngữ, người ta sẽ muốn đọc mã viết bằng ngôn ngữ đó, nhưng nếu mỗi dự án lại bắt đầu tự dựng đầy DSL riêng thì có thể mọi thứ sẽ vượt khỏi tầm kiểm soát
Cuối cùng chuyện này phụ thuộc vào việc cộng đồng và hệ sinh thái có tiết chế đến đâu, nên tôi đang nhìn nó với cả hy vọng lẫn dè chừng
Lean không phải proof assistant được các nhà toán học yêu thích nhất, cũng không phải công cụ hợp nhất cho kiểm chứng hình thức phần mềm
Nhưng nó làm được cả hai ở mức tạm ổn, và đổi lại đã nắm được thứ khó kiếm nhất là đà phát triển
Hơn nữa, trong thời đại AI, lượng mã do con người công khai viết ra còn ảnh hưởng trực tiếp tới việc các agent tạo mã mới tốt đến đâu, nên đà đó lại càng mạnh hơn