Hoàn thành đầy đủ so với bản tóm tắt đầy đủ của bản dịch chương trình


15

Các nỗ lực xác minh trình biên dịch thường đi xuống để chứng minh trình biên dịch hoàn toàn trừu tượng: rằng nó bảo tồn và phản ánh các tương đương (theo ngữ cảnh).

Thay vì cung cấp bằng chứng trừu tượng hóa đầy đủ, một số công việc xác minh trình biên dịch (dựa trên phân loại) gần đây của Hasegawa [ 1 , 2 ] và Egger et. al. [ 3 ] chứng minh tính đầy đủ của các bản dịch CPS khác nhau.

Câu hỏi: Sự khác biệt giữa đầy đủ đầy đủ và trừu tượng đầy đủ là gì?

Đối với tôi, tính đầy đủ trông giống như sự phản ánh tương đương cho một bản dịch và sự đầy đủ dường như là hệ quả của việc bảo tồn tương đương.

Lưu ý : Cả Curien [ 7 ] và Abramsky [ 8 ] đều khám phá mối quan hệ giữa tính dứt khoát, sự trừu tượng hóa đầy đủ và ở một mức độ nào đó đầy đủ. Tôi nghi ngờ những tài nguyên này có thể có câu trả lời cho câu hỏi của tôi, nhưng sau khi đọc xong tôi vẫn chưa xác nhận điều đó.

Một số nền : Thuật ngữ "đầy đủ trọn vẹn" được đặt ra bởi Abramsky và Jagadeesan [ 4 ] để đặc trưng cho tính đúng đắn của một mô hình trò chơi-ngữ nghĩa của nhân giống Tuyến tính logic.

Blute [ 5 ] cung cấp định nghĩa sau:

Đặt F là một danh mục miễn phí. Chúng ta nói rằng một mô hình phân loại Mhoàn toàn đầy đủ cho F hay rằng chúng tôi có đầy đủ đầy đủ của F đối với với M nếu, đối với một số giải thích của máy phát điện, các functor miễn phí độc đáo [[-]]:FM đầy.

Theo như tôi có thể nói, Hasegawa trong [ 6 ] là người đầu tiên thích nghi hoàn toàn đầy đủ để mô tả một bản dịch chương trình thay vì một mô hình ngữ nghĩa phân loại. Trong trường hợp này, bản dịch Girard từ phép tính lambda đơn giản sang phép tính lambda tuyến tính. Sau đó, trong [ 1 ], anh định nghĩa đầy đủ về bản dịch CPS là:()

Nếu Γ;N:(σo)o là derivable trong tuyến tính lambda calculus, sau đó có tồn tại ΓM:σ trong giải tích lambda tính toán như vậy Γ;M= =N:(σo)o giữ trong tuyến tính lambda calculus.

(trong đó o là một loại cơ sở trong phép tính lambda tuyến tính (ngôn ngữ đích), nhưng không phải trong phép tính lambda tính toán (ngôn ngữ nguồn).)

Đối với tôi, định nghĩa của Hasegawa có vẻ như đầy đủ và thực sự nên được kết hợp với sự hoàn chỉnh để có được sự trọn vẹn.

Egger et. al. [ 3 ] xác định tính đầy đủ của bản dịch CPS là sự kết hợp của (1) tính đầy đủ và (2) tính đầy đủ:()v

(1): Nếu Θ v | - M v = beta η N v : ! τ v sau đó q M = λ c N : τΘM,N:τΘv|-Mv= =βηNv:!τvΘM= =λcN:τ

(2): Nếu sau đó có tồn tại một thuật ngữ Θ M : τΘΘv|-t:!τvΘM:τΘv|-Mv= =βηt:!τv

(trong đó là lý thuyết phương trình tính toán của Moggi)= =λc


[1] " Hiệu ứng được sử dụng tuyến tính: Biến đổi đơn cực và CPS thành phép tính Lambda tuyến tính ", Hasegawa 2002

[2] " Ngữ nghĩa của việc tiếp tục tuyến tính trong việc gọi theo tên ", Hasegawa 2004

[3] " Bản dịch CPS sử dụng tuyến tính trong phép tính hiệu ứng phong phú ", Egger et. al. 2012

[4] " Trò chơi và sự hoàn thiện đầy đủ cho logic tuyến tính đa nhân ", Abramsky và Jagadeesan 1992

