一様収束と項別微分・積分の理論

フーリエ級数やテイラー級数のような無限級数を扱うとき、「級数を項ごとに微分してもよいか」「項ごとに積分してもよいか」という問いに直面します。有限和であれば微分と和の順序交換は自由ですが、無限和の場合はそう簡単ではありません。

たとえば、関数列 $f_n(x) = x^n$($0 \leq x \leq 1$)を考えましょう。各 $f_n$ は連続関数ですが、極限関数は $0 \leq x < 1$ で $0$、$x = 1$ で $1$ という不連続関数です。「連続関数の極限が不連続になる」のは、直感に反するかもしれません。

19世紀の数学者たちもこの問題に悩みました。コーシーは「連続関数の極限は連続」と主張しましたが、これは誤りでした。この問題を解決し、「どのような条件下で極限と連続性・積分・微分が交換可能か」を明確にしたのがワイエルシュトラスの一様収束(uniform convergence)の概念です。

一様収束を理解すると、以下のような場面で理論的な保証が得られます。

  • フーリエ解析: フーリエ級数の項別微分・積分の正当化
  • テイラー級数: べき級数の収束半径内での項別操作の正当化
  • 微分方程式: 解の級数展開が実際に微分方程式を満たすことの証明
  • 確率論: 確率変数列の収束と期待値の交換

本記事の内容

  • 各点収束と一様収束の違い
  • 一様収束の定義と判定法(ワイエルシュトラスのM判定法)
  • 一様収束が保証する性質(連続性、項別積分、項別微分)
  • 各定理の証明
  • Pythonによる収束の可視化

前提知識

この記事を読む前に、以下の記事を読んでおくと理解が深まります。

各点収束と一様収束の違い

各点収束の問題点

関数列 $\{f_n\}$ が関数 $f$ に各点収束(pointwise convergence)するとは、各 $x$ を固定したとき $\lim_{n \to \infty} f_n(x) = f(x)$ が成り立つことです。

$\varepsilon$-$N$ 論法で書けば、各点収束は次のように定式化されます。

$$ \forall x \in D, \forall \varepsilon > 0, \exists N = N(\varepsilon, x): n \geq N \Rightarrow |f_n(x) – f(x)| < \varepsilon $$

ここで重要なのは、$N$ が $\varepsilon$ だけでなく $x$ にも依存することです。ある $x$ では $n = 10$ で十分でも、別の $x$ では $n = 10^6$ 必要かもしれません。この「$x$ によって収束速度が異なる」ことが、極限関数の不連続性を引き起こすのです。

$f_n(x) = x^n$ の例

$f_n(x) = x^n$($0 \leq x \leq 1$)を考えます。$0 \leq x < 1$ では $x^n \to 0$、$x = 1$ では $x^n = 1$ なので、極限関数は

$$ f(x) = \begin{cases} 0 & (0 \leq x < 1) \\ 1 & (x = 1) \end{cases} $$

各 $f_n$ は連続ですが、$f$ は $x = 1$ で不連続です。$|f_n(x) – f(x)| = x^n < \varepsilon$ とするには $n > \frac{\ln \varepsilon}{\ln x}$ が必要であり、$x \to 1^-$ のとき必要な $n$ は無限大に発散します。

例えば $\varepsilon = 0.01$ とすると、$x = 0.5$ では $n > \frac{\ln 0.01}{\ln 0.5} \approx 6.6$ で十分ですが、$x = 0.99$ では $n > \frac{\ln 0.01}{\ln 0.99} \approx 458.2$ が必要です。$x = 0.999$ ではさらに $n > 4603$ が必要になります。このように、$x$ が $1$ に近づくほど収束に必要な $N$ が急激に増大するのです。

一様収束の直感

一様収束は「全ての $x$ で同時に収束する」ことを要求します。つまり、$\varepsilon > 0$ に対して、$x$ に依存しない $N$ が存在して、$n \geq N$ ならば $|f_n(x) – f(x)| < \varepsilon$ が全ての $x$ で成り立つことです。

一様収束と各点収束の定義の違いは、量化子の順序にあります。各点収束では「$\forall x, \exists N$」($x$ を先に固定してから $N$ を決める)ですが、一様収束では「$\exists N, \forall x$」($N$ を先に決めて、それが全ての $x$ で通用する)です。この順序の入れ替えは些細に見えますが、数学的には決定的な違いを生みます。

