Có một thuật toán chung để lấp đầy các lỗ hổng về Tính toán công trình không?


9

Giả sử rằng bạn mở rộng Tính toán công trình bằng "lỗ hổng" - tức là các đoạn mã chưa hoàn chỉnh mà bạn chưa điền. Tôi tự hỏi nếu có một thuật toán để tự động điền các vai trò đó. Ví dụ: (sử dụng cú pháp của Morte ):

Trường hợp A:

λ (pred : ?) 
-> λ (Nat : *) 
-> λ (Succ : Nat -> Nat) 
-> λ (Zero : Nat)
-> (Succ (pred Nat Succ Zero))

Về tình hình này, một thuật toán suy luận kiểu có thể xác định rằng ?có thể rõ ràng là chỉ có ∀ (Nat : *) -> (Nat -> Nat) -> Nat -> Nat, bởi vì prednhận được Nat : *, Succ : Nat -> Nat, Zero : Nat, và phải trả lại Nat, bởi vì nó là đối số đầu tiên của Succ.

Trường hợp B:

(Id ? 4)

Trong đó 4 được mã hóa và Idlà hàm nhận dạng (nghĩa là ∀ (t:*) -> λ (x:t) -> x). Trong tình huống đó, ả? ´ lại rõ ràng ∀ (N:*) -> (N -> N) -> N -> N, vì đó là kiểu 4.

Trường hợp C:

(Id (Equals Nat 7 (add 3 ?)) (Refl 7))

Ở đây, EqualsReflđược định nghĩa theo cách tương tự như Idris. ?Rõ ràng chỉ có thể được 4, nhưng làm thế nào để bạn tìm ra điều đó? Một cách sẽ là sử dụng thực tế rằng ? : Nat, và Natlà một loại mà chúng ta biết cách liệt kê, vì vậy chúng ta có thể thử tất cả Natscho đến khi nó đánh máy. Điều đó có thể được thực hiện cho bất kỳ loại vô số.

Trường hợp D:

(Id (Equal Nat 10 (MulPair ?)) 10)

Ở đây, ?chỉ có thể là loại Pair Nat; nó chỉ có hơn một câu trả lời hợp lệ, mặc dù: nó có thể được (Pair 10 1), (Pair 2 5), (Pair 5 2)(Pair 1 10).

Trường hợp E:

(Id (Equal Nat 7 (Mul 2 ?)) 7)

Ở đây, không có câu trả lời hợp lệ, vì 7không phải là bội số của 2.


Tất cả những ví dụ đó khiến tôi nhận thấy rằng chúng ta có thể tạo ra một thuật toán chung xác định một số mẫu đã biết và đưa ra câu trả lời bằng cách chọn một thuật toán cụ thể (suy luận kiểu, vũ lực, v.v.), giống như Wolfram Alpha tìm ra chiến lược đúng giải một tích phân. Nhưng điều đó có vẻ như một cách tiếp cận kỹ thuật / mã hóa cứng. Có một cách nguyên tắc để giải quyết vấn đề này? Có bất kỳ nghiên cứu / khu vực trên đó?

Câu trả lời:


9

Chắc chắn có rất nhiều nghiên cứu về vấn đề này! Nó thường đi theo tên của công phu . Đó là một vấn đề không thể giải quyết được nói chung, như bạn có thể đoán. Các "lỗ" thường được gọi là biến meta hoặc biến thống nhất .

Như tôi đã giải thích một chút trong câu trả lời này , vấn đề giảm xuống sự thống nhất bậc cao hơn , trong đó một số người đã viết toàn bộ luận án tiến sĩ.

Như bạn lưu ý trong các ví dụ của mình, một số trường hợp có phần dễ dàng và có thể được giải quyết bằng cách áp dụng các quy tắc đơn giản, trong khi một số có vẻ khó khăn hơn đáng kể và có nhiều cảm giác "định lý chứng minh" cho chúng.

Trường hợp thứ ba có thể là một vấn đề loại "lớp loại", trong đó ?đại diện cho một số loại cấu trúc , chẳng hạn như cấu trúc nhóm hoặc trường, như trong

mul ? 2 3

với mul : forall G:Group, G.carrier -> G.carrier -> G.carrierhoặc một số biến thể. Ở đây chúng ta cần phải tìm một Gnhư vậy G.carrier == nat.

Nói chung, bạn muốn có 3 "chế độ" khác nhau cho từng loại vấn đề, thống nhất đơn giản, chứng minh định lý và loại vấn đề giải quyết lớp tương ứng.

Chúng tôi giải thích điều này một chút trong bài báo sau:

Xây dựng trong Lý thuyết loại phụ thuộc , de Moura, Avigad, Kong & Roux.

Bạn có thể muốn xem các tài liệu tham khảo của bài báo đó để biết thêm.


Tôi đã có một dạ dày mạnh mẽ, đây là nguồn mở để xây dựng trong Lean.

Dưới đây là một bài viết wiki mô tả giao diện cho người xây dựng trong Idris.


Đó là những lời tôi muốn nghe! Cảm ơn tất cả những liên kết, tài liệu tham khảo và từ khóa, bạn đã cho tôi rất nhiều việc phải làm bây giờ. Có công cụ nào có sẵn mà tôi có thể sử dụng để hoàn thành các chương trình Morte ngày hôm nay không? Tất nhiên không nhất thiết là Morte nhưng một cái gì đó đủ gần để trích xuất các chương trình Morte.
MaiaVictor

1
Mỗi trình kiểm tra định lý và kiểm tra loại cho một hệ thống gõ phụ thuộc (Idris, Agda, Coq, Lean) sẽ có một bộ giải như vậy nằm sâu trong ruột của chúng. Chúng có xu hướng rất cụ thể theo chương trình, vì vậy tôi không lạc quan, bạn có thể sử dụng chúng cho mục đích riêng của mình mà không cần sửa đổi nhiều.
cody
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.