[5] " Lý thuyết danh mục cho các nhà logic tuyến tính ", Blute 2003

[6] " Dự đoán dịch thuật và dự đoán hợp lý ", Hasegawa 2000

[7] " Tính rõ ràng và trừu tượng hóa hoàn toàn ", Curien 2007

[8] " Tiên đề cho sự chắc chắn và hoàn toàn đầy đủ ", Abramsky 1999

Câu trả lời:


12

Thật không may, có quá nhiều thứ đang diễn ra ở đây. Vì vậy, thật dễ dàng để trộn lẫn mọi thứ. Việc sử dụng "đầy đủ" trong "đầy đủ" và "trừu tượng hóa đầy đủ" đề cập đến những ý tưởng hoàn toàn khác nhau về sự đầy đủ. Nhưng, cũng có một số kết nối mơ hồ giữa họ. Vì vậy, đây sẽ là một câu trả lời phức tạp.

Tính đầy đủ : "Âm thanh và hoàn chỉnh" là một thuộc tính mà bạn muốn cho một logic truyền thống có liên quan đến ngữ nghĩa của nó. Soundness có nghĩa là bất cứ điều gì bạn có thể chứng minh trong logic là đúng trong mô hình ngữ nghĩa. Tính đầy đủ có nghĩa là bất cứ điều gì là đúng trong mô hình ngữ nghĩa đều có thể chứng minh được trong logic. Chúng tôi nói rằng một logic là âm thanh và hoàn chỉnh cho một mô hình ngữ nghĩa cụ thể. Khi chúng ta đến với logic xây dựng, chẳng hạn như lý thuyết loại Martin-Lof hoặc logic tuyến tính, chúng tôi không chỉ quan tâm đến việc liệu các công thức có thể chứng minh được không, mà còn cả bằng chứng của chúng là gì. Một công thức có thể chứng minh có thể có nhiều bằng chứng và logic xây dựng muốn tách chúng ra. Vì vậy, một ngữ nghĩa cho logic xây dựng bao gồm việc xác định không chỉ liệu một công thức có đúng hay không, mà còn một số khái niệm ngữ nghĩa trừu tượng về "bằng chứng" ("bằng chứng") cho sự thật của nó. Abramsky và các đồng nghiệp đã đặt ra thuật ngữ "tính đầy đủ" có nghĩa là các bằng chứng trong logic có thể diễn tả tất cả các bằng chứng ngữ nghĩa trong mô hình. Vì vậy, "đầy đủ" đề cập đến bằng chứng ở đây. Một logic "hoàn chỉnh" có thể chứng minh mọi thứ nó cần. Một logic "hoàn chỉnh đầy đủ" có tất cả các bằng chứng mà nó cần phải có. Vì vậy, "tính đầy đủ" có nghĩa là "tính đầy đủ mang tính xây dựng" hoặc "tính đầy đủ bằng chứng". Điều này không có gì để làm với sự trừu tượng đầy đủ.

: "Đầy đủ và trừu tượng hoàn toàn" là một thuộc tính bạn muốn cho mô hình ngữ nghĩa của ngôn ngữ lập trình. (Lưu ý sự khác biệt đầu tiên: chúng tôi hiện đang xử lý các thuộc tính của mô hình ngữ nghĩaPhương pháp chứng minh trừu tượng đầy đủ . (Nhưng, một điều như vậy về mặt lý thuyết là có thể, và một trong những ngày này ai đó có thể làm như vậy.), không phải là thuộc tính của ngôn ngữ!) Tính đầy đủ có nghĩa là, bất cứ khi nào hai thuật ngữ có cùng ý nghĩa trong mô hình ngữ nghĩa, chúng tương đương quan sát trong ngôn ngữ lập trình (đối với một số khái niệm thực thi). Trừu tượng hóa đầy đủ có nghĩa là, nếu hai thuật ngữ tương đương quan sát, chúng có cùng ý nghĩa trong mô hình ngữ nghĩa. Những ý tưởng này có thể liên quan đến sự đúng đắn và đầy đủ, nhưng theo một cách hơi khó hiểu. Nếu chúng ta nghĩ về mô hình ngữ nghĩa của ngôn ngữ lập trình là "logic" hoặc "phương pháp chứng minh" để nói về sự tương đương quan sát, thì tính thỏa đáng có nghĩa là phương pháp chứng minh này là âm thanh; trừu tượng hóa đầy đủ có nghĩa là phương pháp chứng minh này đã hoàn thành. Không có khái niệm "đầy đủ"