グラフで考えると、一様収束は「$f$ のグラフの周りに幅 $2\varepsilon$ の帯をつけたとき、十分大きな $n$ から先は $f_n$ のグラフが全てこの帯の中に収まる」ことを意味します。各点収束では帯の外にはみ出す部分が残ることがあります。

$f_n(x) = x^n$ は $[0, 1]$ 上で $f$ に一様収束しません。なぜなら、$\sup_{x \in [0,1]} |f_n(x) – f(x)| = \sup_{x \in [0,1)} x^n = 1$($x \to 1$ で上限に近づく)であり、ゼロに収束しないからです。ただし、$[0, a]$($0 < a < 1$)に制限すれば $\sup_{x \in [0,a]} x^n = a^n \to 0$ なので一様収束します。

直感的なイメージを掴んだところで、正確な定義に進みましょう。

一様収束の定義

関数列の一様収束

定義: 関数列 $\{f_n\}$ が $D$ 上で関数 $f$ に一様収束するとは

$$ \begin{equation} \forall \varepsilon > 0, \exists N \in \mathbb{N}, \forall n \geq N, \forall x \in D: |f_n(x) – f(x)| < \varepsilon \end{equation} $$

同値な表現として

$$ \begin{equation} \lim_{n \to \infty} \sup_{x \in D} |f_n(x) – f(x)| = 0 \end{equation} $$

$\sup_{x \in D} |f_n(x) – f(x)|$ は「$f_n$ と $f$ の最大の乖離」であり、これがゼロに収束するということは、全ての $x$ で同時に $f_n$ が $f$ に近づくことを意味します。

この $\sup$ ノルムは、関数空間における一様ノルム($L^\infty$ ノルム)$\|f_n – f\|_\infty$ とも呼ばれます。一様収束は「一様ノルムで収束する」こと、つまり関数空間の中で距離がゼロに近づくことと同じです。

級数の一様収束

関数項級数 $\sum_{n=1}^{\infty} u_n(x)$ の一様収束は、部分和 $S_N(x) = \sum_{n=1}^{N} u_n(x)$ の一様収束として定義されます。

ワイエルシュトラスのM判定法

関数項級数の一様収束を判定する最も実用的な方法がワイエルシュトラスのM判定法(Weierstrass M-test)です。

定理: 全ての $n$ と全ての $x \in D$ に対して $|u_n(x)| \leq M_n$ であり、$\sum_{n=1}^{\infty} M_n < \infty$ ならば、$\sum_{n=1}^{\infty} u_n(x)$ は $D$ 上で一様収束する(かつ絶対収束する)。

証明: $|S_N(x) – S(x)| = |\sum_{n=N+1}^{\infty} u_n(x)| \leq \sum_{n=N+1}^{\infty} |u_n(x)| \leq \sum_{n=N+1}^{\infty} M_n$ です。$\sum M_n$ が収束するので、右辺は $N \to \infty$ でゼロに収束します。この評価は $x$ に依存しないので、一様収束が示されました。

: $\sum_{n=1}^{\infty} \frac{\sin(nx)}{n^2}$ は $\mathbb{R}$ 上で一様収束します。$|\frac{\sin(nx)}{n^2}| \leq \frac{1}{n^2} = M_n$ であり、$\sum \frac{1}{n^2} = \frac{\pi^2}{6} < \infty$ だからです。

一方、$\sum_{n=1}^{\infty} \frac{\sin(nx)}{n}$ にはM判定法を適用できません。$|\frac{\sin(nx)}{n}|$ の上限は $\frac{1}{n}$ ですが、$\sum \frac{1}{n}$ は発散するからです。実際、この級数は各点収束しますが一様収束しません。M判定法は十分条件であって必要条件ではないことに注意が必要です。

コーシーの一様収束判定条件

一様収束は、極限関数 $f$ を知らなくても判定できるコーシー条件でも特徴づけられます。

定理(コーシー条件): $\{f_n\}$ が $D$ 上で一様収束するための必要十分条件は

$$ \forall \varepsilon > 0, \exists N: m, n \geq N \Rightarrow \sup_{x \in D}|f_n(x) – f_m(x)| < \varepsilon $$

これはコーシー列の概念の関数版です。極限関数を明示的に求められない場合でも、一様収束の判定が可能になります。

