วางเฟรมกฎไว้เป็นการเปลี่ยนเซิร์ฟเวอร์หรือไม่


18

กฎกรอบเช่นหนึ่งที่ระบุด้านล่างจับความคิดที่ว่าได้รับโปรแกรมcที่มีเงื่อนไขpที่ถือก่อนที่จะเรียกและ postcondition qที่ถือหลังจากนั้นบางสภาพเคล็ดrควรถือทั้งก่อนและหลังcวิ่ง (ความ*เกี่ยวพันจำเป็นต้องมีการขัดแย้งกัน) บ่อยครั้งที่ก่อนและหลังมีสถานะของกองและcเป็นโปรแกรมที่มีประสิทธิภาพที่ปรับเปลี่ยนกองในทางใดทางหนึ่ง

    {p} c {q}
----------------- (where no free variable in r is modified by c)
{p * r} c {q * r}

การสนทนาเกี่ยวกับกฎของเฟรมที่ฉันได้เห็นดูเหมือนจะเน้นไปที่วิธีการแยกส่วนของกองrไว้ให้คงอยู่ สิ่งนี้ทำให้ "การใช้เหตุผลในท้องถิ่น": เมื่อให้เหตุผลเกี่ยวกับผลกระทบที่cมีเราสามารถเพิกเฉยต่อrส่วนของฮีปและเกี่ยวข้องกับตัวเราเองกับส่วนที่เปลี่ยนแปลงจริงเท่านั้น แต่วิธีการที่จะมองมันอีกอย่างก็คือว่าการเปลี่ยนแปลงจากpการqถูกเก็บรักษาไว้แม้ว่าrตอนนี้นั่งอยู่ที่นั่น ในคำอื่น ๆ มันเป็นสิ่งสำคัญที่เราจบลงด้วย postcondition {q * r}มากกว่าสำหรับบางคนอื่น ๆ{q' * r}q'

ดังนั้นคำถามของฉันคือว่ามีการรักษากฎกรอบใด ๆ ที่กล่าวถึงหรือทำให้การใช้การเก็บรักษาของการเปลี่ยนแปลง from- p-to- qสิ่ง


หนึ่งคำตอบสำหรับคำถามของฉันเองอยู่ในบทความนี้: software.imdea.org/~gotsman/papers/interproc-sas06.pdfในประโยค (ให้ความสำคัญกับเหมือง) "ถ้า P มั่นใจว่ามีการจัดสรรรอยเท้าของ C แล้วตามกรอบการดำเนินการ C เมื่อมีหน่วยความจำเพิ่มเติม R ส่งผลให้เกิดพฤติกรรมแบบเดียวกันและ C ไม่ได้สัมผัสหน่วยความจำเพิ่มเติม " มันคือ "ผลลัพธ์ในพฤติกรรมเดียวกัน" ที่ฉันกำลังมองหาใครบางคนที่จะชี้ให้เห็นนอกเหนือไปจากเพียงแค่ "C ไม่ได้สัมผัสหน่วยความจำเสริม" (ขอบคุณ @kaosjester สำหรับลิงก์)
Lindsey Kuper

1
ถ้าคุณอ่านผ่านการพิสูจน์ความแข็งแรงของการปกครองกรอบและกฎระเบียบอื่น ๆ แยกลอจิกคุณจะพบว่าพวกเขากำลังทำสิ่งที่คุณมีอยู่หลังจากที่คือพวกเขาพูดคุยเกี่ยวกับวิธีการเปลี่ยนแปลงจากไปยังคิวจะถูกรักษาไว้ ให้ความสนใจกับสถานที่และคุณสมบัติของเฟรมที่กล่าวถึง pq
Uday Reddy

คำตอบ:


11

แต่คุณสมบัติที่ไม่มีการเปลี่ยนแปลงqเป็นจริงไม่ได้ถือ!

{emp} x := alloc(0) {x |-> 0}พิจารณา ตอนนี้ถ้าผมกรอบในการy |-> 3ที่ฉันได้รับ

{y |-> 3} x := alloc(0) {x |-> 0 * y |-> 3}

แต่ด้วยกฎของผลที่ตามมาฉันสามารถเปลี่ยน postcondition เป็น

{y |-> 3} x := alloc(0) {(x |-> 0 /\ x != y) * y |-> 3}

เพื่อให้เป็นรูปธรรมมากกว่านี้สมมติว่าเป็นจำนวนy 37เมื่อฉันเรียกใช้คำสั่งการจัดสรรในกองว่างเปล่าก็เป็นไปได้ว่าจะจบลงด้วยการจัดสรรที่อยู่เพื่อที่ว่า37 x = 37แต่ถ้าฉันเริ่มต้นด้วยฮีปที่มีเซลล์เดียวตามที่อยู่y = 37แทนผลลัพธ์นี้จะเป็นไปไม่ได้อีกต่อไป! การเพิ่มเฟรมเข้ากับเงื่อนไขเบื้องต้นได้ตัดส่วนของ nondeterminism ใน postcondition

บทความ "การกระทำในท้องถิ่นและตรรกะการแยกเชิงนามธรรม" (Calcagno, O'Hearn และ Yang) คือทั้งหมดที่เกี่ยวกับการทำความเข้าใจกฎของเฟรมจากมุมมองเชิงลึกและความหมาย คำจำกัดความที่สำคัญของกระดาษคือท้องที่สำหรับ "การกระทำ" โดยที่การกระทำคือ (การแสดงความหมายของ) โปรแกรม ถิ่นที่บอกว่าเมื่อคุณเพิ่มในบางกองกรอบที่เพียงวิธีการที่ postcondition เดิมสามารถเปลี่ยนแปลงได้โดยการตัดแต่งกิ่งไม่นิยมบางอย่างที่กล่าวข้างต้น และในความเป็นจริงการตัดแต่งกิ่งเกิดขึ้นเนื่องจากการจัดสรรเท่านั้น


ขอบคุณสำหรับตัวอย่างและสำหรับการอ้างอิง! ตัวอย่างของคุณสมเหตุสมผลแล้ว มันยุติธรรมที่จะพูดว่าที่qสามารถเปลี่ยนเป็น " qและยัง ... "? และยิ่งไปกว่านั้นหากการจัดสรรเป็นสิ่งเดียวที่สามารถตัดการ nondeterminism ใน postcondition (ซึ่งเป็นผลลัพธ์ที่ยอดเยี่ยมในตัวเอง) จากนั้นถ้ามีบางส่วนของ postcondition ที่เป็นอิสระต่อกันนั่นคือส่วนหนึ่งของ postcondition รับประกันว่าจะอยู่เหมือนกัน? เราสามารถบอกได้ไหมว่าการเปลี่ยนแปลงภายหลังยังคงเหมือนเดิมถึงการเปลี่ยนชื่อสถานที่ตั้งใหม่ (ฉันมีตัวอย่างอยู่ในใจ แต่บางทีนี่อาจอธิบายได้ดีกว่าผ่านทางอีเมล)
Lindsey Kuper

1
ใช่qสามารถเปลี่ยนเป็น " qและ ... " อีกนัยหนึ่งการ postcondition สามารถแข็งแกร่งขึ้นเท่านั้น: มันจะบ่งบอกถึงการ postcondition ดั้งเดิม นี่เป็นส่วนหนึ่งของคำนิยามของสถานที่สำหรับการกระทำ มันไม่เป็นความจริงเลยว่าการเปลี่ยน postcondition นั้นเชื่อมโยงกับการเปลี่ยนชื่อเท่านั้น ในตัวอย่างที่ฉันให้ความจริงที่พิเศษxและyแตกต่างนั้นเป็นจริงโดยไม่คำนึงถึงที่อยู่เฉพาะที่เลือกyไว้ ตัวอย่างจับความสดของการจัดสรรซึ่งไม่เปลี่ยนแปลงภายใต้การเปลี่ยนชื่อ
Aaron Turon

11

อันดับแรกมีความเข้าใจผิดเล็กน้อยในการตอบคำถามของคุณซึ่งเป็นสิ่งที่แอรอนได้รับในคำตอบของเขา เพรดิเคตในการแยกลอจิกคือชุดของฮีป (หรือเท่ากันเพรดิเคตบนฮีป) และการแยกการรวมกันถูกกำหนดเป็น:PQ

PR{h1h2|h1Ph2Rdom(h1)dom(h2)=}

ดังนั้นในกฎเฟรม

{P}c{Q}{PR}c{QR}

P QR (และและ ) ไม่ได้พูดถึงฮีปเฉพาะ - เป็นคุณสมบัติของฮีป (เนื่องจากเซ็ตย่อยและเพรดิเคตนั้นเทียบเท่า) วิธีที่ดีที่สุดที่จะเข้าใจสิ่งที่เกิดขึ้นคือการดูคำจำกัดความของความหมายของ Hoare triple ที่จะถือPQ

{P}c{Q}h1P.hHeaps.t.h#h1.h2Q.h1h;ch2h;skip

โดยทั่วไปคำจำกัดความนี้บอกว่า (1) ถ้าคุณรันด้วยใด ๆ ในคุณจะสิ้นสุดในสถานะสุดท้ายในและ (2) ถ้าคุณเพิ่มหน่วยความจำเพิ่มเติมหน่วยความจำนั้นจะไม่เปลี่ยนแปลง ในตอนท้ายของการวิ่ง แต่ทราบว่าเฉพาะคุณได้รับอาจแตกต่างกันสำหรับทางเลือกที่แตกต่างกันของ --- สิ่งที่ถูกรับประกันว่าคุณสมบัติและจะยังคงถือภายใต้นามสกุลไม่ว่าคุณจะได้รับสิ่งกองผลเดียวกันh 1 P h 2 Q h h 2 h P Qch1Ph2Qh h2h PQ

มันไม่ยากเกินไป แต่ก็ยังคุ้มค่ากับการทำงานเพื่อดูว่าคำจำกัดความของ Hoare สามนี้มีความหมายอย่างไรกับกฎของเฟรม ดังที่คุณทราบนี่เป็นคุณสมบัติ "การสงวนรักษา - การเปลี่ยนแปลง" และมีการแสดงออกที่ชัดเจนเป็นพิเศษในคำสั่งของกฎการประกอบแบบขนานในตรรกะการแยกแบบพร้อมกัน:

{P1}c1{Q1}{P2}c2{Q2}{P1P2}c1||c2{Q1Q2}

หากและดำเนินการกับส่วนที่แยกออกจากกันของหน่วยความจำแต่ละส่วนจะไม่รบกวนคุณสมบัติของการทำงานของอีกฝ่ายเมื่อทำงานในแบบคู่ขนานc 2c1c2

มีการอภิปรายเรื่องนี้ในเอกสารโดย Hoare et al, เกี่ยวกับท้องถิ่นและกฎหมายแลกเปลี่ยนสำหรับกระบวนการที่เกิดขึ้นพร้อมกันซึ่งพวกเขาแสดงให้เห็นถึงวิธีการให้พีชคณิตแบบผสานของโปรแกรมและการยืนยัน


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

3
(1) ฉันให้ความหมายสำหรับ triples ความถูกต้องทั้งหมดและดังนั้นจึงยืนยันว่าคำสั่งเสร็จสมบูรณ์อย่างปลอดภัย - ฉันพบว่าความถูกต้องทั้งหมดทำให้การอธิบายตัวอักษร forall / ที่มีอยู่ของสภาพก่อนและหลังโพสต์ได้ง่ายขึ้น (2) ความหมายของ triples นี้ถูกประดิษฐ์ขึ้นจริง (IIRC โดย Birkedal และ Yang) เพื่อจัดการกับภาษาที่ไม่มีความปลอดภัยในการพูดซ้ำซ้อนในความหมายของภาษาโดยการสร้างเป็นความหมายของ triples เป็นผลให้คุณสามารถสร้างโครงสร้างที่ไม่ใช่แบบโมโนโทนิก (เช่นแบบสอบถามเกี่ยวกับกองใหญ่) ในภาษาในขณะที่ยังคงมีกรอบกฎสำหรับตรรกะ Hoare
Neel Krishnaswami

(1) ตกลง แต่สิ่งเขียนเหล่านั้นต่างออกไป (2) ฉันไม่รู้ หากต้องการใช้ถ้อยคำใหม่ในสิ่งที่คุณพูด: โดยไม่ต้องใช้โมโนโทนิตี้คุณอาจสูญเสียกฎเฟรมและใช้ triads Hoare ตามปกติซึ่งเป็นสิ่งที่ฉันได้รับในการแสดงความคิดเห็นครั้งแรกแต่คุณสามารถเสริมความหมายของสามเพื่อทำให้คุณ กฎเฟรม (3) ฉันไม่เห็นว่าทำไมมันขัดขวางความผิดพลาด คุณคิดว่าเป็นสิ่งกำหนดหรือไม่? c
Radu GRIGore

1
ขอบคุณ Neel! คุณพูดถูกฉันกำลังพูดถึงคุณสมบัติของ P และ Q กับกองที่เฉพาะเจาะจง ดังนั้นเพื่อสรุปความคิดเห็นของคุณ: Q จะได้รับการเก็บรักษาไว้ แต่ฮีปที่คุณได้รับในตอนท้ายอาจเป็นฮีปที่ตอบสนอง Q ที่แตกต่างจากที่คุณเคยได้รับมาก่อน ใช่?
Lindsey Kuper

1
@RaduGRIGore: ใช่ฉันกำลังสมมติว่าภาษานั้นถูกกำหนดไว้แล้วและการสันนิษฐานนี้จะล้มเหลวเมื่อเราเพิ่มการทำงานพร้อมกัน รับได้สวย!
Neel Krishnaswami

2

แม้ว่าจะไม่เกี่ยวข้องกัน 100% สิ่งนี้มีรสชาติของสัญญา idempotence

หากเราคิดว่า {p} เป็นเงื่อนไขล่วงหน้าใน c และ {q} เป็นเงื่อนไขหลังใน c แนวคิดของกรอบกฎนี้จะทำให้มั่นใจได้ว่าเงื่อนไขก่อนและหลังมีอยู่ในทุกบริบทของการคำนวณไม่ใช่ กรณีง่าย ๆ ที่ไม่มีสิ่งใดอยู่

ที่กล่าวว่าฉันไม่สามารถพูดได้ว่าฉันเห็นกฎเฟรมดังกล่าวในเอกสารสัญญาใด ๆ ที่ฉันอ่าน แม้ว่าจะเป็นความคิดที่ดี แต่การเปลี่ยนแปลงดังกล่าวอาจทำให้เกิดการพัฒนาความเข้าใจที่สมเหตุสมผลและเป็นรูปธรรมของสัญญาidempotent


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