Trong trường hợp của bạn, bạn quan tâm đến các bản dịch hơn là các mô hình ngữ nghĩa. Các tính chất của sự đầy đủ và trừu tượng hóa đầy đủ có thể được mở rộng để đối phó với các bản dịch như sau. Bạn nghĩ về ngôn ngữ đích là "mô hình ngữ nghĩa" của bạn, nghĩa là một chủ nghĩa hình thức mà bạn hoàn toàn hiểu được bằng cách nào đó. Nếu vậy, bạn có một số khái niệm về sự tương đương cho nó. Sau đó, chúng tôi nói rằng bản dịch là đầy đủ nếu, bất cứ khi nào bản dịch của hai chương trình nguồn tương đương với ngôn ngữ đích, chúng đều tương đương quan sát trong ngôn ngữ nguồn. Chúng tôi nói rằng nó hoàn toàn trừu tượng nếu, bất cứ khi nào hai chương trình nguồn tương đương quan sát trong ngôn ngữ nguồn, bản dịch của chúng tương đương với ngôn ngữ đích.

Trong thực tế, tôi không biết bất kỳ ngôn ngữ mục tiêu nào mà chúng tôi thực sự hoàn toàn "hiểu". Tất cả những gì chúng ta biết là một số khái niệm khác về sự tương đương quan sát cho ngôn ngữ đích. Trong trường hợp đó, bản dịch là đầy đủ nếu sự tương đương quan sát của các bản dịch trong ngôn ngữ đích ngụ ý sự tương đương quan sát trong ngôn ngữ nguồn. Bản dịch là hoàn toàn trừu tượng nếu sự tương đương quan sát của các điều khoản trong ngôn ngữ nguồn ngụ ý sự tương đương quan sát của bản dịch trong ngôn ngữ đích. M N τ ( M )

τ(M)τ(N)MN
Một số tác giả có "dịch hoàn toàn trừu tượng" có nghĩa là sự kết hợp của hai thuộc tính sau đây: M N
MNτ(M)τ(N)
MNτ(M)τ(N)

Egger et al dường như đang mở rộng tương tự ý tưởng về sự hoàn chỉnh đầy đủ cho các bản dịch. Trong thiết lập của họ, công thức là loại và bằng chứng là các điều khoản. Bản dịch của họ dịch các loại cũng như các điều khoản. Họ gọi dịch của họ hoàn toàn trọn vẹn nếu bản dịch của một loại chỉ có những điều khoản được thu được bằng cách dịch các từ ngữ gốc của loại Một . N : τ ( A ) .MộtMột

N:τ(Một).M:Một.τ(M)= =N

Bây giờ cho các kết nối mơ hồ giữa đầy đủ đầy đủ và trừu tượng đầy đủ. Chứng minh rằng một mô hình ngữ nghĩa hoặc một bản dịch hoàn toàn trừu tượng thường liên quan đến một số tính xác định. Điều này là do ngôn ngữ của chúng tôi thường có thứ tự cao hơn. Vì vậy, nếu mô hình ngữ nghĩa hoặc ngôn ngữ đích có quá nhiều "bối cảnh" thì nó sẽ có thể chọc các thuật ngữ hoặc ý nghĩa ngữ nghĩa của chúng ta theo những cách không mong muốn và làm hỏng tính tương đương của chúng. "Những cách không mong muốn" có nghĩa là theo cách mà chính ngôn ngữ lập trình không thể chọc chúng. Vì vậy, để có được sự trừu tượng hóa đầy đủ, chúng ta cần đảm bảo rằng "bối cảnh" có sẵn trong mô hình ngữ nghĩa hoặc ngôn ngữ đích đến từ những ngôn ngữ nguồn ở dạng nào đó. Lưu ý rằng điều này liên quan đến tài sản đầy đủ.

