Có thể tính toán liệu hai hàm có mở rộng bằng nhau không?


9

Nếu bạn có hai hàm thực hiện một thuật toán sắp xếp khác nhau, thì có thể suy ra bằng mã nguồn mà cả hai đều có cùng thuộc tính bên ngoài không? Có nghĩa là cả hai sẽ có một chuỗi chưa được sắp xếp có thể là đầu vào của chúng và có một chuỗi được sắp xếp là đầu ra của chúng? Bằng cách nào các thuộc tính bên ngoài có thể được xác định bởi mã nguồn? Và làm thế nào bạn sẽ mô tả các thuộc tính bên ngoài? Ký hiệu nào sẽ được sử dụng?

Các thuộc tính bên ngoài có thể được biết bằng cách xác định chúng rõ ràng, ví dụ trong một hệ thống loại, nhưng tôi tự hỏi liệu điều này có thể được thực hiện ngầm hay không. Hoặc về mặt lý thuyết là không thể suy ra loại ngữ nghĩa này? Tôi quan tâm đến việc liệu điều này có khả thi đối với các hàm tùy ý không chỉ cho việc sắp xếp các thuật toán, giả sử những thứ như hàm sẽ luôn dừng lại và không có tác dụng phụ.

Tôi nên xem xét ngữ nghĩa học biểu thị, hoặc không liên quan?

Tôi quan tâm đến con trỏ để nghiên cứu trong lĩnh vực này và các thuật ngữ khác nhau được sử dụng để mô tả chủ đề có thể giúp tìm kiếm tài liệu của tôi.

Câu trả lời:


8

Đúng. Nếu bạn có thể xác minh rằng chúng giống nhau, thì máy tính cũng vậy.

Đây là một đặc tả nhanh cho một loại số nguyên trong Coq:

Inductive natlist : Type :=
| nil : natlist
| cons : nat → natlist → natlist.

Fixpoint is_sorted (l : natlist ) : bool :=
    match l with
    |  nil => true
    |  (cons x nil) => true
    |  (cons x (cons y r)) => if x <= y then is_sorted (cons y r) else false
    end.

...

Theorem sort_spec : forall l, is_sorted (sort_list l).

Một đặc tả có thể được mã hóa trực tiếp vào khai báo sắp xếp bằng cách sử dụng các loại phụ thuộc.

Đối với vấn đề cụ thể này, John Darlington đã chứng minh vào những năm 70 rằng 6 họ thuật toán sắp xếp có thể được bắt nguồn bằng cách chuyển đổi một cách cơ học đặc tả của một loại thành một triển khai; Tôi tin rằng điều này có tên là "phái sinh chương trình dựa trên ngữ nghĩa."

Trong thế giới công nghệ phần mềm, việc tìm kiếm các chức năng tương đương mở rộng được gọi là "phát hiện bản sao ngữ nghĩa".

Dave Clarke cũng đã trả lời tốt cho câu hỏi này trên CS StackExchange: /cs/2059/how-do-you-check-if-two-alerskyms-return-the-same-result -for-any-input

Tất cả điều này nằm trong ô của các phương pháp chính thứcngôn ngữ lập trình . Ngữ nghĩa học là một loại kỹ thuật để mô hình hóa ngữ nghĩa, nhưng chúng không được ưa chuộng vì khó sử dụng so với ngữ nghĩa hoạt động.


Cảm ơn câu trả lời! Đây chính xác là những gì tôi đang tìm kiếm.
Matthijs Steen

4
Tôi hoàn toàn không đồng ý với quy định rằng ngữ nghĩa học đã "không được ủng hộ". Điều đó phụ thuộc phần lớn vào người mà bạn yêu cầu.
Andrej Bauer

5

Sự bình đẳng mở rộng trong các ngôn ngữ lập trình hoàn chỉnh Turing nói chung là không thể giải quyết được, nhưng điều đó không thể ngăn bạn có thể xác minh hoặc làm sai lệch rằng bất kỳ hai chức năng cụ thể nào đều bằng nhau.

f= =gxα.f(x)= =g(x)fgαβ


Cảm ơn câu trả lời. Tôi sẽ xem xét logic Hoare. Là ngữ nghĩa biểu thị khó xác định so với logic Hoare, hay nó chỉ ít phù hợp với hầu hết các ngôn ngữ? Là bình đẳng mở rộng không thể giải quyết được nói chung vì vấn đề dừng lại? Sau đó, nếu các chức năng luôn luôn bị dừng lại, như trong các ngôn ngữ chức năng tổng thể, liệu nó có thể được quyết định nói chung không? Hoặc có những lý do khác cho việc không thể giải quyết được nói chung?
Matthijs Steen

P0

... Có một sự bình đẳng theo ngữ cảnh có thể quyết định. Nhưng lưu ý rằng R. Loader đã chỉ ra rằng ngay cả PCF tài chính cũng có sự tương đương theo ngữ cảnh không thể giải quyết được.
Martin Berger

-2

Một câu trả lời nhanh chóng (tôi thừa nhận rằng tôi đã không dành nhiều thời gian ...) Định lý Rice nói rằng đối với bất kỳ câu hỏi không tầm thường nào, không thể nói rằng chức năng được tính toán bởi một chương trình sẽ có thuộc tính hay không. Do đó, câu hỏi ở đây là không thể giải được


1
Nó không nói rằng "... đối với bất kỳ thuộc tính không tầm thường nào của các hàm một phần ...", vì vậy nó sẽ không thể được quyết định cho tổng số hàm?
Matthijs Steen
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.