Estimation.Minimax­ATE.Const­Center­General

General constant-center least-favourable construction for MinimaxATE: mixture laws, class membership, χ² overlap, gap, MSE, and lower-bound assembly.

Construction 7 core · 3 supporting This file generalizes the structure-agnostic ATE lower-bound construction from the centered half-probability nuisance estimates to arbitrary constant nuisance centers bounded away from zero and one. ★ validDGP_hatG★ validDGP_pertG

General Constant-Center Lower-Bound Construction

This file generalizes the structure-agnostic ATE lower-bound construction from the centered half-probability nuisance estimates to arbitrary constant nuisance centers bounded away from zero and one. It defines the perturbed data-generating process and proves that the resulting propensity and outcome functions are valid probability functions.

The record GenConstr stores the bump sizes α, β, the constant center (m₀, g₀, g₁), and the inequalities that keep the perturbation in [0,1]. The public definitions mhatG, ghatG, mPertG, and gPertG give the null and sign-indexed perturbed DGPs, while validDGP_hatG and validDGP_pertG establish their finite-model validity.

structure GenConstr reviewed
Causalean.Estimation.MinimaxATE

General-constant-center construction data. This record packages two nonnegative Rademacher-bump magnitudes together with a constant nuisance center (m₀, g₀, g₁) with each coordinate strictly between zero and one, and four further inequalities — the propensity bump smaller than the treated center, the outcome bump at most the treated center, and two worst-case upper bounds keeping the perturbed propensity and treated-arm regression at most one — that together certify the perturbed propensity and outcome-regression functions built from this data stay in the unit interval.

Definition (Lean source)
Bump magnitude on the treated outcome arm.
α :
Bump magnitude on the propensity.
β :
Constant propensity center `m̂`.
m₀ :
Constant control-arm center `ĝ(0,·)`.
g₀ :
Constant treated-arm center `ĝ(1,·)`.
g₁ :
:
0 ≤ α
:
0 ≤ β
hm₀0 :
0 < m₀
hm₀1 :
m₀ < 1
hg₀0 :
0 < g₀
hg₀1 :
g₀ < 1
hg₁0 :
0 < g₁
hg₁1 :
g₁ < 1
The propensity bump is smaller than the treated center (keeps the denominator `1 − (β/g₁)·Δ` positive).
hβg₁ :
β < g₁
The treated-arm bump does not exceed the treated center (keeps `gλ(1) ≥ 0`).
hαg₁ :
α ≤ g₁
Worst-case upper bound keeping `gλ(1) ≤ 1`.
hgU :
g₁ + α + β / g₁ ≤ 1
Worst-case upper bound keeping `mλ ≤ 1`.
hmU :
m₀ * (1 + β / g₁) ≤ 1
def mhatG reviewed
Causalean.Estimation.MinimaxATE.GenConstr

The constant propensity center as a function of the covariate.

Definition (Lean source)
noncomputable def mhatG : (Fin K × Bool) → ℝ := fun _ => P.m₀
Causalean.Estimation.MinimaxATE.GenConstr.mhatG · Causalean/Estimation/MinimaxATE/ConstCenterGeneral/Construction.lean:98 · uses GenConstr
def ghatG reviewed
Causalean.Estimation.MinimaxATE.GenConstr

The constant outcome-regression center: g₁ on the treated arm, g₀ on control.

Definition (Lean source)
noncomputable def ghatG : Bool → (Fin K × Bool) → ℝ := fun d _ => if d then P.g₁ else P.g₀
Causalean.Estimation.MinimaxATE.GenConstr.ghatG · Causalean/Estimation/MinimaxATE/ConstCenterGeneral/Construction.lean:101 · uses GenConstr
def mPertG reviewed
Causalean.Estimation.MinimaxATE.GenConstr

The perturbed propensity mλ = m₀·(1 − (β/g₁)·Δ).

Definition (Lean source)
noncomputable def mPertG (lam : Fin K → Bool) : (Fin K × Bool) → ℝ := fun x => P.m₀ * (1 - (P.β / P.g₁) * Δ lam x)
Causalean.Estimation.MinimaxATE.GenConstr.mPertG · Causalean/Estimation/MinimaxATE/ConstCenterGeneral/Construction.lean:104 · uses GenConstr
def gPertG reviewed
Causalean.Estimation.MinimaxATE.GenConstr

The perturbed outcome regression: control arm = g₀, treated arm gλ(1,·) = (g₁ + α·Δ)/(1 − (β/g₁)·Δ).

Definition (Lean source)
noncomputable def gPertG (lam : Fin K → Bool) : Bool → (Fin K × Bool) → ℝ := fun d x => if d then (P.g₁ + P.α * Δ lam x) / (1 - (P.β / P.g₁) * Δ lam x) else P.g₀
Causalean.Estimation.MinimaxATE.GenConstr.gPertG · Causalean/Estimation/MinimaxATE/ConstCenterGeneral/Construction.lean:108 · uses GenConstr
theorem validDGP_hatG reviewed
Causalean.Estimation.MinimaxATE.GenConstr

The null constant-center data-generating process, with propensity m₀ and outcome regressions (g₀, g₁), is a valid finite observed-data model, i.e. all its component probabilities lie in [0,1].

Formal statement
ValidDGP (C := Fin K × Bool) P.mhatG P.ghatG
Proof (Lean source)
theorem validDGP_hatG : ValidDGP (C := Fin K × Bool) P.mhatG P.ghatG := by refine ⟨fun x => ?_, fun d x => ?_⟩ · simp only [mhatG]; exact ⟨P.hm₀0.le, P.hm₀1.le⟩ · simp only [ghatG]; cases d · exact ⟨P.hg₀0.le, P.hg₀1.le⟩ · exact ⟨P.hg₁0.le, P.hg₁1.le⟩
theorem validDGP_pertG reviewed
Causalean.Estimation.MinimaxATE.GenConstr

