সরাসরি পর্বে যান
পর্ব ৮২ · ৮৩-এর মধ্যে · মডিউল ১৪

প্রমাণ লেখার অনুশীলন — ধাপে ধাপে আদর্শ উত্তর

Proof-Writing Practice — Model Proofs with Marking Rubrics, and Flawed Proofs to Correct

Taught in Bangla, this practice page shows how to read a claim, pick a method, write cleanly and check a draft, then gives 28 model proofs in six groups: direct and contrapositive; contradiction and cases; ordinary, strong and structural induction; counting and pigeonhole; number theory, graphs and groups; invariants and diagonal arguments. Each has marks and a rubric. Six flawed proofs, including the horse-colour induction, are corrected, and six in-page Python blocks brute-force small cases.

এই পর্বে যা শিখবেন

  • একটি বিবৃতির অনুমান, সিদ্ধান্ত আর quantifier আলাদা করে পড়া, আর আকার দেখে প্রমাণের পদ্ধতি বাছা
  • প্রতিটি ধাপের পাশে কারণ লিখে, ক্ষেত্রগুলো পূর্ণ রেখে, ∎ পর্যন্ত পরিষ্কার প্রমাণ লেখা
  • Induction-এর basis, hypothesis আর step আলাদা করে লেখা; strong আর structural রূপ কখন লাগে তা চেনা
  • Double counting, bijection, pigeonhole, invariant আর extremal যুক্তি দিয়ে প্রমাণ সাজানো
  • ভুল প্রমাণের ঠিক কোন লাইনে ফাঁক, তা দেখিয়ে সংশোধিত প্রমাণ লেখা

১ · প্রমাণ লেখার কাঠামো — পড়া, পদ্ধতি বাছাই, লেখা, যাচাই

প্রমাণ লেখা অনেকটা রিকশাওয়ালাকে পথ বোঝানোর মতো: “বাজার থেকে বাঁয়ে, মসজিদের পরে ডানে” — প্রতিটি মোড় বলা থাকলে অচেনা লোকও পৌঁছে যান। পরীক্ষকও আপনার প্রতিটি মোড় মেলান। একটি ধাপ বাদ পড়লে, বা “স্পষ্টতই” লিখে লাফ দিলে, পথ সেখানেই হারায়। পদ্ধতিগুলো এই কোর্সে শেখানো হয়েছে: পর্ব ০৮ “প্রমাণের পদ্ধতি”, পর্ব ০৯ “প্রমাণের কৌশল”, পর্ব ১০ “Mathematical induction”, পর্ব ১১ “Strong induction আর well-ordering” আর পর্ব ১২ “Recursive সংজ্ঞা আর structural induction”. এখানে সেগুলো পরীক্ষার খাতায় লেখার অনুশীলন।

চার ধাপের কাঠামো
পড়া (অনুমান, সিদ্ধান্ত, quantifier) → পদ্ধতি বাছাই → কারণসহ ধাপ, ∎ পর্যন্ত → খসড়ায় ছোট ক্ষেত্রে যাচাই
  1. পড়া: বিবৃতিকে “∀x (P(x) → Q(x))” ধরনের আকারে লিখুন। কোনটি দেওয়া (hypothesis), কোনটি দেখাতে হবে, আর x কোন সেটে, তা আলাদা করুন।
  2. পদ্ধতি: নিচের ছবির সংকেত দেখে বাছুন। প্রথম লাইনেই লিখুন “Contrapositive দিয়ে প্রমাণ করি” — পরীক্ষক তখন পথটি আগে থেকে জানেন।
  3. লেখা: প্রতিটি লাইনের পাশে একটি কারণ: সংজ্ঞা, আগের উপপাদ্য, বীজগণিত, inductive hypothesis. শেষ লাইনে মূল দাবিটি আবার লিখে ∎.
  4. যাচাই: খসড়ায় দু-তিনটি ছোট মানে দাবি মেলান। মিলে গেলেও তা প্রমাণ নয়; না মিললে দাবি বা আপনার পড়া ভুল।

ছবি ৮২.১ — দাবির সংকেত থেকে প্রমাণের পদ্ধতি

বাঁয়ে বিবৃতিতে যা দেখবেন, ডানে প্রথমে যে পদ্ধতি চেষ্টা করবেন

From the signal in a statement to a proof method অনুমান খুললেইসিদ্ধান্ত আসে সিদ্ধান্তের নেগেশননিয়ে কাজ সহজ “নেই”, “অমূলদ”,“অসীম” সব n ≥ n₀, বাrecursive বস্তু দুটি গণনা সমান(সূত্র = সূত্র) বস্তু বেশি, খোপ কম;“অন্তত দুটি” প্রক্রিয়া বা খেলা;“কখনো পৌঁছাবে না” সবচেয়ে লম্বা বাছোটটি নিলে সুবিধা Direct Contrapositive Contradiction Induction Double counting Pigeonhole Invariant Extremal strong, structural বা bijection সন্দেহ হলে আগে ছোট মানে counterexample খুঁজুন

ছবিটি নিয়ম নয়, প্রথম চেষ্টার দিক। একই দাবির একাধিক প্রমাণ থাকে: n³ − n-কে ৬ ভাগ করে, তা induction-এ (গ-০২) বা তিনটি পরপর সংখ্যার গুণফল হিসেবে case দিয়েও দেখানো যায়। নিচের stepper-এ একটি ১০ নম্বরের উত্তর শুরু থেকে ∎ পর্যন্ত গড়া হয়েছে।

প্রতিটি ধাপের পর
ধাপ
খাতায় যা লিখলেন
জমা নম্বর
  1. পড়া — ১ নম্বর। অনুমান 3 ∤ n, সিদ্ধান্ত n² ভাগ ৩-এর ভাগশেষ ১, আর n যেকোনো পূর্ণসংখ্যা। এক লাইনে প্রতীকে লিখলেই পরীক্ষক বোঝেন আপনি দাবিটি ঠিক পড়েছেন।
  2. পদ্ধতি — আরও ১। অনুমানটি “ভাগশেষ ১ বা ২” মাত্র দুটি সম্ভাবনায় ভাঙে, তাই proof by cases. ক্ষেত্রগুলো কোথা থেকে এল, তা division algorithm দিয়ে বলা জরুরি।
  3. ক্ষেত্র ১ — আরও ৩। বর্গ করে ৩-এর গুণিতক আলাদা করা: 3(3k² + 2k) + 1. বন্ধনীর ভেতরটা পূর্ণসংখ্যা, এটি একবার বলা।
  4. ক্ষেত্র ২ — আরও ৩। 4 = 3 + 1 ভেঙে ৩-এর গুণিতকে মেলানো। এখানেই অনেকে “9k² + 12k + 4 ≡ 4” লিখে থেমে যান; 4 ≡ 1 (mod 3) কথাটি লিখতে হয়।
  5. উপসংহার — শেষ ২। মূল দাবি আবার লেখা, আর “ক্ষেত্রগুলো পূর্ণ” কথাটি। এটি বাদ দিলে সাধারণত ১ নম্বর কাটে।
  6. খসড়া। ১ থেকে ১০-এর মধ্যে ৩ দিয়ে বিভাজ্য নয় এমন সাতটি n-এ মিলিয়ে দেখা (scratch script-এ মেলানো)। এটি নম্বর আনে না, কিন্তু ভুল দাবিতে সময় নষ্ট থেকে বাঁচায়।
প্রশ্নের ধরনপড়া ও পদ্ধতিমূল ধাপপূর্ণতা (ক্ষেত্র, basis)উপসংহার
৫ নম্বর১২১১
১০ নম্বর২৫২১
অংশপদ্ধতিমূল পর্বপ্রশ্ন
২Direct, contrapositive, যদি এবং কেবল যদি০৮, ১৪–১৬ক-০১–ক-০৪
৩Contradiction, case, অস্তিত্ব, counterexample০৮, ০৯, ২০খ-০১–খ-০৫
৪Induction: সাধারণ, strong, structural১০–১২গ-০১–গ-০৫
৫Combinatorial, bijective, pigeonhole৩২, ৩৪, ৩৭, ৫৭ঘ-০১–ঘ-০৫
৬সংখ্যাতত্ত্ব, relation, graph, tree, group২১, ৫৫, ৬২, ৬৫, ৭০ঙ-০১–ঙ-০৫
৭Invariant, diagonal, অসম্ভবতা১৩, ১৮, ৭৪চ-০১–চ-০৪
৮ভুল প্রমাণ ধরা আর সংশোধন০৮, ১০, ৩১, ৫৯ত-০১–ত-০৬

এই পাতার কোনো প্রশ্ন কোনো নির্দিষ্ট পরীক্ষা, বিশ্ববিদ্যালয় বা প্রতিষ্ঠান থেকে নেওয়া নয়; এ ধরনের প্রমাণ discrete math-এর কোর্সে, চাকরির লিখিত পরীক্ষায় আর ইন্টারভিউতে প্রায়ই আসে। প্রতিটি প্রশ্ন নিজে লেখার চেষ্টা করুন, তারপর খুলে মেলান। ছয়টি ব্লক ব্রাউজারে Python (Pyodide) চালায়; প্রথমবার নামতে কয়েক সেকেন্ড লাগে। ব্যাখ্যা-আর-তুলনার লিখিত প্রশ্ন আর ভাইভা পর্ব ৮১ “লিখিত ও মৌখিক (ভাইভা) প্রশ্ন — Discrete Mathematics”-এ, হিসাবের অনুশীলন পর্ব ৭৯ “Numerical সমস্যার অনুশীলন”-এ, MCQ পর্ব ৮০ “MCQ প্রশ্নব্যাংক”-এ।

২ · অংশ ক — Direct, contrapositive আর “যদি এবং কেবল যদি”

রিভিশন: পর্ব ০৮ “প্রমাণের পদ্ধতি” (direct, contrapositive, দুই দিকের প্রমাণ), পর্ব ১৫ “সেটের অপারেশন” (element chasing), পর্ব ১৬ “ফাংশন” (one-to-one, onto). এই দলের প্রশ্নে নম্বর আসে সংজ্ঞা ঠিকভাবে খোলা থেকে।

ক-০১প্রমাণ করুন: দুটি বিজোড় পূর্ণসংখ্যার যোগফল জোড়। — ৫ নম্বর (সহজ)

Direct proof: সংজ্ঞা খুলে সোজা পথে।

  1. ধরি m আর n বিজোড়। তাহলে কোনো পূর্ণসংখ্যা a, b-এর জন্য m = 2a + 1, n = 2b + 1. — বিজোড়ের সংজ্ঞা; a আর b আলাদা অক্ষর
  2. m + n = 2a + 2b + 2 = 2(a + b + 1). — বীজগণিত
  3. a + b + 1 পূর্ণসংখ্যা, তাই m + n জোড়। ∎ — জোড়ের সংজ্ঞা

নম্বর-ভাগ: সংজ্ঞা দিয়ে শুরু (১), আলাদা অক্ষর (১), বীজগণিত (২), উপসংহার (১)। যেখানে নম্বর কাটে: দুটির জন্য একই k (m = 2k + 1, n = 2k + 1) লেখা: তাতে শুধু m = n-এর ক্ষেত্র প্রমাণ হয়। “৩ + ৫ = ৮ জোড়” — উদাহরণ প্রমাণ নয়।

