Estimation.Minimax­ATE.Const­Center­Half

Half-center constant-propensity lower-bound construction for MinimaxATE: explicit witnesses, χ² indistinguishability, Ingster-style calibration, and parametric variants.

Construction 8 core · 9 supporting This file defines the paired-cell perturbation family used for the base structure-agnostic average treatment effect lower bound. ★ validDGP_hat★ validDGP_perturbed

Base Perturbation Construction

This file defines the paired-cell perturbation family used for the base structure-agnostic average treatment effect lower bound. The declarations signOf and Δ encode the balanced Rademacher signs and prove the elementary facts signOf_sq, Δ_sq, Δ_mem, Δ_le_one, and neg_one_le_Δ.

The centered nuisance functions are mhat and ghat, and the perturbed nuisances are mPerturbed and gPerturbed. The validity lemmas denom_pos, validDGP_hat, and validDGP_perturbed show that the null and perturbed nuisances define finite observed-data models in the stated parameter regime.

def signOf reviewed
Causalean.Estimation.MinimaxATE

This maps a Boolean position to its plus-or-minus-one sign.

Definition (Lean source)
def signOf (b : Bool) : ℝ := if b then 1 else -1
def Δ reviewed
Causalean.Estimation.MinimaxATE

Paired-cell Rademacher bump used to perturb the nuisance functions.

Definition (Lean source)
def Δ (lam : Fin K → Bool) (x : Fin K × Bool) : ℝ := signOf x.2 * signOf (lam x.1)
def mhat reviewed
Causalean.Estimation.MinimaxATE

Centered propensity estimate that assigns one half to every covariate value.

Definition (Lean source)
noncomputable def mhat : (Fin K × Bool) → ℝ := fun _ => 1 / 2
def ghat reviewed
Causalean.Estimation.MinimaxATE

Centered outcome-regression estimate that assigns one half in both treatment arms.

Definition (Lean source)
noncomputable def ghat : Bool → (Fin K × Bool) → ℝ := fun _ _ => 1 / 2
def mPerturbed reviewed
Causalean.Estimation.MinimaxATE

Perturbed propensity obtained by shifting the centered propensity along the Rademacher bump.

Definition (Lean source)
noncomputable def mPerturbed (β : ℝ) (lam : Fin K → Bool) : (Fin K × Bool) → ℝ := fun x => 1 / 2 - β * Δ lam x
def gPerturbed reviewed
Causalean.Estimation.MinimaxATE

Perturbed outcome regression with an unchanged control arm and a nonlinear treated-arm shift.

Definition (Lean source)
noncomputable def gPerturbed (α β : ℝ) (lam : Fin K → Bool) : Bool → (Fin K × Bool) → ℝ := fun d x => if d then (1 / 2 + α * Δ lam x) / (1 - 2 * β * Δ lam x) else 1 / 2
theorem validDGP_hat reviewed
Causalean.Estimation.MinimaxATE

The null construction's centered propensity and outcome-regression functions, both fixed at one half, define a valid finite observed-data model, i.e. take values in [0,1].

Formal statement
ValidDGP (C := Fin K × Bool) mhat ghat
Proof (Lean source)
theorem validDGP_hat : ValidDGP (C := Fin K × Bool) mhat ghat := by refine ⟨fun x => ?_, fun d x => ?_⟩ <;> · simp only [mhat, ghat]; norm_num
theorem validDGP_perturbed reviewed
Causalean.Estimation.MinimaxATE

Given nonnegative bump magnitudes α and β with α + 2β ≤ 1/2, the perturbed propensity and outcome-regression functions indexed by a Rademacher sign vector lam define a valid finite observed-data model, i.e. take values in [0,1].

Formal statement
:
0 ≤ α
:
0 ≤ β
hαβ :
α + 2 * β ≤ 1 / 2
lam :
Fin K → Bool
ValidDGP (mPerturbed β lam) (gPerturbed α β lam)
Proof (Lean source)
theorem validDGP_perturbed (hα : 0 ≤ α) (hβ : 0 ≤ β) (hαβ : α + 2 * β ≤ 1 / 2) (lam : Fin K → Bool) : ValidDGP (mPerturbed β lam) (gPerturbed α β lam) := by have hβ4 : β ≤ 1 / 4 := by linarith refine ⟨fun x => ?_, fun d x => ?_⟩ · -- propensity `1/2 − β·Δ ∈ [0,1]` constructor <;> simp only [mPerturbed] · rcases Δ_mem lam x with h | h <;> · rw [h]; nlinarith · rcases Δ_mem lam x with h | h <;> · rw [h]; nlinarith · -- outcome `gλ(d,·) ∈ [0,1]` have hd := denom_pos hβ hαβ hα lam x rcases d with _ | _ · -- control arm `= 1/2` simp only [gPerturbed, Bool.false_eq_true, if_false]; norm_num · -- treated arm `(1/2 + α·Δ)/(1 − 2β·Δ) ∈ [0,1]` simp only [gPerturbed, if_true] rcases Δ_mem lam x with h | h · rw [h] at hd ⊢ constructor · apply div_nonneg <;> nlinarith · rw [div_le_one hd]; nlinarith · rw [h] at hd ⊢ constructor · apply div_nonneg <;> nlinarith · rw [div_le_one hd]; nlinarith
9 supporting declarations (lemmas, instances)
Chi­Sq­Overlap 2 core · 2 supporting This file computes the singleton probabilities and the single-observation chi-squared overlap for the base paired-cell perturbation family. ★ chiSqOverlap_eq

Base Chi-Squared Second-Moment Overlap

This file computes the singleton probabilities and the single-observation chi-squared overlap for the base paired-cell perturbation family. The helper obsLaw_real_singleton identifies the real mass of a singleton observation, chiSqOverlap defines the one-observation second-moment overlap, and obsReal_perturbed_eq gives a denominator-free formula for each perturbed observed-data mass.

The main theorem chiSqOverlap_eq proves the closed form used by the Ingster indistinguishability argument. "Overlap" here means the χ² second-moment overlap between two perturbed observed-data laws relative to the null; it is not the causal positivity/overlap assumption.

def chiSqOverlap reviewed
Causalean.Estimation.MinimaxATE

The one-observation χ² second-moment overlap of two perturbed laws relative to the null.

Definition (Lean source)
noncomputable def chiSqOverlap (α β : ℝ) (lam lam' : Fin K → Bool) : ℝ := ∑ z : Obs (Fin K × Bool), obsReal (mPerturbed β lam) (gPerturbed α β lam) z * obsReal (mPerturbed β lam') (gPerturbed α β lam') z / obsReal mhat ghat z
Causalean.Estimation.MinimaxATE.chiSqOverlap · Causalean/Estimation/MinimaxATE/ConstCenterHalf/ChiSqOverlap.lean:49
theorem chiSqOverlap_eq reviewed
Causalean.Estimation.MinimaxATE

Closed form of the one-observation χ² overlap. For nonnegative bump magnitudes α and β with α + 2β ≤ 1/2, the regime keeping every perturbed nuisance in [0,1], and any two Rademacher sign vectors lam, lam' indexing perturbed laws, the one-observation χ² second-moment overlap of the two perturbed laws relative to the null equals 1 + (2(α²+2αβ+3β²)/K)·Σⱼ signOf(lam j)·signOf(lam' j).