一様収束の定義と判定法を理解したところで、一様収束が保証する重要な性質を見ていきましょう。

一様収束が保証する性質

連続性の保存

定理: $f_n$ が全て $D$ 上で連続で、$f_n \to f$ が $D$ 上で一様収束するならば、$f$ も $D$ 上で連続である。

証明: $\varepsilon > 0$ とします。一様収束から $|f_n(x) – f(x)| < \varepsilon/3$ を全ての $x$ で満たす $n$ が取れます。$f_n$ の連続性から $|x - a| < \delta$ ならば $|f_n(x) - f_n(a)| < \varepsilon/3$ となる $\delta$ が取れます。三角不等式により

$$ |f(x) – f(a)| \leq |f(x) – f_n(x)| + |f_n(x) – f_n(a)| + |f_n(a) – f(a)| < \frac{\varepsilon}{3} + \frac{\varepsilon}{3} + \frac{\varepsilon}{3} = \varepsilon $$

したがって $f$ は $a$ で連続です。

対偶を取れば、「$f_n$ が連続で $f$ が不連続なら、$f_n \to f$ は一様収束でない」が成り立ちます。$f_n(x) = x^n$ の例がまさにこの状況です。

この定理の証明の構造を振り返ると、三角不等式で $|f(x) – f(a)|$ を3つの項に分解しています。最初と最後の項は一様収束が制御し($x$ によらない共通の $N$ が使える)、真ん中の項は $f_n$ の連続性が制御します。この「近似→連続→近似」という3段階の議論は、解析学の至るところで現れるパターンです。

なお、一様収束の条件は連続性の保存にとって十分条件ですが、必要条件ではありません。各点収束だけでも極限関数が連続になる場合はあります(ただし偶然的であり、一般には保証されません)。

連続性の保存が確認できたところで、次は積分との交換を見てみましょう。

項別積分

定理: $f_n$ が $[a, b]$ 上で連続で、$f_n \to f$ が一様収束するならば

$$ \begin{equation} \lim_{n \to \infty} \int_a^b f_n(x) \, dx = \int_a^b \lim_{n \to \infty} f_n(x) \, dx = \int_a^b f(x) \, dx \end{equation} $$

つまり、極限と積分の順序が交換可能です。

証明: 一様収束から $|f_n(x) – f(x)| < \varepsilon/(b-a)$ を全ての $x$ で満たす $n$ が取れます。したがって

$$ \left|\int_a^b f_n(x) \, dx – \int_a^b f(x) \, dx\right| \leq \int_a^b |f_n(x) – f(x)| \, dx < \int_a^b \frac{\varepsilon}{b-a} dx = \varepsilon $$

この証明のポイントは、一様収束により $|f_n(x) – f(x)|$ を$x$ に依存しない定数で抑えられることです。各点収束だけでは被積分関数を定数で抑えることができず、項別積分が成り立たない例が存在します。

項別積分が失敗する反例: $f_n(x) = n^2 x(1 – x^2)^n$($[0,1]$ 上)は各点で $f(x) = 0$ に収束しますが、$\int_0^1 f_n(x)\,dx = \frac{n^2}{2(n+1)} \to \infty$ であり、極限と積分が交換できません。この関数列は $x \approx 1/n$ 付近に高さ $O(n)$ の鋭いピークを持ち、各点収束するにもかかわらず積分値が発散します。

項別積分は一様収束で保証されますが、微分の場合はやや事情が異なります。

項別微分

項別微分はやや条件が強くなります。

定理: $f_n$ が $[a, b]$ 上で $C^1$ 級で、以下の2条件を満たすとする:

  1. ある $x_0 \in [a, b]$ で $\sum f_n(x_0)$ が収束する
  2. $\sum f_n'(x)$ が $[a, b]$ 上で一様収束する

このとき $\sum f_n(x)$ は $[a, b]$ 上で一様収束し、その和の関数 $S(x) = \sum f_n(x)$ は微分可能で

$$ \begin{equation} S'(x) = \sum_{n=1}^{\infty} f_n'(x) \end{equation} $$

つまり、導関数の級数が一様収束していれば、項別微分が許されます。元の級数の一様収束だけでは不十分で、微分した級数の一様収束が必要です。