ক-০২n একটি পূর্ণসংখ্যা। প্রমাণ করুন: n² জোড় হলে n জোড়। — ৫ নম্বর (সহজ)

সোজা পথে n² = 2k থেকে n বের করা কঠিন (√ নিতে হয়)। তাই contrapositive: “n জোড় নয় ⇒ n² জোড় নয়”, যা মূল দাবির সমতুল্য।

  1. ধরি n বিজোড়: n = 2k + 1. — contrapositive-এর অনুমান
  2. n² = 4k² + 4k + 1 = 2(2k² + 2k) + 1, তাই n² বিজোড়। — বীজগণিত, বিজোড়ের সংজ্ঞা
  3. ¬(n জোড়) → ¬(n² জোড়) প্রমাণ হলো; contrapositive সমতুল্য বলে n² জোড় ⇒ n জোড়। ∎ — p → q ≡ ¬q → ¬p

নম্বর-ভাগ: কোন পদ্ধতি আর কেন (১), contrapositive সঠিকভাবে লেখা (১), বীজগণিত (২), উপসংহারে সমতুল্যতার কথা (১)। যেখানে নম্বর কাটে: converse (“n জোড় ⇒ n² জোড়”) প্রমাণ করা; অংশ ৮-এর ত-০১ দেখুন।

ক-০৩A আর B যেকোনো দুটি সেট। প্রমাণ করুন: A ⊆ B যদি এবং কেবল যদি A ∩ B = A. — ১০ নম্বর (মাঝারি)

যদি এবং কেবল যদি মানে দুটি আলাদা প্রমাণ; আর সেটের সমতা মানে দুই দিকের ⊆ (double inclusion).

  1. (⇒) ধরি A ⊆ B. A ∩ B ⊆ A সবসময় সত্য, কারণ x ∈ A ∩ B হলে x ∈ A. — intersection-এর সংজ্ঞা
  2. উল্টো দিক: x ∈ A নিন। A ⊆ B বলে x ∈ B; তাই x ∈ A ∩ B. সুতরাং A ⊆ A ∩ B. — অনুমান, element chasing
  3. দুই দিকের ⊆ থেকে A ∩ B = A. — সেটের সমতার সংজ্ঞা
  4. (⇐) ধরি A ∩ B = A. x ∈ A নিন; তাহলে x ∈ A ∩ B, তাই x ∈ B. সুতরাং A ⊆ B. ∎ — অনুমানে প্রতিস্থাপন, intersection

নম্বর-ভাগ: দুই দিক ঘোষণা (২), (⇒)-এর দুটি ⊆ (৪), (⇐) (৩), উপসংহার (১)। যেখানে নম্বর কাটে: Venn diagram এঁকে “দেখা যাচ্ছে” লেখা — ছবি একটি উদাহরণ, প্রমাণ নয়; শুধু এক দিক প্রমাণ।

ক-০৪f: A → B আর g: B → C দুটি ফাংশন। প্রমাণ করুন: (ক) f আর g দুটিই one-to-one হলে g ∘ f one-to-one; (খ) g ∘ f onto হলে g onto. — ১০ নম্বর (মাঝারি)
  1. (ক) ধরি g(f(x₁)) = g(f(x₂)), x₁, x₂ ∈ A. — one-to-one-এর সংজ্ঞা অনুযায়ী এটি থেকে শুরু
  2. g one-to-one, তাই f(x₁) = f(x₂). — g-এর ধর্ম
  3. f one-to-one, তাই x₁ = x₂. সুতরাং g ∘ f one-to-one. — f-এর ধর্ম
  4. (খ) যেকোনো c ∈ C নিন। g ∘ f onto বলে কোনো a ∈ A-এর জন্য g(f(a)) = c. — onto-এর সংজ্ঞা
  5. b = f(a) ∈ B নিলে g(b) = c. প্রতিটি c-এর জন্য এমন b আছে, তাই g onto. ∎ — witness নির্মাণ

নম্বর-ভাগ: (ক) সঠিক শুরু আর ক্রম: আগে g, পরে f (৫); (খ) witness b = f(a) দেখানো (৪); উপসংহার (১)। যেখানে নম্বর কাটে: (খ)-তে “f-ও onto” দাবি করা — মিথ্যা: A = {1}, B = {1, 2}, C = {1}, f(1) = 1, g ধ্রুবক; g ∘ f onto, কিন্তু f নয়।

৩ · অংশ খ — Contradiction, case, অস্তিত্ব আর counterexample

রিভিশন: পর্ব ০৮ (√2, মৌলিক সংখ্যা অসীম), পর্ব ০৯ “প্রমাণের কৌশল” (case, অস্তিত্ব, counterexample), পর্ব ২০ “বিভাজ্যতা আর মৌলিক সংখ্যা”। Contradiction-এর প্রথম লাইন সবসময় একই: “বিপরীতে ধরি …”, আর শেষে কোন দুটি কথা পরস্পরবিরোধী, তা নাম ধরে বলা।

খ-০১প্রমাণ করুন: √2 মূলদ সংখ্যা নয়। — ১০ নম্বর (মাঝারি)
  1. বিপরীতে ধরি √2 = p/q, যেখানে p, q পূর্ণসংখ্যা, q ≠ 0, আর ভগ্নাংশটি লঘিষ্ঠ আকারে (gcd(p, q) = 1). — মূলদের সংজ্ঞা; লঘিষ্ঠ আকার সবসময় সম্ভব
  2. বর্গ করে 2q² = p², তাই p² জোড়। — বীজগণিত
  3. ক-০২ অনুযায়ী p জোড়: p = 2r. — আগের ফল
  4. বসালে 2q² = 4r², অর্থাৎ q² = 2r², তাই q²-ও জোড়, আর q জোড়। — একই যুক্তি আবার
  5. p আর q দুটিই জোড়, তাই ২ উভয়কে ভাগ করে; এটি gcd(p, q) = 1-এর বিরোধী। অতএব √2 অমূলদ। ∎ — বিরোধ নাম ধরে

নম্বর-ভাগ: বিপরীত অনুমান আর লঘিষ্ঠ আকার (২), p জোড় কারণসহ (৩), q জোড় (৩), বিরোধ স্পষ্ট (২)। যেখানে নম্বর কাটে: “p² জোড় তাই p জোড়” কারণ ছাড়া; লঘিষ্ঠ আকার না বলা — তখন বিরোধটাই থাকে না।

খ-০২প্রমাণ করুন: মৌলিক সংখ্যা অসীমসংখ্যক। — ১০ নম্বর (মাঝারি)
  1. বিপরীতে ধরি মৌলিক সংখ্যা সসীম: p₁, p₂, …, pk, সবগুলো। — বিপরীত অনুমান
  2. N = p₁p₂…pk + 1 নিন। N ≥ 3 > 1, তাই N-এর অন্তত একটি মৌলিক উৎপাদক q আছে। — পাটিগণিতের মৌলিক উপপাদ্য (পর্ব ১১-এ strong induction-এ প্রমাণিত)
  3. q তালিকার কোনো pi. তাহলে q ∣ p₁…pk আর q ∣ N, তাই q ∣ N − p₁…pk = 1. — দুটি গুণিতকের পার্থক্যও গুণিতক
  4. কোনো মৌলিক সংখ্যা ১-কে ভাগ করে না: বিরোধ। তাই মৌলিক সংখ্যা অসীম। ∎

নম্বর-ভাগ: অনুমান (১), N-এর নির্মাণ (২), মৌলিক উৎপাদকের অস্তিত্ব কারণসহ (২), q ∣ 1 (৩), বিরোধ (২)। যেখানে নম্বর কাটে: “N নিজেই মৌলিক” লেখা — ভুল; প্রথম ছয়টি মৌলিক নিলে N = 30031 = 59 × 509 (নিচের ব্লক)। দাবি শুধু এটুকু: N-এর মৌলিক উৎপাদক তালিকার বাইরে।

খ-০৩প্রমাণ করুন: যেকোনো পূর্ণসংখ্যা n-এর জন্য n² ≡ 0 বা 1 (mod 4). এ থেকে দেখান যে 4k + 3 আকারের কোনো সংখ্যা দুটি পূর্ণবর্গের যোগফল নয়। — ১০ নম্বর (মাঝারি)

Proof by cases, তারপর একটি corollary.

  1. ক্ষেত্র ১: n জোড়, n = 2k. n² = 4k² ≡ 0 (mod 4). — বীজগণিত
  2. ক্ষেত্র ২: n বিজোড়, n = 2k + 1. n² = 4(k² + k) + 1 ≡ 1 (mod 4). প্রতিটি পূর্ণসংখ্যা জোড় বা বিজোড়, তাই ক্ষেত্র পূর্ণ। — বীজগণিত, ক্ষেত্রের পূর্ণতা
  3. Corollary: a² + b²-এর ভাগশেষ (mod 4) হতে পারে 0 + 0, 0 + 1 বা 1 + 1, অর্থাৎ 0, 1 বা 2. — প্রথম অংশ দুবার
  4. 4k + 3 ≡ 3 (mod 4), যা তালিকায় নেই; তাই 4k + 3 = a² + b² অসম্ভব। ∎ — congruence-এর তুলনা

নম্বর-ভাগ: দুটি ক্ষেত্র (২ + ২), পূর্ণতার কথা (১), যোগফলের সম্ভাব্য ভাগশেষ (৩), উপসংহার (২)। যেখানে নম্বর কাটে: n-কে শুধু ধনাত্মক ধরা (দাবি সব পূর্ণসংখ্যার); ঋণাত্মক n-এও একই হিসাব খাটে, এক লাইনে বলুন।

খ-০৪প্রমাণ করুন: এমন দুটি অমূলদ সংখ্যা a, b আছে যাতে ab মূলদ। একটি non-constructive আর একটি constructive প্রমাণ দিন। — ১০ নম্বর (কঠিন)

Non-constructive (অস্তিত্ব দেখায়, কোনটি তা বলে না):

  1. x = √2√2 নিন। x মূলদ হলে a = b = √2 নিলেই হলো (খ-০১ অনুযায়ী √2 অমূলদ)। — ক্ষেত্র ১
  2. x অমূলদ হলে a = x, b = √2: ab = √2√2·√2 = √2² = 2, মূলদ। — ক্ষেত্র ২, ঘাতের নিয়ম
  3. দুই ক্ষেত্রের একটি সত্য, তাই এমন a, b আছে; কিন্তু কোন জোড়াটি, প্রমাণ তা বলে না। ∎

Constructive (witness হাতে দেয়): a = √2, b = log₂9.

  1. ab = 2(1/2)·log₂9 = 2log₂3 = 3, মূলদ। — লগারিদমের নিয়ম
  2. b অমূলদ: বিপরীতে ধরি log₂9 = p/q, p, q ধনাত্মক পূর্ণসংখ্যা। তাহলে 2p = 9q. বাঁ দিক জোড়, ডান দিক বিজোড়: বিরোধ। ∎ — contradiction, parity

