Tính toán Lambda: sự khác biệt giữa bối cảnh và bối cảnh đánh giá


12

Đầu tiên, tôi muốn nói rằng văn bản của tôi dưới đây có thể có lỗi, vì vậy, vui lòng chỉ ra bất kỳ lỗi nào trong cách xây dựng câu hỏi của tôi.

Hãy xem xét một phép tính lambda chưa được đánh dấu với booleans và if-statement có thuật ngữ được đưa ra bởi cú pháp này:

 t ::= v | t t | if t t t | x
 v ::= \x.t | #t | #f

Các bối cảnh C trong trường hợp này sẽ được đưa ra theo cú pháp này:

C ::= [-] | \x. C | C t | t C | if C t t | if t C t | if t t C 

Ngoài ra, người ta có thể xác định bối cảnh đánh giá E theo cú pháp khác này:

E ::= [-] | \x. E | v E | E t | if E t t 

Tôi chia câu hỏi của tôi thành ba điểm phụ mà tôi muốn được giải quyết.

  1. Khi nào hai khái niệm được sử dụng? Ví dụ, tôi biết rằng các bối cảnh đánh giá được sử dụng để xác định ngữ nghĩa của phép tính, nhưng việc sử dụng các bối cảnh vẫn phần nào làm tôi khó hiểu. Ngoài ra tôi muốn một số xác nhận về kiến ​​thức của tôi ở đây.
  2. Khi nào thì cái này được ưu tiên hơn cái kia và tại sao?
  3. Bạn có thể chỉ ra các bài viết có liên quan có thể giúp tôi sắp xếp vấn đề này?

Câu trả lời:


15

Bối cảnh được sử dụng cho nhiều mục đích, nhưng thông thường để xác định sự phù hợp trên các chương trình. Bối cảnh đánh giá là một tập hợp con của bối cảnh. Chúng thường được sử dụng để xác định quan hệ giảm. Hãy để tôi đưa ra một ví dụ về mỗi.

Một cách chính thức xác định sự bình đẳng chương trình là để nói hai chương trình Ntheo ngữ cảnh bằng họ có thể thay thế cho nhau trong từng bối cảnh mà không có một sự thay đổi về hành vi. Chúng ta có thể xác định này như sau: MN là theo ngữ cảnh bằng được cung cấp cho tất cả các bối cảnh bế mạc C [ ] cho MN : C [ M ] t khi và chỉ khi C [ N ] t . Chúng tôi nói một bối cảnh đang đóng cho M , NMNMNC[]MNC[M]tC[N]tM,Nnếu cả C [ N ] đều không có biến miễn phí. Biểu thức M t có nghĩa là chương trình M giảm theo số bước hữu hạn đối với giá trị t . (Bên cạnh đó, lưu ý rằng định nghĩa về sự tương đương theo ngữ cảnh có liên quan nhiều hơn đến các khái niệm phong phú về tính toán, ví dụ các quy trình đồng thời.)C[M]C[N]MtMt

Ngược lại, bối cảnh đánh giá là bối cảnh không chặn đánh giá. Chính xác hơn, bối cảnh đánh giá là một thuật ngữ có lỗ hổng tại điểm phải thực hiện bước khử nguyên tử tiếp theo (hoặc có thể diễn ra cho tính toán không xác định). Vì vậy, quy tắc sau đây nên giữ cho bối cảnh đánh giá: Như một ví dụ của việc sử dụng bối cảnh thẩm định, xem xét các quy định giảm thuế đối với cuộc gọi-by-giá trịλ-calculus, nơi mà chúng tôi không giảm dướiλ. Vì vậy, ngay cả khiMN, chúng ta không có mức giảmλx. Mbước sóngx. N. Điều này có thể dễ dàng được thể hiện với các quy tắc ngữ cảnh chung ở trên, cùng với một ngữ pháp cho bối cảnh đánh giá rằng bỏ quaλ-expressions. Bối cảnh đánh giá lần đầu tiên được sử dụng trong

MNE[M]E[N]
λλMNλx.Mλx.NλBáo cáo sửa đổi về các lý thuyết cú pháp về kiểm soát và trạng thái tuần tự của Felleisen và Hieb.

14

Một bối cảnh là một khái niệm cú pháp. Một bối cảnh là một thuật ngữ với một lỗ hổng trong đó. (Đôi khi có những bối cảnh đa lỗ, định nghĩa sẽ được cung cấp rõ ràng trong trường hợp đó.) Cú pháp của những bối cảnh được xác định bằng cách lấy cú pháp của các điều khoản và cho phép một subterm là một lỗ thay vì một hạn. Trong BNF (tôi sử dụng lambda-calculus làm ví dụ, mà không boolean và nếu phát biểu mà không mang lại bất cứ điều gì để ví dụ.): C : : = [ ] | x | t[]

C::=[]xtCCtλx.C

Cùng với định nghĩa về một bối cảnh xuất hiện định nghĩa về việc đặt một thuật ngữ trong một bối cảnh. Nếu là một bối cảnh và t là một thuật ngữ, thì C [ t ] là thuật ngữ thu được bằng cách đặt t trong cây cú pháp trong đó lỗ [ ] nằm trong C [ t ] . Về cơ bản, đây là một sự thay thế trong đó biến được đảm bảo xảy ra chính xác một lần (nhưng lưu ý rằng biến số Thay đổi được thay thế là một biến ở cấp độ meta, [ ] , không phải là biến trong phép tính lambda hoặc ngôn ngữ khác của các thuật ngữ t ).C[]tC[t]t[]C[t][]t

