সমাধান — অধ্যায় ৭.১ · Why Measure Theory?¶
অধ্যায় ফাইল:
part-7-measure-theoretic/07-01-why-measure-theory.md(§৭ অনুশীলনী)। সংখ্যাগত উত্তরnumpyদিয়ে যাচাইযোগ্য; seed উল্লেখ থাকলে reproducible (default_rng(20260619))। canonical তথ্য (এই অধ্যায়ের চারটি crack তথা ফাটল ও মূল সংখ্যা): (C1) \(\mathbb N\)-এ কোনো fair uniform probability নেই — countable additivity-র অধীনে \(1=\sum_k c\) হয় \(0\) (যদি \(c=0\)) নয় \(\infty\) (যদি \(c>0\))। (C2) Dirichlet \(D=\mathbf 1_{\mathbb Q}\) Riemann-integrable নয়: প্রতিটি partition-এ upper sum \(U=1\), lower sum \(L=0\); কিন্তু Lebesgue-এ \(\int_0^1\mathbf 1_{\mathbb Q}\,d\lambda=0\)। (C3) \(\mathbb Q\cap[0,1]\) dense তবু \(\lambda^*=0\) (\(\varepsilon/2^k\)-ঢাকনায় মোট দৈর্ঘ্য \(\le\varepsilon\)); Cantor set uncountable (\(2^{\aleph_0}\)) অথচ \(\lambda(C)=0\) (অপসারিত দৈর্ঘ্য \(=1\)); Vitali set \(V\) (AC দিয়ে) non-measurable, তাই \(\sigma\)-algebra অনিবার্য। (C4) moving spike \(f_n=n\,\mathbf 1_{(0,1/n)}\): \(\int_0^1 f_n\,dx=1\ \forall n\) অথচ \(f_n\to 0\) pointwise, তাই \(\lim\int\ne\int\lim\)। (Monte-Carlo) \(\lambda([0,0.3]\cup[0.5,0.9])=0.7\), আনুমান \(0.7003\) (seeddefault_rng(20260619), \(N=10^6\))।
ক · ধারণাগত (conceptual)¶
সমাধান ১ (★)¶
দাবিটা মিথ্যা — \(\mathbb N\)-এ fair uniform probability নেই। ধরা যাক আছে: প্রতিটি \(k\)-এর জন্য \(\mathbb P(\{k\})=c\) একই ধ্রুবক। singleton-গুলো disjoint, আর \(\mathbb N=\bigcup_{k=1}^\infty\{k\}\) একটা গণনাযোগ্য মিলন, তাই countable additivity প্রয়োগ করে $$ 1=\mathbb P(\mathbb N)=\sum_{k=1}^\infty \mathbb P({k})=\sum_{k=1}^\infty c. $$ এখন দুটো মাত্র ক্ষেত্র, দুটোই ভাঙে: - \(c=0\): \(\sum_{k}0=0\ne1\)। - \(c>0\): \(\sum_{k}c=+\infty\ne1\)।
কোনো \(c\)-ই \(1\) দেয় না, তাই এমন uniform \(\mathbb P\) অস্তিত্বহীন।
কেন finite additivity নয়, countable additivity-ই অপরাধী। যদি কেবল finite additivity দাবি করতাম (যেকোনো সসীম-সংখ্যক disjoint set-এর জন্য যোগ), তাহলে \(c=0\) ক্ষেত্রে কোনো দ্বন্দ্ব জোর করে বের করা যেত না: প্রতিটি সসীম উপসংগ্রহে \(\mathbb P(\{1,\dots,n\})=n\cdot0=0\) — সম্পূর্ণ সঙ্গতিপূর্ণ, অথচ \(\mathbb P(\mathbb N)=1\) আলাদাভাবে রাখলে কোনো সসীম নিয়ম লঙ্ঘিত হয় না। প্রকৃতপক্ষে finitely-additive "uniform" বস্তু (Banach limit-জাতীয়) \(\mathbb N\)-এ বানানো যায়। দ্বন্দ্বটা টানতে আমাদের সমগ্র অসীম যোগফল \(\sum_{k=1}^\infty c\)-কে \(\mathbb P(\mathbb N)\)-এর সমান ধরতে হলো — এটাই countable additivity-র সত্যিকারের দাঁত।
সসীম ছক্কায় কেন ভাঙে না (এক বাক্যে)। সসীম জগতে \(c=1/n\) নিলে \(\sum_{k=1}^n\tfrac1n=\tfrac nn=1\) নিখুঁতভাবে মেলে — কিন্তু অসীমে "\(1/\infty\)"-এর কোনো অর্থ নেই, তাই কোনো একটিমাত্র ধনাত্মক ধ্রুবককে অসীমবার যোগ করে \(1\)-এ থামানো যায় না।
সমাধান ২ (★)¶
"measure zero" কী। একটা set \(A\)-এর measure শূন্য মানে: যেকোনো \(\varepsilon>0\)-এর জন্য \(A\)-কে গণনাযোগ্য-অনেক open interval দিয়ে এমনভাবে ঢাকা যায় যেন তাদের মোট দৈর্ঘ্য \(\le\varepsilon\) — অর্থাৎ outer measure \(\lambda^*(A)=0\)। "\(A\)-কে যত খুশি ছোট মোট-দৈর্ঘ্যে মুড়ে ফেলা যায়।"
কেন \(\mathbb Q\cap[0,1]\) dense হয়েও measure-শূন্য — স্ববিরোধ নয়। "dense" (যেকোনো দুই বিন্দুর মাঝে rational আছে) আর "বড় measure" এক জিনিস নয়। dense-নেস topological density (ঘনত্ব)-এর কথা বলে, measure বলে "কতটুকু দৈর্ঘ্য দখল"। \(\mathbb Q\cap[0,1]\) countable — এদের তালিকাবদ্ধ করা যায় \(q_1,q_2,\dots\); তাই \(q_k\)-কে দৈর্ঘ্য \(\varepsilon/2^k\)-এর interval দিয়ে ঢাকলে মোট \(\sum_k\varepsilon/2^k=\varepsilon\), যা যত খুশি ছোট। সুতরাং dense হওয়া সত্ত্বেও \(\lambda^*=0\) — কোনো বিরোধ নেই।
"measure zero \(\Rightarrow\) countable" কেন ভুল। এই implication-এর উল্টোটাই সত্য: countable \(\Rightarrow\) measure 0, কিন্তু measure 0 \(\not\Rightarrow\) countable। প্রতিউদাহরণ Cantor set \(C\): এটা uncountable (\(2^{\aleph_0}\), continuum-এর সমান) অথচ \(\lambda(C)=0\)। অর্থাৎ "measure zero" শর্তটা "countable" শর্তের চেয়ে অনেক দুর্বল, এবং cardinality ও measure দুটো সম্পূর্ণ স্বাধীন মাপকাঠি।
সমাধান ৩ (★)¶
কেন \(D=\mathbf 1_{\mathbb Q}\) Riemann-integrable নয় (এক বাক্যে)। \([0,1]\)-এর প্রতিটি subinterval-এ rational ও irrational দুটোই থাকে, তাই প্রতিটি partition-এ upper sum \(U=\sum 1\cdot\Delta x_i=1\) আর lower sum \(L=\sum 0\cdot\Delta x_i=0\) — দুটো কখনো কাছাকাছি আসে না, তাই Riemann integral অসংজ্ঞায়িত।
কেন Lebesgue অনায়াসে \(0\) দেয় (পরের বাক্য)। Lebesgue জিজ্ঞেস করে "function-এর মান \(1\) কোন set-এ?" — উত্তর কেবল \(\mathbb Q\cap[0,1]\)-তে, যার measure \(0\); তাই \(\int_0^1\mathbf 1_{\mathbb Q}\,d\lambda=1\cdot\lambda(\mathbb Q\cap[0,1])+0\cdot\lambda(\text{irrationals})=1\cdot0+0\cdot1=0\)।
স্লোগানে যোগসূত্র। Riemann domain-কে ভাগ করে (vertical strips — \(x\)-অক্ষ কাটে, তাই প্রতিটি strip-এ wild function লাফায়), কিন্তু Lebesgue range-কে ভাগ করে (horizontal strips — "মান \(1\) কত measure-জুড়ে, মান \(0\) কত measure-জুড়ে" — মুদ্রা প্রাপ্তির ক্রমে নয়, মূল্যমান অনুযায়ী সাজানো)। এই range-partition-ই Dirichlet-এর মতো function-কে সামলায়।
খ · গণনামূলক (computational)¶
সমাধান ৪ (★)¶
\(\ell(I_k)=\varepsilon/2^{k}\), আর \(\mathbb Q\cap[0,1]\subseteq\bigcup_k I_k\)।
(ক) মোট ঢাকনা-দৈর্ঘ্য (geometric series): $$ \sum_{k=1}^\infty \ell(I_k)=\sum_{k=1}^\infty \frac{\varepsilon}{2^{k}}=\varepsilon\sum_{k=1}^\infty\Big(\frac12\Big)^{k}=\varepsilon\cdot\frac{1/2}{1-1/2}=\varepsilon\cdot1=\varepsilon. $$
(খ) \(\varepsilon=0.01\) হলে মোট দৈর্ঘ্য ঠিক \(0.01\)।
(গ) মোট দৈর্ঘ্য \(=\varepsilon\); একে \(10^{-6}\)-এর নিচে নামাতে যেকোনো \(\varepsilon<10^{-6}\) যথেষ্ট (যেমন \(\varepsilon=10^{-7}\) দেয় মোট \(10^{-7}\))। যেহেতু \(\varepsilon\) যত খুশি ছোট নেওয়া যায় অথচ \(\mathbb Q\cap[0,1]\) সবসময় ঢাকা থাকে, outer measure হলো সব ঢাকনা-দৈর্ঘ্যের infimum: $$ \lambda^(\mathbb Q\cap[0,1])=\inf_{\varepsilon>0}\varepsilon=0. $$ অর্থাৎ dense হওয়া সত্ত্বেও \(\mathbb Q\cap[0,1]\) একটা null set*।
সমাধান ৫ (★)¶
\(f_n(x)=n\,\mathbf 1_{(0,1/n)}(x)\) — উচ্চতা \(n\), প্রস্থ \(1/n\)-এর একটা আয়তক্ষেত্র।
(ক) integral। প্রতিটি স্থির \(n\)-এ \(f_n\) একটা step function, তাই $$ \int_0^1 f_n\,dx=\underbrace{n}{\text{উচ্চতা}}\times\underbrace{\tfrac1n}. $$ উত্তর }}=1\qquad\text{সব }n\text{-এ\(n\)-নিরপেক্ষভাবে ধ্রুবক \(1\)।
(খ) \(x=0.3\)-এ মান। \(f_n(0.3)=n\) যতক্ষণ \(0<0.3<1/n\), অর্থাৎ \(1/n>0.3\iff n<10/3\approx3.33\) (অর্থাৎ \(n\le3\)); নইলে \(0\)। $$ f_2(0.3)=2,\qquad f_5(0.3)=0,\qquad f_{100}(0.3)=0. $$
(গ) দুই limit আলাদা। যেহেতু প্রতিটি স্থির \(x\in(0,1]\)-এ যথেষ্ট বড় \(n\)-এর পর \(f_n(x)=0\) (আর \(f_n(0)=0\) সবসময়, কারণ \((0,1/n)\) open), pointwise limit \(f_n\to 0\)। তাই $$ \lim_{n\to\infty}\int_0^1 f_n\,dx=\lim_{n}1=1,\qquad\text{কিন্তু}\qquad \int_0^1\Big(\lim_{n}f_n\Big)dx=\int_0^1 0\,dx=0. $$ \(1\ne0\) — limit ও integral অদলবদল করলে পুরো \(1\) একক ভর "উবে যায়"। এটাই crack C4।
সমাধান ৬ (★★)¶
Cantor set: প্রতি ধাপে অবশিষ্ট প্রতিটি interval থেকে মাঝের open third ফেলা হয়।
(ক) \(k\) ধাপ পরে। প্রতিবার interval-সংখ্যা দ্বিগুণ, দৈর্ঘ্য \(\tfrac13\) গুণ। শুরুতে (\(k=0\)) ১টা interval দৈর্ঘ্য \(1\); তাই ধাপ \(k\)-এ $$ \text{interval-সংখ্যা}=2^{k},\qquad \text{প্রতিটির দৈর্ঘ্য}=3^{-k}. $$
(খ) অবশিষ্ট ও অপসারিত দৈর্ঘ্য। $$ \lambda(C_k)=2^{k}\cdot3^{-k}=\Big(\frac23\Big)^{k},\qquad \text{অপসারিত}=1-\Big(\frac23\Big)^{k}. $$ (যাচাই: ধাপ \(k\)-তে নতুন ফেলা \(=2^{k-1}\cdot3^{-k}\), আর \(\sum_{k\ge1}2^{k-1}3^{-k}=\tfrac13\sum_{j\ge0}(\tfrac23)^j=\tfrac13\cdot3=1\)।)
(গ) সংখ্যামান। $$ k=3:\ \lambda(C_3)=(2/3)^3=8/27\approx0.2963,\quad \text{অপসারিত}\approx0.7037; $$ $$ k=10:\ \lambda(C_{10})=(2/3)^{10}=1024/59049\approx0.0173,\quad \text{অপসারিত}\approx0.9827. $$ \(k\to\infty\)-এ \((2/3)^k\to0\), তাই $$ \lambda(C)=\lim_{k\to\infty}\Big(\frac23\Big)^{k}=0. $$ অথচ \(C\) uncountable (ternary রূপে digit \(1\)-হীন সব সংখ্যা \(\leftrightarrow\{0,2\}^{\mathbb N}\), size \(2^{\aleph_0}\)) — measure \(0\) কিন্তু continuum-সংখ্যক বিন্দু।
গ · প্রমাণভিত্তিক (proof-based)¶
সমাধান ৭ (★★)¶
দাবি ১ — singleton-এর outer measure শূন্য। \(\{a\}\subseteq\mathbb R\) নিন। যেকোনো \(\varepsilon>0\)-এ একটামাত্র open interval দিয়ে ঢাকি: $$ {a}\subseteq I=\Big(a-\frac\varepsilon2,\ a+\frac\varepsilon2\Big),\qquad \ell(I)=\varepsilon. $$ সংজ্ঞা অনুযায়ী \(\lambda^*(\{a\})\le\ell(I)=\varepsilon\)। যেহেতু এটা সব \(\varepsilon>0\)-এ সত্য এবং \(\lambda^*\ge0\), $$ 0\le\lambda^({a})\le\inf_{\varepsilon>0}\varepsilon=0\quad\Rightarrow\quad \lambda^({a})=0. $$
দাবি ২ — যেকোনো countable set-এর measure শূন্য (countable subadditivity)। ধরা যাক \(A=\{a_1,a_2,a_3,\dots\}\) countable। outer measure-এর countable subadditivity বলে \(\lambda^*\big(\bigcup_k B_k\big)\le\sum_k\lambda^*(B_k)\)। এখানে \(B_k=\{a_k\}\), প্রতিটির \(\lambda^*=0\) (দাবি ১), তাই $$ \lambda^(A)=\lambda^\Big(\bigcup_{k=1}^\infty{a_k}\Big)\le\sum_{k=1}^\infty\lambda^*({a_k})=\sum_{k=1}^\infty 0=0, $$ অর্থাৎ \(\lambda^*(A)=0\)। (সরাসরিও দেখা যায়: \(a_k\)-কে দৈর্ঘ্য \(\varepsilon/2^k\)-এর interval দিন, মোট \(\sum_k\varepsilon/2^k=\varepsilon\downarrow0\)।)
প্রয়োগ। \(\mathbb Q\cap[0,1]\) countable (rational-গুলো তালিকাবদ্ধযোগ্য), তাই উপরের ফল সরাসরি দেয় \(\lambda^*(\mathbb Q\cap[0,1])=0\) — সমাধান ৪-এর সঙ্গে সঙ্গতিপূর্ণ। \(\;\blacksquare\)
সমাধান ৮ (★★)¶
নির্মাণ। সম্পর্ক \(x\sim y\iff x-y\in\mathbb Q\) একটা equivalence relation (reflexive: \(x-x=0\in\mathbb Q\); symmetric: \(x-y\in\mathbb Q\Rightarrow y-x\in\mathbb Q\); transitive: দুই মূলদের যোগ মূলদ)। এটা \([0,1]\)-কে disjoint equivalence class-এ ভাগ করে। Axiom of Choice দিয়ে প্রতিটি class থেকে ঠিক একটি প্রতিনিধি নিয়ে \(V\subseteq[0,1]\) গঠন করি। \(\mathbb Q\cap[-1,1]=\{q_1,q_2,\dots\}\) (countable), \(V_k=V+q_k\)।
(ক) translate-গুলো disjoint — \(j\ne k\Rightarrow V_j\cap V_k=\varnothing\)। ধরা যাক না, কোনো \(z\in V_j\cap V_k\) আছে। তাহলে দুই প্রতিনিধি \(v,v'\in V\) আছে যাতে $$ z=v+q_j=v'+q_k\quad\Rightarrow\quad v-v'=q_k-q_j\in\mathbb Q. $$ অর্থাৎ \(v\sim v'\) — \(v,v'\) একই equivalence class-এ। কিন্তু \(V\) প্রতিটি class থেকে ঠিক একটি উপাদান নিয়েছে, তাই \(v=v'\), যা \(q_j=q_k\) অর্থাৎ \(j=k\) দেয় — অনুমান \(j\ne k\)-এর সঙ্গে দ্বন্দ্ব। অতএব \(V_j\cap V_k=\varnothing\)।
(খ) sandwich — \([0,1]\subseteq\bigcup_k V_k\subseteq[-1,2]\)। - বাঁদিক। যেকোনো \(x\in[0,1]\) কোনো class-এ পড়ে; \(V\)-তে সেই class-এর প্রতিনিধি \(v\) আছে, তাই \(x-v\in\mathbb Q\)। যেহেতু \(x,v\in[0,1]\), পার্থক্য \(x-v\in[-1,1]\) — তাই এটা তালিকার কোনো \(q_k\), এবং \(x=v+q_k\in V_k\subseteq\bigcup_k V_k\)। - ডানদিক। যেকোনো \(v+q_k\)-তে \(v\in V\subseteq[0,1]\) ও \(q_k\in[-1,1]\), তাই \(v+q_k\in[0+(-1),\,1+1]=[-1,2]\)।
দুই উপ-ফল একসঙ্গে: disjoint, সমান-আকারের গণনাযোগ্য-অনেক translate যাদের মিলন \([0,1]\) ও \([-1,2]\)-এর মাঝে চাপা — যা পরের ধাপে (পূর্ণ প্রমাণ ৪) \(1\le\sum_k\lambda(V)\le3\) অসম্ভবতায় নিয়ে যায়। \(\;\blacksquare\)
সমাধান ৯ (★★)¶
দাবি। \([0,1]\)-এ \(D=\mathbf 1_{\mathbb Q}\)-এর জন্য প্রতিটি partition \(P\)-এ \(U(D,P)=1\), \(L(D,P)=0\)।
প্রমাণ। \(P=\{0=x_0<x_1<\dots<x_m=1\}\) একটা যেকোনো partition, \(\Delta x_i=x_i-x_{i-1}\)। প্রতিটি subinterval \([x_{i-1},x_i]\)-এ (অশূন্য দৈর্ঘ্য): - rational ও irrational উভয়েই dense, তাই subinterval-এ অন্তত একটা rational আছে \(\Rightarrow M_i=\sup_{[x_{i-1},x_i]}D=1\); - এবং অন্তত একটা irrational আছে \(\Rightarrow m_i=\inf_{[x_{i-1},x_i]}D=0\)।
তাই $$ U(D,P)=\sum_{i=1}^m M_i\,\Delta x_i=\sum_{i=1}^m 1\cdot\Delta x_i=\sum_{i=1}^m\Delta x_i=1-0=1, $$ $$ L(D,P)=\sum_{i=1}^m m_i\,\Delta x_i=\sum_{i=1}^m 0\cdot\Delta x_i=0. $$ দুটোই partition-নিরপেক্ষ।
Darboux integral ও উপসংহার। upper Darboux integral হলো সব partition-এর উপর upper sum-এর infimum, lower হলো supremum: $$ \overline{\int_0^1}D=\inf_P U(D,P)=\inf_P 1=1,\qquad \underline{\int_0^1}D=\sup_P L(D,P)=\sup_P 0=0. $$ যেহেতু \(\overline{\int}D=1\ne0=\underline{\int}D\), দুটো Darboux integral অসমান — তাই \(D\) Riemann-integrable নয় (Riemann ⇔ upper = lower)। এটাই crack C2। \(\;\blacksquare\)
(তুলনায়: Lebesgue measure-এ \(\mathbb Q\cap[0,1]\) null, তাই \(\int_0^1\mathbf 1_{\mathbb Q}\,d\lambda=0\) — Lebesgue তত্ত্ব \(D\)-কে অনায়াসে integrate করে।)
ঘ · কোডিং (coding)¶
সমাধান ১০ (★)¶
import numpy as np
rng = np.random.default_rng(20260619)
N = 1_000_000
x = rng.uniform(0.0, 1.0, N)
# A = [0, 0.3] ∪ [0.5, 0.9]
inA = ((x >= 0.0) & (x <= 0.3)) | ((x >= 0.5) & (x <= 0.9))
est = inA.mean()
truth = 0.3 + 0.4 # 0.7
print(f"Monte-Carlo estimate : {est:.4f}") # 0.7003
print(f"true lambda(A) : {truth:.4f}") # 0.7000
print(f"Monte-Carlo error : {abs(est - truth):.4f}") # ~0.0003
যা দেখা যাবে: estimate \(\approx 0.7003\), সত্য \(0.7\), error \(\approx 0.0003\) — অর্থাৎ \(O(1/\sqrt N)\) মাপের (\(1/\sqrt{10^6}=10^{-3}\))। উদ্দেশ্য: "\(A\)-তে পড়ার সম্ভাবনা" \(=\) "\(A\)-এর measure" — এটাই \(\lambda\)-এর সম্ভাব্যতা-অর্থ, আর measure theory ঠিক এই "দৈর্ঘ্য \(=\) probability" ধারণাকেই কঠোর ভিত্তি দেয়। (seed 20260619 ধরে ফল হুবহু \(0.7003\)।)
সমাধান ১১ (★★)¶
import numpy as np
# np.trapezoid (numpy>=2.0); পুরোনো numpy-তে np.trapz
trapz = getattr(np, "trapezoid", None) or np.trapz
xs = np.linspace(0.0, 1.0, 2_000_001) # সূক্ষ্ম grid
x0 = 0.3 # স্থির বিন্দু
print(f"{'n':>6} | {'∫ f_n dx (≈)':>14} | f_n(0.3)")
print("-" * 36)
for n in [1, 2, 5, 10, 100, 1000]:
fn = np.where((xs > 0.0) & (xs < 1.0 / n), float(n), 0.0)
integral = trapz(fn, xs)
fn_x0 = n if (0.0 < x0 < 1.0 / n) else 0
print(f"{n:>6} | {integral:>14.4f} | {fn_x0}")
যা দেখা যাবে (আনুমানিক আউটপুট):
| \(n\) | \(\int f_n\,dx\ (\approx)\) | \(f_n(0.3)\) |
|---|---|---|
| \(1\) | \(1.0000\) | \(1\) |
| \(2\) | \(1.0000\) | \(2\) |
| \(5\) | \(1.0000\) | \(0\) |
| \(10\) | \(1.0000\) | \(0\) |
| \(100\) | \(\approx1.0000\) | \(0\) |
| \(1000\) | \(\approx1.0000\) | \(0\) |
integral কলামটা অটল \(1\) (grid খুব সূক্ষ্ম হলে \(\approx1.0000\); খুব বড় \(n\)-এ সরু spike-টা grid-এ ধরা পড়তে আরও সূক্ষ্মতা লাগে), অথচ স্থির বিন্দু \(x=0.3\)-এ মান \(n\ge4\) থেকেই ভেঙে \(0\)। দুই কলাম পাশাপাশি ঠিক crack C4-এর গল্প: \(\lim_n\int f_n=1\) কিন্তু \(\int\lim_n f_n=0\) — ভর হারায় না, কেবল pointwise limit তাকে "দেখতে" পায় না।
সমাধান ১২ (★★)¶
import numpy as np
import matplotlib.pyplot as plt
# (ক) বিশ্লেষণী: lambda(C_k) = (2/3)^k
ks = np.arange(0, 16)
remaining = (2.0 / 3.0) ** ks
removed = 1.0 - remaining
print(f"{'k':>3} | {'remaining (2/3)^k':>18} | {'removed':>10}")
print("-" * 36)
for k, r, d in zip(ks, remaining, removed):
print(f"{k:>3} | {r:>18.6f} | {d:>10.6f}")
# (খ) constructive যাচাই: প্রকৃত interval ভেঙে মোট দৈর্ঘ্য
segs = [(0.0, 1.0)]
construct = [sum(b - a for a, b in segs)]
for _ in range(15):
new = []
for a, b in segs:
t = (b - a) / 3.0
new.append((a, a + t))
new.append((b - t, b))
segs = new
construct.append(sum(b - a for a, b in segs))
construct = np.array(construct)
print("\nmax |analytic - constructive| =", np.max(np.abs(remaining - construct))) # ~0
# semi-log plot
plt.figure(figsize=(7, 4.5))
plt.semilogy(ks, remaining, "o-", label=r"$\lambda(C_k)=(2/3)^k$")
plt.xlabel("step k"); plt.ylabel(r"remaining length (log scale)")
plt.title("Cantor set: remaining length decays to 0 (uncountable, yet measure 0)")
plt.grid(True, which="both", alpha=0.3); plt.legend()
plt.tight_layout(); plt.show()
যা দেখা যাবে: টেবিলে \(k=3\Rightarrow0.296296\) (অপসারিত \(0.703704\)), \(k=10\Rightarrow0.017342\) (অপসারিত \(0.982658\)); constructive মোট দৈর্ঘ্য বিশ্লেষণী \((2/3)^k\)-এর সাথে হুবহু মেলে (পার্থক্য \(\approx0\), floating-point মাত্র)। semi-log plot-এ বিন্দুগুলো একটা সরলরেখা (ঢাল \(\log(2/3)<0\)) — দ্রুত \(0\)-অভিমুখী ক্ষয়, তাই \(\lambda(C)=0\)। অথচ এই null set-টাই uncountable — measure আর cardinality যে স্বাধীন, এই plot তারই দৃশ্যরূপ (crack C3-এর