Estimation.ATT

AIPW/DML estimation of the average treatment effect on the treated (Hahn-form moment), mirroring the ATE development; the top-level theorem files are pending repair against the current Mathlib pin.

Score 15 core · 22 supporting · 5 submodules AIPW score infrastructure for ATT DML: treated-effect moments, influence functions, finite variance, mean-zero facts, L2 continuity, and arm-specific pull-out lemmas. Remainder 4 core · 0 supporting · 2 submodules Roll-up for the ATT second-order AIPW remainder development.
Setup 9 core · 7 supporting Defines the treated-estimation system for ATT estimation under back-door assumptions. ★ θ₀_eq_ATT

Defines the treated-estimation system for ATT estimation under back-door assumptions. The structure bundles value-space representatives for the control outcome regression, propensity score, treatment probability, and compatibility fields needed by ATT AIPW moments.

The file introduces TreatedEstimationSystem, derives the control-arm counterfactual compatibility lemma μ₀_compat, defines the one-sided overlap predicate OneSidedOverlap, the covariate and data laws P_X and P_Z, the value-space target θ₀, and proves θ₀_eq_ATT. It also constructs a TreatedEstimationSystem from a POBackdoorSystem with overlap and an integrable observed outcome via POBackdoorSystem.toTreatedEstimationSystem.

structure TreatedEstimationSystem reviewed
Causalean.Estimation.ATT

A treated estimation system extends a potential-outcome back-door system with the value-space nuisance representatives needed for ATT AIPW estimation: the control-arm outcome regression μ₀(x) and a propensity score e(x) that is bounded away from 1, together with the control regression's agreement, almost everywhere, with the σ(X)-measurable observable control regression adjustedCE false, composed with the factual covariate and the analogous agreement of the propensity score with the observable propensity propScore.

Definition (Lean source)
P :
γ :
extends :
Value-space control-arm outcome regression `μ₀(x)`.
μ₀_val :
γ → ℝ
μ₀_meas :
Measurable μ₀_val
Value-space propensity `e(x)`.
e_val :
γ → ℝ
e_meas :
One-sided overlap on the value-space propensity.
e_lt_one :
∀ x, e_val x < 1
The control-arm regression `μ₀_val` represents the **observable** adjustment functional `adjustedCE false = E[Y·1_{D=0}|σX] / P[D=0|σX]`, with NO identification assumptions: `μ₀_val (factualX ·) =ᵐ adjustedCE false`. This is the ML/regression target (`adjustedCE false` is the control regression `E[Y|D=0,X]`, see `regression_adjustment`). The counterfactual reading `μ[Y(0)|σX] =ᵐ μ₀_val ∘ factualX` is NOT assumed here — it is the *derived* lemma `μ₀_compat` below, which requires the one-sided ATT backdoor assumptions.
μ₀_reg_compat :
(fun ω => μ₀_val (toPOBackdoorSystem.factualX ω))
=ᵐ[P.μ] toPOBackdoorSystem.adjustedCE false
Propensity factors through `factualX`: `propScore true =ᵐ e_val (factualX ·)`.
e_compat :
toPOBackdoorSystem.propScore true =ᵐ[P.μ] (fun ω => e_val (toPOBackdoorSystem.factualX ω))
Causalean.Estimation.ATT.TreatedEstimationSystem · Causalean/Estimation/ATT/Setup.lean:57 · uses POSystem
def OneSidedOverlap reviewed
Causalean.Estimation.ATT.TreatedEstimationSystem

For a potential-outcome system with a measurable covariate space, a treated estimation system, and a real margin, the one-sided overlap condition holds exactly when 0<ε1/20<ε≤1/2 and the conditional probability of treatment given the covariates is at most 1ε1-ε almost surely under the population measure.

Definition (Lean source)
P :
shared
γ :
Type u_1
shared
ε :
OneSidedOverlap S ε :
Prop
clause 1
0 < ε
clause 2
ε ≤ 1 / 2
clause 3
∀ᵐ ω ∂P.μ, S.toPOBackdoorSystem.propScore true ω ≤ 1 - ε
Causalean.Estimation.ATT.TreatedEstimationSystem.OneSidedOverlap · Causalean/Estimation/ATT/Setup.lean:146 · uses TreatedEstimationSystem , POSystem
def P_X reviewed
Causalean.Estimation.ATT.TreatedEstimationSystem

For a potential-outcome system with a measurable covariate space and a treated estimation system, the covariate distribution is the image of the population measure under the factual covariate.

Definition (Lean source)
P :
shared
γ :
Type u_1
shared
P_X S :
P.μ.map S.toPOBackdoorSystem.factualX
Causalean.Estimation.ATT.TreatedEstimationSystem.P_X · Causalean/Estimation/ATT/Setup.lean:161 · uses TreatedEstimationSystem , POSystem
def factualZ reviewed
Causalean.Estimation.ATT.TreatedEstimationSystem

For a potential-outcome system with a measurable covariate space and a treated estimation system, the factual data-recording map sends every population unit to its observed covariate, observed treatment, and observed outcome.

Definition (Lean source)
P :
shared
γ :
Type u_1
shared
factualZ S :
P.Ω → γ × Bool × ℝ
fun ω
=> (S.toPOBackdoorSystem.factualX ω, S.toPOBackdoorSystem.factualD ω, S.toPOBackdoorSystem.factualY ω)
Causalean.Estimation.ATT.TreatedEstimationSystem.factualZ · Causalean/Estimation/ATT/Setup.lean:174 · uses TreatedEstimationSystem , POSystem
def P_Z reviewed
Causalean.Estimation.ATT.TreatedEstimationSystem

For a potential-outcome system with a measurable covariate space and a treated estimation system, the joint observable-data distribution is the image of the population measure under the factual map recording covariate, treatment, and outcome.

Definition (Lean source)
P :
shared
γ :
Type u_1
shared
P_Z S :
Measure (γ × Bool × ℝ)
P.μ.map S.factualZ
Causalean.Estimation.ATT.TreatedEstimationSystem.P_Z · Causalean/Estimation/ATT/Setup.lean:191 · uses TreatedEstimationSystem , POSystem
def π_val reviewed
Causalean.Estimation.ATT.TreatedEstimationSystem

For a potential-outcome system with a measurable covariate space and a treated estimation system, the marginal treatment probability is the population probability that the factual treatment equals one.

Definition (Lean source)
P :
shared
γ :
Type u_1
shared
π_val S :
S.toPOBackdoorSystem.propTreated
Causalean.Estimation.ATT.TreatedEstimationSystem.π_val · Causalean/Estimation/ATT/Setup.lean:217 · uses TreatedEstimationSystem , POSystem
def θ₀ reviewed
Causalean.Estimation.ATT.TreatedEstimationSystem

For a potential-outcome system with a measurable covariate space and a treated estimation system, the value-space average treatment effect on the treated is the system's adjusted control-regression functional.

Definition (Lean source)
P :
shared
γ :
Type u_1
shared
θ₀ S :
S.toPOBackdoorSystem.adjustedATT
Causalean.Estimation.ATT.TreatedEstimationSystem.θ₀ · Causalean/Estimation/ATT/Setup.lean:226 · uses TreatedEstimationSystem , POSystem
theorem θ₀_eq_ATT reviewed
Causalean.Estimation.ATT.TreatedEstimationSystem

Value-space estimand equals the potential-outcome ATT. Under the one-sided back-door ATT assumptions, the value-space ATT estimand θ₀ (the adjusted control-regression functional) coincides with the average treatment effect on the treated defined on potential outcomes.

Formal statement
P :
shared
γ :
Type u_1
shared
hA :
S.toPOBackdoorSystem.ATTAssumptions
S.θ₀ = S.toPOBackdoorSystem.ATT
Proof (Lean source)
theorem θ₀_eq_ATT (S : TreatedEstimationSystem P γ) (hA : S.toPOBackdoorSystem.ATTAssumptions) : S.θ₀ = S.toPOBackdoorSystem.ATT := by unfold θ₀ exact (S.toPOBackdoorSystem.ATT_eq_adjustedATT hA).symm
Causalean.Estimation.ATT.TreatedEstimationSystem.θ₀_eq_ATT · Causalean/Estimation/ATT/Setup.lean:235 · uses TreatedEstimationSystem , θ₀ , ATT , ATTAssumptions , POSystem
def toTreatedEstimationSystem reviewed
Causalean.PO.POBackdoorSystem

