Propมีประโยชน์มากสำหรับการแตกโปรแกรมเนื่องจากช่วยให้เราสามารถลบส่วนของรหัสที่ไม่มีประโยชน์ ตัวอย่างเช่นในการแยกอัลกอริทึมการเรียงลำดับเราจะพิสูจน์คำสั่ง "สำหรับทุกรายการมีรายการที่ได้รับคำสั่งและเป็นพีชคณิตของ " หากเราเขียนลงใน Coq และแยกโดยไม่ใช้เราจะได้รับ:ℓkkkℓProp
- "สำหรับทั้งหมดมี " จะให้แผนที่ซึ่งนำรายการไปสู่รายการℓk
sort
- "เช่นนั้นสั่ง " จะให้ funciton ซึ่งทำงานผ่านและตรวจสอบว่ามันถูกเรียงและk
verify
k
- "คือการเปลี่ยนแปลงของ " จะให้การเปลี่ยนแปลงซึ่งจะใช้เวลาเพื่อkโปรดทราบว่าไม่ได้เป็นเพียงการจับคู่แผนที่ แต่ยังรวมถึงการทำแผนที่ผกผันพร้อมกับโปรแกรมที่ตรวจสอบว่าแผนที่ทั้งสองนั้นเป็นแบบผกผันจริงๆkℓ
pi
ℓkpi
sort
ในขณะที่สิ่งที่พิเศษไม่ได้ไร้ประโยชน์โดยสิ้นเชิงในการใช้งานมากเราต้องการที่จะกำจัดมันและให้เพียง สิ่งนี้สามารถทำได้ถ้าเราใช้เพื่อระบุว่า "ถูกสั่ง" และ "คือการเปลี่ยนแปลงของ " แต่ไม่ใช่ "สำหรับทั้งหมดมี "Propkkℓℓk
โดยทั่วไปวิธีการทั่วไปในการแยกรหัสคือการพิจารณาคำสั่งของฟอร์มโดยที่คืออินพุต,คือเอาต์พุตและอธิบายว่ามันหมายถึงอะไรสำหรับที่จะเป็นเอาต์พุตที่ถูกต้อง (ในตัวอย่างข้างต้นและเป็นประเภทของรายการและคือ "ได้รับคำสั่งและเป็นการเปลี่ยนแปลงของ .") ถ้าอยู่ในดังนั้นการแยก ให้แผนที่ที่ถืออยู่ทั้งหมด∀x:A.∃y:B.ϕ(x,y)xyϕ(x,y)yABϕ(ℓ,k)kkℓϕPropf:A→Bϕ(x,f(x))x∈AA หากอยู่ในแล้วเรายังได้รับฟังก์ชั่นดังกล่าวว่าเป็นหลักฐานที่ถือสำหรับทุกA บ่อยครั้งที่การพิสูจน์นั้นไม่มีประโยชน์ในการคำนวณและเราต้องการที่จะกำจัดมันโดยเฉพาะอย่างยิ่งเมื่อมันถูกซ้อนในส่วนลึกของคำสั่งอื่น ให้โอกาสเราในการทำเช่นนั้นϕSetgg(x)ϕ(x,f(x))x∈AProp
เพิ่ม 2015-07-29:มีคำถามว่าเราสามารถหลีกเลี่ยงทั้งหมดหรือไม่โดยการปรับ "รหัสที่ไร้ประโยชน์ออก" ให้เหมาะสมโดยอัตโนมัติ ในระดับที่เราสามารถทำได้เช่นโค้ดทั้งหมดที่สกัดจากส่วนเชิงลบของตรรกะ (สิ่งที่สร้างขึ้นจากประเภทที่ว่างเปล่า, ประเภทของหน่วย, ผลิตภัณฑ์) จะไร้ประโยชน์เพราะมันเพียงแค่สับรอบหน่วย แต่มีการตัดสินใจการออกแบบของแท้หนึ่งจะทำให้เมื่อใช้{} นี่เป็นตัวอย่าง simpe ที่หมายถึงว่าเราอยู่ในและวิธีการที่เราอยู่ใน{} หากเราดึงข้อมูลจาก
PropPropΣType∃Prop
Πn:NΣb:{0,1}Σk:Nn=2⋅k+b
เราจะได้รับโปรแกรมที่สลายตัวเป็นของต่ำสุดบิตและที่เหลือบิตคือมันคำนวณทุกอย่าง หากเราดึงข้อมูลจาก
แล้วโปรแกรมจะคำนวณต่ำสุดบิตขเครื่องไม่สามารถบอกได้ว่าสิ่งใดถูกต้องผู้ใช้ต้องบอกสิ่งที่เขาต้องการ
nbkΠn:NΣb:{0,1}∃k:Nn=2⋅k+b
b