নম্বর-ভাগ: দুই ক্ষেত্রের যুক্তি (৪), non-constructive কেন তা বলা (১), constructive উদাহরণ (২), b-এর অমূলদতা (৩)। যেখানে নম্বর কাটে: constructive অংশে b অমূলদ, তা প্রমাণ না করা।

খ-০৫দাবি: “প্রতিটি অঋণাত্মক পূর্ণসংখ্যা n-এর জন্য n² + n + 41 মৌলিক।” দাবিটি সত্য না মিথ্যা? প্রমাণ দিন। — ৫ নম্বর (সহজ)
  1. দাবিটি সর্বজনীন (∀n), তাই একটি counterexample-ই যথেষ্ট। — ¬∀n P(n) ≡ ∃n ¬P(n)
  2. n = 40: 40² + 40 + 41 = 40(40 + 1) + 41 = 41 · 40 + 41 = 41². — বীজগণিত
  3. 41² = 1681 মৌলিক নয় (৪১ দিয়ে বিভাজ্য), তাই দাবি মিথ্যা। ∎

নম্বর-ভাগ: “মিথ্যা” সিদ্ধান্ত (১), counterexample (২), কেন মৌলিক নয় দেখানো (২)। n = 0 থেকে 39 পর্যন্ত মানগুলো মৌলিক (ব্লকে মেলানো), তাই ৪০টি উদাহরণ মিলে গেলেও দাবি প্রমাণ হয় না — এটাই শিক্ষা।

নিচের ব্লক অংশ খ-এর দাবিগুলো ছোট পরিসরে মেলায়। মনে রাখবেন: সসীম পরিসরে মিল প্রমাণ নয়; কিন্তু খ-০২-এর “N মৌলিক” ধরনের ভুল দাবি এক নিমেষে ধরা পড়ে।

from math import isqrt, prod

# 1) squares mod 4 take only the values 0 and 1
print("n^2 mod 4 values:", sorted({n * n % 4 for n in range(-50, 51)}))

# 2) no number 4k+3 below 2000 is a sum of two squares
two_sq = {a * a + b * b for a in range(45) for b in range(45)}
bad = [m for m in range(3, 2000, 4) if m in two_sq]
print("4k+3 that are sums of two squares:", bad)

# 3) p^2 = 2 q^2 has no solution with 1 <= q <= 10**5
hits = [q for q in range(1, 10**5 + 1) if isqrt(2 * q * q) ** 2 == 2 * q * q]
print("q with 2q^2 a perfect square:", hits)

# 4) Euclid's N = p1*...*pk + 1 is NOT always prime
def smallest_factor(n):
    return next((d for d in range(2, isqrt(n) + 1) if n % d == 0), n)
for ps in ([2, 3, 5], [2, 3, 5, 7], [2, 3, 5, 7, 11, 13]):
    N = prod(ps) + 1
    d = smallest_factor(N)
    print(ps, "N =", N, "prime" if d == N else f"= {d} * {N // d}")

# 5) the counterexample to "n^2 + n + 41 is always prime"
def is_prime(m):
    return m > 1 and all(m % d for d in range(2, isqrt(m) + 1))
n = next(n for n in range(100) if not is_prime(n * n + n + 41))
print("first n:", n, "value:", n * n + n + 41, "=", isqrt(n * n + n + 41), "squared")

আসল আউটপুট (ব্রাউজারের Python):

n^2 mod 4 values: [0, 1]
4k+3 that are sums of two squares: []
q with 2q^2 a perfect square: []
[2, 3, 5] N = 31 prime
[2, 3, 5, 7] N = 211 prime
[2, 3, 5, 7, 11, 13] N = 30031 = 59 * 509
first n: 40 value: 1681 = 41 squared

বর্গের ভাগশেষ (mod 4) শুধু 0 আর 1, আর ২০০০-এর নিচে 4k + 3 আকারের কোনো সংখ্যা দুটি বর্গের যোগফল নয়: খ-০৩ মিলেছে। p² = 2q²-এর কোনো সমাধান q ≤ 10⁵-এ নেই, খ-০১-এর সঙ্গে সংগত (তবে এটি প্রমাণ নয়)। Euclid-এর N প্রথম দুই সারিতে মৌলিক, কিন্তু 30031 = 59 × 509: তাই খ-০২-এ “N মৌলিক” লেখা ভুল। আর n² + n + 41 প্রথম ভাঙে n = 40-এ, মান 1681 = 41².

৪ · অংশ গ — Induction: সাধারণ, strong আর structural

রিভিশন: পর্ব ১০ “Mathematical induction”, পর্ব ১১ “Strong induction আর well-ordering”, পর্ব ১২ “Recursive সংজ্ঞা আর structural induction”. খাতায় চারটি অংশ আলাদা শিরোনামে লিখুন: P(n) কী, basis, inductive hypothesis, inductive step. Step-এ “P(k+1)-এর ভেতরে P(k) কোথায়” দেখানোই আসল কাজ।

গ-০১প্রমাণ করুন: প্রতিটি ধনাত্মক পূর্ণসংখ্যা n-এর জন্য 1 + 3 + 5 + … + (2n − 1) = n². — ৫ নম্বর (সহজ)
  1. P(n): প্রথম n বিজোড় সংখ্যার যোগফল n². Basis n = 1: বাঁ দিক 1, ডান দিক 1² = 1. — সরাসরি হিসাব
  2. Hypothesis: কোনো k ≥ 1-এর জন্য 1 + 3 + … + (2k − 1) = k². — P(k) ধরে নেওয়া
  3. Step: 1 + … + (2k − 1) + (2k + 1) = k² + 2k + 1 = (k + 1)². — hypothesis বসিয়ে, তারপর বীজগণিত
  4. তাই P(k) ⇒ P(k + 1); basis আর step মিলে সব n ≥ 1-এর জন্য P(n). ∎ — induction-এর নীতি

নম্বর-ভাগ: P(n) আর basis (১), hypothesis (১), step-এ hypothesis-এর ব্যবহার স্পষ্ট (২), উপসংহার (১)। যেখানে নম্বর কাটে: step-এ বাঁ আর ডান দিক একসঙ্গে বদলে “দুই দিক সমান” থেকে শুরু করা — এটি প্রমাণ করার বদলে ধরে নেওয়া।

গ-০২Induction দিয়ে প্রমাণ করুন: প্রতিটি অঋণাত্মক পূর্ণসংখ্যা n-এর জন্য 6 ∣ n³ − n. — ১০ নম্বর (মাঝারি)
  1. P(n): 6 ∣ n³ − n. Basis n = 0: 0 − 0 = 0, আর 6 ∣ 0. — সংজ্ঞা: 0 = 6 · 0
  2. Hypothesis: কোনো k ≥ 0-এর জন্য k³ − k = 6m. — P(k)
  3. Step: (k + 1)³ − (k + 1) = k³ + 3k² + 3k + 1 − k − 1 = (k³ − k) + 3k(k + 1). — বিস্তার, P(k)-কে আলাদা করা
  4. k(k + 1) দুটি পরপর পূর্ণসংখ্যার গুণফল, তাই জোড়: k(k + 1) = 2t. অতএব 3k(k + 1) = 6t. — একটি জোড়, অন্যটি বিজোড়
  5. (k + 1)³ − (k + 1) = 6m + 6t = 6(m + t), তাই P(k + 1). Induction-এ সব n ≥ 0-এর জন্য সত্য। ∎

নম্বর-ভাগ: basis (১), hypothesis (১), বিস্তার আর P(k) আলাদা (৪), k(k + 1) জোড় কারণসহ (৩), উপসংহার (১)। বিকল্প: n³ − n = (n − 1)n(n + 1), তিনটি পরপর সংখ্যা, তাই ২ আর ৩ দুটিই ভাগ করে, আর gcd(2, 3) = 1 বলে ৬-ও; প্রশ্ন induction চাইলে এটি পুরো নম্বর না-ও পেতে পারে।

গ-০৩প্রমাণ করুন: প্রতিটি পূর্ণসংখ্যা n ≥ 5-এর জন্য 2ⁿ > n². Basis কেন ৫ থেকে, তাও ব্যাখ্যা করুন। — ১০ নম্বর (মাঝারি)
  1. Basis n = 5: 2⁵ = 32 > 25 = 5². — হিসাব
  2. Hypothesis: কোনো k ≥ 5-এর জন্য 2k > k². — P(k)
  3. 2k+1 = 2 · 2k > 2k². — hypothesis, দুই দিকে ২ দিয়ে গুণ
  4. দেখাতে হবে 2k² ≥ (k + 1)², অর্থাৎ k² − 2k − 1 ≥ 0, অর্থাৎ (k − 1)² ≥ 2. k ≥ 5 হলে (k − 1)² ≥ 16 ≥ 2. — বীজগণিত; এখানে k ≥ 5 লাগল (আসলে k ≥ 3-ই যথেষ্ট)
  5. তাই 2k+1 > 2k² ≥ (k + 1)², P(k + 1) সত্য। ∎

কেন ৫: দাবিটি n = 2, 3, 4-এ মিথ্যা (4 = 4, 8 < 9, 16 = 16; নিচের ব্লকে মেলানো)। Step নিজে k ≥ 3 থেকে চলে, কিন্তু basis-কে সত্য হতে হয়; প্রথম সত্য মান যেখান থেকে আর কখনো ভাঙে না, সেটি ৫. নম্বর-ভাগ: basis (১), hypothesis (১), গুণ (২), অসমতার ধাপ শর্তসহ (৪), basis-এর ব্যাখ্যা (২)।

গ-০৪বাজারঘরের টিকিট শুধু ৩ টাকা আর ৫ টাকার। Strong induction দিয়ে প্রমাণ করুন: প্রতিটি পূর্ণসংখ্যা n ≥ 8-এর জন্য n = 3a + 5b, যেখানে a, b অঋণাত্মক পূর্ণসংখ্যা। — ১০ নম্বর (মাঝারি)
  1. P(n): n = 3a + 5b কোনো a, b ≥ 0-এর জন্য। Basis তিনটি: 8 = 3 + 5, 9 = 3 · 3, 10 = 5 · 2. — সরাসরি
  2. Hypothesis (strong): কোনো k ≥ 10-এর জন্য 8 ≤ j ≤ k সব j-তে P(j) সত্য। — সব আগের মান
  3. Step: k + 1 ≥ 11, তাই k − 2 = (k + 1) − 3 ≥ 8, আর hypothesis-এ P(k − 2): k − 2 = 3a + 5b. — পরিসরের ভেতরে আছে কি না যাচাই
  4. k + 1 = 3(a + 1) + 5b, অর্থাৎ P(k + 1). ∎ — একটি ৩ টাকার টিকিট যোগ

কেন তিনটি basis: step তিন ধাপ পেছনে যায়; শুধু 8 প্রমাণ করলে 9 আর 10 কোনো আগের মান থেকে আসে না। 7 = 3a + 5b অসম্ভব, তাই শুরু 8-এ। নম্বর-ভাগ: তিন basis (৩), strong hypothesis সঠিক পরিসরে (২), k − 2 ≥ 8 যাচাই (২), নির্মাণ (২), উপসংহার (১)।

