Blog

#Halting Problem #Turing Machine #Computability Theory #Alan Turing #Proof by Contradiction #Self-Reference #Gödel's Incompleteness Theorem #Artificial Intelligence #Algorithms #Automated Theorem Proving

যে বাগ কোনোদিন কোনো AI-ই ধরতে পারবে না

2026-09-02 · 13 min read

যে বাগ কোনোদিন কোনো AI-ই ধরতে পারবে না

তোমার ফোনে কখনো এমন হয়েছে একটা অ্যাপ খুললে স্ক্রিন পুরো ফ্রিজ হয়ে যায়, কিছুতেই কিছু হয় না, শেষে force restart ছাড়া উপায় থাকে না? এখন ২০২৬ সালে দাঁড়িয়ে, যখন আমাদের কোড রিভিউ করে দেয় AI, বাগ খুঁজে দেয় Copilot-এর মতো এজেন্ট, তখন স্বাভাবিক প্রশ্ন জাগে এমন একটা AI বানানো কি সম্ভব, যেটা কোড দেখেই নিশ্চিতভাবে বলে দেবে "এই প্রোগ্রামটা কখনো infinite loop-এ আটকাবে না, নিশ্চিন্তে চালাও"?

উত্তরটা শুনলে অবাক হবেঃ এটা কোনো engineering limitation না, বরং গণিতের ভাষায় provably impossible একটা কাজ। আর এই প্রমাণ এসেছিল আজ থেকে প্রায় ১০০ বছর আগে, ১৯৩৬ সালে, Alan Turing-এর হাত ধরে কম্পিউটার আবিষ্কারের অনেক আগেই।

সমস্যাটা আসলে কী

তোমাকে একটা প্রোগ্রাম P আর একটা ইনপুট I দেয়া হলো। প্রশ্ন একটাইঃ P(I) কি halt করবে (সসীম সময়ে থামবে), নাকি চিরকাল লুপে ঘুরতেই থাকবে? একে বলে Halting Problem।

মনে হতে পারে, "রান করেই দেখি না কী হয়!" কিন্তু সমস্যা হলো, নির্দিষ্ট সময় পর্যন্ত অপেক্ষা করে না থামলে তুমি কখনোই নিশ্চিত হতে পারবে না এটা infinite loop-এ আটকে গেছে, নাকি পরের সেকেন্ডেই থেমে যাবে। "আরেকটু অপেক্ষা করলেই থামবে" এই সন্দেহ কখনো শেষ হয় না। তাই দরকার এমন একটা general algorithm, যেটা কোড রান না করেই, শুধু বিশ্লেষণ করে নিশ্চিতভাবে বলে দিতে পারবে halt করবে কি করবে না। সেটা যেকোনো প্রোগ্রামের জন্য।

ধরে নিই এমন একটা Oracle আছে

গণিতে impossibility প্রমাণের একটা প্রিয় কৌশল হলো proof by contradiction। প্রথমে ধরে নাও জিনিসটা সম্ভব, তারপর দেখাও ধারণাটা নিজেই নিজের পায়ে কুড়াল মারছে।

তাহলে ধরে নিই, আমাদের কাছে এমন একটা জাদুকরি ফাংশন আছে যার নাম দিলাম oracle:

def oracle(P, I):
    if P(I) halts in finite time:
        return True
    else:
        return False

এই ফাংশন যেকোনো প্রোগ্রাম আর ইনপুট নিয়ে নির্ভুলভাবে বলে দিতে পারে halt করবে কি করবে না। এবার এটার সাহায্যে একটা নতুন, একটু বদমাশ প্রকৃতির ফাংশন বানাই যেটার নাম দিলাম paradox:

def paradox(program):
    if oracle(program, program) == True:
        run_forever()   # deliberately loop forever
    else:
        return True      # halt immediately

লক্ষ করো, এই ফাংশন যেকোনো program-কে প্যারামিটার হিসেবে নিতে পারে, আর একটা প্রোগ্রাম তো আসলে একগুচ্ছ instructions/text ছাড়া কিছু না। তাহলে, যদি paradox নিজেকেই নিজের ইনপুট হিসেবে দিই?

paradox(paradox)

এবার মজাটা দেখোঃ

  • যদি oracle predict করে "paradox(paradox) halt করবে" → তাহলে কোডের নিয়ম অনুযায়ী সেটা সাথে সাথে run_forever()-এ ঢুকে যাবে। মানে prediction ভুল প্রমাণিত হলো।
  • যদি oracle predict করে "halt করবে না" → তাহলে কোড সাথে সাথে থেমে যাবে। এবারও prediction ভুল।

