[Lưu ý: đoạn văn này hiện đã lỗi thời.] Tiêu đề câu hỏi của bạn chứa một giả định không chính đáng, cụ thể là các ngôn ngữ lập trình là "dựa trên nền tảng của toán học". Điều này thường không phải là trường hợp, mặc dù hai lĩnh vực có mối quan hệ quan trọng. Một tuyên bố chính xác hơn sẽ là (một số) ngôn ngữ lập trình được thiết kế bằng các kỹ thuật nền tảng. Một câu hỏi tốt hơn để hỏi là "ngôn ngữ lập trình và nền tảng của toán học liên quan như thế nào?"
Kết nối chung nhất được thể hiện trong các chương trình chứng minh khẩu hiệu , có thể được thực hiện để hoạt động theo nhiều cách. Sự tương ứng của Curry-Howard là rõ ràng nhất. Với nó, chúng tôi liên quan cùng một lúc loại lý thuyết, logic và lập trình. Nhưng cần nhấn mạnh rằng sự tương ứng của Curry-Howard không hoạt động tốt khi có sự đệ quy chung (vì mọi loại đều trở nên có người ở), điều mà mọi ngôn ngữ lập trình đa năng đều hỗ trợ.
Một cách tinh tế hơn để làm cho các chương trình chứng minh khẩu hiệu hoạt động là sử dụng tính khả thi . Ở đây chúng tôi cũng liên quan đến bằng chứng và chương trình, nhưng bây giờ hướng đi từ bằng chứng đến chương trình: mọi bằng chứng đưa ra một chương trình, nhưng không phải mọi chương trình đều nhất thiết phải là bằng chứng.
Ví dụ chính của ngôn ngữ lập trình dựa trên nền tảng là Agda , đơn giản là việc thực hiện lý thuyết loại phụ thuộc. Tuy nhiên, Agda không phải là ngôn ngữ lập trình có mục đích chung vì nó không hỗ trợ đệ quy chung. Mọi hàm trong Agda đều là tổng số và có các hàm tính toán không thể thực hiện được trong Agda. Trong thực tế, các lập trình viên sẽ không nhận thấy điều này, nhưng họ sẽ nhận thấy rằng Agda không cho phép các giá trị không xác định, ví dụ như các vòng lặp vô hạn.
Coq là không một ngôn ngữ lập trình mà là một trợ lý bằng chứng. Tuy nhiên, nó cũng có khả năng trích xuất cung cấp các chương trình từ bằng chứng. Trợ lý bằng chứng và ngôn ngữ lập trình không nên nhầm lẫn với nhau.
Chúng ta không nên quên rằng prolog và các ngôn ngữ lập trình logic khác lấy cảm hứng từ ý tưởng rằng tính toán là tìm kiếm bằng chứng . Điều này tất nhiên liên quan đến họ chặt chẽ với logic.
Haskell là một ngôn ngữ lập trình có mục đích chung dựa trên lý thuyết miền . Điều đó có nghĩa là, ngữ nghĩa của nó là lý thuyết miền bởi vì nó phải tính đến một phần chức năng và đệ quy. Cộng đồng Haskell đã phát triển một số kỹ thuật lấy cảm hứng từ lý thuyết thể loại, trong đó monads được biết đến nhiều nhất nhưng không nên nhầm lẫn với monads . Tổng quát hơn, các tính năng lập trình nâng cao thường được xử lý bằng sự kết hợp giữa lý thuyết miền và lý thuyết thể loại, nhưng đây không phải là điều mà lập trình viên Haskell trên đường phố yêu thích. Cái gọi là "phạm trù cú pháp" của các loại Haskell là quan điểm của một giáo dân về cách Haskell và lý thuyết thể loại tương ứng với nhau.
Đặt lý thuyết (cổ điển hoặc xây dựng) dường như truyền cảm hứng cho các ý tưởng trong ngôn ngữ lập trình ở mức độ thấp hơn. Tất nhiên, lý thuyết tập hợp xây dựng có mối liên hệ với lập trình thông qua logic xây dựng. Một ứng dụng quan trọng của lý thuyết tập hợp trực giác cho các ngôn ngữ lập trình được đưa ra bởi Alex Simpson, người đã sử dụng nó để làm cho lý thuyết miền tổng hợp hoạt động. Nhưng đây là công cụ khá tiên tiến, có thể thấy những slide này . Jean-Louis Krivine đã phát triển một thương hiệu thực tế rất thú vị cho lý thuyết tập hợp cổ điển. Đây có vẻ là một cách tốt để liên quan đến lý thuyết và lập trình cổ điển.
Tóm lại, lý thuyết về ngôn ngữ lập trình sử dụng các kỹ thuật nền tảng. Điều này không đáng ngạc nhiên, vì chúng tôi coi tính toán là một khái niệm cơ bản. Nhưng thật quá ngây thơ khi nói rằng các ngôn ngữ lập trình "dựa" vào một nền tảng nhất định. Trên thực tế, trichotomy của các nền tảng "lý thuyết tập hợp - lý thuyết loại - lý thuyết phạm trù" một lần nữa chỉ là một quan sát cấp cao hữu ích có thể được thực hiện chính xác về mặt toán học theo nhiều cách khác nhau, nhưng không có gì cần thiết về nó. Đó là một tai nạn lịch sử.