ความสมบูรณ์เต็มรูปแบบ vs สิ่งที่เป็นนามธรรมของการแปลโปรแกรม


15

ความพยายามในการตรวจสอบคอมไพเลอร์มักจะลงมาเพื่อพิสูจน์คอมไพเลอร์อย่างสมบูรณ์แบบ: มันรักษาและสะท้อนความเท่าเทียม (ตามบริบท)

แทนที่จะให้หลักฐานที่เป็นนามธรรมอย่างเต็มรูปแบบงานตรวจสอบคอมไพเลอร์ล่าสุด (อิงตามหมวดหมู่) โดย Hasegawa [ 1 , 2 ] และ Egger et อัล [ 3 ] พิสูจน์ความครบถ้วนสมบูรณ์ของการแปล CPS ที่หลากหลาย

คำถาม: อะไรคือความแตกต่างระหว่างความครบถ้วนสมบูรณ์และนามธรรมที่สมบูรณ์?

สำหรับฉันแล้วความสมบูรณ์ดูเหมือนว่าการสะท้อนความเท่าเทียมกันสำหรับการแปลและความบริบูรณ์ดูเหมือนจะเป็นผลมาจากการรักษาสมดุล

หมายเหตุ : ทั้ง Curien [ 7 ] และ Abramsky [ 8 ] สำรวจความสัมพันธ์ระหว่างความแน่นอนความเป็นนามธรรมเต็มและความสมบูรณ์แบบในระดับหนึ่ง ฉันสงสัยว่าแหล่งข้อมูลเหล่านี้อาจมีคำตอบสำหรับคำถามของฉัน แต่หลังจากอ่านพื้นผิวฉันยังไม่ได้ยืนยันว่า

พื้นหลังบางส่วน : คำว่า "full ครบถ้วน" ได้รับการประกาศเกียรติคุณจาก Abramsky และ Jagadeesan [ 4 ] เพื่ออธิบายความถูกต้องของเกมจำลองความหมายของ Multiplicative Linear Logic

Blute [ 5 ] ให้คำจำกัดความต่อไปนี้:

