गणित अनुसंधान के लिए स्थानीय Lean 4 प्रमाण स्वचालन वातावरण सेट करने के लिए मार्गदर्शिका
जब आप एक बड़े पैमाने पर गणित समस्या समाधान प्रणाली को अपने अनुसंधान प्रयोगशाला के डेस्कटॉप पर तैनात करते हैं, तो विशाल वास्तुकला का अवलोकन कोई मदद नहीं करता है। यहाँ स्थानीय वातावरण में Lean 4 पाइपलाइन को सीधे सेट करने और गणित अन्वेषण कार्यों को पूरी तरह से स्वचालित करने के लिए लंबी अवधि तक चलने वाले बहु-अभिकर्ताओं (multi-agents) को एकीकृत करने के व्यावहारिक चरणों का सारांश दिया गया है।
स्थानीय Lean प्रमाण सत्यापन वातावरण का निर्माण
विकास वातावरण में Lean 4 को मैन्युअल रूप से स्थापित करना और VS Code भाषा सर्वर प्रोटोकॉल पर निर्भर रहना बड़े पैमाने पर AI सत्यापन के दौरान गंभीर बाधाएँ पैदा करता है। यदि Mathlib4 पूर्व-संकलित बाइनरी कैश नहीं की जाती हैं, तो स्थानीय CPU सैकड़ों हजारों प्रमेयों को सीधे पुनः संकलित करता है, जिससे केवल पर्यावरण निर्माण में 180 मिनट से अधिक का समय लगता है। प्रति सेकंड दर्जनों से अधिक कोड सत्यापन अनुरोधों को संसाधित करने के लिए, आपको FastAPI-आधारित Kimina Lean Server पाइपलाइन पर स्विच करना होगा।
लंबी अवधि तक चलने वाले गणित समस्या सत्यापन कार्यों के लिए सेटअप समय को 180 मिनट से घटाकर 20 मिनट से कम करने की विशिष्ट निर्माण प्रक्रिया इस प्रकार है:
- प्रोजेक्ट रूट निर्देशिका में lean-toolchain फ़ाइल में टूलचेन को पिन करें। फ़ाइल के अंदर leanprover/lean4:v4.15.0 टेक्स्ट दर्ज करें।
- lakefile.lean कॉन्फ़िगरेशन फ़ाइल खोलें और Mathlib4 पैकेज तथा stdio-आधारित JSON इनपुट/आउटपुट को संभालने वाली repl रिपॉजिटरी निर्दिष्ट करें।
`lean
import Lake
open Lake DSL
package «proof_automation» {
}
require mathlib from git
"https://github.com/leanprover-community/mathlib4.git" @ "v4.15.0"
require repl from git
"https://github.com/leanprover-community/repl.git" @ "main"
@[default_target]
lean_lib «ProofAutomation» {
}
`
- टर्मिनल खोलें और पूर्व-संकलित बाइनरी कलाकृतियों (artifacts) को डाउनलोड और निर्माण करने के लिए क्रमिक रूप से निम्नलिखित कमांड निष्पादित करें।
`bash
lake update
lake exe cache get
lake build
`
इस कार्य को पूरा करने से पूर्व-संकलित कैश तुरंत प्राप्त हो जाता है, जिससे 20 मिनट के भीतर एक पूर्ण स्थानीय REPL निष्पादन वातावरण तैयार हो जाता है, और प्रति सेकंड अधिकतम 50 प्रमाण अनुच्छेदों को एक साथ सत्यापित किया जा सकता है।
रूट और उप-अभिकर्ता भूमिका विभाजन डिज़ाइन
यदि आप एकल बड़े भाषा मॉडल प्रॉम्प्ट कॉल के साथ जटिल प्रमेय प्रमाण का प्रयास करते हैं, तो संदर्भ लंबा होने के साथ-साथ आप उप-लक्ष्यों को खो देते हैं या अनंत लूप में प्रवेश कर जाते हैं। आपको एक पदानुक्रमित निर्देशित चक्रीय ग्राफ (DAG) वास्तुकला लागू करनी चाहिए जहाँ भूमिकाओं को समस्या विभाजन के प्रभारी एक रूट एजेंट और अलग-थलग उप-रणनीतियों को निष्पादित करने वाले उप-एजेंटों में विभाजित किया जाता है।
एजेंट संचार विनिर्देश के रूप में JSON प्रारूप को अपनाकर और प्रॉम्प्ट को पास करने के लिए दायरे को अलग करके, आप API टोकन की खपत को 40 प्रतिशत से अधिक कम कर सकते हैं। उप-एजेंट को कॉल करते समय उपयोग किया जाने वाला JSON स्कीमा इस प्रकार है:
`json
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SubAgentProofTask",
"type": "object",
"properties": {
"task_id": { "type": "string" },
"target_hypothesis": { "type": "string" },
"current_goal_state": { "type": "string" },
"previous_failure_logs": {
"type": "array",
"items": {
"type": "object",
"properties": {
"attempted_tactic": { "type": "string" },
"error_message": { "type": "string" }
}
}
},
"sub_goal_target": { "type": "string" }
},
"required": ["task_id", "target_hypothesis", "current_goal_state", "sub_goal_target"]
}
`
एजेंट मतिभ्रम (hallucination) के कारण होने वाले अनंत लूप को रोकने और एक स्थिर पदानुक्रमित संरचना को संचालित करने के लिए चरण-दर-चरण नियंत्रण अनुक्रम इस प्रकार है:
- उप-एजेंट में इनपुट प्रॉम्प्ट को बाइंड करते समय, संपूर्ण वार्तालाप इतिहास को हटा दें और प्रॉम्प्ट को केवल तीन मुख्य तत्वों यानी परिकल्पना (Hypothesis), लक्ष्य स्थिति (Goal State), और पिछले विफलता लॉग को भेजने के लिए कॉन्फ़िगर करें।
- Lean REPL से लौटाए गए proofState स्ट्रिंग को SHA-256 एल्गोरिथ्म का उपयोग करके हैश करें और इसे मेमोरी में सहेजें। यदि समान स्थिति हैش 3 बार से अधिक दोहराया जाता है, तो उस खोज शाखा को छाँट (prune) दिया जाता है।
- एकल Tactic ऑपरेशन के लिए 5 सेकंड और उप-एजेंट की संपूर्ण खोज के लिए 120 सेकंड का टाइमआउट सेट करें, और अधिक होने पर REPL प्रक्रिया को तुरंत पुनर्गठित करने के लिए SIGKILL सिग्नल भेजें।
API टोकन लागत नियंत्रण के लिए संदर्भ प्रबंधन रणनीति
घंटों तक चलने वाले प्रमाण खोज कार्यों में, यदि प्रत्येक अनुरोध के साथ संपूर्ण वार्तालाप इतिहास बैकएंड API को भेजा जाता है, तो टोकन उपयोग तेजी से बढ़ता है। LeanExplore और Vector DB-आधारित कैशिंग परत का निर्माण करके, और मेमोरी ग्राफ में सहायक प्रमेय रूप में पहले से सत्यापित मध्यवर्ती Tactic परिणामों को संक्षेप में प्रतिबिंबित करके, इनपुट टोकन ओवरहेड को नियंत्रित किया जाना चाहिए.
बैकएंड सर्वर पर REPL सत्र के पर्यावरण पहचानकर्ता को पंजीकृत करें ताकि प्रॉम्प्ट के शीर्ष पर दोहराए जाने वाले import Mathlib वाक्यों को हटाया जा सके। अकेले इससे इनपुट टोकन को 50 प्रतिशत से 70 प्रतिशत तक तुरंत कम किया जा सकता है। बजट सीमा पार होने के कारण API लागत में वृद्धि को रोकने के लिए नियंत्रण पाइपलाइन कार्यान्वयन प्रक्रिया इस प्रकार है:
- स्थानीय पर्यावरण निर्देशिका में .leanflow/cache/ और .leanflow/workflow-state/ पथ बनाएँ।
- API कॉल करते समय उपभोग किए जाने वाले टोकन और लागत को वास्तविक समय में संचयी रूप से ट्रैक करने के लिए Python-आधारित CostMonitor मॉड्यूल लिखें।
- जब सीमा राशि तक पहुँच जाती है, तो चेकपॉइंट स्नैपशॉट फ़ाइल को सहेजने और प्रक्रिया को सुरक्षित रूप से रोकने के लिए एक स्क्रिप्ट चलाई जाती है।
`python
import sys
import json
import logging
class CostMonitor:
def init(self, max_budget_usd: float, token_cost_per_1k: float):
self.max_budget = max_budget_usd
self.cost_per_1k = token_cost_per_1k
self.total_tokens_used = 0
self.current_cost = 0.0
def track_usage(self, prompt_tokens: int, completion_tokens: int):
tokens_in_call = prompt_tokens + completion_tokens
self.total_tokens_used += tokens_in_call
self.current_cost += (tokens_in_call / 1000.0) * self.cost_per_1k
logging.info(f"[TELEMETRY] Used Tokens: {tokens_in_call} | Total Cost: ${self.current_cost:.4f}")
if self.current_cost >= self.max_budget:
self.trigger_safe_pause()
def trigger_safe_pause(self):
logging.warning("[WARNING] Target budget threshold reached. Pausing workflow...")
with open(".leanflow/workflow-state/checkpoint.json", "w") as f:
json.dump({"status": "PAUSED_BUDGET_EXCEEDED", "tokens": self.total_tokens_used}, f)
sys.exit(0)
`
प्रमाण कोड त्रुटि स्वत:-सुधार लूप का कार्यान्वयन
AI एजेंट द्वारा कोड जनरेट करने के बाद मैन्युअल रूप से त्रुटियों की समीक्षा करना संपूर्ण अनुसंधान के लिए एक गंभीर बाधा है। Lean REPL कंपाइलर द्वारा आउटपुट सिंटैक्स त्रुटियों, प्रकार बेमेल (type mismatches), और अनसुलझे लक्ष्यों जैसे JSON पार्सिंग डेटा को सीधे एजेंट के फीडबैक इनपुट से जोड़ा जाना चाहिए।
मैन्युअल समीक्षा को प्रतिस्थापित करने और अनुसंधान गति को 2 गुना से अधिक बढ़ाने वाले स्वतः-सुधार नियंत्रण लूप के काम करने का तरीका इस प्रकार है:
- Lean REPL से लौटाए गए JSON प्रतिक्रिया को प्राप्त करें और नीचे दिए गए Python पार्सर के माध्यम से संरचित डेटा के रूप में त्रुटि स्थान, प्रकार त्रुटि संदेश और शेष लक्ष्यों को निकालें।
`python
def parse_lean_repl_output(repl_response_json: str):
data = json.loads(repl_response_json)
parsed_diagnostics = {
"has_error": False,
"errors": [],
"open_sorries": []
}
if "messages" in data:
for msg in data["messages"]:
if msg.get("severity") == "error":
parsed_diagnostics["has_error"] = True
parsed_diagnostics["errors The"].append({
"line": msg["pos"]["line"],
"column": msg["pos"]["column"],
"data": msg["data"]
})
if "sorries" in data:
for sorry in data["sorries"]:
parsed_diagnostics["open_sorries"].append({
"goal": sorry["goal"],
"proof_state": sorry["proofState"],
"line": sorry["pos"]["line"]
})
return parsed_diagnostics
`
- पहले 1 से 4 प्रयासों के दौरान, पार्स किए गए त्रुटि संदेश डेटा को उप-एजेंट प्रॉम्प्ट में बाइंड करें ताकि उस स्थान पर Tactic पैरामीटर को स्थानीय और सटीक रूप से संशोधित किया जा सके।
- यदि उसी बिंदु पर लगातार 5 बार सत्यापन विफल हो जाता है, तो उस प्रमाण रणनीति को बैक्ट्रैक करके त्याग दिया जाता है और इसे स्केच री-डिवीज़न मोड में स्वचालित रूप से स्विच कर दिया जाता है जो सहायक प्रमेयों को छोटे टुकड़ों में काट देता है।
पूरी तरह से सत्यापित Clean कोड doc-gen4 और paperproof रूपांतरण टूल से गुजरता है और स्वचालित रूप से अनुसंधान पत्रों में तुरंत सम्मिलित करने योग्य तर्क ग्राफ विजुअलाइजेशन और LaTeX संदर्भ के रूप में जनरेट होता है।
`bash
lake build LeanAutomation:docs
lean-graph extract --input Main.lean --output proof_dependency.json
`