Tại sao chúng ta muốn những tính chất như vậy? Nó không có gìđể làm với trình biên dịch! Chúng tôi muốn các thuộc tính này để tuyên bố rằng ngôn ngữ nguồn nhúng vào ngôn ngữ đích. Nếu chúng ta hài lòng với một ngôn ngữ đích cụ thể (như sạch sẽ, dễ hiểu, bằng cách nào đó cơ bản hoặc do Chúa ban) thì, nếu ngôn ngữ nguồn nhúng vào nó, thì chúng ta có thể khẳng định rằng ngôn ngữ nguồn không có gì mới. Nó chỉ là một mảnh của ngôn ngữ mục tiêu mà chúng ta biết và yêu thích. Nó chỉ là cú pháp đường. Vì vậy, các bản dịch trừu tượng hoàn toàn được đưa ra bởi mọi người để thiết lập rằng các ngôn ngữ đích cụ thể là tuyệt vời. Chúng đôi khi cũng được đưa ra bởi những người có ngôn ngữ lớn hoặc phức tạp để đối phó. Vì vậy, thay vì xác định trực tiếp một ngữ nghĩa cho nó, họ dịch nó sang một số ngôn ngữ cốt lõi và sau đó đưa ra ngữ nghĩa cho ngôn ngữ cốt lõi. Ví dụ, báo cáo Haskell thực hiện điều này. Nhưng sự trừu tượng hóa đầy đủ của các bản dịch này hiếm khi được chứng minh vì các ngôn ngữ nguồn rất lớn và phức tạp. Mọi người tin rằng bản dịch là tốt.

Một lần nữa, điều này không có gì để làm với trình biên dịch. Trình biên dịch hiếm khi bao giờ đầy đủ hoặc hoàn toàn trừu tượng. Và, họ không cần phải như vậy! Tất cả những gì trình biên dịch cần làm là bảo toàn hành vi thực thi của các chương trình hoàn chỉnh. Ngôn ngữ đích của trình biên dịch nói chung là rất lớn, điều đó có nghĩa là nó có rất nhiều ngữ cảnh có thể gây rối tương đương. Vì vậy, các chương trình tương đương trong ngôn ngữ nguồn hầu như không bao giờ tương đương theo ngữ cảnh khi được biên dịch.


Ý bạn là gì khi nói rằng không có bất kỳ ngôn ngữ nào mà chúng tôi thực sự "hiểu" hoàn toàn?
Martin Berger

Ý bạn là gì khi nói rằng chưa có ai tạo ra một mô hình ngữ nghĩa đại diện cho một phương pháp chứng minh mang tính xây dựng?
Martin Berger

1
Xin lỗi, nhưng ý nghĩa của "bản dịch" dường như sai hướng với tôi, so với văn bản trước đó của bạn. Tóm tắt đầy đủ cho, PCF yêu cầu M≅N⟹τ (M) (N) (với (là ngữ nghĩa biểu thị và bỏ qua nhu cầu thay đổi ký hiệu): như bạn nói, "Trừu tượng hóa hoàn toàn có nghĩa là, nếu hai thuật ngữ tương đương quan sát, chúng có cùng ý nghĩa trong mô hình ngữ nghĩa ". Nhưng hàm ý của bạn là cách khác (cụ thể là, bạn viết (M) ≅τ (N) M≅N)! Hay các bản dịch làm việc khác với ngữ nghĩa học biểu thị?
Blaisorblade

1
@Blaisorblade: Bạn hoàn toàn đúng! Tôi đã sửa một đoạn văn bản cho câu trả lời của tôi.
Uday Reddy

1
Sự trừu tượng hóa đầy đủ cũng được quan tâm để bảo mật mức độ ngôn ngữ và có khả năng tích hợp ngôn ngữ chéo. Tức là rất hữu ích khi biết rằng không có gì trong ngôn ngữ đích có thể vi phạm sự trừu tượng của ngôn ngữ nguồn.
dmbarbour

5

Tóm tắt: đầy đủ đầy đủ có nghĩa là chức năng giải thích không chỉ hoàn thành, mà còn là tính từ trên các chương trình. Trừu tượng đầy đủ không có yêu cầu cho tính siêu thực.

[[.]]

  • Một[[Một]]

  • Γ[[Γ]]

  • ΓP:α[[Γ]][[P]]:[[α]]

[[.]]

PSQ     iff     [[P]]T[[Q]]

P,QST

PΓ,αSQ     iff     [[P]][[Γ]],[[α]]T[[Q]]
Γ,α,P,Q[[.]]

[[.]]

[[.]][[Γ]]Q:[[α]]ΓP:αQ= =[[P]][[.]]

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.