Các bối cảnh được sử dụng để xây dựng các định nghĩa khác nhau trong ngữ nghĩa. Một ví dụ phổ biến là hầu hết các khái niệm đánh giá liên quan đến việc xác định bối cảnh trong đó việc đánh giá có thể được thực hiện. Ví dụ, hãy xem xét tính toán lambda. Khái niệm cơ bản của đánh giá được đưa ra bởi các quy tắc beta-giảm: nơi M { x N } là sự thay thế x N áp dụng cho M .

(λx.M)NβM{xN}
M{xN}xNM

Đây không phải là định nghĩa đầy đủ về giảm beta: với một thuật ngữ , nó có thể giảm beta nếu có các tập con MN và một biến x sao cho t = ( λ x . M )tMNx ; nhưng nói chung hơn t có thể giảm betanếu có một tập con t sao cho t = ( λ x . M )t=(λx.M)Nttt=(λx.M)N . Một cách khác để diễn đạt điều này là có thể giảm beta nếu có bối cảnh C và một số thuật ngữ M N và một biến x sao cho t = C [ ( λ x . M )tCMNx . Khi có mức giảm như vậy, phía bên tay phải là C [ M { x N } ] . Để sử dụng ký hiệu chính thức, giảm beta được xác định theo các quy tắc khấu trừ sau: t=C[(λx.M)N]C[M{xN}] Định nghĩa tương tự có thể được thể hiện bằng cách làm cho tất cả các loại bối cảnh rõ ràng:

(λx.M)NβM{xN}(β)MβNC[M]βC[N](γ)
(λx.M)NβM{xN}(β)MβNλx.Mβλx.N(Cλ)MβNMPβNP(C@<)MβNPMβPN(C@>)

Định nghĩa này mang lại sự giảm beta, tức là một khái niệm đánh giá cho phép giảm bất kỳ subterm nào. Các tính toán như được thực hiện trong các ngôn ngữ lập trình thường không cho phép giảm các hàm con bên trong các hàm: quy tắc rút gọn chỉ có thể được áp dụng tại toplevel hoặc ở phía bên trái hoặc bên phải của ứng dụng. Chúng tôi có thể bày tỏ điều này bằng cách xác định một loại mới của bối cảnh đó không cho phép tất cả các hình thức cú pháp: Chúng ta có thể sử dụng cú pháp này để xác định khái niệm ngữ nghĩa của đánh giá không một phần:

D::=[]xtDDt
Chúng tôi cũng có thể trình bày định nghĩa này bằng cách mở rộng nó, giống như chúng tôi đã làm ở trên để giảm beta đầy đủ:
(λx.M)NnpM{xN}MnpND[M]npD[N]
Dsẽ được gọi là bối cảnh đánh giá vì nó được sử dụng để xác định khái niệm đánh giá. Một bối cảnh đánh giá không phải là một loại bối cảnh đặc biệt; đúng hơn,gọi nó là bối cảnh đánh giá là vấn đề bối cảnh được sử dụng để làm gì.
(λx.M)NnpM{xN}(β)MnpNMPnpNP(C@<)MnpNPMnpPN(C@>)
D

Tôi sẽ đưa ra một ví dụ nữa về bối cảnh. Hãy xác định giá trị theo cú pháp sau: V : : = x V 1 ... V n | bước sóng x . M Bây giờ chúng ta hãy xác định một loại tình huống: E : : = [ ] | MV

V::=xV1Vnλx.M
So với D ở trên, lỗ có thể nằm ở phía chức năng của ứng dụng nếu đối số của ứng dụng là một giá trị. Xác định sau đó khái niệm giảm sau:
E::=[]MEEV
D Với hạn chế rằng đối số của hàm phải là một giá trị trong quy tắc đầu tiên và trừu tượng lambda không phải là bối cảnh, chúng tôi đang xác định chiến lược đánh giá theo giá trị. Với hạn chế hơn nữa là đối số được đánh giá trước hàm, đây là lệnh gọi theo thứ tự áp dụng theo giá trị.
(λx.M)VcbvaM{xV}(βcbva)MβNE[M]cbvaE[N](γcbva)

1
Định nghĩa sau của bạn về bối cảnh đánh giá gần với khái niệm Felleisen và Hieb ban đầu. Chúng là một phương tiện cú pháp để giúp thể hiện thứ tự đánh giá các thuật ngữ của một phép tính. Một bối cảnh đánh giá một loại bối cảnh đặc biệt, vì nó cho phép một nhân tố duy nhất đưa một thuật ngữ vào một bối cảnh và một redex (khi có thể), do đó chỉ ra, một cách xác định, trong đó bước giảm tiếp theo sẽ xảy ra.
Dave Clarke

@DaveClarke Bên cạnh đó, bạn cũng có thể sử dụng bối cảnh đánh giá để xác định đánh giá cho các khái niệm tính toán không xác định, trong đó bạn không có phân tách duy nhất vào bối cảnh đánh giá và làm lại.
Martin Berger

@MartinBerger: Thật vậy.
Dave Clarke

@DaveClarke Bạn có nghĩa là một bối cảnh đánh giá xác định là một loại bối cảnh đặc biệt? Tôi có thể lấy một tập hợp các bối cảnh tùy ý và xác định một chiến lược đánh giá dựa trên nó.
Gilles 'SO- đừng trở nên xấu xa'

@Gilles: Bối cảnh đánh giá có thể xác định chiến lược giảm xác định. Tôi không nghĩ rằng tôi đã thấy cụm từ "bối cảnh đánh giá xác định". Họ tất nhiên là một loại bối cảnh đặc biệt. Tôi đồng ý với nhận xét của bạn; điều quan trọng hơn là câu trả lời của bạn bỏ lỡ ý nghĩa lịch sử của bối cảnh đánh giá, đó là xác định một khái niệm xác định về giảm.
Dave Clarke
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.