なぜ項別微分のほうが条件が厳しいのでしょうか。積分は「平均化」の操作であり、局所的な振動を平滑化するため、多少の非一様性は吸収されます。一方、微分は「局所的な変化率」を見る操作であり、わずかな振動も増幅されます。そのため、微分の場合は導関数の級数自体の一様収束という強い条件が必要になるのです。

べき級数の特別な性質

べき級数 $\sum_{n=0}^{\infty} a_n x^n$ は、収束半径 $R$ の内部の任意のコンパクト集合上で一様収束し、項別微分・項別積分が自由にできます。これはテイラー級数の計算で項別操作を何の心配もなく使える理由です。

具体的に確認してみましょう。$\sum a_n x^n$ の収束半径が $R$ であるとき、$|x| \leq r < R$ を満たす任意の $r$ に対して $|a_n x^n| \leq |a_n| r^n = M_n$ です。$\sum |a_n| r^n$ は $r < R$ で収束するので、ワイエルシュトラスのM判定法により $[-r, r]$ 上で一様収束します。

項別微分すると $\sum n a_n x^{n-1}$ が得られますが、この級数の収束半径も $R$ であること(比の判定法で確認できます: $\lim \frac{(n+1)|a_{n+1}|}{n|a_n|} = \lim \frac{|a_{n+1}|}{|a_n|}$)から、同様の議論で $[-r, r]$ 上で一様収束します。したがって項別微分が正当化されます。

各概念の関係のまとめ

ここまでの内容を整理しておきましょう。

性質 必要な収束
極限関数の連続性 $f_n \to f$ の一様収束
項別積分 $\int \lim = \lim \int$ $f_n \to f$ の一様収束
項別微分 $(\lim f_n)’ = \lim f_n’$ $f_n’ \to g$ の一様収束(+ 1点での $f_n$ の収束)

いずれの場合も、各点収束だけでは不十分で、一様収束が鍵であることがわかります。

定理の内容を理解したところで、Pythonで一様収束と各点収束の違いを可視化してみましょう。

Pythonでの実装と可視化

各点収束と一様収束の比較

$f_n(x) = x^n$ の非一様収束と、一様収束する例を比較します。

import numpy as np
import matplotlib.pyplot as plt

fig, axes = plt.subplots(1, 3, figsize=(16, 5))

# (a) f_n(x) = x^n([0,1]上で非一様収束)
ax = axes[0]
x = np.linspace(0, 1, 500)
n_values = [1, 2, 5, 10, 50]
colors = plt.cm.viridis(np.linspace(0, 0.8, len(n_values)))

for n, color in zip(n_values, colors):
    ax.plot(x, x**n, color=color, linewidth=1.5, label=f'n={n}')

# 極限関数
ax.plot(x[:-1], np.zeros(len(x)-1), 'r-', linewidth=2.5, alpha=0.5)
ax.plot(1, 1, 'ro', markersize=8)
ax.text(0.5, 0.55, 'Limit: discontinuous', fontsize=11, color='red')

ax.set_xlabel('x', fontsize=12)
ax.set_ylabel('$f_n(x)$', fontsize=12)
ax.set_title('$f_n(x) = x^n$ on [0,1] (NOT uniform)', fontsize=12)
ax.legend(fontsize=9)
ax.grid(True, alpha=0.3)

# (b) sup |f_n - f| の推移
ax = axes[1]
n_range = np.arange(1, 51)

# [0, 1] 上: sup = 1(一様収束しない)
sup_01 = np.ones(len(n_range))

# [0, 0.9] 上: sup = 0.9^n(一様収束する)
a = 0.9
sup_0a = a**n_range

# [0, 0.5] 上
b = 0.5
sup_0b = b**n_range

ax.semilogy(n_range, sup_01, 'r-', linewidth=2, label='$[0, 1]$: NOT uniform')
ax.semilogy(n_range, sup_0a, 'b-', linewidth=2, label='$[0, 0.9]$: uniform')
ax.semilogy(n_range, sup_0b, 'g-', linewidth=2, label='$[0, 0.5]$: uniform')
ax.axhline(0.01, color='gray', linestyle='--', alpha=0.5, label=r'$\varepsilon = 0.01$')

