
আগের দুই পর্বে আমরা ক্লাসিক্যাল লজিকের নিয়মে বক্তব্যের সত্যমান বিচার করেছি। এবার প্রশ্নটা একটু বদলাই: কোনো বক্তব্যের প্রমাণ দিতে গেলে আমাদের ঠিক কী দিতে হবে?
ধরা যাক, আমরা এমন একটি আদালতে গেছি যেখানে বিচারক প্রতিটি দাবির জন্য প্রমাণ চাইছেন। ‘এমন হতেই হবে’ বললেই হবে না, কেন হবে তা দেখাতে হবে। এই তুলনাটি দিয়ে constructive logic বা গঠনমূলক যুক্তিবিদ্যার ধারণা কিছুটা বোঝা যায়। তবে প্রমাণ বলতে এখানে শুধু হাতে ধরার মতো বস্তু বোঝাচ্ছি না। একটি গাণিতিক নির্মাণ, অথবা এক ধরনের প্রমাণ থেকে অন্য ধরনের প্রমাণ তৈরির পদ্ধতিও প্রমাণ হিসেবে গণ্য হবে। এই লেখায় constructive logic বলতে intuitionistic logic বোঝাব।
কাজেই এই কাঠামোতে বিভিন্ন যৌক্তিক দাবির প্রমাণ কীভাবে দিতে হবে, তা আগে উদাহরণ দিয়ে ভেঙে দেখা যাক। ধরা যাক, আমাদের কাছে দুটি বাক্য আছে:
A := ‘৪ একটি জোড় সংখ্যা’
B := ‘৬ একটি জোড় সংখ্যা’
এখন A ∧ B (‘৪ একটি জোড় সংখ্যা এবং ৬ একটি জোড় সংখ্যা’) প্রমাণ করতে হলে আমাদের A ও B, দুটিরই আলাদা প্রমাণ দিতে হবে (অর্থাৎ 4 = 2 × 2 এবং 6 = 2 × 3 দেখাতে হবে)।
আবার A ∨ B (‘৪ জোড় সংখ্যা অথবা ৬ জোড় সংখ্যা’)-এর গঠনমূলক প্রমাণে শুধু ‘যেকোনো একটা সত্য’ বললে চলবে না। আমাদের স্পষ্ট করে বলতে হবে আমরা কোন দিকটি প্রতিষ্ঠা করছি (বাম দিকের A, নাকি ডান দিকের B), এবং সেই নির্দিষ্ট দিকটির প্রমাণ হাজির করতে হবে।
আগের পর্বের ‘অন্তত একজন ঢাকায় থাকেন’ (∃x ∈ U, D(x)) প্রমাণ করতে হলে ডোমেইন থেকে নির্দিষ্ট একজনকে বেছে নিতে হবে (ধরা যাক, শুভ) এবং তিনি যে ঢাকায় থাকেন, তার প্রমাণ দিতে হবে। এই নির্দিষ্ট ব্যক্তিকে existential দাবিটির সাক্ষী বা witness বলা হয়।
এখন কথা হলো, কোনো বক্তব্য সত্য নয়, সেটি কীভাবে প্রমাণ করব?
একটি গাণিতিক অসঙ্গতি বা অসম্ভব পরিস্থিতি বোঝাতে আমরা ⊥ প্রতীকটি ব্যবহার করি। একে falsum বা contradiction বলা হয়। এটিকে যুক্তির এমন একটি দেয়াল ভাবতে পারেন, যেখানে পৌঁছালে ‘1 = 0’ কিংবা ‘3/2 একটি পূর্ণসংখ্যা’র মতো অসম্ভব ফলাফল তৈরি হয়। এই ⊥ প্রতীকের সাহায্যে আমরা Negation বা ‘না’-বোধক দাবির সংজ্ঞা দিই এভাবে:
¬A := A → ⊥
এই সংজ্ঞাটি একটু খেয়াল করে পড়ি: ¬A প্রমাণ করার অর্থ হলো এমন একটি পদ্ধতি দেখানো, যা A-এর কোনো কাল্পনিক প্রমাণ পেলে সেটিকে ব্যবহার করে একটি অসঙ্গতি (⊥) তৈরি করে দেখায়। সহজ কথায়, A সত্য ধরে নিলে যদি হিসাবের ভেতর অসঙ্গতি (⊥) তৈরি হয়, তবেই আমরা বলব ¬A প্রমাণিত হয়েছে। এটিই হলো A-এর খণ্ডন বা refutation।
একটি সুনির্দিষ্ট বাক্য দিয়ে প্রতিটি ধাপ দেখা যাক। ধরি, A হলো বাক্য: ‘৩ একটি জোড় সংখ্যা’।
কোনো সংখ্যা জোড় হওয়ার অর্থ হলো, এমন একটি পূর্ণসংখ্যা k আছে যেন সংখ্যাটিকে 2k আকারে লেখা যায়। এখন আমরা প্রমাণ করতে চাই ¬A, অর্থাৎ ‘৩ জোড় সংখ্যা নয়’। সংজ্ঞা অনুযায়ী আমাদের দেখাতে হবে A → ⊥:
১. প্রথমে সাময়িকভাবে ধরে নিই A সত্য, অর্থাৎ ‘৩ একটি জোড় সংখ্যা’।
২. এই অনুমান অনুযায়ী এমন একটি পূর্ণসংখ্যা k আছে যেন 3 = 2k হয়।
৩. সমীকরণটি সমাধান করলে পাই k = 3/2। কিন্তু আমরা জানি 3/2 কোনো পূর্ণসংখ্যা নয়। অথচ ১ নম্বর ধাপে আমরা শুরুই করেছিলাম k-কে একটি পূর্ণসংখ্যা ধরে।
৪. ফলে আমরা একটি অসঙ্গতি বা দেয়ালে (⊥) ধাক্কা খেলাম: একই সংখ্যা k পূর্ণসংখ্যা এবং পূর্ণসংখ্যা নয়।
৫. যেহেতু A ধরে নিয়ে আমরা ⊥ পেয়েছি, তাই আমরা A → ⊥ পদ্ধতিটি তৈরি করে ফেলেছি। সংজ্ঞা অনুযায়ী আমরা প্রমাণ করলাম ¬A, অর্থাৎ ‘৩ জোড় সংখ্যা নয়’।
এখানে একটি বিষয় খেয়াল করুন। ‘A-এর প্রমাণ আমার কাছে নেই’ আর ‘আমার কাছে ¬A-এর প্রমাণ আছে’ কিন্তু এক কথা নয়। যেমন, এই মুহূর্তে মহাবিশ্বের অন্য কোনো গ্রহে প্রাণ আছে কি না (ধরা যাক, বাক্যটি C), তার প্রমাণ আমাদের কাছে নেই। কিন্তু তার মানে এই নয় যে আমরা C → ⊥ প্রমাণ করে ফেলেছি। প্রথমটি কেবল আমাদের তথ্যের ঘাটতি জানাচ্ছে, আর দ্বিতীয়টি একটি গাণিতিক দাবি, যার জন্য আলাদা যুক্তি দিয়ে দেখাতে হয় যে C ধরে নিলে অসঙ্গতি তৈরি হবে।
এবার আমরা ¬A := A → ⊥ সংজ্ঞাটি পরপর দুবার ব্যবহার করে দেখি ¬¬A বলতে আসলে কী বোঝায়।
যেহেতু যেকোনো বক্তব্যের সামনে একটি ‘¬’ বসানো মানে ‘সেই বক্তব্য → ⊥’, তাই ¬A-এর সামনে আরেকটি ‘¬’ বসালে পাই:
¬¬A := ¬A → ⊥
আবার ভেতরের ¬A মানে যেহেতু (A → ⊥), তাই পুরোটা ভেঙে লিখলে দাঁড়ায়:
¬¬A := (A → ⊥) → ⊥
প্রতীকগুলোকে বাংলা বাক্যে অনুবাদ করলে বিষয়টি খুব সহজ হয়ে যায়:
A : একটি দাবি।
¬A বা (A → ⊥) : ‘A দাবিটি অসঙ্গতি তৈরি করে’ (অর্থাৎ A-এর খণ্ডন)।
¬¬A বা (A → ⊥) → ⊥ : ‘কেউ যদি দাবি করে যে A অসঙ্গতি তৈরি করে, তবে তার সেই খণ্ডনের দাবিটি নিজেই অসঙ্গতি তৈরি করবে’ (অর্থাৎ A-এর খণ্ডনের খণ্ডন)।
একটি চেনা বাক্য দিয়ে দেখা যাক। ধরি, A হলো ‘৪ একটি জোড় সংখ্যা’। আমাদের হাতে A-এর সরাসরি প্রমাণ আছে, কারণ 4 = 2 × 2। এখান থেকে আমরা কি ¬¬A প্রমাণ করতে পারি?
ধরা যাক, কেউ একজন ¬A (অর্থাৎ A → ⊥) নিয়ে এল; সে দাবি করল যে ‘৪ জোড় সংখ্যা ধরলে অসঙ্গতি (⊥) তৈরি হয়’। আমরা তখন আমাদের হাতে থাকা 4 = 2 × 2 প্রমাণটি তার এই নিয়মের ভেতর বসিয়ে দেব। সাথে সাথে তার নিয়ম অনুযায়ী একটি অসঙ্গতি (⊥) বেরিয়ে আসবে। তার মানে, আমাদের হাতে A-এর প্রমাণ থাকলে যেকোনো সম্ভাব্য খণ্ডনকেই (¬A) আমরা অসংগত প্রমাণ করতে পারি। ফলে যেকোনো A-এর জন্যই এই দিকটি সবসময় সত্য: A → ¬¬A
কিন্তু উল্টো দিকে যাওয়ার সময় কী হচ্ছে? আমরা যদি দেখাতে পারি যে ‘A-কে খণ্ডন করতে গেলে অসঙ্গতি তৈরি হয়’ (¬¬A), তার মানেই কি আমাদের হাতে A-এর সরাসরি প্রমাণ চলে এসেছে?
বিষয়টি বোঝার জন্য আগের পর্বের ঢাকার উদাহরণে ফিরি। একটি নির্দিষ্ট সময়ে D(x) := ‘x ঢাকায় থাকেন’। এবার আলোচনার সুবিধার জন্য ডোমেইন U-তে মাত্র দুজন মানুষ রাখি, শুভ ও সারিহা। আমাদের মূল দাবিটি হলো:
P := ∃x ∈ U, D(x)
বাংলায় বললে, P হলো: ‘শুভ বা সারিহার মধ্যে অন্তত একজন ঢাকায় থাকেন’। যেহেতু ডোমেইনে মানুষ দুজনই, তাই একই দাবি আমরা D(শুভ) ∨ D(সারিহা) দিয়েও লিখতে পারি।
শুরুতে যেমন বলেছি, এই P দাবিটি সরাসরি প্রমাণ করতে হলে আমাদের নির্দিষ্ট একজন সাক্ষী (শুভ অথবা সারিহা) দেখাতে হবে এবং তিনি যে ঢাকায় থাকেন তার প্রমাণ দিতে হবে। কিন্তু ধরা যাক, এই মুহূর্তে কে কোথায় আছেন তা আমরা জানি না। আমাদের হাতে কেবল নিচের শর্তবাক্যটির প্রমাণ আছে:
¬D(শুভ) → D(সারিহা)
অর্থাৎ, ‘শুভ ঢাকায় থাকেন না’ প্রমাণিত হলে সেখান থেকে ‘সারিহা ঢাকায় থাকেন’ প্রমাণ করা যাবে (ধরা যাক, তাঁদের দুজনের অফিসের নিয়মই এমন যে একজন ঢাকার বাইরে গেলে অন্যজনকে ঢাকায় থাকতে হয়)। এখন প্রশ্ন হলো, শুধু এই নিয়মটি ব্যবহার করে আমরা কি P প্রমাণ করতে পারব, নাকি কেবল ¬¬P পাব? ধাপে ধাপে হিসাব করি:
১. আমরা পরীক্ষা করতে চাই, কেউ যদি আমাদের মূল দাবি P-কে খণ্ডন করতে চায় (অর্থাৎ ¬P দাবি করে), তবে কী ঘটে। তাই সাময়িকভাবে ধরে নিই ¬P সত্য।
২. ¬P মানে হলো: ‘শুভ বা সারিহার কেউই ঢাকায় থাকেন না’। তার মানে এই সাময়িক অনুমানের ভেতর আমরা দুটি তথ্য পাচ্ছি: শুভ ঢাকায় থাকেন না (¬D(শুভ)) এবং সারিহাও ঢাকায় থাকেন না (¬D(সারিহা))। কেননা তাঁদের যেকোনো একজন ঢাকায় থাকলেই P সত্য হয়ে যেত, যা আমাদের সাময়িক অনুমান ¬P-এর সাথে মিলে অসঙ্গতি তৈরি করত।
৩. এবার আমাদের হাতে থাকা শর্তবাক্যটির (¬D(শুভ) → D(সারিহা)) কথা মনে করি। ২ নম্বর ধাপ থেকে পাওয়া ‘শুভ ঢাকায় থাকেন না’ (¬D(শুভ)) তথ্যটি এই শর্তবাক্যে বসালে আমরা পেয়ে যাই: ‘সারিহা ঢাকায় থাকেন’ (D(সারিহা))।
৪. কিন্তু দেখুন, ২ নম্বর ধাপে একই অনুমানের ভেতর আমাদের কাছে ছিল ‘সারিহা ঢাকায় থাকেন না’ (¬D(সারিহা)), আর ৩ নম্বর ধাপে পেলাম ‘সারিহা ঢাকায় থাকেন’ (D(সারিহা))। এই দুটো মিলে তৈরি হলো অসঙ্গতি বা ⊥।
৫. কাজেই আমরা দেখলাম, ১ নম্বর ধাপে সাময়িকভাবে ¬P ধরে নেওয়ার কারণেই ⊥ তৈরি হয়েছে। অর্থাৎ আমরা (¬P → ⊥) প্রতিষ্ঠা করলাম। সংজ্ঞা অনুযায়ী এর মানে হলো: ¬¬P
অর্থাৎ আমরা প্রমাণ করলাম: ‘শুভ ও সারিহার কেউই ঢাকায় থাকেন না, এই দাবিটি অসম্ভব।’
তো পাঠকের মনে প্রশ্ন জাগতেই পারে, আমরা তো একটু আগেই ৩ নম্বর ধাপে D(সারিহা) (‘সারিহা ঢাকায় থাকেন’) পেয়েছি! তাহলে সারিহাকে সাক্ষী হিসেবে দেখিয়ে দিলেই তো সরাসরি P প্রমাণ হয়ে যায়, শুধু ¬¬P বলছি কেন?
সমস্যাটা হলো, ৩ নম্বর ধাপে আমরা যখন ‘সারিহা ঢাকায় থাকেন’ পেয়েছিলাম, তখন আমরা ১ নম্বর ধাপের সাময়িক অনুমান (¬P, অর্থাৎ কেউই ঢাকায় থাকেন না)-এর ভেতরে বসে হিসাব করছিলাম। সেই সাময়িক অনুমান থেকেই এসেছিল ‘শুভ ঢাকায় থাকেন না’, এবং তার ওপর ভর করেই এসেছিল ‘সারিহা ঢাকায় থাকেন’। যখনই আমাদের প্রমাণ শেষ হলো এবং আমরা সাময়িক অনুমানের ঘর থেকে বেরিয়ে এলাম, তখন সেই অনুমানের ওপর নির্ভরশীল ‘সারিহা ঢাকায় থাকেন’ তথ্যটিকে আর আলাদা করে বাইরে নিয়ে আসতে পারি না। কারণ বাস্তবে এমনও হতে পারে যে শুভ নিজেই ঢাকায় আছেন এবং সারিহা ঢাকার বাইরে আছেন! পুরো যুক্তিটি আমাদের কেবল এটুকুই নিশ্চিত করেছে যে, দুজনেই ঢাকার বাইরে থাকা অসম্ভব (¬¬P), কিন্তু কে আসলে ঢাকায় আছেন সেই নির্দিষ্ট সাক্ষী আমাদের হাতে তুলে দেয়নি।
আগের পর্বের quantifier-এর ভাষায় লিখলে পার্থক্যটি আরও পরিষ্কার দেখা যায়। নিচের সমতুল্যতাটি constructive logic-এও পুরোপুরি বৈধ:
¬(∃x ∈ U, D(x)) ↔ ∀x ∈ U, ¬D(x)
বাম পাশের ¬(∃x ∈ U, D(x)) মানে হলো আমাদের ¬P (‘অন্তত একজন ঢাকায় থাকেন, এই দাবিটি খণ্ডিত’)। আর ডান পাশের ∀x ∈ U, ¬D(x) মানে হলো ‘প্রত্যেকেই ঢাকার বাইরে থাকেন’। তার মানে ‘কেউ ঢাকায় থাকেন না’ দাবিটি খণ্ডন করা আমাদের কেবল দেয় ¬¬P। অথচ P-এর সরাসরি প্রমাণ পেতে হলে একজন নির্দিষ্ট মানুষকে সাক্ষী হিসেবে দেখাতে হয়। কাজেই ¬¬P এবং P আমাদের কাছে এক সমান তথ্য দিচ্ছে না।
অবশ্য আমরা যদি শুভ ও সারিহাকে ফোন করে প্রত্যেকের জন্য আলাদাভাবে D(x) অথবা ¬D(x) যাচাই করতে পারি, তবে সরাসরি সাক্ষী বেছে নেওয়া যাবে। তাই ব্যক্তিগতভাবে কারও ঠিকানা না জানাকে আমরা constructive অসম্ভবতা বলছি না। আমরা কেবল দেখছি, অতিরিক্ত কোনো তথ্য ছাড়া শুধু প্রদত্ত শর্তবাক্য এবং যুক্তির নিয়মগুলো থেকে ঠিক কতটুকু সিদ্ধান্ত টানা যায়।
Proof by contradiction কি তাহলে নিষিদ্ধ?
উপরের উদাহরণ দুটি মেলালে বোঝা যায়, গণিতে আমরা proof by contradiction নামে আসলে দুটি আলাদা কাজকে ডাকি।
প্রথম কাজটিতে আমরা কোনো দাবি A ধরে নিয়ে অসঙ্গতি (⊥) দেখাই, এবং সেখান থেকে সিদ্ধান্ত নিই যে A সত্য নয়, অর্থাৎ ¬A। আমাদের ‘৩ জোড় সংখ্যা নয়’ প্রমাণে আমরা ঠিক এই কাজটিই করেছি। এটি আসলে negation-এর সংজ্ঞাই (A → ⊥)। Constructive logic-এ এই প্রমাণে বিন্দুমাত্র বাধা নেই।
দ্বিতীয় কাজটিতে আমরা শুরু করি ¬A ধরে, এবং সেখান থেকে অসঙ্গতি (⊥) দেখাই। একই সংজ্ঞা অনুসারে এবার আমাদের বৈধ সিদ্ধান্ত হলো ¬¬A (অর্থাৎ ¬A → ⊥)। শুভ ও সারিহার উদাহরণে আমরা এটিই পেয়েছি। কিন্তু ক্লাসিক্যাল লজিকে আমরা এই ¬¬A পাওয়ার পর সেটিকে সরাসরি A লিখে দিই। এটি করার জন্য আমরা মাঝখানে বাড়তি একটি নিয়ম ব্যবহার করি:
¬¬A → A
এই নিয়মটির নাম double-negation elimination, সংক্ষেপে DNE। ক্লাসিক্যাল লজিকে যেকোনো বাক্যের জন্যই দুটি ‘না’ কেটে দিয়ে মূল বাক্যটি লিখে দেওয়া যায়। কিন্তু constructive logic-এ এটিকে সার্বজনীন নিয়ম হিসেবে ধরা হয় না, কারণ খণ্ডনের খণ্ডন (¬¬A) সবসময় মূল দাবির (A) গঠনমূলক প্রমাণ বা সাক্ষী তৈরি করে দেয় না। [২]
তার মানে পার্থক্যটি প্রমাণের ভেতর কোথাও অসঙ্গতি (⊥) ব্যবহার করা হচ্ছে কি না, তা নিয়ে নয়। মূল প্রশ্ন হলো, অসঙ্গতি পাওয়ার পর আমরা ¬A সিদ্ধান্তে যাচ্ছি, নাকি ¬¬A থেকে লাফ দিয়ে A-তে যাচ্ছি।
এবার দ্বিতীয় পর্বের শেষের দ্য ম্যাট্রিক্স মিমটিতে ফেরা যাক। মিমের প্রথম বাক্যটি ছিল: ‘আমি ভুল না হলে, A সত্য’ (Saying A, if I am not wrong)।
ধরা যাক, A হলো ‘শুভ ঢাকায় থাকেন’।
তাহলে ‘আমি A সম্পর্কে ভুল’ কথাটির যৌক্তিক রূপ হলো ¬A (‘শুভ ঢাকায় থাকেন না’)।
আর ‘আমি A সম্পর্কে ভুল নই’ কথাটির অর্থ দাঁড়ায় ¬¬A (‘শুভ যে ঢাকায় থাকেন না, তা অসম্ভব’)।
ফলে মিমের পুরো বাক্যটি (‘আমি ভুল না হলে, A’) একটি শর্তবাক্য বা conditional হিসেবে দাঁড়ায়:
¬¬A → A
অর্থাৎ মিমের ওই কথাটি আসলে হুবহু DNE-এর সূত্র! ক্লাসিক্যাল লজিকে যেহেতু ¬¬A আর A একই কথা, তাই সেখানে ¬¬A-এর জায়গায় A বসিয়ে দিলে বাক্যটি হয়ে যায় নিরীহ একটি পরিচয় সূত্র: A → A (‘যদি শুভ ঢাকায় থাকেন, তবে শুভ ঢাকায় থাকেন’)। মিমের নিও তাই অবাক হয়ে জিজ্ঞেস করছিলেন, এই দুটো কি একই কথা নয়? আর মরফিয়াস মনে করিয়ে দিয়েছিলেন, ¬¬A থেকে ওই সরল A → A-তে যাওয়ার আগেই মাঝখানে একটি বড় অনুমান কাজ করে গেছে।
অবশ্য দৈনন্দিন আলাপে ‘আমি ভুল না হলে’ বলতে আমরা নিজেদের অনিশ্চয়তা প্রকাশ করি। আমরা এখানে সাধারণ কথাবার্তার সব অর্থ বিশ্লেষণ করছি না, কেবল মিমটির পেছনের সুনির্দিষ্ট যৌক্তিক কাঠামোটি পরীক্ষা করছি।
Excluded Middle আর DNE-এর সম্পর্ক কোথায়?
মিমটিতে মরফিয়াস কিন্তু DNE-এর নাম না নিয়ে Law of Excluded Middle (সংক্ষেপে LEM) ধরে নেওয়ার কথা বলেছিলেন। আগের পর্বে আমরা দেখেছি, LEM হলো যেকোনো বাক্য A-এর জন্য এই দাবিটি মেনে নেওয়া: A ∨ ¬A
ধরা যাক, A হলো ‘শুভ ঢাকায় থাকেন’। তাহলে A ∨ ¬A বলছে: ‘হয় শুভ ঢাকায় থাকেন, নয়তো শুভ ঢাকায় থাকেন না’।
ক্লাসিক্যাল লজিকে সত্যসারণির নিয়মে এটি সবসময় সত্য। কিন্তু একটু আগেই আমরা দেখেছি, constructive নিয়মে কোনো ‘অথবা’ (∨) দাবি প্রমাণ করতে হলে আমাদের নির্দিষ্ট করে দেখাতে হয় ঠিক কোন দিকটি সত্য। যেসব সমস্যার ক্ষেত্রে আমরা হিসাব কষে A অথবা ¬A-এর যেকোনো একটি প্রমাণ বের করে ফেলতে পারি (যেমন একটি নির্দিষ্ট পূর্ণসংখ্যা জোড় না বিজোড় তা ২ দিয়ে ভাগ করে দেখা), সেগুলোকে বলা হয় decidable। কিন্তু গণিতের যেকোনো অজানা বা অমীমাংসিত বাক্যের জন্যও এখনই আমাদের হাতে A অথবা ¬A-এর প্রমাণ তৈরি আছে, এমন দাবি constructive logic করে না।
এখন প্রশ্ন হলো, মিমের বাক্যটি ছিল DNE (¬¬A → A), অথচ মরফিয়াস কেন LEM (A ∨ ¬A)-এর কথা বললেন? কারণ এই দুটি নিয়ম আসলে একে অপরের পরিপূরক: একটিকে সার্বজনীন নিয়ম হিসেবে মেনে নিলে অন্যটি আপনাআপনি চলে আসে। আমরা ধাপে ধাপে ভেঙে দেখি কীভাবে একটি থেকে অন্যটি পাওয়া যায়।
প্রথমে দেখি, LEM (A ∨ ¬A) হাতে থাকলে কীভাবে DNE (¬¬A → A) প্রমাণ করা যায়:
ধরা যাক, আমাদের হাতে কোনো একটি বাক্য A-এর জন্য ¬¬A-এর প্রমাণ আছে (যেমন আমরা জানি, শুভ যে ঢাকায় থাকেন না, তা অসম্ভব: ¬A → ⊥)। আমরা এখান থেকে সরাসরি A (‘শুভ ঢাকায় থাকেন’) পেতে চাই। যদি আমাদের LEM ব্যবহারের অনুমতি থাকে, তবে আমরা শুরুতেই দুটি সম্ভাব্য ঘরে ভাগ হয়ে যেতে পারি: হয় A সত্য, নয়তো ¬A সত্য।
১. প্রথম ঘর (A): যদি এই ঘরটি সত্য হয়, তবে আমরা সরাসরি A (‘শুভ ঢাকায় থাকেন’) পেয়েই গেছি। আর কিছু করার দরকার নেই।
২. দ্বিতীয় ঘর (¬A): যদি এই ঘরটি সত্য হয়, তবে আমাদের হাতে এল ¬A (‘শুভ ঢাকায় থাকেন না’)। কিন্তু আমাদের কাছে তো আগে থেকেই ¬¬A (অর্থাৎ ¬A → ⊥) প্রমাণ করা আছে! ফলে এই ¬A সেটির ভেতরে বসলেই তৈরি হবে অসঙ্গতি বা ⊥।
এখন intuitionistic logic-এ একটি নিয়ম আছে: একবার যদি কোথাও প্রকৃত অসঙ্গতি (⊥) তৈরি হয়ে যায় (যেমন 1 = 0), তবে সেখান থেকে যেকোনো বক্তব্য C দাবি করা যায়:
⊥ → C
এই নিয়মকে বলা হয় ex falso বা explosion। যেহেতু দ্বিতীয় ঘরে ⊥ তৈরি হয়েছে, তাই এই নিয়ম ব্যবহার করে আমরা দ্বিতীয় ঘরেও আমাদের কাঙ্ক্ষিত A লিখে দিতে পারি।
ফলে দেখা গেল, LEM দিয়ে যে দুটি ঘরে আমরা ভাগ হয়েছিলাম, তার প্রথম ঘরেও A পাওয়া যায়, দ্বিতীয় ঘরেও A পাওয়া যায়। কাজেই ¬¬A থেকে আমরা নিশ্চিতভাবে A পেলাম। অর্থাৎ LEM মেনে নিলে DNE প্রতিষ্ঠিত হয়ে যায়।
এবার উল্টো দিকটি দেখা যাক: আমাদের যদি সব বাক্যের জন্য DNE ব্যবহারের অনুমতি থাকে, তবে সেখান থেকে কীভাবে LEM (A ∨ ¬A) ফিরে পাওয়া যায়?
এটি বোঝার জন্য গঠনমূলক যুক্তিবিদ্যার খুবই চমৎকার একটি ফলাফল আমাদের কাজে লাগবে। আমরা সাধারণ constructive নিয়মেই সরাসরি A ∨ ¬A প্রমাণ করতে না পারলেও, এর সামনে দুটি ‘না’ বসিয়ে প্রমাণ করে ফেলতে পারি:
¬¬(A ∨ ¬A)
অর্থাৎ, ‘হয় শুভ ঢাকায় থাকেন, নয়তো থাকেন না’- এই পুরো বাক্যটিকে কেউ খণ্ডন করতে চাইলে সে নিজেই অসঙ্গতিতে পড়বে! সমীকরণের ভেতর যাতে কেউ হারিয়ে না যান, সেজন্য ‘শুভ ঢাকায় থাকেন’ (A) বাক্যটি দিয়েই এই প্রমাণটির প্রতিটি ধাপ দেখা যাক:
১. আমাদের লক্ষ্য হলো এটা দেখানো যে, ¬(A ∨ ¬A) ধরে নিলে অসঙ্গতি (⊥) তৈরি হয়। তাই শুরুতে সাময়িকভাবে ধরে নিই ¬(A ∨ ¬A) সত্য।
বাংলায় এই ১ নম্বর অনুমানটির অর্থ হলো: কেউ যদি ‘হয় শুভ ঢাকায় থাকেন, নয়তো থাকেন না’ (A ∨ ¬A) বাক্যটি প্রমাণ করে, তবে সাথে সাথে অসঙ্গতি (⊥) তৈরি হবে।
২. এবার এই অনুমানের ভেতরে বসে আমরা আরও সাময়িকভাবে ধরি, A সত্য; অর্থাৎ ‘শুভ ঢাকায় থাকেন’।
৩. কিন্তু ‘শুভ ঢাকায় থাকেন’ (A) সত্য হলে তো ‘হয় শুভ ঢাকায় থাকেন, নয়তো থাকেন না’ (A ∨ ¬A) বাক্যটির বাম দিকটি পূরণ হয়ে গেল! অর্থাৎ আমরা A ∨ ¬A পেয়ে গেলাম।
৪. এখন এই A ∨ ¬A-কে ১ নম্বর ধাপের অনুমানে বসাই। ১ নম্বর অনুমান বলেছিল A ∨ ¬A পেলেই ⊥ তৈরি হবে। কাজেই আমরা পেলাম ⊥।
৫. একটু থেমে খেয়াল করি: ২ নম্বর ধাপে আমরা ধরেছিলাম ‘শুভ ঢাকায় থাকেন’ (A), এবং ৪ নম্বর ধাপে গিয়ে দেখলাম এর ফলে ⊥ তৈরি হয়। তাহলে negation-এর সংজ্ঞা (A → ⊥) অনুযায়ী আমরা কিন্তু প্রমাণ করে ফেললাম ¬A, অর্থাৎ ‘শুভ ঢাকায় থাকেন না’!
৬. এবার মজার ব্যাপারটি দেখুন। ৫ নম্বর ধাপে আমরা বৈধভাবে পেয়ে গেছি ‘শুভ ঢাকায় থাকেন না’ (¬A)। কিন্তু এই তথ্যটি তো আবার ‘হয় শুভ ঢাকায় থাকেন, নয়তো থাকেন না’ (A ∨ ¬A) বাক্যটির ডান দিকটি পূরণ করে দেয়! ফলে এই দিক দিয়ে আবারও আমরা A ∨ ¬A পেয়ে গেলাম।
৭. এই নতুন A ∨ ¬A-কে আবার ১ নম্বর অনুমানে বসালে দ্বিতীয়বারের মতো তৈরি হয় ⊥।
৮. তার মানে কী দাঁড়াল? ১ নম্বর ধাপে যে আমরা ¬(A ∨ ¬A) ধরেছিলাম, সেই অনুমানটি নিজেই নিজের সাথে ধাক্কা খেয়ে অসঙ্গতি (⊥) তৈরি করেছে। কাজেই আমরা কোনো বাড়তি নিয়ম ছাড়াই প্রমাণ করে ফেললাম:
¬¬(A ∨ ¬A)
এই প্রমাণটি আমাদের অত্যন্ত গুরুত্বপূর্ণ একটি শিক্ষা দেয়। Constructive logic কিন্তু কখনোই বলে না যে Law of Excluded Middle (A ∨ ¬A) মিথ্যা। বরং আমরা এইমাত্র প্রমাণ করলাম যে A ∨ ¬A মিথ্যা হওয়া অসম্ভব (¬¬(A ∨ ¬A))!
এখন সহজেই বোঝা যাচ্ছে, আমাদের কাছে যদি যেকোনো বড় বাক্যের জন্য সামনের দুটি ‘না’ কেটে দেওয়ার নিয়ম (DNE) থাকে, তবে ¬¬(A ∨ ¬A) থেকে সামনের ‘¬¬’ দুটি কেটে দিলেই সরাসরি বেরিয়ে আসবে A ∨ ¬A (অর্থাৎ LEM)। এভাবেই সাধারণ নীতি হিসেবে DNE এবং LEM একে অপরের সমতুল্য হয়ে যায়। (চলবে)









মতামত জানান