यह पोस्ट Lean 4 प्रोग्रामिंग भाषा और प्रमेय प्रदर्शक (theorem prover) का उपयोग करके मौलिक प्रपोज़िशनल लॉजिक (propositional logic) अवधारणाओं और उनके औपचारिक कार्यान्वयन का एक तकनीकी विवरण प्रदान करती है।
चाहे आप एक गणितज्ञ हों जो प्रमाणों को औपचारिक रूप देना चाहते हैं या एक प्रोग्रामर जो टाइप थ्योरी (type theory) में गहराई से उतर रहे हैं, यह मार्गदर्शिका प्रथम सिद्धांतों से तर्कशास्त्र (logic) का पुनर्निर्माण करती है। हम बुनियादी तार्किक स्थिरांकों से शुरुआत करेंगे और पता लगाएंगे कि Lean 4 किस प्रकार करी-हावर्ड आइसोमोर्फिज्म (Curry-Howard Isomorphism)—यह सिद्धांत कि प्रपोज़िशन (कथन) टाइप हैं और प्रमाण प्रोग्राम हैं—का उपयोग करके तार्किक संरचनाओं को सुंदरता से मॉडल करता है।
अपने तार्किक संयोजकों (logical connectives) को परिभाषित करने से पहले, हमें एक आधारभूत वातावरण तैयार करने की आवश्यकता है। Lean 4 में, यह आम तौर पर स्कोप और कम्प्यूटेशनल व्यवहार को नियंत्रित करने के लिए दो विशिष्ट कमांड का उपयोग करके किया जाता है।
namespace Basic
noncomputable section
namespace Basic: यह कमांड हमारी परिभाषाओं को समूहित करता है, जिससे Lean की अंतर्निहित लाइब्रेरी (Prelude) के साथ नामकरण के टकराव को रोका जा सके। यह हमें शैक्षिक उद्देश्यों के लिए True, False, और And जैसी मौलिक संरचनाओं को शून्य से फिर से परिभाषित करने की अनुमति देता है।noncomputable section: Lean 4 एक प्रमेय प्रदर्शक और एक फंक्शनल प्रोग्रामिंग भाषा दोनों है। डिफ़ॉल्ट रूप से, यह प्रत्येक परिभाषा के लिए निष्पादन योग्य बाइटकोड जनरेट करने का प्रयास करता है। किसी अनुभाग को noncomputable के रूप में चिह्नित करना कंपाइलर को इस चरण को छोड़ने के लिए कहता है, जो औपचारिक तर्कशास्त्र में आम है जहाँ हम रनटाइम निष्पादन के बजाय गणितीय गुणों की परवाह करते हैं।इस अनुभाग में, हम मानक गणितीय संकेतन को Lean 4 कोड से मैप करते हुए, तर्कशास्त्र के आधारभूत तत्वों को परिभाषित करेंगे।
सबसे सरल कथन (proposition) वह है जो सार्वभौमिक रूप से तार्किक रूप से मान्य है। प्रोग्रामिंग के संदर्भ में, एक Unit टाइप की तरह व्यवहार करता है—इसकी ठीक एक स्थिति होती है और यह कोई अतिरिक्त डेटा नहीं रखता है।
परिभाषा:
inductive True : Prop where
| intro : True
चूँकि इसे एक एकल कंस्ट्रक्टर (intro) के साथ परिभाषित किया गया है, इसलिए True को “सिद्ध” करने का एकमात्र तरीका यही सटीक कंस्ट्रक्टर प्रदान करना है।
उदाहरण:
-- Proving True unconditionally
example : True := True.intro
-- Any proposition 'a' trivially implies True
example {a : Prop} : a → True := fun _ => True.intro
जहाँ True को प्रमाण के सहज अस्तित्व द्वारा परिभाषित किया जाता है, वहीं False को प्रमाण की पूर्ण अनुपस्थिति द्वारा परिभाषित किया जाता है। यह एक Empty टाइप (या Void टाइप) है।
परिभाषा:
inductive False : Prop
चूँकि False का कोई कंस्ट्रक्टर नहीं है, आप इसे कभी भी शून्य से इंस्टेंशिएट नहीं कर सकते। यह एक तार्किक विरोधाभास का प्रतिनिधित्व करता है।
विस्फोट का सिद्धांत (Ex Falso Quodlibet):
यदि आप कभी भी अपने पास False का प्रमाण पाते हैं, तो तर्क टूट जाता है, और आप कुछ भी सिद्ध कर सकते हैं। Lean रिकर्सर False.elim का उपयोग करके इसे संभालता है।
-- From a falsehood, any proposition 'a' follows (⊥ → a)
def False.elim {a : Prop} (false_proof : False) : a :=
false_proof.rec
Lean 4 में, निषेध (negation) कोई आदिम, अंतर्निहित अवधारणा नहीं है। इसके बजाय, इसे निहितार्थ (implication) और False का उपयोग करके कार्यात्मक रूप से परिभाषित किया गया है। यह सिद्ध करने के लिए कि कथन असत्य है (जिसे द्वारा दर्शाया गया है), आपको एक ऐसा फ़ंक्शन प्रदर्शित करना होगा जहाँ को मान लेने से सीधे विरोधाभास () उत्पन्न होता है।
परिभाषा:
def Not (a : Prop) : Prop := a → False
मुख्य प्रमेय:
-- Proving Negation: If assuming 'a' proves False, then Not 'a' is true.
theorem Not.intro {a : Prop} (h : a → False) : Not a :=
fun ha => h ha
-- Double Negation Introduction (a → ¬¬a)
theorem not_not_intro {a : Prop} (ha : a) : Not (Not a) :=
fun na => na ha -- 'na' has type (a → False), so passing 'ha' yields False.
-- Modus Tollens: If (a → b) and (¬b), then (¬a)
theorem Not.imp {a b : Prop} (nb : Not b) (ab : a → b) : Not a :=
fun ha =>
have hb : b := ab ha
nb hb
चूँकि Lean टाइप थ्योरी पर निर्भर करता है, इसलिए तार्किक निहितार्थ () को शाब्दिक रूप से एक फ़ंक्शन के रूप में माना जाता है। यह सिद्ध करने के लिए कि का अर्थ है, आपको एक ऐसा फ़ंक्शन लिखना होगा जो का कोई भी प्रमाण लेता है और का प्रमाण लौटाता है।
श्रृंखलाबद्ध निहितार्थ (Chained Implication) उदाहरण: यदि आप को में बदल सकते हैं, और को में बदल सकते हैं, तो आप वाले फ़ंक्शन को वाले फ़ंक्शन में बदल सकते हैं।
theorem imp_imp_imp {a b c d : Prop}
(ca : c → a) (bd : b → d) : (a → b) → (c → d) :=
fun ab => fun hc =>
have ha : a := ca hc
have hb : b := ab ha
bd hb
तार्किक संयोजन, जिसके लिए और दोनों का सत्य होना आवश्यक है, को एक structure के रूप में मॉडल किया जाता है। प्रोग्रामिंग के संदर्भ में, यह एक Product टाइप (एक स्ट्रक्ट या टपल) है जो साक्ष्य के दो अलग-अलग टुकड़ों को रखता है।
परिभाषा:
structure And (a b : Prop) : Prop where
intro ::
left : a
right : b
मुख्य प्रमाण पैटर्न:
-- Introduction: Creating an And
example {a b : Prop} (ha : a) (hb : b) : And a b :=
And.intro ha hb
-- Symmetry: a ∧ b → b ∧ a
theorem And.symm {a b : Prop} (h : And a b) : And b a :=
And.intro h.right h.left
तार्किक वियोजन के लिए कथनों में से कम से कम एक का सत्य होना आवश्यक है। And के विपरीत, Or एक इंडक्टिव Sum टाइप (एक टैग किया गया यूनियन) है, क्योंकि प्रमाण बनाने के दो अलग-अलग, वैकल्पिक तरीके हैं।
परिभाषा:
inductive Or (a b : Prop) : Prop where
| inl (h : a) : Or a b
| inr (h : b) : Or a b
को सिद्ध करने के लिए, आप के प्रमाण को inl (inject-left) कंस्ट्रक्टर में, या के प्रमाण को inr (inject-right) कंस्ट्रक्टर में लपेटते हैं।
उदाहरण:
-- Symmetry: a ∨ b → b ∨ a
theorem Or.symm {a b : Prop} (h : Or a b) : Or b a :=
match h with
| Or.inl ha => Or.inr ha
| Or.inr hb => Or.inl hb
द्वि-निहितार्थ (Bi-implication), या “यदि और केवल यदि” (Iff), दर्शाता है कि दो कथन तार्किक रूप से समतुल्य हैं। इसे दोनों दिशाओं में निहितार्थ रखने वाली एक संरचना के रूप में परिभाषित किया गया है।
परिभाषा:
structure Iff (a b : Prop) : Prop where
intro ::
mp : a → b
mpr : b → a
स्वतुल्यता (Reflexivity) उदाहरण:
-- Every proposition is equivalent to itself (a ↔ a)
theorem Iff.refl {a : Prop} : Iff a a :=
Iff.intro (fun ha => ha) (fun ha => ha)
Lean 4 में प्रपोज़िशनल लॉजिक को शून्य से फिर से बनाकर, हम औपचारिक प्रणालियों की यांत्रिक सुंदरता को उजागर करते हैं:
And एक स्ट्रक्ट है, Or एक एनम (enum) है, True एक यूनिट है, और False वॉइड (void) है।इन आधारभूत बिल्डिंग ब्लॉक्स में महारत हासिल करना अधिक जटिल गणितीय प्रमेयों, प्रेडिकेट लॉजिक और जटिल सॉफ़्टवेयर प्रणालियों के सत्यापन से निपटने के लिए आवश्यक महत्वपूर्ण आधार प्रदान करता है।
काउए की जीवनशैली का क्यूरेटेड ऑफ़लाइन संस्करण प्राप्त करें—🍏 स्वास्थ्य, 💰 धन, ❤️ प्रेम और 🧘 अर्थ को बेहतर बनाने के लिए एक व्यावहारिक मार्गदर्शिका।
जब भी मैं बेहतर जीवन जीने पर नए निबंध, पुस्तक सारांश और व्यावहारिक गाइड प्रकाशित करूँ, तो सूचना प्राप्त करें। कोई स्पैम नहीं—कभी भी सदस्यता समाप्त करें।
क्या आपका कोई प्रश्न, दृष्टिकोण या सुझाव है? नीचे अपने विचार साझा करें। टिप्पणियाँ GitHub Discussions (विज्ञापन-मुक्त और स्पैम-मुक्त) द्वारा संचालित हैं—टिप्पणी करने या प्रतिक्रिया देने के लिए नीचे Sign in with GitHub पर क्लिक करें (निःशुल्क GitHub खाता बनाने में एक मिनट से भी कम समय लगता है)।
अंतिम अपडेट: 11 अक्टू॰ 2026.
अस्वीकरण (DISCLAIMER): इस साइट की सामग्री केवल सूचनात्मक और शैक्षिक उद्देश्यों के लिए है और यह चिकित्सा, मनोवैज्ञानिक, वित्तीय, निवेश, कर या कानूनी सलाह का गठन नहीं करती है। यहाँ प्रस्तुत विचार, संकलन और राय पूरी तरह से मेरे अपने हैं और मेरे नियोक्ता का प्रतिनिधित्व नहीं करते हैं। पुस्तकों, व्याख्यानों और लेखों के सारांश स्वतंत्र शैक्षिक टिप्पणियाँ हैं और उनके संबंधित लेखकों की बौद्धिक संपदा बने रहते हैं। संपादन, स्वरूपण और संश्लेषण में सहायता के लिए AI उपकरणों का उपयोग किया जा सकता है; यद्यपि सटीकता सुनिश्चित करने का हर संभव प्रयास किया जाता है, फिर भी त्रुटियाँ हो सकती हैं। गोपनीयता (PRIVACY): यह साइट वैकल्पिक न्यूज़लेटर सदस्यता (follow.it), टिप्पणियों (giscus / GitHub Discussions) और एम्बेडेड मीडिया (YouTube) के लिए तृतीय-पक्ष सेवाओं का उपयोग करती है, जो अपनी संबंधित गोपनीयता नीतियों के अनुसार आगंतुकों के IP पते और कुकीज़ को संसाधित कर सकती हैं।