Một ngôn ngữ lập trình chỉ có thể thực hiện các chức năng phỏng đoán tính toán?


10

Có ngôn ngữ lập trình (hoặc logic) nào có thể thực hiện (hoặc diễn đạt) một hàm khi và chỉ khi f là một hàm tính toán tính toán?f:NNf


Ai đó đã chứng minh với tôi rằng không thể tạo ra một ngôn ngữ chỉ chấp nhận chấm dứt các chương trình. Vì câu hỏi của bạn khá giống nhau, tôi đoán là không.
FUZxxl

1
Dường như không có ngôn ngữ lập trình như vậy, tôi đoán bạn có thể cố gắng thực thi nó, nhưng sau đó bạn sẽ không thể làm những việc đơn giản như sắp xếp, ít nhất là không phải nó trở nên phức tạp và đau đớn khủng khiếp.
Luke Mathieson

@FUZxxl Điều này không nắm bắt được nhiều chương trình kết thúc, trên thực tế, ngay cả hàm f (x) = 1 cũng không thể diễn đạt bằng ngôn ngữ này. Ngoài ra tôi có cảm giác loại chức năng này được nắm bắt bởi tổng thể lập trình chức năng vì mỗi chức năng là một chức năng tổng.
Chao Xu

@FUZxxl, tôi không nghĩ điều đó đúng, nhưng ngôn ngữ như vậy sẽ bị hạn chế. Ví dụ, một ngôn ngữ tương đương với automata xác định hữu hạn sẽ được đảm bảo chấm dứt, nhưng sẽ cực kỳ hạn chế trong những gì nó có thể tính toán.
jmite

@FUZxxl, các chi tiết của một tuyên bố như vậy rất quan trọng. Thật dễ dàng để thiết kế một ngôn ngữ lập trình trong đó mọi chương trình kết thúc. Việc thiết kế một ngôn ngữ mà chúng ta có thể diễn đạt mọi chức năng tính toán là một vấn đề khác nhau.
Vijay D

Câu trả lời:


9

Không có ngôn ngữ như vậy.

Tuy nhiên, hãy xem Boomerang . Nó là một ngôn ngữ để viết các mệnh đề giữa các chuỗi. Tôi không biết một lớp bản đồ có thể biểu thị rộng đến mức nào, nhưng tôi chắc chắn bạn có thể tìm ra nếu bạn tìm kiếm một chút.

Điều hợp lý là yêu cầu một ngôn ngữ lập trình rằng tập hợp các chương trình hợp lệ có thể được nhận biết bởi một trình thông dịch hoặc trình biên dịch, nghĩa là nó là một tập hợp có thể tính toán được. Giả sử sau đó chúng tôi đã có một ngôn ngữ lập trình có tập hợp các chương trình hợp lệ là computably đếm được và đó thực hiện một cách chính xác tất cả bijections tính toán . Điều đó có nghĩa là chúng ta có thể tính toán tất cả các mệnh đề tính toán (đơn giản là liệt kê tất cả các chương trình hợp lệ trong ngôn ngữ lập trình này), nhưng điều này là không thể theo định lý tiếp theo.NN

Định lý: Giả sử là một chuỗi tính toán của bijections tính toán. Sau đó, có một tính toán tính toán không có trong chuỗi.f0,f1,f2,

Bằng chứng. Chúng tôi xây dựng một bijection như sau. Để xác định các giá trị g ( 2 k )g ( 2 k + 1 ) , chúng tôi xem xét f k ( 2 k ) :g:NNg(2k)g(2k+1)fk(2k)

  • fk(2k)=2kg(2k)=2k+1g(2k+1)=2k
  • fk(2k)2kg(2k)=2kg(2k+1)=2k+1

kNgfkg(2k)fk(2k)g


2k2k+1g(k)=fk(k)+1

fk(k)+1

g

Tuyên bố ban đầu là sai, có nhiều ngôn ngữ như vậy trong tài liệu.
Nathaniel

Mặt khác bằng chứng của bạn có vẻ hợp pháp. Có lẽ tôi đang bối rối bằng cách nào đó. Tôi cần đọc kỹ bài viết của Axelsen và Glück (xem câu trả lời của tôi) để tìm hiểu chuyện gì đang xảy ra ở đây.
Nathaniel
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.