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 the sample space, factual agreement means that for every variable targeted by the regime, the factual value of that variable for the unit equals the value assigned by the regime.
Definition (Lean source)
For a potential-outcome system, two intervention regimes, and a unit in the sample space, intermediate agreement means that after applying the first regime, every variable targeted by the second regime has the value assigned to it by the second regime.
Definition (Lean source)
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)
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.hypothesesω :P.ΩconclusionP.FactualAgrees Regime.empty ω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)
The joint counterfactual-value map sends each sample point to the tuple of all regimed counterfactual values in the bundle.
Definition (Lean source)
The empty counterfactual bundle has no coordinates.
Definition (Lean source)
Adding a regimed potential-outcome variable to the front of a bundle produces the corresponding extended counterfactual bundle.
Definition (Lean source)
A regimed potential-outcome variable is independent of a counterfactual bundle when its value is independent of the bundle's joint counterfactual value under the chosen measure.
Definition (Lean source)
A regimed potential-outcome variable is conditionally independent of a counterfactual bundle when its value is conditionally independent of the bundle's joint counterfactual value given the sigma-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 — Each coordinate type in a counterfactual bundle carries its declared measurable-space structure. -
measurable_jointValuelemma — The joint counterfactual-value map of a bundle is measurable.conclusionMeasurable B.jointValueProof (Lean source)
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 μ.hypothesesconclusionP.IndepCF a B μ → 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).hypothesesconclusionIndepFun a.value B.jointValue μ → P.IndepCF a B μ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.hypothesesconclusionP.CondIndepCF a B c μ → CondIndepFun (comap c.value inferInstance) (c.measurable_value.comap_le) a.value B.jointValue μProof (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)