Given a potential-outcome system with a measurable covariate space, a potential-outcome back-door system, the condition that its conditional probability of treatment lies strictly between zero and one almost surely, and an integrable factual outcome, the constructed treated estimation system extends that back-door system with a control-arm outcome regression and a propensity-score representative bounded strictly below one.

Definition (Lean source)
P :
γ :
S :
PO.POBackdoorSystem P γ
hov :
∀ᵐ ω ∂P.μ, 0 < S.propScore true ω ∧ S.propScore true ω < 1
hY :
Integrable S.factualY P.μ
toTreatedEstimationSystem S hov hY :
clause 1
toPOBackdoorSystem := S
clause 2
μ₀_val := fun x => S.regFn (false, x)
clause 3
μ₀_meas := S.measurable_regFn.comp (measurable_const.prodMk measurable_id)
clause 4
e_val := Set.piecewise {x : γ | S.eLift x < 1} S.eLift (fun _ => 1 / 2)
clause 5
e_meas := Measurable.piecewise (measurableSet_lt S.measurable_eLift measurable_const) S.measurable_eLift measurable_const
clause 6
e_lt_one := by intro x by_cases hx : x ∈ {x : γ | S.eLift x < 1} · rw [Set.piecewise_eq_of_mem _ _ _ hx]; exact hx · rw [Set.piecewise_eq_of_notMem _ _ _ hx]; norm_num
clause 7
μ₀_reg_compat := (S.regression_adjustment false hY (S.propScore_ne_of_overlap hov false)).symm
clause 8
e_compat := by filter_upwards [hov] with ω hω have heq : S.propScore true ω
= S.eLift (S.factualX ω) := congrFun S.propScore_true_eq_eLift ω have hmem : S.factualX ω ∈ {x : γ | S.eLift x < 1} := by rw [Set.mem_setOf_eq, ← heq]; exact hω.2 rw [heq, Set.piecewise_eq_of_mem _ _ _ hmem]
7 supporting declarations (lemmas, instances)
  • control_cate_backdoor lemma — Control-arm backdoor CATE under ATT assumptions. The conditional mean of the untreated potential outcome given the covariates equals the observable control regression when consistency, conditional ignorability, integrability, and one-sided control overlap hold. No treated-arm overlap is used.
    P :
    shared
    γ :
    Type u_1
    shared
    hA :
    S.toPOBackdoorSystem.ATTAssumptions
    S.toPOBackdoorSystem.CATE false =ᵐ[P.μ] S.toPOBackdoorSystem.adjustedCE false
    Proof (Lean source)
    lemma control_cate_backdoor (S : TreatedEstimationSystem P γ) (hA : S.toPOBackdoorSystem.ATTAssumptions) : S.toPOBackdoorSystem.CATE false =ᵐ[P.μ] S.toPOBackdoorSystem.adjustedCE false := S.toPOBackdoorSystem.cate_backdoor_of_propScore_ne hA.consistency hA.unconfoundedness hA.integrable_Y1 hA.integrable_Y0 false hA.propScore_false_ne
    Causalean.Estimation.ATT.TreatedEstimationSystem.control_cate_backdoor · Causalean/Estimation/ATT/Setup.lean:110
  • propScore_true_nonneg_ae lemma — Treated propensity nonnegativity. The conditional treatment probability P[D=1 | X] is nonnegative almost surely because it is the conditional expectation of a nonnegative treatment indicator.
    P :
    shared
    γ :
    Type u_1
    shared
    ∀ᵐ ω ∂P.μ, 0 ≤ S.toPOBackdoorSystem.propScore true ω
    Proof (Lean source)
    lemma propScore_true_nonneg_ae (S : TreatedEstimationSystem P γ) : ∀ᵐ ω ∂P.μ, 0 ≤ S.toPOBackdoorSystem.propScore true ω := MeasureTheory.condExp_nonneg (Filter.Eventually.of_forall (fun ω => by rcases S.toPOBackdoorSystem.dVar.indicator_eq_one_or_zero true ω with h | h <;> simp [h]))
    Causalean.Estimation.ATT.TreatedEstimationSystem.propScore_true_nonneg_ae · Causalean/Estimation/ATT/Setup.lean:122
  • μ₀_compat lemma — Counterfactual compatibility (derived, under ATT identification). The control-arm outcome-regression representative equals the conditional mean of the untreated potential outcome given the covariates, almost surely.
    P :
    shared
    γ :
    Type u_1
    shared
    hA :
    S.toPOBackdoorSystem.ATTAssumptions
    P.μ[S.toPOBackdoorSystem.YofD false | S.toPOBackdoorSystem.sigmaX]
    =ᵐ[P.μ] (fun ω => S.μ₀_val (S.toPOBackdoorSystem.factualX ω))
    Proof (Lean source)
    lemma μ₀_compat (S : TreatedEstimationSystem P γ) (hA : S.toPOBackdoorSystem.ATTAssumptions) : P.μ[S.toPOBackdoorSystem.YofD false | S.toPOBackdoorSystem.sigmaX] =ᵐ[P.μ] (fun ω => S.μ₀_val (S.toPOBackdoorSystem.factualX ω)) := (S.control_cate_backdoor hA).trans S.μ₀_reg_compat.symm
    Causalean.Estimation.ATT.TreatedEstimationSystem.μ₀_compat · Causalean/Estimation/ATT/Setup.lean:132
  • P_X_eq lemma — The covariate marginal is the image of the population measure under the factual covariate map.
    P :
    shared
    γ :
    Type u_1
    shared
    S.P_X = P.μ.map S.toPOBackdoorSystem.factualX
    Proof (Lean source)
    @[causal_defs_simps] lemma P_X_eq (S : TreatedEstimationSystem P γ) : S.P_X = P.μ.map S.toPOBackdoorSystem.factualX := rfl
    Causalean.Estimation.ATT.TreatedEstimationSystem.P_X_eq · Causalean/Estimation/ATT/Setup.lean:167
  • measurable_factualZ lemma — Measurability of the data triple.
    P :
    shared
    γ :
    Type u_1
    shared
    Measurable S.factualZ
    Proof (Lean source)
    @[fun_prop] lemma measurable_factualZ (S : TreatedEstimationSystem P γ) : Measurable S.factualZ := (S.toPOBackdoorSystem.measurable_factualX).prodMk ((S.toPOBackdoorSystem.measurable_factualD).prodMk S.toPOBackdoorSystem.measurable_factualY)
    Causalean.Estimation.ATT.TreatedEstimationSystem.measurable_factualZ · Causalean/Estimation/ATT/Setup.lean:183
  • P_Z_eq lemma — The joint data law is the image of the population measure under the map recording the observed covariate, treatment, and outcome.
    P :
    shared
    γ :
    Type u_1
    shared
    S.P_Z = P.μ.map S.factualZ
    Proof (Lean source)
    @[causal_defs_simps] lemma P_Z_eq (S : TreatedEstimationSystem P γ) : S.P_Z = P.μ.map S.factualZ := rfl
    Causalean.Estimation.ATT.TreatedEstimationSystem.P_Z_eq · Causalean/Estimation/ATT/Setup.lean:198
  • P_Z_map_projX_eq_P_X lemma — The covariate marginal P_X is the pushforward of P_Z along the projection (x, a, y) ↦ x. Used to bridge integrals/eLpNorm between P_X (covariates only) and P_Z (full data triple).
    P :
    shared
    γ :
    Type u_1
    shared
    S.P_Z.map (fun z : γ × Bool × ℝ => z.1) = S.P_X
    Proof (Lean source)
    lemma P_Z_map_projX_eq_P_X (S : TreatedEstimationSystem P γ) : S.P_Z.map (fun z : γ × Bool × ℝ => z.1) = S.P_X := by unfold TreatedEstimationSystem.P_Z TreatedEstimationSystem.P_X rw [Measure.map_map (by fun_prop : Measurable (fun z : γ × Bool × ℝ => z.1)) S.measurable_factualZ] rfl
    Causalean.Estimation.ATT.TreatedEstimationSystem.P_Z_map_projX_eq_P_X · Causalean/Estimation/ATT/Setup.lean:205