প্রতিটি n-এর পর
n
কোথা থেকে
(a, b)
3a + 5b
  1. Basis ১। 8 = একটি ৩ আর একটি ৫.
  2. Basis ২। 9 = তিনটি ৩. এটি 8 থেকে আসে না, তাই আলাদা basis.
  3. Basis ৩। 10 = দুটি ৫. এখন পরপর তিনটি মান হাতে।
  4. Step, n = 11. 11 − 3 = 8, যার উত্তর (1, 1); a এক বাড়িয়ে (2, 1).
  5. n = 12. 9-এর (3, 0) থেকে (4, 0). Step শুধু “তিন ধাপ পেছনে” তাকায়।
  6. n = 13. 10-এর (0, 2) থেকে (1, 2): 3 + 10 = 13.
  7. n = 14. 11-এর (2, 1) থেকে (3, 1). এখানে hypothesis-এ লাগল আগের step-এর ফল।
  8. n = 15. 12-এর (4, 0) থেকে (5, 0). তিনটি basis-এর তিনটি “সারি” এভাবে চিরকাল চলে; সব মান scratch script-এ মেলানো।
গ-০৫Full binary tree-এর recursive সংজ্ঞা: একটি একক node একটি full binary tree; T₁ আর T₂ full binary tree হলে একটি নতুন root, যার বাঁ subtree T₁ আর ডান subtree T₂, তাও full binary tree. Structural induction দিয়ে প্রমাণ করুন: leaf-এর সংখ্যা l(T) = i(T) + 1, যেখানে i(T) internal node-এর সংখ্যা। — ১০ নম্বর (কঠিন)
  1. Basis (একক node): node-টি leaf, তাই l = 1, i = 0, আর 1 = 0 + 1. — সংজ্ঞার basis নিয়ম
  2. Recursive step: ধরি T₁, T₂-এর জন্য l(T₁) = i(T₁) + 1 আর l(T₂) = i(T₂) + 1. — structural hypothesis: প্রতিটি অংশে দাবি সত্য
  3. নতুন tree T-এর leaf ঠিক T₁ আর T₂-এর leaf (নতুন root-এর দুটি সন্তান, তাই সে leaf নয়): l(T) = l(T₁) + l(T₂). — সংজ্ঞা
  4. internal node: T₁ আর T₂-এর সব, আর নতুন root: i(T) = i(T₁) + i(T₂) + 1. — সংজ্ঞা
  5. l(T) = i(T₁) + 1 + i(T₂) + 1 = (i(T₁) + i(T₂) + 1) + 1 = i(T) + 1. ∎ — hypothesis বসিয়ে

নম্বর-ভাগ: basis (২), hypothesis দুটি অংশে (২), l আর i-এর recursive হিসাব (৪), উপসংহার (২)। যেখানে নম্বর কাটে: node-সংখ্যার ওপর সাধারণ induction করে “একটি leaf যোগ করি” — full binary tree-এ একটি node যোগ করলে tree আর full থাকে না; structural induction এই ফাঁদ এড়ায়।

নিচের ব্লক অংশ গ-এর পাঁচটি দাবি ছোট পরিসরে মেলায়, আর কোথায় দাবি ভাঙে তাও দেখায়।

from itertools import product

N = 60
print("1+3+...+(2n-1) == n^2 :", all(sum(range(1, 2 * n, 2)) == n * n for n in range(1, N)))
print("6 | n^3 - n          :", all((n**3 - n) % 6 == 0 for n in range(0, N)))
print("2^n > n^2 fails at n :", [n for n in range(0, N) if not 2**n > n * n])

# 3a + 5b with a, b >= 0: which n cannot be paid?
payable = {3 * a + 5 * b for a in range(40) for b in range(25)}
print("not payable (n < 60) :", [n for n in range(1, N) if n not in payable])

# full binary trees: every node has 0 or 2 children; count leaves and internal nodes
def full_trees(size):                    # all full binary trees with `size` nodes
    if size == 1:
        yield "L"
    for left in range(1, size - 1):
        for a, b in product(full_trees(left), full_trees(size - 1 - left)):
            yield (a, b)
def leaves(t):   return 1 if t == "L" else leaves(t[0]) + leaves(t[1])
def internal(t): return 0 if t == "L" else 1 + internal(t[0]) + internal(t[1])
total = ok = 0
for size in range(1, 16, 2):
    for t in full_trees(size):
        total += 1
        ok += leaves(t) == internal(t) + 1
print(f"full binary trees up to 15 nodes: {total}, with l = i + 1: {ok}")

আসল আউটপুট (ব্রাউজারের Python):

1+3+...+(2n-1) == n^2 : True
6 | n^3 - n          : True
2^n > n^2 fails at n : [2, 3, 4]
not payable (n < 60) : [1, 2, 4, 7]
full binary trees up to 15 nodes: 626, with l = i + 1: 626

গ-০১ আর গ-০২ n < 60-এ মিলেছে। 2ⁿ > n² ঠিক n = 2, 3, 4-এ ভাঙে, তাই basis ৫ (গ-০৩)। ৩ আর ৫ দিয়ে যা দেওয়া যায় না: 1, 2, 4, 7; 7-এর পরে সব যায়, গ-০৪-এর সঙ্গে হুবহু মেলে। ১৫টি node পর্যন্ত সব ৬২৬টি full binary tree-এ l = i + 1 (গ-০৫)।

৫ · অংশ ঘ — গণনার প্রমাণ, bijection আর pigeonhole

রিভিশন: পর্ব ৩২ “Pigeonhole principle”, পর্ব ৩৪ “Binomial coefficient, Pascal-এর ত্রিভুজ আর combinatorial identity”, পর্ব ৩৭ “গণনার কৌশল”, পর্ব ৫৭ “গ্রাফ — সংজ্ঞা, degree আর handshake theorem”. Combinatorial proof-এ একটি গল্প বলুন: “একটি সেট দুইভাবে গুনি।” দুটি গণনাই যে একই সেট গোনে, সেটি স্পষ্ট না হলে নম্বর থাকে না।

ঘ-০১Combinatorial যুক্তিতে প্রমাণ করুন: C(n, 0) + C(n, 1) + … + C(n, n) = 2ⁿ. — ৫ নম্বর (সহজ)
  1. প্রশ্ন: n জনের দল থেকে কয়টি উপদল (খালি সহ) বাছা যায়? — একটি সেট: {1, …, n}-এর সব subset
  2. গণনা ১: প্রতিটি মানুষ “আছে” বা “নেই”, দুটি বিকল্প, n বার: 2ⁿ. — গুণের নিয়ম
  3. গণনা ২: আকার k-এর উপদল C(n, k)টি; k = 0, …, n যোগ করলে বাঁ দিক। আকারগুলো আলাদা, তাই কোনো উপদল দুবার গোনা হয়নি। — যোগের নিয়ম, ভাগগুলো disjoint
  4. একই সেট দুইভাবে গোনা, তাই দুই রাশি সমান। ∎

নম্বর-ভাগ: সেটের বর্ণনা (১), দুটি গণনা (১ + ২), disjoint কথাটি আর উপসংহার (১)। বিকল্প: binomial theorem-এ x = y = 1.

ঘ-০২Double counting দিয়ে প্রমাণ করুন: 1 ≤ k ≤ n হলে k · C(n, k) = n · C(n − 1, k − 1). — ১০ নম্বর (মাঝারি)
  1. গোনা হবে: n জন থেকে k জনের একটি কমিটি আর তার একজন অধিনায়ক — এমন (কমিটি, অধিনায়ক) জোড়া। — সেট নির্দিষ্ট করা
  2. গণনা ১: আগে কমিটি, C(n, k) ভাবে; তারপর তার k জনের একজন অধিনায়ক: k · C(n, k). — গুণের নিয়ম
  3. গণনা ২: আগে অধিনায়ক, n ভাবে; তারপর বাকি n − 1 জন থেকে কমিটির বাকি k − 1 জন: n · C(n − 1, k − 1). — গুণের নিয়ম
  4. প্রতিটি জোড়া দুই গণনাতেই ঠিক একবার আসে, তাই দুই রাশি সমান। ∎ — double counting

নম্বর-ভাগ: সেট (২), দুটি গণনা (৩ + ৩), “ঠিক একবার” (২)। বীজগণিতেও হয়: k · n!/(k!(n − k)!) = n!/((k − 1)!(n − k)!) = n · C(n − 1, k − 1); প্রশ্ন combinatorial চাইলে শুধু এটি আধা নম্বর পেতে পারে।

ঘ-০৩G = (V, E) একটি সসীম undirected graph (loop নেই)। প্রমাণ করুন: সব vertex-এর degree-র যোগফল = 2|E|; আর বিজোড় degree-র vertex-এর সংখ্যা জোড়। — ১০ নম্বর (সহজ থেকে মাঝারি)
  1. (vertex, তার সঙ্গে লাগা edge) জোড়াগুলো গুনি। vertex ধরে গুনলে যোগফল ∑ deg(v). — degree-র সংজ্ঞা
  2. edge ধরে গুনলে প্রতিটি edge-এর ঠিক দুটি প্রান্ত, তাই 2|E|. সুতরাং ∑ deg(v) = 2|E|. — double counting; handshake
  3. V-কে দুই ভাগে ভাগ করি: V₁ (বিজোড় degree), V₂ (জোড় degree). ∑V₂ deg(v) জোড়। — জোড়ের যোগফল জোড়
  4. তাই ∑V₁ deg(v) = 2|E| − ∑V₂ deg(v) জোড়। — জোড় − জোড়
  5. বিজোড় সংখ্যার যোগফল জোড় হয় কেবল তখন, যখন পদসংখ্যা জোড়; তাই |V₁| জোড়। ∎

নম্বর-ভাগ: double counting-এর সেট (২), দুই গণনা (৩), ভাগ আর parity-র যুক্তি (৪), উপসংহার (১)। যেখানে নম্বর কাটে: “প্রতিটি edge দুটি vertex-এ যায়” লিখে ২ দিয়ে গুণ, কিন্তু কোন সেট গোনা হচ্ছে তা না বলা।

ঘ-০৪n ≥ 1. Bijection দিয়ে প্রমাণ করুন: {1, …, n}-এর জোড় আকারের subset আর বিজোড় আকারের subset সমান সংখ্যক। — ৫ নম্বর (মাঝারি)
  1. f(S) = S △ {1} সংজ্ঞায়িত করুন: 1 ∈ S হলে 1 বাদ, না থাকলে 1 যোগ। — n ≥ 1 বলে 1 আছে
  2. |f(S)| = |S| ± 1, তাই f জোড় আকারকে বিজোড় আকারে নেয়, আর উল্টোটাও। — আকারের parity বদলায়
  3. f(f(S)) = S, তাই f নিজেই নিজের inverse; f একটি bijection. — inverse থাকলে bijection
  4. সসীম দুটি সেটের মধ্যে bijection থাকলে তারা সমান আকারের। ∎