For any Rademacher sign vector lam indexing the perturbation, the perturbed propensity and outcome-regression functions define a valid finite observed-data model, i.e. take values in [0,1].

Formal statement
lam :
Fin K → Bool
ValidDGP (P.mPertG lam) (P.gPertG lam)
Proof (Lean source)
theorem validDGP_pertG (lam : Fin K → Bool) : ValidDGP (P.mPertG lam) (P.gPertG lam) := by have hr := P.ratio_nonneg have hr1 := P.ratio_lt_one refine ⟨fun x => ?_, fun d x => ?_⟩ · -- propensity `m₀·(1 − (β/g₁)·Δ) ∈ [0,1]` simp only [mPertG] have hmU := P.hmU have hm0 := P.hm₀0 rcases Δ_mem lam x with h | h · rw [h] constructor · nlinarith · nlinarith · rw [h] constructor · nlinarith · nlinarith · -- outcome `gλ(d,·) ∈ [0,1]` have hd := P.denomG_pos lam x rcases d with _ | _ · simp only [gPertG, Bool.false_eq_true, if_false]; exact ⟨P.hg₀0.le, P.hg₀1.le⟩ · simp only [gPertG, if_true] have hgU := P.hgU have hαg₁ := P.hαg₁ have hg₁0 := P.hg₁0 have hg₁1 := P.hg₁1 have hα := P.hα rcases Δ_mem lam x with h | h · rw [h] at hd ⊢ refine ⟨div_nonneg (by nlinarith) hd.le, ?_⟩ rw [div_le_one hd]; nlinarith · rw [h] at hd ⊢ refine ⟨div_nonneg (by nlinarith) hd.le, ?_⟩ rw [div_le_one hd]; nlinarith
3 supporting declarations (lemmas, instances)
Chi­Sq­Overlap 3 core · 1 supporting This file derives the closed-form single-observation chi-squared overlap for two general constant-center Rademacher perturbations relative to the null law. ★ chiSqOverlap_eqG

General-Center Chi-Squared Second-Moment Overlap

This file derives the closed-form single-observation chi-squared overlap for two general constant-center Rademacher perturbations relative to the null law. The formula isolates the per-cell overlap coefficient that feeds the Ingster second-moment argument, with the linear perturbation terms canceling by construction. "Overlap" here is the χ² second-moment overlap of two likelihood ratios, not the causal positivity/overlap condition.

