1 पॉइंट द्वारा GN⁺ 2024-07-11 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • सैद्धांतिक कंप्यूटर साइंस में computability और NP-hard जैसी अवधारणाएँ किसी एकल पूर्णांक या एक ही true/false प्रश्न पर नहीं, बल्कि functions, languages, और infinite sequences पर लागू होती हैं
  • Sipser के उदाहरण में “अगर ईश्वर मौजूद है तो हमेशा 1, नहीं तो हमेशा 0 लौटाने वाला function f” दोनों ही स्थितियों में constant function है, इसलिए computable है
  • P vs NP कोई input लेने वाली समस्या नहीं, बल्कि एक single yes/no question है, इसलिए उसे अपने-आप में NP-hard या uncomputable नहीं कहा जा सकता
  • पूरी Busy Beaver function uncomputable है, लेकिन BB(6) जैसे किसी specific value को उसी तरह नहीं देखा जा सकता, क्योंकि किसी भी integer k के लिए print k program मौजूद होता है
  • बार-बार होने वाली इस उलझन का मूल कारण यह है कि infinite objects के लिए बनी अवधारणाओं को individual problems पर लागू कर दिया जाता है; halting problem की uncomputability और Gödel incompleteness को मिलाने की आदत भी इसी प्रकार की है

Sipser का उदाहरण computability की सीमा क्या सिखाता है

  • Michael Sipser की Introduction to the Theory of Computation में एक homework problem है जो computability की परिभाषा को उजागर करती है
    • f:{0,1}*→{0,1} ऐसा function है जो ईश्वर के मौजूद होने पर हमेशा 1 लौटाता है, और मौजूद न होने पर हमेशा 0 लौटाता है
    • सवाल यह है कि क्या f computable है; इसका उत्तर धार्मिक विश्वास से असंबंधित है
  • f computable है
    • हमेशा 1 लौटाने वाला constant function computable है
    • हमेशा 0 लौटाने वाला constant function भी computable है
    • अगर f इन दोनों में से कोई एक है, तो f भी computable है
  • इसी संरचना वाले समानांतर सवाल भी यही intuition देते हैं
    • “अगर ईश्वर मौजूद है तो n=3, नहीं तो n=5; क्या n prime है?” इस सवाल में n पूरी तरह specified न होते हुए भी, सिर्फ {3,5} का member होने की जानकारी से उसे prime कहा जा सकता है
    • f के साथ भी यही बात है: बस यह तय होना बाकी है कि वह कौन-सा constant function है, लेकिन उसे computable मानने के लिए वह पर्याप्त रूप से specified है

Computability program लिखने की कठिनाई नहीं, उसके अस्तित्व का प्रश्न है

  • Computability एक function या infinite sequence पर लागू होने वाली अवधारणा है
  • किसी individual yes/no question या individual integer पर computability उसी तरह नहीं लगाई जाती
  • मुख्य सवाल यह है कि क्या input को output से map करने वाला कोई computer program मौजूद है
  • उस program को चुनना, ढूँढना, या लिखना कितना कठिन है, यह computability की परिभाषा का हिस्सा नहीं है
    • अगर program लिखने के लिए ईश्वर के अस्तित्व का समाधान करना पड़े, तब भी computability का निर्णय नहीं बदलता

P vs NP को NP-hard क्यों नहीं कहा जा सकता

  • “क्या P versus NP प्रश्न खुद NP-hard है, इसलिए उसका समाधान नहीं हो सकता?” यह सवाल पिछले 25 वर्षों में कई बार दोहराया गया है
  • NP-hard 3SAT, Independent Set, Clique जैसी उन functions या languages पर लागू होता है जो input लेती हैं
    • input एक Boolean formula, graph आदि होता है
    • output उस input का उत्तर होता है
    • किसी समस्या को तब NP-hard कहा जाता है जब उसे polynomial time में हल कर पाने से reductions के माध्यम से NP की सभी languages या functions भी polynomial time में हल की जा सकें
  • P vs NP कोई function या language नहीं, बल्कि एक single yes/no question है
    • यह संभावना खारिज नहीं है कि इसका उत्तर Zermelo-Fraenkel set theory axioms से independent हो
    • लेकिन इस प्रश्न को अपने-आप में uncomputable या NP-hard नहीं कहा जा सकता
  • P vs NP प्रश्न का ठीक-ठीक उत्तर देने वाला तेज़ program औपचारिक रूप से मौजूद है
    • अगर P=NP है, तो “P=NP” output करने वाला program
    • अगर P≠NP है, तो “P≠NP” output करने वाला program

