การตีความเชิงนามธรรมเป็นแนวคิดทั่วไปและขึ้นอยู่กับว่าคุณถามใครคุณจะได้รับคำอธิบายที่แตกต่างกันเพราะแนวคิดที่หลากหลายยอมรับมุมมองที่หลากหลาย มุมมองในคำตอบนี้เป็นของฉันและฉันจะไม่คิดว่ามันเป็นเรื่องทั่วไป
ความแข็งในการคำนวณเป็นแรงจูงใจ
เริ่มจากปัญหาการตัดสินใจซึ่งโซลูชันมีโครงสร้างดังนี้:
มักจะมีขอบล่างของ NP-hard บนโพรซีเดอร์ การตรวจสอบคุณสมบัติเชิงความหมายของโปรแกรมนั้นยังไม่สามารถตัดสินใจได้ พวกเราทำอะไรได้บ้าง?
ลองทำข้อสังเกตสองข้อ อันดับแรกเราบางครั้งสามารถแก้ปัญหากรณีเฉพาะแม้ว่าเราไม่สามารถแก้ปัญหาทั่วไป ประการที่สองแอปพลิเคชันเช่นการปรับให้เหมาะสมของคอมไพเลอร์ทนต่อการประมาณค่าในคอมไพเลอร์ที่กำจัดแหล่งที่มาของความไร้ประสิทธิภาพบางอย่าง แต่ไม่ใช่ทั้งหมดที่มีประโยชน์ เพื่อให้สัญชาตญาณแม่นยำเราต้องตอบ:
- การแก้ปัญหาอย่างเป็นทางการหมายถึงอะไร แต่ไม่ใช่ทุกกรณีที่เป็นปัญหา
- แนวทางแก้ไขปัญหาการตัดสินใจโดยประมาณคืออะไร?
แนวคิดการตีความที่เป็นนามธรรม 1: เปลี่ยนคำชี้แจงปัญหา
สำหรับฉันความเข้าใจที่สำคัญของการตีความเชิงนามธรรมคือการเปลี่ยนการกำหนดปัญหาดังนั้นแทนที่จะขอคำตอบใช่ / ไม่ใช่เราขอคำตอบใช่ / ไม่ใช่ / อาจจะตอบ
เป็นผลให้ทุกปัญหามีการแก้ปัญหาเวลาเล็กน้อยและคงที่ (เอาท์พุทอาจ ) ตอนนี้เราสามารถเปลี่ยนความสนใจของเราสืบมาขั้นตอนที่ไม่เคยผลิตบางที หากต้องการกลับไปที่คำถามข้างต้นโซลูชันที่ใช้งานได้กับอินสแตนซ์ปัญหาบางอย่างนั้นเป็นวิธีที่ส่งกลับมาอาจเป็นปัญหาที่ไม่สามารถแก้ไข ยิ่งกว่านั้นอาจจะเป็นการประมาณของใช่และไม่ใช่ เพราะเราไม่แน่ใจว่าคำตอบคืออะไร
ความคิดนี้ไม่ จำกัด เฉพาะปัญหาการตัดสินใจ พิจารณาปัญหาเหล่านี้เกี่ยวกับโปรแกรม
- บรรทัดใดของรหัสในโปรแกรมที่มีการตาย (จะไม่ถูกดำเนินการ)
- ตัวแปรใดในโปรแกรมที่มีค่าคงที่
- คำยืนยันใดในโปรแกรมที่ถูกละเมิด
ในสถานการณ์ทั้งหมดนี้เราสามารถเปลี่ยนจากโซลูชันที่แน่นอนเป็นโซลูชันที่ใกล้เคียงโดยพิจารณาจากโซลูชันที่มีความไม่แน่นอน
- อะไรคือชุดของเส้นของรหัสที่ตายไปแล้วหรือ
- อะไรคือชุดของตัวแปรในโปรแกรมที่มีค่าคงที่?
- อะไรคือสิ่งที่ชุดยืนยันในโปรแกรมที่ไม่ได้ละเมิด?
ชุดที่ผลิตไม่จำเป็นต้องมีขนาดใหญ่ที่สุด ความคิดนี้กว้างมากและนำไปใช้กับปัญหาต่าง ๆ ที่เกี่ยวข้องกับการวิเคราะห์โปรแกรม
- แทนที่จะเพิ่ม ม. และ nเราสามารถขอช่วงได้ [ a , b ] ซึ่งผลรวมอยู่
- แทนที่จะเป็นแบบทวีคูณ m โดย n เราสามารถขอ k บิตของผลลัพธ์ (เฉพาะตัวอย่างทั่วไปคือเครื่องหมายหรือบิตพาริตี)
- แทนที่จะถามหาการมอบหมายที่น่าพอใจให้กับสูตรเราสามารถขอชุดที่มีการมอบหมายที่น่าพอใจ
โปรดทราบว่าเราไม่เพียง แต่แก้ไขปัญหาเท่านั้น แต่ยังรวมถึงปัญหาทั่วไปอย่างเคร่งครัดเพราะการแก้ไขปัญหาเดิมยังคงเป็นวิธีการแก้ไขปัญหา คำถามใหญ่ที่ยังไม่ได้ตอบตอนนี้คือ: เราจะหาวิธีแก้ปัญหาโดยประมาณได้อย่างไร?
แนวคิดการตีความที่เป็นนามธรรม 2: การกำหนดลักษณะเฉพาะจุดของโซลูชันดั้งเดิม
ความคิดที่ใหญ่ที่สองคือการสังเกตว่าชุดของการแก้ปัญหามากมายมีลักษณะเป็นจุดคงที่ในการแก้ปัญหาของผู้สมัครตาข่าย ตัวอย่างเช่นสมมติว่าคุณมีกราฟและคุณต้องการทราบว่าจุดยอดt สามารถเข้าถึงได้จากจุดสุดยอด s. เราสามารถแยกมันออกเป็นชุดได้Reach(s) ของทุกจุดที่เข้าถึงได้จาก s จากนั้นตรวจสอบว่า tอยู่ในชุดนี้ เราสามารถสังเกตได้อีกว่าReach(s) เป็นวิธีแก้สมการน้อยที่สุด:
X={s}∪{w | v is in X and (v,w) is an edge}
ค่าของการกำหนดลักษณะจุดคงที่คือการแก้ปัญหาที่แน่นอนสามารถดูได้เป็นข้อ จำกัด ของชุดของการประมาณ ในตัวอย่างนี้nองค์ประกอบ -th ของซีรีส์คือชุดของกราฟจุดยอดที่สามารถเข้าถึงได้ n ขั้นตอนจาก s และการประมาณเป็นส่วนย่อยของจุดยอดเหล่านี้
ลักษณะของจุดคงที่คือการตัดสินใจออกแบบ มีการจำแนกลักษณะที่แตกต่างของชุดโซลูชั่น แต่ละคนอาจมีข้อได้เปรียบที่แตกต่างกัน ในกรณีของภาษาการเขียนโปรแกรมเรามีโครงสร้างมากกว่าแค่การจัดการกับกราฟ สมการจุดคงที่ที่เราสนใจสามารถกำหนดได้โดยการเหนี่ยวนำในโครงสร้างของโปรแกรมอินพุต แนวคิดนี้ไม่เฉพาะเจาะจงกับโปรแกรม เมื่อนำการตีความเชิงนามธรรมไปใช้กับองค์ประกอบของภาษาที่มีโครงสร้างเช่นไวยากรณ์สูตรตรรกะโปรแกรมการแสดงออกทางคณิตศาสตร์เป็นต้นเราสามารถกำหนดจุดคงที่ได้โดยการปฐมนิเทศในโครงสร้างของวัตถุวากยสัมพันธ์บางอย่าง
ด้วยการกำหนดคุณลักษณะจุดคงที่นี้เราจึงมุ่งมั่นในวิธีการเฉพาะของโซลูชันคอมพิวเตอร์ เราจะไม่คำนวณจุดคงที่นี้เพราะอย่างน้อยที่สุดเท่าที่ยากเท่ากับการแก้ปัญหาเดิมซึ่งนำเราไปสู่ขั้นตอนต่อไป
แนวคิดการตีความนามธรรม 3: การประมาณจุดคงที่
แทนที่จะคำนวณจุดคงที่ของฟังก์ชั่น F ในขัดแตะ Lเราสามารถคำนวณจุดคงที่ของฟังก์ชันอื่นได้ G ในขัดแตะ M. ให้เงื่อนไขบางประการที่จะพบที่เกี่ยวข้องM ถึง Lโซลูชันที่คำนวณใน M รับประกันได้ว่าจะเป็นการประมาณของการแก้ปัญหาใน L. นี้เป็นหนึ่งในผลพื้นฐานของการตีความนามธรรมมักจะเรียกว่าทฤษฎีบทจุดคงที่การถ่ายโอน สภาพความสมบูรณ์นั้นได้รับจากการเชื่อมต่อของ Galois หรือการตั้งค่าที่อ่อนแอกว่าซึ่งเกี่ยวข้องกับสิ่งที่เป็นนามธรรมหรือฟังก์ชั่นการปรับความสมดุลหรือความสัมพันธ์ด้านความมั่นคง
ทฤษฎีการถ่ายโอนจุดคงที่รับประกันได้ว่าคุณไม่จำเป็นต้องพิสูจน์ว่าคุณกำลังคำนวณเสียงโดยประมาณทุกครั้งที่คุณออกแบบการวิเคราะห์โดยประมาณ คุณเพียงแค่ต้องพิสูจน์ว่าขัดแตะL (มีคำตอบดั้งเดิม) และ M (ที่มีการประมาณ) และฟังก์ชั่น F และ Gตอบสนองข้อ จำกัด บางอย่าง นี่คือชัยชนะครั้งใหญ่หากคุณเป็นผู้ออกแบบการวิเคราะห์และคุณใส่ใจเรื่องความมั่นคง
คุณอาจพบว่าสัญชาตญาณที่อยู่เบื้องหลังการถ่ายโอนจุดคงที่มีไหวพริบ เราสามารถคิดถึงจุดที่คงที่ได้ว่าเป็นขีด จำกัด ขององค์ประกอบของโซ่ การคำนวณวิธีแก้ปัญหาโดยประมาณนั้นมีค่าประมาณใกล้เคียงกับขีด จำกัด นี้ซึ่งเราสามารถทำได้โดยการประมาณองค์ประกอบของโซ่
แนวคิดของการประมาณขึ้นอยู่กับแอปพลิเคชัน หากคุณใช้ความสามารถในการเข้าถึงกราฟเพื่อวางแผนการเดินทางคุณอาจยอมรับการประมาณที่บอกว่าไม่มีเส้นทางระหว่างs และ t แม้ว่าจะมีเส้นทาง แต่คุณจะไม่มีความสุขหากอัลกอริทึมกล่าวว่ามีเส้นทางจาก s ถึง t ในกรณีที่ไม่มีเส้นทาง
แนวคิดการตีความนามธรรม 4: อัลกอริทึมการประมาณจุดคงที่
ทุกสิ่งที่เห็นมาเป็นผลการดำรงอยู่ทางคณิตศาสตร์ ขั้นตอนสุดท้ายคือการคำนวณการประมาณ เมื่อ lattice of approximations มี จำกัด (หรือหากตรงตามเงื่อนไขของ chain น้อยไปมาก / มากไปหาน้อย) เราสามารถใช้ขั้นตอนการทำซ้ำแบบง่ายได้ หากขัดแตะไม่มีที่สิ้นสุดกระบวนการวนซ้ำอาจไม่เพียงพอแม้ว่าการคำนวณจุดคงที่อาจยังคงสามารถตัดสินใจได้ ในสถานการณ์เช่นนี้มีการใช้เทคนิคมากมายในการประมาณค่าโซลูชันเพิ่มเติมหรือเพื่อข้ามไปยังโซลูชันที่แน่นอนเร็วกว่าอัลกอริทึมการทำซ้ำแบบไร้เดียงสา ในบริบทของการคำนวณวิธีการแก้ปัญหาที่คุณได้ยินคำเช่นขยับขยาย , กวดขัน , ย้ำกลยุทธ์ , การเร่งความเร็วและอื่น ๆ
สรุป
ในความคิดของฉันการตีความเชิงนามธรรมให้พื้นฐานทางคณิตศาสตร์สำหรับแนวคิดเรื่องนามธรรมในลักษณะเดียวกับที่ตรรกะทางคณิตศาสตร์ให้พื้นฐานทางคณิตศาสตร์สำหรับการให้เหตุผล การแก้ปัญหาที่เราสนใจมีลักษณะเป็นจุดคงที่ การสังเกตนี้ไม่ได้ จำกัด อยู่ที่ปัญหาภาษาการเขียนโปรแกรมและแม้แต่กับวิทยาศาสตร์คอมพิวเตอร์ การแก้ปัญหาโดยประมาณสามารถกำหนดลักษณะเป็นการประมาณจุดคงที่และคำนวณด้วยอัลกอริธึมพิเศษ ลักษณะและอัลกอริธึมเหล่านี้จะใช้ประโยชน์จากโครงสร้างของอินสแตนซ์ปัญหา ในกรณีของโปรแกรมโครงสร้างนี้ได้รับจากไวยากรณ์ของภาษา
การคำนวณหาปัญหาที่ไม่มีตัวชี้วัดตามธรรมชาติคือศิลปะที่พัฒนาและกลั่นกรองโดยผู้ปฏิบัติงานอย่างต่อเนื่อง การตีความเชิงนามธรรมเป็นทฤษฎีทางคณิตศาสตร์หนึ่งข้อสำหรับวิทยาศาสตร์ที่อยู่เบื้องหลังศิลปะนี้
เอกสารอ้างอิง
มีบทแนะนำที่ดีหลายประการเกี่ยวกับการตีความเชิงนามธรรมที่คุณสามารถอ่านได้
- บทนำเบื้องต้นเกี่ยวกับการตีความนามธรรม , Patrick Cousot (ทำงานร่วมกับ Radhia Cousot), การประชุมเชิงปฏิบัติการเกี่ยวกับชีววิทยาระบบและวิธีการของ Formals (SBFM'12)
- การแนะนำการตรวจสอบอย่างเป็นทางการของระบบคอมพิวเตอร์โดยการตีความนามธรรม Patrick และ Radhia Cousot, Marktoberdorf Summer School 2010
- การบรรยายครั้งที่ 13: สิ่งที่เป็นนามธรรมส่วนที่ 1 , Patrick Cousot, การตีความเชิงนามธรรม, หลักสูตร MIT
- รู้เบื้องต้นเกี่ยวกับการตีความนามธรรมแซมซั่นเอบรัมสกีและคริสฮันชินการตีความนามธรรมของภาษาที่ประกาศ 2530
- การตีความเชิงนามธรรมและการประยุกต์ใช้กับโปรแกรมเชิงตรรกะ Patrick และ Radhia Cousot, 1992 สองส่วนแรกมีภาพรวมทั่วไประดับสูงพร้อมตัวอย่างหลายตัวอย่าง