Estimation.ATT.Score
AIPW score infrastructure for ATT DML: treated-effect moments, influence functions, finite variance, mean-zero facts, L2 continuity, and arm-specific pull-out lemmas.
AIPWMoment 7 core · 11 supporting Defines the value-space ingredients for ATT augmented inverse-probability weighting. ★ H_ε_overlap_P_Z
Defines the value-space ingredients for ATT augmented inverse-probability
weighting. The file introduces the un-normalized moment aipwMomentATT, the
truth influence function ψ_ATT, the nuisance vector TreatedNuisanceVec with
componentwise vector-space structure, the true nuisance η₀, and the one-sided
overlap class H_ε.
It also provides measurability and law-transport helpers, including
H_ε_overlap_factualX, H_ε_overlap_P_Z, aipwMomentATTFunctional, and
measurable_aipwMomentATTFunctional, used by the mean-zero, finite-variance,
remainder, and score-continuity modules.
The ATT AIPW moment
The ATT AIPW influence function at the truth for the population-π_T one-shot estimator: ψ_ATT(z) := (1/π) · m_AIPW(η₀, z, 0) − θ₀.
Definition (Lean source)
A pair of value-space ATT nuisance functions, used as the abstract nuisance space for the ATT AIPW moment functional: the control-arm outcome regression and a propensity score, together with their measurability.
Definition (Lean source)
The truth η₀ : TreatedNuisanceVec γ.
Definition (Lean source)
The ATT nuisance class carries one-sided upper overlap P_X-a.e., an L²(P_X) outcome-regression component, and an L∞(P_X) propensity component.
Definition (Lean source)
Overlap transports to the joint data law. For a candidate nuisance pair lying in the ATT overlap-bounded realization set H_ε, in particular satisfying the one-sided upper overlap bound η.e_fn ≤ 1 − ε almost everywhere on the covariates, the same bound holds almost everywhere under the joint law of the covariates, treatment, and outcome, once the candidate propensity is evaluated at the covariate projection of the data triple.
Formal statement
Proof (Lean source)
The ATT AIPW moment as a moment functional TreatedNuisanceVec γ → X → ℝ → ℝ, suitable for feeding NeymanOrthogonal.
Definition (Lean source)
11 supporting declarations (lemmas, instances)
-
instZeroinstance — The zero treated-nuisance vector sets the control regression and propensity function to zero.instance : Zero (TreatedNuisanceVec γ) where zero := ⟨fun _ => 0, fun _ => 0, measurable_const, measurable_const⟩ -
instAddinstance — Addition of treated-nuisance vectors is componentwise addition of the control regression and propensity function.instance : Add (TreatedNuisanceVec γ) where add η η' := ⟨fun x => η.μ₀_fn x + η'.μ₀_fn x, fun x => η.e_fn x + η'.e_fn x, η.μ₀_meas.add η'.μ₀_meas, η.e_meas.add η'.e_meas⟩ -
instNeginstance — Negation of a treated-nuisance vector negates the control regression and propensity function.instance : Neg (TreatedNuisanceVec γ) where neg η := ⟨fun x => -η.μ₀_fn x, fun x => -η.e_fn x, η.μ₀_meas.neg, η.e_meas.neg⟩ -
instSubinstance — Subtraction of treated-nuisance vectors is componentwise subtraction of the control regression and propensity function.instance : Sub (TreatedNuisanceVec γ) where sub η η' := ⟨fun x => η.μ₀_fn x - η'.μ₀_fn x, fun x => η.e_fn x - η'.e_fn x, η.μ₀_meas.sub η'.μ₀_meas, η.e_meas.sub η'.e_meas⟩ -
instSMulRealinstance — Scalar multiplication of a treated-nuisance vector scales the control regression and propensity function.instance : SMul ℝ (TreatedNuisanceVec γ) where smul t η := ⟨fun x => t * η.μ₀_fn x, fun x => t * η.e_fn x, measurable_const.mul η.μ₀_meas, measurable_const.mul η.e_meas⟩ -
exttheorem — Two treated-nuisance vectors are equal when their control regressions and propensity functions agree everywhere.hypothesesconclusionη = η'Proof (Lean source)
@[ext] theorem ext {η η' : TreatedNuisanceVec γ} (hμ : ∀ x, η.μ₀_fn x = η'.μ₀_fn x) (he : ∀ x, η.e_fn x = η'.e_fn x) : η = η' := by cases η cases η' simp only at hμ he congr · funext x exact hμ x · funext x exact he x -
ext_ifftheorem∀ {γ : Type u_1} [inst : MeasurableSpace γ] {η η' : TreatedNuisanceVec γ}, η = η' ↔ (∀ (x : γ), η.μ₀_fn x = η'.μ₀_fn x) ∧ ∀ (x : γ), η.e_fn x = η'.e_fn xProof (Lean source)
@[ext] -
instAddCommGroupinstance — Treated-nuisance vectors form an additive commutative group under componentwise operations.instance : AddCommGroup (TreatedNuisanceVec γ) where zero := 0 add := (· + ·) neg := neg sub := Sub.sub nsmul := nsmulRec zsmul := zsmulRec nsmul_zero η := by rfl nsmul_succ n η := by rfl zsmul_zero' η := by rfl zsmul_succ' n η := by rfl zsmul_neg' n η := by rfl sub_eq_add_neg η η' := by apply ext · intro x; exact sub_eq_add_neg (η.μ₀_fn x) (η'.μ₀_fn x) · intro x; exact sub_eq_add_neg (η.e_fn x) (η'.e_fn x) add_assoc η η' η'' := by apply ext · intro x; exact add_assoc (η.μ₀_fn x) (η'.μ₀_fn x) (η''.μ₀_fn x) · intro x; exact add_assoc (η.e_fn x) (η'.e_fn x) (η''.e_fn x) zero_add η := by apply ext · intro x; exact zero_add (η.μ₀_fn x) · intro x; exact zero_add (η.e_fn x) add_zero η := by apply ext · intro x; exact add_zero (η.μ₀_fn x) · intro x; exact add_zero (η.e_fn x) neg_add_cancel η := by apply ext · intro x; exact neg_add_cancel (η.μ₀_fn x) · intro x; exact neg_add_cancel (η.e_fn x) add_comm η η' := by apply ext · intro x; exact add_comm (η.μ₀_fn x) (η'.μ₀_fn x) · intro x; exact add_comm (η.e_fn x) (η'.e_fn x) -
instModuleRealinstance — Treated-nuisance vectors form a real vector space under componentwise scalar multiplication.instance : Module ℝ (TreatedNuisanceVec γ) where smul := (· • ·) one_smul η := by apply ext · intro x change (1 : ℝ) * η.μ₀_fn x = η.μ₀_fn x exact one_mul _ · intro x change (1 : ℝ) * η.e_fn x = η.e_fn x exact one_mul _ mul_smul t u η := by apply ext · intro x change (t * u) * η.μ₀_fn x = t * (u * η.μ₀_fn x) ring · intro x change (t * u) * η.e_fn x = t * (u * η.e_fn x) ring smul_zero t := by apply ext · intro x change t * (0 : ℝ) = 0 exact mul_zero t · intro x change t * (0 : ℝ) = 0 exact mul_zero t smul_add t η η' := by apply ext · intro x change t * (η.μ₀_fn x + η'.μ₀_fn x) = t * η.μ₀_fn x + t * η'.μ₀_fn x ring · intro x change t * (η.e_fn x + η'.e_fn x) = t * η.e_fn x + t * η'.e_fn x ring add_smul t u η := by apply ext · intro x change (t + u) * η.μ₀_fn x = t * η.μ₀_fn x + u * η.μ₀_fn x ring · intro x change (t + u) * η.e_fn x = t * η.e_fn x + u * η.e_fn x ring zero_smul η := by apply ext · intro x change (0 : ℝ) * η.μ₀_fn x = 0 exact zero_mul _ · intro x change (0 : ℝ) * η.e_fn x = 0 exact zero_mul _ -
H_ε_overlap_factualXlemma — Membership in the ATT H_ε transports the one-sided a.e. overlap bound to the original probability space along the observed covariate.hypothesesconclusion∀ᵐ ω ∂P.μ, η.e_fn (S.toPOBackdoorSystem.factualX ω) ≤ 1 - εProof (Lean source)
lemma H_ε_overlap_factualX (S : TreatedEstimationSystem P γ) {ε : ℝ} {η : TreatedNuisanceVec γ} (hη : η ∈ H_ε S ε) : ∀ᵐ ω ∂P.μ, η.e_fn (S.toPOBackdoorSystem.factualX ω) ≤ 1 - ε := by have hset : MeasurableSet {x : γ | η.e_fn x ≤ 1 - ε} := by exact measurableSet_Iic.preimage η.e_meas have hx : ∀ᵐ x ∂S.P_X, η.e_fn x ≤ 1 - ε := hη.1 unfold TreatedEstimationSystem.P_X at hx exact (MeasureTheory.ae_map_iff S.toPOBackdoorSystem.measurable_factualX.aemeasurable hset).mp hx -
measurable_aipwMomentATTFunctionallemma — Measurability of the ATT AIPW moment functional in the data variable z.Proof (Lean source)
lemma measurable_aipwMomentATTFunctional (η : TreatedNuisanceVec γ) (θ : ℝ) : Measurable (fun z => aipwMomentATTFunctional η z θ) := by unfold aipwMomentATTFunctional aipwMomentATT have hX : Measurable (projX : γ × Bool × ℝ → γ) := by unfold projX; fun_prop have hA : Measurable (projA : γ × Bool × ℝ → Bool) := by unfold projA; fun_prop have hY : Measurable (projY : γ × Bool × ℝ → ℝ) := by unfold projY; fun_prop have hindA : Measurable (indA : γ × Bool × ℝ → ℝ) := by unfold indA refine Measurable.ite ?_ measurable_const measurable_const exact hA (MeasurableSet.singleton true) have hμ₀X : Measurable (fun z : γ × Bool × ℝ => η.μ₀_fn (projX z)) := η.μ₀_meas.comp hX have heX : Measurable (fun z : γ × Bool × ℝ => η.e_fn (projX z)) := η.e_meas.comp hX refine Measurable.sub ?_ (hindA.mul measurable_const) refine Measurable.sub ?_ ?_ · exact hindA.mul (hY.sub hμ₀X) · refine mul (mul ?_ ?_) (hY.sub hμ₀X) · exact (measurable_const.sub hindA) · exact heX.div (measurable_const.sub heX)
AIPWScoreL2 3 core · 1 supporting Proves L²(P_Z) continuity bounds for the ATT AIPW score as the nuisance functions vary. ★ aipw_score_diff_isLittleOp_one_ATT
Proves L²(P_Z) continuity bounds for the ATT AIPW score as the nuisance
functions vary. The pointwise constant K_AIPW_ATT controls the Lipschitz bound
aipw_score_lipschitz_ATT on the a.e. one-sided-overlap class H_ε.
The file also defines the residual square YMuVal_residual_sq_ATT and proves
the headline stochastic-continuity theorem
aipw_score_diff_isLittleOp_one_ATT: if the control-regression and propensity
errors are individually o_p(1) in L²(P_X), then the AIPW score difference is
o_p(1) in L²(P_Z). This is the empirical-process input for ATT double
machine learning.
Pointwise Lipschitz constant for the ATT AIPW moment in η on H_ε: K_AIPW_ATT ε := 1 + 2/ε + 2/ε². Tracks the quadratic blow-up of the inverse weight 1/(1−ê) and the cross term (ê − e)/((1−ê)·(1−e)) arising from the single IPW factor e/(1−e) in the ATT AIPW form. Same shape as the ATE constant K_AIPW, which is fine — both are dominated by the worst-case 1/ε² term.
Definition (Lean source)
The single ATT residual integrand |Y − μ₀(X)|, viewed on the data space.
Definition (Lean source)
Headline L²(P_Z) o_p(1) continuity bound for the ATT AIPW score. Fix a sequence of random candidate nuisance pairs indexed by sample size. Under one-sided overlap ε on the true propensity, membership of the truth nuisance in the overlap-bounded realization set H_ε, nonnegativity of the true propensity, the one-sided back-door ATT assumptions, square-integrability of the factual outcome and of the untreated potential outcome Y(0): if every draw of the candidate lies in the overlap-bounded realization set H_ε, every candidate propensity is nonnegative, each candidate control-regression error admits an L²(P_X) witness, each candidate propensity error admits an L²(P_X) witness, the control-regression error rate is o_p(1) in L²(P_X), and the propensity error rate is o_p(1) in L²(P_X), then the L²(P_Z) distance between the ATT AIPW score evaluated at the random candidate nuisance and at the truth nuisance is o_p(1).
Formal statement
Proof (Lean source)
1 supporting declaration (lemmas, instances)
-
aipw_score_lipschitz_ATTtheorem — ATT AIPW score Lipschitz bound on the a.e. one-sided-overlap set H_ε.hypothesesS :ε :ℝh_overlap :S.OneSidedOverlap εhη₀_mem :S.η₀ ∈ H_ε S εη :hη :η ∈ H_ε S εconclusion∀ᵐ z ∂S.P_Z,|aipwMomentATTFunctional η z S.θ₀ - aipwMomentATTFunctional S.η₀ z S.θ₀|≤ K_AIPW_ATT ε * |η.μ₀_fn (projX z)- S.μ₀_val (projX z)|+ K_AIPW_ATT ε * |projY z- S.e_val (projX z)|Proof (Lean source)
theorem aipw_score_lipschitz_ATT (S : TreatedEstimationSystem P γ) {ε : ℝ} (h_overlap : S.OneSidedOverlap ε) (hη₀_mem : S.η₀ ∈ H_ε S ε) (η : TreatedNuisanceVec γ) (hη : η ∈ H_ε S ε) : ∀ᵐ z ∂S.P_Z, |aipwMomentATTFunctional η z S.θ₀ - aipwMomentATTFunctional S.η₀ z S.θ₀| ≤ K_AIPW_ATT ε * |η.μ₀_fn (projX z) - S.μ₀_val (projX z)| + K_AIPW_ATT ε * |projY z - S.μ₀_val (projX z)| * |η.e_fn (projX z) - S.e_val (projX z)| := by rcases h_overlap with ⟨hε_pos, _hε_half, _hprop⟩ filter_upwards [H_ε_overlap_P_Z S hη, H_ε_overlap_P_Z S hη₀_mem] with z hηz hSz_raw have hSz : S.e_val (projX z) ≤ 1 - ε := by simpa [TreatedEstimationSystem.η₀] using hSz_raw have hbound := aipw_att_real_bound (a := projA z) (ε := ε) (e := S.e_val (projX z)) (ê := η.e_fn (projX z)) (μ := S.μ₀_val (projX z)) (μhat := η.μ₀_fn (projX z)) (y := projY z) (θ := S.θ₀) hε_pos hSz hηz simpa [aipwMomentATTFunctional, aipwMomentATT, η₀, indA, abs_sub_comm, mul_assoc] using hbound
FiniteVar 1 core · 2 supporting Proves finite variance for the ATT AIPW moment under back-door assumptions, one-sided overlap, and square-integrable outcomes. ★ aipw_finite_var_ATT
Proves finite variance for the ATT AIPW moment under back-door assumptions, one-sided overlap, and square-integrable outcomes. The result supplies the L2 input required by the ATT asymptotic-linear and CLT arguments.
Finite variance of the ATT AIPW moment. Under one-sided overlap: the true treatment propensity is bounded above by 1 − ε for some ε ∈ (0, 1/2] almost surely, the one-sided back-door ATT assumptions, and square-integrability of the factual outcome together with square-integrability of the untreated potential outcome Y(0), the ATT AIPW moment evaluated at the truth nuisance is square-integrable under the joint law of the covariates, treatment, and outcome.
Formal statement
Proof (Lean source)
2 supporting declarations (lemmas, instances)
-
ipw_estimated_integrabletheorem — Integrability of an estimated-nuisance ATT IPW correction (over P_Z).hypothesesS :ε :ℝhε :0 < εη :he_lb :∀ᵐ x ∂S.P_X, 0 ≤ η.e_fn xhe_ub :∀ᵐ x ∂S.P_X, η.e_fn x ≤ 1 - εhμ₀_memLp :MemLp η.μ₀_fn 2 S.P_Xh_y2 :Integrable (fun ω => (S.toPOBackdoorSystem.factualY ω) ^ 2) P.μconclusionIntegrable (fun z => (1 - indA z) * (η.e_fn (projX z) / (1 - η.e_fn (projX z))) * (projY z - η.μ₀_fn (projX z))) S.P_ZProof (Lean source)
theorem ipw_estimated_integrable (S : TreatedEstimationSystem P γ) {ε : ℝ} (hε : 0 < ε) (η : TreatedNuisanceVec γ) (he_lb : ∀ᵐ x ∂S.P_X, 0 ≤ η.e_fn x) (he_ub : ∀ᵐ x ∂S.P_X, η.e_fn x ≤ 1 - ε) (hμ₀_memLp : MemLp η.μ₀_fn 2 S.P_X) (h_y2 : Integrable (fun ω => (S.toPOBackdoorSystem.factualY ω) ^ 2) P.μ) : Integrable (fun z => (1 - indA z) * (η.e_fn (projX z) / (1 - η.e_fn (projX z))) * (projY z - η.μ₀_fn (projX z))) S.P_Z := by haveI : IsProbabilityMeasure S.P_Z := by unfold TreatedEstimationSystem.P_Z exact Measure.isProbabilityMeasure_map S.measurable_factualZ.aemeasurable have hX : Measurable (projX : γ × Bool × ℝ → γ) := by unfold projX; fun_prop have hYm : Measurable (projY : γ × Bool × ℝ → ℝ) := by unfold projY; fun_prop have hAm : Measurable (projA : γ × Bool × ℝ → Bool) := by unfold projA; fun_prop have hindA : Measurable (indA : γ × Bool × ℝ → ℝ) := by unfold indA refine Measurable.ite ?_ measurable_const measurable_const exact hAm (MeasurableSet.singleton true) have heX : Measurable (fun z : γ × Bool × ℝ => η.e_fn (projX z)) := η.e_meas.comp hX -- transfer the `P_X`-a.e. propensity bounds to `P_Z`-a.e. along `projX` have hmap : S.P_Z.map (fun z : γ × Bool × ℝ => z.1) = S.P_X := S.P_Z_map_projX_eq_P_X have he_lb_Z : ∀ᵐ z ∂S.P_Z, 0 ≤ η.e_fn (projX z) := by rw [← hmap] at he_lb exact (ae_map_iff hX.aemeasurable (measurableSet_le measurable_const η.e_meas)).mp he_lb have he_ub_Z : ∀ᵐ z ∂S.P_Z, η.e_fn (projX z) ≤ 1 - ε := by rw [← hmap] at he_ub exact (ae_map_iff hX.aemeasurable (measurableSet_le η.e_meas measurable_const)).mp he_ub -- the IPW weight is bounded by `ε⁻¹`, hence in `L^∞` have hw_bound : ∀ᵐ z ∂S.P_Z, ‖(1 - indA z) * (η.e_fn (projX z) / (1 - η.e_fn (projX z)))‖ ≤ ε⁻¹ := by filter_upwards [he_lb_Z, he_ub_Z] with z hlb hub by_cases hAz : projA z = true · have h1 : indA z = 1 := by simp [indA, hAz] rw [h1]; simp only [sub_self, zero_mul, norm_zero]; exact inv_nonneg.mpr hε.le · have h0 : indA z = 0 := by simp [indA, hAz] have hden : ε ≤ 1 - η.e_fn (projX z) := by linarith have hdenpos : 0 < 1 - η.e_fn (projX z) := lt_of_lt_of_le hε hden have hle_inv : (1 - η.e_fn (projX z))⁻¹ ≤ ε⁻¹ := (inv_le_inv₀ hdenpos hε).2 hden have he_le_one : η.e_fn (projX z) ≤ 1 := by linarith have hratio_nonneg : 0 ≤ η.e_fn (projX z) / (1 - η.e_fn (projX z)) := div_nonneg hlb hdenpos.le have hratio_le : η.e_fn (projX z) / (1 - η.e_fn (projX z)) ≤ ε⁻¹ := by rw [div_eq_mul_inv] calc η.e_fn (projX z) * (1 - η.e_fn (projX z))⁻¹ ≤ 1 * ε⁻¹ := mul_le_mul he_le_one hle_inv (inv_nonneg.mpr hdenpos.le) zero_le_one _ = ε⁻¹ := one_mul _ rw [h0] simp only [sub_zero, one_mul, Real.norm_eq_abs, abs_of_nonneg hratio_nonneg] exact hratio_le have hw_Linf : MemLp (fun z => (1 - indA z) * (η.e_fn (projX z) / (1 - η.e_fn (projX z)))) ⊤ S.P_Z := by refine MemLp.of_bound ?_ ε⁻¹ hw_bound exact ((measurable_const.sub hindA).mul (heX.div (measurable_const.sub heX))).aestronglyMeasurable -- the residual `Y − μ₀` is in `L²(P_Z)` have hprojY_L2 : MemLp (projY : γ × Bool × ℝ → ℝ) 2 S.P_Z := by rw [TreatedEstimationSystem.P_Z] refine (memLp_map_measure_iff hYm.aestronglyMeasurable S.measurable_factualZ.aemeasurable).2 ?_ exact (memLp_two_iff_integrable_sq S.toPOBackdoorSystem.measurable_factualY.aestronglyMeasurable).2 h_y2 have hμX_L2 : MemLp (fun z : γ × Bool × ℝ => η.μ₀_fn (projX z)) 2 S.P_Z := by have h1 : MemLp η.μ₀_fn 2 (S.P_Z.map (fun z : γ × Bool × ℝ => z.1)) := by rw [hmap]; exact hμ₀_memLp exact (memLp_map_measure_iff η.μ₀_meas.aestronglyMeasurable hX.aemeasurable).1 h1 have hresid_L2 : MemLp (fun z => projY z - η.μ₀_fn (projX z)) 2 S.P_Z := hprojY_L2.sub hμX_L2 exact (MemLp.mul' (p := ⊤) (q := 2) (r := 2) hresid_L2 hw_Linf).integrable (by norm_num) -
ipw_truth_integrabletheorem — Integrability of the truth-nuisance ATT IPW correction (over P.μ).hypothesesS :ε :ℝh_overlap :S.OneSidedOverlap εhA :S.toPOBackdoorSystem.ATTAssumptionsh_y2 :Integrable (fun ω => (S.toPOBackdoorSystem.factualY ω) ^ 2) P.μh_y0_2 :Integrable (fun ω => (S.toPOBackdoorSystem.YofD false ω) ^ 2) P.μconclusionIntegrable (fun ω => (1 - S.toPOBackdoorSystem.dVar.indicator true ω) * (S.toPOBackdoorSystem.propScore true ω / (1 - S.toPOBackdoorSystem.propScore true ω)) * (S.toPOBackdoorSystem.factualY ω - S.toPOBackdoorSystem.adjustedCE false ω)) P.μProof (Lean source)
theorem ipw_truth_integrable (S : TreatedEstimationSystem P γ) {ε : ℝ} (h_overlap : S.OneSidedOverlap ε) (hA : S.toPOBackdoorSystem.ATTAssumptions) (h_y2 : Integrable (fun ω => (S.toPOBackdoorSystem.factualY ω) ^ 2) P.μ) (h_y0_2 : Integrable (fun ω => (S.toPOBackdoorSystem.YofD false ω) ^ 2) P.μ) : Integrable (fun ω => (1 - S.toPOBackdoorSystem.dVar.indicator true ω) * (S.toPOBackdoorSystem.propScore true ω / (1 - S.toPOBackdoorSystem.propScore true ω)) * (S.toPOBackdoorSystem.factualY ω - S.toPOBackdoorSystem.adjustedCE false ω)) P.μ := by haveI : IsProbabilityMeasure S.P_X := by unfold TreatedEstimationSystem.P_X exact Measure.isProbabilityMeasure_map S.toPOBackdoorSystem.measurable_factualX.aemeasurable -- `μ₀_val ∈ L²(P_X)` from `μ₀_val ∘ factualX =ᵐ μ[Y(0)|σX]` and conditional Jensen have hμ₀_val_memLp : MemLp S.μ₀_val 2 S.P_X := by have hY0_L2 : MemLp (S.toPOBackdoorSystem.YofD false) 2 P.μ := (memLp_two_iff_integrable_sq (S.toPOBackdoorSystem.measurable_YofD false).aestronglyMeasurable).2 h_y0_2 have hcomp_L2 : MemLp (fun ω => S.μ₀_val (S.toPOBackdoorSystem.factualX ω)) 2 P.μ := (hY0_L2.condExp one_le_two).ae_eq (S.μ₀_compat hA) rw [TreatedEstimationSystem.P_X] exact (memLp_map_measure_iff S.μ₀_meas.aestronglyMeasurable S.toPOBackdoorSystem.measurable_factualX.aemeasurable).2 hcomp_L2 -- transfer the `P.μ`-a.e. propensity bounds (via `e_compat`) to `P_X`-a.e. have he_lb_PX : ∀ᵐ x ∂S.P_X, 0 ≤ S.e_val x := by rw [TreatedEstimationSystem.P_X] refine (ae_map_iff S.toPOBackdoorSystem.measurable_factualX.aemeasurable (measurableSet_le measurable_const S.e_meas)).mpr ?_ filter_upwards [S.propScore_true_nonneg_ae, S.e_compat] with ω hov hc rw [← hc]; exact hov have he_ub_PX : ∀ᵐ x ∂S.P_X, S.e_val x ≤ 1 - ε := by rw [TreatedEstimationSystem.P_X] refine (ae_map_iff S.toPOBackdoorSystem.measurable_factualX.aemeasurable (measurableSet_le S.e_meas measurable_const)).mpr ?_ filter_upwards [h_overlap.2.2, S.e_compat] with ω hov hc rw [← hc]; exact hov -- value-space integrability at the truth, then transfer `P_Z → P.μ` have hval := ipw_estimated_integrable S h_overlap.1 S.η₀ he_lb_PX he_ub_PX hμ₀_val_memLp h_y2 have hmeas_g : AEStronglyMeasurable (fun z => (1 - indA z) * (S.η₀.e_fn (projX z) / (1 - S.η₀.e_fn (projX z))) * (projY z - S.η₀.μ₀_fn (projX z))) S.P_Z := hval.aestronglyMeasurable have htransfer := ((integrable_map_measure hmeas_g S.measurable_factualZ.aemeasurable).mp (by rw [← TreatedEstimationSystem.P_Z]; exact hval)) refine htransfer.congr ?_ filter_upwards [S.e_compat, S.μ₀_reg_compat] with ω he hμ have hindA_eq : indA (S.factualZ ω) = S.toPOBackdoorSystem.dVar.indicator true ω := by by_cases hD : S.toPOBackdoorSystem.factualD ω = true · simp [TreatedEstimationSystem.factualZ, indA, projA, hD, S.toPOBackdoorSystem.dVar.indicator_apply_eq_one hD] · simp [TreatedEstimationSystem.factualZ, indA, projA, hD, S.toPOBackdoorSystem.dVar.indicator_apply_eq_zero (x := true) hD] change (1 - indA (S.factualZ ω)) * (S.η₀.e_fn (projX (S.factualZ ω)) / (1 - S.η₀.e_fn (projX (S.factualZ ω)))) * (projY (S.factualZ ω) - S.η₀.μ₀_fn (projX (S.factualZ ω))) = (1 - S.toPOBackdoorSystem.dVar.indicator true ω) * (S.toPOBackdoorSystem.propScore true ω / (1 - S.toPOBackdoorSystem.propScore true ω)) * (S.toPOBackdoorSystem.factualY ω - S.toPOBackdoorSystem.adjustedCE false ω) rw [hindA_eq] simp only [TreatedEstimationSystem.factualZ, projX, projY, TreatedEstimationSystem.η₀, ← he, hμ]
MeanZero 1 core · 2 supporting Proves the population centering facts for the ATT AIPW score. ★ aipw_mean_zero_ATT
Proves the population centering facts for the ATT AIPW score. The measurable
helpers measurable_ψ_ATT and measurable_aipwMomentATT_at_θ₀ support
integration against the observed data law, and the headline theorem
aipw_mean_zero_ATT shows that the truth moment has expectation zero under
P_Z.
The proof combines the PO-level adjusted-ATT identity, the control-arm weighted
residual pull-out lemma, and the constant term π_T * θ₀, giving the centering
input for ATT influence-function and DML results.
Mean zero of the ATT AIPW moment. Under the one-sided back-door ATT assumptions, a strictly positive marginal treatment probability, and integrability of the control-arm inverse-propensity-weighted residual correction (1 − 1{D=1}) · (e(X)/(1 − e(X))) · (Y − μ₀(X)), the ATT AIPW moment evaluated at the truth has mean zero under the joint law of the covariates, treatment, and outcome.
Formal statement
Proof (Lean source)
2 supporting declarations (lemmas, instances)
-
measurable_ψ_ATTlemma — Measurability of the ATT influence function ψ_ATT.Proof (Lean source)
-- Outline: unfold `ψ_ATT`, `aipwMomentATT`, `indA`, `projX`, `projA`, `projY`; -- combine with measurability of `S.μ₀_val`, `S.e_val`, the indicator -- `if · = true then 1 else 0` on `Bool`, and the projections. Same recipe as -- `BackdoorEstimationSystem.measurable_ψ_AIPW`. lemma measurable_ψ_ATT (S : TreatedEstimationSystem P γ) : Measurable S.ψ_ATT := by unfold TreatedEstimationSystem.ψ_ATT exact ((measurable_aipwMomentATTFunctional S.η₀ 0).const_mul (1 / S.π_val)).sub measurable_const -
measurable_aipwMomentATT_at_θ₀lemma — Measurability of aipwMomentATT z η₀ θ₀ as a function of z.Proof (Lean source)
-- Outline: this is `measurable_aipwMomentATTFunctional S.η₀ S.θ₀` after -- unfolding `aipwMomentATTFunctional` and `η₀`. lemma measurable_aipwMomentATT_at_θ₀ (S : TreatedEstimationSystem P γ) : Measurable (fun z => aipwMomentATT z S.μ₀_val S.e_val S.θ₀) := by simpa [aipwMomentATTFunctional, TreatedEstimationSystem.η₀] using measurable_aipwMomentATTFunctional S.η₀ S.θ₀
ScorePullout 3 core · 5 supporting Provides conditioning and reweighting identities for ATT AIPW scores. ★ weighted_residual_false_integral_zero★ indicator_to_propScore_integral
Provides conditioning and reweighting identities for ATT AIPW scores. The lemmas pull treatment indicators and propensity weights through conditional expectations to isolate treated and control contributions.
Value-space IPW weight e(x) / (1 − e(x)) used in the ATT correction.
Definition (Lean source)
Weighted-residual mean-zero identity, control arm (ATT). Under the one-sided back-door ATT assumptions, if g : γ → ℝ is measurable and the product g(X) · 1{D=false} · (Y − μ₀(X)) is integrable, then the integral of the weighted control-arm residual against the observed-data law vanishes: ∫ g(X) · 1{D=false} · (Y − μ₀(X)) dμ = 0.
Formal statement
Proof (Lean source)
Propensity-score pull-out for the treatment indicator (ATT). Fix a treatment label d, under the one-sided back-door ATT assumptions. If f : γ → ℝ is measurable and the product f(X) · 1{D=d} is integrable, then replacing the treatment indicator 1{D=d} by the value-space propensity — e_val when d is true, 1 − e_val when d is false — inside the integral leaves the integral unchanged.
Formal statement
Proof (Lean source)
5 supporting declarations (lemmas, instances)
-
measurable_ipwWeight_falselemma — Measurability of the value-space IPW weight e/(1−e).Proof (Lean source)
lemma measurable_ipwWeight_false (S : TreatedEstimationSystem P γ) : Measurable S.ipwWeight_false := S.e_meas.div (measurable_const.sub S.e_meas) -
propScore_false_aelemma — propScore false =ᵐ 1 − propScore true. The indicator pair sums to one pointwise, conditional expectation is linear and preserves constants.hypothesesS :_hA :S.toPOBackdoorSystem.ATTAssumptionsProof (Lean source)
-- Outline: mirror `BackdoorEstimationSystem.propScore_false_ae` from -- `Estimation/ATE/Score/ScorePullout.lean`. Uses `dVar.indicator_add_indicator_not` -- + `condExp_const` + `condExp_add` + `linarith` on the pointwise sum. lemma propScore_false_ae (S : TreatedEstimationSystem P γ) (_hA : S.toPOBackdoorSystem.ATTAssumptions) : S.toPOBackdoorSystem.propScore false =ᵐ[P.μ] (fun ω => 1 - S.toPOBackdoorSystem.propScore true ω) := by have hindD_integrable : ∀ e : Bool, Integrable (S.toPOBackdoorSystem.dVar.indicator e) P.μ := fun e => S.toPOBackdoorSystem.dVar.integrable_indicator e (measurableSet_singleton e) have hsum_ptwise : (fun ω => S.toPOBackdoorSystem.dVar.indicator true ω + S.toPOBackdoorSystem.dVar.indicator false ω) = (fun _ : P.Ω => (1 : ℝ)) := by funext ω exact S.toPOBackdoorSystem.dVar.indicator_add_indicator_not ω have hsum : P.μ[fun ω => S.toPOBackdoorSystem.dVar.indicator true ω + S.toPOBackdoorSystem.dVar.indicator false ω | S.toPOBackdoorSystem.sigmaX] =ᵐ[P.μ] (fun _ => (1 : ℝ)) := by rw [hsum_ptwise] exact Filter.EventuallyEq.of_eq (MeasureTheory.condExp_const S.toPOBackdoorSystem.sigmaX_le (1 : ℝ)) have hadd : P.μ[fun ω => S.toPOBackdoorSystem.dVar.indicator true ω + S.toPOBackdoorSystem.dVar.indicator false ω | S.toPOBackdoorSystem.sigmaX] =ᵐ[P.μ] P.μ[S.toPOBackdoorSystem.dVar.indicator true | S.toPOBackdoorSystem.sigmaX] + P.μ[S.toPOBackdoorSystem.dVar.indicator false | S.toPOBackdoorSystem.sigmaX] := MeasureTheory.condExp_add (hindD_integrable true) (hindD_integrable false) S.toPOBackdoorSystem.sigmaX filter_upwards [hsum, hadd] with ω h1 h2 have hsum_ω : P.μ[S.toPOBackdoorSystem.dVar.indicator true | S.toPOBackdoorSystem.sigmaX] ω + P.μ[S.toPOBackdoorSystem.dVar.indicator false | S.toPOBackdoorSystem.sigmaX] ω = 1 := by rw [← Pi.add_apply, ← h2, h1] unfold POBackdoorSystem.propScore linarith -
propScore_eq_e_val_aelemma — The treated-arm propensity propScore true factors through factualX via the value-space e_val. Direct restatement of S.e_compat.hypothesesS :_hA :S.toPOBackdoorSystem.ATTAssumptionsconclusionS.toPOBackdoorSystem.propScore true=ᵐ[P.μ] (fun ω => S.e_val (S.toPOBackdoorSystem.factualX ω))Proof (Lean source)
lemma propScore_eq_e_val_ae (S : TreatedEstimationSystem P γ) (_hA : S.toPOBackdoorSystem.ATTAssumptions) : S.toPOBackdoorSystem.propScore true =ᵐ[P.μ] (fun ω => S.e_val (S.toPOBackdoorSystem.factualX ω)) := S.e_compat -
propScore_false_eq_one_minus_e_val_aelemma — Control-arm propensity factors through factualX as 1 − e_val.hypothesesS :hA :S.toPOBackdoorSystem.ATTAssumptionsconclusionS.toPOBackdoorSystem.propScore false=ᵐ[P.μ] (fun ω => 1 - S.e_val (S.toPOBackdoorSystem.factualX ω))Proof (Lean source)
-- Outline: combine `propScore_false_ae` with `S.e_compat`; pointwise rewrite -- `1 − propScore true ω = 1 − e_val (factualX ω)`. lemma propScore_false_eq_one_minus_e_val_ae (S : TreatedEstimationSystem P γ) (hA : S.toPOBackdoorSystem.ATTAssumptions) : S.toPOBackdoorSystem.propScore false =ᵐ[P.μ] (fun ω => 1 - S.e_val (S.toPOBackdoorSystem.factualX ω)) := by filter_upwards [propScore_false_ae S hA, S.e_compat] with ω hf hc simp [hf, hc] -
residual_false_condExp_zerolemma — The σ(X)-conditional expectation of 1_{D=false}·(Y − μ₀(X)) vanishes a.s. The witness Y(false) =ᵐ μ₀_val ∘ factualX comes from μ₀_compat together with consistency on {D = false}.hypothesesS :hA :S.toPOBackdoorSystem.ATTAssumptionsconclusionP.μ[fun ω => S.toPOBackdoorSystem.dVar.indicator false ω * (S.toPOBackdoorSystem.factualY ω - S.μ₀_val (S.toPOBackdoorSystem.factualX ω)) | S.toPOBackdoorSystem.sigmaX]=ᵐ[P.μ] (fun _ => (0 : ℝ))Proof (Lean source)
-- Outline: mirror `cond_exp_residual_zero` (ATE/MeanZero) for `d = false`. -- Use consistency to replace `factualY` by `YofD false` on `{D=false}`, -- factor σ(X)-measurables out of conditional expectation, and apply -- `μ₀_compat`. lemma residual_false_condExp_zero (S : TreatedEstimationSystem P γ) (hA : S.toPOBackdoorSystem.ATTAssumptions) : P.μ[fun ω => S.toPOBackdoorSystem.dVar.indicator false ω * (S.toPOBackdoorSystem.factualY ω - S.μ₀_val (S.toPOBackdoorSystem.factualX ω)) | S.toPOBackdoorSystem.sigmaX] =ᵐ[P.μ] (fun _ => (0 : ℝ)) := by have hY_int : Integrable S.toPOBackdoorSystem.factualY P.μ := S.toPOBackdoorSystem.integrable_factualY_of_consistency hA.consistency hA.integrable_Y1 hA.integrable_Y0 have hYind_int : Integrable (fun ω => S.toPOBackdoorSystem.factualY ω * S.toPOBackdoorSystem.dVar.indicator false ω) P.μ := S.toPOBackdoorSystem.dVar.integrable_mul_indicator false (measurableSet_singleton false) hY_int have hμ₀x_int : Integrable (fun ω => S.μ₀_val (S.toPOBackdoorSystem.factualX ω)) P.μ := by have hcate_int : Integrable (S.toPOBackdoorSystem.CATE false) P.μ := by unfold POBackdoorSystem.CATE exact MeasureTheory.integrable_condExp exact hcate_int.congr (S.μ₀_compat hA) have hμ₀x_meas : Measurable (fun ω => S.μ₀_val (S.toPOBackdoorSystem.factualX ω)) := S.μ₀_meas.comp S.toPOBackdoorSystem.measurable_factualX have hμ₀ind_int : Integrable (fun ω => S.μ₀_val (S.toPOBackdoorSystem.factualX ω) * S.toPOBackdoorSystem.dVar.indicator false ω) P.μ := S.toPOBackdoorSystem.dVar.integrable_mul_indicator false (measurableSet_singleton false) hμ₀x_int have hres_eq : (fun ω => S.toPOBackdoorSystem.dVar.indicator false ω * (S.toPOBackdoorSystem.factualY ω - S.μ₀_val (S.toPOBackdoorSystem.factualX ω))) = (fun ω => S.toPOBackdoorSystem.factualY ω * S.toPOBackdoorSystem.dVar.indicator false ω - S.μ₀_val (S.toPOBackdoorSystem.factualX ω) * S.toPOBackdoorSystem.dVar.indicator false ω) := by funext ω ring have hsub : P.μ[fun ω => S.toPOBackdoorSystem.factualY ω * S.toPOBackdoorSystem.dVar.indicator false ω - S.μ₀_val (S.toPOBackdoorSystem.factualX ω) * S.toPOBackdoorSystem.dVar.indicator false ω | S.toPOBackdoorSystem.sigmaX] =ᵐ[P.μ] P.μ[fun ω => S.toPOBackdoorSystem.factualY ω * S.toPOBackdoorSystem.dVar.indicator false ω | S.toPOBackdoorSystem.sigmaX] - P.μ[fun ω => S.μ₀_val (S.toPOBackdoorSystem.factualX ω) * S.toPOBackdoorSystem.dVar.indicator false ω | S.toPOBackdoorSystem.sigmaX] := MeasureTheory.condExp_sub hYind_int hμ₀ind_int S.toPOBackdoorSystem.sigmaX have hYce : P.μ[fun ω => S.toPOBackdoorSystem.factualY ω * S.toPOBackdoorSystem.dVar.indicator false ω | S.toPOBackdoorSystem.sigmaX] =ᵐ[P.μ] S.toPOBackdoorSystem.propScore false * S.toPOBackdoorSystem.CATE false := by have hcate := S.control_cate_backdoor hA filter_upwards [hcate, propScore_false_ne_zero S hA] with ω hcat hneω unfold POBackdoorSystem.adjustedCE at hcat rw [Pi.mul_apply, hcat] field_simp [hneω] have hμ₀x_sm : StronglyMeasurable[S.toPOBackdoorSystem.sigmaX] (fun ω => S.μ₀_val (S.toPOBackdoorSystem.factualX ω)) := by change StronglyMeasurable[ comap S.toPOBackdoorSystem.factualX inferInstance] (fun ω => S.μ₀_val (S.toPOBackdoorSystem.factualX ω)) exact (S.μ₀_meas.comp (comap_measurable S.toPOBackdoorSystem.factualX)).stronglyMeasurable have hind_int : Integrable (S.toPOBackdoorSystem.dVar.indicator false) P.μ := S.toPOBackdoorSystem.dVar.integrable_indicator false (measurableSet_singleton false) have hμce : P.μ[fun ω => S.μ₀_val (S.toPOBackdoorSystem.factualX ω) * S.toPOBackdoorSystem.dVar.indicator false ω | S.toPOBackdoorSystem.sigmaX] =ᵐ[P.μ] (fun ω => S.μ₀_val (S.toPOBackdoorSystem.factualX ω)) * S.toPOBackdoorSystem.propScore false := by have hpull := MeasureTheory.condExp_mul_of_stronglyMeasurable_left (μ := P.μ) (m := S.toPOBackdoorSystem.sigmaX) hμ₀x_sm hμ₀ind_int hind_int simp only [POBackdoorSystem.propScore] exact hpull rw [hres_eq] refine hsub.trans ?_ filter_upwards [hYce, hμce, S.μ₀_compat hA] with ω hy hmu hcompat have hcate_comp : S.toPOBackdoorSystem.CATE false ω = S.μ₀_val (S.toPOBackdoorSystem.factualX ω) := by simpa [POBackdoorSystem.CATE] using hcompat rw [Pi.sub_apply, hy, hmu, Pi.mul_apply, Pi.mul_apply, hcate_comp] ring