Busy Beaver में बार-बार लौटने वाली वही उलझन

  • Busy Beaver 5 के value तय होने वाली पोस्ट की comments में भी ऐसे ही सवाल बार-बार आते हैं
    • “वह सबसे छोटा n कौन-सा है जिसके लिए BB(n) का value uncomputable हो जाता है?”
    • “क्या BB(6) पहले से ही uncomputable हो सकता है?”
  • Busy Beaver function uncomputable है
  • लेकिन BB(6) जैसे किसी individual integer पर computability की अवधारणा इस तरह लागू नहीं होती
    • BB(6) चाहे जिस integer k के रूप में निकले, print k program मौजूद होगा
    • यह program वही integer output करेगा
  • इसके बजाय यह पूछा जा सकता है कि किस n के लिए BB(n) का value ZF set theory जैसे किसी axiom system में unprovable है
    • Aaronson और Adam Yedidia ने 2016 में इस प्रश्न पर काम किया था
    • मौजूदा record n=745 है, जो Aaronson और Adam के n=8000 से बेहतर value है
  • हर specific integer को “computable” माना जा सकता है; uncomputable चीज़ BB function पूरी की पूरी है

यह “ज़ॉम्बी गलतफ़हमी” बार-बार जीवित क्यों हो जाती है

  • बार-बार होने वाली उलझन का मूल कारण यह है कि infinite sequences और functions के लिए बनाई गई अवधारणाओं को individual integers और open problems पर गलत ढंग से लागू किया जाता है
  • halting problem की uncomputability और Gödel incompleteness को मिलाने वाले उदाहरण भी इसी तरह की उलझन हैं
    • दोनों का आपस में गहरा संबंध है
    • Gödel individual propositions के बारे में बात करने की अनुमति देता है
    • Turing computability किसी specific axiom system के सापेक्ष नहीं, बल्कि एक absolute अवधारणा है
  • यह व्याख्या तब एक reference point की तरह काम करती है जब वही शैक्षिक गलतफ़हमी फिर से सामने आती है
  • अंतिम सवाल इस पर केंद्रित है कि इस “ज़ॉम्बी” जैसी गलतफ़हमी को आख़िर शांत कैसे किया जाए