ax.set_xlabel('n', fontsize=12)
ax.set_ylabel(r'$\sup |f_n - f|$', fontsize=12)
ax.set_title('Supremum distance (convergence speed)', fontsize=12)
ax.legend(fontsize=9)
ax.grid(True, alpha=0.3, which='both')

# (c) 一様収束する例: f_n(x) = sin(nx)/n
ax = axes[2]
x = np.linspace(0, 2*np.pi, 500)

for n, color in zip([1, 2, 3, 5, 10], colors):
    ax.plot(x, np.sin(n*x)/n, color=color, linewidth=1.5, label=f'n={n}')

ax.axhline(0, color='red', linewidth=2, alpha=0.5, label='Limit: f=0')
ax.fill_between(x, -0.1, 0.1, alpha=0.15, color='red', label=r'$\varepsilon$-band')

ax.set_xlabel('x', fontsize=12)
ax.set_ylabel('$f_n(x)$', fontsize=12)
ax.set_title(r'$f_n(x) = \sin(nx)/n$ (uniform convergence)', fontsize=12)
ax.legend(fontsize=8)
ax.grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('uniform_convergence.png', dpi=150, bbox_inches='tight')
plt.show()

このグラフから、各点収束と一様収束の違いが明確にわかります。

  1. 左図(非一様収束): $f_n(x) = x^n$ は $x = 1$ の近くで収束が遅く、$n$ を大きくしても $x \approx 1$ 付近の値は0に近づきません。極限関数は $x = 1$ で不連続です。

  2. 中央図(sup距離の推移): $[0, 1]$ 全体では $\sup|f_n – f| = 1$ のまま減少せず(赤線)、一様収束しません。一方、$[0, 0.9]$ に制限すれば $\sup = 0.9^n$ が指数的に減少し(青線)、一様収束します。

  3. 右図(一様収束の例): $f_n(x) = \sin(nx)/n$ は $\sup|f_n| = 1/n \to 0$ なので、$\mathbb{R}$ 全体で一様収束します。$n \geq 10$ で赤い $\varepsilon$-帯の中に完全に収まっています。

項別積分・項別微分の検証

一様収束する場合の項別操作を数値的に検証します。

import numpy as np
import matplotlib.pyplot as plt

# 級数: sum_{n=1}^{infty} x^n/n^2 の項別微分
# S(x) = sum x^n/n^2(Li_2(x)、ディロガリズム)
# S'(x) = sum x^{n-1}/n = -ln(1-x)/x

x = np.linspace(-0.95, 0.95, 200)

fig, axes = plt.subplots(1, 2, figsize=(14, 5))

# (a) 級数の部分和と項別積分
ax = axes[0]
N_values = [5, 10, 20, 50]
colors = plt.cm.viridis(np.linspace(0.1, 0.8, len(N_values)))

for N, color in zip(N_values, colors):
    # 部分和
    S_N = np.zeros_like(x)
    for n in range(1, N+1):
        S_N += x**n / n**2
    ax.plot(x, S_N, color=color, linewidth=1.5, label=f'N={N}')

# 積分: ∫_0^x S(t) dt を部分和で近似
# 項別積分: sum ∫_0^x t^n/n^2 dt = sum x^{n+1}/((n+1)n^2)
x_demo = 0.8
integral_partial = []
for N in range(1, 51):
    val = sum(x_demo**(n+1) / ((n+1)*n**2) for n in range(1, N+1))
    integral_partial.append(val)

ax.set_xlabel('x', fontsize=12)
ax.set_ylabel('$S_N(x)$', fontsize=12)
ax.set_title(r'$\sum_{n=1}^{N} x^n/n^2$ (partial sums)', fontsize=12)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)

# (b) 項別微分の検証
ax = axes[1]

# S'(x) の数値微分
N_final = 100
S_N = np.zeros_like(x)
for n in range(1, N_final+1):
    S_N += x**n / n**2

dSdx_numerical = np.gradient(S_N, x)

# 項別微分: sum n*x^{n-1}/n^2 = sum x^{n-1}/n = -ln(1-x)/x
dSdx_term = np.where(np.abs(x) > 1e-10, -np.log(1 - x) / x, 1.0)

# 項別微分の部分和
for N, color in zip([5, 10, 20], colors[:3]):
    dS_N = np.zeros_like(x)
    for n in range(1, N+1):
        dS_N += x**(n-1) / n
    ax.plot(x, dS_N, color=color, linewidth=1.5, alpha=0.7,
            label=f'Term-by-term N={N}')

