Có ai thực sự đã tạo ra một hệ thống ghi các chương trình máy tính từ đặc tả kỹ thuật không?


17

Có ai từng thực sự viết một hệ thống (phần mềm hoặc giải thích chi tiết trên giấy với các ví dụ đơn giản) tạo ra các chương trình máy tính chưa? Tôi đầu vào và nó tạo ra một chương trình liệt kê các số nguyên tố nhỏ hơn 10. P r i m e ( x ) chỉ đơn giản là định nghĩa là 1 < x MộtPrime(x)x<10Prime(x) giáo sư nói rằng họ có thể nhưng không ai đưa ra ví dụ hoàn chỉnh thực tế.

1<xAs.t.1<AA<xx=A×B, with A,BN

13
Bạn có nghĩa là, như bạn biết, một trình biên dịch cho một ngôn ngữ lập trình mục đích chung?
Sasho Nikolov

1
Xin chào - chào mừng đến với cstheory! Thật không may, câu hỏi của bạn không phải là một câu hỏi cấp độ nghiên cứu trong khoa học máy tính lý thuyết và không có chủ đề trên trang web này.

Trên thực tế, đây là một câu hỏi hay, ở đầu nghiên cứu hiện tại, và rất hứa hẹn. Tuy nhiên, thường rất khó để xác định chính xác những gì bạn muốn. Nếu bạn quản lý để chỉ định nó, thì bạn cần một hệ thống sẽ chứng minh rằng nó có ý nghĩa, rằng nó khả thi và điều đó sẽ yêu cầu một bằng chứng toán học. Từ bằng chứng đó, một chương trình làm nó có thể được trích xuất. Nhưng nghiên cứu để tự động hóa bằng chứng và trích xuất chương trình vẫn còn ở giai đoạn sơ khai, mặc dù đã đạt được tiến bộ tốt đẹp. Bạn có thể tìm ví dụ tại Coq trên wikipedia.- - - cc @LevReyzin
babou

2
Đây là một cuốn sách tương ứng với câu hỏi của bạn. Co nhung nguoi khac. Nó không đơn giản để hiểu. Đám đông Coq và Isabelle (một hệ thống khác như vậy) bao gồm những người dùng SE có thể cung cấp cho bạn thêm thông tin và ví dụ nếu câu hỏi không được đóng lại. Tôi tìm thấy nó bằng cách tìm kiếm trên web cho: tổng hợp chương trình ví dụ coq.
babou

2
Lĩnh vực khoa học máy tính nắm bắt những gì tôi đang hỏi về nó được gọi là tổng hợp chương trình và là một lĩnh vực nghiên cứu tích cực.
Huck Bennett ngày

Câu trả lời:


11

Đây là một chủ đề nghiên cứu rất tích cực, rất hứa hẹn, mặc dù tự động hóa hoàn toàn việc tạo chương trình có thể có những hạn chế nội tại (nhưng con người có tốt hơn không?). Nhưng ý tưởng vẫn rất hữu ích trong việc hỗ trợ đáng kể việc tạo ra các chương trình bằng cách cơ giới hóa nhiều bước và bằng cách tự động kiểm tra tính chính xác của việc tạo chương trình.

Nó liên quan chặt chẽ đến một kết quả trong logic, được gọi là tương ứng Curry-Howard (hay đẳng cấu), cho thấy các chương trình máy tính và bằng chứng toán học rất giống nhau.

Vì vậy, ý tưởng là hệ thống sẽ lấy đặc tả chương trình của bạn làm định lý để được chứng minh. Trong trường hợp ví dụ của bạn, nó sẽ giống như (không chính thức): "có một tập hợp tất cả các số nguyên tố nhỏ hơn 10".

Sau đó, bạn sẽ cố gắng chứng minh định lý đó và các hệ thống hiện có sẽ hỗ trợ bạn thực hiện bằng chứng, tự động hóa một số phần, có thể là toàn bộ bằng chứng và đảm bảo bạn không bao giờ mắc lỗi.

Từ bằng chứng đó, người ta có thể trích xuất một chương trình thực sự tính toán danh sách mong muốn của các số nguyên tố đã được chỉ định ban đầu.

