Implication আর Biconditional: “যদি… তাহলে…” এর logic
· 7 min read · #discrete-math #logic #implication
On this page
গত পর্বে দেখেছি ¬, ∧, ∨ আর ⊕। এগুলো সহজ, কারণ সাধারণ কথার সাথে মিলে যায়। কিন্তু implication (p → q) প্রথমবার দেখলে অনেকেরই মাথা ঘোরে। এই পর্বে সেটা পরিষ্কার করব, সাথে converse, inverse, contrapositive আর biconditional। (Section 1.1)
Implication (→)
p → q কে পড়ি "যদি p, তাহলে q"। একে বলে conditional statement বা implication।
pহলো hypothesis (antecedent বা premise)qহলো conclusion (consequence)
| p | q | p → q |
|---|---|---|
| T | T | T |
| T | F | F |
| F | T | T |
| F | F | T |
পুরো table-এ false মাত্র একবার: যখন p true কিন্তু q false।
একটা promise দিয়ে বুঝি
ধরুন আম্মু বললেন: "যদি তুমি পরীক্ষায় A+ পাও, তাহলে তোমাকে একটা সাইকেল কিনে দেব।"
p = "তুমি A+ পেয়েছ", q = "আম্মু সাইকেল কিনে দিয়েছেন"। এবার চারটা case দেখি, কখন আম্মু কথা রাখলেন আর কখন ভাঙলেন:
- A+ পেয়েছ, সাইকেলও পেয়েছ (T, T): কথা রাখা হয়েছে। True
- A+ পেয়েছ, কিন্তু সাইকেল পাওনি (T, F): কথা ভাঙা হয়েছে। False
- A+ পাওনি, তবু সাইকেল পেয়েছ (F, T): আম্মু তো বলেননি A+ না পেলে দেবেন না। কথা ভাঙেননি। True
- A+ পাওনি, সাইকেলও পাওনি (F, F): এটাও কথা ভাঙা না। True
Promise ভাঙে কেবল দ্বিতীয় case-এ। তাই implication false শুধু তখনই।
Code-এ implication-এর আলাদা operator নেই, তবে p → q আর !p || q একই জিনিস (এটা প্রমাণ করব পর্ব ৪-এ):
const implies = (p, q) => !p || q;
implies(true, true); // true
implies(true, false); // false
implies(false, true); // true
implies(false, false); // truep → q বলার অনেক উপায়
একই implication নানাভাবে লেখা হয়। পরীক্ষায় এগুলো চিনতে পারা খুব জরুরি:
- if p, then q
- p implies q
- q if p
- q when p, q whenever p
- p only if q
- p is sufficient for q
- q is necessary for p
- q follows from p
- q unless ¬p
এর মধ্যে তিনটা জায়গায় সবচেয়ে বেশি ভুল হয়।
"p only if q" মানে p → q, q → p না। "তুমি ভোট দিতে পারবে only if তোমার বয়স 18+।" এখানে p = ভোট দিতে পারা, q = বয়স 18+। ভোট দিতে পারলে বয়স অবশ্যই 18+, মানে p → q। কিন্তু 18+ হলেই ভোট দিতে পারবে, এমন কথা বলা হয়নি, voter list-এ নামও থাকতে হবে।
Necessary আর sufficient: "আগুন জ্বলতে হলে অক্সিজেন necessary।" p = আগুন জ্বলছে, q = অক্সিজেন আছে। আগুন জ্বললে অক্সিজেন থাকবেই (p → q), কিন্তু শুধু অক্সিজেন থাকলেই আগুন জ্বলে না। উল্টোদিকে, p হলো q-এর জন্য sufficient: আগুন জ্বলছে দেখলেই বোঝা যায় অক্সিজেন আছে।
"q unless ¬p": "তুমি ফেল করবে, যদি না তুমি পড়াশোনা করো।" এখানে q = তুমি ফেল করবে, ¬p = তুমি পড়াশোনা করো। তাই p = তুমি পড়াশোনা করো না, আর পুরো কথাটা p → q: "যদি পড়াশোনা না করো, তাহলে ফেল করবে।"
Converse, inverse আর contrapositive
p → q থেকে আরও তিনটা conditional বানানো যায়:
- Converse:
q → p(দুই পাশ অদলবদল) - Inverse:
¬p → ¬q(দুটোকেই negate) - Contrapositive:
¬q → ¬p(অদলবদল আর negate, দুটোই)
উদাহরণ: "যদি বৃষ্টি হয়, তাহলে আমি বাইরে যাব না।" p = বৃষ্টি হয়, q = আমি বাইরে যাব না।
- Converse: যদি আমি বাইরে না যাই, তাহলে বৃষ্টি হচ্ছে।
- Inverse: যদি বৃষ্টি না হয়, তাহলে আমি বাইরে যাব।
- Contrapositive: যদি আমি বাইরে যাই, তাহলে বৃষ্টি হচ্ছে না।
সবচেয়ে গুরুত্বপূর্ণ কথা: contrapositive সবসময় original-এর সমান (logically equivalent)। Converse আর inverse সমান না। Truth table দিয়ে মিলিয়ে দেখি:
| p | q | p → q | q → p | ¬p → ¬q | ¬q → ¬p |
|---|---|---|---|---|---|
| T | T | T | T | T | T |
| T | F | F | T | T | F |
| F | T | T | F | F | T |
| F | F | T | T | T | T |
p → q আর ¬q → ¬p কলাম হুবহু এক। কিন্তু highlight করা দুই row-তে converse আর inverse আলাদা হয়ে যায়।
মজার ব্যাপার, converse আর inverse নিজেরা কিন্তু একে অপরের সমান, কারণ inverse আসলে converse-এর contrapositive।
Biconditional (↔)
p ↔ q পড়ি "p if and only if q", সংক্ষেপে "p iff q"। এটা true হয় যখন p আর q-এর truth value একই: দুটোই true, অথবা দুটোই false।
| p | q | p ↔ q |
|---|---|---|
| T | T | T |
| T | F | F |
| F | T | F |
| F | F | T |
নাম থেকেই বোঝা যায়, এটা আসলে দুই দিকের implication: (p → q) ∧ (q → p)।
উদাহরণ: "তুমি boarding pass পাবে if and only if তোমার ticket থাকবে।" Ticket থাকলে pass পাবে, আর pass পেয়েছ মানে ticket আছে।
একই কথা অন্যভাবেও বলা হয়: "p is necessary and sufficient for q", অথবা "if p then q, and conversely"।
Code-এ দুটো boolean-এর জন্য এটা ===:
const p = false;
const q = false;
console.log(p === q); // true, দুটোই falseখেয়াল করুন, ↔ হলো ⊕-এর ঠিক উল্টো: যেখানে একটা true, অন্যটা false।
Compound proposition-এর truth table
কয়েকটা connective মিলিয়ে বড় expression হলে, ছোট ছোট অংশের আলাদা column বানিয়ে ধাপে ধাপে এগোতে হয়। উদাহরণ: p ∨ q → ¬r
| p | q | r | ¬r | p ∨ q | p ∨ q → ¬r |
|---|---|---|---|---|---|
| T | T | T | F | T | F |
| T | T | F | T | T | T |
| T | F | T | F | T | F |
| T | F | F | T | T | T |
| F | T | T | F | T | F |
| F | T | F | T | T | T |
| F | F | T | F | F | T |
| F | F | F | T | F | T |
Variable যত, row তত বাড়ে: n টা variable থাকলে row হয় 2ⁿ টা। 3 variable-এ 8, 4-এ 16, 10-এ 1024।
Operator precedence
Bracket না থাকলে কোন operator আগে হিসাব হবে, তার নিয়ম:
¬(সবার আগে)∧∨→↔(সবার শেষে)
তাই p ∨ q → ¬r মানে (p ∨ q) → ¬r। যদি p ∨ (q → ¬r) বোঝাতে চান, bracket দিতেই হবে।
JavaScript-এও ! আগে, তারপর &&, তারপর ||। সন্দেহ হলে bracket দিন, পড়তেও সুবিধা।
Practice
প্রশ্ন ১. "তুমি এই app use করতে পারবে only if তুমি subscription কিনেছ।" p আর q ঠিক করে implication আকারে লিখুন।
Answer
p = তুমি app use করতে পারবে, q = তুমি subscription কিনেছ। "p only if q" মানে p → q: "যদি তুমি app use করতে পারো, তাহলে তুমি subscription কিনেছ।"
প্রশ্ন ২. "যদি আমি গান শুনি, তাহলে আমি পড়তে পারি না।" এর converse, inverse আর contrapositive লিখুন। কোনটা original-এর সমান?
Answer
- Converse: যদি আমি পড়তে না পারি, তাহলে আমি গান শুনছি।
- Inverse: যদি আমি গান না শুনি, তাহলে আমি পড়তে পারি।
- Contrapositive: যদি আমি পড়তে পারি, তাহলে আমি গান শুনছি না।
শুধু contrapositive original-এর সমান।
প্রশ্ন ৩. p = F, q = T, r = F হলে (p → q) ∧ (q → r) এর value কী?
Answer
p → q = F → T = T। q → r = T → F = F। তাই T ∧ F = F।
শেষ কথা
p → qfalse শুধু তখন, যখন p true কিন্তু q false।- p false হলে implication সবসময় true (vacuously true)।
- "p only if q" মানে
p → q। Necessary আর sufficient গুলিয়ে ফেলবেন না। - Contrapositive original-এর সমান, converse আর inverse না।
p ↔ qtrue যখন দুটোর value একই।
পরের পর্বে দেখব এই logic বাস্তবে কোথায় লাগে: বাক্য থেকে logic, software requirement, puzzle আর logic circuit।