Formal statement
:
0 ≤ α
:
0 ≤ β
hαβ :
α + 2 * β ≤ 1 / 2
lam lam' :
Fin K → Bool
chiSqOverlap α β lam lam'
= 1
+ (2 * (α ^ 2 + 2 * α * β + 3 * β ^ 2) / (K : ℝ)) * ∑ j, signOf (lam j) * signOf (lam' j)
Proof (Lean source)
theorem chiSqOverlap_eq [NeZero K] (hα : 0 ≤ α) (hβ : 0 ≤ β) (hαβ : α + 2 * β ≤ 1 / 2) (lam lam' : Fin K → Bool) : chiSqOverlap α β lam lam' = 1 + (2 * (α ^ 2 + 2 * α * β + 3 * β ^ 2) / (K : ℝ)) * ∑ j, signOf (lam j) * signOf (lam' j) := by have hK : (K : ℝ) ≠ 0 := Nat.cast_ne_zero.mpr (NeZero.ne K) have hcard : (card (Fin K × Bool) : ℝ) = 2 * K := by rw [Fintype.card_prod, Fintype.card_fin, Fintype.card_bool]; push_cast; ring -- Rewrite the overlap sum as a sum over cells `j : Fin K` of an explicit -- per-cell value, by collapsing the inner `Bool × Bool` sum over `(d, y)`. have hsum : chiSqOverlap α β lam lam' = ∑ j : Fin K, 2 / (K : ℝ) * (1 / 2 + (α ^ 2 + 2 * α * β + 3 * β ^ 2) * (signOf (lam j) * signOf (lam' j))) := by unfold chiSqOverlap -- peel `Obs = (Fin K × Bool) × (Bool × Bool)` into `∑ (j,pos), ∑ (d,y)`, -- then split the covariate `Fin K × Bool` into `∑ j, ∑ pos`. rw [Fintype.sum_prod_type, Fintype.sum_prod_type] refine Finset.sum_congr rfl fun j _ => ?_ -- collapse the position sum `∑ pos : Bool` and the `(d, y) : Bool × Bool` sum; -- replace every perturbed mass by its denominator-free closed form, and the -- null mass `obsReal mhat ghat = (2K)⁻¹·(1/2)·(1/2)`. simp only [Fintype.sum_prod_type, Fintype.sum_bool] -- perturbed masses → denominator-free closed forms; null mass → its constant simp only [obsReal_perturbed_eq hα hβ hαβ] simp only [obsReal, mhat, ghat, Bool.false_eq_true, if_false, if_true] have e1 : Δ lam (j, true) = signOf (lam j) := by simp [Δ] have e2 : Δ lam (j, false) = -signOf (lam j) := by simp [Δ] have e3 : Δ lam' (j, true) = signOf (lam' j) := by simp [Δ] have e4 : Δ lam' (j, false) = -signOf (lam' j) := by simp [Δ] simp only [e1, e2, e3, e4] rw [hcard] have hs : (signOf (lam j)) ^ 2 = 1 := signOf_sq _ have hs' : (signOf (lam' j)) ^ 2 = 1 := signOf_sq _ field_simp nlinarith [hs, hs', mul_self_nonneg (signOf (lam j) * signOf (lam' j))] rw [hsum] have hsplit : ∀ j : Fin K, 2 / (K : ℝ) * (1 / 2 + (α ^ 2 + 2 * α * β + 3 * β ^ 2) * (signOf (lam j) * signOf (lam' j))) = 1 / (K : ℝ) + 2 * (α ^ 2 + 2 * α * β + 3 * β ^ 2) / (K : ℝ) * (signOf (lam j) * signOf (lam' j)) := by intro j; field_simp rw [Finset.sum_congr rfl (fun j _ => hsplit j), Finset.sum_add_distrib, Finset.sum_const, Finset.card_univ, Fintype.card_fin, nsmul_eq_mul, ← Finset.mul_sum] field_simp
2 supporting declarations (lemmas, instances)
Explicit­Witness 6 core · 6 supporting This file builds the baseline finite two-point witness for the structure-agnostic ATE lower bound. ★ explicit_minimax_lower_bound

Explicit Two-Point Witness

This file builds the baseline finite two-point witness for the structure-agnostic ATE lower bound. It defines the centered null law Qfalse, the uniform sign weights signWeight, the sign-indexed perturbed laws Qpert, and the mixed alternative Qtrue, together with their probability-measure lemmas.

The helper real_le_minimaxMiss relates any in-class DGP's miss probability to the minimax miss functional. The construction explicitWitness packages the null and mixed alternative into a TwoPointWitness under a supplied total-variation bound, and explicit_minimax_lower_bound turns that witness into the conditional finite-cell minimax lower bound used by the chi-squared core.

def Qfalse reviewed
Causalean.Estimation.MinimaxATE

The n-sample law of the centered null data-generating process.

Definition (Lean source)
noncomputable def Qfalse (K n : ℕ) [NeZero K] : Measure (Fin n → Obs (Fin K × Bool)) := productLaw (validDGP_hat (K := K)) n
def signWeight reviewed
Causalean.Estimation.MinimaxATE

Equal mixture weight on every Rademacher sign vector.

Definition (Lean source)
noncomputable def signWeight (K : ℕ) : (Fin K → Bool) → ℝ≥0∞ := fun _ => (card (Fin K → Bool) : ℝ≥0∞)⁻¹
def Qpert reviewed
Causalean.Estimation.MinimaxATE

The n-sample law for one perturbed data-generating process indexed by a sign vector.

Definition (Lean source)
noncomputable def Qpert [NeZero K] (hα : 0 ≤ α) (hβ : 0 ≤ β) (hαβ : α + 2 * β ≤ 1 / 2) (n : ℕ) (lam : Fin K → Bool) : Measure (Fin n → Obs (Fin K × Bool)) := productLaw (validDGP_perturbed hα hβ hαβ lam) n
def Qtrue reviewed
Causalean.Estimation.MinimaxATE

Alternative n-sample law formed by uniformly mixing over all perturbation signs.

Definition (Lean source)
noncomputable def Qtrue [NeZero K] (hα : 0 ≤ α) (hβ : 0 ≤ β) (hαβ : α + 2 * β ≤ 1 / 2) (n : ℕ) : Measure (Fin n → Obs (Fin K × Bool)) := mixture (signWeight K) (fun lam => Qpert hα hβ hαβ n lam)
def explicitWitness reviewed
Causalean.Estimation.MinimaxATE

Assemble the explicit Le Cam witness from the centered null and the uniform perturbation mixture.

Definition (Lean source)
noncomputable def explicitWitness [NeZero K] (hα : 0 ≤ α) (hβ : 0 ≤ β) (hαβ : α + 2 * β ≤ 1 / 2) (hm : β ^ 2 ≤ εm) (hg : (α + β) ^ 2 / (1 - 2 * β) ^ 2 ≤ εg) (hεg : 0 ≤ εg) (hεm : 0 ≤ εm) (htv : tvDist (Qfalse K n) (Qtrue hα hβ hαβ n) ≤ 1 / 2) : TwoPointWitness (Fin K × Bool) n mhat ghat εg εm where s := β * (α + β) / (1 - 4 * β ^ 2) c := 1 / 2 Q := fun j => cond j (Qtrue hα hβ hαβ n) (Qfalse K n) prob := by intro j; cases j · exact Qfalse_isProb K n · exact Qtrue_isProb hα hβ hαβ n θ := fun j => cond j (2 * β * (α + β) / (1 - 4 * β ^ 2)) 0 sep := by have hβ4 : β ≤ 1 / 4 := by linarith have hden : (0:ℝ) < 1 - 4 * β ^ 2 := by nlinarith have hnum : (0:ℝ) ≤ 2 * β * (α + β) := by have : (0:ℝ) ≤ α + β := by linarith positivity change 2 * (β * (α + β) / (1 - 4 * β ^ 2)) ≤ |2 * β * (α + β) / (1 - 4 * β ^ 2) - 0| rw [sub_zero, abs_of_nonneg (div_nonneg hnum hden.le)] apply le_of_eq; ring tvBound := by simpa using htv dominated := by intro est j cases j · -- `Q false = Qfalse`, `θ false = 0 = ate ĝ` have hb := real_le_minimaxMiss (n := n) (inClass_null hεg hεm) est (β * (α + β) / (1 - 4 * β ^ 2)) rw [ate_ghat] at hb exact hb · -- `Q true = Qtrue` is the mixture; bound each part then `mixtureReal_le` haveI : ∀ lam : Fin K → Bool, IsProbabilityMeasure (Qpert hα hβ hαβ n lam) := fun lam => Qpert_isProb hα hβ hαβ n lam change (Qtrue hα hβ hαβ n).real {x | β * (α + β) / (1 - 4 * β ^ 2) ≤ |est x - 2 * β * (α + β) / (1 - 4 * β ^ 2)|} ≤ minimaxMiss mhat ghat εg εm n est (β * (α + β) / (1 - 4 * β ^ 2)) unfold Qtrue refine mixtureReal_le (signWeight K) (signWeight_sum K) (fun lam => Qpert hα hβ hαβ n lam) _ _ ?_ intro lam have hb := real_le_minimaxMiss (n := n) (inClass_perturbed hα hβ hαβ hm hg lam) est (β * (α + β) / (1 - 4 * β ^ 2)) rw [ate_gPerturbed hα hβ hαβ lam] at hb exact hb
theorem explicit_minimax_lower_bound reviewed
Causalean.Estimation.MinimaxATE

Fix nonnegative bump magnitudes α and β with α + 2β ≤ 1/2 meeting the Rademacher perturbation budgets β² ≤ εm and (α+β)²/(1−2β)² ≤ εg for nonnegative error tolerances εg, εm, and suppose the centered null law and the uniform mixture of perturbed laws are statistically close, at total-variation distance at most 1/2. Then for any measurable estimator of the average treatment effect, the worst-case-over-class probability that it misses the true ATE by s = β(α+β)/(1−4β²) is at least 1/4.

Formal statement
:
0 ≤ α
:
0 ≤ β
hαβ :
α + 2 * β ≤ 1 / 2
hm :
β ^ 2 ≤ εm
hg :
(α + β) ^ 2 / (1 - 2 * β) ^ 2 ≤ εg
hεg :
0 ≤ εg
hεm :
0 ≤ εm
htv :
tvDist (Qfalse K n) (Qtrue hα hβ hαβ n) ≤ 1 / 2
est :
(Fin n → Obs (Fin K × Bool)) → ℝ
hest :
1 / 4 ≤ minimaxMiss mhat ghat εg εm n est (β * (α + β) / (1 - 4 * β ^ 2))
Proof (Lean source)
theorem explicit_minimax_lower_bound [NeZero K] (hα : 0 ≤ α) (hβ : 0 ≤ β) (hαβ : α + 2 * β ≤ 1 / 2) (hm : β ^ 2 ≤ εm) (hg : (α + β) ^ 2 / (1 - 2 * β) ^ 2 ≤ εg) (hεg : 0 ≤ εg) (hεm : 0 ≤ εm) (htv : tvDist (Qfalse K n) (Qtrue hα hβ hαβ n) ≤ 1 / 2) {est : (Fin n → Obs (Fin K × Bool)) → ℝ} (hest : Measurable est) : 1 / 4 ≤ minimaxMiss mhat ghat εg εm n est (β * (α + β) / (1 - 4 * β ^ 2)) := twoPointWitness_quarter (explicitWitness hα hβ hαβ hm hg hεg hεm htv) (le_refl _) hest
6 supporting declarations (lemmas, instances)
Chi­Squared­Core 1 core · 8 supporting This file proves the statistical indistinguishability bound for the baseline structure-agnostic ATE construction. ★ minimax_lower_bound

Chi-Squared Core

This file proves the statistical indistinguishability bound for the baseline structure-agnostic ATE construction. It first supplies finite-support facts such as absolutelyContinuous_of_singleton_pos, productLaw_real_singleton, Qfalse_singleton_ne_zero, and Qtrue_real_singleton.

The core identity one_add_chiSqDiv_Qtrue_Qfalse evaluates the mixture second moment. The theorem chiSqDiv_Qtrue_Qfalse_le_one applies ingster_bound, and tvDist_Qfalse_Qtrue_le_half converts that chi-squared bound into total-variation indistinguishability. The final theorem minimax_lower_bound discharges the abstract two-point witness and gives the unconditional finite-cell minimax lower bound.

theorem minimax_lower_bound reviewed
Causalean.Estimation.MinimaxATE

Structure-agnostic minimax lower bound (unconditional). Fix nonnegative bump magnitudes α and β with α + 2β ≤ 1/2 meeting the Rademacher perturbation budgets β² ≤ εm and (α+β)²/(1−2β)² ≤ εg for nonnegative outcome- and propensity-error tolerances εg, εm, in the sample-size regime 2n²γ² ≤ K·log 2 with γ = α²+2αβ+3β² and 2γ ≤ 1. Then for any measurable estimator of the average treatment effect from n i.i.d. paired-cell observations, the worst-case-over-class probability that it misses the true ATE by s = β(α+β)/(1−4β²), over the structure-agnostic nuisance class centered at the constant estimates (m̂, ĝ) = (1/2, 1/2), is at least 1/4 — the doubly-robust product rate is unbeatable.

Formal statement
:
0 ≤ α
:
0 ≤ β
hαβ :
α + 2 * β ≤ 1 / 2
hm :
β ^ 2 ≤ εm
hg :
(α + β) ^ 2 / (1 - 2 * β) ^ 2 ≤ εg
hεg :
0 ≤ εg
hεm :
0 ≤ εm
:
2 * (α ^ 2 + 2 * α * β + 3 * β ^ 2) ≤ 1
hreg :
2 * (n : ℝ) ^ 2 * (α ^ 2 + 2 * α * β + 3 * β ^ 2) ^ 2 ≤ (K : ℝ) * log 2
est :
(Fin n → Obs (Fin K × Bool)) → ℝ
hest :
1 / 4 ≤ minimaxMiss mhat ghat εg εm n est (β * (α + β) / (1 - 4 * β ^ 2))
Proof (Lean source)
theorem minimax_lower_bound [NeZero K] (hα : 0 ≤ α) (hβ : 0 ≤ β) (hαβ : α + 2 * β ≤ 1 / 2) (hm : β ^ 2 ≤ εm) (hg : (α + β) ^ 2 / (1 - 2 * β) ^ 2 ≤ εg) (hεg : 0 ≤ εg) (hεm : 0 ≤ εm) (hγ : 2 * (α ^ 2 + 2 * α * β + 3 * β ^ 2) ≤ 1) (hreg : 2 * (n : ℝ) ^ 2 * (α ^ 2 + 2 * α * β + 3 * β ^ 2) ^ 2 ≤ (K : ℝ) * log 2) {est : (Fin n → Obs (Fin K × Bool)) → ℝ} (hest : Measurable est) : 1 / 4 ≤ minimaxMiss mhat ghat εg εm n est (β * (α + β) / (1 - 4 * β ^ 2)) := explicit_minimax_lower_bound hα hβ hαβ hm hg hεg hεm (tvDist_Qfalse_Qtrue_le_half hα hβ hαβ hγ hreg) hest
8 supporting declarations (lemmas, instances)
Continuous­X 4 core · 6 supporting This file lifts the finite-cell structure-agnostic ATE lower bound to a continuous-covariate experiment with ancillary within-cell variation. ★ two_point_lower_bound_continuous

Continuous Covariates

This file lifts the finite-cell structure-agnostic ATE lower bound to a continuous-covariate experiment with ancillary within-cell variation. The law ancillaryLaw models independent within-cell draws, while QfalseCont and QtrueCont tensor that common ancillary factor with the finite null and mixed alternative laws.

The probability-measure lemmas QfalseCont_isProb and QtrueCont_isProb set up the product experiment. The theorem chiSqDiv_QtrueCont_QfalseCont_le_one transfers finite-cell chi-squared indistinguishability through the common ancillary factor, and tvDist_QfalseCont_QtrueCont_le_half gives the corresponding total-variation bound. The final statement two_point_lower_bound_continuous is a two-hypothesis miss-probability lower bound for estimators that observe both the finite cell data and ancillary continuous positions.

def ancillaryLaw reviewed
Causalean.Estimation.MinimaxATE

Joint law of the ancillary within-cell positions in the n-sample experiment.

Definition (Lean source)
noncomputable def ancillaryLaw (ρ : Measure W) (n : ℕ) : Measure (Fin n → W) := Measure.pi (fun _ => ρ)
Causalean.Estimation.MinimaxATE.ancillaryLaw · Causalean/Estimation/MinimaxATE/ConstCenterHalf/ContinuousX.lean:54
def QfalseCont reviewed
Causalean.Estimation.MinimaxATE

Continuous-covariate null law, pairing the finite-cell null sample with ancillary positions.

Definition (Lean source)
noncomputable def QfalseCont (K n : ℕ) [NeZero K] (ρ : Measure W) : Measure ((Fin n → Obs (Fin K × Bool)) × (Fin n → W)) := (Qfalse K n).prod (ancillaryLaw ρ n)
Causalean.Estimation.MinimaxATE.QfalseCont · Causalean/Estimation/MinimaxATE/ConstCenterHalf/ContinuousX.lean:64 · uses Obs
def QtrueCont reviewed
Causalean.Estimation.MinimaxATE

Continuous-covariate alternative law, pairing the finite-cell mixture with ancillary positions.

Definition (Lean source)
noncomputable def QtrueCont [NeZero K] (hα : 0 ≤ α) (hβ : 0 ≤ β) (hαβ : α + 2 * β ≤ 1 / 2) (n : ℕ) (ρ : Measure W) : Measure ((Fin n → Obs (Fin K × Bool)) × (Fin n → W)) := (Qtrue hα hβ hαβ n).prod (ancillaryLaw ρ n)
Causalean.Estimation.MinimaxATE.QtrueCont · Causalean/Estimation/MinimaxATE/ConstCenterHalf/ContinuousX.lean:70 · uses Obs
theorem two_point_lower_bound_continuous reviewed
Causalean.Estimation.MinimaxATE

Fix nonnegative bump magnitudes α and β with α + 2β ≤ 1/2, in the sample-size regime 2n²γ² ≤ K·log 2 with γ = α²+2αβ+3β² and 2γ ≤ 1. For any measurable estimator est of the average treatment effect that observes both the finite paired-cell data and n independent ancillary continuous within-cell positions drawn from an arbitrary probability space, the larger of the two miss probabilities — under the mixed alternative law and under the null law — that est misses the corresponding true ATE (2β(α+β)/(1−4β²) or 0) by β(α+β)/(1−4β²) is at least 1/4.

Formal statement
:
0 ≤ α
:
0 ≤ β
hαβ :
α + 2 * β ≤ 1 / 2
:
2 * (α ^ 2 + 2 * α * β + 3 * β ^ 2) ≤ 1
hreg :
2 * (n : ℝ) ^ 2 * (α ^ 2 + 2 * α * β + 3 * β ^ 2) ^ 2 ≤ (K : ℝ) * log 2
est :
((Fin n → Obs (Fin K × Bool)) × (Fin n → W)) → ℝ
hest :
1 / 4
max ((QtrueCont hα hβ hαβ n ρ).real {x | β * (α + β) / (1 - 4 * β ^ 2) ≤ |est x - 2 * β * (α + β) / (1 - 4 * β ^ 2)|}) ((QfalseCont K n ρ).real {x | β * (α + β) / (1 - 4 * β ^ 2) ≤ |est x - 0|})
Proof (Lean source)
theorem two_point_lower_bound_continuous [NeZero K] (ρ : Measure W) [IsProbabilityMeasure ρ] (hα : 0 ≤ α) (hβ : 0 ≤ β) (hαβ : α + 2 * β ≤ 1 / 2) (hγ : 2 * (α ^ 2 + 2 * α * β + 3 * β ^ 2) ≤ 1) (hreg : 2 * (n : ℝ) ^ 2 * (α ^ 2 + 2 * α * β + 3 * β ^ 2) ^ 2 ≤ (K : ℝ) * log 2) {est : ((Fin n → Obs (Fin K × Bool)) × (Fin n → W)) → ℝ} (hest : Measurable est) : 1 / 4 ≤ max ((QtrueCont hα hβ hαβ n ρ).real {x | β * (α + β) / (1 - 4 * β ^ 2) ≤ |est x - 2 * β * (α + β) / (1 - 4 * β ^ 2)|}) ((QfalseCont K n ρ).real {x | β * (α + β) / (1 - 4 * β ^ 2) ≤ |est x - 0|}) := by haveI : IsProbabilityMeasure (QtrueCont (K := K) hα hβ hαβ n ρ) := QtrueCont_isProb (K := K) hα hβ hαβ ρ haveI : IsProbabilityMeasure (QfalseCont K n ρ) := QfalseCont_isProb ρ have hac : QtrueCont hα hβ hαβ n ρ ≪ QfalseCont K n ρ := by unfold QtrueCont QfalseCont exact (absolutelyContinuous_of_singleton_pos _ _ Qfalse_singleton_ne_zero).prod (Measure.AbsolutelyContinuous.refl _) have hint := integrable_sq_rnDeriv_QtrueCont_QfalseCont (K := K) (n := n) ρ hα hβ hαβ have hchi := chiSqDiv_QtrueCont_QfalseCont_le_one (K := K) (n := n) ρ hα hβ hαβ hγ hreg -- Separation `2s ≤ |θ₀ − θ₁|` with `θ₁ = 0`. have hsep : 2 * (β * (α + β) / (1 - 4 * β ^ 2)) ≤ |2 * β * (α + β) / (1 - 4 * β ^ 2) - 0| := by have hβ4 : β ≤ 1 / 4 := by linarith have hden : (0 : ℝ) < 1 - 4 * β ^ 2 := by nlinarith have hnum : (0 : ℝ) ≤ 2 * β * (α + β) := by have : (0 : ℝ) ≤ α + β := by linarith positivity rw [sub_zero, abs_of_nonneg (div_nonneg hnum hden.le)] apply le_of_eq; ring have hkey := two_point_lower_bound_of_chiSqDiv_le (P₀ := QtrueCont hα hβ hαβ n ρ) (P₁ := QfalseCont K n ρ) hest (θ₀ := 2 * β * (α + β) / (1 - 4 * β ^ 2)) (θ₁ := 0) (s := β * (α + β) / (1 - 4 * β ^ 2)) hsep hac hint (c := 1) hchi -- `(1 - (1/2)·√1)/2 = 1/4`. have hval : (1 - (1 / 2) * sqrt 1) / 2 = 1 / 4 := by rw [Real.sqrt_one]; norm_num rwa [hval] at hkey
Causalean.Estimation.MinimaxATE.two_point_lower_bound_continuous · Causalean/Estimation/MinimaxATE/ConstCenterHalf/ContinuousX.lean:194 · uses Obs , QfalseCont , QtrueCont
6 supporting declarations (lemmas, instances)
Gap 2 core · 1 supporting This file computes the exact average treatment effect gap for the base paired-cell perturbation family. ★ ate_gPerturbed★ ate_gap

Base ATE Gap

This file computes the exact average treatment effect gap for the base paired-cell perturbation family. The theorem ate_ghat records that the centered null estimate has zero ATE. The private calculation perPair collapses the two positions in a paired cell, and ate_gPerturbed sums those contributions to show that every sign-indexed perturbation has the same ATE 2β(α+β)/(1−4β²).

The public theorem ate_gap packages the separation between the perturbed construction and the null estimate; this is the ATE separation used in the finite two-point lower bound.

theorem ate_gPerturbed reviewed
Causalean.Estimation.MinimaxATE

Exact ATE of the perturbed construction. For nonnegative bump magnitudes α and β with α + 2β ≤ 1/2 and any Rademacher sign vector lam, the average treatment effect of the perturbed construction equals 2β(α+β)/(1−4β²), independent of lam.

Formal statement
:
0 ≤ α
:
0 ≤ β
hαβ :
α + 2 * β ≤ 1 / 2
lam :
Fin K → Bool
ate (gPerturbed α β lam) = 2 * β * (α + β) / (1 - 4 * β ^ 2)
Proof (Lean source)
theorem ate_gPerturbed [NeZero K] (hα : 0 ≤ α) (hβ : 0 ≤ β) (hαβ : α + 2 * β ≤ 1 / 2) (lam : Fin K → Bool) : ate (gPerturbed α β lam) = 2 * β * (α + β) / (1 - 4 * β ^ 2) := by have hβ4 : β ≤ 1 / 4 := by linarith have h3 : (1 : ℝ) - 4 * β ^ 2 > 0 := by nlinarith have hK : (K : ℝ) ≠ 0 := Nat.cast_ne_zero.mpr (NeZero.ne K) rw [ate] -- Split the sum over `Fin K × Bool` into pairs, collapse each pair via `perPair`. rw [Fintype.sum_prod_type] have hpair : ∀ j : Fin K, (∑ b : Bool, (gPerturbed α β lam true (j, b) - gPerturbed α β lam false (j, b))) = 4 * β * (α + β) / (1 - 4 * β ^ 2) := by intro j rw [Fintype.sum_bool] have := perPair hα hβ hαβ lam j linarith [this] rw [Finset.sum_congr rfl (fun j _ => hpair j)] rw [Finset.sum_const, Finset.card_univ, Fintype.card_fin, nsmul_eq_mul] rw [Fintype.card_prod, Fintype.card_fin, Fintype.card_bool] push_cast field_simp ring
Causalean.Estimation.MinimaxATE.ate_gPerturbed · Causalean/Estimation/MinimaxATE/ConstCenterHalf/Gap.lean:81 · uses ate , gPerturbed
theorem ate_gap reviewed
Causalean.Estimation.MinimaxATE

For nonnegative bump magnitudes α and β with α + 2β ≤ 1/2 and any Rademacher sign vector lam, the gap between the perturbed construction's average treatment effect and the null estimate's average treatment effect (which is zero) equals 2β(α+β)/(1−4β²).

Formal statement
:
0 ≤ α
:
0 ≤ β
hαβ :
α + 2 * β ≤ 1 / 2
lam :
Fin K → Bool
ate (gPerturbed α β lam) - ate (ghat : Bool → (Fin K × Bool) → ℝ)
= 2 * β * (α + β) / (1 - 4 * β ^ 2)
Proof (Lean source)
theorem ate_gap [NeZero K] (hα : 0 ≤ α) (hβ : 0 ≤ β) (hαβ : α + 2 * β ≤ 1 / 2) (lam : Fin K → Bool) : ate (gPerturbed α β lam) - ate (ghat : Bool → (Fin K × Bool) → ℝ) = 2 * β * (α + β) / (1 - 4 * β ^ 2) := by rw [ate_ghat, sub_zero] exact ate_gPerturbed hα hβ hαβ lam
1 supporting declaration (lemmas, instances)
Ingster 1 core · 0 supporting This file proves the Ingster chi-squared average bound for Rademacher sign mixtures with a common coordinate weight. ★ ingster_bound

Ingster Average Bound

This file proves the Ingster chi-squared average bound for Rademacher sign mixtures with a common coordinate weight. The theorem ingster_bound controls the double average of (1 + (2γ/K) S)^n over pairs of sign vectors by 2 when 0 ≤ γ, 2γ ≤ 1, and 2 n² γ² ≤ K log 2.

This analytic inequality is the step that turns the explicit one-observation overlap formula into total-variation indistinguishability for the minimax lower bound.

theorem ingster_bound reviewed
Causalean.Estimation.MinimaxATE

For a nonnegative coefficient γ with 2γ ≤ 1 satisfying the regularity budget 2n²γ² ≤ K·log 2, the uniform double average, over pairs of Rademacher sign vectors lam, lam' : Fin K → Bool, of (1 + (2γ/K)·Σⱼ signOf(lam j)·signOf(lam' j))^n is at most 2.

Formal statement
K n :
γ :
hγ0 :
0 ≤ γ
:
2 * γ ≤ 1
hreg :
2 * (n : ℝ) ^ 2 * γ ^ 2 ≤ (K : ℝ) * log 2
∑ lam : Fin K → Bool, ∑ lam' : Fin K → Bool, ((2 : ℝ) ^ K)⁻¹ * ((2 : ℝ) ^ K)⁻¹ * (1 + (2 * γ / (K : ℝ)) * ∑ j, signOf (lam j) * signOf (lam' j)) ^ n
≤ 2
Proof (Lean source)
theorem ingster_bound (K n : ℕ) [NeZero K] {γ : ℝ} (hγ0 : 0 ≤ γ) (hγ : 2 * γ ≤ 1) (hreg : 2 * (n : ℝ) ^ 2 * γ ^ 2 ≤ (K : ℝ) * log 2) : ∑ lam : Fin K → Bool, ∑ lam' : Fin K → Bool, ((2 : ℝ) ^ K)⁻¹ * ((2 : ℝ) ^ K)⁻¹ * (1 + (2 * γ / (K : ℝ)) * ∑ j, signOf (lam j) * signOf (lam' j)) ^ n ≤ 2 := by -- Basic facts about `K`. have hKpos : 0 < (K : ℝ) := by have := NeZero.ne K exact_mod_cast Nat.pos_of_ne_zero this have hKne : (K : ℝ) ≠ 0 := ne_of_gt hKpos set c : ℝ := 2 * γ / (K : ℝ) with hc_def have hc0 : 0 ≤ c := by rw [hc_def]; positivity -- abbreviations set w : ℝ := ((2 : ℝ) ^ K)⁻¹ with hw_def have hw0 : 0 ≤ w := by rw [hw_def]; positivity -- Per-term: `(1 + c S)^n ≤ exp (n c S)` where `S = ∑ j, signOf (lam j) * signOf (lam' j)`. have step1 : ∀ lam lam' : Fin K → Bool, (1 + c * ∑ j, signOf (lam j) * signOf (lam' j)) ^ n ≤ exp ((n : ℝ) * (c * ∑ j, signOf (lam j) * signOf (lam' j))) := by intro lam lam' set S : ℝ := ∑ j, signOf (lam j) * signOf (lam' j) with hS_def -- `-K ≤ S ≤ K` have hScard : ∀ j : Fin K, -1 ≤ signOf (lam j) * signOf (lam' j) ∧ signOf (lam j) * signOf (lam' j) ≤ 1 := by intro j rcases signOf_mem (lam j) with h1 | h1 <;> rcases signOf_mem (lam' j) with h2 | h2 <;> simp [h1, h2] have hSlow : -(K : ℝ) ≤ S := by rw [hS_def] have : ∀ j ∈ univ, (-1 : ℝ) ≤ signOf (lam j) * signOf (lam' j) := fun j _ => (hScard j).1 calc -(K : ℝ) = ∑ _j : Fin K, (-1 : ℝ) := by rw [Finset.sum_const, Finset.card_univ, Fintype.card_fin]; simp _ ≤ _ := Finset.sum_le_sum this -- `c * S ≥ -1` have hcS_ge : -1 ≤ c * S := by have : c * (-(K : ℝ)) ≤ c * S := mul_le_mul_of_nonneg_left hSlow hc0 have hcK : c * (K : ℝ) = 2 * γ := by rw [hc_def]; field_simp calc (-1 : ℝ) ≤ -(2 * γ) := by linarith _ = c * (-(K : ℝ)) := by rw [mul_neg, hcK] _ ≤ c * S := this have h0 : (0 : ℝ) ≤ 1 + c * S := by linarith -- `1 + cS ≤ exp (cS)` have hexp : 1 + c * S ≤ exp (c * S) := by have := Real.add_one_le_exp (c * S) linarith calc (1 + c * S) ^ n ≤ (exp (c * S)) ^ n := pow_le_pow_left₀ h0 hexp n _ = exp ((n : ℝ) * (c * S)) := by rw [Real.exp_nat_mul] -- Step 2: bound the whole double sum by the exp double sum. have step2 : ∑ lam : Fin K → Bool, ∑ lam' : Fin K → Bool, w * w * (1 + c * ∑ j, signOf (lam j) * signOf (lam' j)) ^ n ≤ ∑ lam : Fin K → Bool, ∑ lam' : Fin K → Bool, w * w * exp ((n : ℝ) * (c * ∑ j, signOf (lam j) * signOf (lam' j))) := by apply Finset.sum_le_sum intro lam _ apply Finset.sum_le_sum intro lam' _ apply mul_le_mul_of_nonneg_left (step1 lam lam') positivity -- Step 3: the exp double sum equals `(cosh (n c))^K`. have step3 : ∑ lam : Fin K → Bool, ∑ lam' : Fin K → Bool, w * w * exp ((n : ℝ) * (c * ∑ j, signOf (lam j) * signOf (lam' j))) = (Real.cosh ((n : ℝ) * c)) ^ K := by -- Define the per-coordinate factor. set h : Bool × Bool → ℝ := fun p => (1 / 4 : ℝ) * exp ((n : ℝ) * c * (signOf p.1 * signOf p.2)) with hh_def -- The single-coordinate sum is cosh. have hsum_h : (∑ p : Bool × Bool, h p) = Real.cosh ((n : ℝ) * c) := by rw [Fintype.sum_prod_type] simp only [hh_def, Fintype.sum_bool, signOf_true, signOf_false] rw [show (n : ℝ) * c * (1 * 1) = (n : ℝ) * c by ring, show (n : ℝ) * c * (1 * -1) = -((n : ℝ) * c) by ring, show (n : ℝ) * c * (-1 * 1) = -((n : ℝ) * c) by ring, show (n : ℝ) * c * (-1 * -1) = (n : ℝ) * c by ring] rw [Real.cosh_eq] ring -- Now the double sum equals `(∑ p, h p)^K`. rw [← hsum_h] rw [Fintype.sum_pow] -- RHS is now `∑ ρ : Fin K → Bool × Bool, ∏ j, h (ρ j)`. -- LHS: convert the double sum into a sum over the product, then reindex by the equiv. rw [← Fintype.sum_prod_type (f := fun p : (Fin K → Bool) × (Fin K → Bool) => w * w * exp ((n : ℝ) * (c * ∑ j, signOf (p.1 j) * signOf (p.2 j))))] -- LHS : `∑ p : (Fin K → Bool) × (Fin K → Bool), w*w*exp(...)` rw [← Equiv.sum_comp (Equiv.arrowProdEquivProdArrow (Fin K) (fun _ => Bool) (fun _ => Bool)).symm] apply Finset.sum_congr rfl intro ρ _ -- For a fixed `ρ : Fin K → Bool × Bool`. simp only [Equiv.arrowProdEquivProdArrow_symm_apply] -- Goal: w*w*exp((n)*(c*∑ j, signOf (ρ j).1 * signOf (ρ j).2)) = ∏ j, h (ρ j) rw [hh_def] -- ∏ j, (1/4)*exp(nc*(signOf (ρ j).1 * signOf (ρ j).2)) rw [Finset.prod_mul_distrib] -- = (∏ j, 1/4) * (∏ j, exp(...)) rw [← Real.exp_sum] -- ∏ j, exp = exp (∑ j ...) rw [Finset.prod_const, Finset.card_univ, Fintype.card_fin] -- (1/4)^K * exp(∑ j, nc*(...)) -- w*w = (1/4)^K have hww : w * w = (1 / 4 : ℝ) ^ K := by rw [hw_def] rw [← mul_inv] rw [show (2 : ℝ) ^ K * 2 ^ K = 4 ^ K by rw [← mul_pow]; norm_num] rw [show (1 / 4 : ℝ) = (4 : ℝ)⁻¹ by norm_num] rw [inv_pow] rw [hww] -- now goal: (1/4)^K * exp((n)*(c*∑ j ...)) = (1/4)^K * exp(∑ j, nc*(...)) congr 1 congr 1 rw [Finset.mul_sum, Finset.mul_sum] apply Finset.sum_congr rfl intro j _ ring -- Step 4: `(cosh (n c))^K ≤ 2`. have step4 : (Real.cosh ((n : ℝ) * c)) ^ K ≤ 2 := by have hcosh_pos : 0 ≤ Real.cosh ((n : ℝ) * c) := le_of_lt (Real.cosh_pos _) have hcosh_le : Real.cosh ((n : ℝ) * c) ≤ exp (((n : ℝ) * c) ^ 2 / 2) := Real.cosh_le_exp_half_sq _ calc (Real.cosh ((n : ℝ) * c)) ^ K ≤ (exp (((n : ℝ) * c) ^ 2 / 2)) ^ K := pow_le_pow_left₀ hcosh_pos hcosh_le K _ = exp ((K : ℝ) * (((n : ℝ) * c) ^ 2 / 2)) := by rw [Real.exp_nat_mul] _ ≤ exp (log 2) := by apply Real.exp_le_exp.mpr -- (K) * ((n c)^2/2) = 2 n^2 γ^2 / K ≤ log 2 have hexp_eq : (K : ℝ) * (((n : ℝ) * c) ^ 2 / 2) = 2 * (n : ℝ) ^ 2 * γ ^ 2 / (K : ℝ) := by rw [hc_def] field_simp rw [hexp_eq] rw [div_le_iff₀ hKpos] calc 2 * (n : ℝ) ^ 2 * γ ^ 2 ≤ (K : ℝ) * log 2 := hreg _ = log 2 * (K : ℝ) := by ring _ = 2 := by rw [Real.exp_log]; norm_num -- Chain everything. The LHS of the goal matches step2's LHS. calc ∑ lam : Fin K → Bool, ∑ lam' : Fin K → Bool, w * w * (1 + c * ∑ j, signOf (lam j) * signOf (lam' j)) ^ n ≤ ∑ lam : Fin K → Bool, ∑ lam' : Fin K → Bool, w * w * exp ((n : ℝ) * (c * ∑ j, signOf (lam j) * signOf (lam' j))) := step2 _ = (Real.cosh ((n : ℝ) * c)) ^ K := step3 _ ≤ 2 := step4
Causalean.Estimation.MinimaxATE.ingster_bound · Causalean/Estimation/MinimaxATE/ConstCenterHalf/Ingster.lean:37 · uses signOf
Membership 1 core · 4 supporting This file proves that the base paired-cell perturbation family lies inside the structure-agnostic nuisance class when the propensity and outcome-regression error budgets are satisfied. ★ inClass_perturbed

Base Class Membership

This file proves that the base paired-cell perturbation family lies inside the structure-agnostic nuisance class when the propensity and outcome-regression error budgets are satisfied. The supporting estimates are l2sq_mPerturbed for the exact propensity error, l2sq_gPerturbed_false for the unchanged control arm, gPerturbed_true_sub_half for the treated-arm pointwise deviation, and l2sq_gPerturbed_true_le for the treated-arm error bound.

The capstone inClass_perturbed connects the explicit construction to the finite minimax lower-bound framework by producing an InClass witness under the stated budgets.

theorem inClass_perturbed reviewed
Causalean.Estimation.MinimaxATE

Class membership. For nonnegative bump magnitudes α and β with α + 2β ≤ 1/2 meeting the Rademacher perturbation budgets β² ≤ εm and (α+β)²/(1−2β)² ≤ εg, the perturbed data-generating process (mλ, gλ) indexed by a Rademacher sign vector lam lies in the structure-agnostic nuisance class ℱ(εg, εm) around the centered estimates (m̂, ĝ) = (1/2, 1/2).

Formal statement
εg εm :
:
0 ≤ α
:
0 ≤ β
hαβ :
α + 2 * β ≤ 1 / 2
hm :
β ^ 2 ≤ εm
hg :
(α + β) ^ 2 / (1 - 2 * β) ^ 2 ≤ εg
lam :
Fin K → Bool
InClass mhat ghat εg εm (mPerturbed β lam) (gPerturbed α β lam)
Proof (Lean source)
theorem inClass_perturbed [NeZero K] {εg εm : ℝ} (hα : 0 ≤ α) (hβ : 0 ≤ β) (hαβ : α + 2 * β ≤ 1 / 2) (hm : β ^ 2 ≤ εm) (hg : (α + β) ^ 2 / (1 - 2 * β) ^ 2 ≤ εg) (lam : Fin K → Bool) : InClass mhat ghat εg εm (mPerturbed β lam) (gPerturbed α β lam) := by refine ⟨validDGP_perturbed hα hβ hαβ lam, ?_, ?_⟩ · intro d cases d with | false => rw [l2sq_gPerturbed_false lam] -- `0 ≤ εg` from `hg` (LHS is nonneg) have hnn : (0 : ℝ) ≤ (α + β) ^ 2 / (1 - 2 * β) ^ 2 := by positivity linarith | true => exact le_trans (l2sq_gPerturbed_true_le hα hβ hαβ lam) hg · rw [l2sq_mPerturbed lam] exact hm
4 supporting declarations (lemmas, instances)
  • l2sq_mPerturbed theorem — The propensity perturbation has exact squared L² size β²: it is a Rademacher bump of magnitude β on Δ.
    lam :
    Fin K → Bool
    l2sq (mPerturbed β lam) mhat = β ^ 2
    Proof (Lean source)
    theorem l2sq_mPerturbed [NeZero K] (lam : Fin K → Bool) : l2sq (mPerturbed β lam) mhat = β ^ 2 := by have hbump : (mPerturbed β lam) = (fun x => mhat x + β * (-(Δ lam x))) := by funext x simp only [mPerturbed, mhat] ring rw [hbump] exact l2sq_bump mhat β (fun x => -(Δ lam x)) (fun x => by have : (-(Δ lam x)) ^ 2 = (Δ lam x) ^ 2 := by ring rw [this, Δ_sq])
    Causalean.Estimation.MinimaxATE.l2sq_mPerturbed · Causalean/Estimation/MinimaxATE/ConstCenterHalf/Membership.lean:44
  • l2sq_gPerturbed_false theorem — The control outcome arm is unchanged (gλ(0,·) = 1/2 = ĝ(0,·)), so its L² error is 0.
    lam :
    Fin K → Bool
    l2sq (gPerturbed α β lam false) (ghat false) = 0
    Proof (Lean source)
    theorem l2sq_gPerturbed_false (lam : Fin K → Bool) : l2sq (gPerturbed α β lam false) (ghat false) = 0 := by have h : gPerturbed α β lam false = ghat false := by funext x simp only [gPerturbed, ghat, Bool.false_eq_true, if_false] rw [h, l2sq_self]
    Causalean.Estimation.MinimaxATE.l2sq_gPerturbed_false · Causalean/Estimation/MinimaxATE/ConstCenterHalf/Membership.lean:58
  • gPerturbed_true_sub_half theorem — The treated outcome arm: its pointwise deviation from ĝ(1) = 1/2 is (α+β)·Δ/(1 − 2β·Δ).
    :
    0 ≤ α
    :
    0 ≤ β
    hαβ :
    α + 2 * β ≤ 1 / 2
    lam :
    Fin K → Bool
    x :
    Fin K × Bool
    gPerturbed α β lam true x - 1 / 2 = (α + β) * Δ lam x / (1 - 2 * β * Δ lam x)
    Proof (Lean source)
    theorem gPerturbed_true_sub_half (hα : 0 ≤ α) (hβ : 0 ≤ β) (hαβ : α + 2 * β ≤ 1 / 2) (lam : Fin K → Bool) (x : Fin K × Bool) : gPerturbed α β lam true x - 1 / 2 = (α + β) * Δ lam x / (1 - 2 * β * Δ lam x) := by have hd := denom_pos hβ hαβ hα lam x have hd0 : (1 - 2 * β * Δ lam x) ≠ 0 := ne_of_gt hd simp only [gPerturbed, if_true] rw [div_sub', div_eq_div_iff hd0 hd0] · ring · exact hd0
    Causalean.Estimation.MinimaxATE.gPerturbed_true_sub_half · Causalean/Estimation/MinimaxATE/ConstCenterHalf/Membership.lean:67
  • l2sq_gPerturbed_true_le theorem — Uniform bound on the treated arm's squared L² error: every pointwise term is ≤ (α+β)²/(1 − 2β)², so the average is too.
    :
    0 ≤ α
    :
    0 ≤ β
    hαβ :
    α + 2 * β ≤ 1 / 2
    lam :
    Fin K → Bool
    l2sq (gPerturbed α β lam true) (ghat true) ≤ (α + β) ^ 2 / (1 - 2 * β) ^ 2
    Proof (Lean source)
    theorem l2sq_gPerturbed_true_le [NeZero K] (hα : 0 ≤ α) (hβ : 0 ≤ β) (hαβ : α + 2 * β ≤ 1 / 2) (lam : Fin K → Bool) : l2sq (gPerturbed α β lam true) (ghat true) ≤ (α + β) ^ 2 / (1 - 2 * β) ^ 2 := by have hβ4 : β ≤ 1 / 4 := by linarith set C := Fin K × Bool have hC : (Fintype.card C : ℝ) ≠ 0 := Nat.cast_ne_zero.mpr Fintype.card_ne_zero have hCpos : (0 : ℝ) < (Fintype.card C : ℝ) := by rcases (Fintype.card C).eq_zero_or_pos with h | h · exact absurd (Nat.cast_eq_zero.mpr h) hC · exact_mod_cast h -- denominator `1 − 2β` is positive have hden : (0 : ℝ) < 1 - 2 * β := by linarith have hden2 : (0 : ℝ) < (1 - 2 * β) ^ 2 := by positivity -- each summand equals `(α+β)²/(1 − 2β·Δ)²` and is bounded by `(α+β)²/(1 − 2β)²` have hterm : ∀ x : C, (gPerturbed α β lam true x - ghat true x) ^ 2 ≤ (α + β) ^ 2 / (1 - 2 * β) ^ 2 := by intro x have hghat : ghat true x = (1 / 2 : ℝ) := by simp [ghat] rw [hghat, gPerturbed_true_sub_half hα hβ hαβ lam x] have hd := denom_pos hβ hαβ hα lam x have hdne : (1 - 2 * β * Δ lam x) ≠ 0 := ne_of_gt hd -- rewrite the squared term using `Δ² = 1` have hsq : ((α + β) * Δ lam x / (1 - 2 * β * Δ lam x)) ^ 2 = (α + β) ^ 2 / (1 - 2 * β * Δ lam x) ^ 2 := by rw [div_pow, mul_pow, Δ_sq, mul_one] rw [hsq] -- compare denominators: `(1 − 2β)² ≤ (1 − 2β·Δ)²` have hdenΔ : (0 : ℝ) < (1 - 2 * β * Δ lam x) ^ 2 := by positivity have hcmp : (1 - 2 * β) ^ 2 ≤ (1 - 2 * β * Δ lam x) ^ 2 := by rcases Δ_mem lam x with h | h · rw [h]; nlinarith · rw [h]; nlinarith [hβ] apply div_le_div_of_nonneg_left (by positivity) hden2 hcmp -- average of bounded terms is bounded rw [l2sq] have hsum : ∑ x : C, (gPerturbed α β lam true x - ghat true x) ^ 2 ≤ ∑ _x : C, (α + β) ^ 2 / (1 - 2 * β) ^ 2 := Finset.sum_le_sum (fun x _ => hterm x) rw [Finset.sum_const, Finset.card_univ, nsmul_eq_mul] at hsum calc (Fintype.card C : ℝ)⁻¹ * ∑ x : C, (gPerturbed α β lam true x - ghat true x) ^ 2 ≤ (Fintype.card C : ℝ)⁻¹ * ((Fintype.card C : ℝ) * ((α + β) ^ 2 / (1 - 2 * β) ^ 2)) := by apply mul_le_mul_of_nonneg_left hsum positivity _ = (α + β) ^ 2 / (1 - 2 * β) ^ 2 := by field_simp
    Causalean.Estimation.MinimaxATE.l2sq_gPerturbed_true_le · Causalean/Estimation/MinimaxATE/ConstCenterHalf/Membership.lean:79
MSE 1 core · 0 supporting This file converts the structure-agnostic average treatment effect lower bound from a probability-of-miss statement into an expected mean-squared-error statement. ★ minimax_lower_bound_mse

Mean-Squared-Error Lower Bound

This file converts the structure-agnostic average treatment effect lower bound from a probability-of-miss statement into an expected mean-squared-error statement. The theorem minimax_lower_bound_mse combines minimax_lower_bound with the Chebyshev bridge nMiss_sq_le_nMSE and extracts a single in-class witness DGP from either the null law or the uniform perturbed mixture.

The result isolates the finite-model argument showing that the doubly-robust product rate is an unavoidable expected-risk floor for some data-generating process in the nuisance class.

theorem minimax_lower_bound_mse reviewed
Causalean.Estimation.MinimaxATE

Structure-agnostic minimax lower bound, expected-risk (MSE) form. Fix nonnegative bump magnitudes α and β with α + 2β ≤ 1/2 meeting the Rademacher perturbation budgets β² ≤ εm and (α+β)²/(1−2β)² ≤ εg for nonnegative error tolerances εg, εm, in the sample-size regime 2n²γ² ≤ K·log 2 with γ = α²+2αβ+3β² and 2γ ≤ 1. Then for any measurable estimator of the average treatment effect, there is a data-generating process in the structure-agnostic nuisance class on which its mean-squared error is at least s²/4, with s = β(α+β)/(1−4β²) ≍ √(εg·εm) — the doubly-robust product rate is an unbeatable expected-squared-error floor. This is the weaker, (1−γ)-factored consequence (γ = 3/4) of the quantile bound, in the form used by Balakrishnan et al.

Formal statement
:
0 ≤ α
:
0 ≤ β
hαβ :
α + 2 * β ≤ 1 / 2
hm :
β ^ 2 ≤ εm
hg :
(α + β) ^ 2 / (1 - 2 * β) ^ 2 ≤ εg
hεg :
0 ≤ εg
hεm :
0 ≤ εm
:
2 * (α ^ 2 + 2 * α * β + 3 * β ^ 2) ≤ 1
hreg :
2 * (n : ℝ) ^ 2 * (α ^ 2 + 2 * α * β + 3 * β ^ 2) ^ 2 ≤ (K : ℝ) * log 2
est :
(Fin n → Obs (Fin K × Bool)) → ℝ
hest :
∃ p : InClassDGP mhat ghat εg εm,
(β * (α + β) / (1 - 4 * β ^ 2)) ^ 2 / 4 ≤ nMSE p.2.valid n est
Proof (Lean source)
theorem minimax_lower_bound_mse [NeZero K] (hα : 0 ≤ α) (hβ : 0 ≤ β) (hαβ : α + 2 * β ≤ 1 / 2) (hm : β ^ 2 ≤ εm) (hg : (α + β) ^ 2 / (1 - 2 * β) ^ 2 ≤ εg) (hεg : 0 ≤ εg) (hεm : 0 ≤ εm) (hγ : 2 * (α ^ 2 + 2 * α * β + 3 * β ^ 2) ≤ 1) (hreg : 2 * (n : ℝ) ^ 2 * (α ^ 2 + 2 * α * β + 3 * β ^ 2) ^ 2 ≤ (K : ℝ) * log 2) {est : (Fin n → Obs (Fin K × Bool)) → ℝ} (hest : Measurable est) : ∃ p : InClassDGP mhat ghat εg εm, (β * (α + β) / (1 - 4 * β ^ 2)) ^ 2 / 4 ≤ nMSE p.2.valid n est := by set s := β * (α + β) / (1 - 4 * β ^ 2) with hs_def have hβ4 : β ≤ 1 / 4 := by linarith have hden : (0 : ℝ) < 1 - 4 * β ^ 2 := by nlinarith have hαβ0 : (0 : ℝ) ≤ α + β := by linarith have hs0 : 0 ≤ s := by rw [hs_def]; positivity haveI : IsProbabilityMeasure (Qfalse K n) := Qfalse_isProb K n haveI : IsProbabilityMeasure (Qtrue (K := K) hα hβ hαβ n) := Qtrue_isProb hα hβ hαβ n haveI : ∀ lam : Fin K → Bool, IsProbabilityMeasure (Qpert hα hβ hαβ n lam) := fun lam => Qpert_isProb hα hβ hαβ n lam -- From `1/4 ≤ nMiss` on an in-class DGP (at its own ATE `θ`), Chebyshev gives MSE `≥ s²/4`. have hkey : ∀ {m : Fin K × Bool → ℝ} {g : BoolFin K × Bool → ℝ} (hin : InClass mhat ghat εg εm m g) (θ : ℝ), ate g = θ → 1 / 4 ≤ (productLaw hin.valid n).real {x | s ≤ |est x - θ|} → ∃ p : InClassDGP mhat ghat εg εm, s ^ 2 / 4 ≤ nMSE p.2.valid n est := by intro m g hin θ hθ h14 refine ⟨⟨(m, g), hin⟩, ?_⟩ have hcheb : s ^ 2 * (productLaw hin.valid n).real {x | s ≤ |est x - θ|} ≤ nMSE hin.valid n est := by have h := nMiss_sq_le_nMSE hin.valid n (est := est) hs0 unfold nMiss at h rwa [hθ] at h have h1 := mul_le_mul_of_nonneg_left h14 (sq_nonneg s) change s ^ 2 / 4 ≤ nMSE hin.valid n est calc s ^ 2 / 4 = s ^ 2 * (1 / 4) := by ring _ ≤ s ^ 2 * (productLaw hin.valid n).real {x | s ≤ |est x - θ|} := h1 _ ≤ nMSE hin.valid n est := hcheb -- Two-point bound: `1/4 ≤ max(null miss, mixture miss)`. have htv := tvDist_Qfalse_Qtrue_le_half (K := K) (n := n) hα hβ hαβ hγ hreg have hsep : 2 * s ≤ |(0 : ℝ) - 2 * β * (α + β) / (1 - 4 * β ^ 2)| := by rw [zero_sub, abs_neg, abs_of_nonneg (by positivity)] rw [hs_def]; apply le_of_eq; ring have hmax := two_point_lower_bound_of_tvDist_le (P₀ := Qfalse K n) (P₁ := Qtrue hα hβ hαβ n) hest hsep htv rw [show (1 - (1 : ℝ) / 2) / 2 = 1 / 4 by norm_num] at hmax rcases le_max_iff.mp hmax with hleft | hright · -- null branch: `(m̂, ĝ)` is in class, `ate ĝ = 0` exact hkey (inClass_null hεg hεm) 0 ate_ghat hleft · -- mixture branch: extract a single Rademacher-perturbed DGP obtain ⟨lam, hlam⟩ := exists_real_ge_mixture (signWeight K) (signWeight_sum K) (fun l => Qpert hα hβ hαβ n l) {x | s ≤ |est x - 2 * β * (α + β) / (1 - 4 * β ^ 2)|} exact hkey (inClass_perturbed hα hβ hαβ hm hg lam) (2 * β * (α + β) / (1 - 4 * β ^ 2)) (ate_gPerturbed hα hβ hαβ lam) (le_trans hright hlam)
Causalean.Estimation.MinimaxATE.minimax_lower_bound_mse · Causalean/Estimation/MinimaxATE/ConstCenterHalf/MSE.lean:46 · uses InClass , InClassDGP , Obs , ghat , mhat , nMSE
Parametric 4 core · 13 supporting This file proves the parametric component of the structure-agnostic ATE minimax lower bound. ★ parametric_lower_bound

Parametric Lower Bound

This file proves the parametric component of the structure-agnostic ATE minimax lower bound. It uses a two-point constant-nuisance experiment to show that ordinary sampling noise imposes a one-over-sample-size squared-risk floor even apart from the product-bias obstruction.

The construction fixes a constant propensity mC, a null outcome regression gNull, and a treated-arm shift gPert. The supporting lemmas prove validity (validDGP_null, validDGP_pert), the exact ATEs (ate_gNull, ate_gPert), class membership (inClass_null, inClass_pert), and the single-observation and product chi-squared bounds (one_add_chiSqDiv_obsPert_obsNull, chiSqDiv_productLaw_le_one). The public capstone parametric_lower_bound applies the two-point reduction to show that every measurable estimator misses by δ / 2 with probability at least 1 / 4 somewhere in the class under the stated budget and indistinguishability conditions.

def mC reviewed
Causalean.Estimation.MinimaxATE.Parametric

The constant propensity center m ≡ m₀.

Definition (Lean source)
def mC (m₀ : ℝ) : C → ℝ := fun _ => m₀
Causalean.Estimation.MinimaxATE.Parametric.mC · Causalean/Estimation/MinimaxATE/ConstCenterHalf/Parametric.lean:73
def gNull reviewed
Causalean.Estimation.MinimaxATE.Parametric

The null outcome regression: g₁ on the treated arm, g₀ on the control arm.

Definition (Lean source)
def gNull (g₀ g₁ : ℝ) : Bool → C → ℝ := fun d _ => if d then g₁ else g₀
Causalean.Estimation.MinimaxATE.Parametric.gNull · Causalean/Estimation/MinimaxATE/ConstCenterHalf/Parametric.lean:76
def gPert reviewed
Causalean.Estimation.MinimaxATE.Parametric

The perturbed outcome regression: the treated arm is shifted to g₁ + δ.

Definition (Lean source)
def gPert (g₀ g₁ δ : ℝ) : Bool → C → ℝ := fun d _ => if d then g₁ + δ else g₀
Causalean.Estimation.MinimaxATE.Parametric.gPert · Causalean/Estimation/MinimaxATE/ConstCenterHalf/Parametric.lean:79
theorem parametric_lower_bound reviewed
Causalean.Estimation.MinimaxATE

Parametric Ω(1/n) minimax lower bound for structure-agnostic ATE estimation. Around a constant nuisance center (m₀, g₀, g₁) with all three coordinates strictly between 0 and 1, with a nonnegative treated-arm shift δ satisfying g₁ + δ ≤ 1 that lies inside the outcome-error budget δ² ≤ εg for a nonnegative propensity-error tolerance εm, and in the sample-size regime n·m₀δ²/(g₁(1−g₁)) ≤ log 2, for any measurable estimator of the average treatment effect the worst-case-over-class probability that it misses the true ATE by s = δ/2 is at least 1/4.

Formal statement
n :
m₀ g₀ g₁ δ εg εm :
hm0 :
0 < m₀
hm1 :
m₀ < 1
hg0 :
0 < g₀
hg0' :
g₀ < 1
hg1 :
0 < g₁
hg1' :
g₁ < 1
:
0 ≤ δ
hδU :
g₁ + δ ≤ 1
hbudget :
δ ^ 2 ≤ εg
hεm :
0 ≤ εm
hreg :
(n : ℝ) * (m₀ * δ ^ 2 / (g₁ * (1 - g₁))) ≤ log 2
est :
(Fin n → Obs C) → ℝ
hest :
1 / 4 ≤ minimaxMiss (fun _ => m₀) (fun d _ => if d then g₁ else g₀) εg εm n est (δ / 2)
Proof (Lean source)
theorem parametric_lower_bound {C : Type*} [Fintype C] [Nonempty C] [MeasurableSpace C] [MeasurableSingletonClass C] {n : ℕ} {m₀ g₀ g₁ δ εg εm : ℝ} (hm0 : 0 < m₀) (hm1 : m₀ < 1) (hg0 : 0 < g₀) (hg0' : g₀ < 1) (hg1 : 0 < g₁) (hg1' : g₁ < 1) (hδ : 0 ≤ δ) (hδU : g₁ + δ ≤ 1) (hbudget : δ ^ 2 ≤ εg) (hεm : 0 ≤ εm) (hreg : (n : ℝ) * (m₀ * δ ^ 2 / (g₁ * (1 - g₁))) ≤ log 2) {est : (Fin n → Obs C) → ℝ} (hest : Measurable est) : 1 / 4 ≤ minimaxMiss (fun _ => m₀) (fun d _ => if d then g₁ else g₀) εg εm n est (δ / 2) := by have hvN : ValidDGP (C := C) (mC m₀) (gNull g₀ g₁) := validDGP_null hm0 hm1 hg0 hg0' hg1 hg1' have hvP : ValidDGP (C := C) (mC m₀) (gPert g₀ g₁ δ) := validDGP_pert hm0 hm1 hg0 hg0' hg1 hδ hδU have hεg : 0 ≤ εg := le_trans (sq_nonneg δ) hbudget -- the two-point witness: null vs perturbed let W : TwoPointWitness C n (mC m₀) (gNull g₀ g₁) εg εm := { s := δ / 2 c := 1 / 2 Q := fun j => cond j (productLaw hvP n) (productLaw hvN n) prob := by intro j; cases j · exact productLaw_isProb hvN n · exact productLaw_isProb hvP n θ := fun j => cond j ((g₁ + δ) - g₀) (g₁ - g₀) sep := by change 2 * (δ / 2) ≤ |((g₁ + δ) - g₀) - (g₁ - g₀)| have : ((g₁ + δ) - g₀) - (g₁ - g₀) = δ := by ring rw [this, abs_of_nonneg hδ]; linarith tvBound := by simpa using tvDist_productLaw_le_half hvN hvP hm0 hm1 hg0 hg0' hg1 hg1' hreg dominated := by intro est' j cases j · -- null branch change (productLaw hvN n).real {x | (δ / 2) ≤ |est' x - (g₁ - g₀)|} ≤ minimaxMiss (mC m₀) (gNull g₀ g₁) εg εm n est' (δ / 2) have hb := nMiss_le_minimaxMiss (mhat := mC m₀) (ghat := gNull g₀ g₁) (εg := εg) (εm := εm) (⟨(mC m₀, gNull g₀ g₁), inClass_null hvN hεg hεm⟩) (est := est') (s := δ / 2) simp only [nMiss, ate_gNull] at hb exact hb · -- perturbed branch change (productLaw hvP n).real {x | (δ / 2) ≤ |est' x - ((g₁ + δ) - g₀)|} ≤ minimaxMiss (mC m₀) (gNull g₀ g₁) εg εm n est' (δ / 2) have hb := nMiss_le_minimaxMiss (mhat := mC m₀) (ghat := gNull g₀ g₁) (εg := εg) (εm := εm) (⟨(mC m₀, gPert g₀ g₁ δ), inClass_pert hvP hbudget hεm⟩) (est := est') (s := δ / 2) simp only [nMiss, ate_gPert] at hb exact hb } exact twoPointWitness_quarter W (le_refl _) hest
Causalean.Estimation.MinimaxATE.parametric_lower_bound · Causalean/Estimation/MinimaxATE/ConstCenterHalf/Parametric.lean:304 · uses Obs , minimaxMiss
13 supporting declarations (lemmas, instances)
  • validDGP_null theorem — Validity of the null DGP.
    hm0 :
    0 < m₀
    hm1 :
    m₀ < 1
    hg0 :
    0 < g₀
    hg0' :
    g₀ < 1
    hg1 :
    0 < g₁
    hg1' :
    g₁ < 1
    ValidDGP (C := C) (mC m₀) (gNull g₀ g₁) where m_mem _
    Proof (Lean source)
    theorem validDGP_null (hm0 : 0 < m₀) (hm1 : m₀ < 1) (hg0 : 0 < g₀) (hg0' : g₀ < 1) (hg1 : 0 < g₁) (hg1' : g₁ < 1) : ValidDGP (C := C) (mC m₀) (gNull g₀ g₁) where m_mem _ := ⟨hm0.le, hm1.le⟩ g_mem d _ := by cases d <;> simp [gNull] <;> constructor <;> linarith
    Causalean.Estimation.MinimaxATE.Parametric.validDGP_null · Causalean/Estimation/MinimaxATE/ConstCenterHalf/Parametric.lean:85
  • validDGP_pert theorem — Validity of the perturbed DGP (using 0 ≤ δ and g₁ + δ ≤ 1).
    hm0 :
    0 < m₀
    hm1 :
    m₀ < 1
    hg0 :
    0 < g₀
    hg0' :
    g₀ < 1
    hg1 :
    0 < g₁
    :
    0 ≤ δ
    hδU :
    g₁ + δ ≤ 1
    ValidDGP (C := C) (mC m₀) (gPert g₀ g₁ δ) where m_mem _
    Proof (Lean source)
    theorem validDGP_pert (hm0 : 0 < m₀) (hm1 : m₀ < 1) (hg0 : 0 < g₀) (hg0' : g₀ < 1) (hg1 : 0 < g₁) (hδ : 0 ≤ δ) (hδU : g₁ + δ ≤ 1) : ValidDGP (C := C) (mC m₀) (gPert g₀ g₁ δ) where m_mem _ := ⟨hm0.le, hm1.le⟩ g_mem d _ := by cases d <;> simp [gPert] <;> constructor <;> linarith
    Causalean.Estimation.MinimaxATE.Parametric.validDGP_pert · Causalean/Estimation/MinimaxATE/ConstCenterHalf/Parametric.lean:93
  • ate_gNull theorem — The ATE of the null DGP is g₁ − g₀.
    ate (C := C) (gNull g₀ g₁) = g₁ - g₀
    Proof (Lean source)
    theorem ate_gNull : ate (C := C) (gNull g₀ g₁) = g₁ - g₀ := by have hC : (Fintype.card C : ℝ) ≠ 0 := Nat.cast_ne_zero.mpr Fintype.card_ne_zero simp only [ate, gNull, if_true, Bool.false_eq_true, if_false] rw [Finset.sum_const, Finset.card_univ, nsmul_eq_mul] field_simp
    Causalean.Estimation.MinimaxATE.Parametric.ate_gNull · Causalean/Estimation/MinimaxATE/ConstCenterHalf/Parametric.lean:101
  • ate_gPert theorem — The ATE of the perturbed DGP is (g₁ + δ) − g₀.
    ate (C := C) (gPert g₀ g₁ δ) = (g₁ + δ) - g₀
    Proof (Lean source)
    theorem ate_gPert : ate (C := C) (gPert g₀ g₁ δ) = (g₁ + δ) - g₀ := by have hC : (Fintype.card C : ℝ) ≠ 0 := Nat.cast_ne_zero.mpr Fintype.card_ne_zero simp only [ate, gPert, if_true, Bool.false_eq_true, if_false] rw [Finset.sum_const, Finset.card_univ, nsmul_eq_mul] field_simp
    Causalean.Estimation.MinimaxATE.Parametric.ate_gPert · Causalean/Estimation/MinimaxATE/ConstCenterHalf/Parametric.lean:109
  • l2sq_gPert_gNull theorem — The squared L² distance between the perturbed and null treated arms is δ²; control arms agree. Hence each arm's error from gNull is ≤ εg once δ² ≤ εg.
    d :
    l2sq (C := C) (gPert g₀ g₁ δ d) (gNull g₀ g₁ d) = if d then δ ^ 2 else 0
    Proof (Lean source)
    theorem l2sq_gPert_gNull (d : Bool) : l2sq (C := C) (gPert g₀ g₁ δ d) (gNull g₀ g₁ d) = if d then δ ^ 2 else 0 := by have hC : (Fintype.card C : ℝ) ≠ 0 := Nat.cast_ne_zero.mpr Fintype.card_ne_zero cases d · simp [l2sq, gPert, gNull] · simp only [l2sq, gPert, gNull, if_true] have : ∀ _x : C, (g₁ + δ - g₁) ^ 2 = δ ^ 2 := by intro _; ring rw [Finset.sum_congr rfl (fun x _ => this x), Finset.sum_const, Finset.card_univ, nsmul_eq_mul] field_simp
    Causalean.Estimation.MinimaxATE.Parametric.l2sq_gPert_gNull · Causalean/Estimation/MinimaxATE/ConstCenterHalf/Parametric.lean:117
  • inClass_null theorem — The null DGP lies in the class around (mC, gNull) (zero nuisance error).
    εg εm :
    hv :
    ValidDGP (C := C) (mC m₀) (gNull g₀ g₁)
    hεg :
    0 ≤ εg
    hεm :
    0 ≤ εm
    InClass (mC m₀) (gNull g₀ g₁) εg εm (mC m₀) (gNull (C := C) g₀ g₁) where valid
    Proof (Lean source)
    theorem inClass_null {εg εm : ℝ} (hv : ValidDGP (C := C) (mC m₀) (gNull g₀ g₁)) (hεg : 0 ≤ εg) (hεm : 0 ≤ εm) : InClass (mC m₀) (gNull g₀ g₁) εg εm (mC m₀) (gNull (C := C) g₀ g₁) where valid := hv err_g d := by rw [l2sq_self]; exact hεg err_m := by rw [l2sq_self]; exact hεm
    Causalean.Estimation.MinimaxATE.Parametric.inClass_null · Causalean/Estimation/MinimaxATE/ConstCenterHalf/Parametric.lean:131
  • inClass_pert theorem — The perturbed DGP lies in the class around (mC, gNull) when δ² ≤ εg.
    εg εm :
    hv :
    ValidDGP (C := C) (mC m₀) (gPert g₀ g₁ δ)
    hbudget :
    δ ^ 2 ≤ εg
    hεm :
    0 ≤ εm
    InClass (mC m₀) (gNull g₀ g₁) εg εm (mC m₀) (gPert (C := C) g₀ g₁ δ) where valid
    Proof (Lean source)
    theorem inClass_pert {εg εm : ℝ} (hv : ValidDGP (C := C) (mC m₀) (gPert g₀ g₁ δ)) (hbudget : δ ^ 2 ≤ εg) (hεm : 0 ≤ εm) : InClass (mC m₀) (gNull g₀ g₁) εg εm (mC m₀) (gPert (C := C) g₀ g₁ δ) where valid := hv err_g d := by rw [l2sq_gPert_gNull] cases d · simp only [Bool.false_eq_true, ↓reduceIte]; exact le_trans (sq_nonneg δ) hbudget · simpa using hbudget err_m := by rw [l2sq_self]; exact hεm
    Causalean.Estimation.MinimaxATE.Parametric.inClass_pert · Causalean/Estimation/MinimaxATE/ConstCenterHalf/Parametric.lean:140
  • absolutelyContinuous_of_singleton_pos theorem — Absolute continuity from full support. If ν charges every singleton, every measure is absolutely continuous w.r.t. ν.
    Ω :
    μ ν :
    :
    ∀ x, ν {x} ≠ 0
    μ ≪ ν
    Proof (Lean source)
    theorem absolutelyContinuous_of_singleton_pos {Ω : Type*} [MeasurableSpace Ω] (μ ν : Measure Ω) (hν : ∀ x, ν {x} ≠ 0) : μ ≪ ν := by intro s hs have hempty : s = ∅ := by by_contra hne obtain ⟨x, hx⟩ := Set.nonempty_iff_ne_empty.mpr hne exact hν x (le_antisymm (hs ▸ measure_mono (Set.singleton_subset_iff.mpr hx)) zero_le) rw [hempty]; exact measure_empty
    Causalean.Estimation.MinimaxATE.Parametric.absolutelyContinuous_of_singleton_pos · Causalean/Estimation/MinimaxATE/ConstCenterHalf/Parametric.lean:152
  • obsLaw_null_singleton_ne_zero theorem — The null single-observation law charges every point (its mass is positive).
    hv :
    ValidDGP (C := C) (mC m₀) (gNull g₀ g₁)
    hm0 :
    0 < m₀
    hm1 :
    m₀ < 1
    hg0 :
    0 < g₀
    hg0' :
    g₀ < 1
    hg1 :
    0 < g₁
    hg1' :
    g₁ < 1
    z :
    Obs C
    obsLaw hv {z} ≠ 0
    Proof (Lean source)
    theorem obsLaw_null_singleton_ne_zero (hv : ValidDGP (C := C) (mC m₀) (gNull g₀ g₁)) (hm0 : 0 < m₀) (hm1 : m₀ < 1) (hg0 : 0 < g₀) (hg0' : g₀ < 1) (hg1 : 0 < g₁) (hg1' : g₁ < 1) (z : Obs C) : obsLaw hv {z} ≠ 0 := by have hpos : 0 < (obsLaw hv).real {z} := by rw [obsLaw_real_singleton hv z] have hC : (0 : ℝ) < (Fintype.card C : ℝ) := by have := Fintype.card_pos (α := C); exact_mod_cast this simp only [obsReal, mC, gNull] rcases z.2.1 with _ | _ <;> rcases z.2.2 with _ | _ <;> · simp only [Bool.false_eq_true, if_false, if_true] have h1 : (0:ℝ) < 1 - m₀ := by linarith have h2 : (0:ℝ) < 1 - g₀ := by linarith have h3 : (0:ℝ) < 1 - g₁ := by linarith positivity intro h rw [Measure.real, h, ENNReal.toReal_zero] at hpos exact lt_irrefl _ hpos
    Causalean.Estimation.MinimaxATE.Parametric.obsLaw_null_singleton_ne_zero · Causalean/Estimation/MinimaxATE/ConstCenterHalf/Parametric.lean:163
  • one_add_chiSqDiv_obsPert_obsNull theorem — Single-observation χ² (closed form). With μ = obsLaw pert, ν = obsLaw null, the (shifted) χ²-divergence is 1 + m₀ δ²/(g₁(1−g₁)).
    hvN :
    ValidDGP (C := C) (mC m₀) (gNull g₀ g₁)
    hvP :
    ValidDGP (C := C) (mC m₀) (gPert g₀ g₁ δ)
    hm0 :
    0 < m₀
    hm1 :
    m₀ < 1
    hg0 :
    0 < g₀
    hg0' :
    g₀ < 1
    hg1 :
    0 < g₁
    hg1' :
    g₁ < 1
    1 + chiSqDiv (obsLaw hvP) (obsLaw hvN) = 1 + m₀ * δ ^ 2 / (g₁ * (1 - g₁))
    Proof (Lean source)
    theorem one_add_chiSqDiv_obsPert_obsNull (hvN : ValidDGP (C := C) (mC m₀) (gNull g₀ g₁)) (hvP : ValidDGP (C := C) (mC m₀) (gPert g₀ g₁ δ)) (hm0 : 0 < m₀) (hm1 : m₀ < 1) (hg0 : 0 < g₀) (hg0' : g₀ < 1) (hg1 : 0 < g₁) (hg1' : g₁ < 1) : 1 + chiSqDiv (obsLaw hvP) (obsLaw hvN) = 1 + m₀ * δ ^ 2 / (g₁ * (1 - g₁)) := by have hC : (Fintype.card C : ℝ) ≠ 0 := Nat.cast_ne_zero.mpr Fintype.card_ne_zero have hCpos : (0 : ℝ) < (Fintype.card C : ℝ) := by have := Fintype.card_pos (α := C); exact_mod_cast this have hg1ne : g₁ ≠ 0 := hg1.ne' have h1g1ne : (1 - g₁) ≠ 0 := by intro h; rw [sub_eq_zero] at h; linarith have hg0ne : g₀ ≠ 0 := hg0.ne' have h1g0ne : (1 - g₀) ≠ 0 := by intro h; rw [sub_eq_zero] at h; linarith have hm0ne : m₀ ≠ 0 := hm0.ne' have h1m0ne : (1 - m₀) ≠ 0 := by intro h; rw [sub_eq_zero] at h; linarith have hac : obsLaw hvP ≪ obsLaw hvN := absolutelyContinuous_of_singleton_pos _ _ (obsLaw_null_singleton_ne_zero hvN hm0 hm1 hg0 hg0' hg1 hg1') rw [finite_one_add_chiSqDiv (obsLaw hvP) (obsLaw hvN) hac] -- rewrite each singleton mass to its real form have hrw : ∀ z : Obs C, ((obsLaw hvP).real {z}) ^ 2 / ((obsLaw hvN).real {z}) = (obsReal (mC m₀) (gPert g₀ g₁ δ) z) ^ 2 / (obsReal (mC m₀) (gNull g₀ g₁) z) := by intro z; rw [obsLaw_real_singleton hvP z, obsLaw_real_singleton hvN z] rw [Finset.sum_congr rfl (fun z _ => hrw z)] -- split the sum over `C × (Bool × Bool)` rw [Fintype.sum_prod_type] have hcell : ∀ x : C, ∑ p : Bool × Bool, (obsReal (mC m₀) (gPert g₀ g₁ δ) (x, p)) ^ 2 / (obsReal (mC m₀) (gNull g₀ g₁) (x, p)) = (Fintype.card C : ℝ)⁻¹ * (1 - m₀) + (Fintype.card C : ℝ)⁻¹ * m₀ * (1 + δ ^ 2 / (g₁ * (1 - g₁))) := by intro x rw [Fintype.sum_prod_type] simp only [obsReal, mC, gNull, gPert, Fintype.sum_bool, Bool.false_eq_true, if_false, if_true] field_simp ring rw [Finset.sum_congr rfl (fun x _ => hcell x), Finset.sum_const, Finset.card_univ, nsmul_eq_mul] field_simp ring
    Causalean.Estimation.MinimaxATE.Parametric.one_add_chiSqDiv_obsPert_obsNull · Causalean/Estimation/MinimaxATE/ConstCenterHalf/Parametric.lean:182
  • chiSqDiv_obsPert_obsNull_eq theorem — The single-observation χ² is nonnegative and equals m₀ δ²/(g₁(1−g₁)).
    hvN :
    ValidDGP (C := C) (mC m₀) (gNull g₀ g₁)
    hvP :
    ValidDGP (C := C) (mC m₀) (gPert g₀ g₁ δ)
    hm0 :
    0 < m₀
    hm1 :
    m₀ < 1
    hg0 :
    0 < g₀
    hg0' :
    g₀ < 1
    hg1 :
    0 < g₁
    hg1' :
    g₁ < 1
    chiSqDiv (obsLaw hvP) (obsLaw hvN) = m₀ * δ ^ 2 / (g₁ * (1 - g₁))
    Proof (Lean source)
    theorem chiSqDiv_obsPert_obsNull_eq (hvN : ValidDGP (C := C) (mC m₀) (gNull g₀ g₁)) (hvP : ValidDGP (C := C) (mC m₀) (gPert g₀ g₁ δ)) (hm0 : 0 < m₀) (hm1 : m₀ < 1) (hg0 : 0 < g₀) (hg0' : g₀ < 1) (hg1 : 0 < g₁) (hg1' : g₁ < 1) : chiSqDiv (obsLaw hvP) (obsLaw hvN) = m₀ * δ ^ 2 / (g₁ * (1 - g₁)) := by have h := one_add_chiSqDiv_obsPert_obsNull hvN hvP hm0 hm1 hg0 hg0' hg1 hg1' linarith
    Causalean.Estimation.MinimaxATE.Parametric.chiSqDiv_obsPert_obsNull_eq · Causalean/Estimation/MinimaxATE/ConstCenterHalf/Parametric.lean:227
  • chiSqDiv_productLaw_le_one theorem — χ² indistinguishability of the n-sample laws. In the regime n · m₀ δ²/(g₁(1−g₁)) ≤ log 2, the χ²-divergence of the n-sample perturbed law from the null is at most 1. Proved by tensorization (one_add_chiSqDiv_pi_iid) and (1 + x)^n ≤ exp(n x) ≤ 2.
    n :
    hvN :
    ValidDGP (C := C) (mC m₀) (gNull g₀ g₁)
    hvP :
    ValidDGP (C := C) (mC m₀) (gPert g₀ g₁ δ)
    hm0 :
    0 < m₀
    hm1 :
    m₀ < 1
    hg0 :
    0 < g₀
    hg0' :
    g₀ < 1
    hg1 :
    0 < g₁
    hg1' :
    g₁ < 1
    hreg :
    (n : ℝ) * (m₀ * δ ^ 2 / (g₁ * (1 - g₁))) ≤ log 2
    chiSqDiv (productLaw hvP n) (productLaw hvN n) ≤ 1
    Proof (Lean source)
    theorem chiSqDiv_productLaw_le_one {n : ℕ} (hvN : ValidDGP (C := C) (mC m₀) (gNull g₀ g₁)) (hvP : ValidDGP (C := C) (mC m₀) (gPert g₀ g₁ δ)) (hm0 : 0 < m₀) (hm1 : m₀ < 1) (hg0 : 0 < g₀) (hg0' : g₀ < 1) (hg1 : 0 < g₁) (hg1' : g₁ < 1) (hreg : (n : ℝ) * (m₀ * δ ^ 2 / (g₁ * (1 - g₁))) ≤ log 2) : chiSqDiv (productLaw hvP n) (productLaw hvN n) ≤ 1 := by haveI : IsProbabilityMeasure (obsLaw hvP) := obsLaw_isProb hvP haveI : IsProbabilityMeasure (obsLaw hvN) := obsLaw_isProb hvN have hac : obsLaw hvP ≪ obsLaw hvN := absolutelyContinuous_of_singleton_pos _ _ (obsLaw_null_singleton_ne_zero hvN hm0 hm1 hg0 hg0' hg1 hg1') -- the single-observation χ² value `χ²₁ = m₀ δ²/(g₁(1−g₁))` set χ₁ := m₀ * δ ^ 2 / (g₁ * (1 - g₁)) with hχ₁ have hχ₁0 : 0 ≤ χ₁ := by rw [hχ₁]; apply div_nonneg (by positivity) have : (0:ℝ) < 1 - g₁ := by linarith positivity have hsingle : 1 + chiSqDiv (obsLaw hvP) (obsLaw hvN) = 1 + χ₁ := by rw [hχ₁]; exact one_add_chiSqDiv_obsPert_obsNull hvN hvP hm0 hm1 hg0 hg0' hg1 hg1' -- tensorize have htensor : 1 + chiSqDiv (productLaw hvP n) (productLaw hvN n) = (1 + χ₁) ^ n := by rw [productLaw, productLaw, one_add_chiSqDiv_pi_iid (obsLaw hvP) (obsLaw hvN) hac n, hsingle] -- `(1 + χ₁)^n ≤ exp(n χ₁) ≤ 2` have hpow : (1 + χ₁) ^ n ≤ exp ((n : ℝ) * χ₁) := by calc (1 + χ₁) ^ n ≤ (exp χ₁) ^ n := by exact pow_le_pow_left₀ (by linarith) (by linarith [Real.add_one_le_exp χ₁]) n _ = exp ((n : ℝ) * χ₁) := by rw [← Real.exp_nat_mul] have hexp2 : exp ((n : ℝ) * χ₁) ≤ 2 := by have h2 : exp (log 2) = 2 := Real.exp_log (by norm_num) calc exp ((n : ℝ) * χ₁) ≤ exp (log 2) := Real.exp_le_exp.2 (by rw [hχ₁] at hreg ⊢; exact hreg) _ = 2 := h2 linarith [htensor, hpow, hexp2]
    Causalean.Estimation.MinimaxATE.Parametric.chiSqDiv_productLaw_le_one · Causalean/Estimation/MinimaxATE/ConstCenterHalf/Parametric.lean:237
  • tvDist_productLaw_le_half theorem — Total-variation indistinguishability of the n-sample laws.
    n :
    hvN :
    ValidDGP (C := C) (mC m₀) (gNull g₀ g₁)
    hvP :
    ValidDGP (C := C) (mC m₀) (gPert g₀ g₁ δ)
    hm0 :
    0 < m₀
    hm1 :
    m₀ < 1
    hg0 :
    0 < g₀
    hg0' :
    g₀ < 1
    hg1 :
    0 < g₁
    hg1' :
    g₁ < 1
    hreg :
    (n : ℝ) * (m₀ * δ ^ 2 / (g₁ * (1 - g₁))) ≤ log 2
    tvDist (productLaw hvN n) (productLaw hvP n) ≤ 1 / 2
    Proof (Lean source)
    theorem tvDist_productLaw_le_half {n : ℕ} (hvN : ValidDGP (C := C) (mC m₀) (gNull g₀ g₁)) (hvP : ValidDGP (C := C) (mC m₀) (gPert g₀ g₁ δ)) (hm0 : 0 < m₀) (hm1 : m₀ < 1) (hg0 : 0 < g₀) (hg0' : g₀ < 1) (hg1 : 0 < g₁) (hg1' : g₁ < 1) (hreg : (n : ℝ) * (m₀ * δ ^ 2 / (g₁ * (1 - g₁))) ≤ log 2) : tvDist (productLaw hvN n) (productLaw hvP n) ≤ 1 / 2 := by haveI : IsProbabilityMeasure (productLaw hvP n) := productLaw_isProb hvP n haveI : IsProbabilityMeasure (productLaw hvN n) := productLaw_isProb hvN n have hac : obsLaw hvP ≪ obsLaw hvN := absolutelyContinuous_of_singleton_pos _ _ (obsLaw_null_singleton_ne_zero hvN hm0 hm1 hg0 hg0' hg1 hg1') have hacP : productLaw hvP n ≪ productLaw hvN n := by rw [productLaw, productLaw]; exact pi_iid_absolutelyContinuous _ _ hac n have hchi := chiSqDiv_productLaw_le_one hvN hvP hm0 hm1 hg0 hg0' hg1 hg1' hreg rw [tvDist_symm] calc tvDist (productLaw hvP n) (productLaw hvN n) ≤ (1 / 2) * sqrt (chiSqDiv (productLaw hvP n) (productLaw hvN n)) := tvDist_le_half_sqrt_chiSqDiv _ _ hacP Integrable.of_finite _ ≤ (1 / 2) * sqrt 1 := by apply mul_le_mul_of_nonneg_left _ (by norm_num); exact Real.sqrt_le_sqrt hchi _ = 1 / 2 := by rw [Real.sqrt_one]; ring
    Causalean.Estimation.MinimaxATE.Parametric.tvDist_productLaw_le_half · Causalean/Estimation/MinimaxATE/ConstCenterHalf/Parametric.lean:277