คณิตศาสตร์ก็มีผี
(overreacted.io)- Lean คือภาษาโปรแกรมที่ออกแบบมาเพื่อให้สามารถทำให้คณิตศาสตร์เป็นทางการได้ และทำให้นักคณิตศาสตร์สามารถจัดการกับทฤษฎีคณิตศาสตร์ในลักษณะเหมือนโค้ดได้
- ผู้ใช้จะเขียน ทฤษฎี, การพิสูจน์, อสมมติฐาน ในรูปแบบโค้ด และกระบวนการพิสูจน์ดำเนินผ่านชุดคำสั่งที่เรียกว่า tactic
- แม้การพิสูจน์ยังไม่สมบูรณ์ ก็สามารถปิดชั่วคราวด้วย
sorryได้ แต่สิ่งนี้เป็น การพิสูจน์เทียม ที่เปรียบได้กับanyใน TypeScript - หากเพิ่มอสมมติฐานที่ไม่ถูกต้อง (เช่น
2 = 3) จะก่อให้เกิดความเสี่ยงเรื่องความขัดแย้งทางตรรกะ และความเป็นไปได้ในการพิสูจน์ ข้อกล่าวทุกข้อ - Lean จะสรุปผลได้เฉพาะจากอสมมติฐานที่เลือกแบบมีเหตุผลและโครงสร้างการพิสูจน์ จึงมีความสำคัญอย่างยิ่งในการรักษาความถูกต้องทางคณิตศาสตร์
Lean: ภาษาสำหรับจัดการคณิตศาสตร์เป็นโค้ด
- Lean คือภาษาโปรแกรมเฉพาะทางที่ออกแบบมาเพื่อเขียนคณิตศาสตร์ที่เป็นทางการ
- นักคณิตศาสตร์ใช้ Lean เพื่อ แสดงคณิตศาสตร์เป็นโค้ด และสามารถจัดโครงสร้าง ทฤษฎีและการพิสูจน์ ของกันและกันเพื่อการทำงานร่วมกันและการแบ่งปันได้
- ชี้ให้เห็นอนาคตที่ความรู้คณิตศาสตร์จำนวนมากของมนุษยชาติจะกลายเป็นรูปแบบโค้ดที่สามารถตรวจสอบและประกอบเข้าด้วยกันแบบกลไกได้
ก้าวแรกของการพิสูจน์ด้วย Lean
- ใน Lean สามารถประกาศทฤษฎีอย่างง่ายได้ด้วยรูปแบบ
theorem two_eq_two : 2 = 2 := by sorry - เมื่อการพิสูจน์ยังไม่เสร็จ สามารถใส่
sorryเพื่อแก้ปัญหาชั่วคราว แต่ไม่ใช่การพิสูจน์จริงsorryทำให้ผ่านการตรวจสอบการพิสูจน์ของ Lean แต่ในเชิงตรรกะไม่สามารถเชื่อถือได้
- เพื่อให้ได้การพิสูจน์ที่สมบูรณ์ ให้ใช้ tactic อย่าง
rfl(reflexivity) เพื่อพิสูจน์สมการที่เป็นเรื่องง่าย อย่างเช่น2 = 2 - เนื้อหาที่พิสูจน์แล้วสามารถนำไปใช้ซ้ำในทฤษฎีอื่นผ่าน
exactฯลฯ จึงเน้นย้ำเรื่อง โมดูลาร์
อสมมติฐานและความขัดแย้ง: เมื่อคณิตศาสตร์ถูกทำให้หลอกหลอน
- หากเพิ่มอสมมติฐานเช่น
axiom math_is_haunted : 2 = 3ลงไป, Lean จะถือว่าเป็นเรื่องจริง - อสมมติฐานนี้สามารถนำไปใช้ในขั้นตอนการพิสูจน์ถัดไป ทำให้สามารถพิสูจน์ผลลัพธ์ที่ไม่สมเหตุสมผลทางคณิตศาสตร์ได้ด้วย (เช่น
2 + 2 = 6) - เป็นไปได้ที่จะใช้ tactic
rewriteเพื่อแทนที่2ด้วย3และปิดขั้นตอนการพิสูจน์สมการด้วยrfl - หากอสมมติฐานที่ไม่เหมาะสมก่อให้เกิดความขัดแย้ง, ใน Lean ก็จะเกิดสถานะที่สามารถพิสูจน์ ทุกข้อเสนอ ได้ (ระบบตรรกะพัง)
- ในความเป็นจริง, ในช่วงต้นศตวรรษที่ 20 ความขัดแย้งในระบบอสมมติฐาน เช่น พาราโดกซ์ของ Russell ได้นำไปสู่การพิจารณาเชิงรากฐานของคณิตศาสตร์
- อย่างไรก็ตาม, Lean แสดงให้เห็นอย่างชัดเจนว่าการเลือกอสมมติฐานเป็นเรื่องสำคัญในการคงไว้ซึ่งความชอบธรรมของระบบตรรกะ
Lean ในฐานะ Proof Checker
- หากคัดเลือกอสมมติฐานอย่างเหมาะสมและ Lean ถูกต้องตามตรรกะ จะให้ข้อสรุปที่น่าเชื่อถือในทางทฤษฎี
- จากสมการง่ายไปจนถึงทฤษฎีที่ซับซ้อนมาก (เช่น Fermat’s Last Theorem) ก็ตรวจสอบได้ตามหลักการเดียวกันทั้งหมด
- ทฤษฎีขนาดใหญ่มีลักษณะเป็นต้นไม้ที่เสร็จสมบูรณ์ผ่านการสะสมการพิสูจน์ทฤษฎีย่อยและทฤษฎีย่อยต่อเนื่องแบบซ้ำๆ
- ตัวอย่างเช่น มีโครงการขนาดใหญ่ที่กำลัง formalize Fermat's Last Theorem ใน Lean และมีแผนจะมีระบบการพิสูจน์อย่างเป็นทางการโดยไม่มีการใช้
sorryชั่วคราวในที่สุด
ความสนุกของการเรียนรู้ Lean
- การพิสูจน์ด้วย Lean คือการผสมผสานที่สร้างสรรค์ระหว่างการเขียนโค้ดและคณิตศาสตร์
- ตั้งแต่การพิสูจน์ข้อเสนอง่าย ๆ ในขั้นแรก ค่อย ๆ สะสมการก่อสร้างคณิตศาสตร์ที่ซับซ้อนและลึกซึ้งอย่างเคร่งครัด ซึ่งเป็นความสนุกสำคัญ
- คู่มือทางการและทรัพยากรชุมชน (เช่น Natural Numbers Game, Mathematics in Lean ฯลฯ) เหมาะสมสำหรับผู้เริ่มต้น
- การใช้ Lean ทำให้คุณ formalize ตรรกะด้วยตัวเอง และทำให้ได้ค้นพบเสน่ห์ของไอเดียแยบยลกับความงดงามของการโต้แย้งอีกครั้ง
- บทความสรุปว่าบางกลุ่มคนแม้ไม่มีเหตุผลชัดเจน ก็ยังรู้สึกว่า Lean ให้ความสนุกที่เป็นพิเศษ
1 ความคิดเห็น
ความเห็นจาก Hacker News
rfl) ดูครอบจักรวาลเกินไป และแม้แต่ในบทสอนก็ยากจะเข้าใจความหมายที่แน่ชัด เช่น C สามารถตามการเปลี่ยนสถานะได้ละเอียดถึงระดับบิต แต่ Lean ให้ความรู้สึกคลุมเครือกว่า และไวยากรณ์ของ tacticrewrite(rw) ก็รู้สึกไม่เป็นธรรมชาติrewriteกลับใช้ไม่ได้ด้วยเหตุผลที่อธิบายยากมาก (น่าจะเป็นปัญหาเรื่องนิยามของโครงสร้างกลาง) ในทางกลับกัน Metamath กับฐานข้อมูล set.mm ให้พิสูจน์ด้วยการอนุมานที่เป็นรูปธรรมล้วน ๆ โดยไม่มี tactic เลย (ใช้แต่กฎอนุมานอย่างax-mp) แต่แบบนี้ก็ต้องจำ utility lemma ที่ใช้ได้จริงจำนวนมาก จึงไม่ง่ายเหมือนกันrflหรือrewriteต้องเรียกใช้เองทุกครั้ง บางที Lean อาจมีอะไรคล้าย prelude ที่ช่วยทำสิ่งนี้ให้อัตโนมัติได้ก็ได้rw [x]ทำให้อ่านยากมาก แม้ใน editor จะดูสถานะของแต่ละบรรทัดได้ แต่ต้องคลิกตลอดจนเสียจังหวะ ถ้าภาษา Python ไม่มีการเยื้องและต้องคลิกดูแค่โครงสร้างบล็อกเพื่อเข้าใจลำดับการทำงาน ก็คงแย่พอกัน มุมมองของฉันอาจเกิดจากข้อจำกัดของคำสั่งช่วงต้นเกมก็ได้ เลยสงสัยว่าในสภาพแวดล้อม Lean แบบเต็ม ๆ การไหลของการพิสูจน์จะอ่านง่ายขึ้นไหมby ...เฉพาะจุดที่ tactic เหมาะกว่า ฉันไม่แน่ใจว่า Lean มีอะไรคล้ายแบบนี้หรือไม่ แต่อย่างน้อยก็น่าจะใช้เป็นคีย์เวิร์ดค้นหาหรือประเด็นไปถามในฟอรัม Lean ได้introก็จะรู้ว่าเป็นการเข้าสู่ quantifier เห็นconstructorก็รู้ว่าเป็นการแยก goal ออกเป็นหลายส่วน สุดท้าย tactics ก็คือแมโคร/DSL ที่สร้าง proof tree (term tree) ขึ้นมา สำหรับฉัน เวลาดู proof code มันให้ความรู้สึกเหมือนกำลังจัดการต้นไม้ แยกชิ้นส่วน เติมลำดับ ฯลฯ ถึงอย่างนั้น ถ้าต้องการรู้ assertion กลางทางอย่างแม่นยำก็ยังต้องคลิกอยู่ดี proof ที่มีไอเดียดีจะอ่านได้ชัดเหมือนการดำเนินตรรกะในงานเขียนวิชาการ ดังนั้นคนที่อยากสื่อเจตนาจึงมักตั้งชื่อให้อ่านง่าย เขียนลำดับให้ชัด แยก lemma ย่อยออกมา และเขียนโดยใส่สมมติฐานก่อนแล้วปิดด้วย proof code สั้น ๆ ส่วนสิ่งที่เครื่องมองว่ายุ่งยากแต่ในสายตานักคณิตศาสตร์ชัดอยู่แล้ว ก็มักถูกเขียนแบบ “golfing” คือย่อให้สั้นที่สุด ซึ่งทำให้โค้ดสั้นลงแต่พึ่งพาส่วนที่มนุษย์เข้าใจโดยสัญชาตญาณมากขึ้น สรุปคือโครงสร้างเวลาจะอ่าน Lean นั้นค่อนข้างแฝงอยู่ แต่ก็มีวิธีทำให้ชัดขึ้นได้ และเมื่อชำนาญ tactic มากขึ้นก็จะเข้าใจโครงสร้างได้ดีขึ้นแม้ไม่ต้องคลิก แค่ไล่ชื่อ lemma ก็พอมองเห็นภาพรวมได้ และลำดับก็ประกอบกลับได้ไม่ยากชุมชน Lean รวมตัวกันมากบน Zulip และคุณสามารถดูเธรดอ้างอิงหลากหลายได้ในช่อง Machine-Learning-for-Theorem-Proving
sorryที่เว้นไว้ในแบบฝึกหัดด้วยตัวเอง (คำตอบของฉันอยู่ที่นี่)proof with "sorry") หรือการเติมสัจพจน์เพิ่มเองแบบอัตโนมัติไหม เช่นตรวจได้หรือไม่ว่า “proof นี้ไม่ได้ใช้sorryไม่ว่าทางตรงหรือทางอ้อม” และ “พึ่งพาเฉพาะพลังการพิสูจน์จากชุดสัจพจน์ที่กำหนดไว้เท่านั้น”#print axioms some_theoremที่กล่าวถึงช่วงท้ายบทความน่าจะตอบคำถามนี้ได้ มันทำให้เห็นว่าการพิสูจน์นั้นพึ่งพาsorryหรือสัจพจน์ที่ยังไม่ได้ตรวจสอบ ไม่ว่าโดยตรงหรือโดยอ้อมหรือไม่print axiomsเพื่อตรวจว่ามีการเพิ่มสัจพจน์หรือไม่ และดูด้วยว่าคอมไพล์ผ่านโดยไม่มี warning หรือ error หรือเปล่า ส่วน utility ชื่อ SafeVerify ก็จับทริกบางอย่างที่ระบบ RL ค้นพบได้ด้วย