สิ่งนี้ถูกเขียนในรายการ wiki ของSymbolic Executionแต่ฉันไม่พบการอ้างอิงใด ๆ ทุกคนสามารถแสดงตัวชี้ให้ฉันได้หรือไม่ ขอขอบคุณ.
สิ่งนี้ถูกเขียนในรายการ wiki ของSymbolic Executionแต่ฉันไม่พบการอ้างอิงใด ๆ ทุกคนสามารถแสดงตัวชี้ให้ฉันได้หรือไม่ ขอขอบคุณ.
คำตอบ:
ฉันไม่ได้ตระหนักถึงกระดาษที่เกี่ยวข้องกับการเปรียบเทียบระหว่างการใช้สัญลักษณ์และการตีความเชิงนามธรรม ฉันไม่คิดว่าเป็นสิ่งจำเป็น การอ่านคำอธิบายดั้งเดิมของสองเทคนิคนี้น่าจะเพียงพอแล้ว
(ตรงกันข้ามถ้ามีการเชื่อมต่อที่ไม่คาดคิดนั่นก็คุ้มค่าที่จะอธิบาย แต่ฉันก็สงสัยอย่างมากว่านี่คือกรณี)
แนวคิดหลักของการประมวลผลเชิงสัญลักษณ์คือคุณสามารถแสดงค่าของตัวแปรทั้งหมดเป็นฟังก์ชันของค่าเริ่มต้น ณ จุดใดจุดหนึ่งในการดำเนินการ แนวคิดหลักของการตีความเชิงนามธรรมคือคุณสามารถสำรวจการประมวลผลทั้งหมดของโปรแกรมอย่างเป็นระบบโดยใช้ชุดการประมาณมากเกินไป (ฉันสามารถได้ยินผู้ที่ชื่นชอบ AI หลายคนกำลังคร่ำครวญเมื่อประมาณก่อนหน้านี้)
ดังนั้นอย่างน้อยในสูตรดั้งเดิมการใช้สัญลักษณ์จึงไม่เกี่ยวข้องกับการสำรวจการประหารชีวิตที่เป็นไปได้ทั้งหมด คุณสามารถดูสิ่งนี้ได้แม้ในชื่อ: มันมีคำว่า 'การทดสอบ' แต่นี่คือเพิ่มเติมจากหัวข้อที่ 8: "สำหรับโปรแกรมที่มีต้นไม้ดำเนินการไม่สิ้นสุดการทดสอบเชิงสัญลักษณ์ไม่สามารถทำได้อย่างครบถ้วนสมบูรณ์
ในทางตรงกันข้ามการตีความเชิงนามธรรมมีวัตถุประสงค์เพื่อสำรวจการประหารชีวิตทั้งหมด ในการทำเช่นนั้นจะใช้ส่วนผสมหลายอย่างซึ่งหนึ่งในนั้นคล้ายกันมากกับแนวคิดหลักของการใช้สัญลักษณ์ ส่วนผสมเหล่านี้คือ (1) รัฐนามธรรม (2) การเข้าร่วมและขยับขยาย (ดังนั้น 'ตาข่าย' ในชื่อ)
รัฐที่เป็นนามธรรมสถานะที่เป็นรูปธรรมของโปรแกรม ณ เวลาใดเวลาหนึ่งนั้นเป็นภาพรวมของเนื้อหาหน่วยความจำ (รวมถึงรหัสโปรแกรมและตัวนับโปรแกรม) มีรายละเอียดมากมายซึ่งยากต่อการติดตาม เมื่อคุณวิเคราะห์คุณสมบัติเฉพาะคุณอาจต้องการละเว้นส่วนใหญ่ของสถานะคอนกรีต หรือคุณอาจสนใจว่าตัวแปรเฉพาะนั้นเป็นลบศูนย์หรือบวก แต่ไม่สนใจค่าที่แน่นอน โดยทั่วไปคุณต้องการพิจารณารุ่นที่เป็นนามธรรมของสถานะที่เป็นรูปธรรม ในการดำเนินการนี้คุณต้องมีคุณสมบัติ commutativity: หากคุณใช้สถานะที่เป็นรูปธรรมดำเนินการคำสั่งแล้วสรุปสถานะผลลัพธ์คุณควรได้รับผลลัพธ์เดียวกันกับถ้าคุณสรุปสถานะเริ่มต้นแล้วจึงดำเนินการเหมือนเดิม คำสั่ง แต่ในสถานะนามธรรม แผนภาพการสับเปลี่ยนนี้ปรากฏในเอกสารทั้งสองฉบับ นี่คือความคิดทั่วไป อีกครั้งการตีความเชิงนามธรรมนั้นเป็นเรื่องทั่วไปมากกว่าเพราะมันไม่ได้กำหนดวิธีการสรุปสถานะของรัฐ - เพียงแค่บอกว่าควรมีวิธีที่จะทำ ในทางตรงกันข้ามการประมวลผลเชิงสัญลักษณ์บอกว่าคุณใช้นิพจน์ (สัญลักษณ์) ที่กล่าวถึงค่าเริ่มต้น
เข้าร่วมและขยับขยาย หากการดำเนินการของโปรแกรมมาถึงคำสั่งที่แน่นอนในสองวิธีที่แตกต่างกันการดำเนินการเชิงสัญลักษณ์จะไม่พยายามผสานการวิเคราะห์ทั้งสองเข้าด้วยกัน นั่นคือเหตุผลที่ข้อความข้างต้นพูดถึงต้นไม้ดำเนินการแทนที่จะเป็นดิน แต่จำไว้ว่าการตีความเชิงนามธรรมต้องการครอบคลุมการประหารชีวิตทั้งหมด ดังนั้นจึงขอวิธีรวมการวิเคราะห์การประหารสองครั้ง ณ จุดที่พวกเขามีตัวนับโปรแกรมเดียวกัน (เข้าร่วมได้เป็นคนโง่มาก ({a} join {b} = {a, b}) ซึ่งเป็นจำนวนที่การประมวลผลเชิงสัญลักษณ์ทำ) โดยทั่วไปการเข้าร่วมตัวเองนั้นไม่เพียงพอที่จะรับประกันได้ว่าในที่สุดคุณจะวิเคราะห์การประมวลผลทั้งหมดเสร็จสิ้น (โดยเฉพาะอย่างยิ่งการเข้าร่วมใบ้ที่กล่าวถึงก่อนหน้านี้จะไม่ทำงาน) พิจารณาโปรแกรมที่มีลูป: "n = input (); สำหรับ i ในช่วง (n): dostuff ()" คุณควรไปกี่รอบแล้วเข้าร่วมต่อไป? ไม่มีคำตอบคงที่ทำงาน ดังนั้นจึงมีความจำเป็นอย่างยิ่งและนั่นคือการขยับขยายซึ่งสามารถมองเห็นได้ว่าเป็นฮิวริสติก สมมติว่าคุณวนรอบ 3 ครั้งและคุณเรียนรู้ว่า "i = 0 หรือ i = 1 หรือ i = 2" จากนั้นคุณพูดว่า: hmmm, ... ลองขยายให้กว้างแล้วคุณจะได้ "i> = 0" การตีความที่เป็นนามธรรมอีกครั้งไม่ได้บอกว่าจะขยับขยายอย่างไร - เพียงแค่บอกว่าการขยับขยายคุณสมบัติควรจะต้องคิดออกมาเป็นอย่างไร
(ขออภัยสำหรับคำตอบที่ยาวนี้: ฉันไม่มีเวลาทำให้สั้นลงจริง ๆ )
ฉันคิดว่านี่มีความหมายในแง่ที่ตื้นมาก ขั้นตอนแรกของการตีความเชิงนามธรรมคือการระบุความหมายที่เป็นรูปธรรมในการเก็บรวบรวม แทนที่จะอธิบายวิวัฒนาการของรัฐเดี่ยวการรวบรวมความหมายอธิบายวิวัฒนาการของเซตรัฐ เนื่องจากการดำเนินการเชิงสัญลักษณ์ด้วยเหตุผลเกี่ยวกับการเป็นตัวแทนของชุดของรัฐหนึ่งสามารถยืนยันว่ามันหมายถึงความหมายที่เป็นรูปธรรมของโปรแกรม ฉันไม่ได้ตระหนักถึงการโต้ตอบที่แม่นยำมากขึ้น
ดู Patrick Cousot Méthodesitératives de construction และ d'approximation de point fix d'opérateurs monotones sur un treillis, วิเคราะห์โปรแกรมsémantique des (วิธีการทำซ้ำสำหรับการก่อสร้างและการประมาณของ fixpoints ของผู้ดำเนินการโทนสีเดียวบน lattices, โปรแกรมการวิเคราะห์แบบคงที่) Thèseèsวิทยาศาสตร์Mathématiques, Université Joseph Fourier, Grenoble, ฝรั่งเศส, 21 มีนาคม 2521 https://cs.nyu.edu/~pcousot/publications.www/CousotTheseEsSciences1978.pdf (ขออภัยในภาษาฝรั่งเศส), หน้า (3) -27 ถึง (3) -29