Một số hệ thống đã được phát triển trong quá khứ để làm sáng tỏ những ý tưởng này. Một trong những người được biết đến nhiều hơn là LCF bởi Robin Milner , người đã tạo ra ngôn ngữ ML cho mục đích đó. Một trong những hệ thống tiên tiến nhất hiện nay là Coq .

Có những ví dụ được thực hiện đầy đủ, một số trong đó khá phức tạp. Bạn có thể tìm thấy một số trong bài viết sau , mặc dù nó không phải là cách đọc đơn giản và đòi hỏi kiến ​​thức nâng cao về Logic.


9

Câu trả lời wag: Có, nhưng tại thời điểm viết, đối với hầu hết các chương trình không cần thiết, các thông số kỹ thuật dường như khó viết và gỡ lỗi như các chương trình.

Nghiêm trọng hơn, câu trả lời của babou là tốt, nhưng tôi cũng sẽ đề nghị kiểm tra khu vực của các loại phụ thuộc. Có một cuốn sách khá hay sử dụng Coq (từ chối trách nhiệm đầy đủ: được viết bởi một người bạn của tôi), nhưng cũng có Epigram, Agda và Idris. Isabelle / HOL cũng đáng để kiểm tra.

Tất cả đều dựa trên tính toán của các công trình xây dựng. Nếu bạn muốn biết cơ sở lý thuyết, hãy tìm kiếm lý thuyết loại Martin-Löf. Có một số giới thiệu tuyệt vời xung quanh.


Tôi hoàn toàn đồng ý về thông số kỹ thuật (và cả phần còn lại của câu trả lời của bạn, nhưng bạn biết nó tốt hơn tôi). Bất kỳ lập trình viên thực thụ nào cũng biết việc khó khăn để xác định đầy đủ những gì một chương trình nên làm. Đây là một vấn đề lớn trong công nghệ phần mềm. Và điều đó cũng dịch ở đây, mặc dù các vấn đề được giải quyết nói chung là toán học hơn. Tuy nhiên, tôi không muốn nghe quá nản lòng (đặc biệt là với lịch sử của câu hỏi này, được minh họa bằng bình luận đầu tiên).
babou

4

Đi vào một tiếp tuyến ở đây, các trình tạo chương trình (nghĩa là các hệ thống đưa ra mô tả cấp cao về một thứ gì đó bằng ngôn ngữ đặc biệt) đã tồn tại mãi mãi. Bất kỳ trình biên dịch nào cũng là một trong số đó, cũng như bất kỳ trình tạo phân tích cú pháp nào. Trước đây, các hệ thống được gọi là "ngôn ngữ thế hệ thứ ba" đã tạo ra (hầu hết) mã của một ứng dụng kinh doanh thông thường được cung cấp một mô tả cấp cao và một danh mục dữ liệu có sẵn là phổ biến.


1

Lập trình logic và, nói chung hơn, Lập trình khai báo lấy làm tiền đề chính xác cho những gì bạn đề xuất: cụ thể là, từ một đặc tả logic, trả về một kết quả đáp ứng đặc tả đó.

Một lĩnh vực dường như giải quyết cụ thể ví dụ "số nguyên tố nhỏ hơn 10" mà bạn đưa ra là Lập trình ràng buộc cố gắng tìm giải pháp cho các vấn đề liên quan đến các ràng buộc nhất định, bao gồm các ràng buộc số nguyên như các ràng buộc số nguyên như bạn đã đưa ra.

Bạn có thể muốn thử ECLiPSe để triển khai một hệ thống như vậy (nguồn mở) cụ thể.


Sẽ là chính xác để nói rằng mô hình logic / ràng buộc là nhiều hơn để xác định câu trả lời hơn là chỉ định chương trình. Tất nhiên, bạn có thể nói rằng một đặc tả không đầy đủ là một chương trình. Nhưng bằng cách nào đó, tôi không chắc nó là trò chơi giống như tổng hợp chương trình. Mặc dù đúng là nó trả lời ví dụ, vì ví dụ này rất đơn giản. Tôi không có ý nói rằng lập trình ràng buộc chỉ dành cho các vấn đề đơn giản.
babou
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.