ATTInstance 2 core · 2 supporting Instantiates the abstract orthogonal-moment DML theorem for the average treatment effect on the treated. ★ att_dml_isAsymLinear

Instantiates the abstract orthogonal-moment DML theorem for the average treatment effect on the treated. It connects the ATT AIPW score, remainder identity, score-continuity bounds, and sample-splitting assumptions to asymptotic linearity.

The main declarations are attGeneralMoment, the MeanZero bridge att_meanZero, the bilinear remainder bridge att_bilinearRem, and the headline abstract asymptotic-linearity theorem att_dml_isAsymLinear. This file is the ATT specialization of the general orthogonal-moment interface; the user-facing estimator wrapper is in Estimation/ATT/DML.lean.

def attGeneralMoment reviewed
Causalean.Estimation.ATT

For a potential-outcomes system with a standard Borel sample space and finite probability measure, a measurable covariate space, a treated estimation system, a real overlap radius, the condition that the system's true nuisance vector belongs to its overlap-bounded candidate set at that radius, and the condition that its marginal treatment probability is strictly positive, the ATT augmented inverse-probability-weighted general moment is the general moment whose score is the ATT AIPW score, whose target nuisance vector and target parameter are the system's true nuisance vector and ATT, whose candidate set is that overlap-bounded set, whose two seminorms are the L2L^2 distances between control-outcome regressions and between propensity scores, and whose Jacobian is the negative marginal treatment probability.

