เหตุใดรัฐจึงไม่เปลี่ยนแปลงในซีแมนทิกส์การปฏิบัติการขั้นตอนเล็ก ๆ ของการวนรอบสักครู่?


9

ฉันมักจะเห็นว่าในการเป็นตัวแทนความหมายการดำเนินงานโครงสร้างสำหรับห่วงขณะที่สถานะของโปรแกรมจะไม่เปลี่ยนแปลง:

(whileBdoS,σ)(ifBthenS;(whileBdoS)elseSKIP,σ)

สำหรับฉันแล้วสิ่งนี้ไม่ง่ายหากสถานะไม่เปลี่ยนแปลง (เช่นสถานะของหน่วยความจำยังคงเหมือนเดิม) จากนั้น B จะยังคงเป็นจริงต่อไปและโปรแกรมจะไม่ยุติ

ใครช่วยอธิบายหน่อยได้ไหมว่าทำไมรัฐถึงไม่เปลี่ยนแปลงในกฎนี้


โปรดทราบว่านี่ถูกต้องก็ต่อเมื่อเราสามารถสันนิษฐานได้ว่า Bไม่มีผลข้างเคียง สิ่งนี้ไม่เป็นความจริงในภาษาการเขียนโปรแกรมส่วนใหญ่
ราฟาเอล

คำตอบ:


10

ในความหมายของการเขียนโปรแกรมภาษาความคิดเกี่ยวกับสถานะของโปรแกรมไม่ใช่ความคิดเชิงปรัชญาที่คลุมเครือ แต่เป็นคณิตศาสตร์ที่แม่นยำมาก รัฐ s ในความหมายการดำเนินงานขั้นตอนเล็ก ๆ นี้เป็นฟังก์ชั่นบางส่วน

s:VarZ

ที่บันทึกค่าของตัวแปร ดังนั้นถ้าsx=vตัวแปรแล้ว x มีค่า v. รัฐจำเป็นต้องมีฟังก์ชั่นบางส่วนเนื่องจากมันเหมาะสมที่จะบันทึกค่าของตัวแปรที่เกิดขึ้นจริง

สัจพจน์ที่แฉ

whilebdoS,sifbthenS;whilebdoSelse skip,s

เป็นเพียงแค่บอกเราว่าเราตีแผ่ while-loop เข้าไปในคำสั่งแบบมีเงื่อนไขซึ่งหนึ่งในนั้นมีกิ่งไม้ที่มีวง ไม่มีตัวแปรใดที่จะเปลี่ยนแปลงค่าของพวกเขาเนื่องจากสิ่งนี้และด้วยเหตุนี้รัฐจึงไม่เปลี่ยนแปลง


10

รัฐสามารถเปลี่ยนแปลงได้ในขั้นตอนการลดขนาดที่ตามมาเพราะทางด้านขวามือของ

while B do S,σif B then (S; while B do S) else skip,σ

while-loop ได้รับการปกป้อง (นำหน้า) โดย S. การคำนวณของS อาจเปลี่ยนสถานะเพื่อให้สภาพ B สามารถประเมิน false.


ดังนั้นนี่หมายความว่าการเปลี่ยนแปลงสถานะควรจะแสดงในกฎอื่น ๆ ที่ S อาจลดลงในโปรแกรมที่เป็นรูปธรรม?
El Marce

@ElMarce ใช่ ฉันขอแนะนำให้ทำตัวอย่างง่ายๆเช่นx:=2; while x>0 do x:=x1และดูว่ามันทำงานอย่างไร
Martin Berger

9

รัฐ σ ไม่เปลี่ยนแปลงเมื่อเราพิจารณา Bเพื่อตัดสินใจว่าจะทำการวนซ้ำหนึ่งรอบหรือไม่ แต่สามารถเปลี่ยนได้ในภายหลังเมื่อเราเรียกใช้เนื้อหาS. ดังนั้นในครั้งต่อไปที่เราพิจารณาBอาจมีการเปลี่ยนแปลงได้ σ.


คำอธิบายนี้ในขณะที่ถูกต้องเป็นหลักไม่ได้หมายถึงสิ่งที่รัฐ (คือฟังก์ชั่นที่บอกเราค่าของ varialbes) และสิ่งที่การเปลี่ยนแปลงของรัฐหมายถึง (คือว่าค่าของการเปลี่ยนแปลงตัวแปรอย่างน้อยหนึ่ง)
ฮันส์Hüttel

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

แต่คำถามนั้นเกี่ยวข้องกับความหมายการปฏิบัติการขั้นตอนเล็ก ๆ ซึ่งแนวคิดของรัฐนั้นชัดเจน
ฮันส์Hüttel

ฉันไม่เคยบอกว่ามันไม่ใช่ ฉันแค่บอกว่าคำพูดของคุณไม่จำเป็นเพราะคำอธิบายของฉันถือโดยไม่ต้องพูดถึงอย่างชัดเจนว่าเป็นแบบอย่างของรัฐ บางทีคุณตรวจพบว่า OP ไม่ทราบว่าสถานะนั้นเป็นแผนที่จากตัวแปรถึงค่า ดีสำหรับคุณคุณได้รับคำตอบแล้วและฉันก็ทำไม่ได้ ขอแสดงความยินดี ทำไมตอนนี้คุณบังคับให้โหมดการตอบคำถามกับฉันมันเกินความเข้าใจของฉัน ทำไมคุณถึงรู้สึกว่าจำเป็นต้องทำให้คำตอบของฉันเป็นเหมือนของคุณ? คำตอบของฉันเหมาะสมโดยไม่มีคำพูดที่คุณคิดว่าจำเป็น บางทีใครบางคนอาจจะมาหาคำตอบของฉันสักวันหนึ่ง
Andrej Bauer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.