คำถามใดที่ความหมายเชิง Denotational สามารถตอบได้ว่าความหมายเชิงปฏิบัติการไม่สามารถทำได้?


14

ฉันคุ้นเคยกับความหมายในการปฏิบัติงาน (ทั้งขั้นตอนเล็กและขั้นตอนใหญ่) เพื่อกำหนดภาษาโปรแกรม ฉันสนใจที่จะเรียนรู้ความหมายเชิงลบเช่นกัน แต่ฉันไม่แน่ใจว่ามันจะคุ้มค่ากับความพยายามหรือไม่ ฉันจะเรียนรู้เนื้อหาเดียวกันจากมุมมองที่ต่างออกไปหรือมีข้อมูลเชิงลึกที่ฉันจะได้รับจากการเข้าใจความหมายเชิง Denotational หรือไม่?

คำตอบ:


11

ไม่มีข้อตกลงที่แท้จริงสิ่งที่ลักษณะความหมาย denotational (ดูยังเป็นนี้บทความ) ยกเว้นว่ามันจะต้องเป็นcompositional นั่นหมายความว่าถ้าเป็นฟังก์ชั่นความหมาย, การแมปโปรแกรมกับความหมายของพวกเขา, สิ่งต่อไปนี้จะต้องเป็นกรณีสำหรับตัวสร้างโปรแกรม n -ary ทั้งหมด fและโปรแกรมทั้งหมด M 1 , ... , M n (โดยนัยสมมติว่าเป็นประเภท):[[]]nfM1Mn

[[f(M1,...,Mn)]]=trans(f)([[M1]],...,[[Mn]])

นี่เป็นตัวสร้างที่สอดคล้องกับFในโดเมนความหมาย การประพันธ์มีความคล้ายคลึงกับแนวคิดของโฮโมมอร์ฟิซึมในพีชคณิตtrans(f)f

ความหมายในการดำเนินงานไม่ได้เป็นองค์ประกอบในแง่นี้ ในอดีตความหมายเชิง Denotational ได้รับการพัฒนาขึ้นมาส่วนหนึ่งเป็นเพราะความหมายในการปฏิบัติงานไม่ได้เป็นองค์ประกอบ หลังจาก D. Scott พัฒนาความหมายเชิงทฤษฎี denotational denotational ของ -culculus, semantics อรรถศาสตร์ denotational ส่วนใหญ่เคยเป็นแบบ order-theoretic ฉันจินตนาการว่า - นอกเหนือจากความสนใจทางปัญญาล้วน - ความหมายเชิงการแยกทางส่วนใหญ่ถูกประดิษฐ์ขึ้นเพราะในขณะนั้น (1960):λ

  1. มันเคยยากที่จะให้เหตุผลเกี่ยวกับความหมายของการดำเนินงาน
  2. มันเคยยากที่จะให้ความหมายซึ่งเป็นจริงกับภาษาที่ไม่สำคัญ

ส่วนหนึ่งของปัญหาคือความคิดเกี่ยวกับความเท่าเทียมกันของโปรแกรมไม่เข้าใจเท่าที่เป็นอยู่ในปัจจุบัน ฉันขอยืนยันว่าปัญหาทั้งสองได้รับการแก้ไขให้ดีขึ้นอย่างมาก (1) ตัวอย่างเช่นโดยการใช้เทคนิคการทำ bisimilation ซึ่งมาจากทฤษฎีกระบวนการ ความเท่าเทียมกันและ (2) โดยการพัฒนาของตรรกะแยกหรือ Hoare logics มาเป็นรุ่นพิมพ์ของ Hennessy-Milner logics ผ่านการเขียนโปรแกรมภาษาแต่งงานในพิมพ์ emb-calculi โปรดทราบว่าโปรแกรม logics (= axiomatic semantics) เป็นองค์ประกอบเช่นกัน

อีกวิธีหนึ่งในการมองความหมายเชิง Denotational คือมีภาษาการเขียนโปรแกรมจำนวนมากและพวกเขาทั้งหมดมีลักษณะคล้ายกันดังนั้นบางทีเราสามารถค้นหาเมตาดาต้าที่เรียบง่าย แต่เป็นสากลและแมปภาษาการเขียนโปรแกรมทั้งหมด ภาษา. ในปี 1960 ก็คิดว่าบางพิมพ์แคลคูลัสคือว่าเมตาภาษา รูปภาพอาจพูดมากกว่า 1,000 คำ:λ

ป้อนคำอธิบายรูปภาพที่นี่

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

  • พิสูจน์โดยตรงกับระดับวัตถุ

  • พิสูจน์ว่าการแปลไปยังระดับเมตา (และด้านหลัง) 'รักษาคุณสมบัติ' ไว้และจากนั้นพิสูจน์ให้เป็นระดับเมตาแล้วทำการผลักดันผลลัพธ์กลับไปที่ระดับวัตถุ

ค่าใช้จ่ายรวมของหลังอาจสูงกว่าต้นทุนของอดีตแต่ค่าใช้จ่ายของการพิสูจน์การแปลสามารถตัดจำหน่ายตลอดการใช้งานในอนาคตทั้งหมดในขณะที่ค่าใช้จ่ายในการพิสูจน์คุณสมบัติสำหรับระดับเมตาดาต้ามีขนาดเล็กกว่าหลักฐาน ในระดับวัตถุ

ลำดับ - ทฤษฎีวิธีการดั้งเดิมเพื่อ denotational semantics ยังไม่ถึงสัญญานี้เพราะลักษณะทางภาษาที่ซับซ้อนเช่นการวางแนววัตถุการทำงานพร้อมกันและการคำนวณแบบกระจายยังไม่ได้รับความหมายเชิงทฤษฎี - คำสั่งที่แม่นยำ โดย "แม่นยำ" ฉันหมายถึงความหมายที่ตรงกับความหมายตามธรรมชาติของภาษาดังกล่าว


มันคุ้มค่ากับการเรียนรู้เกี่ยวกับความหมายเชิง Denotational หรือไม่? หากคุณหมายถึงวิธีการสั่งซื้อเชิงทฤษฎีเพื่อความหมายเชิง denotational อาจไม่เว้นแต่ว่าคุณต้องการทำงานในทฤษฎีภาษาการเขียนโปรแกรมและจำเป็นต้องเข้าใจเอกสารที่เก่ากว่า เหตุผลอีกประการหนึ่งสำหรับการเรียนรู้แนวทางเชิงทฤษฎีเพื่อความหมายเชิง denotational คือความงามของวิธีการนี้


4

O(พี,σ)σ'พี,σσ'D(พี)พีO(พี,σ)=D(พี)(σ)S(พี)σO(พี,σ)D(พี) )

:XX'S((พี))=S'(พี)พีσO((พี),σ)=O'(พี,σ)พีD((พี))=D'(พี)σ

ตัวอย่างโง่ ๆ :

(พี)=(Q;Q')(skผมพี;Q;skผมพี;Q';skผมพี)

พี

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