ให้เป็นหมวดหมู่ฟรี เราบอกว่าแบบจำลองหมวดหมู่ นั้นสมบูรณ์แบบสำหรับหรือว่าเรามีความ สมบูรณ์แบบด้วยความเคารพถ้าด้วยความเคารพต่อการตีความของเครื่องกำเนิดไฟฟ้า , functor ฟรีที่ไม่ซ้ำกันเต็มFF F M [M FFM[[]]:FM

เท่าที่ฉันสามารถบอกได้ Hasegawa ใน [ 6 ] เป็นคนแรกที่ปรับความสมบูรณ์แบบทั้งหมดเพื่ออธิบายการแปลโปรแกรมแทนรูปแบบความหมายเชิงหมวดหมู่ ในกรณีนี้การแปลกิราร์ดจากแคลคูลัสแลมบ์ดาเพียงพิมพ์ไปยังแคลคูลัสแลมบ์ดาเชิงเส้น ต่อมาใน [ 1 ] เขาได้กำหนดคำแปล CPSอย่างครบถ้วนเมื่อ:()

ถ้าเป็นผลสืบเนื่องในแลมบ์ดาเชิงเส้นแล้วมีในการคำนวณ แลมบ์ดาแคลคูลัสอย่างนั้นถืออยู่ในแคลคูลัสเชิงเส้นแลมบ์ดาแกมมาM : σ แกมมา ; M = N : ( σ →การo ) oΓ;N:(σo)oΓM:σΓ;M=N:(σo)โอ

(โดยที่เป็นชนิดพื้นฐานในแคลคูลัสแลมบ์ดาเชิงเส้น (ภาษาเป้าหมาย) แต่ไม่ใช่ในแคลคูลัสแลมบ์ดาเชิงเส้น (ภาษาต้นฉบับ))o

สำหรับฉันคำจำกัดความของ Hasegawa ดูเหมือนจะเป็นความสมบูรณ์และควรรวมเข้ากับความสมบูรณ์เพื่อให้ได้ความสมบูรณ์แบบจริงๆ

Egger และ อัล [ 3 ] กำหนดความครบถ้วนสมบูรณ์ของการแปล CPSเป็นการรวมกันของ (1) ครบถ้วนและ (2) ครบถ้วน:()v

(1): ถ้าและจากนั้นΘM,N:τΘv|Mv=βηNv:!τโวลต์ΘM=λcN:τ

(2): ถ้าแล้วมีคำว่า เช่นนั้นΘv|t:!τvΘM:τΘv|Mv=βηt:!τv

(โดยที่เป็นทฤษฎีสมการคำนวณของ Moggi)=λc


[1] " เอฟเฟกต์ที่ใช้เชิงเส้น: การแปลง Monadic และ CPS เป็นแคลคูลัสเชิงเส้นแลมบ์ดา ", Hasegawa 2002

[2] " ความหมายของการดูแลรักษาเชิงเส้น - ผ่านการโทรหาโดยชื่อ ", Hasegawa 2004

[3] " การแปล CPS เชิงเส้นใช้ในแคลคูลัสเอฟเฟ็กต์เอจ ", Egger และ อัล 2012

[4] " เกมและความสมบูรณ์แบบเต็มรูปแบบสำหรับ Multiplicative Linear Logic ", Abramsky และ Jagadeesan 1992

[5] " ทฤษฎีหมวดหมู่สำหรับนักตรรกวิทยาเชิงเส้น ", Blute 2003

[6] "การแปล Girard and Logical Predicates ", Hasegawa 2000

[7] "ความชัดเจนและนามธรรมอย่างเต็มรูปแบบ ", Curien 2007

[8] " สัจพจน์เพื่อความสมบูรณ์และครบถ้วน ", เอบรัมสกี้ 1999

คำตอบ:


12

น่าเสียดายที่มีหลายสิ่งเกิดขึ้นที่นี่ ดังนั้นจึงเป็นเรื่องง่ายที่จะผสมผสานสิ่งต่างๆ การใช้ "เต็ม" ใน "เต็มสมบูรณ์" และ "เต็มนามธรรม" หมายถึงความคิดที่แตกต่างกันอย่างสมบูรณ์ของความบริบูรณ์ แต่ก็ยังมีการเชื่อมโยงที่ชัดเจนระหว่างพวกเขา นี่จะเป็นคำตอบที่ซับซ้อน

ครบถ้วนสมบูรณ์ : "เสียงและสมบูรณ์" เป็นคุณสมบัติที่คุณต้องการสำหรับตรรกะแบบดั้งเดิมที่จะมีเกี่ยวกับความหมายของมัน ความสมบูรณ์หมายความว่าอะไรก็ตามที่คุณพิสูจน์ได้ในตรรกะนั้นเป็นจริงในแบบจำลองความหมาย ความสมบูรณ์หมายถึงสิ่งใดก็ตามที่เป็นจริงในแบบจำลองความหมายสามารถพิสูจน์ได้ในตรรกะ เราบอกว่าตรรกะเป็นเสียงและสมบูรณ์แบบสำหรับความหมายเฉพาะ เมื่อเรามาถึงตรรกะเชิงสร้างสรรค์เช่นทฤษฎีประเภทมาร์ติน - โลฟหรือตรรกะเชิงเส้นเราไม่เพียงแคร์ว่าสูตรนั้นพิสูจน์ได้หรือไม่ แต่ยังพิสูจน์ว่าเป็นอย่างไร สูตรที่พิสูจน์ได้อาจมีหลักฐานมากมายและตรรกะเชิงสร้างสรรค์ต้องการแยกพวกมันออกจากกัน ดังนั้นความหมายของตรรกะเชิงสร้างสรรค์ที่เกี่ยวข้องกับการระบุไม่เพียง แต่สูตรจะเป็นจริง แต่ยังมีความหมายเชิงนามธรรมของ "พิสูจน์" ("หลักฐาน") สำหรับความจริง Abramsky และเพื่อนร่วมงานประกาศเกียรติคุณคำว่า "ความสมบูรณ์แบบเต็ม" เพื่อหมายถึงการพิสูจน์ในตรรกะสามารถแสดงการพิสูจน์ความหมายทั้งหมดในแบบจำลอง ดังนั้น "เต็ม" หมายถึงหลักฐานที่นี่ ตรรกะ "สมบูรณ์" สามารถพิสูจน์ทุกสิ่งที่ต้องการ ตรรกะ "สมบูรณ์แบบ" มีหลักฐานทั้งหมดที่จำเป็นต้องมี ดังนั้น "ความสมบูรณ์แบบสมบูรณ์" หมายถึง "ความสมบูรณ์แบบสร้างสรรค์" หรือ "การพิสูจน์ความสมบูรณ์" สิ่งนี้ไม่เกี่ยวกับสิ่งที่เป็นนามธรรม

นามธรรมเต็ม : "เพียงพอและนามธรรมอย่างสมบูรณ์" เป็นคุณสมบัติที่คุณต้องการสำหรับรูปแบบความหมายของภาษาการเขียนโปรแกรม (สังเกตความแตกต่างแรก: ตอนนี้เรากำลังจัดการกับคุณสมบัติของตัวแบบความหมายไม่ใช่คุณสมบัติของภาษา!) ความเพียงพอหมายความว่าเมื่อใดก็ตามที่สองคำศัพท์มีความหมายเหมือนกันในรูปแบบความหมายพวกเขาจะสังเกตได้อย่างเท่าเทียมกันในภาษาการเขียนโปรแกรม Full abstraction หมายความว่าหากคำสองคำเทียบเท่ากันอย่างน่าสังเกตพวกมันมีความหมายเดียวกันใน semantic model ความคิดเหล่านี้อาจเกี่ยวข้องกับความสมบูรณ์และความสมบูรณ์ แต่ในทางที่ถูกประดิษฐ์ ถ้าเราคิดว่า semantic model ของภาษาการเขียนโปรแกรมเป็น "ตรรกะ" หรือ "วิธีการพิสูจน์" เพื่อพูดคุยเกี่ยวกับความเท่าเทียมเชิงสังเกตการณ์แล้วความเพียงพอก็หมายความว่าวิธีการพิสูจน์นี้เป็นเสียง นามธรรมเต็มหมายความว่าวิธีการพิสูจน์นี้เสร็จสมบูรณ์ ไม่มีความคิดเรื่อง "ความสมบูรณ์แบบเต็ม"วิธีการพิสูจน์ (แต่สิ่งนี้เป็นไปได้ในทางทฤษฎีและหนึ่งในวันนี้ใครบางคนอาจทำเช่นนั้น)

ในกรณีของคุณคุณมีความสนใจในการแปลมากกว่ารูปแบบความหมาย คุณสมบัติของความเพียงพอและนามธรรมเต็มสามารถขยายเพื่อจัดการกับการแปลดังนี้ คุณคิดว่าภาษาเป้าหมายเป็น "แบบจำลองความหมาย" ของคุณนั่นคือแบบแผนที่คุณเข้าใจอย่างใด ถ้าเป็นเช่นนั้นคุณมีแนวคิดเรื่องความเท่าเทียมกัน จากนั้นเราบอกว่าการแปลนั้นเพียงพอหากเมื่อใดก็ตามที่การแปลของสองโปรแกรมต้นฉบับนั้นเทียบเท่ากันในภาษาเป้าหมายพวกเขาจะเทียบเท่ากันอย่างสังเกตได้ในภาษาต้นฉบับ เราบอกว่ามันเป็นนามธรรมอย่างสมบูรณ์ถ้าทุกครั้งที่โปรแกรมต้นทางสองโปรแกรมนั้นเทียบเท่ากันอย่างสังเกตได้ในภาษาต้นฉบับการแปลของพวกเขาจะเทียบเท่ากันในภาษาเป้าหมาย

τ(M)τ(N)MN
MNτ(M)τ(N)
MNτ(M)τ(N)

AA

N:τ(A).M:A.τ(M)=N

ตอนนี้สำหรับการเชื่อมต่อที่คลุมเครือระหว่างความสมบูรณ์เต็มและนามธรรมเต็ม การพิสูจน์ว่ารูปแบบความหมายหรือการแปลเป็นนามธรรมอย่างสมบูรณ์มักจะเกี่ยวข้องกับความชัดเจนบางอย่าง นี่เป็นเพราะภาษาของเรามักจะมีลำดับสูงกว่า ดังนั้นหากรูปแบบความหมายหรือภาษาเป้าหมายมี "บริบท" มากเกินไปก็จะสามารถกระตุ้นเงื่อนไขหรือความหมายเชิงความหมายของเราในรูปแบบที่ไม่พึงประสงค์และทำลายความเท่าเทียมของพวกเขา "วิธีที่ไม่พึงประสงค์" หมายถึงวิธีการที่ภาษาโปรแกรมไม่สามารถกระตุ้นได้ ดังนั้นเพื่อให้ได้นามธรรมที่สมบูรณ์เราจำเป็นต้องตรวจสอบให้แน่ใจว่า "บริบท" ที่มีอยู่ในรูปแบบความหมายหรือภาษาเป้าหมายมาจากที่อยู่ในภาษาต้นฉบับในบางรูปแบบ โปรดทราบว่าสิ่งนี้เกี่ยวข้องกับคุณสมบัติครบถ้วนสมบูรณ์

ทำไมเราต้องการคุณสมบัติดังกล่าว มันไม่มีอะไรเลยทำอย่างไรกับคอมไพเลอร์! เราต้องการคุณสมบัติเหล่านี้เพื่ออ้างว่าภาษาต้นฉบับฝังลงในภาษาเป้าหมาย หากเรามีความสุขกับภาษาเป้าหมายที่เฉพาะเจาะจง (เช่นทำความสะอาดเข้าใจได้พื้นฐานหรือที่พระเจ้ามอบให้) ถ้าหากภาษาต้นฉบับฝังไว้ในภาษานั้นเราก็สามารถอ้างได้ว่าไม่มีอะไรใหม่ในภาษาต้นฉบับ มันเป็นเพียงส่วนหนึ่งของภาษาเป้าหมายที่เรารู้จักและชื่นชอบ มันเป็นเพียงน้ำตาลวากยสัมพันธ์ ดังนั้นการแปลที่เป็นนามธรรมจึงถูกมอบให้โดยผู้คนเพื่อพิสูจน์ว่าภาษาเป้าหมายเฉพาะนั้นยอดเยี่ยม บางครั้งพวกเขายังได้รับจากผู้ที่มีภาษาขนาดใหญ่หรือซับซ้อนที่จะจัดการกับ ดังนั้นแทนที่จะกำหนด semantics ให้กับมันโดยตรงพวกเขาแปลมันเป็นภาษาแกนกลางและจากนั้นให้ความหมายกับภาษาแกนกลาง ตัวอย่างเช่นรายงาน Haskell ทำเช่นนี้ แต่สิ่งที่เป็นนามธรรมของการแปลเหล่านี้แทบจะไม่เคยพิสูจน์เพราะภาษาต้นฉบับมีขนาดใหญ่และซับซ้อน ผู้คนต่างเชื่อกันว่าการแปลนั้นดี

อีกครั้งนี้ไม่มีอะไรเกี่ยวข้องกับคอมไพเลอร์ คอมไพเลอร์ไม่เคยเพียงพอหรือเป็นนามธรรมอย่างสมบูรณ์ และพวกเขาไม่จำเป็นต้องเป็น! สิ่งที่คอมไพเลอร์ต้องทำคือการรักษาพฤติกรรมการดำเนินการของโปรแกรมที่สมบูรณ์ ภาษาเป้าหมายของคอมไพเลอร์นั้นมีขนาดใหญ่มากซึ่งหมายความว่ามันมีบริบทจำนวนมากที่สามารถทำลายความเท่าเทียมกันได้ ดังนั้นโปรแกรมที่เทียบเท่าในภาษาต้นฉบับแทบจะไม่เคยเทียบเท่าบริบทเมื่อรวบรวม


คุณหมายถึงอะไรโดยการบอกว่าไม่มีภาษาใดที่เรา "เข้าใจ" อย่างแท้จริง?
Martin Berger

คุณหมายถึงอะไรโดยการบอกว่าไม่มีใครสร้างแบบจำลองความหมายที่แสดงถึงวิธีการพิสูจน์เชิงสร้างสรรค์?
Martin Berger

1
ขออภัยความหมายของ "การแปล" ดูเหมือนจะผิดไปเมื่อเทียบกับข้อความก่อนหน้าของคุณ การพูดแบบเต็มรูปแบบสำหรับ PCF ขอM≅N⟹τ (M) ≅τ (N) (โดยที่τเป็นซีแมนติกเชิง denotational และเพิกเฉยต่อความจำเป็นในการเปลี่ยนสัญลักษณ์): ในขณะที่คุณพูดว่า "Abstraction เต็มรูปแบบหมายความว่าถ้า คำศัพท์สองคำเทียบเท่ากันพวกมันมีความหมายเหมือนกันในรูปแบบความหมาย " แต่ความหมายของคุณคือวิธีอื่น ๆ (เช่นคุณเขียนτ (M) ≅τ (N) ⟹M≅N)! หรือการแปลทำงานแตกต่างจากความหมายเชิง Denotational หรือไม่
Blaisorblade

1
@Blaisorblade: ถูกต้องแน่นอน! ฉันแก้ไขข้อความคำตอบของฉัน
Uday Reddy

1
สิ่งที่เป็นนามธรรมก็เป็นที่สนใจสำหรับความปลอดภัยระดับภาษาและอาจมีการรวมข้ามภาษา เช่นมีประโยชน์ที่จะรู้ว่าไม่มีอะไรในภาษาเป้าหมายที่สามารถละเมิด abstractions ของภาษาต้นฉบับ
dmbarbour

5

สรุป: ความครบถ้วนสมบูรณ์หมายถึงฟังก์ชั่นการตีความไม่เพียงสมบูรณ์ แต่ยังรวมถึงโปรแกรมต่างๆด้วย นามธรรมเต็มไม่มีความต้องการสำหรับ surjectivity

[[.]]

  • A[[A]]

  • Γ[[Γ]]

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

[[.]]

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

P,QST

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

[[.]]

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.