প্রেডিকেট লজিক ও কোয়ান্টিফায়ার
এই পাঠে যা শিখবেন
- প্রেডিকেট ও প্রোপোজিশনের মধ্যে পার্থক্য
- ∀ ও ∃ ব্যবহার করে গাণিতিক বিবৃতি লেখা ও পড়া
- কোয়ান্টিফায়ার নেগেশন করা (কোয়ান্টিফায়ারের De Morgan's law)
- নেস্টেড কোয়ান্টিফায়ারে অর্ডার কেন ফলাফল বদলে দেয় তা বোঝা
- Python-এর
all()/any()দিয়ে ∀/∃ যাচাই করা
১ · প্রেডিকেট কী?
একটি প্রেডিকেট (Predicate)Predicateএকটি ভেরিয়েবল-নির্ভর বিবৃতি যার সত্যতা সেই ভেরিয়েবলের মানের উপর নির্ভর করে — x-কে একটি নির্দিষ্ট মান বসিয়ে দিলে বা কোয়ান্টিফায়ার দিয়ে বাইন্ড করলে এটি একটি প্রোপোজিশনে পরিণত হয়। P(x) নিজে একটি প্রোপোজিশন নয় — এটি x-এর উপর নির্ভরশীল একটি "টেমপ্লেট"। ধরুন P(x): "x একটি জোড় সংখ্যা"। তাহলে P(4) সত্য, কিন্তু P(3) মিথ্যা — P(x) নিজে, x নির্দিষ্ট না হওয়া পর্যন্ত, না সত্য না মিথ্যা।
P(x) একটি প্রোপোজিশন হয়ে ওঠে ঠিক দুইভাবে — (১) x-এ একটি নির্দিষ্ট মান বসিয়ে দিলে (যেমন P(4)), অথবা (২) একটি কোয়ান্টিফায়ার (∀ বা ∃) দিয়ে x-কে "বাইন্ড" করলে (যেমন ∀x P(x))। দুটোর যেকোনো একটি হলেই এটি একটি নির্দিষ্ট সত্য-মূল্য পায়।
২ · কোয়ান্টিফায়ার — ∀ ও ∃
কোয়ান্টিফায়ার (Quantifier)Quantifierএমন একটি চিহ্ন যা নির্দিষ্ট করে একটি প্রেডিকেট কতগুলো (কতজন/কয়টি) উপাদানের জন্য সত্য হতে হবে — "সবার জন্য" নাকি "অন্তত একজনের জন্য"। দুই ধরনের —
- ইউনিভার্সাল কোয়ান্টিফায়ার ∀x P(x) ("for all x, P(x)") — ডোমেইনের প্রতিটি x-এর জন্য P(x) সত্য।
- এক্সিস্টেনশিয়াল কোয়ান্টিফায়ার ∃x P(x) ("there exists x such that P(x)") — ডোমেইনে অন্তত একটি x আছে যার জন্য P(x) সত্য।
উদাহরণ: ডোমেইন হলো সব পূর্ণসংখ্যা। $\forall x\, (x^2 \ge 0)$ — সব পূর্ণসংখ্যার বর্গ অ-ঋণাত্মক — এটি সত্য। $\exists x\, (x^2 = 4)$ — এমন একটি পূর্ণসংখ্যা আছে যার বর্গ ৪ — এটিও সত্য (x=2 অথবা x=-2)।
৩ · কোয়ান্টিফায়ার নেগেশন
একটি কোয়ান্টিফাইড বিবৃতি নেগেট করলে কোয়ান্টিফায়ারটিও বদলে যায় — এটি কোয়ান্টিফায়ারের De Morgan's law নামে পরিচিত (L04-এ propositional De Morgan's দেখব) —
$\neg(\forall x\, P(x)) \equiv \exists x\, \neg P(x)$
$\neg(\exists x\, P(x)) \equiv \forall x\, \neg P(x)$
৪ · নেস্টেড কোয়ান্টিফায়ার — অর্ডার গুরুত্বপূর্ণ
যখন একাধিক কোয়ান্টিফায়ার একসাথে ব্যবহার করা হয়, তাদের ক্রম অর্থ বদলে দিতে পারে। সাধারণভাবে —
$\forall x \exists y\, P(x,y) \ne \exists y \forall x\, P(x,y)$
পূর্ণসংখ্যার উপর ক্লাসিক উদাহরণ: $P(x,y)$: "$y > x$"।
- $\forall x \exists y\, (y>x)$ — "প্রতিটি x-এর জন্য, তার চেয়ে বড় একটি y আছে" — সত্য (যেকোনো x-এর জন্য y=x+1 নিলেই হয়)।
- $\exists y \forall x\, (y>x)$ — "এমন একটি একক y আছে যা সব x-এর চেয়ে বড়" — মিথ্যা (পূর্ণসংখ্যার কোনো ঊর্ধ্বসীমা নেই, তাই কোনো একক y সব x-কে ছাড়িয়ে যেতে পারে না)।
পার্থক্যটির কারণ: $\forall x \exists y$-তে, প্রতিটি x-এর জন্য ভিন্ন y বেছে নেওয়া যায়। কিন্তু $\exists y \forall x$-তে, একটি একক y সব x-এর জন্য কাজ করতে হবে — এটি অনেক বেশি কঠোর শর্ত।
evens = [2, 4, 6, 8, 10]
nums = [3, 15, 42, 99, 150]
# ∀x P(x): সব সংখ্যা কি জোড়?
all_even = all(n % 2 == 0 for n in evens)
print("সব সংখ্যা জোড়?", all_even)
# ∃x P(x): কোনো একটি সংখ্যা কি ১০০-এর চেয়ে বড়?
any_over_100 = any(n > 100 for n in nums)
print("১০০-এর চেয়ে বড় কোনো সংখ্যা আছে?", any_over_100)
all(...) শুধুমাত্র তখন True ফেরত দেয় যখন জেনারেটরের প্রতিটি মান True — ঠিক ∀-এর সংজ্ঞার মতো। any(...) True ফেরত দেয় যদি অন্তত একটি মান True হয় — ঠিক ∃-এর মতো।
প্রেডিকেট লজিক প্রোপোজিশনাল লজিকের চেয়ে অনেক বেশি এক্সপ্রেসিভ — এটি "সব", "কিছু", এবং তাদের মধ্যে সম্পর্ক বর্ণনা করতে পারে। প্রায় প্রতিটি গাণিতিক থিওরেম (যেমন এই কোর্সের L06-এর ইনডাকশন) কোয়ান্টিফায়ার দিয়ে লেখা — "সব n-এর জন্য..." মানেই আসলে $\forall n$।
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।
প্র ০১ "সব শিক্ষার্থী পরীক্ষায় পাশ করেছে" — এই বিবৃতির সঠিক নেগেশন কী, এবং কেন "কোনো শিক্ষার্থী পাশ করেনি" ভুল?
মূল বিবৃতি: $\forall x\, P(x)$। এর নেগেশন $\neg(\forall x\, P(x)) \equiv \exists x\, \neg P(x)$ — অর্থাৎ "অন্তত একজন শিক্ষার্থী পাশ করেনি"। "কোনো শিক্ষার্থী পাশ করেনি" হলো $\forall x\, \neg P(x)$ — সম্পূর্ণ ভিন্ন এবং অনেক বেশি শক্তিশালী দাবি (সবাই ফেল করেছে)। মূল বিবৃতিকে মিথ্যা প্রমাণ করতে একজন ফেল করাই যথেষ্ট — সবাইকে ফেল করতে হবে না।
প্র ০২ কেন ∀x∃y(y>x) সত্য কিন্তু ∃y∀x(y>x) মিথ্যা — এমনকি যদিও উভয় বিবৃতিতে একই প্রেডিকেট ব্যবহৃত হয়েছে?
পার্থক্যটি "কে আগে বেছে নেয়" তার উপর। $\forall x \exists y\,(y>x)$-তে: প্রথমে একটি x ধরা হয়, তারপর সেই নির্দিষ্ট x-এর জন্য একটি উপযুক্ত y খুঁজে বের করা যায় (যেমন y=x+1) — প্রতিটি x-এর জন্য y ভিন্ন হতে পারে।
কিন্তু $\exists y \forall x\,(y>x)$-তে: প্রথমে একটি একক y স্থির করতে হয়, তারপর সেটিকে সব x-এর জন্য কাজ করতে হবে — কোনো পরিবর্তনের সুযোগ নেই। পূর্ণসংখ্যার কোনো সর্বোচ্চ মান নেই, তাই যেকোনো y-এর চেয়ে বড় একটি x সবসময় পাওয়া যাবে (যেমন x=y)। তাই কোনো একক y সব x-কে ছাড়িয়ে যেতে পারে না।
প্র ০৩ প্রেডিকেট P(x) নিজে কেন একটি "প্রোপোজিশন" নয়, যতক্ষণ না x-কে বাইন্ড করা হয়?
কারণ প্রোপোজিশনের সংজ্ঞা অনুযায়ী এর একটি নির্দিষ্ট সত্য-মূল্য থাকতে হবে। P(x): "x জোড়" — এই বাক্যটির সত্যতা সম্পূর্ণভাবে x-এর উপর নির্ভরশীল; x=4 হলে সত্য, x=3 হলে মিথ্যা। যতক্ষণ x অনির্দিষ্ট, ততক্ষণ এর কোনো একক, স্থির সত্য-মূল্য নেই — তাই এটি প্রোপোজিশন নয়, প্রোপোজিশন তৈরির একটি "টেমপ্লেট" মাত্র। x-এ মান বসালে বা কোয়ান্টিফায়ার দিয়ে বাইন্ড করলেই এটি একটি নির্দিষ্ট সত্য-মূল্যযুক্ত প্রোপোজিশনে পরিণত হয়।
অনুশীলন
-
সিম্বলে লিখুন: "কোনো ঋণাত্মক সংখ্যা নেই যার বর্গ ঋণাত্মক" — এই বাক্যটিকে ∀ অথবা ∃ ব্যবহার করে symbolic ভাষায় লিখুন, এবং ব্যাখ্যা করুন কেন এটি সত্য।
symbolic রূপ: $\neg \exists x\, (x^2 < 0)$, অথবা সমতুল্যভাবে $\forall x\, (x^2 \ge 0)$ (কোয়ান্টিফায়ার নেগেশন প্রয়োগ করে)। এটি সত্য কারণ যেকোনো বাস্তব সংখ্যার বর্গ সবসময় অ-ঋণাত্মক — ধনাত্মক, ঋণাত্মক বা শূন্য যেকোনো x-এর জন্যই $x^2 \ge 0$।
-
কোড পরিবর্তন করুন: উপরের code cell-এ
numsলিস্টে নতুন সংখ্যা বসিয়ে পরীক্ষা করুন — "সব সংখ্যা কি ৩ দ্বারা বিভাজ্য?" (∀) চেক করতেall()ব্যবহার করুন।কোড:
all(n % 3 == 0 for n in nums)। যদি লিস্টের সব সংখ্যা ৩ দ্বারা নিঃশেষে বিভাজ্য হয়, ফলাফলTrue; একটি সংখ্যাও না হলেFalse। মনে রাখবেন — একটি খালি লিস্টেall()সবসময়Trueফেরত দেয় (vacuous truth-এর মতোই ঘটনা), আরany()খালি লিস্টে সবসময়Falseফেরত দেয়।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- কোর্সের সম্পূর্ণ সিলেবাস দেখুন ৪৪টি পাঠ পরবর্তী পাঠ — যৌক্তিক সমতুল্যতা ও ইনফারেন্স নিয়ম — এই মডিউলের পরবর্তী ধাপ।
- Data Structures & Algorithms কোর্স সঙ্গী কোর্স এই কোর্সের গণিত বাস্তবে কীভাবে কোডে রূপ নেয় তা শিখতে DSA কোর্সটিও দেখুন।
- সব Courses দেখুন ABCL TECH C, C++, Python, Java, JavaScript, DSA, DBMS, HTML & CSS ও Discrete Mathematics — সব এক জায়গায়।