The definition Γ is the per-cell coefficient, chiSqOverlapG is the raw single-observation overlap, obsReal_pertG_eq gives the denominator-free observed-mass formula for the four treatment/outcome cells, and chiSqOverlap_eqG proves the closed form 1 + (Γ / K) * ∑ j, signOf (lam j) * signOf (lam' j).

def Γ reviewed
Causalean.Estimation.MinimaxATE.GenConstr

The per-cell χ²-overlap coefficient.

Definition (Lean source)
noncomputable def Γ : ℝ := P.m₀ * P.α ^ 2 / P.g₁ + P.m₀ * (P.α + P.β / P.g₁) ^ 2 / (1 - P.g₁) + P.m₀ ^ 2 * P.β ^ 2 / (P.g₁ ^ 2 * (1 - P.m₀))
def chiSqOverlapG reviewed
Causalean.Estimation.MinimaxATE.GenConstr

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

Definition (Lean source)
noncomputable def chiSqOverlapG (lam lam' : Fin K → Bool) : ℝ := ∑ z : Obs (Fin K × Bool), obsReal (P.mPertG lam) (P.gPertG lam) z * obsReal (P.mPertG lam') (P.gPertG lam') z / obsReal P.mhatG P.ghatG z
Causalean.Estimation.MinimaxATE.GenConstr.chiSqOverlapG · Causalean/Estimation/MinimaxATE/ConstCenterGeneral/ChiSqOverlap.lean:56 · uses GenConstr
theorem chiSqOverlap_eqG reviewed
Causalean.Estimation.MinimaxATE.GenConstr

For any two Rademacher sign vectors lam and lam' indexing perturbed data-generating processes, the single-observation χ² overlap between them equals one plus the per-cell coefficient Γ/K times the sum of pairwise sign agreements between lam and lam'.

Formal statement
lam lam' :
Fin K → Bool
P.chiSqOverlapG lam lam' = 1 + (P.Γ / (K : ℝ)) * ∑ j, signOf (lam j) * signOf (lam' j)
Proof (Lean source)
theorem chiSqOverlap_eqG [NeZero K] (lam lam' : Fin K → Bool) : P.chiSqOverlapG lam lam' = 1 + (P.Γ / (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 have hg₁ne : P.g₁ ≠ 0 := ne_of_gt P.hg₁0 have hm₀ne : P.m₀ ≠ 0 := ne_of_gt P.hm₀0 have hg₀ne : P.g₀ ≠ 0 := ne_of_gt P.hg₀0 have h1g₁ : (1 : ℝ) - P.g₁ ≠ 0 := by have := P.hg₁1; intro hc; linarith have h1m₀ : (1 : ℝ) - P.m₀ ≠ 0 := by have := P.hm₀1; intro hc; linarith have h1g₀ : (1 : ℝ) - P.g₀ ≠ 0 := by have := P.hg₀1; intro hc; linarith -- Rewrite the overlap as a per-cell sum, collapsing the inner `Bool × Bool` sum. have hsum : P.chiSqOverlapG lam lam' = ∑ j : Fin K, (1 / (K : ℝ)) * (1 + P.Γ * (signOf (lam j) * signOf (lam' j))) := by unfold chiSqOverlapG rw [Fintype.sum_prod_type, Fintype.sum_prod_type] refine Finset.sum_congr rfl fun j _ => ?_ simp only [Fintype.sum_prod_type, Fintype.sum_bool] simp only [obsReal_pertG_eq] simp only [obsReal, mhatG, ghatG, 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] -- evaluate at the four concrete sign combinations rcases signOf_mem (lam j) with h | h <;> rcases signOf_mem (lam' j) with h' | h' <;> rw [h, h'] <;> · simp only [Γ] field_simp ring rw [hsum] have hsplit : ∀ j : Fin K, (1 / (K : ℝ)) * (1 + P.Γ * (signOf (lam j) * signOf (lam' j))) = 1 / (K : ℝ) + P.Γ / (K : ℝ) * (signOf (lam j) * signOf (lam' j)) := by intro j; ring 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
1 supporting declaration (lemmas, instances)
  • obsReal_pertG_eq theorem — Denominator-free value of the perturbed observed mass obsReal mλ gλ at the four (d, y) combinations. The treated arm's denominator 1 − (β/g₁)Δ cancels against mλ = m₀·(1 − (β/g₁)Δ).
    lam :
    Fin K → Bool
    x :
    Fin K × Bool
    d y :
    obsReal (P.mPertG lam) (P.gPertG lam) (x, d, y)
    = (card (Fin K × Bool) : ℝ)⁻¹ * (match d, y with | true, true => P.m₀ * (P.g₁ + P.α * Δ lam x) | true, false => P.m₀ * ((1 - P.g₁) - (P.α + P.β / P.g₁) * Δ lam x) | false, true => (1 - P.m₀ + P.m₀ * (P.β / P.g₁) * Δ lam x) * P.g₀ | false, false => (1 - P.m₀ + P.m₀ * (P.β / P.g₁) * Δ lam x) * (1 - P.g₀))
    Proof (Lean source)
    theorem obsReal_pertG_eq (lam : Fin K → Bool) (x : Fin K × Bool) (d y : Bool) : obsReal (P.mPertG lam) (P.gPertG lam) (x, d, y) = (card (Fin K × Bool) : ℝ)⁻¹ * (match d, y with | true, true => P.m₀ * (P.g₁ + P.α * Δ lam x) | true, false => P.m₀ * ((1 - P.g₁) - (P.α + P.β / P.g₁) * Δ lam x) | false, true => (1 - P.m₀ + P.m₀ * (P.β / P.g₁) * Δ lam x) * P.g₀ | false, false => (1 - P.m₀ + P.m₀ * (P.β / P.g₁) * Δ lam x) * (1 - P.g₀)) := by have hd : (1 - (P.β / P.g₁) * Δ lam x) ≠ 0 := (P.denomG_pos lam x).ne' have hg₁ne : P.g₁ ≠ 0 := ne_of_gt P.hg₁0 have hden : P.g₁ - P.β * Δ lam x ≠ 0 := by rcases Δ_mem lam x with h | h <;> rw [h] <;> · have := P.hβg₁; have := P.hβ; intro hc; nlinarith unfold obsReal mPertG gPertG cases d <;> cases y <;> simp only [Bool.false_eq_true, if_false, if_true] <;> rw [mul_assoc] <;> refine congrArg _ ?_ <;> field_simp <;> ring
    Causalean.Estimation.MinimaxATE.GenConstr.obsReal_pertG_eq · Causalean/Estimation/MinimaxATE/ConstCenterGeneral/ChiSqOverlap.lean:63
Lower­Bound 4 core · 12 supporting This file assembles the general constant-center construction for structure-agnostic ATE estimation into a two-point minimax lower bound. ★ minimax_lower_bound_gen

General-Center Lower Bound

This file assembles the general constant-center construction for structure-agnostic ATE estimation into a two-point minimax lower bound. It defines the null sample law QfalseG, the sign-indexed perturbed sample laws QpertG, and the Rademacher-mixture alternative QtrueG, then proves their probability-measure facts.

The main calculations are one_add_chiSqDiv_QtrueG_QfalseG, which expresses the mixture second moment through the general-center overlap coefficient, chiSqDiv_QtrueG_QfalseG_le_one, which applies the Ingster bound under the Γ sample-size regime, and tvDist_QfalseG_QtrueG_le_half, which converts chi-squared control to total variation. The capstone minimax_lower_bound_gen shows that every measurable estimator misses by the general-center product-rate scale somewhere in the structure-agnostic nuisance class.

def QfalseG reviewed
Causalean.Estimation.MinimaxATE.GenConstr

The null n-sample law P̂^⊗n.

Definition (Lean source)
noncomputable def QfalseG (P : GenConstr) (K n : ℕ) [NeZero K] : Measure (Fin n → Obs (Fin K × Bool)) := productLaw (P.validDGP_hatG (K := K)) n
Causalean.Estimation.MinimaxATE.GenConstr.QfalseG · Causalean/Estimation/MinimaxATE/ConstCenterGeneral/LowerBound.lean:79 · uses GenConstr , Obs
def QpertG reviewed
Causalean.Estimation.MinimaxATE.GenConstr

The perturbed n-sample law Qλ^⊗n.

Definition (Lean source)
noncomputable def QpertG (P : GenConstr) (K n : ℕ) [NeZero K] (lam : Fin K → Bool) : Measure (Fin n → Obs (Fin K × Bool)) := productLaw (P.validDGP_pertG lam) n
Causalean.Estimation.MinimaxATE.GenConstr.QpertG · Causalean/Estimation/MinimaxATE/ConstCenterGeneral/LowerBound.lean:84 · uses GenConstr , Obs
def QtrueG reviewed
Causalean.Estimation.MinimaxATE.GenConstr

The alternative n-sample law: the uniform Rademacher mixture of the perturbed laws.

Definition (Lean source)
noncomputable def QtrueG (P : GenConstr) (K n : ℕ) [NeZero K] : Measure (Fin n → Obs (Fin K × Bool)) := mixture (signWeight K) (fun lam => QpertG P K n lam)
Causalean.Estimation.MinimaxATE.GenConstr.QtrueG · Causalean/Estimation/MinimaxATE/ConstCenterGeneral/LowerBound.lean:89 · uses GenConstr , Obs
theorem minimax_lower_bound_gen reviewed
Causalean.Estimation.MinimaxATE.GenConstr

Structure-agnostic minimax lower bound (general constant center). Fix a constant nuisance center (m₀, g₀, g₁) ∈ (0,1)³ and Rademacher bump magnitudes (α, β). Suppose the squared propensity-perturbation size (m₀·β/g₁)² is within the budget εm and the squared outcome-regression perturbation size g₁²(α+β)²/(g₁−β)² is within the budget εg, with both budgets nonnegative. If further the per-cell overlap coefficient Γ is at most 1 and the sample size obeys the regime 2n²(Γ/2)² ≤ K·log 2, then for every measurable estimator, there is a data-generating process in the structure-agnostic class around this center on which the estimator misses the true ATE by s = g₁β(α+β)/(2(g₁²−β²)) with probability at least 1/4.

Formal statement
P :
K n :
εg εm :
hm :
(P.m₀ * (P.β / P.g₁)) ^ 2 ≤ εm
hg :
P.g₁ ^ 2 * (P.α + P.β) ^ 2 / (P.g₁ - P.β) ^ 2 ≤ εg
hεg :
0 ≤ εg
hεm :
0 ≤ εm
:
P.Γ ≤ 1
hreg :
2 * (n : ℝ) ^ 2 * (P.Γ / 2) ^ 2 ≤ (K : ℝ) * log 2
est :
(Fin n → Obs (Fin K × Bool)) → ℝ
hest :
1 / 4
minimaxMiss P.mhatG P.ghatG εg εm n est (P.g₁ * P.β * (P.α + P.β) / (2 * (P.g₁ ^ 2 - P.β ^ 2)))
Proof (Lean source)
theorem minimax_lower_bound_gen (P : GenConstr) {K n : ℕ} [NeZero K] {εg εm : ℝ} (hm : (P.m₀ * (P.β / P.g₁)) ^ 2 ≤ εm) (hg : P.g₁ ^ 2 * (P.α + P.β) ^ 2 / (P.g₁ - P.β) ^ 2 ≤ εg) (hεg : 0 ≤ εg) (hεm : 0 ≤ εm) (hΓ : P.Γ ≤ 1) (hreg : 2 * (n : ℝ) ^ 2 * (P.Γ / 2) ^ 2 ≤ (K : ℝ) * log 2) {est : (Fin n → Obs (Fin K × Bool)) → ℝ} (hest : Measurable est) : 1 / 4 ≤ minimaxMiss P.mhatG P.ghatG εg εm n est (P.g₁ * P.β * (P.α + P.β) / (2 * (P.g₁ ^ 2 - P.β ^ 2))) := by have hden : (0:ℝ) < P.g₁ ^ 2 - P.β ^ 2 := P.g1sq_sub_betasq_pos have hdenne : P.g₁ ^ 2 - P.β ^ 2 ≠ 0 := hden.ne' set gap := P.g₁ * P.β * (P.α + P.β) / (P.g₁ ^ 2 - P.β ^ 2) with hgap have hgap0 : 0 ≤ gap := by rw [hgap]; have := P.hβ; have := P.hα; have := P.hg₁0 apply div_nonneg (by positivity) hden.le set s := P.g₁ * P.β * (P.α + P.β) / (2 * (P.g₁ ^ 2 - P.β ^ 2)) with hs have hs_gap : s = gap / 2 := by rw [hs, hgap]; field_simp -- the two-point witness let W : TwoPointWitness (Fin K × Bool) n P.mhatG P.ghatG εg εm := { s := s c := 1 / 2 Q := fun j => cond j (QtrueG P K n) (QfalseG P K n) prob := by intro j; cases j · exact QfalseG_isProb P K n · exact QtrueG_isProb P K n θ := fun j => cond j ((P.g₁ - P.g₀) + gap) (P.g₁ - P.g₀) sep := by change 2 * s ≤ |((P.g₁ - P.g₀) + gap) - (P.g₁ - P.g₀)| rw [add_sub_cancel_left, abs_of_nonneg hgap0, hs_gap]; linarith tvBound := by simpa using P.tvDist_QfalseG_QtrueG_le_half (K := K) (n := n) hΓ hreg dominated := by intro est' j cases j · -- null branch: `cond false` reduces to `QfalseG` / `g₁ − g₀` change (QfalseG P K n).real {x | s ≤ |est' x - (P.g₁ - P.g₀)|} ≤ minimaxMiss P.mhatG P.ghatG εg εm n est' s have hb := P.realG_le_minimaxMiss (K := K) (n := n) (inClass_nullG P hεg hεm) est' s rw [P.ate_ghatG] at hb exact hb · -- mixture branch change (QtrueG P K n).real {x | s ≤ |est' x - ((P.g₁ - P.g₀) + gap)|} ≤ minimaxMiss P.mhatG P.ghatG εg εm n est' s haveI : ∀ lam : Fin K → Bool, IsProbabilityMeasure (QpertG P K n lam) := fun lam => QpertG_isProb P K n lam unfold QtrueG refine mixtureReal_le (signWeight K) (signWeight_sum K) (fun lam => QpertG P K n lam) _ _ ?_ intro lam have hb := P.realG_le_minimaxMiss (K := K) (n := n) (P.inClassG hm hg lam) est' s rw [P.ate_gPertG lam, ← hgap] at hb exact hb } exact twoPointWitness_quarter W (le_refl _) hest
12 supporting declarations (lemmas, instances)
Gap 2 core · 3 supporting This file computes the exact average-treatment-effect gap for the general constant-center Rademacher construction. ★ ate_gPertG★ ate_gapG

General-Center ATE Gap

This file computes the exact average-treatment-effect gap for the general constant-center Rademacher construction. The calculation shows that every sign vector produces the same ATE shift from the null center, giving the separation used by the general-center lower bound.

The main public results are ate_ghatG, the null-center ATE calculation; gPertG_true_eq, which clears the treated-arm denominator for algebraic use; ate_gPertG, the exact perturbed ATE formula; and ate_gapG, the resulting constant ATE separation between the perturbation and the null.

theorem ate_gPertG reviewed
Causalean.Estimation.MinimaxATE.GenConstr

Exact ATE of the perturbed construction. For any Rademacher sign vector lam, the average treatment effect of the perturbed outcome regression equals (g₁ − g₀) + g₁β(α+β)/(g₁² − β²), independent of lam.

Formal statement
lam :
Fin K → Bool
ate (P.gPertG lam) = (P.g₁ - P.g₀) + P.g₁ * P.β * (P.α + P.β) / (P.g₁ ^ 2 - P.β ^ 2)
Proof (Lean source)
theorem ate_gPertG [NeZero K] (lam : Fin K → Bool) : ate (P.gPertG lam) = (P.g₁ - P.g₀) + P.g₁ * P.β * (P.α + P.β) / (P.g₁ ^ 2 - P.β ^ 2) := by have hK : (K : ℝ) ≠ 0 := Nat.cast_ne_zero.mpr (NeZero.ne K) have d3 : P.g₁ ^ 2 - P.β ^ 2 ≠ 0 := ne_of_gt P.g1sq_sub_betasq_pos rw [ate, Fintype.sum_prod_type] have hpair : ∀ j : Fin K, (∑ b : Bool, (P.gPertG lam true (j, b) - P.gPertG lam false (j, b))) = 2 * P.g₁ * (P.g₁ ^ 2 + P.α * P.β) / (P.g₁ ^ 2 - P.β ^ 2) - 2 * P.g₀ := by intro j rw [Fintype.sum_bool] have := P.perPairG 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.GenConstr.ate_gPertG · Causalean/Estimation/MinimaxATE/ConstCenterGeneral/Gap.lean:99 · uses GenConstr , gPertG , ate
theorem ate_gapG reviewed
Causalean.Estimation.MinimaxATE.GenConstr

For any Rademacher sign vector lam, the gap between the perturbed construction's ATE and the null estimate's ATE equals g₁β(α+β)/(g₁² − β²).

Formal statement
lam :
Fin K → Bool
ate (P.gPertG lam) - ate (P.ghatG (K := K))
= P.g₁ * P.β * (P.α + P.β) / (P.g₁ ^ 2 - P.β ^ 2)
Proof (Lean source)
theorem ate_gapG [NeZero K] (lam : Fin K → Bool) : ate (P.gPertG lam) - ate (P.ghatG (K := K)) = P.g₁ * P.β * (P.α + P.β) / (P.g₁ ^ 2 - P.β ^ 2) := by rw [ate_gPertG, ate_ghatG]; ring
Causalean.Estimation.MinimaxATE.GenConstr.ate_gapG · Causalean/Estimation/MinimaxATE/ConstCenterGeneral/Gap.lean:124 · uses GenConstr , gPertG , ghatG , ate
3 supporting declarations (lemmas, instances)
  • g1sq_sub_betasq_pos theorem — g₁² − β² > 0 since 0 ≤ β < g₁.
    0 < P.g₁ ^ 2 - P.β ^ 2
    Proof (Lean source)
    theorem g1sq_sub_betasq_pos : 0 < P.g₁ ^ 2 - P.β ^ 2 := by have := P.hβg₁; have := P.hβ; have := P.hg₁0; nlinarith
    Causalean.Estimation.MinimaxATE.GenConstr.g1sq_sub_betasq_pos · Causalean/Estimation/MinimaxATE/ConstCenterGeneral/Gap.lean:46
  • gPertG_true_eq theorem — Cleared treated arm. Multiplying numerator and denominator by g₁ turns the inner fraction β/g₁ into the polynomial denominator g₁ − β·Δ: gλ(1,x) = (g₁² + α·g₁·Δ)/(g₁ − β·Δ).
    lam :
    Fin K → Bool
    x :
    Fin K × Bool
    P.gPertG lam true x = (P.g₁ ^ 2 + P.α * P.g₁ * Δ lam x) / (P.g₁ - P.β * Δ lam x)
    Proof (Lean source)
    theorem gPertG_true_eq (lam : Fin K → Bool) (x : Fin K × Bool) : P.gPertG lam true x = (P.g₁ ^ 2 + P.α * P.g₁ * Δ lam x) / (P.g₁ - P.β * Δ lam x) := by have hg₁ne : P.g₁ ≠ 0 := ne_of_gt P.hg₁0 have hden0 := P.denomG_pos lam x have hden : P.g₁ - P.β * Δ lam x ≠ 0 := by rcases Δ_mem lam x with h | h <;> rw [h] <;> · have := P.hβg₁; have := P.hβ; intro hc; nlinarith simp only [gPertG, if_true] rw [div_eq_div_iff hden0.ne' hden] field_simp
    Causalean.Estimation.MinimaxATE.GenConstr.gPertG_true_eq · Causalean/Estimation/MinimaxATE/ConstCenterGeneral/Gap.lean:50
  • ate_ghatG theorem — The null estimate ĝ has ATE g₁ − g₀: every cell contributes g₁ − g₀.
    ate (P.ghatG (K := K)) = P.g₁ - P.g₀
    Proof (Lean source)
    theorem ate_ghatG [NeZero K] : ate (P.ghatG (K := K)) = P.g₁ - P.g₀ := by rw [ate] have : ∀ x : Fin K × Bool, P.ghatG true x - P.ghatG false x = P.g₁ - P.g₀ := by intro x; simp [ghatG] rw [Finset.sum_congr rfl (fun x _ => this x), Finset.sum_const, Finset.card_univ, nsmul_eq_mul] have hcard : (card (Fin K × Bool) : ℝ) ≠ 0 := Nat.cast_ne_zero.mpr Fintype.card_ne_zero field_simp
    Causalean.Estimation.MinimaxATE.GenConstr.ate_ghatG · Causalean/Estimation/MinimaxATE/ConstCenterGeneral/Gap.lean:64
Membership 1 core · 4 supporting This file proves that the general constant-center Rademacher perturbations belong to the structure-agnostic nuisance class when the propensity and outcome error budgets are large enough. ★ inClassG

General-Center Membership

This file proves that the general constant-center Rademacher perturbations belong to the structure-agnostic nuisance class when the propensity and outcome error budgets are large enough. The supporting estimates are l2sq_mPertG for the exact propensity error, l2sq_gPertG_false for the unchanged control arm, gPertG_true_sub for the treated-arm pointwise deviation, and l2sq_gPertG_true_le for the uniform treated-arm error bound.

The capstone inClassG packages these estimates into the realizability input required by the general-center minimax lower bound.

theorem inClassG reviewed
Causalean.Estimation.MinimaxATE.GenConstr

Class membership. Given the squared propensity-perturbation size (m₀·(β/g₁))² within the budget εm and the squared treated-arm outcome-regression perturbation bound g₁²(α+β)²/(g₁ − β)² within the budget εg, the Rademacher-perturbed data-generating process (mλ, gλ) lies in the structure-agnostic nuisance class ℱ(εg, εm) around the constant center (m̂, ĝ).

Formal statement
εg εm :
hm :
(P.m₀ * (P.β / P.g₁)) ^ 2 ≤ εm
hg :
P.g₁ ^ 2 * (P.α + P.β) ^ 2 / (P.g₁ - P.β) ^ 2 ≤ εg
lam :
Fin K → Bool
InClass (P.mhatG (K := K)) P.ghatG εg εm (P.mPertG lam) (P.gPertG lam)
Proof (Lean source)
theorem inClassG [NeZero K] {εg εm : ℝ} (hm : (P.m₀ * (P.β / P.g₁)) ^ 2 ≤ εm) (hg : P.g₁ ^ 2 * (P.α + P.β) ^ 2 / (P.g₁ - P.β) ^ 2 ≤ εg) (lam : Fin K → Bool) : InClass (P.mhatG (K := K)) P.ghatG εg εm (P.mPertG lam) (P.gPertG lam) := by refine ⟨P.validDGP_pertG lam, ?_, ?_⟩ · intro d cases d with | false => rw [P.l2sq_gPertG_false lam] exact le_trans (by positivity) hg | true => exact le_trans (P.l2sq_gPertG_true_le lam) hg · rw [P.l2sq_mPertG lam] exact hm
4 supporting declarations (lemmas, instances)
  • l2sq_mPertG theorem — The propensity perturbation has exact squared L² size (m₀·(β/g₁))²: it is a Rademacher bump of magnitude m₀·(β/g₁) on Δ.
    lam :
    Fin K → Bool
    l2sq (P.mPertG lam) (P.mhatG (K := K)) = (P.m₀ * (P.β / P.g₁)) ^ 2
    Proof (Lean source)
    theorem l2sq_mPertG [NeZero K] (lam : Fin K → Bool) : l2sq (P.mPertG lam) (P.mhatG (K := K)) = (P.m₀ * (P.β / P.g₁)) ^ 2 := by have hbump : (P.mPertG lam) = (fun x => P.mhatG x + (-(P.m₀ * (P.β / P.g₁))) * Δ lam x) := by funext x simp only [mPertG, mhatG] ring rw [hbump] have hb := l2sq_bump (P.mhatG (K := K)) (-(P.m₀ * (P.β / P.g₁))) (fun x => Δ lam x) (fun x => Δ_sq lam x) rw [hb] ring
    Causalean.Estimation.MinimaxATE.GenConstr.l2sq_mPertG · Causalean/Estimation/MinimaxATE/ConstCenterGeneral/Membership.lean:47
  • l2sq_gPertG_false theorem — The control outcome arm is unchanged (gλ(0,·) = g₀ = ĝ(0,·)), so its L² error is 0.
    lam :
    Fin K → Bool
    l2sq (P.gPertG lam false) (P.ghatG false) = 0
    Proof (Lean source)
    theorem l2sq_gPertG_false (lam : Fin K → Bool) : l2sq (P.gPertG lam false) (P.ghatG false) = 0 := by have h : P.gPertG lam false = P.ghatG false := by funext x simp only [gPertG, ghatG, Bool.false_eq_true, if_false] rw [h, l2sq_self]
    Causalean.Estimation.MinimaxATE.GenConstr.l2sq_gPertG_false · Causalean/Estimation/MinimaxATE/ConstCenterGeneral/Membership.lean:62
  • gPertG_true_sub theorem — The treated outcome arm: its pointwise deviation from ĝ(1) = g₁ is g₁(α+β)·Δ/(g₁ − β·Δ).
    lam :
    Fin K → Bool
    x :
    Fin K × Bool
    P.gPertG lam true x - P.g₁ = P.g₁ * (P.α + P.β) * Δ lam x / (P.g₁ - P.β * Δ lam x)
    Proof (Lean source)
    theorem gPertG_true_sub (lam : Fin K → Bool) (x : Fin K × Bool) : P.gPertG lam true x - P.g₁ = P.g₁ * (P.α + P.β) * Δ lam x / (P.g₁ - P.β * Δ lam x) := by have hden : P.g₁ - P.β * Δ lam x ≠ 0 := by rcases Δ_mem lam x with h | h <;> rw [h] <;> · have := P.hβg₁; have := P.hβ; intro hc; nlinarith rw [gPertG_true_eq, eq_div_iff hden, sub_mul, div_mul_cancel₀ _ hden] ring
    Causalean.Estimation.MinimaxATE.GenConstr.gPertG_true_sub · Causalean/Estimation/MinimaxATE/ConstCenterGeneral/Membership.lean:71
  • l2sq_gPertG_true_le theorem — Uniform bound on the treated arm's squared L² error: every pointwise term is ≤ g₁²(α+β)²/(g₁ − β)², so the average is too.
    lam :
    Fin K → Bool
    l2sq (P.gPertG lam true) (P.ghatG true) ≤ P.g₁ ^ 2 * (P.α + P.β) ^ 2 / (P.g₁ - P.β) ^ 2
    Proof (Lean source)
    theorem l2sq_gPertG_true_le [NeZero K] (lam : Fin K → Bool) : l2sq (P.gPertG lam true) (P.ghatG true) ≤ P.g₁ ^ 2 * (P.α + P.β) ^ 2 / (P.g₁ - P.β) ^ 2 := by set C := Fin K × Bool have hC : (Fintype.card C : ℝ) ≠ 0 := Nat.cast_ne_zero.mpr Fintype.card_ne_zero -- denominator `g₁ − β` is positive have hden : (0 : ℝ) < P.g₁ - P.β := by have := P.hβg₁; linarith have hden2 : (0 : ℝ) < (P.g₁ - P.β) ^ 2 := by positivity -- each summand is `g₁²(α+β)²/(g₁ − β·Δ)²` and is bounded by `g₁²(α+β)²/(g₁ − β)²` have hterm : ∀ x : C, (P.gPertG lam true x - P.ghatG true x) ^ 2 ≤ P.g₁ ^ 2 * (P.α + P.β) ^ 2 / (P.g₁ - P.β) ^ 2 := by intro x have hghat : P.ghatG true x = P.g₁ := by simp [ghatG] rw [hghat, P.gPertG_true_sub lam x] -- the cleared denominator `g₁ − β·Δ` is nonzero (in fact positive squared) have hdne : P.g₁ - P.β * Δ lam x ≠ 0 := by rcases Δ_mem lam x with h | h <;> rw [h] <;> · have := P.hβg₁; have := P.hβ; intro hc; nlinarith have hdenΔ : (0 : ℝ) < (P.g₁ - P.β * Δ lam x) ^ 2 := by positivity -- rewrite the squared term using `Δ² = 1` have hsq : (P.g₁ * (P.α + P.β) * Δ lam x / (P.g₁ - P.β * Δ lam x)) ^ 2 = P.g₁ ^ 2 * (P.α + P.β) ^ 2 / (P.g₁ - P.β * Δ lam x) ^ 2 := by rw [div_pow, mul_pow, mul_pow, Δ_sq, mul_one] rw [hsq] -- compare denominators: `(g₁ − β)² ≤ (g₁ − β·Δ)²` have hcmp : (P.g₁ - P.β) ^ 2 ≤ (P.g₁ - P.β * Δ lam x) ^ 2 := by have hβ := P.hβ have hβg₁ := P.hβg₁ have hg₁0 := P.hg₁0 rcases Δ_mem lam x with h | h · rw [h]; nlinarith · rw [h]; nlinarith apply div_le_div_of_nonneg_left (by positivity) hden2 hcmp -- average of bounded terms is bounded rw [l2sq] have hsum : ∑ x : C, (P.gPertG lam true x - P.ghatG true x) ^ 2 ≤ ∑ _x : C, P.g₁ ^ 2 * (P.α + P.β) ^ 2 / (P.g₁ - P.β) ^ 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, (P.gPertG lam true x - P.ghatG true x) ^ 2 ≤ (Fintype.card C : ℝ)⁻¹ * ((Fintype.card C : ℝ) * (P.g₁ ^ 2 * (P.α + P.β) ^ 2 / (P.g₁ - P.β) ^ 2)) := by apply mul_le_mul_of_nonneg_left hsum positivity _ = P.g₁ ^ 2 * (P.α + P.β) ^ 2 / (P.g₁ - P.β) ^ 2 := by field_simp
    Causalean.Estimation.MinimaxATE.GenConstr.l2sq_gPertG_true_le · Causalean/Estimation/MinimaxATE/ConstCenterGeneral/Membership.lean:81
MSE 1 core · 0 supporting This file converts the general constant-center quantile lower bound into an expected mean-squared-error lower bound. ★ minimax_lower_bound_mse_gen

General-Center MSE Bound

This file converts the general constant-center quantile lower bound into an expected mean-squared-error lower bound. The theorem minimax_lower_bound_mse_gen uses minimax_lower_bound_gen together with the Chebyshev bridge nMiss_sq_le_nMSE to extract an in-class data-generating process on which any measurable estimator has squared-error risk at least one quarter of the squared general-center separation.

The proof keeps the two possible witnesses explicit: the null law QfalseG with ATE g₁ - g₀, or one perturbed law QpertG selected from the uniform mixture QtrueG.

theorem minimax_lower_bound_mse_gen reviewed
Causalean.Estimation.MinimaxATE.GenConstr

Structure-agnostic minimax lower bound, expected-risk (MSE) form (general center). Under the same budget and regularity hypotheses as minimax_lower_bound_genthe squared propensity-perturbation size within the budget εm, the squared outcome-regression perturbation size within the budget εg, both budgets nonnegative, the per-cell overlap coefficient Γ at most 1, and the sample size in the regime 2n²(Γ/2)² ≤ K·log 2every measurable estimator has the weaker expected-risk consequence: there is a data-generating process in the class on which the estimator's mean-squared error is at least s²/4, where s = g₁β(α+β)/(2(g₁²−β²)) ≍ √(εg·εm), obtained from the quantile bound by a Chebyshev (1−γ)-factor conversion at γ = 3/4.

Formal statement
P :
K n :
εg εm :
hm :
(P.m₀ * (P.β / P.g₁)) ^ 2 ≤ εm
hg :
P.g₁ ^ 2 * (P.α + P.β) ^ 2 / (P.g₁ - P.β) ^ 2 ≤ εg
hεg :
0 ≤ εg
hεm :
0 ≤ εm
:
P.Γ ≤ 1
hreg :
2 * (n : ℝ) ^ 2 * (P.Γ / 2) ^ 2 ≤ (K : ℝ) * log 2
est :
(Fin n → Obs (Fin K × Bool)) → ℝ
hest :
∃ p : InClassDGP (P.mhatG (K := K)) P.ghatG εg εm,
(P.g₁ * P.β * (P.α + P.β) / (2 * (P.g₁ ^ 2 - P.β ^ 2))) ^ 2 / 4 ≤ nMSE p.2.valid n est
Proof (Lean source)
theorem minimax_lower_bound_mse_gen (P : GenConstr) {K n : ℕ} [NeZero K] {εg εm : ℝ} (hm : (P.m₀ * (P.β / P.g₁)) ^ 2 ≤ εm) (hg : P.g₁ ^ 2 * (P.α + P.β) ^ 2 / (P.g₁ - P.β) ^ 2 ≤ εg) (hεg : 0 ≤ εg) (hεm : 0 ≤ εm) (hΓ : P.Γ ≤ 1) (hreg : 2 * (n : ℝ) ^ 2 * (P.Γ / 2) ^ 2 ≤ (K : ℝ) * log 2) {est : (Fin n → Obs (Fin K × Bool)) → ℝ} (hest : Measurable est) : ∃ p : InClassDGP (P.mhatG (K := K)) P.ghatG εg εm, (P.g₁ * P.β * (P.α + P.β) / (2 * (P.g₁ ^ 2 - P.β ^ 2))) ^ 2 / 4 ≤ nMSE p.2.valid n est := by have hden : (0:ℝ) < P.g₁ ^ 2 - P.β ^ 2 := P.g1sq_sub_betasq_pos have hdenne : P.g₁ ^ 2 - P.β ^ 2 ≠ 0 := hden.ne' set gap := P.g₁ * P.β * (P.α + P.β) / (P.g₁ ^ 2 - P.β ^ 2) with hgap have hgap0 : 0 ≤ gap := by rw [hgap]; have := P.hβ; have := P.hα; have := P.hg₁0 apply div_nonneg (by positivity) hden.le set s := P.g₁ * P.β * (P.α + P.β) / (2 * (P.g₁ ^ 2 - P.β ^ 2)) with hs have hs_gap : s = gap / 2 := by rw [hs, hgap]; field_simp have hs0 : 0 ≤ s := by rw [hs_gap]; linarith haveI : IsProbabilityMeasure (QfalseG P K n) := QfalseG_isProb P K n haveI : IsProbabilityMeasure (QtrueG P K n) := QtrueG_isProb P K n haveI : ∀ lam : Fin K → Bool, IsProbabilityMeasure (QpertG P K n lam) := fun lam => QpertG_isProb P K 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 (P.mhatG (K := K)) P.ghatG εg εm m g) (θ : ℝ), ate g = θ → 1 / 4 ≤ (productLaw hin.valid n).real {x | s ≤ |est x - θ|} → ∃ p : InClassDGP (P.mhatG (K := K)) P.ghatG ε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 := P.tvDist_QfalseG_QtrueG_le_half (K := K) (n := n) hΓ hreg have hsep : 2 * s ≤ |(P.g₁ - P.g₀) - ((P.g₁ - P.g₀) + gap)| := by rw [sub_add_cancel_left, abs_neg, abs_of_nonneg hgap0, hs_gap]; linarith have hmax := two_point_lower_bound_of_tvDist_le (P₀ := QfalseG P K n) (P₁ := QtrueG P K 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 ĝ = g₁ − g₀` exact hkey (inClass_nullG P hεg hεm) (P.g₁ - P.g₀) P.ate_ghatG hleft · -- mixture branch: extract a single Rademacher-perturbed DGP obtain ⟨lam, hlam⟩ := exists_real_ge_mixture (signWeight K) (signWeight_sum K) (fun l => QpertG P K n l) {x | s ≤ |est x - ((P.g₁ - P.g₀) + gap)|} refine hkey (P.inClassG hm hg lam) ((P.g₁ - P.g₀) + gap) ?_ (le_trans hright hlam) rw [P.ate_gPertG lam]