এই পর্বে যা শিখবেন
- প্রমাণ কী দিয়ে তৈরি: axiom, সংজ্ঞা, আগের উপপাদ্য; informal আর formal প্রমাণের পার্থক্য
- Direct proof, contrapositive দিয়ে প্রমাণ, vacuous আর trivial proof লেখা
- Contradiction দিয়ে √2-এর অমূলদতা আর Euclid-এর অসীম মৌলিক সংখ্যার প্রমাণ
- “যদি এবং কেবল যদি” আর কয়েকটি বাক্যের সমতুল্যতা প্রমাণ
- প্রমাণ খুঁজে পাওয়ার কৌশল: খসড়া, ছোট ক্ষেত্রে Python, তারপর পরিষ্কার প্রমাণ; আর ভুল প্রমাণ ধরা
১ · প্রমাণ কী — axiom, সংজ্ঞা আর আগের উপপাদ্য
বাজারঘরের ক্যাশিয়ার সারাদিন খেয়াল করলেন: যে অর্ডারের পণ্যসংখ্যা বিজোড় আর প্রতিটি পণ্যের দামও বিজোড় টাকা, তার মোট দাম সবসময় বিজোড়। পঞ্চাশটি অর্ডারে মিলেছে। এটি কি সবসময় সত্য? পঞ্চাশটি কেন, পঞ্চাশ হাজারটি মিললেও নিশ্চিত হওয়া যায় না; পর্ব ০১-এ দেখেছেন, n² + n + 41 সূত্রটি চল্লিশবার মৌলিক সংখ্যা দিয়ে একচল্লিশতম বারে ভেঙে পড়ে। নিশ্চয়তা আসে শুধু প্রমাণ থেকে। এই পর্বে প্রমাণ লেখার মূল তিনটি পদ্ধতি শিখবেন, আর প্রতিটির সঙ্গে দেখবেন প্রমাণটি খুঁজে পাওয়া যায় কীভাবে।
একটি উপপাদ্য (theorem) এমন একটি বাক্য, যা প্রমাণ করা হয়েছে। একটি প্রমাণ হলো বাক্যের এমন একটি শিকল, যার প্রতিটি বাক্য হয় (১) একটি axiom (স্বীকার্য: যা প্রমাণ ছাড়াই মেনে নেওয়া হয়), (২) একটি সংজ্ঞা, (৩) আগে প্রমাণিত কোনো উপপাদ্য, lemma বা corollary, নয়তো (৪) আগের বাক্যগুলো থেকে একটি অনুমানের নিয়মে পাওয়া। শেষ বাক্যটি দাবিটি নিজে। প্রমাণ শেষে চিহ্ন ∎ দেওয়া হয়।
এই পর্বে পূর্ণসংখ্যা (integer, ℤ = {…, −2, −1, 0, 1, 2, …}) নিয়ে কাজ করব। যোগ, বিয়োগ, গুণের সাধারণ নিয়ম (বিনিময়, সংযোগ, বণ্টন) আর “দুটি পূর্ণসংখ্যার যোগফল ও গুণফল পূর্ণসংখ্যা” (এটিকে বলে closure ধর্ম) আমরা axiom হিসেবে মেনে নেব। বাকি সবকিছু সংজ্ঞা থেকে আসবে। দুটি সংজ্ঞা পুরো পর্বে বারবার লাগবে:
একটি পূর্ণসংখ্যা n জোড় (even), যদি এমন পূর্ণসংখ্যা k থাকে যে n = 2k. আর n বিজোড় (odd), যদি এমন পূর্ণসংখ্যা k থাকে যে n = 2k + 1. প্রতিটি পূর্ণসংখ্যা ঠিক একটি দলে পড়ে; জোড় না বিজোড়, এই তথ্যকে বলে parity.
একটি বাস্তব সংখ্যা r মূলদ (rational), যদি এমন পূর্ণসংখ্যা p, q থাকে যে q ≠ 0 এবং r = p/q. যে বাস্তব সংখ্যা মূলদ নয়, তা অমূলদ (irrational).
সংজ্ঞাগুলো খেয়াল করে পড়ুন: “জোড়” মানে “2 দিয়ে ভাগ যায়” বললেও চলে, কিন্তু প্রমাণে কাজের রূপ হলো “n = 2k, k একটি পূর্ণসংখ্যা”। প্রায় প্রতিটি প্রমাণের প্রথম ধাপ হলো সংজ্ঞাকে এই রকম সমীকরণে খুলে লেখা, আর শেষ ধাপ হলো ফলটিকে আবার সংজ্ঞার আকারে ফেরত আনা।
Informal আর formal প্রমাণ
পর্ব ০৬ “অনুমানের নিয়ম — modus ponens থেকে resolution”-এ formal proof দেখেছেন: প্রতিটি লাইনের পাশে নিয়মের নাম আর লাইন নম্বর। গণিতের বই আর পরীক্ষার খাতায় যে প্রমাণ লেখা হয়, তা informal proof: স্বাভাবিক ভাষায়, একাধিক নিয়ম একসঙ্গে প্রয়োগ করে, স্পষ্ট ধাপগুলো (যেমন “বণ্টন নিয়মে”) সবসময় না বলে। Informal মানে ঢিলেঢালা নয়। এর মানে হলো, একজন দক্ষ পাঠক চাইলে প্রতিটি ধাপকে formal proof-এ ভেঙে নিতে পারবেন। এই পর্বে মাঝামাঝি পথ নেব: প্রতিটি প্রমাণ সংখ্যাযুক্ত ধাপে, প্রতিটি ধাপের পাশে কারণ।
প্রায় সব উপপাদ্যের আকার “সব x-এর জন্য, P(x) হলে Q(x)”, অর্থাৎ ∀x (P(x) → Q(x)). পর্ব ০৬-এর universal generalization অনুযায়ী এটি প্রমাণ করতে একটি ইচ্ছামতো x নিয়ে P(x) → Q(x) দেখালেই হয়। তাই প্রমাণ শুরু হয় “ধরি n একটি ইচ্ছামতো বিজোড় পূর্ণসংখ্যা” দিয়ে, “ধরি n = 7” দিয়ে নয়। আর p → q দেখানোর তিনটি প্রধান রাস্তা আছে, নিচের ছবিতে:
p → q প্রমাণের তিন রাস্তা
Direct (blue), contrapositive (green), contradiction (amber)
২ · Direct proof — সংজ্ঞা খুলে সোজা পথে
একটি direct proof-এ p → q প্রমাণ করতে p সত্য ধরে নেওয়া হয়, তারপর সংজ্ঞা, axiom আর আগের উপপাদ্য দিয়ে এক এক ধাপে q-তে পৌঁছানো হয়। p মিথ্যা হলে p → q এমনিতেই সত্য, তাই শুধু p সত্য ক্ষেত্রটিই দেখার।
প্রমাণ খুঁজে পাওয়া: আগে খসড়া
পরিষ্কার প্রমাণ বইয়ে ছাপা হয়, কিন্তু তার আগে থাকে খসড়ার কাজ, যা কেউ দেখায় না। আমরা দেখাব। ক্যাশিয়ারের প্রশ্নের মূলে আছে জোড়-বিজোড়ের যোগ আর গুণ। প্রথমে কয়েকটি ছোট সংখ্যায় দেখি কী ঘটে, তারপর একটি দাবি বড় পরিসরে যাচাই করি, আর লোভে পড়ে একটি বেশি বড় দাবি করলে কী হয় তাও দেখি। প্রথমবার চালালে ব্রাউজারে Python (Pyodide) নামতে কয়েক সেকেন্ড লাগে।
def kind(n):
return "even" if n % 2 == 0 else "odd"
# ধাপ ১: ছোট কয়েকটি জোড়া দেখে প্যাটার্ন খোঁজা
for a, b in [(2, 4), (2, 7), (3, 4), (3, 7), (5, 9), (11, 13)]:
print(f"{a:>2}+{b:<2} = {a + b:<3} {kind(a + b):4} "
f"{a:>2}*{b:<2} = {a * b:<4} {kind(a * b)}")
# ধাপ ২: দাবি "n বিজোড় হলে n² বিজোড়" — বড় পরিসরে যাচাই
odds = range(1, 200_000, 2)
bad = [n for n in odds if (n * n) % 2 == 0]
print("checked", len(odds), "odd n; counterexamples:", bad)
# ধাপ ৩: আরও খুঁটিয়ে দেখলে নতুন প্যাটার্ন: n² mod 8
print("n^2 % 8 for odd n:", sorted({n * n % 8 for n in range(1, 500, 2)}))
# ধাপ ৪: লোভে পড়ে বেশি দাবি: "n বিজোড় হলে n² % 16 == 1"?
cex = next(n for n in range(1, 100, 2) if n * n % 16 != 1)
print("claim 'odd n => n^2 % 16 == 1' fails at n =", cex,
"because", cex * cex, "% 16 =", cex * cex % 16)আসল আউটপুট (ব্রাউজারের Python):
2+4 = 6 even 2*4 = 8 even
2+7 = 9 odd 2*7 = 14 even
3+4 = 7 odd 3*4 = 12 even
3+7 = 10 even 3*7 = 21 odd
5+9 = 14 even 5*9 = 45 odd
11+13 = 24 even 11*13 = 143 odd
checked 100000 odd n; counterexamples: []
n^2 % 8 for odd n: [1]
claim 'odd n => n^2 % 16 == 1' fails at n = 3 because 9 % 16 = 9
প্রথম ছয় লাইন থেকে অনুমান: দুটি বিজোড়ের গুণ বিজোড়, আর একটিও জোড় থাকলে গুণ জোড়। দ্বিতীয় অংশে এক লাখ বিজোড় n-এ “n² বিজোড়” মিলেছে, কোনো counterexample নেই। তৃতীয় অংশে একটি বাড়তি প্যাটার্ন বেরিয়েছে: প্রতিটি বিজোড় বর্গকে 8 দিয়ে ভাগ করলে ভাগশেষ 1 (অনুশীলন ২-এ এর প্রমাণ)। শেষ অংশ সতর্কবার্তা: প্যাটার্ন দেখে আরও বড় দাবি করলে (“16 দিয়ে ভাগশেষ 1”) প্রথম চেষ্টাতেই n = 3 ভেঙে দেয়। খেয়াল করুন, এক লাখ সফল পরীক্ষাও “সব n”-এর প্রমাণ নয়; সেটি এখনই লিখব।
খসড়ায় একটি প্রশ্ন জিজ্ঞেস করুন: কেন 7 · 9 বিজোড়? 7 = 2·3 + 1, 9 = 2·4 + 1. গুণ করলে চারটি টুকরো: 2·3·2·4, 2·3, 2·4, আর 1·1. প্রথম তিনটিতে 2 আছে, শুধু শেষটিতে নেই। এই পর্যবেক্ষণটিই প্রমাণ, শুধু 3 আর 4-এর জায়গায় অক্ষর বসাতে হবে।
m আর n বিজোড় পূর্ণসংখ্যা হলে mn বিজোড়।
1ধরি m, n বিজোড়2m = 2k+1, n = 2l+13mn = 4kl+2k+2l+14 = 2(2kl+k+l)+15t = 2kl+k+l ∈ ℤ6mn = 2t+1, বিজোড় ∎
| k, l | |
| এই ধাপের মান | |
| কারণ |
- অনুমান। ধরি m আর n ইচ্ছামতো দুটি বিজোড় পূর্ণসংখ্যা। এটিই p; direct proof-এ p সত্য ধরে q (mn বিজোড়) দেখাতে হবে। ডানে একটি নমুনা জোড়া m = 7, n = 9 পাশাপাশি চলবে, শুধু বোঝার জন্য; প্রমাণ অক্ষর দিয়েই।
- সংজ্ঞা খোলা। বিজোড়ের সংজ্ঞা অনুযায়ী এমন পূর্ণসংখ্যা k আর l আছে যে m = 2k + 1, n = 2l + 1. দুটি আলাদা অক্ষর লাগবে, কারণ m আর n আলাদা হতে পারে। নমুনায় k = 3, l = 4.
- গুণ। বণ্টন নিয়মে mn = (2k + 1)(2l + 1) = 4kl + 2k + 2l + 1. নমুনায় 48 + 6 + 8 + 1 = 63, আর সত্যিই 7 · 9 = 63.
- 2 আলাদা করা। প্রথম তিন পদে 2 আছে: mn = 2(2kl + k + l) + 1. খসড়ায় যে পর্যবেক্ষণ করেছিলাম, এটিই তার বীজগাণিতিক রূপ। নমুনায় 2 · 31 + 1.
- পূর্ণসংখ্যা কি না। t = 2kl + k + l লিখি। k, l পূর্ণসংখ্যা, আর পূর্ণসংখ্যার গুণ ও যোগ পূর্ণসংখ্যা (closure), তাই t ∈ ℤ. এই ধাপ বাদ দেওয়া সবচেয়ে সাধারণ ভুল: t ভগ্নাংশ হলে সংজ্ঞা খাটত না।
- সংজ্ঞায় ফেরা। mn = 2t + 1, যেখানে t পূর্ণসংখ্যা; বিজোড়ের সংজ্ঞা অনুযায়ী mn বিজোড়। m, n ইচ্ছামতো ছিল, তাই দাবিটি সব বিজোড় m, n-এর জন্য সত্য। ∎
একই কৌশলে, m = n বসালে পাই: n বিজোড় হলে n² বিজোড়। Python-এর এক লাখ পরীক্ষা যা “সম্ভবত” বলেছিল, এই ছয় লাইন তা সব অসীম বিজোড় সংখ্যার জন্য নিশ্চিত করল। এবার মূলদ সংখ্যা নিয়ে আরেকটি direct proof, যেখানে একটি শর্ত খুব সহজে চোখ এড়ায়:
r আর s মূলদ হলে r + s মূলদ।
প্রমাণ:
- ধরি r, s মূলদ। সংজ্ঞায় এমন পূর্ণসংখ্যা a, b, c, d আছে যে b ≠ 0, d ≠ 0, r = a/b, s = c/d. — মূলদের সংজ্ঞা
- r + s = a/b + c/d = (ad + bc)/(bd). — ভগ্নাংশের যোগের নিয়ম
- ad + bc আর bd পূর্ণসংখ্যা। — closure
- b ≠ 0 আর d ≠ 0, তাই bd ≠ 0; দুটি অশূন্য পূর্ণসংখ্যার গুণফল শূন্য হয় না। — পূর্ণসংখ্যার ধর্ম
- অতএব r + s = p/q আকারে লেখা গেল, যেখানে p = ad + bc, q = bd ≠ 0; সংজ্ঞায় r + s মূলদ। ∎
উদাহরণ: 3/4 + 5/6 = (3·6 + 4·5)/(4·6) = 38/24 = 19/12. ধাপ ৪ না লিখলে প্রমাণ অসম্পূর্ণ, কারণ সংজ্ঞায় হর শূন্য হওয়া নিষেধ। “মূলদ যোগ অমূলদ” বা “অমূলদ যোগ অমূলদ” সম্পর্কে কী বলা যায়? দ্বিতীয়টির কোনো নিয়ম নেই: √2 + (−√2) = 0 মূলদ, অথচ √2 + √2 অমূলদ। Counterexample দিয়ে খণ্ডনের এই কৌশল বিস্তারিত দেখবেন পর্ব ০৯ “প্রমাণের কৌশল — case, existence, uniqueness আর counterexample”-এ।
৩ · Contrapositive দিয়ে প্রমাণ — উল্টো দিক থেকে ঢোকা
এবার দাবি: n² জোড় হলে n জোড়। Direct proof চেষ্টা করি। n² = 2k ধরলাম। তাহলে n = ±√(2k). এখান থেকে n জোড় কি না বলার কোনো সরল উপায় নেই; বর্গমূল নিয়ে পূর্ণসংখ্যার কথা বলা কঠিন। রাস্তাটি বন্ধ।
পর্ব ০২-এ দেখেছেন, p → q আর তার contrapositive ¬q → ¬p সব সারিতে সমান মান দেয়। তাই একটি প্রমাণ করলেই অন্যটি প্রমাণিত। এই কৌশলের নাম proof by contrapositive. এখানে contrapositive হলো “n জোড় নয় হলে n² জোড় নয়”, অর্থাৎ “n বিজোড় হলে n² বিজোড়”। এবার শুরুতে n-এর সমীকরণ হাতে পাই, আর বর্গ করা সহজ কাজ।
n একটি পূর্ণসংখ্যা। n² জোড় হলে n জোড়।
1লক্ষ্য: n² জোড় → n জোড়2সমতুল্য: n বিজোড় → n² বিজোড়3ধরি n = 2k+14n² = 4k²+4k+15 = 2(2k²+2k)+16n² বিজোড়; মূল দাবি ∎
| k | |
| এই ধাপের মান | |
| কারণ |
- Direct পথ আটকে যায়। p = “n² জোড়”, q = “n জোড়”। n² = 2k ধরলে n = √(2k), কিন্তু বর্গমূলের parity নিয়ে কোনো জানা নিয়ম নেই। এখানে থেমে দিক বদলানো ভালো সিদ্ধান্ত।
- Contrapositive লেখা। ¬q = “n জোড় নয়” = “n বিজোড়” (প্রতিটি পূর্ণসংখ্যা জোড় বা বিজোড়, ঠিক একটি)। ¬p = “n² বিজোড়”। তাই প্রমাণ করব: n বিজোড় হলে n² বিজোড়। p → q ≡ ¬q → ¬p, তাই এটুকুই যথেষ্ট।
- সংজ্ঞা খোলা। ধরি n বিজোড়: কোনো পূর্ণসংখ্যা k-এর জন্য n = 2k + 1. নমুনায় n = 13, k = 6.
- বর্গ। n² = (2k + 1)² = 4k² + 4k + 1. নমুনায় 144 + 24 + 1 = 169 = 13².
- 2 আলাদা করা। n² = 2(2k² + 2k) + 1, আর 2k² + 2k পূর্ণসংখ্যা (closure). নমুনায় 2 · 84 + 1.
- সমাপ্তি। n² বিজোড়ের সংজ্ঞায় পড়ে, তাই ¬q → ¬p প্রমাণিত। সমতুল্যতার কারণে মূল দাবি “n² জোড় হলে n জোড়”-ও প্রমাণিত। ∎ এটি উপপাদ্য ২.১-এর m = n ক্ষেত্রই; নতুন কাজ শুধু দিক বদলানো।
কখন contrapositive বেছে নেবেন? যখন উপসংহার q-এর অস্বীকার ¬q থেকে একটি সুবিধাজনক সমীকরণ পাওয়া যায়, অথচ p থেকে পাওয়া যায় না। বিশেষ করে যখন q দেখতে “নেতিবাচক” (“… নয়”, “… অমূলদ”) বা “অথবা” দিয়ে গড়া। বাজারঘরের একটি কুপন নিয়ম দেখুন:
একটি অর্ডারে দুটি পণ্য, দাম x আর y টাকা (বাস্তব সংখ্যা)। x + y ≥ 1000 হলে x ≥ 500 অথবা y ≥ 500.
প্রমাণ (contrapositive):
- Contrapositive: “x ≥ 500 অথবা y ≥ 500” মিথ্যা হলে x + y ≥ 1000 মিথ্যা। De Morgan-এর নিয়মে (পর্ব ০৩) প্রথম অংশের অস্বীকার হলো “x < 500 এবং y < 500”. — contrapositive, De Morgan
- ধরি x < 500 আর y < 500. — অনুমান
- অসমতা যোগ করলে x + y < 500 + 500 = 1000. — অসমতার যোগ
- অর্থাৎ x + y ≥ 1000 মিথ্যা; contrapositive প্রমাণিত, তাই মূল দাবিও। ∎
বাস্তব অর্থ: ১০০০ টাকার বেশি বিলে “অন্তত একটি পণ্য ৫০০ টাকা বা বেশি দামের” ধরে নিয়ে কুপন ডিজাইন করা যায়। Direct পথে “x + y ≥ 1000 থেকে x বা y বড়” দেখাতে আপনাকে আবার দুই ক্ষেত্রে ভাঙতে হতো; উল্টো দিক থেকে এক লাইনেই শেষ।
Contrapositive আর converse গুলিয়ে ফেলবেন না। p → q-এর converse হলো q → p, যা মূল বাক্যের সমতুল্য নয়। “n² জোড় হলে n জোড়”-এর converse “n জোড় হলে n² জোড়” — এটিও সত্য, কিন্তু আলাদা প্রমাণ লাগে (n = 2k হলে n² = 2(2k²)). কোনো বাক্যের converse প্রমাণ করে মূল বাক্য প্রমাণিত বলা খুব সাধারণ ভুল; §৮-এ আবার দেখবেন।
৪ · Vacuous আর trivial proof — যখন প্রমাণ প্রায় বিনা কাজে
p → q-এর truth table-এ দুটি সহজ সারি আছে: p মিথ্যা হলে বাক্যটি সত্য, q যা-ই হোক; আর q সত্য হলে বাক্যটি সত্য, p যা-ই হোক। এই দুটি থেকে দুটি ছোট পদ্ধতি আসে।
Vacuous proof
p যে মিথ্যা তা দেখালেই p → q প্রমাণিত। এটি ফাঁকা সত্য-এর ব্যবহার, তাই নাম vacuous proof.
Trivial proof
q যে সত্য তা p ব্যবহার না করেই দেখালে p → q প্রমাণিত। এর নাম trivial proof.
উদাহরণ (vacuous): P(n): “n > 1 হলে n² > n”. দাবি: P(0) সত্য। প্রমাণ: 0 > 1 মিথ্যা, তাই শর্তসাপেক্ষ বাক্যটি ফাঁকাভাবে সত্য। ∎ (n² = 0 > 0 মিথ্যা হওয়ায় কিছু আসে-যায় না।) বাজারঘরের ভাষায়: “যে অর্ডারে পণ্যের সংখ্যা ঋণাত্মক, সেই অর্ডার ফ্রি ডেলিভারি পায়” বাক্যটি সত্য, কারণ এমন অর্ডার নেই। প্রোগ্রামেও একই নিয়ম: Python-এ all([]) ফেরত দেয় True, কারণ “তালিকার প্রতিটি উপাদান শর্ত মানে” দাবি ভাঙার মতো কোনো উপাদান নেই।
উদাহরণ (trivial): P(n): “a আর b ধনাত্মক পূর্ণসংখ্যা, a ≥ b হলে an ≥ bn”. দাবি: P(0) সত্য। প্রমাণ: a0 = 1 = b0, তাই a0 ≥ b0 সবসময় সত্য, শর্ত a ≥ b ব্যবহার না করেই। ∎
এগুলো খেলনা মনে হলেও দুই জায়গায় খুব কাজের। এক, পর্ব ১০ “Mathematical induction — এক ধাপ থেকে অসীম পর্যন্ত”-এ প্রায়ই basis ক্ষেত্রটি vacuous বা trivial হয়, আর সেটি স্পষ্ট লিখতে হয়। দুই, প্রোগ্রামের specification-এ ফাঁকা তালিকা বা শূন্য ইনপুটের “প্রান্তিক ক্ষেত্র” প্রায়ই ফাঁকাভাবে সত্য, আর পরীক্ষকেরা ঠিক এটিই জিজ্ঞেস করেন: “ফাঁকা অর্ডার তালিকার প্রতিটি অর্ডার পরিশোধিত কি?” উত্তর হ্যাঁ।
স্কুলের নিয়ম: “যে ছাত্র মঙ্গল গ্রহ থেকে এসেছে, তাকে ইউনিফর্ম পরতে হবে না।” নিয়মটি কখনো ভাঙা যায় না, কারণ শর্ত পূরণ করে এমন কেউ নেই। নিয়মটি সত্য, কিন্তু কিছু বলে না। Vacuous proof ঠিক এমন: বৈধ, কিন্তু শুধু সেই জায়গায় দরকারি যেখানে শর্ত সত্যিই কখনো পূরণ হয় না।
৫ · Contradiction দিয়ে প্রমাণ — √2 কেন ভগ্নাংশ নয়
Proof by contradiction (বিরোধের মাধ্যমে প্রমাণ; লাতিন নাম reductio ad absurdum) এভাবে চলে: একটি বাক্য p প্রমাণ করতে ধরে নিন ¬p সত্য। তারপর যুক্তি চালিয়ে এমন একটি বাক্য r বের করুন, যার সঙ্গে ¬r-ও সত্য হয়: অর্থাৎ r ∧ ¬r, একটি contradiction (সবসময় মিথ্যা বাক্য)। মিথ্যা কিছু বেরিয়েছে মানে অনুমানটিই মিথ্যা: ¬p মিথ্যা, তাই p সত্য। Logic-এর ভাষায় (¬p → (r ∧ ¬r)) → p একটি tautology. Conditional p → q-এর জন্য ধরে নিতে হয় p ∧ ¬q, কারণ ¬(p → q) ≡ p ∧ ¬q.
থানায় সন্দেহভাজন বললেন: “ঘটনার সময় আমি মিরপুরের দোকানে ছিলাম।” তদন্তকারী বললেন, “ঠিক আছে, ধরে নিলাম আপনার কথা সত্য। তাহলে ঠিক সেই সময়ে আপনার মোবাইলের লোকেশন মিরপুর হওয়ার কথা। কিন্তু লোকেশন বলছে উত্তরা।” দাবি মেনে নিয়ে তার পরিণতি থেকে অসম্ভব কিছু বের হলো, তাই দাবিটি মিথ্যা। গণিতে আমরা ঠিক এটিই করি, শুধু “লোকেশন” হলো আগে প্রমাণিত উপপাদ্য।
সবচেয়ে বিখ্যাত উদাহরণ: √2 অমূলদ। আগে একটি সহায়ক তথ্য, যা প্রমাণে লাগবে: প্রতিটি মূলদ সংখ্যাকে লঘিষ্ঠ আকারে (lowest terms) লেখা যায়, অর্থাৎ a/b আকারে যেখানে a আর b-এর 1 ছাড়া কোনো সাধারণ ধনাত্মক উৎপাদক নেই। (যেকোনো p/q-এর লব আর হরকে তাদের গরিষ্ঠ সাধারণ গুণনীয়ক দিয়ে ভাগ করলেই হয়; GCD-র বিস্তারিত পর্ব ২১ “GCD আর Euclid-এর algorithm”-এ।)
√2 অমূলদ, অর্থাৎ এমন কোনো পূর্ণসংখ্যা a, b (b ≠ 0) নেই যে √2 = a/b.
1ধরি √2 = a/b, লঘিষ্ঠ2a² = 2b²3a² জোড় ⟹ a জোড়4a = 2c ⟹ b² = 2c²5b² জোড় ⟹ b জোড়62 ∣ a আর 2 ∣ b: বিরোধ7√2 অমূলদ ∎
| জানা | |
| নতুন | |
| কারণ |
- উল্টোটা ধরে নেওয়া। ধরি √2 মূলদ। তাহলে লঘিষ্ঠ আকারে √2 = a/b, যেখানে a, b পূর্ণসংখ্যা, b ≠ 0, আর a ও b-এর 1 ছাড়া কোনো সাধারণ ধনাত্মক উৎপাদক নেই। এই “লঘিষ্ঠ” শর্তটিই পরে ভাঙবে; তাই এটি শুরুতেই স্পষ্ট লিখে রাখা জরুরি।
- ভগ্নাংশ সরানো। দুই দিক বর্গ করে 2 = a²/b², তারপর b² দিয়ে গুণ: a² = 2b². এখন সবকিছু পূর্ণসংখ্যায়, যেখানে আমাদের জোড়-বিজোড়ের অস্ত্র কাজ করে।
- a জোড়। a² = 2 · (b²), আর b² পূর্ণসংখ্যা, তাই সংজ্ঞায় a² জোড়। উপপাদ্য ৩.১ (contrapositive দিয়ে প্রমাণ করা) বলে a² জোড় হলে a জোড়। আগের উপপাদ্য এখানে কাজে লাগল।
- a বসানো। a জোড়, তাই কোনো পূর্ণসংখ্যা c-এর জন্য a = 2c. a² = 2b²-এ বসালে 4c² = 2b², দুই দিক 2 দিয়ে ভাগ করে b² = 2c².
- b জোড়। ঠিক ধাপ ৩-এর যুক্তি b-এর ওপর: b² = 2 · (c²) জোড়, তাই উপপাদ্য ৩.১ অনুযায়ী b জোড়।
- বিরোধ। a আর b দুটোই জোড়, অর্থাৎ 2 ∣ a আর 2 ∣ b (∣ পড়া হয় “ভাগ করে”)। তাহলে 2 তাদের একটি সাধারণ উৎপাদক, অথচ ধাপ ১-এ a/b লঘিষ্ঠ ধরেছিলাম। r = “a/b লঘিষ্ঠ”, আর আমরা পেলাম r ∧ ¬r.
- সমাপ্তি। “√2 মূলদ” অনুমান থেকে অসম্ভব বাক্য এসেছে, তাই অনুমানটি মিথ্যা। √2 অমূলদ। ∎
এই প্রমাণ কেন অসীম অনুসন্ধানের চেয়ে শক্তিশালী, তা দেখতে একবার খুঁজে দেখা যাক: q = 1 থেকে 10000 পর্যন্ত প্রতিটি হরের জন্য এমন লব p আছে কি, যাতে p² = 2q²? সঙ্গে দেখব কোন ভগ্নাংশগুলো “প্রায়” মিলে যায়।
from math import isqrt
# √2 = p/q হলে p² = 2q². q = 1 … 10000 পর্যন্ত খুঁজি
found, near = [], []
for q in range(1, 10_001):
p = isqrt(2 * q * q) # p² ≤ 2q² এমন সবচেয়ে বড় p
for c in (p, p + 1):
d = c * c - 2 * q * q
if d == 0:
found.append((c, q))
elif abs(d) == 1:
near.append((c, q, d))
print("exact p/q with p^2 = 2q^2:", found)
print("near misses, p^2 - 2q^2 = ±1:")
for c, q, d in near:
print(f" {c}/{q} diff {d:+d} value {c / q:.10f}")
print("sqrt(2) as float: ", f"{2 ** 0.5:.10f}")আসল আউটপুট (ব্রাউজারের Python):
exact p/q with p^2 = 2q^2: []
near misses, p^2 - 2q^2 = ±1:
1/1 diff -1 value 1.0000000000
3/2 diff +1 value 1.5000000000
7/5 diff -1 value 1.4000000000
17/12 diff +1 value 1.4166666667
41/29 diff -1 value 1.4137931034
99/70 diff +1 value 1.4142857143
239/169 diff -1 value 1.4142011834
577/408 diff +1 value 1.4142156863
1393/985 diff -1 value 1.4142131980
3363/2378 diff +1 value 1.4142136249
8119/5741 diff -1 value 1.4142135516
sqrt(2) as float: 1.4142135624
দশ হাজার হরের কোনোটিতে সঠিক সমাধান নেই। কিন্তু কয়েকটি ভগ্নাংশ ভয়ংকর কাছে: 99/70-এ 99² = 9801, আর 2 · 70² = 9800, পার্থক্য মাত্র 1. 8119/5741 দশমিকের পরে সাত ঘর পর্যন্ত √2-এর সঙ্গে মেলে। “প্রায় মিলছে” দেখে কেউ ভাবতে পারতেন বড় q-তে মিলে যাবে; অনুসন্ধান যত বড়ই হোক, এই সন্দেহ দূর করতে পারে না। দূর করে শুধু উপরের সাত ধাপ, যা প্রতিটি q-এর জন্য একসঙ্গে বলে “না”। (এই কাছাকাছি ভগ্নাংশগুলো p² − 2q² = ±1 সমীকরণের সমাধান, যাকে Pell-ধরনের সমীকরণ বলে; এদের নিয়ম আপনি নিজে খুঁজে দেখতে পারেন: p/q-এর পরেরটি (p + 2q)/(p + q).)
Contradiction না contrapositive? p → q-এর যেকোনো contrapositive প্রমাণকে contradiction-এ রূপান্তর করা যায়: “p ∧ ¬q ধরি; ¬q থেকে ¬p পাই; p ∧ ¬p বিরোধ।” তবে যখন প্রমাণটি আসলে ¬q থেকে সরাসরি ¬p দেয়, তখন contrapositive হিসেবে লেখাই পরিষ্কার। Contradiction-এর আসল শক্তি সেখানে, যেখানে দাবিটি “কোনো … নেই” বা “অসীম” ধরনের: এমন দাবি সরাসরি ধরার মতো কোনো বস্তু দেয় না, কিন্তু উল্টোটা ধরলে হাতে একটি নির্দিষ্ট বস্তু (একটি ভগ্নাংশ a/b, একটি সসীম তালিকা) আসে।
৬ · মৌলিক সংখ্যা অসীম — Euclid-এর প্রমাণ আর একটি প্রচলিত ভুল
একটি মৌলিক সংখ্যা (prime) হলো 1-এর চেয়ে বড় এমন পূর্ণসংখ্যা, যার ধনাত্মক ভাজক শুধু 1 আর সে নিজে। বাজারঘর অর্ডার আইডির hashing-এ মৌলিক সংখ্যা ব্যবহার করে (পর্ব ২৬-এ দেখবেন), আর প্রকৌশলীর প্রশ্ন: যত বড় চাই, তত বড় মৌলিক কি সবসময় পাওয়া যাবে? প্রমাণে একটি তথ্য লাগবে, যা আগে প্রমাণিত ধরে নিচ্ছি:
1-এর চেয়ে বড় প্রতিটি পূর্ণসংখ্যার অন্তত একটি মৌলিক ভাজক আছে। (কারণ সংক্ষেপে: n-এর 1-এর চেয়ে বড় ভাজকগুলোর মধ্যে সবচেয়ে ছোটটি মৌলিক হতেই হবে, নইলে তার একটি আরও ছোট ভাজক n-কেও ভাগ করত। পূর্ণ প্রমাণ পর্ব ১১ “Strong induction আর well-ordering”-এ।)
মৌলিক সংখ্যা অসীম সংখ্যক।
প্রমাণ (contradiction):
- ধরি মৌলিক সংখ্যা সসীম, আর তাদের সম্পূর্ণ তালিকা p1, p2, …, pn. — অনুমান (দাবির অস্বীকার)
- Q = p1p2⋯pn + 1 লিখি। Q একটি পূর্ণসংখ্যা, আর Q ≥ 2 + 1 > 1. — closure; তালিকায় অন্তত 2 আছে
- Lemma ৬.১ অনুযায়ী Q-এর একটি মৌলিক ভাজক p আছে। — lemma
- তালিকাটি সম্পূর্ণ, তাই p তালিকার কোনো একটি pi; ফলে p ∣ p1p2⋯pn. — ধাপ ১
- p ∣ Q আর p ∣ p1⋯pn, তাই p তাদের পার্থক্যকেও ভাগ করে: p ∣ Q − p1⋯pn = 1. — a ∣ x আর a ∣ y হলে a ∣ x − y
- কিন্তু কোনো মৌলিক সংখ্যা 1-কে ভাগ করে না, কারণ p ≥ 2. এটি বিরোধ। — মৌলিকের সংজ্ঞা
- অতএব অনুমান মিথ্যা; মৌলিক সংখ্যা অসীম। ∎
প্রচলিত ভুল বিবৃতি: অনেক বইয়ের সারাংশে, ক্লাস-নোটে আর AI-এর উত্তরে লেখা থাকে “p1⋯pn + 1 নিজেই একটি নতুন মৌলিক সংখ্যা”। প্রমাণ এটি বলে না। প্রমাণ শুধু বলে Q-এর কোনো মৌলিক ভাজক তালিকার বাইরে। প্রথম ছয়টি মৌলিকের গুণফলে এক যোগ করে দেখুন: 2·3·5·7·11·13 + 1 = 30031 = 59 · 509, মৌলিক নয়। তবে 59 আর 509 দুটোই তালিকার (2 থেকে 13) বাইরে, ঠিক যেমন প্রমাণ বলে।
যাচাই করে দেখা যাক, প্রথম আটটি মৌলিকের ক্ষেত্রে Q কেমন:
from math import prod
def factor(n):
# ছোট থেকে বড় ভাজক দিয়ে ভাগ করে মৌলিক উৎপাদক
f, d = [], 2
while d * d <= n:
while n % d == 0:
f.append(d)
n //= d
d += 1
return f + [n] if n > 1 else f
primes = [2, 3, 5, 7, 11, 13, 17, 19]
for k in range(1, len(primes) + 1):
P = primes[:k]
Q = prod(P) + 1
fs = factor(Q)
tag = "prime" if len(fs) == 1 else " x ".join(map(str, fs))
fresh = all(p not in P for p in fs)
print(f"up to {P[-1]:>2}: Q = {Q:<8} {tag:<14} new? {fresh}")
print("check:", 2 * 3 * 5 * 7 * 11 * 13 + 1, "=", 59 * 509)আসল আউটপুট (ব্রাউজারের Python):
up to 2: Q = 3 prime new? True
up to 3: Q = 7 prime new? True
up to 5: Q = 31 prime new? True
up to 7: Q = 211 prime new? True
up to 11: Q = 2311 prime new? True
up to 13: Q = 30031 59 x 509 new? True
up to 17: Q = 510511 19 x 97 x 277 new? True
up to 19: Q = 9699691 347 x 27953 new? True
check: 30031 = 30031
প্রথম পাঁচবার Q মৌলিক; এখানে থামলে কেউ ভুল সাধারণীকরণ করতেন। ষষ্ঠবার 30031 = 59 · 509, সপ্তমবার 510511 = 19 · 97 · 277, অষ্টমবার 9699691 = 347 · 27953. শেষ কলামে প্রতিবার True: প্রতিটি উৎপাদক তালিকার বাইরে, যা প্রমাণের ধাপ ৫-এর কারণে অবধারিত। খেয়াল করুন, 510511-এর উৎপাদক 19 তালিকায় পরের মৌলিক; নতুন মৌলিক বড় হবে, এমন কোনো নিশ্চয়তাও প্রমাণ দেয় না। শেষ লাইনে 59 · 509 গুণ করে আবার 30031 পাওয়া গেল।
এই যুক্তি Euclid-এর Elements (খ্রিস্টপূর্ব আনুমানিক ৩০০ সাল), নবম খণ্ডের প্রস্তাব ২০-এ পাওয়া যায়। মূল লেখায় দাবিটি ছিল “মৌলিক সংখ্যা যেকোনো নির্দিষ্ট সংখ্যক মৌলিকের চেয়ে বেশি”, আর Euclid তিনটি মৌলিক নিয়ে যুক্তিটি দেখান। ইতিহাসবিদদের একাংশের মতে মূল যুক্তিটি আসলে contradiction নয়, বরং সরাসরি: “যেকোনো সসীম তালিকা দিলে তার বাইরের একটি মৌলিক দেখানো যায়।” আধুনিক বইয়ে দুটি রূপই চলে। √2-এর অমূলদতাও প্রাচীন গ্রিসে জানা ছিল; Aristotle এটিকে বিরোধের মাধ্যমে প্রমাণের উদাহরণ হিসেবে উল্লেখ করেন বলে প্রচলিত। আবিষ্কারের জন্য Hippasus নামের একজন পিথাগোরীয়কে সমুদ্রে ডুবিয়ে মারার গল্পটি পরবর্তী কালের, আর নির্ভরযোগ্য সূত্রে প্রমাণিত নয়।
৭ · “যদি এবং কেবল যদি” — দুই দিকের প্রমাণ
অনেক উপপাদ্যের আকার p ↔ q (if and only if, সংক্ষেপে iff, বাংলায় “যদি এবং কেবল যদি”)। পর্ব ০২-এর biconditional থেকে জানেন, p ↔ q ≡ (p → q) ∧ (q → p). তাই প্রমাণ দুই অংশে: (⇒) p ধরে q, আর (⇐) q ধরে p. দুই অংশে আলাদা পদ্ধতিও ব্যবহার করা যায়।
n একটি পূর্ণসংখ্যা। n বিজোড় যদি এবং কেবল যদি n² বিজোড়।
প্রমাণ:
- (⇒) n বিজোড় হলে n² বিজোড়: উপপাদ্য ২.১-এ m = n বসিয়ে (direct proof).
- (⇐) n² বিজোড় হলে n বিজোড়: contrapositive হলো “n জোড় হলে n² জোড়”। ধরি n = 2k; তাহলে n² = 4k² = 2(2k²), আর 2k² ∈ ℤ, তাই n² জোড়।
- দুই দিক প্রমাণিত, তাই biconditional প্রমাণিত। ∎
কয়েকটি বাক্য সমতুল্য — চক্র দিয়ে প্রমাণ
কখনো দাবি হয় “নিচের বাক্যগুলো সমতুল্য”: p1 ↔ p2 ↔ … ↔ pk. প্রতিটি জোড়ার দুই দিক আলাদা প্রমাণ করলে অনেক কাজ (k = 3-এ ছয়টি conditional). চতুর উপায়: একটি চক্র p1 → p2 → p3 → p1 প্রমাণ করুন। Hypothetical syllogism-এর শিকলে (পর্ব ০৬) যেকোনো pi থেকে যেকোনো pj-তে পৌঁছানো যায়।
পূর্ণসংখ্যা n-এর জন্য নিচের তিনটি সমতুল্য: (p1) n জোড়; (p2) n − 1 বিজোড়; (p3) n² জোড়।
প্রমাণ (চক্র):
- p1 → p2: n = 2k হলে n − 1 = 2k − 1 = 2(k − 1) + 1, আর k − 1 ∈ ℤ; তাই n − 1 বিজোড়। — direct
- p2 → p3: n − 1 = 2k + 1 হলে n = 2k + 2 = 2(k + 1), আর n² = 4(k + 1)² = 2 · 2(k + 1)²; তাই n² জোড়। — direct
- p3 → p1: উপপাদ্য ৩.১। — আগে প্রমাণিত (contrapositive দিয়ে)
- চক্র সম্পূর্ণ, তাই তিনটি বাক্য পরস্পর সমতুল্য। ∎
Iff প্রমাণে সবচেয়ে সাধারণ ভুল: এক দিক প্রমাণ করে থেমে যাওয়া, বা দুইবার একই দিক প্রমাণ করা (একবার direct, একবার contrapositive দিয়ে, ভেবে যে দুই দিক হলো)। p → q আর ¬q → ¬p একই দিক! উল্টো দিক হলো q → p, অথবা তার contrapositive ¬p → ¬q. প্রতিটি অংশের শুরুতে স্পষ্ট লিখুন (⇒) বা (⇐), আর কী ধরে নিচ্ছেন।
৮ · প্রমাণের সাধারণ ভুল — ভুল ধরা শেখা
ভালো প্রমাণ লেখার সমান গুরুত্বপূর্ণ ভুল প্রমাণ চেনা: নিজের খাতায়, বইয়ে, আর এখন AI-এর উত্তরে। চারটি ভুল সবচেয়ে বেশি দেখা যায়।
ভুল ১: উপসংহার ধরে নিয়ে শুরু করা
দাবি: প্রতিটি বাস্তব x-এর জন্য x² + 1 ≥ 2x. একজন লিখলেন: “x² + 1 ≥ 2x ⟹ x² − 2x + 1 ≥ 0 ⟹ (x − 1)² ≥ 0, যা সত্য। ∎” এখানে যা প্রমাণ করার কথা, সেখান থেকে শুরু করে একটি সত্য বাক্যে পৌঁছানো হয়েছে। এটি দেখায় শুধু “দাবি → সত্য বাক্য”, যা দাবি মিথ্যা হলেও ঘটতে পারে: “−1 = 1” থেকে দুই দিক বর্গ করে “1 = 1” পাওয়া যায়, অথচ −1 = 1 মিথ্যা। এই ভুলের নাম begging the question বা circular reasoning, অথবা উল্টো দিকে লেখা।
সংশোধন: খসড়ায় উল্টো দিকে ভাবা ঠিক আছে, কিন্তু চূড়ান্ত প্রমাণ সামনে লিখুন: “যেকোনো বাস্তব সংখ্যার বর্গ অঋণাত্মক, তাই (x − 1)² ≥ 0. বিস্তার করে x² − 2x + 1 ≥ 0. দুই দিকে 2x যোগ করে x² + 1 ≥ 2x. ∎” এখানে প্রতিটি ধাপ উল্টানো যায় বলেই সংশোধন সম্ভব হলো; বর্গ করার মতো এক-দিকের ধাপ থাকলে হতো না।
ভুল ২: Converse প্রমাণ করা
দাবি “n² বিজোড় হলে n বিজোড়”-এর প্রমাণে কেউ লিখলেন “ধরি n = 2k + 1; n² = 2(2k² + 2k) + 1 বিজোড়। ∎” এটি প্রমাণ করেছে “n বিজোড় হলে n² বিজোড়”, অর্থাৎ converse. এই ক্ষেত্রে converse-টিও সত্য বলে ভুলটি চোখে পড়ে না, কিন্তু “a² = b² হলে a = b” ধরনের দাবিতে converse সত্য (a = b হলে a² = b²) অথচ মূল দাবি মিথ্যা।
ভুল ৩: উদাহরণ থেকে সাধারণ দাবি
কয়েকটি উদাহরণ একটি “সব”-দাবি প্রমাণ করে না, কিন্তু একটি counterexample তা খণ্ডন করে। নিচের ব্লক কয়েকটি বিশ্বাসযোগ্য দাবির প্রথম counterexample খোঁজে:
from itertools import product
def is_prime(n):
return n > 1 and all(n % d for d in range(2, int(n ** 0.5) + 1))
def first_cex(name, claim, domain):
# domain-এর প্রথম যে মানে দাবি ভাঙে, সেটি ছাপি
for x in domain:
if not claim(*x):
print(f"{name:26} FALSE at {x}")
return
print(f"{name:26} no counterexample here")
ones = [(n,) for n in range(1, 300)]
pairs = list(product(range(-5, 6), repeat=2))
first_cex("p prime => 2^p-1 prime",
lambda p: not is_prime(p) or is_prime(2 ** p - 1), ones)
first_cex("n^2+n+1 is prime",
lambda n: is_prime(n * n + n + 1), ones)
first_cex("a^2 = b^2 => a = b",
lambda a, b: a * a != b * b or a == b, pairs)
first_cex("a^2 > b^2 => a > b",
lambda a, b: a * a <= b * b or a > b, pairs)
first_cex("n odd => n^2 odd",
lambda n: n % 2 == 0 or n * n % 2 == 1, ones)
print("2^11 - 1 =", 2 ** 11 - 1, "=", 23 * 89)আসল আউটপুট (ব্রাউজারের Python):
p prime => 2^p-1 prime FALSE at (11,)
n^2+n+1 is prime FALSE at (4,)
a^2 = b^2 => a = b FALSE at (-5, 5)
a^2 > b^2 => a > b FALSE at (-5, -4)
n odd => n^2 odd no counterexample here
2^11 - 1 = 2047 = 2047
প্রথম দাবি p = 2, 3, 5, 7-এ মিলে যায় (3, 7, 31, 127 মৌলিক), তারপর p = 11-এ 2047 = 23 · 89 ভেঙে দেয়। দ্বিতীয়টি n = 1, 2, 3-এ মৌলিক দেয় (3, 7, 13), n = 4-এ 21 = 3 · 7. তৃতীয় আর চতুর্থটি ঋণাত্মক সংখ্যা ভুলে যাওয়ার ফল: (−5)² = 5², আর (−5)² > (−4)² অথচ −5 < −4. এগুলো হলো “শর্তে কী আছে তা ভুলে যাওয়া” ধরনের ভুল: ধনাত্মক সংখ্যার জন্য দুটিই সত্য। শেষ দাবিটির কোনো counterexample নেই, কিন্তু সেটি আমরা প্রমাণ থেকেই জানি, এই ২৯৯টি পরীক্ষা থেকে নয়।
ভুল ৪: লুকানো শূন্য দিয়ে ভাগ — প্রমাণের ভুল ধরুন
নিচের “প্রমাণ” দেখায় 2 = 1. প্রতিটি ধাপ পড়ে ভুলটি নিজে খুঁজুন, তারপর নিচের ব্যাখ্যা পড়ুন।
- ধরি a = b, আর a, b ধনাত্মক।
- দুই দিকে a দিয়ে গুণ: a² = ab.
- দুই দিক থেকে b² বিয়োগ: a² − b² = ab − b².
- উৎপাদকে ভাঙা: (a + b)(a − b) = b(a − b).
- দুই দিক (a − b) দিয়ে ভাগ: a + b = b.
- a = b বসিয়ে: 2b = b, তাই 2 = 1.
ভুল কোথায়: ধাপ ৫. a = b, তাই a − b = 0, আর শূন্য দিয়ে ভাগ সংজ্ঞায়িত নয়। ধাপ ৪ পর্যন্ত সব সমীকরণ সত্য (দুই দিকই 0). শিক্ষা: কোনো রাশি দিয়ে ভাগ করার আগে লিখুন “এটি শূন্য নয় কারণ …”, ঠিক যেমন উপপাদ্য ২.২-এর ধাপ ৪-এ bd ≠ 0 লিখেছিলাম।
প্রমাণের প্রতিটি ধাপের কারণই শুধু নিশ্চিত করে।
আরও গভীরে: Contradiction দিয়ে প্রমাণ সব গণিতবিদ সমানভাবে গ্রহণ করেন না। বিংশ শতকের শুরুতে L. E. J. Brouwer-এর intuitionism আর পরের constructive mathematics “p অথবা ¬p” (law of excluded middle) সব ক্ষেত্রে মানে না; তাদের মতে কোনো বস্তুর অস্তিত্ব দেখাতে হলে তাকে বানিয়ে দেখাতে হয়। এই দৃষ্টিভঙ্গি কম্পিউটার বিজ্ঞানে গুরুত্বপূর্ণ হয়ে উঠেছে: Coq (এখন Rocq) আর Lean-এর মতো proof assistant-এর ভিত্তি এক ধরনের constructive logic, যেখানে একটি constructive প্রমাণ থেকে একটি চালানো যায় এমন প্রোগ্রাম পাওয়া সম্ভব। তবে দুটি সিস্টেমেই চাইলে excluded middle যোগ করা যায়, আর Lean-এর গণিত লাইব্রেরি তা নিয়মিত ব্যবহার করে।
পরীক্ষা ও ইন্টারভিউতে: বিশ্ববিদ্যালয়, চাকরি বা ইন্টারভিউর পরীক্ষায় এই ধরনের প্রশ্ন প্রায়ই আসে:
- দুটি বিজোড় সংখ্যার যোগফল জোড়, প্রমাণ করুন। (2k + 1) + (2l + 1) = 2(k + l + 1), আর k + l + 1 ∈ ℤ.
- 3n + 2 বিজোড় হলে n বিজোড়, প্রমাণ করুন। Contrapositive: n = 2k হলে 3n + 2 = 2(3k + 1) জোড়।
- √3 অমূলদ, প্রমাণ করুন। √2-এর মতোই, তবে “3 ∣ a² হলে 3 ∣ a” লাগে; এর প্রমাণ মৌলিক উৎপাদকের যুক্তিতে, বা a-কে 3 দিয়ে ভাগশেষ ধরে তিন ক্ষেত্রে।
- p1⋯pn + 1 কি সবসময় মৌলিক? না; 2·3·5·7·11·13 + 1 = 30031 = 59 · 509.
- p ↔ q প্রমাণে কী কী দেখাতে হয়? p → q এবং q → p (অথবা q → p-এর বদলে ¬p → ¬q).
৯ · AI-এর যুগে — AI-এর লেখা প্রমাণ কীভাবে যাচাই করবেন
AI সহকারী আত্মবিশ্বাসী ভাষায়, সুন্দর বিন্যাসে প্রমাণ লেখে। কিন্তু এই পর্বের প্রতিটি ভুল সে-ও করে, আর প্রায়ই এমনভাবে যে প্রথমবার পড়ার সময় চোখে পড়ে না। যে ভুলগুলো বেশি দেখা যায়:
| AI-এর ভুল | কীভাবে ধরবেন |
|---|---|
| উপসংহার থেকে শুরু করে সত্য বাক্যে পৌঁছে “∎” (circular) | প্রথম লাইন কী ধরে নিচ্ছে, আর ধাপগুলো কোন দিকে যাচ্ছে, দেখুন |
| Converse প্রমাণ করা, বা iff-এর একটি দিক বাদ | শেষ লাইন আর দাবির → দিক মেলান; iff-এ (⇒) আর (⇐) দুটোই খুঁজুন |
| শূন্য হতে পারে এমন রাশি দিয়ে ভাগ | প্রতিটি ভাগের পাশে “≠ 0 কেন” লেখা আছে কি না দেখুন |
| “p1⋯pn + 1 মৌলিক” ধরনের ভুল বিবৃতি | ছোট ক্ষেত্রে Python-এ হিসাব করুন (30031) |
| উপপাদ্যের শর্ত বাদ (যেমন “লঘিষ্ঠ আকার” ছাড়া √2 প্রমাণ) | প্রতিটি উল্লেখ করা তথ্যের শর্ত জিজ্ঞেস করুন |
| “k একটি পূর্ণসংখ্যা” ধাপ বাদ, বা নমুনা দিয়ে “প্রমাণ” | সংজ্ঞায় ফেরার ধাপটি আছে কি না, আর অক্ষর ইচ্ছামতো কি না দেখুন |
| অস্তিত্বহীন বই, প্রবন্ধ বা উপপাদ্যের নাম | লেখক, বছর আর শিরোনাম একটি বিশ্বস্ত পাঠ্যবইয়ে মিলিয়ে দেখুন |
AI-কে প্রমাণ লিখতে দিলে পদ্ধতি, কারণ আর যাচাইয়ের উপায় চেয়ে নিন। নিচের কাঠামো কাজে দেয়:
AI-এর প্রমাণ হাতে পেলে — যাচাইয়ের চেকলিস্ট
মনে রাখুন, Python-এর পরীক্ষা প্রমাণ নয়, কিন্তু ভুল প্রমাণ ধরার সবচেয়ে সস্তা উপায়: একটি counterexample পেলেই পুরো “প্রমাণ” বাতিল। অ্যালগরিদমের সঠিকতা প্রমাণে এই পদ্ধতিগুলো কীভাবে লাগে, তা DSA কোর্সের পর্ব ৩-এ আছে; আর টেস্ট কেন বাগের উপস্থিতি দেখায় কিন্তু অনুপস্থিতি প্রমাণ করে না, তা সফটওয়্যার ইঞ্জিনিয়ারিং ও Git কোর্সের পর্ব ৪৫-এ।
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিয়ে নিজে কিছুক্ষণ ভাবুন, তারপর “→ উত্তর” চাপুন।
প্র ০১কম্পিউটার কোটি কোটি সংখ্যা পরীক্ষা করতে পারে। তবুও গণিতে প্রমাণ কেন লাগে?
কারণ ইতিহাসে এমন দাবি অনেক আছে, যা বিশাল পরিসরে মিলে গিয়েও শেষ পর্যন্ত মিথ্যা প্রমাণিত হয়েছে। সবচেয়ে নাটকীয় উদাহরণগুলোর একটি Euler-এর একটি অনুমান (conjecture): k-টির কম ধনাত্মক পূর্ণসংখ্যার k-তম ঘাতের যোগফল কখনো একটি k-তম ঘাত হতে পারে না। k = 3-এর জন্য এটি Fermat-এর শেষ উপপাদ্যের একটি রূপ, তাই বিশ্বাসযোগ্য মনে হয়েছিল। প্রায় দুই শতাব্দী পরে, ১৯৬৬ সালে L. J. Lander আর T. R. Parkin কম্পিউটারে অনুসন্ধান করে k = 5-এ একটি counterexample পান: 275 + 845 + 1105 + 1335 = 1445. (এই সমতা Python-এ এক লাইনে যাচাই করা যায়; আমরা করেছি, True আসে।)
আরেকটি উদাহরণ Pólya-র একটি অনুমান, যা ছোট সংখ্যায় সত্য দেখাত। ১৯৫৮ সালে C. B. Haselgrove দেখান এটি কোথাও না কোথাও মিথ্যা, আর পরে ১৯৮০ সালে M. Tanaka সবচেয়ে ছোট counterexample হিসেবে প্রায় ৯০ কোটির একটি সংখ্যা (৯০,৬১,৫০,২৫৭) পান বলে উল্লেখ করা হয়। এর নিচের প্রতিটি সংখ্যায় অনুমানটি মিলত। আর পর্ব ০১-এর n² + n + 41 চল্লিশবার মৌলিক দিয়েছিল।
গভীর কারণ: “সব n” মানে অসীম সংখ্যক ক্ষেত্র। কম্পিউটার যত দ্রুতই হোক, সসীম সময়ে সসীম সংখ্যক ক্ষেত্রই দেখে, আর অসীমের তুলনায় সেটি শূন্যের সমান। প্রমাণ এই সমস্যা পাশ কাটায়: উপপাদ্য ২.১-এর ছয় লাইন একটি ইচ্ছামতো m, n নিয়ে কাজ করে, তাই একবারে সব ক্ষেত্র ঢাকে।
তবু কম্পিউটারের ভূমিকা বড়: counterexample খুঁজে বের করা (একটিই যথেষ্ট), অনুমান তৈরি করা (§২-এর mod 8 প্যাটার্ন), আর সসীম অনেকগুলো ক্ষেত্র নিঃশেষে পরীক্ষা করা, যখন প্রমাণ নিজেই দেখায় যে বাকি ক্ষেত্র নেই। চার রঙের উপপাদ্যের প্রমাণ এভাবেই কম্পিউটার-নির্ভর। পর্ব ০৯-এ exhaustive proof নিয়ে এ বিষয়ে আরও দেখবেন।
মূল উপলব্ধি: পরীক্ষা সন্দেহ কমায়, প্রমাণ সন্দেহ দূর করে। কম্পিউটার অনুমান আর counterexample খোঁজার সেরা সঙ্গী, কিন্তু “সব”-দাবির শেষ কথা একটি প্রমাণ।
প্র ০২Contradiction দিয়ে প্রমাণ নিয়ে গণিতবিদদের মধ্যে বিতর্ক কেন হয়েছিল, আর প্রোগ্রামারের কাছে এর অর্থ কী?
Contradiction-এর ভিত্তি হলো law of excluded middle: প্রতিটি বাক্য p-এর জন্য p ∨ ¬p সত্য। ¬p থেকে বিরোধ পেলে আমরা বলি ¬p মিথ্যা, তাই p সত্য, কারণ তৃতীয় কোনো সম্ভাবনা নেই। বিংশ শতকের শুরুতে ডাচ গণিতবিদ L. E. J. Brouwer প্রশ্ন তোলেন: অসীম সংগ্রহের ক্ষেত্রে এই নিয়ম কি নিশ্চিতভাবে খাটে? তাঁর intuitionism-এ “একটি বস্তু আছে” বলতে হলে বস্তুটি তৈরির একটি পদ্ধতি দিতে হয়; শুধু “না থাকলে বিরোধ হয়” দেখানো যথেষ্ট নয়। David Hilbert-এর মতো গণিতবিদেরা এর তীব্র বিরোধিতা করেন, কারণ তাঁদের মতে excluded middle ছাড়া গণিতের বড় অংশ অচল হয়ে যাবে।
একটি গুরুত্বপূর্ণ সূক্ষ্মতা: “¬p ধরে বিরোধ, তাই p” আর “p ধরে বিরোধ, তাই ¬p” এক নয়। দ্বিতীয়টি (negation-এর প্রমাণ) constructive গণিতেও বৈধ। √2-এর প্রমাণ আসলে দ্বিতীয় ধরনের: “√2 = a/b ধরে বিরোধ, তাই √2 ≠ a/b”. তাই এটি constructivist-দের কাছেও গ্রহণযোগ্য। বিতর্ক মূলত অস্তিত্বের দাবিতে: “কোনো x আছে” দেখাতে “কোনো x নেই ধরে বিরোধ” যথেষ্ট কি না। Euclid-এর প্রমাণও constructive রূপে লেখা যায়: যেকোনো সসীম তালিকা দিলে Q = p1⋯pn + 1-এর সবচেয়ে ছোট মৌলিক ভাজক একটি নতুন মৌলিক, যা আমাদের factor ফাংশন সত্যিই বের করে দেয়।
প্রোগ্রামারের কাছে: Curry–Howard correspondence নামে পরিচিত একটি গভীর সংযোগ অনুযায়ী constructive প্রমাণ আর প্রোগ্রাম আসলে একই জিনিসের দুই রূপ: একটি উপপাদ্য একটি type, আর তার প্রমাণ সেই type-এর একটি মান। Coq (এখন Rocq নামে), Agda, Lean-এর মতো সিস্টেম এর ওপর দাঁড়িয়ে। একটি constructive অস্তিত্ব-প্রমাণ থেকে সরাসরি একটি algorithm বের করা যায়, যা contradiction-নির্ভর প্রমাণ থেকে সাধারণত যায় না।
মূল উপলব্ধি: Contradiction প্রচলিত গণিতে সম্পূর্ণ বৈধ, কিন্তু constructive প্রমাণ বাড়তি কিছু দেয়: বস্তুটি খুঁজে পাওয়ার উপায়। প্রোগ্রামের জন্য সেটিই প্রায়ই আসল চাওয়া।
প্র ০৩Euclid ছাড়াও মৌলিক সংখ্যা অসীম হওয়ার আর কী কী প্রমাণ আছে? একই উপপাদ্যের অনেক প্রমাণ কেন রাখা হয়?
একই উপপাদ্যের ভিন্ন প্রমাণ ভিন্ন জিনিস শেখায়, আর প্রায়ই ভিন্ন দিকে নতুন গণিতের দরজা খোলে। মৌলিক সংখ্যার অসীমতা এর সেরা উদাহরণ।
Euler (অষ্টাদশ শতক): ১৭৩৭ সালের দিকে Leonhard Euler দেখান, মৌলিক সংখ্যার বিপরীতের যোগফল 1/2 + 1/3 + 1/5 + 1/7 + … অসীমে যায় (diverge করে)। মৌলিক সংখ্যা সসীম হলে এই যোগফল সসীম হতো, তাই তারা অসীম। এটি শুধু “অসীম” বলে না, বলে “অনেক ঘন”: যেমন বর্গসংখ্যার বিপরীতের যোগফল সসীম, তাই মৌলিক সংখ্যা এক অর্থে বর্গসংখ্যার চেয়ে বেশি। এই পথ থেকেই পরে analytic number theory আর prime number theorem এসেছে।
Fürstenberg (১৯৫৫): Hillel Fürstenberg ছাত্রাবস্থায় topology (খোলা আর বন্ধ সেটের ধারণা) দিয়ে একটি ছোট প্রমাণ প্রকাশ করেন। গণিতবিদরা এটি পছন্দ করেন, কারণ একেবারে অপ্রত্যাশিত এক শাখা থেকে উপপাদ্যটি আসে।
Fermat সংখ্যা দিয়ে: Fn = 22n + 1 সংখ্যাগুলো পরস্পর সহমৌলিক (কোনো দুটির সাধারণ মৌলিক ভাজক নেই), তাই প্রতিটির একটি আলাদা মৌলিক ভাজক থাকে, আর অসীম সংখ্যক Fn মানে অসীম সংখ্যক মৌলিক। পর্ব ০৪-এ দেখেছেন, F5 নিজে মৌলিক নয়; এই প্রমাণে তা দরকারও নেই, ঠিক Euclid-এর Q-এর মতো।
খোলা প্রশ্ন: Euclid-এর Q-ধরনের সংখ্যা p1⋯pn + 1 (যেখানে p1, …, pn প্রথম n-টি মৌলিক) অসীমবার মৌলিক হয় কি না, আজও জানা নেই বলে আমাদের জানা। সহজ একটি প্রমাণ থেকে এমন কঠিন প্রশ্ন বেরোনো গণিতে সাধারণ ঘটনা। কম্পিউটার বিজ্ঞানে এই উপপাদ্যের ব্যবহারিক রূপ হলো: যত বড় key চাই, তত বড় মৌলিক আছে; RSA-র গণিত পর্ব ২৮-এ আসবে, আর বাস্তব নিরাপত্তার জন্য বড় key, padding আর পরীক্ষিত লাইব্রেরি লাগে।
মূল উপলব্ধি: প্রমাণ শুধু “সত্য কি না” বলে না, “কেন সত্য” বলে। ভিন্ন প্রমাণ ভিন্ন “কেন” দেখায়, আর প্রতিটি নতুন প্রশ্নের জন্ম দেয়।
প্র ০৪বড় প্রমাণ কে যাচাই করে? Informal প্রমাণের ভুল আর computer-checked প্রমাণের যুগ
খাতার প্রমাণ informal: একজন দক্ষ পাঠক প্রতিটি ধাপ বিশ্বাস করতে পারেন বলে ধরে নেওয়া হয়। ছোট প্রমাণে এটি ভালো কাজ করে। কিন্তু শত পৃষ্ঠার প্রমাণে কয়েকজন রিভিউয়ারও সব ধাপ নিশ্চিত করতে পারেন না। ইতিহাসে বিখ্যাত উদাহরণ চার রঙের উপপাদ্য: ১৮৭৯ সালে A. B. Kempe-র একটি “প্রমাণ” প্রায় এগারো বছর গৃহীত ছিল, তারপর ১৮৯০ সালে P. J. Heawood তাতে একটি ভুল দেখান। শেষ পর্যন্ত Appel আর Haken ১৯৭৬ সালে কম্পিউটারের সাহায্যে প্রমাণ দেন, যা নিয়ে আবার প্রশ্ন ওঠে: কম্পিউটারের অংশটি কে যাচাই করবে?
উত্তর: proof assistant. Coq, Lean, Isabelle-এর মতো সফটওয়্যারে প্রমাণকে এমন formal আকারে লিখতে হয়, যার প্রতিটি ধাপ একটি ছোট, বিশ্বস্ত “kernel” যাচাই করে, ঠিক পর্ব ০৬-এর প্রমাণ-যাচাইকারীর মতো, শুধু অনেক সমৃদ্ধ যুক্তিতে। Georges Gonthier-এর দল ২০০৫ সালে চার রঙের উপপাদ্যের সম্পূর্ণ যন্ত্র-যাচাই করে। Thomas Hales ১৯৯৮ সালে Kepler conjecture-এর (গোলক সাজানোর সবচেয়ে ঘন উপায়) একটি বিশাল কম্পিউটার-নির্ভর প্রমাণ দেন; রিভিউয়াররা পুরোপুরি নিশ্চিত হতে পারেননি, তাই Hales-এর নেতৃত্বে Flyspeck প্রকল্প এর formal যাচাই করে, যা ২০১৪ সালে শেষ হয় বলে ঘোষণা করা হয়।
এই পর্বের সঙ্গে সম্পর্ক: formal যাচাই করতে গেলে informal প্রমাণের লুকানো ধাপগুলো বেরিয়ে আসে: “k পূর্ণসংখ্যা কেন”, “bd ≠ 0 কেন”, “লঘিষ্ঠ আকারে লেখা যায় কেন”। আমরা সংখ্যাযুক্ত ধাপে প্রতিটির কারণ লিখে এই অভ্যাসটিই গড়ছি। যে প্রমাণে প্রতিটি ধাপের কারণ আছে, তা মানুষ আর যন্ত্র দুজনেই দ্রুত যাচাই করতে পারে।
AI-এর যুগে: ভাষা-মডেল প্রমাণের খসড়া দিতে পারে, কিন্তু ভুলও করে। তাই সাম্প্রতিক কিছু গবেষণায় মডেলের প্রস্তাবিত প্রমাণ Lean-এর মতো যাচাইকারীতে পাঠানো হয়; যাচাইকারী গ্রহণ করলে তবেই প্রমাণটি বিশ্বাস করা হয়।
মূল উপলব্ধি: প্রমাণের মূল্য তার যাচাইযোগ্যতায়। Informal প্রমাণ মানুষের জন্য, formal প্রমাণ যন্ত্রের জন্য; ভালো informal প্রমাণ এমনভাবে লেখা হয় যে প্রয়োজনে formal-এ রূপান্তর করা যায়।
প্র ০৫√2 অমূলদ, তাহলে কম্পিউটার √2 নিয়ে কীভাবে হিসাব করে? প্রোগ্রামে এর ফল কী?
কম্পিউটারের float (IEEE 754 double) আসলে একটি সসীম ভগ্নাংশ: একটি পূর্ণসংখ্যাকে 2-এর একটি ঘাত দিয়ে গুণ বা ভাগ করা। তাই প্রতিটি float একটি মূলদ সংখ্যা। উপপাদ্য ৫.১ বলে √2 মূলদ নয়, অতএব math.sqrt(2) কখনো সঠিক √2 হতে পারে না; এটি √2-এর সবচেয়ে কাছের float. ফল চোখে পড়ার মতো: Python-এ math.sqrt(2) ** 2 ছাপে 2.0000000000000004, আর math.sqrt(2) ** 2 == 2 হয় False (আমরা চালিয়ে দেখেছি)। একটি গাণিতিক উপপাদ্য এখানে একটি বাগের পূর্বাভাস দেয়।
প্রোগ্রামে শিক্ষা: float-এর তুলনায় == ব্যবহার না করে একটি ছোট সহনশীলতা (tolerance) রাখুন, যেমন math.isclose. বাজারঘরের টাকার হিসাবে float একেবারেই এড়ানো ভালো: পয়সাকে পূর্ণসংখ্যায় রাখুন, বা fractions.Fraction / decimal.Decimal ব্যবহার করুন। Fraction-এ 3/4 + 5/6 ঠিক 19/12 থাকে, কারণ উপপাদ্য ২.২ বলে মূলদের যোগফল মূলদ: সসীম তথ্যে সঠিকভাবে রাখা যায়।
অমূলদকে সঠিকভাবে রাখার উপায়: SymPy-র মতো symbolic লাইব্রেরি √2-কে একটি প্রতীক হিসেবে রাখে, যার নিয়ম “বর্গ করলে 2”. তখন sqrt(2)**2 ঠিক 2 হয়। আর §৫-এর কাছাকাছি ভগ্নাংশগুলো (99/70, 577/408, …) দেখায়, মূলদ সংখ্যা দিয়ে √2-এর যত কাছে খুশি যাওয়া যায়, কিন্তু পৌঁছানো যায় না। এই “যত কাছে খুশি” ধারণাই analysis-এ বাস্তব সংখ্যার সংজ্ঞার ভিত্তি।
আরেকটি সংযোগ: 99² − 2 · 70² = 1 ধরনের সমীকরণ (Pell-ধরনের) প্রাচীন ভারতে Brahmagupta আর পরে Bhaskara II-এর chakravala পদ্ধতিতে বিস্তারিতভাবে সমাধান করা হয়েছিল বলে ইতিহাসে উল্লেখ আছে; ইউরোপে পরে এর নাম ভুলবশত Pell-এর নামে জুড়ে যায় বলে প্রচলিত।
মূল উপলব্ধি: অমূলদতা একটি বিমূর্ত তথ্য নয়; এটি বলে দেয় কোন সংখ্যা কম্পিউটারে সঠিকভাবে রাখা যাবে না। প্রমাণ জানলে বাগটি আগেই আন্দাজ করা যায়।
অনুশীলন
আগে খাতায় করুন, তারপর উত্তর খুলে মেলান।
-
প্রমাণ: n একটি পূর্ণসংখ্যা। প্রমাণ করুন: 3n + 2 বিজোড় হলে n বিজোড়। প্রথমে direct proof-এর চেষ্টা কেন সুবিধাজনক নয় তা এক লাইনে বলুন, তারপর উপযুক্ত পদ্ধতিতে সংখ্যাযুক্ত ধাপে প্রমাণ লিখুন।
Direct: 3n + 2 = 2k + 1 ধরলে n = (2k − 1)/3, যা থেকে n-এর parity সরাসরি বলা যায় না। তাই contrapositive: “n জোড় হলে 3n + 2 জোড়”।
- ধরি n জোড়: কোনো পূর্ণসংখ্যা k-এর জন্য n = 2k. — জোড়ের সংজ্ঞা
- 3n + 2 = 6k + 2 = 2(3k + 1). — বসানো, বণ্টন নিয়ম
- 3k + 1 ∈ ℤ. — closure
- তাই 3n + 2 জোড়; contrapositive প্রমাণিত, অতএব মূল দাবিও। ∎
যাচাই: −100 থেকে 100 পর্যন্ত প্রতিটি n-এ দাবিটি scratch-এ Python দিয়ে পরীক্ষা করা হয়েছে, কোনো ব্যতিক্রম নেই।
-
হিসাব ও প্রমাণ: (ক) 1², 3², 5², 7²-কে 8 দিয়ে ভাগ করলে ভাগশেষ কত? (খ) প্রমাণ করুন: n বিজোড় হলে n²-কে 8 দিয়ে ভাগ করলে ভাগশেষ 1. (সংকেত: k(k + 1) দুটি পরপর পূর্ণসংখ্যার গুণফল।) (গ) 2·3·5·7·11·13·17 + 1-এর মৌলিক উৎপাদক কী কী, আর এর কোনোটি কি 17 বা তার ছোট?
(ক) 1, 9, 25, 49; 8 দিয়ে ভাগশেষ যথাক্রমে 1, 1, 1, 1 (9 = 8 + 1, 25 = 24 + 1, 49 = 48 + 1).
(খ) n = 2k + 1 হলে n² = 4k² + 4k + 1 = 4k(k + 1) + 1. k আর k + 1-এর একটি অবশ্যই জোড় (পরপর দুটি পূর্ণসংখ্যা; k জোড় হলে k-ই, বিজোড় হলে k + 1), তাই k(k + 1) = 2m কোনো পূর্ণসংখ্যা m-এর জন্য। ফলে n² = 8m + 1, অর্থাৎ ভাগশেষ 1. ∎ (“একটি অবশ্যই জোড়” অংশটি দুই ক্ষেত্রে ভাগ করা প্রমাণ; এই কৌশল পর্ব ০৯-এ।) §২-এর Python ব্লক 499 পর্যন্ত বিজোড় n-এ শুধু {1} পেয়েছিল, যা এই প্রমাণের সঙ্গে মেলে।
(গ) 2·3·5·7·11·13·17 = 510510, তাই Q = 510511 = 19 · 97 · 277 (Python ব্লকের আউটপুটে আছে; গুণ করে মেলান: 19 · 97 = 1843, 1843 · 277 = 510511). তিনটি উৎপাদকই 17-এর চেয়ে বড়, Euclid-এর প্রমাণ যেমন বলে।
-
আউটপুট অনুমান: কোড না চালিয়ে বলুন কী ছাপা হবে, আর প্রতিটি লাইনের সঙ্গে কোন উপপাদ্য বা ধারণার সম্পর্ক। তারপর যেকোনো Python-এ চালিয়ে মেলান।
from fractions import Fraction import math r = Fraction(3, 4) + Fraction(5, 6) print(r, r.denominator) print(math.sqrt(2) ** 2 == 2) print(all(n * n > n for n in range(2, 0)))19/12 12 False Trueপ্রথম লাইন: 3/4 + 5/6 = 38/24, যা Fraction নিজে লঘিষ্ঠ করে 19/12 রাখে; উপপাদ্য ২.২ (মূলদের যোগফল মূলদ)। দ্বিতীয় লাইন:
math.sqrt(2)একটি float, অর্থাৎ মূলদ, আর উপপাদ্য ৫.১ অনুযায়ী সঠিক √2 হতে পারে না; বর্গ হয় 2.0000000000000004. তৃতীয় লাইন:range(2, 0)ফাঁকা, তাইallফাঁকাভাবেTrueদেয়; এটি vacuous truth (§৪)। -
প্রমাণের ভুল ধরুন: একজন লিখলেন: “দাবি: n² বিজোড় হলে n বিজোড়। প্রমাণ: ধরি n বিজোড়, n = 2k + 1. তাহলে n² = 4k² + 4k + 1 = 2(2k² + 2k) + 1, যা বিজোড়। অতএব দাবিটি প্রমাণিত। ∎” আরেকজন লিখলেন: “দাবি: সব বাস্তব a, b-এর জন্য a² = b² হলে a = b. প্রমাণ: a = 1, b = 1 নিলে 1 = 1; a = 2, b = 2 নিলে 4 = 4. ∎” প্রতিটি প্রমাণে ভুল কোথায়, আর দাবিগুলো কি সত্য?
- প্রথমটি: converse প্রমাণ করা হয়েছে। দাবির p = “n² বিজোড়”, q = “n বিজোড়”; প্রমাণ ধরে নিয়েছে q, দেখিয়েছে p, অর্থাৎ q → p. দাবিটি নিজে সত্য: সঠিক প্রমাণ contrapositive দিয়ে, “n জোড় হলে n² জোড়” (n = 2k ⟹ n² = 2(2k²)); উপপাদ্য ৭.১-এর (⇐) অংশ।
- দ্বিতীয়টি: দুটি উদাহরণ দিয়ে “সব”-দাবি “প্রমাণ”; তাছাড়া উদাহরণগুলোতে a = b আগেই ধরা, তাই এগুলো শর্তটি পরীক্ষাই করে না। দাবিটি মিথ্যা: a = −5, b = 5-এ a² = b² = 25, কিন্তু a ≠ b; §৮-এর Python ব্লক ঠিক এই counterexample পেয়েছিল। a, b অঋণাত্মক হলে দাবিটি সত্য হয়।
নিজেকে যাচাই করুন
ভুল হলে কারণসহ ব্যাখ্যা পাবেন, আবার চেষ্টাও করতে পারবেন।
ক্রমমৌলিক সংখ্যা অসীম, Euclid-এর এই প্রমাণের ধাপগুলো সঠিক ক্রমে সাজান (▲▼ চেপে সরান)
- ধরে নেওয়া: মৌলিক সংখ্যা সসীম, সম্পূর্ণ তালিকা p1, …, pn
- Q = p1p2⋯pn + 1 তৈরি করা, যা 1-এর চেয়ে বড়
- Q-এর একটি মৌলিক ভাজক p নেওয়া, যা তালিকার কোনো একটি হতে হবে
- p যেহেতু Q আর গুণফল দুটোকেই ভাগ করে, তাই p ∣ 1 পাওয়া
- বিরোধ থেকে সিদ্ধান্ত: অনুমান মিথ্যা, মৌলিক সংখ্যা অসীম
পূর্ণসংখ্যা n-এর জন্য “n² জোড় হলে n জোড়” বাক্যটির contrapositive কোনটি?
- n জোড় হলে n² জোড়
- n² বিজোড় হলে n বিজোড়
- n বিজোড় হলে n² বিজোড়
- n² জোড় এবং n বিজোড়
Proof by contradiction দিয়ে একটি বাক্য p প্রমাণ করতে প্রথমে কী করা হয়?
- p সত্য ধরে নিয়ে একটি সত্য বাক্যে পৌঁছানো হয়
- ¬p সত্য ধরে নিয়ে একটি বিরোধ বের করা হয়
- শর্ত সত্য ধরে সরাসরি উপসংহার দেখানো হয়
- অনেকগুলো উদাহরণে p পরীক্ষা করা হয়
P(n): “n > 1 হলে n² > n”. P(0) সত্য, এটি দেখানোর পদ্ধতির নাম কী?
- Trivial proof
- Proof by contradiction
- Proof by contrapositive
- Vacuous proof
2 · 3 · 5 · 7 · 11 · 13 + 1 = 30031. মৌলিক সংখ্যা অসীম হওয়ার Euclid-এর প্রমাণের আলোকে কোন বক্তব্যটি সঠিক?
- 30031 মৌলিক নয়, কিন্তু এর প্রতিটি মৌলিক উৎপাদক 2 থেকে 13-এর তালিকার বাইরে
- প্রমাণ অনুযায়ী 30031 অবশ্যই মৌলিক
- 30031 যৌগিক বলে Euclid-এর প্রমাণটি ভুল
- 30031-কে 13 দিয়ে ভাগ করা যায়
“n বিজোড় যদি এবং কেবল যদি n² বিজোড়” প্রমাণ করতে কী কী দেখাতে হয়?
- শুধু: n বিজোড় হলে n² বিজোড়
- n বিজোড় হলে n² বিজোড়, এবং n² জোড় হলে n জোড়
- n বিজোড় হলে n² বিজোড়, এবং n² বিজোড় হলে n বিজোড়
- কয়েকটি বিজোড় n-এ n² বিজোড় দেখানো
√2 অমূলদ, এর প্রচলিত প্রমাণে “a/b লঘিষ্ঠ আকারে” শর্তটির ভূমিকা কী?
- এটি শুধু লেখার সুবিধার জন্য, বাদ দিলেও প্রমাণ চলে
- এটি দিয়েই প্রমাণ হয় যে a জোড়
- এটি নিশ্চিত করে যে b শূন্য নয়
- শেষে a, b দুটোই জোড় পাওয়া এই শর্তের সঙ্গে বিরোধ তৈরি করে
শব্দকোষ
লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন, অর্থ দেখাবে। এই পর্বের সব নতুন শব্দ এখানে একসাথে:
মনে রাখুন
- প্রমাণ = axiom, সংজ্ঞা, আগের উপপাদ্য আর অনুমানের নিয়মে গড়া শিকল; প্রথমে সংজ্ঞা খুলুন, শেষে সংজ্ঞায় ফিরুন। উদাহরণ প্রমাণ নয়।
- Direct: p ধরে q. Contrapositive: ¬q ধরে ¬p, যখন ¬q থেকে সমীকরণ পাওয়া সহজ। Vacuous/trivial: p মিথ্যা, বা q এমনিতেই সত্য।
- Contradiction: দাবির অস্বীকার ধরে r ∧ ¬r. √2 অমূলদ (লঘিষ্ঠ a/b থেকে a, b দুটোই জোড়), মৌলিক অসীম (p ∣ 1).
- Euclid-এর Q নিজে মৌলিক হতেই হবে এমন নয়: 30031 = 59 · 509; শুধু তার মৌলিক ভাজক তালিকার বাইরে।
- Iff-এ দুই দিক; সমতুল্যতার চক্রে p1 → p2 → … → p1. ভুল ধরুন: উপসংহার ধরে নেওয়া, converse, উদাহরণে প্রমাণ, শূন্য দিয়ে ভাগ।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- পর্ব ০৯ · প্রমাণের কৌশল — case, existence, uniqueness আর counterexampleপরবর্তী পর্বcase, অস্তিত্ব, অনন্যতা আর counterexample দিয়ে প্রমাণের কৌশল।
- পর্ব ০৬ · অনুমানের নিয়ম — modus ponens থেকে resolutionপুনরালোচনাFormal proof, প্রতিটি লাইনের কারণ আর fallacy.
- পর্ব ০২ · Propositional logic — proposition, connective আর truth tableপুনরালোচনাConditional, converse আর contrapositive-এর truth table.
- ডিসক্রিট ম্যাথমেটিক্স · কোর্স হোম৮৩টি পর্বপুরো কোর্সের মানচিত্র আর ১৪টি মডিউল।
- DSA · পর্ব ৩ · অ্যালগরিদম ঠিক কি নাপ্রমাণের ব্যবহারLoop invariant আর induction দিয়ে অ্যালগরিদমের সঠিকতা।
- সফটওয়্যার ইঞ্জিনিয়ারিং ও Git · পর্ব ৪৫ · Testing-এর মৌলিকটেস্ট বনাম প্রমাণটেস্ট কী দেখাতে পারে আর কী পারে না।