ขั้นแรกเราจะทำการพิสูจน์ lemma ต่อไปนี้
lemma: รัน บนกราฟ ใดๆ ถ้า เป็น DAG แล้ว จะไม่มี edge ใดเป็น back edge เลย
พิสูจน์: ข้อความในโจทย์สมมูลกับข้อความที่ว่า "ถ้ามี back edge อย่างน้อยหนึ่ง edge แล้ว จะไม่เป็น DAG"
ดังนั้นสมมติให้มี back edge อยู่หนึ่ง edge สมมติว่าให้ edge นั้นเป็น เราจะได้ว่า เป็นลูกหลานของ
ใน DFS Tree ฉะนั้นจะมี path
ฉะนั้นเราจะได้ว่า
เป็น cycle ฉะนั้น ไม่ใช่ DAG
พิสูจน์ (โจทย์): ให้ เป็น DAG และให้ เป็น edge ใดๆ ใน
เราได้ว่ามีความเป็นไปได้อยู่สองกรณี
- ถูกเรียกก่อน : ในกรณีนี้ เนื่องจากเรารู้ว่ามี path จาก ไปยัง แน่นอน (เราสามารถใช้ edge เป็น path นั้นได้) ทำให้เราได้ว่า จะต้องถูกเรียกและทำงานเสร็จก่อนที่ จะทำงานเสร็จ ฉะนั้น
- ถูกเรียกหลังจากที่ ถูกเรียก ในกรณีนี้เราจะได้ว่า นอกจากนี้เราจะได้ว่า จะต้องมีค่าน้อยกว่า ด้วย มิเช่นนั้นเราจะได้ว่า ซึ่งหมายความว่า เป็น back edge (ใช้ความรู้จากข้อ 4.3 และ 4.4) ใน DAG ทำให้เกิดข้อขัดแย้งขึ้น