oracle যেভাবেই উত্তর দিক না কেন, বাস্তবে তার উল্টোটাই ঘটছে। এটাই contradiction, মানে এমন একটা নিখুঁত oracle আদৌ exist করতেই পারে না, কারণ থাকলেই সে নিজের সাথে নিজে দ্বন্দ্বে জড়িয়ে পড়ে। ব্যাস, প্রমাণ শেষ। এই self-reference ট্রিকটার সাথে অনেকটা মিল পাবে Gödel's Incompleteness Theorem-এও "এই বাক্যটি মিথ্যা" জাতীয় paradox-এর গাণিতিক জমজ ভাই বলা যায় একে।

AI যুগে এটা কেন এখনো গুরুত্বপূর্ণ

এখন প্রশ্ন হলো আমাদের কাছে তো এখন GPT-5, Claude, Gemini-এর মতো বিশাল LLM আছে, quantum computing নিয়ে গবেষণা চলছে। তাহলে কি ভবিষ্যতে কোনো super-intelligent AI এই সীমা ভেঙে ফেলতে পারবে না?

উত্তর হলো না, যতক্ষণ পর্যন্ত সেই AI Church-Turing thesis মেনে চলা যেকোনো computable সিস্টেমে (আজকের সিলিকন চিপ, বা আগামীকালের quantum processor) চলছে। কারণ প্রমাণটা কোনো নির্দিষ্ট hardware-এর গতি বা মেমরির সীমাবদ্ধতা নিয়ে না। এটা খাঁটি লজিকের সীমা। আজকের কোনো AI code reviewer যখন তোমার while (true) লুপ নিয়ে সতর্ক করে, সেটা আসলে heuristic (আন্দাজ-অনুমান, pattern matching) নিশ্চিত গ্যারান্টি না। এই জন্যই আজও production সিস্টেমে timeout, watchdog, আর পুরোনো দিনের Ctrl+C-ই একমাত্র বাস্তবসম্মত সমাধান। কোনো AI, যত স্মার্টই হোক, এই কাজ থেকে তোমাকে ১০০% রেহাই দিতে পারবে না।

এর প্র্যাকটিক্যাল প্রভাব আরো গভীরে যায়। Goldbach conjecture মনে আছে? "২-এর চেয়ে বড় যেকোনো even number-কে দুটি prime number-এর যোগফল হিসেবে লেখা যায়", প্রায় তিনশো বছর ধরে কেউ এটা প্রমাণ বা খণ্ডন করতে পারেনি। ধরো, তুমি এমন একটা প্রোগ্রাম লিখলেঃ

def goldbach_check():
    k = 4
    while True:
        found = False
        for p1 in range(k):
            for p2 in range(k):
                if is_prime(p1) and is_prime(p2) and p1 + p2 == k:
                    found = True
        if not found:
            exit()   # counterexample found — conjecture is false
        k += 2

এটা প্রতিটা even number-কে brute force-এর মাধ্যমে দুটি prime-এর যোগফল হিসেবে লেখার চেষ্টা করবে। কোনো k-এর জন্য found = False হলে বোঝা যাবে conjecture মিথ্যা, প্রোগ্রামটা থেমে যাবে। আর conjecture সত্যি হলে প্রোগ্রামটা অসীম সময় ধরে চলতে থাকবে। আমাদের সেই oracle সত্যিই থাকলে, শুধু oracle(goldbach_check, null) কল করেই শত শত বছরের গাণিতিক রহস্যের উত্তর পেয়ে যেতাম এক লহমায়! আজকের AI-চালিত automated theorem prover-রাও (যেমন AlphaProof, Lean-ভিত্তিক টুল) এই একই দেয়ালে এসে ঠেকে। তারা proof খুঁজে দিতে দারুণ দক্ষ হতে পারে, কিন্তু "এই conjecture সমাধানযোগ্য কি না তা general ভাবে বলে দাও" এই meta-প্রশ্নের উত্তর তাদের কাছেও নেই, থাকতে পারেও না।

দার্শনিক দিক থেকেও প্রশ্নটা কৌতূহলোদ্দীপক। আমাদের মস্তিষ্কও তো একধরনের information-processing system। তাহলে কি আমরা কোনোদিন নিজেদের মস্তিষ্ককে ১০০% বুঝে ফেলতে পারবো, নাকি এই একই ধরনের self-reference সীমাবদ্ধতা আমাদের আত্ম-জ্ঞানকেও চিরকাল অসম্পূর্ণ রেখে দেবে?

শেষ কথা

Halting Problem আমাদের শেখায়, প্রযুক্তি যতই এগিয়ে যাক, চিপ যতই দ্রুত হোক, AI যতই স্মার্ট হোক, কিছু প্রশ্নের উত্তর জানার কোনো shortcut নেই, কারণ সমস্যাটা speed-এর না, logic-এর গঠনের। আর ঠিক এই কারণেই হয়তো প্রোগ্রামিং একটা চিরকালীন মানবিক শিল্প থেকে যাবে। যেখানে ধৈর্য, debugging, আর মাঝে মাঝে একটা সাহসী Ctrl+C-ই শেষ ভরসা।

Happy coding!