1 टिप्पणियां

 
GN⁺ 2024-07-11
Hacker News की रायें
  • यह बात कि computability की अवधारणा में अनिवार्य रूप से अनंत शामिल होता है, काफ़ी counter-intuitive हो सकती है
    मसलन अगर पूछा जाए कि किसी arbitrary string s के लिए Kolmogorov complexity K(s) calculate करने वाला कोई algorithm है क्या, तो जवाब, जैसा कि मशहूर है, “नहीं” है। arbitrary length की string input लेकर K(s) calculate करने वाली कोई Turing machine नहीं है, और इसका proof halting problem का इस्तेमाल करके संक्षेप में हो जाता है
    लेकिन अगर पूछा जाए कि n से छोटी लंबाई वाली किसी arbitrary string s के लिए K(s) calculate करने वाला कोई algorithm है क्या, तो जवाब “हाँ” है। किसी भी n के लिए ऐसा algorithm मौजूद है
    तरीका निराशाजनक रूप से बस यह है कि 2^n संभावित सभी strings के लिए K(s) values रखने वाली एक विशाल lookup table वाली Turing machine बना दी जाए। असल में उस table को कैसे हासिल करेंगे, यह अलग बात है; किसी specific implementation में finite description होता है और K(s) भी सभी s के लिए finite है, इसलिए algorithm मौजूद है
    इसलिए finite objects पर finite सवाल computability के नजरिए से शायद बहुत दिलचस्प नहीं होते। क्योंकि हमेशा ऐसा program लिखा जा सकता है जो सारे जवाब output कर दे; सवाल जब infinite set of objects तक फैलता है, तभी यह दिलचस्प होता है कि कोई finite चीज़ infinite सवालों के जवाब दे सकती है या नहीं

    • ऐसी व्याख्या computer science के बड़े हिस्से को बस हास्यास्पद और अर्थहीन खेल जैसा सुना सकती है
      असल में infinity “किसी one-off trick से पर्याप्त बड़े N पर approximate/ultimate/steady-state behavior” की जगह ले रही होती है
      वास्तविक दुनिया में ऐसी tricks भी महत्वपूर्ण होती हैं, और Big-O comparisons में ignore किए जाने वाले constants और low-order terms भी असली performance के लिए अहम होते हैं। “इतनी बड़ी problem कि constant factors मायने न रखें” और “इतनी छोटी problem कि ‘constant’ शब्द के implicit दायरे में आ जाए” के बीच हमेशा तनाव रहता है। जैसे 32-bit integers का integers होने का दिखावा करना
    • बेशक n definition के हिसाब से एक finite number है, इसलिए ऐसा algorithm मौजूद है
      infinity के नजरिए से सभी finite numbers दरअसल बहुत छोटे हैं। ब्रह्मांड के छोर पर रखी कुर्सी पर बैठकर देखें तो 1 mile भी 1 millimeter जैसा ही है
      यह scenario मूलतः “computer पर Hilbert का infinite hotel” जैसा है। मौजूदा programs को एक slot खिसका दें तो नया program जोड़ा जा सकता है, और computation के लिए जरूरी table size वही रहता है
      और generalize करें तो ज़्यादातर लोगों की intuition infinite, aleph और transfinite mathematics कैसे काम करते हैं, इस पर कमजोर होती है। इनकी रोज़मर्रा में relevance भी कम है, और ये mathematics व category theory/set theory की emergent properties से गहराई से जुड़े हैं। infinity किसी भी finite number से बड़ी है, सिर्फ यही नहीं; कुछ infinities दूसरी infinities से भी बड़ी हो सकती हैं—यह बात प्राथमिक-स्कूल वाले “infinity” concept तक सीमित intuition से तुरंत नहीं दिखती
      ज्यादा दिलचस्प सवाल यह है कि क्या कोई ऐसा n < ∞ मौजूद है जो algorithm को compute करने लायक बनाता है; और जाहिर है जवाब नहीं है, और Turing Award हाथ से निकल जाता है
    • यह बात इससे मिलती-जुलती है कि real world के सभी computers भी केवल finite states रखते हैं, इसलिए वे Turing machines के बजाय finite-state machines के ज्यादा करीब हैं
    • किसी specific s के लिए K(s) calculate करने वाला एक simple algorithm भी माना जा सकता है, और इसलिए ऐसे inputs के finite set के लिए भी यह संभव कहा जा सकता है
      विचार यह है कि सभी possible Turing machines को छोटी length से शुरू करके enumerate करें और जो s output करती है उसे ढूंढें। अगर आपने उससे छोटी सभी machines आज़मा लीं और उन्होंने s output नहीं किया, तो आपने s output करने वाली shortest machine ढूंढ ली है, इसलिए उसकी length K(s) होगी। उसी length या उससे लंबी कोई दूसरी machine भी s output कर सकती है, लेकिन K(s) minimum length का मान है, इसलिए वह नहीं बदलेगा
    • P/Poly के पास P से ज़्यादा हो सकने वाली अतिरिक्त ताकत याद आती है। ऐसा लगता है कि circuit complexity hierarchy का कोई general नाम था जिसमें circuit को खुद एक simple Turing machine द्वारा output किया जाना होता है, लेकिन अभी याद नहीं आ रहा
  • मेरे अनुभव में यहां classical computer science की तुलना में constructivist mathematics लोगों की intuition से ज्यादा मेल खाती है
    उदाहरण के लिए P=NP problem का जवाब output करने वाले program के अस्तित्व का कोई constructive proof अभी नहीं है
    अपने paper में भी मैंने computable Julia sets से जुड़े इस मुद्दे को उठाया था। Mark Braverman ने prove किया कि सभी quadratic Julia sets computable हैं, लेकिन वे खुद बताते हैं कि उनका proof uniformly computable नहीं है। इसके बजाय वे desired Julia set के parameters लेकर कई sets को desired resolution पर draw करने की कोशिश करने वाली 5 machines बनाते हैं, और हर Julia set के लिए उनमें से एक सही drawing करती है
    constructivist mathematics में compact set की constructive concept मोटे तौर पर उस अर्थ में computable set से मेल खाती है जो computable Julia sets के लिए चाहिए। लेकिन यह constructively prove नहीं किया जा सकता कि सभी quadratic Julia sets compact हैं; इसके लिए possible parameters के complex plane को कई regions में बांटना पड़ता है और हर region के अंदर संबंधित Julia sets के compact होने का proof देना पड़ता है
    classical mathematics में इन regions का union पूरा complex plane है, लेकिन constructivism में यह result मान्य नहीं होता। इसी तरह classical mathematics में positive real numbers और non-positive real numbers का union पूरी real line है, लेकिन constructivism में यह भी मान्य नहीं होता
    constructivist approach ठीक-ठीक बताती है कि computation को वास्तव में realize करने के लिए कौन-सी extra information चाहिए। यानी यह पता लगाना होगा कि दिया गया parameter complex plane के किस region में आता है, तभी पता चलेगा कि desired image पाने के लिए 5 machines में से कौन-सी run करनी है। यह कहीं ज्यादा संतोषजनक जवाब लगता है

    • Aaronson जिस P=?NP case की बात करते हैं, उसमें भी जवाब “P=NP” जैसा classical answer नहीं, बल्कि असली function NP→P होना चाहिए
      लोग instinctively जानते हैं कि branch statement की किस side में हैं यह जानना जरूरी है; बस classical logic में trained होकर वे उस बात को भूले नहीं हैं
    • “हर Julia set के लिए 5 machines में से एक सही draw करती है” यह बात दिलचस्प है। मैं सोच रहा हूं कि क्या यह मूलतः इस proof के बराबर है कि सही set compute करने की probability कम से कम 1/5 है
      यह भी जानना चाहूंगा कि “5 में से कौन-सी सही है” वाले सवाल के लिए क्या कोई ऐसा proof माना जाता है जो अभी मिला नहीं है, या इसे ZFC के अंदर की तरह undecidable माना जाता है
  • मुझे लगता है कि यही उन चीज़ों में से एक है जो halting problem की undecidability को समझना मुश्किल बनाती है
    हम कहना चाहते हैं कि “कुछ machines इतनी जटिल होती हैं कि कोई machine यह तय नहीं कर सकती कि वे रुकेंगी या नहीं,” लेकिन तुच्छ programs return true और return false में से कोई एक, चाहे कोई भी machine और input दिया जाए, हमेशा सही जवाब देगा
    आप शायद यह कहकर प्रतिवाद करना चाहेंगे कि “वे programs Turing machine के बारे में कुछ नहीं जानते, इसलिए उन्हें बाहर करना चाहिए,” लेकिन decidability का मतलब यह नहीं है। कोई यह भी सोच सकता है कि “इन दोनों में कौन-सा program सही है, यह पता लगाना undecidable है,” लेकिन उसका भी true या false के रूप में तय जवाब होता है। समस्या तभी undecidable हो सकती है जब उसे machine/input combinations के infinite set तक बढ़ाया जाए

    • objects के family में ही पैदा होने वाली दूसरी समस्याएँ भी beginners के लिए इसी तरह समझना मुश्किल हो सकती हैं
      उदाहरण के लिए, कोई भी finite-dimensional vector space अपने dual space और double-dual space के साथ कई तरीकों से isomorphic होता है, लेकिन बाद वाले के लिए ऐसे सभी spaces में consistent “natural” isomorphism चुना जा सकता है, जबकि पहले वाले के लिए ऐसा नहीं किया जा सकता
      इससे “natural रूप से isomorphic क्यों नहीं है? basis की length तो समान है! basis पर depend करता है या नहीं, इससे फर्क क्यों पड़ता है? दूसरे proofs basis चुनते हैं तो वह ठीक क्यों है?” जैसी उलझन पैदा होती है
  • मुझे लगता है कि wording की समस्या यह है कि modal logic की जरूरत पड़ती है
    “अगर ईश्वर मौजूद है, तो f:{0,1}*→{0,1} को constant 1 function मानें; अगर ईश्वर मौजूद नहीं है, तो constant 0 function मानें। क्या f computable है? hint: जवाब धार्मिक विश्वास पर निर्भर नहीं करता”
    सही सवाल यह है कि क्या f computable होगा, यानी क्या कोई Turing machine M मौजूद है जो हर x के लिए f(x)=M(x) satisfy करे
    जवाब हाँ है। क्योंकि किसी भी world में trivial Turing machine M=1_M या M=0_M मौजूद होती है। इसके उलट, मूल अभिव्यक्ति “क्या f computable है” modal तौर पर गलत सवाल है, और Sleeping Beauty या Red Envelope paradox की तरह grammatically inaccurate सवाल के करीब है
    एक और नजरिए से, ईश्वर या किसी असल हो सकने वाले fact पर dependency ऐसी compiler directive या pragma जैसी है जिसे बाद में भरा जाता है, लेकिन use से पहले तय कर दिया जाता है। सही तरीके से पूछें तो यह बस function और computability की rigorous definitions खोलकर देखने का सवाल है, और दोनों Sipser में explicitly defined हैं

    • मेरी प्रतिक्रिया भी ऐसी ही थी, और मैंने Aaronson के लेख की comments में ऐसा ही लिखा था। यह सवाल ऐसी function f के बारे में नहीं है जो ईश्वर के मौजूद होने पर constant 1 function या ईश्वर के मौजूद न होने पर constant 0 function को call कर सके
      बात यह है कि f नाम के label का referent, ईश्वर मौजूद हो तो constant 1 function और ईश्वर मौजूद न हो तो constant 0 function बन जाता है; हम बस ईश्वर के existence को जानने से पहले नहीं जानते कि वह कौन-सा है। दोनों constant functions की computability obvious है, इसलिए असल में यह computability की समस्या नहीं, बल्कि label की समस्या के ज्यादा करीब है
    • Sleeping Beauty या Red Envelope paradox यहाँ ज्यादा related नहीं लगते। वे paradoxes बस यह दिखाते हैं कि pure mathematical probability concepts को वास्तविक दुनिया पर apply करने की प्रक्रिया कभी-कभी सरल नहीं होती
      यह देखते हुए हैरानी की बात नहीं है कि probability theory का reality पर लागू होने पर काम करना अपने-आप में बहुत रहस्यमय है, और कई scientific व philosophical inquiries का विषय रहा है
      आपके सुझाए “would f be” वाले समाधान से भी खास समाधान मिलता नहीं दिखता। “ईश्वर” वाले सवाल का उद्देश्य reader को किसी specific P-NP problem से हटाकर यह समझाना है कि constant functions के लिए computability की concept बेकार है। यह सुझाव मददगार होने के लिए original P-NP question पर भी लागू होना चाहिए, लेकिन well-defined math question में modal approach कैसे आती है, यह अभी दिखता नहीं
    • इस sentence को थोड़ा और लंबा लिखें तो parsing errors कम हो सकते हैं
      “अगर ईश्वर मौजूद है, तो f:{0,1}→{0,1} को constant 1 function के रूप में define करें, और अगर ईश्वर मौजूद नहीं है, तो f:{0,1}→{0,1} को constant 0 function के रूप में define करें”
    • “ईश्वर” की जगह कोई भी predicate डालें, implication strictly speaking classical first-order logic में true है और शायद कई दूसरे logic systems में भी true होगा। pragma analogy सही है
      ऐसा predicate आपके ईश्वर की concept से मेल खाता है या नहीं, यह अलग non-mathematical question है
      यह वैसा ही है जैसे लोग यह सीखकर चकित होते हैं कि classical logic में false proposition हर चीज imply करता है। mathematics में strict formal rules होते हैं, और “implies” या “if” जैसे शब्दों के रोजमर्रा के meanings को लेकर बनी preconceived notions छोड़ना जरूरी है
    • time-dependent version कहीं ज्यादा दिलचस्प है
      जैसे G:t∈ℝ⁺->{0,1} को ऐसे define करें कि time t पर ईश्वर मौजूद हो तो 1, वरना 0
      बेशक, non-inertial reference frame में G को analyze करें तो और दिलचस्प हो जाता है
  • Sipser इस बात का फायदा उठा रहे हैं कि ज्यादातर लोग computation और empirical investigation के बीच का फर्क ठीक से नहीं जानते
    “क्या ईश्वर मौजूद है” शायद ऐसा सवाल हो सकता है जिसका जवाब नहीं दिया जा सकता, लेकिन वह मुद्दा नहीं है। उस जवाब को खोजना शुरू से computation के दायरे में नहीं आता। computation तो बस input को output में map करने वाली procedure है, और इस case में ईश्वर का existence inputs में से एक है
    confusion इसलिए है क्योंकि input value को वास्तव में जाना नहीं जा सकता, लेकिन program फिर भी मौजूद है और trivial program है। इसे किसी दूसरे binary empirical question से भी बदला जा सकता है
    उदाहरण के लिए, मान लें f:{0,1}* -> {0,1} यह है कि “Paris में कम से कम एक portable toilet है तो 1, नहीं तो 0।” यह computable है और true input के साथ वास्तव में run भी किया जा सकता है। ईश्वर से जुड़ी function भी computable है, लेकिन उसे केवल guessed input के साथ run किया जा सकता है। भले ही हम यह guarantee न दे सकें कि output हमारे universe से meaningfully correspond करता है, फिर भी यह computable function है
    और भी सरल रूप से सिर्फ f:{0,1}* -> {0,1} के बारे में सोच सकते हैं। “ईश्वर मौजूद है” और “ईश्वर मौजूद नहीं है” दोनों possible bit strings हैं। अगर सवाल यह है कि क्या कोई program मौजूद हो सकता है जो इनमें से एक को input मिलने पर 0 और दूसरे को input मिलने पर 1 output करे, तो जाहिर है संभव है। input empirically true है या नहीं, इससे फर्क नहीं पड़ता

    • असल में सवाल में आए functions input का बिल्कुल use नहीं करते। बेहतर तो इन्हें empty set से {0, 1} तक जाने वाली function के रूप में define किया जा सकता है
      सवाल का f function नहीं बल्कि label है। ईश्वर मौजूद हो तो f का referent f1 है, जो हमेशा 1 output करता है; ईश्वर मौजूद न हो तो हमेशा 0 output करने वाला f0 है। इसलिए असल में यह computability की समस्या नहीं, बल्कि label की समस्या है
  • गणितज्ञ और कंप्यूटर वैज्ञानिक बातचीत की सुविधा के लिए विवरण छोड़कर संक्षिप्त अभिव्यक्तियाँ इस्तेमाल करते हैं, इसलिए ऐसी बातें हमेशा होती रहती हैं
    यह “दोनों पक्षों को dx से गुणा कर देते हैं” कहने से अलग नहीं है। “क्या travelling salesman problem NP-hard है?” यह सवाल किसी एक खास instance के बारे में नहीं, बल्कि problems के एक परिवार के बारे में है। अगर किसी खास graph को fix कर दें, तो N है ही नहीं, इसलिए वह जाहिर तौर पर NP-hard नहीं है
    अगर आपको यह पता है तो यह इतना obvious है कि कहने लायक भी नहीं, लेकिन जिसे terms का मतलब नहीं पता, उसके लिए यह बिल्कुल पहुंच से बाहर रहता है
    मेरे साथ भी पहले दूसरे field में इसी तरह की गलतफहमी थी। मैं DNA को code की तरह देखता था, और मानता था कि substrate के जरिए सीधे या DNA को modify करके message भेजने-लेने वाली चीजें उस code को execute करती हैं। कुल मिलाकर यह model पूरी तरह बेकार नहीं है, लेकिन मुझे यह जानना चाहिए था कि कब इस model का नशा नहीं चढ़ने देना है
    गणितीय background वाले biologist के लिए DNA को सीधे Turing machine execution model के रूप में देखना साफ तौर पर गलत है, लेकिन मेरे लिए ऐसा नहीं था। आखिरकार यह बुनियादी ज्ञान की अपरिचितता से पैदा होने वाली समस्या है

  • निर्णेयता, computability, existence, और यहां तक कि fruit जैसे शब्दों का academic context और रोजमर्रा के context में मतलब अलग होता है। रोजमर्रा के अर्थ की intuition को academic context में ले आएं तो ऐसे “बेवकूफी भरे सवाल” पैदा होते हैं
    Wikipedia में आने वाली कोई बहुत बड़ी संख्या academic अर्थ में “exist” करती है और “computable” है, लेकिन उसके digits हमारे universe में समा नहीं सकते

  • ध्यान से न पढ़ें तो wording भ्रमित कर सकती है
    “अगर ईश्वर मौजूद है तो f:{0,1}*→{0,1} को constant 1 function मानें, और अगर ईश्वर मौजूद नहीं है तो constant 0 function मानें। क्या f computable है?” में alternatives function का हिस्सा नहीं हैं
    function f “ईश्वर मौजूद है” की value के आधार पर branch नहीं कर रहा; branch metalanguage के अंदर है। हमें नहीं पता कि f=0 है या f=1, लेकिन दोनों में से जो भी हो, दोनों possible functions computable हैं, इसलिए f भी computable है
    आगे बढ़कर, अगर f सचमुच उस branch को शामिल करता हो, और function का domain 0 (ईश्वर मौजूद नहीं है) और 1 (ईश्वर मौजूद है) हो, तब भी domain की हर value के लिए result compute किया जा सकता है, इस अर्थ में वह अब भी computable function है
    confusion का मूल यह है कि जिस free variable की value अज्ञात मानी जा रही है, उसे f के अंदर branch condition के रूप में धकेल दिया जाता है

  • “अगर ईश्वर मौजूद है तो n=3, और अगर ईश्वर मौजूद नहीं है तो n=5 मानें। क्या n prime है?” वाले उदाहरण पर मैं खुशी-खुशी आपत्ति करूंगा
    यहां n को 3 या 5 बताने के लिए law of excluded middle इस्तेमाल किया जा रहा है, लेकिन “ईश्वर मौजूद है” proposition पर law of excluded middle लागू होता है, इसका कोई justification नहीं है

    • classical logic में law of excluded middle valid है
      इस स्थिति में अगर यह जांचना है कि law of excluded middle justified है या नहीं, तो यह भी justify करना होगा कि सिर्फ law of excluded middle को ही मुद्दा क्यों बनाया जा रहा है। explosion principle को भी क्यों न छोड़ दें और paraconsistent logic में काम करें? Kolmogorov ने भी इस axiom में गंभीर समस्या मानी थी, और शुरुआत में इसे constructivist logic के साथ incompatible समझा था
      साथ ही, इस proposition की exact formalization के हिसाब से जरूरी नहीं कि law of excluded middle की जरूरत पड़े ही
    • संदर्भ के लिए, textbook version में कहा गया है कि question को एक clear binary problem मानें (Sipser 2nd edition, p.162)। उसे पकड़ लेना काफी sharp है
    • “क्या n prime है” भी, अगर ईश्वर मौजूद है, तो ईश्वर की इच्छा पर निर्भर है
      ईश्वर जरूरी नहीं कि physical laws या बुनियादी logical necessities से बंधा हो। ऐसा God concept किसी खास theological reasoning की line से निकला है, सामान्य case नहीं है
      चाहे तो ईश्वर 6 को odd बना सकता है। वह सारी mathematics, logical consistency, और पूरे universe को बदल सकता है, या ऐसा world बना सकता है जहां सिर्फ 77 even हो और बाकी सभी numbers odd हों, और सभी mathematicians उस arrangement को पूरी तरह consistent और हमेशा से सही मानें
      इसलिए कहा जा सकता है कि जवाब कुछ हद तक धार्मिक विश्वास पर निर्भर करता है
  • theoretical computer science और complexity theory की CS undergraduates या adjacent industry में काम करने वालों के लिए स्थिति वैसी ही लगती है, जैसी particle physics की आम लोगों के लिए होती है
    जैसे आम लोगों ने entanglement शब्द सुना है, वैसे ही हमने NP-hard शब्द सुना है, और mathematical derivation को खुद follow करने के बजाय खराब popular analogies और कल्पनाओं से उसकी जगह भर देते हैं

    • फिर भी, यह मानने की वजह नहीं है कि हर किसी को “computable” शब्द सिर्फ बेहद strict definition में ही इस्तेमाल करना चाहिए। रोजमर्रा की definition “जिसे computer कर सकता है” भी समझ में आती है
      लेखक ने शायद लंबी training की वजह से computability की अपनी बहुत strict definition चुन ली, फिर उसी word की किसी खास definition पर पूरा लेख लिखा, और फिर दुनिया में वही word किसी दूसरी definition में इस्तेमाल करने वालों को बेवकूफी भरे सवाल पूछने वाला ठहरा दिया
      workplace में academics से बात करते हुए या आम लोगों से बात करते हुए ऐसा सचमुच बहुत बार होता है। साझा terms तय करना मुश्किल है, और अपनी terminology के आधार पर line खींचकर दूसरों से उसके साथ चलने को कहना थकाऊ है