- ท่ามกลางแนวโน้มที่ต้องการนำการตรวจพิสูจน์เชิงรูปแบบมาใช้ให้ใกล้กับงานพัฒนาจริงมากขึ้น Mistral AI ได้เปิดตัว Leanstral 1.5 โมเดลภายใต้ Apache-2.0 สำหรับ Lean 4
- โมเดลนี้มีพารามิเตอร์รวม 119B โดยเปิดใช้งานเพียง 6B และผ่านการฝึกช่วงกลาง, supervised fine-tuning และ reinforcement learning แบบ CISPO เพื่อเรียนรู้ทั้งการเขียนบทพิสูจน์และงานกับโค้ดรีโพซิทอรี
- ทำสถิติ miniF2F 100%, PutnamBench 587/672, FATE-H 87%, FATE-X 34% แสดงให้เห็นประสิทธิภาพที่แข็งแกร่งทั้งในเบนช์มาร์กการพิสูจน์ทางคณิตศาสตร์และการประเมินวิศวกรรมการพิสูจน์ในโลกจริง
- ในการตรวจสอบโค้ดจริง โมเดลพิสูจน์เวลาเชิงซับซ้อน O(log n) ของ AVL tree ได้ และผ่าน Rust-to-Lean pipeline สามารถพบบั๊กจริง 11 รายการจาก 57 รีโพซิทอรี
- มีการเผยแพร่น้ำหนักโมเดลและ API ฟรี
leanstral-1-5ทำให้นำไปใช้กับ วิศวกรรมการพิสูจน์เชิงปฏิบัติ เช่น theorem proving, proof debugging และการมีส่วนร่วมกับรีโพซิทอรีได้ทันที
การเปิดตัว Leanstral 1.5 และคุณลักษณะของโมเดล
- Leanstral 1.5 เป็นโมเดลที่สร้างขึ้นเพื่อทำงานด้านวิศวกรรมการพิสูจน์บน Lean 4
- ใช้ไลเซนส์ Apache-2.0 และมีขนาดรวม 119B พารามิเตอร์ โดยมี 6B active parameters
- ยกระดับความสามารถด้าน formal verification ให้ใช้งานได้ไม่เพียงกับเบนช์มาร์กคณิตศาสตร์ แต่ยังรวมถึงการตรวจสอบคุณสมบัติของโค้ดจริง
- โมเดลทำ miniF2F ได้เต็ม, แก้ PutnamBench ได้ 587 ข้อจาก 672 ข้อ และทำ FATE-H 87%, FATE-X 34%
การฝึก 3 ขั้นที่เรียนรู้จากฟีดแบ็กของการพิสูจน์
- การฝึกประกอบด้วย 3 ขั้น ได้แก่ การฝึกช่วงกลาง, supervised fine-tuning และ reinforcement learning แบบ CISPO
- ในการเสริมกำลังใช้สภาพแวดล้อม 2 แบบ
- สภาพแวดล้อมแบบหลายเทิร์น: โมเดลรับข้อความทฤษฎีบทแล้วทำการพิสูจน์หรือหักล้าง จากนั้นปรับแก้บทพิสูจน์ซ้ำโดยอิงจากฟีดแบ็กของ Lean compiler
- หากบทพิสูจน์คอมไพล์ผ่านจะถือว่าสำเร็จ หากไม่สำเร็จลูปจะทำต่อไปจนกว่าจะแก้โจทย์ได้หรือใช้งบประมาณหมด
- สภาพแวดล้อม code agent: แก้ไขไฟล์ใน raw filesystem เหมือนนักพัฒนา รันคำสั่ง bash และตรวจดูเป้าหมาย, ข้อผิดพลาด และข้อมูล type แบบเรียลไทม์ผ่าน Lean language server
- สภาพแวดล้อม code agent รองรับงานยาว เช่น การเติมบทพิสูจน์บางส่วนในรีโพซิทอรี การเขียน lemma ช่วย และการทำงานต่อเนื่องแม้ผ่านการบีบอัดบริบทหลายครั้ง
- ความถูกต้องสุดท้ายของคำตอบจะตรวจเทียบกับรายการทฤษฎีบทเป้าหมายใน SafeVerify fork ของ Mistral
เบนช์มาร์กด้านคณิตศาสตร์และวิศวกรรมการพิสูจน์
- การประเมินใช้ miniF2F, PutnamBench, FATE-H/FATE-X และ FLTEval
- miniF2F เป็นเบนช์มาร์กคณิตศาสตร์เชิงรูปแบบที่ครอบคลุมตั้งแต่โจทย์พื้นฐานไปจนถึงระดับ IMO
- PutnamBench ประกอบด้วยโจทย์ 672 ข้อจากการแข่งขัน Putnam Mathematical Competition
- FATE-H และ FATE-X เป็นเบนช์มาร์กพีชคณิตนามธรรมระดับบัณฑิตศึกษาและปริญญาเอกตามลำดับ
- FLTEval ใช้ pull request จริงจากรีโพซิทอรี Fermat’s Last Theorem เพื่อวัดความยากของงานวิศวกรรมการพิสูจน์
- บน miniF2F โมเดลทำได้ 100% ทั้งใน validation set และ test set
- สำหรับ PutnamBench และ FATE-H/X มีการเปรียบเทียบกับ Goedel-Architect, Seed-Prover 1.5 high และ AxProverBase โดยไม่มี natural language proof guide
- ประสิทธิภาพบน FATE-H/X:
- FATE-H ทำได้ 87% และ FATE-X ทำได้ 34% ซึ่งเป็นสถิติสูงสุดใหม่
- บน PutnamBench โมเดลแก้โจทย์ได้มากกว่า Seed-Prover 1.5 high อยู่ 7 ข้อ โดยมีต้นทุนราว 4 ดอลลาร์ ต่อข้อ
- การตั้งค่า high ของ Seed-Prover ใช้งบประมาณ 10 H20-days ต่อข้อ และคาดว่ามีต้นทุนเกิน 300 ดอลลาร์
- ตัวพิสูจน์บางตัวที่อยู่อันดับสูงกว่าทำงานภายใต้เงื่อนไขอื่น เช่น ได้รับ natural language proof guide หรือมีต้นทุน 54–68 ดอลลาร์ต่อข้อแบบ Aleph Prover
การขยายตัวภายใต้งบประมาณการให้เหตุผลระยะยาวและ FLTEval
- Leanstral 1.5 บน PutnamBench มี Pass@8 ที่เพิ่มขึ้นอย่างราบรื่นและเป็นทิศทางเดียวเมื่อเพิ่มงบประมาณโทเคน
- ในการทดลองที่เพิ่มงบประมาณโทเคนต่อความพยายามจาก 25k เป็น 4M จำนวนโจทย์ที่แก้ได้เพิ่มขึ้นดังนี้
- 50k โทเคน: 44 ข้อ
- 200k โทเคน: 244 ข้อ
- 1M โทเคน: 493 ข้อ
- 4M โทเคน: 587 ข้อ
- ความสามารถในการให้เหตุผล แก้ไขไฟล์ และปรับแก้อย่างต่อเนื่องข้ามหลายล้านโทเคนโดยไม่หยุดกลางทาง เป็นปัจจัยที่ช่วยยกระดับประสิทธิภาพ
- FLTEval ก็ถูกเปิดซอร์สเต็มรูปแบบเช่นกัน
- บน FLTEval, Leanstral 1.5 ยกระดับ pass@1 จาก 21.9 เป็น 28.9 และ pass@8 จาก 31.9 เป็น 43.2
- ค่า pass@8 ที่ 43.2 สูงกว่า 39.6 ของ Opus 4.6 ขณะที่ต้นทุนอยู่เพียงประมาณหนึ่งในเจ็ด
- โมเดลนี้ยังทำได้ดีกว่าโมเดลโอเพนซอร์สบางตัวที่มีขนาดใหญ่กว่า 3–10 เท่า
กรณีศึกษาการตรวจสอบโค้ดจริง
-
การพิสูจน์เวลาเชิงซับซ้อนของ AVL tree
- AVL tree เป็น self-balancing binary search tree ที่รักษาความสูง O(log n) ผ่านการ rebalance ระหว่างการแทรกและการลบ
- Leanstral 1.5 ตรวจพิสูจน์ได้ว่าการแทรกและการลบใน implementation จริงมีความซับซ้อน O(log n)
- งานนี้ต้องใช้ structural induction ที่สะท้อนโครงสร้างรีเคอร์ซีฟของต้นไม้, การติดตามเวลาด้วย monad และการวิเคราะห์กรณีทั้งหมดของเส้นทางการ rebalance
- บทพิสูจน์ดำเนินไปผ่านโทเคนมากกว่า 2.7 ล้านรายการและ การบีบอัดบริบท 22 ครั้ง
- Leanstral คลี่แต่ละชั้นของ TimeM monad อย่างเป็นระบบเพื่อเผยให้เห็นการคำนวณที่ผสมอยู่กับ control flow
- สำหรับการแทรก โมเดลตั้งขอบเขตไว้ที่ 48 สเต็ปต่อหน่วยความสูง พร้อมเทอมคงที่ที่ใกล้เคียง และเชื่อมความสูงของต้นไม้เข้ากับขนาดต้นไม้ในความสัมพันธ์แบบลอการิทึม
-
การหาบั๊กในโค้ด Rust
- การทดลองตรวจจับบั๊กประกอบด้วย pipeline ที่ Aeneas แปลงโค้ด Rust เป็น Lean แล้วให้ Leanstral อนุมานเจตนาของผู้ใช้จากโค้ดเพื่อสร้างคุณสมบัติด้านความถูกต้อง
- Leanstral พยายามพิสูจน์แต่ละคุณสมบัติ 4 ครั้ง และหากล้มเหลวทั้งหมดจะพยายามพิสูจน์ปฏิเสธของมันอีก 4 ครั้ง
- จาก 57 รีโพซิทอรี พบคุณสมบัติที่ละเมิด 47 รายการ และในนั้น 11 รายการเป็นบั๊กจริง
- ในบรรดาบั๊กจริง มี 5 รายการที่ไม่เคยถูกรายงานบน GitHub มาก่อน
- พบกรณีหนึ่งในฟังก์ชัน sign ของ zigzag decoding ในไลบรารี datrs/varinteger
- เมื่ออินพุตเป็น
Std.U64.MAXนิพจน์(value + 1)จะเกิด overflow - ในโหมดดีบักจะเกิดแครช และในโหมดรีลีสจะเกิดความเสียหายของข้อมูลแบบเงียบ
- edge case นี้เป็นกรณีที่การทดสอบทั่วไปและการทำ fuzzing มักพลาดได้ง่าย
การเผยแพร่และวิธีใช้งาน
- น้ำหนักโมเดลเผยแพร่บน Hugging Face
- API endpoint ฟรีมีให้ใน model card ภายใต้ชื่อ
leanstral-1-5 - สภาพแวดล้อมที่แนะนำสำหรับการใช้งานคือ Mistral Vibe
- ขั้นตอนเริ่มต้นคือ ตั้งค่า Mistral Vibe, ติดตั้ง Leanstral 1.5, รัน agent, ติดตั้ง Lean LSP MCP เพิ่มเติมถ้าต้องการ แล้วเริ่มงานพิสูจน์
- แนะนำให้ติดตั้ง Lean LSP MCP โดยเพิ่มลงใน
~/.vibe/config.toml - หากยังไม่มี MCP server เดิม อาจต้องลบบรรทัด
mcp_servers = [] - Leanstral สามารถใช้กับงานแก้ theorem, proof debugging และการมีส่วนร่วมกับรีโพซิทอรี
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
คำวิจารณ์ที่ว่า Mistral แข่งขันกับโมเดลขนาดใหญ่ได้ยากนั้นสมเหตุสมผล แต่ในความเป็นจริง ผมมองว่าพวกเขากำลังโฟกัสกับการ ให้ความสามารถเฉพาะบางอย่างในโมเดลขนาดเล็กด้วยคุณภาพสูง
ผมใช้ Mistral กับงานอย่าง OCR หรือการวิเคราะห์ไฟล์ และถ้าเติมเงินไว้ในบัญชี 100 ดอลลาร์ ก็ใช้งานได้เป็นปีโดยไม่ต้องกังวลเรื่องปริมาณคำขอ
ต้นทุนต่ำมาก จึงยังมีคุณค่ามากพอ แม้จะแข่งขันกับ Opus 4.8 ไม่ได้ก็ตาม
คุณภาพพอใช้ในราคาถูก ดูเหมือนเป็นตลาดเฉพาะทางมากกว่า เมื่อเทียบกับการยอมจ่ายแพงกว่า 10 เท่าเพื่อใช้คุณภาพสูงสุดเพื่อลดความผิดพลาดในภายหลัง
OCR แทบจะกลายเป็นสินค้าโภคภัณฑ์ไปแล้ว และก็มีให้เป็นพื้นฐานทั้งในโมเดลโอเพนซอร์สหรือบริการอย่าง AWS
อีกทั้งป้ายราคา 100 ดอลลาร์ต่อปีทำให้สร้างความภักดีได้ยาก และไม่มีต้นทุนในการย้ายแพลตฟอร์ม ถ้ามีราคาที่ต่ำกว่านี้ ลูกค้าก็อาจย้ายออกทันที
ถ้าเป็นเครื่องมือราคาถูกที่ลอกเลียนได้ง่ายและไม่มีการล็อกอินลูกค้า มันก็ใกล้เคียงกับฟีเจอร์มากกว่าธุรกิจ
จากมุมของผู้ซื้อก็ดีอยู่ แต่ถ้าต้องการให้บริษัทยุโรปแข่งขันกับคู่แข่งทั่วโลกในระยะยาวด้วยขีดความสามารถของผลิตภัณฑ์ นี่ดูเป็นกลยุทธ์ที่แย่
ตัวงานเองดี แต่ ตัวอย่างการพบบั๊ก รู้สึกแปลก ๆ
เขาบอกว่าในฟังก์ชัน sign ของการถอดรหัส zigzag เมื่ออินพุตเป็น
Std.U64.MAXแล้ว(value + 1)จะ overflow ทำให้โหมด debug แครช ส่วนโหมด release เกิดความเสียหายแบบเงียบ ๆ แต่ผมไม่แน่ใจว่าจะเรียกสิ่งนี้ว่าเงื่อนไขขอบเขตที่การทดสอบ “มักพลาด” ได้ไหมถ้าเป็นเทสต์แย่ ๆ ก็อาจพลาด แต่คนที่รอบคอบหรือระบบเขียนโค้ดที่ใช้ machine learning มักทำเรื่อง “ควรทดสอบค่าขีดสุด” ได้ค่อนข้างดี โดยเฉพาะถ้าเป็นโค้ดที่ parse อินพุตจากผู้ใช้
เลยสงสัยว่าพวกเขาเจอบั๊กที่น่าสนใจกว่านี้ด้วยหรือเปล่า แต่หยิบตัวอย่างนี้มาเพราะอธิบายอย่างรวดเร็วได้ยาก
ถ้าเป็นไลบรารี encoding แบบนี้ การคาดหวังพื้นฐานของโค้ดที่ดีคือควรทำ fuzzing และแทบจะแน่นอนว่าน่าจะจับได้ภายในไม่กี่วินาที
ผมลองทำเทสต์ round-trip ง่าย ๆ ด้วย
proptestก็เจอความล้มเหลวหลายสิบรายการภายในไม่ถึง 1 วินาที และได้ผลลัพธ์ด้านล่าง:thread 'signed_round_trip' (50528) panicked at tests/test.rs:72:1:Test failed: attempt to multiply with overflow.minimal failing input: value = 4611686018427387904successes: 2local rejects: 0global rejects: 0ข้อดีที่เห็นได้คือเมื่อใช้ Lean ก็ลดความจำเป็นในการต้องเลือกอย่างชาญฉลาดว่าจะทดสอบตัวอย่างใด
เริ่มสงสัยภูมิหลังของผู้เขียน
ระบบ property-based testing ทุกตัวที่ถูกคิดค้นมาตั้งแต่ราวปี 1980 ล้วนสำรวจค่าขอบเขต
การทดสอบจริงอาจยากเพราะความหมายเชิง semantics ของ C และ C++ หรือการไม่มี semantics ที่ชัดเจน เพราะคอมไพเลอร์สามารถถือว่า “ทดสอบผ่าน” สำหรับอินพุตทุกอย่างที่นำไปสู่พฤติกรรมที่ไม่ได้กำหนดได้
กลางบทความมีการเปรียบเทียบกับ LLM ระดับแนวหน้าหลายตัว แต่ทั้งหมดเป็นโมเดลเมื่อครึ่งปีก่อน
ฟังดูค่อนข้างตลกในทำนองว่า “โมเดลใหม่ของเราดีกว่า โมเดลจีนเมื่อ 3 รุ่นก่อน”
ไลบรารีนั้นคือ https://github.com/datrs/varinteger
ปัญหาเดียวกันถูกโพสต์ใน repository นี้ไว้แล้วหนึ่งสัปดาห์ก่อนที่ paper จะเผยแพร่ ดังนั้นน่าจะใช่: https://github.com/datrs/varinteger/issues/8
ไม่รู้ว่าคนนี้เป็นพนักงานของ Leanstral หรือว่า Leanstral แค่หยิบ issue นี้มาใช้
ไลบรารีนี้เล็ก เทสต์แย่อย่างน่าประหลาดใจ และแทบไม่ได้ถูกแตะต้องมา 8 ปีแล้ว: https://github.com/datrs/varinteger/blob/master/tests/test.r...
ยอดดาวน์โหลดดูค่อนข้างต่ำ ประมาณวันละ 1,000 ครั้ง: https://crates.io/crates/varinteger
ดังนั้นจึงมองยากว่านี่เป็นความสำเร็จที่ยิ่งใหญ่พอจะยกมาเป็นตัวอย่างเดียวได้ การตรวจจับอัตโนมัติมีประโยชน์จริง แต่ไม่แน่ใจว่านี่ถือเป็นผลงานที่น่าจับตาในสาขาย่อยนี้หรือไม่
ผมไม่เคยใช้ LLM สำหรับเขียน proof แต่ข้อมูลฝึกดูจะมีค่อนข้างน้อย จึงไม่น่าแปลกใจถ้ามันจะหยาบกว่าโมเดลเขียนโค้ดทั่วไป
อนึ่ง https://crates.io/crates/varinteger แสดงเป็น https://github.com/mafintosh/varinteger-rs แต่ URL นี้ redirect ไปยัง https://github.com/datrs/varinteger ดังนั้นดูเหมือนจะเป็นไลบรารีเดียวกันแม้ภายนอกจะดูต่างกัน
ประเด็นหลักไม่ใช่การหาบั๊ก แต่คือการพิสูจน์ว่าไม่มีบั๊กบางชนิดภายใต้สมมติฐานบางอย่าง
แต่เรื่องนี้ขายยาก ฝ่ายการตลาดจึงมักไหลไปทาง “เราพบบั๊กนี้”
จะมีประโยชน์กับคนที่ไม่รู้จัก Lean เลยไหม? อยากตรวจสอบซอฟต์แวร์ที่กำลังทำอยู่ แต่ไม่มีประสบการณ์ด้าน formal verification
สงสัยว่ามีแค่สเปก โค้ด และเวลาเรียนรู้ที่จำกัด จะได้ผลลัพธ์ที่พอใช้ได้หรือไม่
ให้ความรู้สึกใกล้กับการอ่าน type ของ Haskell มากกว่าคณิตศาสตร์ และเหมือนแค่ยืมคำศัพท์จากคณิตศาสตร์มาใช้เยอะ
อาจคุยให้ช่วยเขียน โค้ด Lean สำหรับตรวจสอบแอปพลิเคชันได้ด้วย แต่ก็ยังไม่แน่ใจ
ไม่เช่นนั้นก็ตรวจสอบเอาต์พุตไม่ได้
ในเชิงกลไก อาจพิสูจน์ proposition บางอย่างที่ถูกตรวจแล้วว่าถูกต้องได้ แต่ถ้าไม่รู้ว่า proposition นั้นหมายถึงอะไร หรือครอบคลุมสิ่งที่ต้องการตรวจสอบจริงหรือไม่ ก็ไม่มีความหมาย
น่าทึ่งมากที่โมเดลต่าง ๆ ใช้ Lean4 ได้คล่องและสม่ำเสมอขนาดไหน ไม่ใช่แค่โมเดลระดับแนวหน้าเท่านั้น แต่โมเดล local ขนาดเล็กก็เช่นกัน รู้สึกว่า LLM เข้าใจ Lean4 ได้ดีโดยธรรมชาติ
ยังเหลือทางอีกไกลกว่าจะเรียกตัวเองว่าเป็นผู้เชี่ยวชาญ Lean4 ได้ แต่ตอนนี้ไม่จำเป็นต้องพึ่งตัวช่วยเพื่อสร้างโปรแกรมที่มีประโยชน์แล้ว
แม้มีความรู้แทบไม่มีเลย การที่สามารถเชื่อถือส่วนที่ยังไม่เข้าใจทั้งหมดได้ช่วยเร่งความเร็วในการเรียนรู้ขึ้นมาก การได้โปรแกรมที่พึ่งพาได้แม้มีความรู้ไม่สมบูรณ์นั้นใช้งานได้จริงและช่วยสร้างแรงจูงใจด้วย
รู้สึกเหมือนขีดจำกัดไม่ได้อยู่ที่ขั้นตอนพิสูจน์ระหว่างทางทั้งหมด แต่อยู่ที่ส่วนของภาษาที่ใช้อธิบาย axioms และผิวหน้าของ proposition ของตัวเอง เมื่อเวลาผ่านไป หากจะทำได้มากขึ้นก็ต้องเข้าใจมากขึ้น แต่ในอีกความหมายหนึ่ง เราสามารถทำงานได้อย่างปลอดภัยในระดับ N+1
Lean4 เป็นภาษาโปรแกรมที่สนุกแม้แยกจากบทบาท theorem prover และยังเร็วอย่างน่าประหลาดใจด้วย
ใช้เชื่อมกับ
io_uringอยู่ และในหลายกรณีเร็วกกว่า C++/libuv หรือ Rust/Tokio มากบางครั้งถ้าเห็นหางยาวมากในค่าอย่าง latency p99.99 ก็ต้องจูน เช่นเปลี่ยนตัวเลขเป็นความกว้างคงที่ แต่ C++ กับ Rust ก็ต้องจูนเหมือนกัน
น่าสนใจที่ผลักดัน Lean 4 เพื่อใช้กับ formal verification
คิดว่าโดเมนนี้เป็นของ Isabelle/HOL กับ TLA+ เสียอีก
อย่างน้อยก็น่าจะคาดหวังโมเดลที่ฝึกให้ใช้ทั้งสามอย่างได้ สำหรับการอนุมานไปข้างหน้าในพีชคณิตเชิงเส้น Isabelle/Isar ก็ดูดีกว่าด้วย ใครอธิบายได้ไหม?
ในสาขานี้ แม้แต่ Agda ก็ถูกใช้มากกว่า
อย่างไรก็ตาม ตอนนี้ Lean กำลังได้รับแรงส่งมากในฐานะทางเลือก โดยเฉพาะความสามารถในฐานะภาษาโปรแกรมเชิงฟังก์ชันแบบทั่วไป
ส่วนตัวมองว่าแนวทางที่อิง Hoare logic หรือ separation logic ซึ่งทำให้จับคู่ requirement กับ specification ได้ง่ายนั้นใช้งานได้จริงกว่า ชอบ Dafny กับ F*
ในประกาศบน Twitter น่าสนุกดีที่นักพัฒนาแอบพูดถึง Le Chaton Fat
ไม่ว่าพวกเขาจะเกี่ยวข้องกับ Le Chaton Fat จริงหรือไม่ ก็ดูเหมือนว่าโมเดล “general-purpose ขนาดใหญ่ใหม่” ตัวจริงกำลังจะมาในไม่ช้า
หลังจากกระแสสื่อแล้วยังเอ่ยถึงโดยตรงแบบนี้ก็เลยน่าคาดหวัง หวังว่าชื่อจะสร้างสรรค์กว่า “Large 4”
สามารถลองใช้ Leanstral 1.5 ได้ใน OpenATP เวอร์ชันล่าสุด
OpenATP เป็นแพ็กเกจ Python และ CLI แบบโอเพนซอร์สสำหรับ agentic automated theorem prover และรองรับโดยค่าเริ่มต้นทั้งการรัน local ใน Docker หรือรันระยะไกลใน Modal sandbox
GitHub: https://github.com/henryrobbins/open-atp
Docs: https://open-atp.henryrobbins.com