PO.Assumptions
The standard identification assumptions as predicates on a potential-outcome system: unconfoundedness, overlap, and their conditional refinements.
Consistency 3 core · 0 supporting This file defines the pathwise agreement predicates and the two-clause consistency assumption for potential-outcome systems. ★ Consistency
Consistency for Potential Outcomes
This file defines the pathwise agreement predicates and the two-clause consistency
assumption for potential-outcome systems. These notions connect factual agreement,
sequential interventions, and equality of potential outcomes outside the intervened
coordinates. The public API consists of POSystem.FactualAgrees,
POSystem.IntermediateAgrees, and the POSystem.Consistency structure with its
factual-consistency and composition-consistency fields.
For a potential-outcome system, an intervention regime, and a unit in its sample space, factual agreement means that every variable targeted by the regime has, for that unit under the factual regime, exactly the value assigned by the intervention.
For a potential-outcome system, a first intervention regime, a second intervention regime, and a unit in its sample space, intermediate agreement means that, after the first intervention, every variable targeted by the second has exactly the value assigned by the second.
A potential-outcome system is consistent when two conditions hold. First, for every intervention regime and every finite set of variables disjoint from the regime's target, a unit's potential outcomes for that set under the regime equal its factual potential outcomes whenever it factually agrees with the regime. Second, for every pair of disjoint regimes and every finite set of variables disjoint from the union of their targets, a unit's potential outcomes for that set under the composed regime equal its potential outcomes under the first regime alone, whenever it agrees with the second regime after the first has been applied.
Definition (Lean source)
Factual consistency.
ArmSupportTransfer 2 core · 0 supporting Within a positive-mass cell, conditioning is done by normalizing the restricted measure (see Causalean.Mathlib.Probability.normalizedRestrict). ★ ae_abs_potential_le_of_indep_positive_arm
Transferring an outcome bound from an observed arm to a potential outcome
Within a positive-mass cell, conditioning is done by normalizing the restricted measure (see
Causalean.Mathlib.Probability.normalizedRestrict). This module provides the real-valued
indicator of a treatment arm and the support-transfer step used in potential-outcome arguments:
if a potential outcome is independent of the arm indicator under the cell law (ignorability),
agrees with the observed outcome on that arm (consistency), and the arm has positive probability
(positivity), then an almost-sure absolute bound on the observed outcome in the arm carries over
to the potential outcome throughout the cell.
Given a sample space and an event in it, the real-valued arm indicator equals one for sample points in the event and zero for all other sample points.
Definition (Lean source)
Within a measurable positive-mass cell, for a measurable arm event, if the potential outcome is measurable, the arm has positive normalized cell probability, the potential outcome is independent of the arm indicator under the normalized cell law, the observed and potential outcomes agree almost surely on that arm, and the observed outcome obeys an absolute bound there, then the potential outcome obeys the same absolute bound almost surely throughout the cell.
Formal statement
Proof (Lean source)
ConsistencyLemmas 1 core · 8 supporting This file provides reusable pointwise consistency combinators for empty, singleton, and disjoint-union regimes, together with generic event-level rewrites for POVar counterfactual values. ★ cf_eq_factual_of_factualAgrees
Pointwise consistency lemmas for potential-outcome variables
This file provides reusable pointwise consistency combinators for empty,
singleton, and disjoint-union regimes, together with generic event-level rewrites
for POVar counterfactual values. These lemmas factor the consistency arguments
used by LATE, frontdoor, dynamic regimes, and other multi-target PO
identification files. Important results include POSystem.factualAgrees_empty,
POSystem.factualAgrees_sqcup, POVar.factualAgrees_single,
POVar.cf_eq_factual_on_event, and the integrated indicator rewrites
POVar.factual_mul_indicator_eq_cfUnder_mul_indicator and
POVar.factual_mul_indicator_eq_cf_mul_indicator.
Multi-target consistency. Under the consistency (SUTVA) assumption on the potential-outcome system, for a regimed variable a whose index does not lie in the target of a regime r, if the outcome ω factually agrees with the regime r, then the counterfactual value of a under r at ω equals its factual value at ω.
Formal statement
Proof (Lean source)
8 supporting declarations (lemmas, instances)
-
factualAgrees_emptytheorem — FactualAgrees holds vacuously for the empty regime.Proof (Lean source)
theorem factualAgrees_empty (ω : P.Ω) : P.FactualAgrees Regime.empty ω := by intro v hv exact (notMem_empty v hv).elim -
factualAgrees_sqcuptheorem — Combinator: FactualAgrees for a disjoint union reduces to FactualAgrees for each component.hypothesesr₁ r₂ :Regime P.V P.Xh :r₁.Disjoint r₂ω :P.Ωh₁ :P.FactualAgrees r₁ ωh₂ :P.FactualAgrees r₂ ωconclusionP.FactualAgrees (r₁.sqcup r₂ h) ωProof (Lean source)
theorem factualAgrees_sqcup {r₁ r₂ : Regime P.V P.X} (h : r₁.Disjoint r₂) {ω : P.Ω} (h₁ : P.FactualAgrees r₁ ω) (h₂ : P.FactualAgrees r₂ ω) : P.FactualAgrees (r₁.sqcup r₂ h) ω := by intro v hv -- `v ∈ r₁.target ∪ r₂.target`. have hv' : v ∈ r₁.target ∪ r₂.target := by simpa only [Regime.sqcup_target] using hv by_cases hv₁ : v ∈ r₁.target · -- `r₁.sqcup r₂` agrees with `r₁` on `r₁.target`. have hassign : (r₁.sqcup r₂ h).assign v hv = r₁.assign v hv₁ := by exact Regime.sqcup_assign_pos r₁ r₂ h v hv₁ rw [hassign] exact h₁ v hv₁ · -- Must be in `r₂.target`. have hv₂ : v ∈ r₂.target := by rcases Finset.mem_union.mp hv' with h₁ | h₂ · exact (hv₁ h₁).elim · exact h₂ have hassign : (r₁.sqcup r₂ h).assign v hv = r₂.assign v hv₂ := by exact Regime.sqcup_assign_neg r₁ r₂ h v hv₁ hv₂ rw [hassign] exact h₂ v hv₂ -
factualAgrees_singletheorem — Combinator: from a factual equality a.factual ω = x, build FactualAgrees for the singleton regime {a.v ← a.equiv.symm x}.hypothesesconclusionP.FactualAgrees (Regime.single a.v (a.equiv.symm x)) ωProof (Lean source)
theorem factualAgrees_single (a : POVar P α) (x : α) {ω : P.Ω} (h : a.factual ω = x) : P.FactualAgrees (Regime.single a.v (a.equiv.symm x)) ω := by intro v hv -- `v ∈ {a.v}`, so `v = a.v`. have hv_eq : v = a.v := Finset.mem_singleton.mp hv subst hv_eq -- `h : a.equiv (P.eval ∅ ω a.v) = x`; apply `a.equiv.symm`. have hω : a.equiv (P.eval Regime.empty ω a.v) = x := h have := congrArg a.equiv.symm hω simpa [Regime.single] using this -
cf_eq_factual_on_eventtheorem — Under consistency, changing a distinct variable to a value it already has does not change the counterfactual value of the target variable on that event.hypothesesP :α β :hC :P.Consistencya :POVar P αw :POVar P βy :βhvw :a.v ≠ w.vω :P.Ωhω :ω ∈ w.event yconclusiona.cfUnder w y ω = a.factual ωProof (Lean source)
theorem POVar.cf_eq_factual_on_event {P : POSystem} {α β : Type*} [MeasurableSpace α] [MeasurableSpace β] (hC : P.Consistency) (a : POVar P α) (w : POVar P β) (y : β) (hvw : a.v ≠ w.v) {ω : P.Ω} (hω : ω ∈ w.event y) : a.cfUnder w y ω = a.factual ω := by -- The regime: `{w.v ← w.equiv.symm y}`. set r : Regime P.V P.X := Regime.single w.v (w.equiv.symm y) with hr -- Factual agreement: `P.eval ∅ ω v = r.assign v hv` for all `v ∈ r.target`. have hAgrees : P.FactualAgrees r ω := by intro v hv have hvw_eq : v = w.v := Finset.mem_singleton.mp hv subst hvw_eq -- `hω : ω ∈ w.event y`, i.e. `w.factual ω = y`, i.e. -- `w.equiv (P.eval ∅ ω w.v) = y`. have hωeq : w.equiv (P.eval Regime.empty ω w.v) = y := hω -- Apply `w.equiv.symm` and use `symm_apply_apply`. have hsym := congrArg w.equiv.symm hωeq rw [MeasurableEquiv.symm_apply_apply] at hsym show P.eval Regime.empty ω w.v = w.equiv.symm y exact hsym -- Disjointness: `{a.v}` is disjoint from `r.target = {w.v}`. have hdisj : _root_.Disjoint ({a.v} : Finset P.V) r.target := by simp [hr, Regime.single, hvw] -- Apply `hC.factual`. have hPoEq := hC.factual r {a.v} hdisj ω hAgrees have haEq : P.eval r ω a.v = P.eval Regime.empty ω a.v := by simpa [POSystem.poVariable] using congrFun hPoEq ⟨a.v, mem_singleton_self a.v⟩ -- Push through `a.equiv`. change a.equiv (P.eval r ω a.v) = a.equiv (P.eval Regime.empty ω a.v) exact congrArg a.equiv haEq -
factual_eq_cfUnder_self_selectedtheorem — Under consistency, setting a distinct variable to its realized factual value leaves the target variable at its factual value.hypothesesconclusiona.factual ω = a.cfUnder w (w.factual ω) ωProof (Lean source)
theorem POVar.factual_eq_cfUnder_self_selected {P : POSystem} {α β : Type*} [MeasurableSpace α] [MeasurableSpace β] (hC : P.Consistency) (a : POVar P α) (w : POVar P β) (hvw : a.v ≠ w.v) (ω : P.Ω) : a.factual ω = a.cfUnder w (w.factual ω) ω := by -- The regime: `{w.v ← w.equiv.symm (w.factual ω)}`. set r : Regime P.V P.X := Regime.single w.v (w.equiv.symm (w.factual ω)) with hr -- Factual agreement is definitional: `w.equiv.symm (w.equiv x) = x`. have hAgrees : P.FactualAgrees r ω := by intro v hv have hvw_eq : v = w.v := Finset.mem_singleton.mp hv subst hvw_eq simp [hr, POVar.factual, POVar.cf, Regime.single] -- Disjointness. have hdisj : _root_.Disjoint ({a.v} : Finset P.V) r.target := by simp [hr, Regime.single, hvw] -- Apply `hC.factual`. have hPoEq := hC.factual r {a.v} hdisj ω hAgrees have haEq : P.eval r ω a.v = P.eval Regime.empty ω a.v := by simpa [POSystem.poVariable] using congrFun hPoEq ⟨a.v, mem_singleton_self a.v⟩ change a.equiv (P.eval Regime.empty ω a.v) = a.equiv (P.eval r ω a.v) exact (congrArg a.equiv haEq).symm -
factual_mul_indicator_eq_cfUnder_mul_indicatortheorem — Integrated form of consistency: Y · 1_{W=y} = Y(w=y) · 1_{W=y} pointwise, where a plays the role of Y and w the role of the treatment. Used in backdoor-style identification proofs where the factual outcome is replaced by the counterfactual on the event {W = y}.Proof (Lean source)
theorem POVar.factual_mul_indicator_eq_cfUnder_mul_indicator {P : POSystem} {β : Type*} [MeasurableSpace β] (hC : P.Consistency) (a : POVar P ℝ) (w : POVar P β) (y : β) (hvw : a.v ≠ w.v) : (fun ω => a.factual ω * (w.event y).indicator (fun _ => (1:ℝ)) ω) = fun ω => a.cfUnder w y ω * (w.event y).indicator (fun _ => (1:ℝ)) ω := by funext ω by_cases hω : ω ∈ w.event y · have hind : (w.event y).indicator (fun _ => (1:ℝ)) ω = 1 := Set.indicator_of_mem hω _ have hcf : a.cfUnder w y ω = a.factual ω := POVar.cf_eq_factual_on_event hC a w y hvw hω simp [hind, hcf] · have hind : (w.event y).indicator (fun _ => (1:ℝ)) ω = 0 := Set.indicator_of_notMem hω _ simp [hind] -
factual_mul_indicator_eq_cfUnder_mul_indicator_fntheorem — Pointwise-function variant of POVar.factual_mul_indicator_eq_cfUnder_mul_indicator, phrased directly in terms of POVar.indicator (rather than Set.indicator on w.event y).hypothesesconclusion(fun ω => y.factual ω * w.indicator x ω) = fun ω => y.cfUnder w x ω * w.indicator x ωProof (Lean source)
theorem POVar.factual_mul_indicator_eq_cfUnder_mul_indicator_fn {P : POSystem} {β : Type*} [MeasurableSpace β] [MeasurableSingletonClass β] (hC : P.Consistency) (y : POVar P ℝ) (w : POVar P β) (x : β) (h_ne : y.v ≠ w.v) : (fun ω => y.factual ω * w.indicator x ω) = fun ω => y.cfUnder w x ω * w.indicator x ω := by rw [w.indicator_eq_event_indicator x] exact POVar.factual_mul_indicator_eq_cfUnder_mul_indicator hC y w x h_ne -
factual_mul_indicator_eq_cf_mul_indicatortheorem — Multi-target integrated consistency: Y · 1_E = Y(r) · 1_E pointwise, whenever every ω ∈ E factually agrees with r and a.v ∉ r.target.hypothesesP :hC :P.Consistencya :POVar P ℝr :Regime P.V P.Xh_notmem :a.v ∉ r.targetE :Set P.ΩhE :∀ ω ∈ E, P.FactualAgrees r ωconclusion(fun ω => a.factual ω * E.indicator (fun _ => (1:ℝ)) ω)= (fun ω => a.cf r ω * E.indicator (fun _ => (1:ℝ)) ω)Proof (Lean source)
theorem POVar.factual_mul_indicator_eq_cf_mul_indicator {P : POSystem} (hC : P.Consistency) (a : POVar P ℝ) (r : Regime P.V P.X) (h_notmem : a.v ∉ r.target) (E : Set P.Ω) (hE : ∀ ω ∈ E, P.FactualAgrees r ω) : (fun ω => a.factual ω * E.indicator (fun _ => (1:ℝ)) ω) = (fun ω => a.cf r ω * E.indicator (fun _ => (1:ℝ)) ω) := by funext ω by_cases hω : ω ∈ E · have hind : E.indicator (fun _ => (1:ℝ)) ω = 1 := Set.indicator_of_mem hω _ have hcf : a.cf r ω = a.factual ω := POVar.cf_eq_factual_of_factualAgrees hC a r h_notmem ω (hE ω hω) simp [hind, hcf] · have hind : E.indicator (fun _ => (1:ℝ)) ω = 0 := Set.indicator_of_notMem hω _ simp [hind]
IndepCF 7 core · 9 supporting This file packages finite heterogeneous collections of regimed potential-outcome variables and defines independence or conditional independence between a single regimed variable and such a bundle. ★ POCFBundle★ IndepCF★ CondIndepCF★ project
Independence of Counterfactual Bundles
This file packages finite heterogeneous collections of regimed potential-outcome variables and defines independence or conditional independence between a single regimed variable and such a bundle. These forms provide reusable assumptions for identification theorems.
The main structure is POCFBundle, whose jointValue map turns a finite
dependent tuple of regimed potential outcomes into one measurable conditioning
object. POSystem.IndepCF and POSystem.CondIndepCF unfold to IndepFun and
CondIndepFun, and the projection lemmas let downstream files extract
independence for a measurable function or a single coordinate of the bundle.
A finite heterogeneous bundle of n regimed potential-outcome variables indexed by Fin n: each coordinate carries its own value type equipped with a measurable-space structure, and each coordinate is itself a potential-outcome variable paired with the intervention regime under which it is evaluated.
Definition (Lean source)
For a finite bundle of regimed potential-outcome variables, the joint counterfactual-value map assigns to every sample point the tuple whose coordinate is that variable's potential outcome under its associated regime.
Definition (Lean source)
For a potential-outcome system, the empty counterfactual bundle has no coordinates.
Definition (Lean source)
For a regimed potential-outcome variable and a finite counterfactual bundle in the same potential-outcome system, the extended counterfactual bundle places that variable first and retains every original coordinate.
Definition (Lean source)
For a potential-outcome system, a regimed potential-outcome variable, a finite counterfactual bundle, and a measure on the sample space, the counterfactual-independence condition says that the variable's potential outcome is independent of the bundle's joint potential-outcome vector under that measure.
Definition (Lean source)
For a potential-outcome system whose sample space is standard Borel, a regimed potential-outcome variable, a finite counterfactual bundle, a regimed conditioning variable, and a finite measure on the sample space, the conditional counterfactual-independence condition says that the first variable's potential outcome is conditionally independent of the bundle's joint potential-outcome vector given the σ-algebra generated by the conditioning variable.
Definition (Lean source)
Fix a potential-outcome system in which a regimed variable a is conditionally independent of a counterfactual bundle B given a regimed variable c. Then for any measurable function ψ of the bundle's joint value, the value of a remains conditionally independent, given c, of ψ composed with the bundle's joint value.
Formal statement
Proof (Lean source)
9 supporting declarations (lemmas, instances)
-
instMeasurableSpaceTypeinstance — For a potential-outcomes system, a finite bundle of regimed potential-outcome variables in that system, and a coordinate of that bundle, the measurable-space structure on the value space at that coordinate is the structure declared by the bundle.parametersinstancegiven byB.inst i -
measurable_jointValuelemma — The joint counterfactual-value map of a bundle is measurable.Proof (Lean source)
@[fun_prop] lemma measurable_jointValue : Measurable B.jointValue := measurable_pi_lambda _ (fun i => (B.vars i).measurable_value) -
toIndepFunlemma — Bridge: IndepCF is by definition IndepFun a.value B.jointValue μ.Proof (Lean source)
lemma IndepCF.toIndepFun {α : Type*} [MeasurableSpace α] {a : RegimedVar P α} {B : POCFBundle P} {μ : Measure P.Ω} : P.IndepCF a B μ → IndepFun a.value B.jointValue μ := id -
ofIndepFunlemma — Bridge: IndepFun ⇒ IndepCF (reverse direction, also trivial).Proof (Lean source)
lemma IndepCF.ofIndepFun {α : Type*} [MeasurableSpace α] {a : RegimedVar P α} {B : POCFBundle P} {μ : Measure P.Ω} : IndepFun a.value B.jointValue μ → P.IndepCF a B μ := id -
toCondIndepFunlemma — Bridge: CondIndepCF unfolds to CondIndepFun with the comap σ-algebra generated by c.value.hypothesesconclusionProof (Lean source)
lemma CondIndepCF.toCondIndepFun {α γ : Type*} [MeasurableSpace α] [MeasurableSpace γ] [StandardBorelSpace P.Ω] {a : RegimedVar P α} {B : POCFBundle P} {c : RegimedVar P γ} {μ : Measure P.Ω} [IsFiniteMeasure μ] : P.CondIndepCF a B c μ → CondIndepFun (comap c.value inferInstance) (c.measurable_value.comap_le) a.value B.jointValue μ := id -
condIndepCF_congr_condtheorem — Transport CondIndepCF across equality of the conditioning variables' generated σ-algebras.hypothesesα γ γ' :a :RegimedVar P αB :c :RegimedVar P γc' :RegimedVar P γ'μ :Measure P.Ωhcomap :h :P.CondIndepCF a B c μconclusionP.CondIndepCF a B c' μProof (Lean source)
theorem condIndepCF_congr_cond {α γ γ' : Type*} [MeasurableSpace α] [MeasurableSpace γ] [MeasurableSpace γ'] [StandardBorelSpace P.Ω] {a : RegimedVar P α} {B : POCFBundle P} {c : RegimedVar P γ} {c' : RegimedVar P γ'} {μ : Measure P.Ω} [IsFiniteMeasure μ] (hcomap : comap c.value inferInstance = comap c'.value inferInstance) (h : P.CondIndepCF a B c μ) : P.CondIndepCF a B c' μ := by unfold CondIndepCF at h ⊢ convert h using 1 exact hcomap.symm -
projectlemma — Projection: independence of a.value from any measurable function of the bundle's joint value follows from IndepCF.hypothesesconclusionIndepFun a.value (ψ ∘ B.jointValue) μProof (Lean source)
lemma IndepCF.project {α β : Type*} [MeasurableSpace α] [MeasurableSpace β] {a : RegimedVar P α} {B : POCFBundle P} {μ : Measure P.Ω} {ψ : (∀ i, B.type i) → β} (h : P.IndepCF a B μ) (hψ : Measurable ψ) : IndepFun a.value (ψ ∘ B.jointValue) μ := h.toIndepFun.comp measurable_id hψ -
componentlemma — Component projection: independence of a.value from a single coordinate of the bundle follows from IndepCF.hypothesesconclusionIndepFun a.value (fun ω => B.jointValue ω i) μProof (Lean source)
lemma IndepCF.component {α : Type*} [MeasurableSpace α] {a : RegimedVar P α} {B : POCFBundle P} {μ : Measure P.Ω} (h : P.IndepCF a B μ) (i : Fin B.n) : IndepFun a.value (fun ω => B.jointValue ω i) μ := h.project (ψ := fun f => f i) (measurable_pi_apply i) -
componentlemma — Component projection: conditional independence of a.value from a single coordinate of the bundle follows from CondIndepCF.hypothesesα γ :a :RegimedVar P αB :c :RegimedVar P γμ :Measure P.Ωh :P.CondIndepCF a B c μi :Fin B.nconclusionCondIndepFun (comap c.value inferInstance) (c.measurable_value.comap_le) a.value (fun ω => B.jointValue ω i) μProof (Lean source)
lemma CondIndepCF.component {α γ : Type*} [MeasurableSpace α] [MeasurableSpace γ] [StandardBorelSpace P.Ω] {a : RegimedVar P α} {B : POCFBundle P} {c : RegimedVar P γ} {μ : Measure P.Ω} [IsFiniteMeasure μ] (h : P.CondIndepCF a B c μ) (i : Fin B.n) : CondIndepFun (comap c.value inferInstance) (c.measurable_value.comap_le) a.value (fun ω => B.jointValue ω i) μ := h.project (ψ := fun f => f i) (measurable_pi_apply i)