Mathematical argument
Proposition B — TRUE
If X and Y are independent and each normal, X+Y is normal.
Proof sketch. Let X ~ N(μ₁, σ₁²), Y ~ N(μ₂, σ₂²) (σᵢ ≥ 0, σᵢ=0 meaning a constant). The characteristic function of N(μ, σ²) is φ(t) = exp(iμt − σ²t²/2). By independence, φ_{X+Y}(t) = φ_X(t)φ_Y(t) = exp(i(μ₁+μ₂)t − (σ₁²+σ₂²)t²/2), which is the characteristic function of N(μ₁+μ₂, σ₁²+σ₂²). By the uniqueness theorem for characteristic functions, X+Y ~ N(μ₁+μ₂, σ₁²+σ₂²) (degenerate if both σᵢ=0). ∎
Proposition A — FALSE
If X and Y are each normal, X+Y is normal (constants count as normal).
Normality of each marginal does not constrain the joint law. Note that the trivial pair Y = −X is not a counterexample here, since X+Y = 0 is a constant, which the proposition counts as (degenerate) normal. We need a sum that is non-constant and non-normal.
Construction. Let X ~ N(0,1) and let S be independent of X with P(S=1)=P(S=−1)=1/2. Define Y = S·X.
- Y is N(0,1). For any Borel set B, P(Y∈B) = ½P(X∈B) + ½P(−X∈B) = P(X∈B), because −X has the same law as X (symmetry of N(0,1)) and S is independent of X.
- X is N(0,1) by definition.
- X+Y is not normal. X+Y = (1+S)X, which equals 0 when S=−1 and 2X when S=1. Hence P(X+Y=0) ≥ P(S=−1) = 1/2 (exactly 1/2, since P(X=0)=0). A non-degenerate normal distribution is absolutely continuous and gives probability 0 to every point, so X+Y is not non-degenerate normal. It is not degenerate either: P(X+Y=0)=1/2 and, given S=1, X+Y=2X is non-constant; Var(X+Y)=E[(1+S)²]E[X²]=2 > 0. Its law is the mixture ½δ₀ + ½N(0,4). ∎
Remarks. X and Y are uncorrelated (Cov(X,Y)=E[S]E[X²]=0) yet dependent (|Y|=|X|), so (X,Y) is not bivariate normal; this is exactly why B's independence (or, more generally, joint normality) hypothesis is needed. The KS distance between ½δ₀+½N(0,4) and N(0,2) is large (≈0.25), so the departure is clearly visible at n = 100 000.
Numerical illustration (not a proof)
out/analysis.py simulates this construction with the design seed (20261029) and n=100 000, writing out/counterexample.csv. See out/results.json → counterexample_values and supplementary_diagnostics.