নম্বর-ভাগ: f-এর সংজ্ঞা (১), parity বদল (১), bijection-এর প্রমাণ (২), উপসংহার (১)। n = 0-এ দাবি মিথ্যা (জোড় ১টি: ∅, বিজোড় ০টি) — শর্ত n ≥ 1 কেন, তা এখান থেকেই বোঝা যায়।

ঘ-০৫{1, 2, …, 2n} থেকে যেকোনো n + 1টি আলাদা সংখ্যা নিলে, প্রমাণ করুন একটি অন্যটিকে ভাগ করে। দেখান যে n টি সংখ্যায় এটি নিশ্চিত নয়। — ১০ নম্বর (কঠিন)
  1. প্রতিটি সংখ্যা x = 2e · m আকারে অনন্যভাবে লেখা যায়, m বিজোড় (x-এর “বিজোড় অংশ”)। — ২-এর ঘাত আলাদা করা
  2. 1 থেকে 2n-এর মধ্যে বিজোড় সংখ্যা n টি: 1, 3, …, 2n − 1. তাই বিজোড় অংশের সম্ভাব্য মান n টি। — খোপ
  3. n + 1টি সংখ্যা, n টি খোপ: দুটি সংখ্যা x = 2em, y = 2fm-এর বিজোড় অংশ একই। — pigeonhole
  4. x ≠ y বলে e ≠ f; ধরি e < f. তাহলে y = 2f−e · x, তাই x ∣ y. — সাধারণতা না হারিয়ে
  5. তীক্ষ্ণতা: {n + 1, …, 2n}-এর n টি সংখ্যায় কেউ কাউকে ভাগ করে না, কারণ x ∣ y আর x < y হলে y ≥ 2x ≥ 2n + 2. ∎

নম্বর-ভাগ: বিজোড় অংশের ধারণা (২), খোপ গোনা (২), pigeonhole প্রয়োগ (২), ভাগ দেখানো (২), তীক্ষ্ণতার উদাহরণ (২)। যেখানে নম্বর কাটে: খোপ আর কবুতর কী, নাম ধরে না বলা।

from itertools import combinations
from math import comb

print("sum C(n,k) == 2^n, n<=20     :", all(sum(comb(n, k) for k in range(n + 1)) == 2**n for n in range(21)))
print("k C(n,k) == n C(n-1,k-1)     :", all(k * comb(n, k) == n * comb(n - 1, k - 1)
                                         for n in range(1, 21) for k in range(1, n + 1)))
even = [sum(comb(n, k) for k in range(0, n + 1, 2)) for n in range(1, 8)]
odd  = [sum(comb(n, k) for k in range(1, n + 1, 2)) for n in range(1, 8)]
print("even-size subsets, n=1..7    :", even)
print("odd-size subsets,  n=1..7    :", odd)

# n+1 numbers from {1..2n}: is one always a divisor of another?
def has_divisor_pair(s):
    return any(b % a == 0 for a, b in combinations(sorted(s), 2))
for n in range(1, 8):
    sets = list(combinations(range(1, 2 * n + 1), n + 1))
    good = sum(has_divisor_pair(s) for s in sets)
    tight = has_divisor_pair(range(n + 1, 2 * n + 1))   # only n numbers
    print(f"n={n}: {good}/{len(sets)} subsets have a pair; "
          f"{{n+1..2n}} has a pair: {tight}")

আসল আউটপুট (ব্রাউজারের Python):

sum C(n,k) == 2^n, n<=20     : True
k C(n,k) == n C(n-1,k-1)     : True
even-size subsets, n=1..7    : [1, 2, 4, 8, 16, 32, 64]
odd-size subsets,  n=1..7    : [1, 2, 4, 8, 16, 32, 64]
n=1: 1/1 subsets have a pair; {n+1..2n} has a pair: False
n=2: 4/4 subsets have a pair; {n+1..2n} has a pair: False
n=3: 15/15 subsets have a pair; {n+1..2n} has a pair: False
n=4: 56/56 subsets have a pair; {n+1..2n} has a pair: False
n=5: 210/210 subsets have a pair; {n+1..2n} has a pair: False
n=6: 792/792 subsets have a pair; {n+1..2n} has a pair: False
n=7: 3003/3003 subsets have a pair; {n+1..2n} has a pair: False

ঘ-০১ আর ঘ-০২ n ≤ 20-এ মিলেছে। জোড় আর বিজোড় আকারের subset প্রতিটি n-এ সমান, 2n−1টি করে (ঘ-০৪)। ঘ-০৫: n = 7-এ ৩০০৩টি (C(14, 8)) বাছাইয়ের প্রতিটিতে ভাগ করার জোড়া আছে, অথচ {n + 1, …, 2n}-এর n টি সংখ্যায় একটিও নেই — দাবি আর তার তীক্ষ্ণতা দুটোই।

৬ · অংশ ঙ — সংখ্যাতত্ত্ব, relation, graph, tree আর group

রিভিশন: পর্ব ২১ “GCD আর Euclid-এর algorithm”, পর্ব ৫৫ “Equivalence relation আর partition”, পর্ব ৬২ “Planar graph”, পর্ব ৬৫ “Tree”, পর্ব ৭০ “Group”. এই দলে প্রমাণ সাধারণত সংজ্ঞা আর একটি আগের উপপাদ্যের ওপর দাঁড়ায়; কোন উপপাদ্য, তা নাম ধরে আর শর্তসহ লিখুন।

ঙ-০১a, b পূর্ণসংখ্যা, b > 0, আর r = a mod b. প্রমাণ করুন: gcd(a, b) = gcd(b, r). — ১০ নম্বর (মাঝারি)
  1. Division algorithm: a = qb + r, 0 ≤ r < b. — পর্ব ২০
  2. d ∣ a আর d ∣ b হলে d ∣ a − qb = r. তাই (a, b)-এর প্রতিটি common divisor (b, r)-এরও common divisor. — রৈখিক সমাহারকে ভাগ করে
  3. d ∣ b আর d ∣ r হলে d ∣ qb + r = a. তাই উল্টোটাও সত্য। — একই নিয়ম
  4. দুই জোড়ার common divisor-এর সেট হুবহু এক, তাই তাদের সবচেয়ে বড়টিও এক। ∎ — সেটের সমতা ⇒ সর্বোচ্চের সমতা

নম্বর-ভাগ: division algorithm (১), দুই দিকের অন্তর্ভুক্তি (৩ + ৩), সেট এক বলে gcd এক (৩)। এই lemma-ই Euclid-এর algorithm-এর সঠিকতা; থামার প্রমাণ আলাদা (r < b, ভাগশেষ কড়াভাবে কমে)।

ঙ-০২R একটি সেট A-এর ওপর equivalence relation. প্রমাণ করুন: দুটি equivalence class [a] আর [b] হয় সমান, নয়তো disjoint. — ১০ নম্বর (মাঝারি)
  1. ধরি [a] ∩ [b] ≠ ∅; কোনো c-এর জন্য aRc আর bRc. দেখাব [a] = [b]. — disjoint না হলে সমান, এই রূপে
  2. cRb (symmetric), তাই aRc আর cRb থেকে aRb (transitive). — equivalence relation-এর ধর্ম
  3. x ∈ [b] নিন: bRx. aRb আর bRx থেকে aRx, তাই x ∈ [a]. সুতরাং [b] ⊆ [a]. — transitive
  4. aRb থেকে bRa (symmetric); একই যুক্তিতে [a] ⊆ [b]. তাই [a] = [b]. ∎ — double inclusion

নম্বর-ভাগ: রূপটি ঠিকভাবে বসানো (২), aRb (২), দুই দিকের ⊆ (৩ + ২), উপসংহার (১)। এ থেকেই class-গুলো A-এর একটি partition (reflexive বলে প্রতিটি a ∈ [a], তাই কোনো class খালি নয় আর সবাই কোথাও আছে)।

ঙ-০৩প্রমাণ করুন: n ≥ 2 vertex-এর প্রতিটি tree-তে অন্তত দুটি leaf আছে; এ থেকে induction-এ দেখান যে n vertex-এর tree-তে ঠিক n − 1টি edge. — ১০ নম্বর (মাঝারি)

প্রথম অংশ extremal যুক্তি: “সবচেয়ে লম্বা path” নিন।

  1. Tree-টি connected আর n ≥ 2, তাই অন্তত একটি edge আছে; সসীম graph-এ সবচেয়ে লম্বা simple path P = v₀v₁…vm আছে, m ≥ 1. — সসীম সেটে সর্বোচ্চ থাকে
  2. v₀-এর v₁ ছাড়া আর কোনো প্রতিবেশী w থাকলে: w P-তে থাকলে একটি cycle হয় (tree-তে অসম্ভব); না থাকলে wv₀…vm আরও লম্বা path (P-এর সর্বোচ্চতার বিরোধী)। তাই deg(v₀) = 1; একই যুক্তিতে deg(vm) = 1. — দুটি ক্ষেত্র, দুটিই বিরোধ
  3. Induction: n = 1-এ 0টি edge. n ≥ 2-তে একটি leaf v মুছলে T − v এখনো connected আর acyclic, অর্থাৎ n − 1 vertex-এর tree; hypothesis-এ তার n − 2টি edge. — leaf মুছলে কোনো path ভাঙে না
  4. v-এর একটিই edge ছিল, তাই T-এর edge (n − 2) + 1 = n − 1. ∎

নম্বর-ভাগ: সবচেয়ে লম্বা path-এর অস্তিত্ব (২), দুই ক্ষেত্রে বিরোধ (৩), leaf মুছেও tree কেন (৩), গণনা (২)। যেখানে নম্বর কাটে: “n − 1 vertex-এর tree-তে একটি vertex যোগ করি” — এটি build-up ভুল (অংশ ৮, ত-০৬); সঠিক পথ: বড় tree থেকে মুছে ছোটতে নামা।

ঙ-০৪প্রমাণ করুন: V ≥ 3 vertex-এর একটি connected simple planar graph-এ E ≤ 3V − 6. এ থেকে দেখান K₅ planar নয়। — ১০ নম্বর (মাঝারি থেকে কঠিন)
  1. Euler-এর সূত্র (connected planar graph, একটি plane আঁকায়): V − E + F = 2. — পর্ব ৬২-এর উপপাদ্য, শর্তসহ
  2. প্রতিটি face-এর সীমানায় অন্তত ৩টি edge (simple, V ≥ 3), আর প্রতিটি edge সর্বোচ্চ দুটি face-এর সীমানায়; face ধরে গুনলে 3F ≤ ∑ deg(face) = 2E. — face-এর handshake, double counting
  3. F ≤ 2E/3 বসালে 2 = V − E + F ≤ V − E + 2E/3, অর্থাৎ E ≤ 3V − 6. — বীজগণিত
  4. K₅: V = 5, E = 10, কিন্তু 3V − 6 = 9 < 10. K₅ connected আর simple, তাই planar হতে পারে না। ∎ — contrapositive প্রয়োগ