ax.plot(x, dSdx_numerical, 'k--', linewidth=2, label='Numerical diff of $S_{100}$')
ax.plot(x, dSdx_term, 'r-', linewidth=2, alpha=0.5, label='$-\\ln(1-x)/x$')

ax.set_xlabel('x', fontsize=12)
ax.set_ylabel("$S'(x)$", fontsize=12)
ax.set_title('Term-by-term differentiation verification', fontsize=12)
ax.legend(fontsize=9)
ax.grid(True, alpha=0.3)
ax.set_ylim(-5, 10)

plt.tight_layout()
plt.savefig('termwise_operations.png', dpi=150, bbox_inches='tight')
plt.show()

このグラフから、項別操作の正当性が数値的に確認できます。

  1. 左図(部分和): $\sum x^n/n^2$ の部分和が $N$ を増やすにつれて収束していく様子が見えます。$|x| < 1$ の範囲(収束半径内)で一様収束しているため、連続な極限関数が得られます。

  2. 右図(項別微分の検証): 項別微分の部分和(色付きの曲線)が、$S_{100}(x)$ の数値微分(黒い破線)および解析的な導関数 $-\ln(1-x)/x$(赤い実線)に収束しています。収束半径内で導関数の級数も一様収束するため、項別微分が正当化されます。$x$ が収束半径の境界 $x = 1$ に近づくと、収束が遅くなる様子も観察できます。これは $-\ln(1-x)/x$ が $x \to 1$ で発散するためであり、境界点での項別操作の正当化には別の議論が必要になります。

一様収束が登場する応用場面

フーリエ級数と一様収束

フーリエ級数 $f(x) = \sum_{n=1}^{\infty} (a_n \cos nx + b_n \sin nx)$ の項別微分が許されるかどうかは、導関数の級数 $\sum_{n=1}^{\infty} n(-a_n \sin nx + b_n \cos nx)$ が一様収束するかどうかにかかっています。係数 $a_n, b_n$ が $O(1/n^2)$ 以上の速さで減衰すれば、M判定法により導関数の級数の一様収束が保証され、項別微分が正当化されます。

逆に、$a_n = O(1/n)$ 程度の緩やかな減衰しかない場合(例えば矩形波のフーリエ級数)では、導関数の級数は収束せず、項別微分はできません。これはギブス現象(不連続点近くでのオーバーシュート)とも関連しています。

微分方程式の級数解

微分方程式を級数展開で解く場面でも、一様収束は欠かせません。例えばベッセルの微分方程式の解 $J_0(x) = \sum_{n=0}^{\infty} \frac{(-1)^n}{(n!)^2}\left(\frac{x}{2}\right)^{2n}$ が実際に微分方程式を満たすことを示すには、この級数を項別に2回微分する必要があります。べき級数は収束半径内で項別微分が許されるため、この操作が正当化されます。

まとめ

本記事では、一様収束と項別微分・積分の理論について解説しました。

  • 各点収束では $N$ が $x$ に依存し、収束速度が場所によって異なるため、連続性が保存されない場合がある
  • 一様収束は「全ての $x$ で同時に収束する」ことを要求し、$\sup|f_n – f| \to 0$ で定義される。量化子の順序が各点収束と逆転する
  • ワイエルシュトラスのM判定法: $|u_n(x)| \leq M_n$, $\sum M_n < \infty$ ならば一様収束(十分条件)
  • コーシーの一様収束条件: 極限関数を知らなくても一様収束を判定できる
  • 一様収束は連続性の保存極限と積分の交換(項別積分)を保証する
  • 項別微分には導関数の級数の一様収束が必要であり、元の級数の一様収束だけでは不十分
  • べき級数は収束半径内で項別微分・積分が自由にできる
  • フーリエ級数の項別操作や微分方程式の級数解の正当化など、解析学全般で一様収束は基本的な道具

一様収束の概念は、関数空間を数学的に厳密に扱うための出発点でもあります。発展的なトピックとしては、$L^p$ 空間における収束(ノルム収束)やルベーグの収束定理(優収束定理)があり、これらは一様収束の制限を緩和しつつも積分と極限の交換を保証する、より一般的な枠組みを提供します。

次のステップとして、以下の記事も参考にしてください。