Lambda Tính toán: Làm thế nào để đánh giá bối cảnh làm việc


8

Trong phép tính lambda thuần túy, chúng ta có tập hợp các thuật ngữ được xác định theo quy nạp (ngữ pháp):

e:: =x|λx.e|e1e2

Theo chiến lược đánh giá cuộc gọi theo giá trị, chúng tôi có các quy tắc suy luận về giảm beta và quy tắc về cách đánh giá các ứng dụng (quy tắc đồng quy). Tôi đang cố gắng hiểu làm thế nào bối cảnh đánh giá có thể thay thế các quy tắc đồng quy mà không thực sự thay đổi cú pháp của ngôn ngữ. Không có bối cảnh đánh giá, chúng tôi có những điều sau đây:

e1e1'e1e2e1'e2
e2e2've2ve2'.

Điều này có ý nghĩa, vì nếu chúng ta có một thể hiện của biểu thức , thì rõ ràng đó là có dạng e_1e_2 \ rightarrow e_1'e_2 và do đó (\ lambda f. \ lambda x. fx) ((\ lambda y .y) \ lambda z .z) \ lambda ww \ rightarrow (\ lambda f. \ lambda x. fx) (\ lambda z .z) \ lambda wwe 1 e 2e 1 e 2 ( λ f . λ x . f x ) ( ( λ yt= =(λf.λx.fx)((λy.y)λz.z)λw.we1e2e1'e2

(λf.λx.fx)((λy.y)λz.z)λw.w(λf.λx.fx)(λz.z)λw.w

Nếu chúng ta thay thế các quy tắc đồng dạng bằng các bối cảnh đánh giá:

E:: =[]|Ee|vE
thì chúng ta chỉ cần một quy tắc duy nhất để thể hiện quy tắc đồng quy của ngôn ngữ:
ee'E[e]E[e'].

Tôi bối rối không biết làm thế nào bối cảnh đánh giá có thể cho chúng ta biết cách đánh giá biểu thức từ trên mà không thay đổi cú pháp của ngôn ngữ. Tôi không hiểu làm thế nào bối cảnh đánh giá "công trình" mà không viết lại nhưttt

Et= =(λf.λx.fx)[]λw.w

trong đó . Không có lý do rõ ràng nào để đánh giá theo giá trị gọi mà không có kiến ​​thức về . Tôi thực sự không biết tôi đang đi sai ở đâu. Ai đó có thể giúp điều chỉnh suy nghĩ của tôi?t=Et[((λy.y)λz.z)]tEt


Giảm không phải là một sự phù hợp với các chiến lược giảm như gọi theo giá trị. Xem thêm tại đây .
Martin Berger

E

Tôi không sử dụng đồng âm như một động từ. Tôi không hiểu ý của bạn. E là một biến meta trong phạm vi đánh giá. Các bối cảnh đánh giá là một tập hợp con của bối cảnh thích hợp. Bối cảnh là các chương trình có một lỗ.
Martin Berger

Câu trả lời:


8

Sự tinh tế nằm ở nơi tạo ra sự khác biệt giữa ngôn ngữ và ngôn ngữ kim loại. Như René Magritte đã nói:

Ceci n'est pas une pipe.

(λf.λx.fx)((λy.y)(λz.z))(λw.w)tM(λf.λx.fx)((λy.y)(λz.z))t=M(λw.w)M(λw.w)

e2e2ve2ve2
e2e2ve2e2ve2ve2ev

eeE[e]vE[e]
E[]eeE[]eeE[e]E[e]

(λf.λx.fx)[](λw.w)Ett=Et[(λy.y)(λz.z)](λf.λx.fx)((λy.y)(λz.z))(λw.w)

t

  • Với ký hiệu sử dụng nhiều quy tắc, bạn phải tìm một cây khấu trừ (nói chung - ở đây đạo hàm là tuyến tính, do đó bạn chỉ cần tìm một chuỗi dẫn đến một tiên đề).
  • Với ký hiệu sử dụng bối cảnh đánh giá, bạn phải tìm một bối cảnh đánh giá phù hợp.

Ngữ pháp của bối cảnh đánh giá tuân theo cấu trúc của các quy tắc đánh giá, vì vậy trên thực tế đây không phải là hai phương pháp mà là hai cách khác nhau để diễn đạt cùng một định nghĩa.

Để hiểu điều này, tôi thực sự khuyên bạn nên thực hiện bài tập sau: bằng ngôn ngữ yêu thích của bạn, thực hiện đánh giá cuộc gọi theo giá trị lambda theo cách đơn giản, với một loại đại diện cho thuật ngữ lambda và chức năng thực hiện một bước giảm.


2
Liên quan đến đoạn cuối cùng của bạn: tất cả các nhà logic học và bất kỳ ai từng nghiên cứu cú pháp nên được thực hiện để thay thế.
Andrej Bauer
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.