নম্বর-ভাগ: Euler-এর সূত্র শর্তসহ (২), 3F ≤ 2E কারণসহ (৪), বীজগণিত (২), K₅ (২)। যেখানে নম্বর কাটে: K₃,₃-এ একই সূত্র লাগানো: 9 ≤ 12, তাই সূত্রটি কিছুই প্রমাণ করে না। K₃,₃ bipartite, তাতে triangle নেই, প্রতিটি face-এ অন্তত ৪টি edge: E ≤ 2V − 4 = 8 < 9.

ঙ-০৫(G, ·) একটি group. প্রমাণ করুন: প্রতিটি উপাদানের inverse অনন্য। — ৫ নম্বর (সহজ)
  1. ধরি b আর c দুটিই a-এর inverse: ab = ba = e আর ac = ca = e. — অনন্যতার প্রমাণে “দুটি ধরে সমান দেখানো”
  2. b = be = b(ac) = (ba)c = ec = c. ∎ — identity, c inverse, associativity, b inverse, identity

নম্বর-ভাগ: দুটি inverse ধরা (১), সমতার শিকল (৩), প্রতিটি সমান-চিহ্নের কারণ (১)। যেখানে নম্বর কাটে: commutativity ব্যবহার — group সাধারণত commutative নয়; associativity-ই এখানে যথেষ্ট। অস্তিত্ব আলাদা কথা: তা group-এর axiom থেকেই আসে।

import random
from math import gcd, comb
random.seed(82)

# gcd(a, b) == gcd(b, a mod b) on random pairs
pairs = [(random.randint(1, 10**9), random.randint(1, 10**6)) for _ in range(10000)]
print("gcd(a,b) == gcd(b, a mod b):", all(gcd(a, b) == gcd(b, a % b) for a, b in pairs))

# random labelled trees: attach vertex v to a random earlier vertex
def random_tree(n):
    return [(v, random.randrange(v)) for v in range(1, n)]
leaf_ok = edge_ok = 0
for _ in range(2000):
    n = random.randint(2, 30)
    E = random_tree(n)
    deg = [0] * n
    for u, v in E:
        deg[u] += 1; deg[v] += 1
    edge_ok += len(E) == n - 1
    leaf_ok += sum(d == 1 for d in deg) >= 2
print("2000 random trees: n-1 edges", edge_ok, "| at least 2 leaves", leaf_ok)

# planar edge bounds: K5 and K3,3
V, E = 5, comb(5, 2)
print(f"K5  : E = {E}, 3V-6 = {3 * V - 6}, E <= 3V-6? {E <= 3 * V - 6}")
V, E = 6, 9
print(f"K3,3: E = {E}, 3V-6 = {3 * V - 6}, 2V-4 = {2 * V - 4}, "
      f"E <= 2V-4? {E <= 2 * V - 4}")

আসল আউটপুট (ব্রাউজারের Python):

gcd(a,b) == gcd(b, a mod b): True
2000 random trees: n-1 edges 2000 | at least 2 leaves 2000
K5  : E = 10, 3V-6 = 9, E <= 3V-6? False
K3,3: E = 9, 3V-6 = 12, 2V-4 = 8, E <= 2V-4? False

দশ হাজার এলোমেলো জোড়ায় ঙ-০১-এর lemma মিলেছে। প্রতিটি নতুন vertex-কে আগের কোনো একটির সঙ্গে জুড়ে বানানো ২০০০টি tree-র সবগুলোতে n − 1টি edge আর অন্তত দুটি leaf (ঙ-০৩)। K₅-এ 10 > 9, তাই E ≤ 3V − 6 ভাঙে; K₃,₃-এ 9 ≤ 12 বলে সেই সূত্র চুপ, কিন্তু ত্রিভুজহীন সীমা 2V − 4 = 8 ভাঙে।

৭ · অংশ চ — Invariant, diagonal আর অসম্ভবতার প্রমাণ

“কখনো সম্ভব নয়” ধরনের দাবিতে খুঁজুন এমন একটি রাশি, যা প্রতিটি চালে বদলায় না: এটাই invariant. শুরুর আর লক্ষ্যের মান আলাদা হলে লক্ষ্যে পৌঁছানো অসম্ভব। Loop invariant (পর্ব ১৩ “Program-এর সঠিকতা”) একই ধারণা, কোডের লুপে। রিভিশন: পর্ব ১৮ “Cardinality”, পর্ব ৭৪ “Finite automaton আর regular expression-এর পরিচয়”।

চ-০১৮ × ৮ দাবার বোর্ড থেকে দুটি বিপরীত কোণের ঘর কেটে ফেলা হলো (৬২টি ঘর)। প্রমাণ করুন: পাশাপাশি দুটি ঘর ঢাকে এমন ৩১টি domino দিয়ে বোর্ডটি ঢাকা যায় না। — ১০ নম্বর (মাঝারি)
  1. ঘর (r, c)-কে রং দিন: r + c জোড় হলে সাদা, বিজোড় হলে কালো। পূর্ণ বোর্ডে ৩২ সাদা, ৩২ কালো। — রঙের invariant বেছে নেওয়া
  2. বিপরীত কোণ (0, 0) আর (7, 7): দুটিতেই r + c জোড়, অর্থাৎ দুটিই সাদা। কাটার পরে ৩০ সাদা, ৩২ কালো। — হিসাব
  3. পাশাপাশি দুটি ঘরে r + c-এর parity আলাদা, তাই প্রতিটি domino ঠিক একটি সাদা আর একটি কালো ঢাকে। — invariant: প্রতি domino-তে (১, ১)
  4. ৩১টি domino ঢাকবে ৩১ সাদা আর ৩১ কালো; অথচ আছে ৩০ সাদা। বিরোধ, তাই ঢাকা অসম্ভব। ∎

নম্বর-ভাগ: রঙের নিয়ম (২), কাটার পরের গণনা (২), প্রতি domino-র রং কারণসহ (৪), বিরোধ (২)। যেখানে নম্বর কাটে: কয়েকটি সাজানোর চেষ্টা ব্যর্থ দেখিয়ে “অসম্ভব” বলা — সব সাজানো দেখা হয়নি।

চ-০২বোর্ডে 1, 2, …, 10 লেখা। প্রতি চালে যেকোনো দুটি সংখ্যা a, b মুছে |a − b| লেখা হয়, যতক্ষণ না একটি সংখ্যা থাকে। প্রমাণ করুন: শেষ সংখ্যাটি সবসময় বিজোড়। — ৫ নম্বর (মাঝারি)
  1. Invariant: বোর্ডের সব সংখ্যার যোগফলের parity. শুরুতে 1 + … + 10 = 55, বিজোড়। — যোগফলের সূত্র
  2. এক চালে যোগফল বদলায় −a − b + |a − b|. |a − b| আর a + b-এর parity এক (a − b আর a + b-এর পার্থক্য 2b), তাই বদলটি জোড়। — parity অপরিবর্তিত
  3. প্রতিটি চালে সংখ্যা একটি কমে, তাই ৯ চালে খেলা থামে; শেষ সংখ্যাই তখন যোগফল, যা বিজোড়। ∎ — invariant + থামা

নম্বর-ভাগ: invariant চেনা (১), বদল জোড় কারণসহ (২), থামা আর উপসংহার (২)। শেষ মান কোন বিজোড় সংখ্যা হবে, তা চালের ওপর নির্ভর করে; ব্লকে ১, ৩, ৫, ৭, ৯ সবই এসেছে।

চ-০৩যেকোনো সেট S-এর জন্য প্রমাণ করুন: S থেকে তার power set P(S)-এ কোনো onto ফাংশন নেই (Cantor-এর উপপাদ্য)। — ১০ নম্বর (কঠিন)
  1. বিপরীতে ধরি f: S → P(S) onto. — contradiction
  2. D = {x ∈ S : x ∉ f(x)} নিন; D ⊆ S, তাই D ∈ P(S). — diagonal সেট
  3. f onto, তাই কোনো d ∈ S-এর জন্য f(d) = D. — onto-র সংজ্ঞা
  4. d ∈ D হলে D-এর সংজ্ঞায় d ∉ f(d) = D; d ∉ D হলে d ∉ f(d), তাই সংজ্ঞায় d ∈ D. দুটিই বিরোধ। ∎ — দুটি ক্ষেত্র

নম্বর-ভাগ: অনুমান (১), D-এর সংজ্ঞা (৩), d-এর অস্তিত্ব (২), দুই ক্ষেত্রের বিরোধ (৪)। S অসীম হলেও প্রমাণ একই, তাই |S| < |P(S)| সব সেটে; S = ℕ নিলে P(ℕ) uncountable.

চ-০৪Pumping lemma দিয়ে প্রমাণ করুন: L = {0ⁿ1ⁿ : n ≥ 0} regular language নয়। — ১০ নম্বর (কঠিন)
  1. বিপরীতে ধরি L regular; তাহলে কোনো pumping length p আছে। — pumping lemma, পর্ব ৭৪
  2. s = 0p1p ∈ L নিন, |s| = 2p ≥ p. Lemma বলে s = xyz, যেখানে |xy| ≤ p, |y| ≥ 1, আর সব i ≥ 0-এর জন্য xyiz ∈ L. — s আমরা বাছি; বিভাজন বাছে lemma
  3. |xy| ≤ p, তাই x আর y দুটিই প্রথম p টি 0-এর ভেতরে: y = 0t, t ≥ 1. — যেকোনো বৈধ বিভাজনের জন্য
  4. i = 2: xy²z = 0p+t1p, যেখানে 0 বেশি, তাই ∉ L. বিরোধ; L regular নয়। ∎

নম্বর-ভাগ: অনুমান আর p (১), s-এর বাছাই (২), সব বিভাজনের জন্য যুক্তি (৪), pump করে বিরোধ (৩)। যেখানে নম্বর কাটে: একটি নির্দিষ্ট বিভাজন বেছে নেওয়া (“y = 01 ধরি”); বিভাজন lemma দেয়, আপনাকে সবগুলো সামলাতে হয়। Automata-র পূর্ণ তত্ত্ব পরিকল্পিত Theory of Computation কোর্সের বিষয়।

import random
from itertools import product
random.seed(82)

# board game: replace two numbers a, b by |a - b| until one number is left
finals = set()
for _ in range(2000):
    nums = list(range(1, 11))
    while len(nums) > 1:
        a = nums.pop(random.randrange(len(nums)))
        b = nums.pop(random.randrange(len(nums)))
        nums.append(abs(a - b))
    finals.add(nums[0])
print("last numbers seen:", sorted(finals))

# 8x8 board without two opposite corners: count the two colours
cells = [(r, c) for r in range(8) for c in range(8) if (r, c) not in {(0, 0), (7, 7)}]
dark = sum((r + c) % 2 == 0 for r, c in cells)
print("cells:", len(cells), "| colour A:", dark, "| colour B:", len(cells) - dark)

# Cantor: no f: S -> P(S) is onto, for S = {0, 1, 2}
S = range(3)
subsets = [frozenset(x for x in S if m >> x & 1) for m in range(8)]
onto = hit_D = 0
for f in product(subsets, repeat=3):            # f[x] is the image of x
    onto += len(set(f)) == 8
    D = frozenset(x for x in S if x not in f[x])  # the diagonal set
    hit_D += D in f