Definition (Lean source)
P :
shared
γ :
Type u_1
shared
ε :
hη₀_mem :
S.η₀ ∈ H_ε S ε
hπ_pos :
0 < S.π_val
attGeneralMoment S hη₀_mem hπ_pos :
GeneralMoment P.Ω P.μ (γ × Bool × ℝ) S.P_Z (TreatedNuisanceVec γ)
clause 1
m := fun η z θ => aipwMomentATTFunctional η z θ
clause 2
η₀ := S.η₀
clause 3
θ₀ := S.θ₀
clause 4
H_ε := H_ε S ε
clause 5
ρ₁ := fun η η'
=> ⟨(eLpNorm (fun x => η.μ₀_fn x - η'.μ₀_fn x) 2 S.P_X).toReal, ENNReal.toReal_nonneg⟩
clause 6
ρ₂ := fun η η'
=> ⟨(eLpNorm (fun x => η.e_fn x - η'.e_fn x) 2 S.P_X).toReal, ENNReal.toReal_nonneg⟩
clause 7
m_meas := fun η θ => TreatedEstimationSystem.measurable_aipwMomentATTFunctional η θ
clause 8
η₀_mem := hη₀_mem
clause 9
J₀ := -S.π_val
clause 10
J₀_ne_zero := by intro h have : S.π_val
= 0 := by linarith [show -S.π_val = 0 from h] linarith
theorem att_dml_isAsymLinear reviewed
Causalean.Estimation.ATT

Headline ATT AIPW DML asymptotic-linearity theorem, derived from the abstract dml_chernozhukov_asymptoticLinear in Estimation/OrthogonalMoments/DMLChernozhukov.lean. Fix an estimated-nuisance sequence η_hat, an i.i.d. sample of the data triple, and a one-shot cross-fitting split of that sample. Under membership of the truth nuisance in the overlap-bounded realization set H_ε, nonnegativity of the true propensity, one-sided overlap ε on the true propensity, the one-sided back-door ATT assumptions, a strictly positive marginal treatment probability, square-integrability of the factual outcome and of the untreated potential outcome Y(0), integrability of the truth-side control-arm IPW correction, and a limiting fold-size fraction c strictly between 0 and 1 with the treated-fold cardinality fraction converging to c: if every candidate draw η_hat n ω lies in the overlap-bounded realization set H_ε, every candidate propensity is nonnegative, each candidate control-regression and propensity error admits an L²(P_X) witness, each candidate IPW correction is integrable, the AIPW moment functional is measurable jointly in the probability-space and data arguments, and on each cross-fitting fold, both singly and jointly, the moment at every candidate nuisance is integrable and square-integrable against the observed data law, the control-regression and propensity error rates are individually o_p(1) in L²(P_X), and their product is o_p(n^{-1/2}), then the Chernozhukov one-step DML estimator built from the ATT AIPW moment, the sample, the split, and the candidate nuisance sequence is asymptotically linear at the true ATT θ₀, with influence function ψ(z) = (1/π_T) · aipwMomentATTFunctional η₀ z θ₀.

Formal statement
P :
shared
γ :
Type u_1
shared
ε :
hη₀_mem :
S.η₀ ∈ H_ε S ε
h_e_lb :
∀ x, 0 ≤ S.e_val x
h_overlap :
S.OneSidedOverlap ε
hA :
S.toPOBackdoorSystem.ATTAssumptions
hπ_pos :
0 < S.π_val
h_y2 :
Integrable (fun ω => (S.toPOBackdoorSystem.factualY ω) ^ 2) P.μ
h_y0_2 :
Integrable (fun ω => (S.toPOBackdoorSystem.YofD false ω) ^ 2) P.μ
hIPW :
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.μ
sample :
IIDSample P.Ω (γ × Bool × ℝ) P.μ S.P_Z
split :
c :
hc_pos :
0 < c
_hc_lt :
c < 1
h_split_rate :
Tendsto (fun n => ((split.foldB n).card : ℝ) / n) atTop (𝓝 c)
η_hat :
ℕ → P.Ω → TreatedNuisanceVec γ
h_in_Hε :
∀ n ω, η_hat n ω ∈ H_ε S ε
h_e_lb_hat :
∀ n ω x, 0 ≤ (η_hat n ω).e_fn x
h_mu_diff_memLp :
∀ n ω, MemLp (fun x => (η_hat n ω).μ₀_fn x - S.μ₀_val x) 2 S.P_X
h_e_diff_memLp :
∀ n ω, MemLp (fun x => (η_hat n ω).e_fn x - S.e_val x) 2 S.P_X
h_IPW_at :
∀ n ω,
Integrable (fun z => (1 - indA z) * ((η_hat n ω).e_fn (projX z) / (1 - (η_hat n ω).e_fn (projX z))) * (projY z - (η_hat n ω).μ₀_fn (projX z))) S.P_Z
h_m_meas :
∀ n,
Measurable (fun (p : P.Ω × (γ × Bool × ℝ)) => aipwMomentATTFunctional (η_hat n p.1) p.2 S.θ₀)
h_m_foldA :
∀ n,
Measurable[comap (fun ω (i : split.foldA n) => sample.Z i ω) inferInstance] (fun ω z => aipwMomentATTFunctional (η_hat n ω) z S.θ₀)
h_m_foldA_uncurry :
∀ n,
Measurable[(comap (fun ω (i : split.foldA n) => sample.Z i ω) inferInstance).prod (inferInstance : MeasurableSpace (γ × Bool × ℝ))] (fun (p : P.Ω × (γ × Bool × ℝ)) => aipwMomentATTFunctional (η_hat n p.1) p.2 S.θ₀)
h_m_int :
∀ n ω, Integrable (fun z => aipwMomentATTFunctional (η_hat n ω) z S.θ₀) S.P_Z
h_m_sq_int :
∀ n ω, Integrable (fun z => (aipwMomentATTFunctional (η_hat n ω) z S.θ₀) ^ 2) S.P_Z
h_indiv_rate_ρ₁ :
IsLittleOp (fun n ω => (((attGeneralMoment S hη₀_mem hπ_pos).ρ₁ (η_hat n ω) S.η₀ : NNReal) : ℝ)) (fun _ => (1 : ℝ)) P.μ
h_indiv_rate_ρ₂ :
IsLittleOp (fun n ω => (((attGeneralMoment S hη₀_mem hπ_pos).ρ₂ (η_hat n ω) S.η₀ : NNReal) : ℝ)) (fun _ => (1 : ℝ)) P.μ
h_product_rate :
IsLittleOp (fun n ω => (((attGeneralMoment S hη₀_mem hπ_pos).ρ₁ (η_hat n ω) S.η₀ : NNReal) : ℝ) * (((attGeneralMoment S hη₀_mem hπ_pos).ρ₂ (η_hat n ω) S.η₀ : NNReal) : ℝ)) (fun n => (n : ℝ) ^ (-(1 / 2 : ℝ))) P.μ
IsAsymLinear (dmlChernozhukovEstimator (attGeneralMoment S hη₀_mem hπ_pos) sample split η_hat) S.θ₀ (fun z => -(attGeneralMoment S hη₀_mem hπ_pos).J₀_inv * aipwMomentATTFunctional S.η₀ z S.θ₀) sample split.foldB
Proof (Lean source)
theorem att_dml_isAsymLinear (S : TreatedEstimationSystem P γ) {ε : ℝ} (hη₀_mem : S.η₀ ∈ H_ε S ε) (h_e_lb : ∀ x, 0 ≤ S.e_val x) (h_overlap : S.OneSidedOverlap ε) (hA : S.toPOBackdoorSystem.ATTAssumptions) (hπ_pos : 0 < S.π_val) (h_y2 : Integrable (fun ω => (S.toPOBackdoorSystem.factualY ω) ^ 2) P.μ) (h_y0_2 : Integrable (fun ω => (S.toPOBackdoorSystem.YofD false ω) ^ 2) P.μ) (hIPW : 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.μ) (sample : IIDSample P.Ω (γ × Bool × ℝ) P.μ S.P_Z) (split : OneShotSplit sample) {c : ℝ} (hc_pos : 0 < c) (_hc_lt : c < 1) (h_split_rate : Tendsto (fun n => ((split.foldB n).card : ℝ) / n) atTop (𝓝 c)) (η_hat : ℕ → P.Ω → TreatedNuisanceVec γ) (h_in_Hε : ∀ n ω, η_hat n ω ∈ H_ε S ε) (h_e_lb_hat : ∀ n ω x, 0 ≤ (η_hat n ω).e_fn x) (h_mu_diff_memLp : ∀ n ω, MemLp (fun x => (η_hat n ω).μ₀_fn x - S.μ₀_val x) 2 S.P_X) (h_e_diff_memLp : ∀ n ω, MemLp (fun x => (η_hat n ω).e_fn x - S.e_val x) 2 S.P_X) (h_IPW_at : ∀ n ω, Integrable (fun z => (1 - indA z) * ((η_hat n ω).e_fn (projX z) / (1 - (η_hat n ω).e_fn (projX z))) * (projY z - (η_hat n ω).μ₀_fn (projX z))) S.P_Z) (h_m_meas : ∀ n, Measurable (fun (p : P.Ω × (γ × Bool × ℝ)) => aipwMomentATTFunctional (η_hat n p.1) p.2 S.θ₀)) (h_m_foldA : ∀ n, Measurable[comap (fun ω (i : split.foldA n) => sample.Z i ω) inferInstance] (fun ω z => aipwMomentATTFunctional (η_hat n ω) z S.θ₀)) (h_m_foldA_uncurry : ∀ n, Measurable[(comap (fun ω (i : split.foldA n) => sample.Z i ω) inferInstance).prod (inferInstance : MeasurableSpace (γ × Bool × ℝ))] (fun (p : P.Ω × (γ × Bool × ℝ)) => aipwMomentATTFunctional (η_hat n p.1) p.2 S.θ₀)) (h_m_int : ∀ n ω, Integrable (fun z => aipwMomentATTFunctional (η_hat n ω) z S.θ₀) S.P_Z) (h_m_sq_int : ∀ n ω, Integrable (fun z => (aipwMomentATTFunctional (η_hat n ω) z S.θ₀) ^ 2) S.P_Z) (h_indiv_rate_ρ₁ : IsLittleOp (fun n ω => (((attGeneralMoment S hη₀_mem hπ_pos).ρ₁ (η_hat n ω) S.η₀ : NNReal) : ℝ)) (fun _ => (1 : ℝ)) P.μ) (h_indiv_rate_ρ₂ : IsLittleOp (fun n ω => (((attGeneralMoment S hη₀_mem hπ_pos).ρ₂ (η_hat n ω) S.η₀ : NNReal) : ℝ)) (fun _ => (1 : ℝ)) P.μ) (h_product_rate : IsLittleOp (fun n ω => (((attGeneralMoment S hη₀_mem hπ_pos).ρ₁ (η_hat n ω) S.η₀ : NNReal) : ℝ) * (((attGeneralMoment S hη₀_mem hπ_pos).ρ₂ (η_hat n ω) S.η₀ : NNReal) : ℝ)) (fun n => (n : ℝ) ^ (-(1 / 2 : ℝ))) P.μ) : IsAsymLinear (dmlChernozhukovEstimator (attGeneralMoment S hη₀_mem hπ_pos) sample split η_hat) S.θ₀ (fun z => -(attGeneralMoment S hη₀_mem hπ_pos).J₀_inv * aipwMomentATTFunctional S.η₀ z S.θ₀) sample split.foldB := by have hMZ := att_meanZero S hη₀_mem h_overlap hA hπ_pos h_y2 h_y0_2 hIPW have hFV : Integrable (fun z => ((attGeneralMoment S hη₀_mem hπ_pos).m (attGeneralMoment S hη₀_mem hπ_pos).η₀ z (attGeneralMoment S hη₀_mem hπ_pos).θ₀) ^ 2) S.P_Z := by simpa [attGeneralMoment, ψ_ATT, η₀, aipwMomentATTFunctional] using aipw_finite_var_ATT S h_overlap hA h_y2 h_y0_2 have hBR_at : ∀ n ω, |∫ z, (attGeneralMoment S hη₀_mem hπ_pos).m (η_hat n ω) z (attGeneralMoment S hη₀_mem hπ_pos).θ₀ ∂S.P_Z| ≤ aipw_rem_const_ATT ε * (((attGeneralMoment S hη₀_mem hπ_pos).ρ₁ (η_hat n ω) (attGeneralMoment S hη₀_mem hπ_pos).η₀ : NNReal) : ℝ) * (((attGeneralMoment S hη₀_mem hπ_pos).ρ₂ (η_hat n ω) (attGeneralMoment S hη₀_mem hπ_pos).η₀ : NNReal) : ℝ) := by intro n ω have h := aipw_remainder_bound_ATT S h_overlap hA hπ_pos h_y2 h_y0_2 (η_hat n ω) (h_in_Hε n ω) (h_mu_diff_memLp n ω) (h_e_diff_memLp n ω) (h_IPW_at n ω) change |∫ z, aipwMomentATTFunctional (η_hat n ω) z S.θ₀ ∂(S.P_Z)| ≤ aipw_rem_const_ATT ε * (eLpNorm (fun x => (η_hat n ω).μ₀_fn x - S.μ₀_val x) 2 S.P_X).toReal * (eLpNorm (fun x => (η_hat n ω).e_fn x - S.e_val x) 2 S.P_X).toReal exact h have h_mu_rate : IsLittleOp (fun n ω => (eLpNorm (fun x => (η_hat n ω).μ₀_fn x - S.μ₀_val x) 2 S.P_X).toReal) (fun _ => (1 : ℝ)) P.μ := by exact h_indiv_rate_ρ₁ have h_e_rate : IsLittleOp (fun n ω => (eLpNorm (fun x => (η_hat n ω).e_fn x - S.e_val x) 2 S.P_X).toReal) (fun _ => (1 : ℝ)) P.μ := by exact h_indiv_rate_ρ₂ have h_score_diff_rate : IsLittleOp (fun n ω => (eLpNorm (fun z => (attGeneralMoment S hη₀_mem hπ_pos).m (η_hat n ω) z (attGeneralMoment S hη₀_mem hπ_pos).θ₀ - (attGeneralMoment S hη₀_mem hπ_pos).m (attGeneralMoment S hη₀_mem hπ_pos).η₀ z (attGeneralMoment S hη₀_mem hπ_pos).θ₀) 2 S.P_Z).toReal) (fun _ => (1 : ℝ)) P.μ := by simpa [attGeneralMoment] using aipw_score_diff_isLittleOp_one_ATT S h_overlap hη₀_mem h_e_lb hA h_y2 h_y0_2 η_hat h_in_Hε h_e_lb_hat h_mu_diff_memLp h_e_diff_memLp h_mu_rate h_e_rate simpa [attGeneralMoment] using (dml_chernozhukov_asymptoticLinear (attGeneralMoment S hη₀_mem hπ_pos) hMZ hFV sample split hc_pos h_split_rate η_hat (Crem := aipw_rem_const_ATT ε) hBR_at h_m_meas h_m_foldA h_m_foldA_uncurry h_m_int h_m_sq_int h_score_diff_rate h_product_rate)
2 supporting declarations (lemmas, instances)
  • att_meanZero theorem — ATT AIPW satisfies MeanZero. Direct repackaging of aipw_mean_zero_ATT from Estimation/ATT/Score/MeanZero.lean.
    P :
    shared
    γ :
    Type u_1
    shared
    ε :
    hη₀_mem :
    S.η₀ ∈ H_ε S ε
    _h_overlap :
    S.OneSidedOverlap ε
    hA :
    S.toPOBackdoorSystem.ATTAssumptions
    hπ_pos :
    0 < S.π_val
    _h_y2 :
    Integrable (fun ω => (S.toPOBackdoorSystem.factualY ω) ^ 2) P.μ
    _h_y0_2 :
    Integrable (fun ω => (S.toPOBackdoorSystem.YofD false ω) ^ 2) P.μ
    hIPW :
    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.μ
    MeanZero (attGeneralMoment S hη₀_mem hπ_pos)
    Proof (Lean source)
    theorem att_meanZero (S : TreatedEstimationSystem P γ) {ε : ℝ} (hη₀_mem : S.η₀ ∈ H_ε S ε) (_h_overlap : S.OneSidedOverlap ε) (hA : S.toPOBackdoorSystem.ATTAssumptions) (hπ_pos : 0 < S.π_val) (_h_y2 : Integrable (fun ω => (S.toPOBackdoorSystem.factualY ω) ^ 2) P.μ) (_h_y0_2 : Integrable (fun ω => (S.toPOBackdoorSystem.YofD false ω) ^ 2) P.μ) (hIPW : 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.μ) : MeanZero (attGeneralMoment S hη₀_mem hπ_pos) := by unfold MeanZero attGeneralMoment exact aipw_mean_zero_ATT S hA hπ_pos hIPW
    Causalean.Estimation.ATT.att_meanZero · Causalean/Estimation/ATT/ATTInstance.lean:110
  • att_bilinearRem theorem — ATT AIPW satisfies BilinearRemainder with constant aipw_rem_const_ATT ε.
    P :
    shared
    γ :
    Type u_1
    shared
    ε :
    hη₀_mem :
    S.η₀ ∈ H_ε S ε
    h_overlap :
    S.OneSidedOverlap ε
    hA :
    S.toPOBackdoorSystem.ATTAssumptions
    hπ_pos :
    0 < S.π_val
    h_y2 :
    Integrable (fun ω => (S.toPOBackdoorSystem.factualY ω) ^ 2) P.μ
    h_y0_2 :
    Integrable (fun ω => (S.toPOBackdoorSystem.YofD false ω) ^ 2) P.μ
    h_L2 :
    ∀ η ∈ H_ε S ε,
    MemLp (fun x => η.μ₀_fn x - S.μ₀_val x) 2 S.P_X ∧
    MemLp (fun x => η.e_fn x - S.e_val x) 2 S.P_X
    h_IPW :
    ∀ η ∈ H_ε S ε,
    Integrable (fun z => (1 - indA z) * (η.e_fn (projX z) / (1 - η.e_fn (projX z))) * (projY z - η.μ₀_fn (projX z))) S.P_Z
    ∃ C, BilinearRemainder (attGeneralMoment S hη₀_mem hπ_pos) C
    Proof (Lean source)
    theorem att_bilinearRem (S : TreatedEstimationSystem P γ) {ε : ℝ} (hη₀_mem : S.η₀ ∈ H_ε S ε) (h_overlap : S.OneSidedOverlap ε) (hA : S.toPOBackdoorSystem.ATTAssumptions) (hπ_pos : 0 < S.π_val) (h_y2 : Integrable (fun ω => (S.toPOBackdoorSystem.factualY ω) ^ 2) P.μ) (h_y0_2 : Integrable (fun ω => (S.toPOBackdoorSystem.YofD false ω) ^ 2) P.μ) (h_L2 : ∀ η ∈ H_ε S ε, MemLp (fun x => η.μ₀_fn x - S.μ₀_val x) 2 S.P_X ∧ MemLp (fun x => η.e_fn x - S.e_val x) 2 S.P_X) (h_IPW : ∀ η ∈ H_ε S ε, Integrable (fun z => (1 - indA z) * (η.e_fn (projX z) / (1 - η.e_fn (projX z))) * (projY z - η.μ₀_fn (projX z))) S.P_Z) : ∃ C, BilinearRemainder (attGeneralMoment S hη₀_mem hπ_pos) C := by refine ⟨aipw_rem_const_ATT ε, ?_⟩ intro η hη obtain ⟨hΔμ₀, hΔe⟩ := h_L2 η hη have h := aipw_remainder_bound_ATT S h_overlap hA hπ_pos h_y2 h_y0_2 η hη hΔμ₀ hΔe (h_IPW η hη) change |∫ z, aipwMomentATTFunctional η z S.θ₀ ∂(S.P_Z)| ≤ aipw_rem_const_ATT ε * (eLpNorm (fun x => η.μ₀_fn x - S.μ₀_val x) 2 S.P_X).toReal * (eLpNorm (fun x => η.e_fn x - S.e_val x) 2 S.P_X).toReal exact h
    Causalean.Estimation.ATT.att_bilinearRem · Causalean/Estimation/ATT/ATTInstance.lean:130
DML 2 core · 2 supporting This file defines the one-shot sample-split augmented inverse-probability weighted estimator for the back-door average treatment effect on the treated and states its asymptotic linearity theorem. ★ dml_ATT_isAsymLinear

Double Machine Learning for ATT

This file defines the one-shot sample-split augmented inverse-probability weighted estimator for the back-door average treatment effect on the treated and states its asymptotic linearity theorem. The theorem connects the estimator to the ATT AIPW influence function under the one-sided ATT back-door assumption bundle, an additional one-sided upper-overlap bound, second-moment, sample-split, and nuisance-rate conditions. Parallel to Estimation/ATE/DML.lean.

The main declarations are dmlEstimator_ATT, the derived influence-function facts ψ_ATT_integral_zero and ψ_ATT_finite_var, and the production wrapper dml_ATT_isAsymLinear, which transports the abstract att_dml_isAsymLinear result to the population-π ATT estimator.

def dmlEstimator_ATT reviewed
Causalean.Estimation.ATT

For a potential-outcomes system with a standard Borel sample space and finite probability measure, a measurable covariate space, a treated estimation system, an independent and identically distributed sample of observed covariate, treatment, and outcome triples from that system's observed-data distribution, a one-shot split of that sample, a sequence of control-arm outcome-regression estimators, a sequence of propensity-score estimators, and a sample-size index, the one-shot double-machine-learning estimator of the back-door average treatment effect on the treated is the marginal-treatment-probability-normalized mean, over the split's evaluation fold at that index, of the ATT AIPW score evaluated at zero using the supplied nuisance functions at that index.

Definition (Lean source)
P :
shared
γ :
Type u_1
shared
sample :
IIDSample P.Ω (γ × Bool × ℝ) P.μ S.P_Z
split :
μ₀_hat :
ℕ → P.Ω → (γ → ℝ)
e_hat :
ℕ → P.Ω → (γ → ℝ)
n :
dmlEstimator_ATT S sample split μ₀_hat e_hat n :
P.Ω → ℝ
fun ω
=> (1 / S.π_val) * (((split.foldB n).card : ℝ)⁻¹ * ∑ i ∈ split.foldB n, aipwMomentATT (sample.Z i ω) (μ₀_hat n ω) (e_hat n ω) 0)
theorem dml_ATT_isAsymLinear reviewed
Causalean.Estimation.ATT

Asymptotic linearity of the one-shot DML ATTthm:est-dml-att-al. Fix candidate control-regression and propensity estimator sequences μ₀_hat and e_hat, an i.i.d. sample of the data triple, and a one-shot cross-fitting split of that sample. Under the true propensity bounded above by 1 − ε almost everywhere, nonnegativity of the true propensity, one-sided overlap ε on the treated-arm propensity, the one-sided back-door ATT assumptions, a strictly positive marginal treatment probability, square-integrability of the factual outcome and of the untreated potential outcome Y(0), and a limiting fold-size fraction c strictly between 0 and 1 with the treated-fold cardinality fraction converging to c: if the candidate propensity is bounded above by 1 − ε almost everywhere, for every n, ω, the candidate propensity is nonnegative everywhere, the candidate regressions are jointly measurable in the probability-space and covariate arguments, each candidate regression, at every n, ω, is square-integrable against the covariate law, each candidate regression depends only on its own cross-fitting fold, singly and jointly with the covariate, the ATT AIPW moment at every candidate regression pair is integrable and square-integrable against the observed data law, the control-regression and propensity error rates are individually o_p(1) in L²(P_X), and their product is o_p(n^{-1/2}), then the population-π one-shot DML/AIPW ATT estimator is asymptotically linear at the true ATT θ₀, with influence function ψ_ATT, along the sample and the cross-fitting folds.

Formal statement
P :
shared
γ :
Type u_1
shared
ε :
h_e_overlap :
∀ᵐ x ∂S.P_X, S.e_val x ≤ 1 - ε
h_e_lb :
∀ x, 0 ≤ S.e_val x
h_overlap :
S.OneSidedOverlap ε
hA :
S.toPOBackdoorSystem.ATTAssumptions
hπ_pos :
0 < S.π_val
h_y2 :
Integrable (fun ω => (S.toPOBackdoorSystem.factualY ω) ^ 2) P.μ
h_y0_2 :
Integrable (fun ω => (S.toPOBackdoorSystem.YofD false ω) ^ 2) P.μ
sample :
IIDSample P.Ω (γ × Bool × ℝ) P.μ S.P_Z
split :
c :
hc_pos :
0 < c
hc_lt :
c < 1
h_split_rate :
Tendsto (fun n => ((split.foldB n).card : ℝ) / n) atTop (𝓝 c)
μ₀_hat :
ℕ → P.Ω → (γ → ℝ)
e_hat :
ℕ → P.Ω → (γ → ℝ)
h_e_hat_overlap :
∀ n ω, ∀ᵐ x ∂S.P_X, e_hat n ω x ≤ 1 - ε
h_e_hat_lb :
∀ n ω x, 0 ≤ e_hat n ω x
h_μ₀_meas :
∀ n, Measurable (fun (p : P.Ω × γ) => μ₀_hat n p.1 p.2)
h_e_meas :
∀ n, Measurable (fun (p : P.Ω × γ) => e_hat n p.1 p.2)
h_μ₀_memLp :
∀ n ω, MemLp (fun x => μ₀_hat n ω x) 2 S.P_X
h_e_memLp :
∀ n ω, MemLp (fun x => e_hat n ω x) 2 S.P_X
h_μ₀_foldA :
∀ n,
Measurable[comap (fun ω (i : split.foldA n) => sample.Z i ω) inferInstance] (μ₀_hat n)
h_e_foldA :
∀ n,
Measurable[comap (fun ω (i : split.foldA n) => sample.Z i ω) inferInstance] (e_hat n)
h_μ₀_uncurry_foldA :
∀ n,
Measurable[(comap (fun ω (i : split.foldA n) => sample.Z i ω) inferInstance).prod (inferInstance : MeasurableSpace γ)] (fun (p : P.Ω × γ) => μ₀_hat n p.1 p.2)
h_e_uncurry_foldA :
∀ n,
Measurable[(comap (fun ω (i : split.foldA n) => sample.Z i ω) inferInstance).prod (inferInstance : MeasurableSpace γ)] (fun (p : P.Ω × γ) => e_hat n p.1 p.2)
h_m_int :
∀ n ω, Integrable (fun z => aipwMomentATT z (μ₀_hat n ω) (e_hat n ω) S.θ₀) S.P_Z
h_m_sq_int :
∀ n ω, Integrable (fun z => (aipwMomentATT z (μ₀_hat n ω) (e_hat n ω) S.θ₀) ^ 2) S.P_Z
h_mu_rate :
IsLittleOp (fun n ω => (eLpNorm (fun x => μ₀_hat n ω x - S.μ₀_val x) 2 S.P_X).toReal) (fun _ => (1 : ℝ)) P.μ
h_e_rate :
IsLittleOp (fun n ω => (eLpNorm (fun x => e_hat n ω x - S.e_val x) 2 S.P_X).toReal) (fun _ => (1 : ℝ)) P.μ
h_product_rate :
IsLittleOp (fun n ω => (eLpNorm (fun x => μ₀_hat n ω x - S.μ₀_val x) 2 S.P_X).toReal * (eLpNorm (fun x => e_hat n ω x - S.e_val x) 2 S.P_X).toReal) (fun n => (n : ℝ) ^ (-(1 / 2 : ℝ))) P.μ
IsAsymLinear (dmlEstimator_ATT S sample split μ₀_hat e_hat) S.θ₀ S.ψ_ATT sample split.foldB
Proof (Lean source)
theorem dml_ATT_isAsymLinear (S : TreatedEstimationSystem P γ) {ε : ℝ} (h_e_overlap : ∀ᵐ x ∂S.P_X, S.e_val x ≤ 1 - ε) (h_e_lb : ∀ x, 0 ≤ S.e_val x) (h_overlap : S.OneSidedOverlap ε) (hA : S.toPOBackdoorSystem.ATTAssumptions) (hπ_pos : 0 < S.π_val) (h_y2 : Integrable (fun ω => (S.toPOBackdoorSystem.factualY ω) ^ 2) P.μ) (h_y0_2 : Integrable (fun ω => (S.toPOBackdoorSystem.YofD false ω) ^ 2) P.μ) (sample : IIDSample P.Ω (γ × Bool × ℝ) P.μ S.P_Z) (split : OneShotSplit sample) {c : ℝ} (hc_pos : 0 < c) (hc_lt : c < 1) (h_split_rate : Tendsto (fun n => ((split.foldB n).card : ℝ) / n) atTop (𝓝 c)) (μ₀_hat : ℕ → P.Ω → (γ → ℝ)) (e_hat : ℕ → P.Ω → (γ → ℝ)) (h_e_hat_overlap : ∀ n ω, ∀ᵐ x ∂S.P_X, e_hat n ω x ≤ 1 - ε) (h_e_hat_lb : ∀ n ω x, 0 ≤ e_hat n ω x) (h_μ₀_meas : ∀ n, Measurable (fun (p : P.Ω × γ) => μ₀_hat n p.1 p.2)) (h_e_meas : ∀ n, Measurable (fun (p : P.Ω × γ) => e_hat n p.1 p.2)) (h_μ₀_memLp : ∀ n ω, MemLp (fun x => μ₀_hat n ω x) 2 S.P_X) (h_e_memLp : ∀ n ω, MemLp (fun x => e_hat n ω x) 2 S.P_X) (h_μ₀_foldA : ∀ n, Measurable[comap (fun ω (i : split.foldA n) => sample.Z i ω) inferInstance] (μ₀_hat n)) (h_e_foldA : ∀ n, Measurable[comap (fun ω (i : split.foldA n) => sample.Z i ω) inferInstance] (e_hat n)) (h_μ₀_uncurry_foldA : ∀ n, Measurable[(comap (fun ω (i : split.foldA n) => sample.Z i ω) inferInstance).prod (inferInstance : MeasurableSpace γ)] (fun (p : P.Ω × γ) => μ₀_hat n p.1 p.2)) (h_e_uncurry_foldA : ∀ n, Measurable[(comap (fun ω (i : split.foldA n) => sample.Z i ω) inferInstance).prod (inferInstance : MeasurableSpace γ)] (fun (p : P.Ω × γ) => e_hat n p.1 p.2)) (h_m_int : ∀ n ω, Integrable (fun z => aipwMomentATT z (μ₀_hat n ω) (e_hat n ω) S.θ₀) S.P_Z) (h_m_sq_int : ∀ n ω, Integrable (fun z => (aipwMomentATT z (μ₀_hat n ω) (e_hat n ω) S.θ₀) ^ 2) S.P_Z) (h_mu_rate : IsLittleOp (fun n ω => (eLpNorm (fun x => μ₀_hat n ω x - S.μ₀_val x) 2 S.P_X).toReal) (fun _ => (1 : ℝ)) P.μ) (h_e_rate : IsLittleOp (fun n ω => (eLpNorm (fun x => e_hat n ω x - S.e_val x) 2 S.P_X).toReal) (fun _ => (1 : ℝ)) P.μ) (h_product_rate : IsLittleOp (fun n ω => (eLpNorm (fun x => μ₀_hat n ω x - S.μ₀_val x) 2 S.P_X).toReal * (eLpNorm (fun x => e_hat n ω x - S.e_val x) 2 S.P_X).toReal) (fun n => (n : ℝ) ^ (-(1 / 2 : ℝ))) P.μ) : IsAsymLinear (dmlEstimator_ATT S sample split μ₀_hat e_hat) S.θ₀ S.ψ_ATT sample split.foldB := by -- 0. Discharge the truth-nuisance IPW integrability gate from overlap + L². have hIPW := ipw_truth_integrable S h_overlap hA h_y2 h_y0_2 -- 1. Build the abstract `η_hat : ℕ → P.Ω → TreatedNuisanceVec γ`. let η_hat : ℕ → P.Ω → TreatedNuisanceVec γ := fun n ω => { μ₀_fn := μ₀_hat n ω e_fn := e_hat n ω μ₀_meas := (h_μ₀_meas n).comp (Measurable.prodMk measurable_const measurable_id) e_meas := (h_e_meas n).comp (Measurable.prodMk measurable_const measurable_id) } -- `S.P_X` is a probability measure (used by `MemLp.of_bound` for `S.e_val`). haveI : IsProbabilityMeasure S.P_X := by unfold TreatedEstimationSystem.P_X exact Measure.isProbabilityMeasure_map S.toPOBackdoorSystem.measurable_factualX.aemeasurable -- `S.P_Z` is a probability measure (used by score integrability transport). haveI : IsProbabilityMeasure S.P_Z := by unfold TreatedEstimationSystem.P_Z exact Measure.isProbabilityMeasure_map S.measurable_factualZ.aemeasurable -- 2. Per-η̂ L² differences for the abstract remainder bound. 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 hcond_L2 : MemLp (P.μ[S.toPOBackdoorSystem.YofD false | S.toPOBackdoorSystem.sigmaX]) 2 P.μ := hY0_L2.condExp (by norm_num) have hcomp_L2 : MemLp (fun ω => S.μ₀_val (S.toPOBackdoorSystem.factualX ω)) 2 P.μ := hcond_L2.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 have he_val_memLp : MemLp S.e_val 2 S.P_X := by refine MemLp.of_bound S.e_meas.aestronglyMeasurable 1 ?_ filter_upwards [h_e_overlap] with x hx rw [Real.norm_eq_abs] exact abs_le.mpr ⟨by linarith [h_e_lb x], by linarith [hx, h_overlap.1]⟩ have he_val_memLp_top : MemLp S.e_val ⊤ S.P_X := by refine MemLp.of_bound S.e_meas.aestronglyMeasurable 1 ?_ filter_upwards [h_e_overlap] with x hx rw [Real.norm_eq_abs] exact abs_le.mpr ⟨by linarith [h_e_lb x], by linarith [hx, h_overlap.1]⟩ have hη₀_mem : S.η₀ ∈ H_ε S ε := by refine ⟨h_e_overlap, ?_, ?_⟩ · simpa [TreatedEstimationSystem.η₀] using hμ₀_val_memLp · simpa [TreatedEstimationSystem.η₀] using he_val_memLp_top have h_in_Hε : ∀ n ω, η_hat n ω ∈ H_ε S ε := by intro n ω refine ⟨h_e_hat_overlap n ω, ?_, ?_⟩ · simpa [η_hat] using h_μ₀_memLp n ω · refine MemLp.of_bound (η_hat n ω).e_meas.aestronglyMeasurable 1 ?_ filter_upwards [h_e_hat_overlap n ω] with x hx rw [Real.norm_eq_abs] exact abs_le.mpr ⟨by linarith [h_e_hat_lb n ω x], by linarith [hx, h_overlap.1]⟩ have h_mu_diff_memLp : ∀ n ω, MemLp (fun x => (η_hat n ω).μ₀_fn x - S.μ₀_val x) 2 S.P_X := by intro n ω exact (h_μ₀_memLp n ω).sub hμ₀_val_memLp have h_e_diff_memLp : ∀ n ω, MemLp (fun x => (η_hat n ω).e_fn x - S.e_val x) 2 S.P_X := by intro n ω exact (h_e_memLp n ω).sub he_val_memLp -- 3. Translate score measurability to the abstract interface. have h_m_meas : ∀ n, Measurable (fun (p : P.Ω × (γ × Bool × ℝ)) => aipwMomentATTFunctional (η_hat n p.1) p.2 S.θ₀) := by intro n unfold aipwMomentATTFunctional aipwMomentATT unfold indA projX projA projY dsimp [η_hat] have hA : Measurable (fun p : P.Ω × (γ × Bool × ℝ) => p.2.2.1) := measurable_snd.snd.fst have hY : Measurable (fun p : P.Ω × (γ × Bool × ℝ) => p.2.2.2) := measurable_snd.snd.snd have hproj : Measurable (fun p : P.Ω × (γ × Bool × ℝ) => (p.1, p.2.1)) := Measurable.prodMk measurable_fst measurable_snd.fst have hμ : Measurable (fun p : P.Ω × (γ × Bool × ℝ) => μ₀_hat n p.1 p.2.1) := (h_μ₀_meas n).comp hproj have he : Measurable (fun p : P.Ω × (γ × Bool × ℝ) => e_hat n p.1 p.2.1) := (h_e_meas n).comp hproj have hindA : Measurable (fun p : P.Ω × (γ × Bool × ℝ) => if p.2.2.1 = true then (1 : ℝ) else 0) := by refine Measurable.ite ?_ measurable_const measurable_const exact hA (MeasurableSet.singleton true) have hOne : Measurable (fun _ : P.Ω × (γ × Bool × ℝ) => (1 : ℝ)) := measurable_const have hθ : Measurable (fun _ : P.Ω × (γ × Bool × ℝ) => S.θ₀) := measurable_const simpa [mul_assoc] using (((hindA.fun_mul (hY.fun_sub hμ)).fun_sub ((hOne.fun_sub hindA).fun_mul ((he.fun_div (hOne.fun_sub he)).fun_mul (hY.fun_sub hμ)))).fun_sub (hindA.fun_mul hθ)) have h_m_foldA : ∀ n, Measurable[comap (fun ω (i : split.foldA n) => sample.Z i ω) inferInstance] (fun ω z => aipwMomentATTFunctional (η_hat n ω) z S.θ₀) := by intro n unfold aipwMomentATTFunctional aipwMomentATT unfold indA projX projA projY dsimp [η_hat] fun_prop have h_m_foldA_uncurry : ∀ n, Measurable[(comap (fun ω (i : split.foldA n) => sample.Z i ω) inferInstance).prod (inferInstance : MeasurableSpace (γ × Bool × ℝ))] (fun (p : P.Ω × (γ × Bool × ℝ)) => aipwMomentATTFunctional (η_hat n p.1) p.2 S.θ₀) := by intro n change Measurable[(comap (fun ω (i : split.foldA n) => sample.Z i ω) inferInstance).prod (inferInstance : MeasurableSpace (γ × Bool × ℝ))] -- … truncated; follow the source link for the rest …
2 supporting declarations (lemmas, instances)
  • ψ_ATT_integral_zero theorem — Mean zero of the centered population-π ATT influence function ψ_ATT.
    P :
    shared
    γ :
    Type u_1
    shared
    ε :
    h_overlap :
    S.OneSidedOverlap ε
    hA :
    S.toPOBackdoorSystem.ATTAssumptions
    hπ_pos :
    0 < S.π_val
    h_y2 :
    Integrable (fun ω => (S.toPOBackdoorSystem.factualY ω) ^ 2) P.μ
    h_y0_2 :
    Integrable (fun ω => (S.toPOBackdoorSystem.YofD false ω) ^ 2) P.μ
    hIPW :
    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.μ
    ∫ z, S.ψ_ATT z ∂(S.P_Z) = 0
    Proof (Lean source)
    theorem ψ_ATT_integral_zero (S : TreatedEstimationSystem P γ) {ε : ℝ} (h_overlap : S.OneSidedOverlap ε) (hA : S.toPOBackdoorSystem.ATTAssumptions) (hπ_pos : 0 < S.π_val) (h_y2 : Integrable (fun ω => (S.toPOBackdoorSystem.factualY ω) ^ 2) P.μ) (h_y0_2 : Integrable (fun ω => (S.toPOBackdoorSystem.YofD false ω) ^ 2) P.μ) (hIPW : 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.μ) : ∫ z, S.ψ_ATT z ∂(S.P_Z) = 0 := by haveI : IsProbabilityMeasure S.P_Z := by unfold TreatedEstimationSystem.P_Z exact Measure.isProbabilityMeasure_map S.measurable_factualZ.aemeasurable have hπ_ne : S.π_val ≠ 0 := ne_of_gt hπ_pos have hmz : ∫ z, aipwMomentATT z S.μ₀_val S.e_val S.θ₀ ∂S.P_Z = 0 := aipw_mean_zero_ATT S hA hπ_pos hIPW have hm_meas : Measurable (fun z => aipwMomentATT z S.μ₀_val S.e_val S.θ₀) := measurable_aipwMomentATT_at_θ₀ S have hm_int : Integrable (fun z => aipwMomentATT z S.μ₀_val S.e_val S.θ₀) S.P_Z := ((memLp_two_iff_integrable_sq hm_meas.aestronglyMeasurable).2 (aipw_finite_var_ATT S h_overlap hA h_y2 h_y0_2)).integrable (by norm_num) have hindA_meas : Measurable (fun z : γ × Bool × ℝ => indA z) := by unfold indA projA refine Measurable.ite ?_ measurable_const measurable_const exact measurable_snd.fst (MeasurableSet.singleton true) have hindA_memLp : MemLp (fun z : γ × Bool × ℝ => indA z) 2 S.P_Z := by refine MemLp.of_bound hindA_meas.aestronglyMeasurable (1 : ℝ) ?_ filter_upwards with z rcases hb : z.2.1 with _ | _ <;> simp [indA, projA, hb] have hindA_int : Integrable (fun z : γ × Bool × ℝ => indA z) S.P_Z := hindA_memLp.integrable (by norm_num) have hindA_integral : ∫ z, indA z ∂S.P_Z = S.π_val := by rw [TreatedEstimationSystem.P_Z, integral_map S.measurable_factualZ.aemeasurable hindA_meas.aestronglyMeasurable] have hpt : (fun ω => indA (S.factualZ ω)) = (fun ω => S.toPOBackdoorSystem.dVar.indicator true ω) := by funext ω by_cases hD : S.toPOBackdoorSystem.factualD ω = true · have hInd : S.toPOBackdoorSystem.dVar.indicator true ω = 1 := S.toPOBackdoorSystem.dVar.indicator_apply_eq_one hD simp [TreatedEstimationSystem.factualZ, indA, projA, hD, hInd] · have hInd : S.toPOBackdoorSystem.dVar.indicator true ω = 0 := S.toPOBackdoorSystem.dVar.indicator_apply_eq_zero (x := true) hD simp [TreatedEstimationSystem.factualZ, indA, projA, hD, hInd] rw [hpt] rfl have hsplit : ∀ z, aipwMomentATT z S.μ₀_val S.e_val 0 = aipwMomentATT z S.μ₀_val S.e_val S.θ₀ + indA z * S.θ₀ := by intro z; unfold aipwMomentATT; ring have hm0_int : Integrable (fun z => aipwMomentATT z S.μ₀_val S.e_val 0) S.P_Z := by refine (hm_int.add (hindA_int.mul_const S.θ₀)).congr ?_ filter_upwards with z simp only [Pi.add_apply] rw [hsplit z] have hm0_integral : ∫ z, aipwMomentATT z S.μ₀_val S.e_val 0 ∂S.P_Z = S.θ₀ * S.π_val := by rw [integral_congr_ae (Filter.Eventually.of_forall hsplit)] integral_linearity rw [hmz, zero_add, hindA_integral] ring have hconst : ∫ _z : γ × Bool × ℝ, S.θ₀ ∂S.P_Z = S.θ₀ := by rw [integral_const]; simp unfold TreatedEstimationSystem.ψ_ATT integral_linearity rw [hm0_integral, hconst, one_div, mul_comm S.θ₀ S.π_val, inv_mul_cancel_left₀ hπ_ne, sub_self]
    Causalean.Estimation.ATT.ψ_ATT_integral_zero · Causalean/Estimation/ATT/DML.lean:113
  • ψ_ATT_finite_var theorem — Finite variance of the centered population-π ATT influence function. Integrable ψ_ATT² against P_Z. Derived (not assumed) from aipw_finite_var_ATT (square-integrability of the moment at θ₀) and boundedness of the treatment indicator, via ψ_ATT = (1/π_T)·(m(η₀,·,θ₀) + θ₀·A) − θ₀ ∈ L²(P_Z).
    P :
    shared
    γ :
    Type u_1
    shared
    ε :
    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 z => (S.ψ_ATT z) ^ 2) S.P_Z
    Proof (Lean source)
    theorem ψ_ATT_finite_var (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 z => (S.ψ_ATT z) ^ 2) S.P_Z := by haveI : IsProbabilityMeasure S.P_Z := by unfold TreatedEstimationSystem.P_Z exact Measure.isProbabilityMeasure_map S.measurable_factualZ.aemeasurable have hm_meas : Measurable (fun z => aipwMomentATT z S.μ₀_val S.e_val S.θ₀) := measurable_aipwMomentATT_at_θ₀ S have hm_L2 : MemLp (fun z => aipwMomentATT z S.μ₀_val S.e_val S.θ₀) 2 S.P_Z := (memLp_two_iff_integrable_sq hm_meas.aestronglyMeasurable).2 (aipw_finite_var_ATT S h_overlap hA h_y2 h_y0_2) have hindA_meas : Measurable (fun z : γ × Bool × ℝ => indA z) := by unfold indA projA refine Measurable.ite ?_ measurable_const measurable_const exact measurable_snd.fst (MeasurableSet.singleton true) have hindA_L2 : MemLp (fun z : γ × Bool × ℝ => indA z) 2 S.P_Z := by refine MemLp.of_bound hindA_meas.aestronglyMeasurable (1 : ℝ) ?_ filter_upwards with z rcases hb : z.2.1 with _ | _ <;> simp [indA, projA, hb] have hm0_L2 : MemLp (fun z => aipwMomentATT z S.μ₀_val S.e_val 0) 2 S.P_Z := (hm_L2.add (hindA_L2.const_smul S.θ₀)).ae_eq (Filter.Eventually.of_forall fun z => by simp only [Pi.add_apply, Pi.smul_apply, smul_eq_mul] unfold aipwMomentATT; ring) have hψeq : (fun z => S.ψ_ATT z) = (fun z => (1 / S.π_val) • aipwMomentATT z S.μ₀_val S.e_val 0 - S.θ₀) := by funext z; unfold TreatedEstimationSystem.ψ_ATT; simp only [smul_eq_mul] have hψ_L2 : MemLp (fun z => S.ψ_ATT z) 2 S.P_Z := by rw [hψeq] exact (hm0_L2.const_smul (1 / S.π_val)).sub (memLp_const S.θ₀) exact hψ_L2.integrable_sq
    Causalean.Estimation.ATT.ψ_ATT_finite_var · Causalean/Estimation/ATT/DML.lean:191