print("functions:", 8**3, "| onto:", onto, "| D in image:", hit_D)

আসল আউটপুট (ব্রাউজারের Python):

last numbers seen: [1, 3, 5, 7, 9]
cells: 62 | colour A: 30 | colour B: 32
functions: 512 | onto: 0 | D in image: 0

দুই হাজার এলোমেলো খেলায় শেষ সংখ্যা শুধু বিজোড়: 1, 3, 5, 7, 9 (চ-০২)। কাটা বোর্ডে ৬২টি ঘর, এক রঙের ৩০, অন্যটির ৩২ (চ-০১)। S = {0, 1, 2}-এ সব ৫১২টি ফাংশনের একটিও onto নয়, আর diagonal সেট D কোনো ফাংশনের image-এ আসেনি — চ-০৩-এর যুক্তি হুবহু (তবে প্রমাণ সব S-এর, ব্লক শুধু একটির)।

৮ · ভুল প্রমাণ ধরুন — ছয়টি ফাঁদ আর সংশোধন

প্রতিটি “প্রমাণ” পড়ে আগে নিজে ভুলের লাইনটি খুঁজুন, তারপর খুলুন। ভালো উত্তরে তিনটি জিনিস থাকে: কোন লাইন ভুল, কেন ভুল (সম্ভব হলে একটি counterexample), আর সংশোধিত প্রমাণ বা সঠিক দাবি।

ত-০১দাবি: “n² জোড় হলে n জোড়।” প্রমাণ: “ধরি n = 2k. তাহলে n² = 4k² = 2(2k²), জোড়। ∎” ভুল কোথায়? — ৫ নম্বর (সহজ)

ভুল: প্রমাণটি দাবির converse (“n জোড় ⇒ n² জোড়”) দেখায়। Converse সত্য হলেও মূল দাবি মিথ্যা হতে পারে: “4 ∣ n ⇒ 4 ∣ n²” সত্য, অথচ “4 ∣ n² ⇒ 4 ∣ n” মিথ্যা (n = 2). সংশোধন: ক-০২-এর contrapositive প্রমাণ।

ত-০২দাবি: 1 + 2 + … + n = n(n + 1)/2. “Step: P(k + 1) সত্য ধরি: 1 + … + (k + 1) = (k + 1)(k + 2)/2. দুই দিক থেকে (k + 1) বাদ দিলে 1 + … + k = k(k + 1)/2, যা P(k), সত্য। তাই P(k + 1) সত্য। ∎” ভুল কোথায়? — ৫ নম্বর (মাঝারি)

ভুল: যা প্রমাণ করার কথা (P(k + 1)), তা ধরে নিয়ে একটি সত্য কথায় পৌঁছানো হয়েছে: চক্রাকার যুক্তি। সত্য সিদ্ধান্ত থেকে অনুমান সত্য হয় না (0 = 1 ধরে দুই দিককে 0 দিয়ে গুণ করলে 0 = 0). সংশোধন: P(k) থেকে শুরু: 1 + … + k + (k + 1) = k(k + 1)/2 + (k + 1) = (k + 1)(k + 2)/2. এখানে প্রতিটি ধাপ উল্টানো যায় বলে খসড়ার চিন্তাটি কাজে লাগে, কিন্তু খাতায় দিক ঠিক রাখতে হয়।

ত-০৩“ধরি a = b. তাহলে a² = ab, a² − b² = ab − b², (a + b)(a − b) = b(a − b), a + b = b, 2b = b, তাই 2 = 1. ∎” ভুল কোথায়? — ৫ নম্বর (সহজ)

ভুল: (a + b)(a − b) = b(a − b) থেকে a + b = b লিখতে দুই দিককে (a − b) দিয়ে ভাগ করা হয়েছে; a = b বলে a − b = 0, আর শূন্য দিয়ে ভাগ অবৈধ। শেষ ধাপে b দিয়ে ভাগও b ≠ 0 না জেনে করা। সংশোধন: xy = xz থেকে y = z শুধু x ≠ 0 হলে; সাধারণভাবে x(y − z) = 0 থেকে x = 0 বা y = z. প্রতিটি ভাগের আগে “ভাজক শূন্য নয়, কারণ …” লিখুন।

ত-০৪“দাবি: যেকোনো n ≥ 1 টি ঘোড়ার দলে সবার রং এক। Basis n = 1 স্পষ্ট। Step: k + 1টি ঘোড়ার দলে প্রথম k টি এক রঙের, শেষ k টিও এক রঙের (hypothesis), আর মাঝের ঘোড়াগুলো দুই দলেই আছে, তাই সবাই এক রঙের। ∎” ভুল কোথায়? — ১০ নম্বর (মাঝারি)

ভুল: step সব k ≥ 1-এর জন্য দাবি করা হয়েছে, কিন্তু k = 1-এ (দুটি ঘোড়া) দুই দলের মিল খালি; নিচের stepper ধাপে ধাপে দেখায়। P(1) ⇒ P(2) প্রমাণ হয়নি, তাই শিকল প্রথম কড়াতেই ছেঁড়া। দাবিটি মিথ্যা: একটি সাদা আর একটি কালো ঘোড়া। শিক্ষা: step-এর প্রতিটি যুক্তি সবচেয়ে ছোট k-তেও খাটে কি না দেখুন (পর্ব ১০-এর §৮)।

k + 1টি ঘোড়া h₁ … hk+1
k + 1
A (প্রথম k)
B (শেষ k)
A ∩ B
রায়
  1. k + 1 = 4. A আর B-এর মিল {h₂, h₃}: A-র রং = h₂-এর রং = B-র রং। এখানে যুক্তি ঠিক।
  2. k + 1 = 3. মিল শুধু h₂, তবু একটি “সেতু” আছে। যুক্তি এখনো ঠিক।
  3. k + 1 = 2. A = {h₁}, B = {h₂}, মিল খালি। দুই দলের রং যুক্ত করার কোনো ঘোড়া নেই।
  4. ফাঁকের নাম। P(1) সত্য, কিন্তু P(1) ⇒ P(2) প্রমাণ হয়নি। P(2) মিথ্যা হলে বড় সব k-এর step সত্য হলেও কাজে লাগে না।
  5. শিক্ষা। Induction-এর শিকলে প্রতিটি কড়া লাগে; সবচেয়ে ছোট step-টি আলাদা করে পরীক্ষা করুন।
ত-০৫“৪ জন (A, B, C, D) থেকে ২ জনের কমিটি: প্রথম সদস্য ৪ ভাবে, দ্বিতীয় ৩ ভাবে, তাই 4 × 3 = 12টি কমিটি।” ভুল কোথায়? — ৫ নম্বর (সহজ)

ভুল: গুণের নিয়ম ক্রমসহ জোড়া গোনে; কমিটিতে ক্রম নেই, তাই {A, B} একবার (A, B) আর একবার (B, A) হিসেবে, দুবার গোনা হয়েছে (overcounting). প্রতিটি কমিটি ঠিক ২ বার এসেছে, তাই ভাগের নিয়ম: 12/2 = 6 = C(4, 2). শিক্ষা: “প্রতিটি বস্তু কতবার গোনা হলো?” প্রশ্নটি করুন (পর্ব ৩১ “গণনার মূল নিয়ম”)।

ত-০৬“দাবি: যে graph-এর প্রতিটি vertex-এর degree ≥ 1, তা connected. Induction on n: n = 2-এ একটি edge, connected. Step: n vertex-এর এমন একটি connected graph নিন, একটি নতুন vertex যোগ করে একটি edge দিয়ে জুড়ুন; ফলও connected. ∎” ভুল কোথায়? — ১০ নম্বর (কঠিন)

ভুল: Step-টি শুধু সেই n + 1 vertex-এর graph-গুলো বানায়, যা একটি ছোট connected graph-এ vertex জুড়ে পাওয়া যায়; “degree ≥ 1”-এর সব graph এভাবে আসে না। এই “build-up” ভুলে প্রমাণ সব ক্ষেত্র ঢাকে না। দাবি মিথ্যা: দুটি আলাদা edge 0–1 আর 2–3, সবার degree 1, কিন্তু দুটি component (ব্লকে মেলানো)। সঠিক কাঠামো: step-এ যেকোনো n + 1 vertex-এর graph নিয়ে শুরু করুন, তা থেকে একটি vertex মুছে hypothesis লাগান, আর মোছার পরও শর্ত টিকে আছে কি না দেখান (ঙ-০৩ এভাবে লেখা)। এখানে মোছার পরে শর্তই ভাঙতে পারে, আর তাতেই ফাঁক ধরা পড়ে।

from itertools import combinations, permutations

# T-01: proving the converse. "4 | n -> 4 | n^2" is true,
# but the claim "4 | n^2 -> 4 | n" is false:
print("4 | n^2 but not 4 | n:", [n for n in range(1, 30) if n * n % 4 == 0 and n % 4][:5])

# T-04: "2^n > n^2" -- where do the basis and the step hold?
print("2k^2 >= (k+1)^2 fails at k:", [k for k in range(1, 20) if 2 * k * k < (k + 1) ** 2])
print("2^n > n^2 fails at n      :", [n for n in range(1, 20) if not 2**n > n * n])

# T-05: "2-person committees from 4 people = 4 * 3 = 12"
people = "ABCD"
ordered = list(permutations(people, 2))
print("ordered pairs:", len(ordered),
      "| distinct committees:", len(set(map(frozenset, ordered))),
      "| C(4,2):", len(list(combinations(people, 2))))

# T-06: build-up error. "every graph whose degrees are all >= 1 is connected"
E = [(0, 1), (2, 3)]                      # two separate edges
deg = {v: sum(v in e for e in E) for v in range(4)}
reach, todo = {0}, [0]                    # search from vertex 0
while todo:
    u = todo.pop()
    for a, b in E:
        for x, y in ((a, b), (b, a)):
            if x == u and y not in reach:
                reach.add(y); todo.append(y)
print("degrees:", deg, "| reachable from 0:", sorted(reach))

আসল আউটপুট (ব্রাউজারের Python):

4 | n^2 but not 4 | n: [2, 6, 10, 14, 18]
2k^2 >= (k+1)^2 fails at k: [1, 2]
2^n > n^2 fails at n      : [2, 3, 4]
ordered pairs: 12 | distinct committees: 6 | C(4,2): 6
degrees: {0: 1, 1: 1, 2: 1, 3: 1} | reachable from 0: [0, 1]

প্রথম লাইন ত-০১-এর counterexample: n = 2, 6, 10, …-এ 4 ∣ n², অথচ 4 ∤ n. দ্বিতীয় আর তৃতীয় লাইন গ-০৩-এর ছক: 2k² ≥ (k + 1)² ভাঙে k = 1, 2-এ, আর দাবি ভাঙে n = 2, 3, 4-এ; তাই step আর basis দুটোই দেখতে হয়। ক্রমসহ জোড়া ১২টি, আলাদা কমিটি ৬টি (ত-০৫)। শেষ লাইনে প্রতিটি degree 1, অথচ 0 থেকে শুধু 0 আর 1-এ পৌঁছানো যায়: graph connected নয় (ত-০৬)।

৯ · সাধারণ ভুলের ছক আর পরীক্ষার হলের কৌশল

ভুলকেমন দেখায়ঠিক কাজ
উদাহরণকে প্রমাণ বলা“n = 1, 2, 3-এ মেলে, তাই সত্য”উদাহরণ খসড়ায়; খাতায় সাধারণ n
Converse প্রমাণp → q-এর বদলে q → pপ্রথম লাইনে অনুমান আর সিদ্ধান্ত আলাদা লেখা
চক্রাকার যুক্তিসিদ্ধান্ত ধরে সত্য কথায় পৌঁছানোঅনুমান থেকে শুরু, সিদ্ধান্তে শেষ
একই অক্ষর দুই বস্তুর জন্যm = 2k + 1, n = 2k + 1প্রতিটি নতুন বস্তুর নতুন অক্ষর
শূন্যে ভাগ বা ঋণাত্মকে অসমতাশর্ত ছাড়া ভাগভাগের আগে “≠ 0, কারণ …”
Induction-এ basis বা ছোট step বাদঘোড়ার রং, 2ⁿ > n² n = 1 থেকেসবচেয়ে ছোট step আলাদা করে যাচাই
অপূর্ণ ক্ষেত্রশুধু ধনাত্মক n, বা শুধু জোড়“ক্ষেত্রগুলো সব সম্ভাবনা ঢাকে” লেখা
শর্ত ছাড়া উপপাদ্যK₃,₃-এ E ≤ 3V − 6, ভুল সিদ্ধান্তউপপাদ্যের নাম আর শর্ত মিলিয়ে লেখা
দুবার গোনাকমিটিতে 4 × 3প্রতিটি বস্তু কতবার গোনা হলো, যাচাই
Build-up inductionছোট থেকে বড় বানানোবড় যেকোনো বস্তু থেকে ছোটতে নামা

হলে সময়: মোট মিনিট ÷ মোট নম্বর দিয়ে প্রতিটি প্রশ্নের সময় ঠিক করুন। আটকে গেলে পদ্ধতির ঘোষণা, অনুমান, আর induction হলে basis ও hypothesis লিখে এগিয়ে যান; এগুলোতেই সাধারণত আংশিক নম্বর থাকে। যে ধাপ পারেননি, সেখানে “এখানে দেখাতে হবে যে …” লিখে বাকিটা শেষ করুন — সৎভাবে ফাঁক দেখানো ভুল দাবির চেয়ে ভালো। “স্পষ্টতই” শব্দটি তখনই লিখুন, যখন এক লাইনে কারণটিও দিতে পারেন।

আরও গভীরে: Lean-এর মতো proof assistant প্রতিটি ধাপকে axiom আর নিয়মে ভাঙিয়ে পরীক্ষা করে; খাতার প্রমাণ সেই অর্থে “informal”, পাঠকের বোঝার ওপর নির্ভর করে। এই পাতার প্রতিটি ধাপের পাশে কারণ লেখার অভ্যাস সেই আনুষ্ঠানিক যাচাইয়ের দিকেই প্রথম পা। Formal proof আর informal proof-এর পার্থক্য পর্ব ০৬ “অনুমানের নিয়ম”-এ দেখেছেন।

১০ · AI-এর যুগে — AI-এর লেখা প্রমাণ যাচাই

AI সহকারী প্রমাণের খসড়া দ্রুত লেখে, আর প্রায়ই সুন্দর ভাষায় ভুল লেখে: আত্মবিশ্বাসী কিন্তু চক্রাকার যুক্তি, দাবির বদলে converse প্রমাণ, induction-এ basis বাদ বা ছোট step-এ ভাঙা যুক্তি (ঘোড়ার রং), শূন্য হতে পারে এমন রাশিতে ভাগ, গণনায় off-by-one বা ক্রম গুলিয়ে দুবার গোনা, শর্ত ছাড়া উপপাদ্য (Euler-এর সূত্র connected না বলে, Fermat p ∤ a না বলে), বড় সংখ্যায় modular হিসাবে ভুল, আর এমন বই বা পাতার নাম যা নেই। তাই AI-কে লেখক নয়, কড়া পরীক্ষক বানান, আর প্রতিটি দাবি নিজে মেলান।

নিজের লেখা প্রমাণ AI-কে দিয়ে পরীক্ষা করানোর একটি কাঠামো:

তুমি discrete mathematics-এর একজন কড়া পরীক্ষক। নিচে একটি প্রমাণের প্রশ্ন আর আমার লেখা উত্তর দিলাম। [প্রশ্ন] [আমার প্রমাণ — প্রতিটি ধাপ নম্বর দিয়ে] ১. আগে বলো দাবিটি কোন আকারের (∀, ∃, p → q, যদি এবং কেবল যদি) আর আমি কোন পদ্ধতি নিয়েছি; পদ্ধতিটি দাবির সঙ্গে মেলে কি না। ২. প্রতিটি ধাপ আলাদা করে যাচাই করো: কারণটি ঠিক কি না, কোনো ধাপ লাফ দিয়েছে কি না, লাইন নম্বর ধরে বলো। ৩. Converse প্রমাণ, চক্রাকার যুক্তি, শূন্যে ভাগ, অপূর্ণ ক্ষেত্র, basis বা সবচেয়ে ছোট step বাদ — এগুলো আছে কি না দেখো। ৪. আমি যে উপপাদ্য ব্যবহার করেছি, তার শর্তগুলো লেখো আর বলো আমার ক্ষেত্রে শর্ত পূরণ হয়েছে কি না। ৫. দাবিটি মিথ্যা মনে হলে একটি ছোট counterexample দাও, যা আমি নিজে হাতে বা Python-এ মেলাতে পারি। ৬. মার্ক-স্কিম বানাও (পড়া ও পদ্ধতি, মূল ধাপ, পূর্ণতা, উপসংহার) আর নম্বর দাও; পুরো সঠিক প্রমাণটি নিজে লিখে দিও না। ৭. নিশ্চিত না হলে "নিশ্চিত নই" লেখো; কোনো বই, পাতা বা উপপাদ্যের নাম বানাবে না।

AI-এর উত্তর হাতে পেলে — যাচাইয়ের চেকলিস্ট

নিজেকে যাচাই করুন

ভুল হলে কারণসহ ব্যাখ্যা পাবেন, আবার চেষ্টাও করতে পারবেন।

ক্রমএকটি induction প্রমাণ খাতায় লেখার ধাপগুলো সঠিক ক্রমে সাজান (▲▼ চেপে সরান)

  1. P(n) কী, আর কোন n থেকে, স্পষ্ট লেখা
  2. Basis: সবচেয়ে ছোট মান (বা মানগুলো) সরাসরি যাচাই
  3. Inductive hypothesis: P(k) (strong হলে সব আগের মান) ধরে নেওয়া
  4. Step: P(k + 1)-এর ভেতরে hypothesis খুঁজে বের করে প্রমাণ
  5. উপসংহার: induction-এর নীতি অনুযায়ী সব n-এ P(n), তারপর ∎

(সহজ) n একটি পূর্ণসংখ্যা। “n² জোড় হলে n জোড়” — এর contrapositive কোনটি?

  • n জোড় হলে n² জোড়
  • n বিজোড় হলে n² বিজোড়
  • n² বিজোড় হলে n বিজোড়
  • n বিজোড় হলে n² জোড়

(মাঝারি) “সব n ≥ n₀-এর জন্য 2ⁿ > n²” induction-এ প্রমাণ করতে চান। দাবিটি সত্য এমন ক্ষুদ্রতম n₀ কোনটি, যেখান থেকে এটি আর কখনো ভাঙে না?

  • 1
  • 3
  • 4
  • 5

(মাঝারি) “প্রতিটি n ≥ 8-কে 3a + 5b (a, b ≥ 0) রূপে লেখা যায়” — step-এ P(k + 1) আনতে P(k − 2) ব্যবহার করা হলো (একটি ৩ যোগ করে)। কয়টি basis লাগবে?

  • ১টি (n = 8)
  • ২টি (n = 8, 9)
  • ৩টি (n = 8, 9, 10)
  • ৫টি (n = 8 থেকে 12)

(সহজ) “বাজারঘরের যেকোনো ৩৬৭ জন গ্রাহকের মধ্যে অন্তত দুজনের জন্মদিন (মাস আর তারিখ) একই” — কোন পদ্ধতি সবচেয়ে সরাসরি?

  • Pigeonhole principle
  • Constructive: দুজনকে নাম ধরে দেখানো
  • গ্রাহক-সংখ্যার ওপর induction
  • Counterexample

(মাঝারি) একটি connected simple planar graph-এ 10টি vertex. সর্বোচ্চ কয়টি edge থাকতে পারে?

  • 45
  • 24
  • 30
  • 16

(কঠিন) “যেকোনো n ≥ 1 টি ঘোড়া এক রঙের” — induction-এর “প্রমাণে” ঠিক কোথায় ফাঁক?

  • Basis n = 1 মিথ্যা
  • Hypothesis ধরে নেওয়া অবৈধ
  • Step k = 1 থেকে k + 1 = 2-এ ব্যর্থ
  • Step শুধু বড় k-তে ব্যর্থ

শব্দকোষ

লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন, অর্থ দেখাবে। এই পর্বের সব শব্দ এখানে একসাথে:

মনে রাখুন

  1. আগে পড়া: অনুমান, সিদ্ধান্ত আর quantifier আলাদা করুন; সংকেত দেখে পদ্ধতি বাছুন, আর প্রথম লাইনেই পদ্ধতির নাম লিখুন।
  2. প্রতিটি ধাপে কারণ: সংজ্ঞা, উপপাদ্য (শর্তসহ), বীজগণিত বা hypothesis; প্রতিটি নতুন বস্তুর নতুন অক্ষর; ভাগের আগে ভাজক ≠ 0.
  3. Induction: P(n), basis, hypothesis, step আলাদা; step যত ধাপ পেছনে যায়, তত basis; recursive বস্তুতে structural induction, আর বড় থেকে ছোটতে নামা।
  4. গণনা আর অসম্ভবতা: double counting-এ সেটের নাম বলুন; pigeonhole-এ খোপ আর কবুতর; invariant-এ শুরু আর লক্ষ্যের মান তুলনা; extremal-এ সবচেয়ে লম্বা বা ছোটটি নিন।
  5. যাচাই আর সততা: খসড়ায় ছোট মানে মেলান, কিন্তু উদাহরণকে প্রমাণ বলবেন না; না পারলে ফাঁকটি সৎভাবে চিহ্নিত করুন।

পরের পর্বে: পর্ব ৮৩ “ইন্টারভিউ আর contest-এর গণিত — puzzle, counting আর graph”: এখানকার invariant, pigeonhole আর induction-এর যুক্তি কাজে লাগবে ধাঁধা, সম্ভাবনার মজার প্রশ্ন আর graph-এর ইন্টারভিউ সমস্যায়।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

এই পর্বটি শেয়ার করুন:
এই পর্বে ভুল পেয়েছেন? জানান