SCM.ID.Graphical­Thms.Do­GFormula­Tian

The density of the law of the ancestors of the outcome after an intervention do(X) factorizes as a product of one factor per c-component (district) of the post-intervention ancestral graph, each factor being the product

Prefix 4 core · 7 supporting This file develops the measurable extension maps, reference-measure transport, and prefix-density product identities used to peel off nodes in graph order. ★ tianPrefixDensityProductInPrefix_card_eq_tianDensityProduct

Prefix infrastructure for Tian density products

This file develops the measurable extension maps, reference-measure transport, and prefix-density product identities used to peel off nodes in graph order. It connects the full prefix product to tianDensityProduct; the chain rule and SCM recovery results are proved in the sibling modules.

def extendTianPrefix reviewed
Causalean.SCM.ID

For a finite population of variables with measurable value spaces, a SWIG graph, a finite node set, and an index strictly below its cardinality, the prefix-extension map combines an assignment on the first indexed nodes with an assignment on the next node into an assignment on the one-node-longer prefix.

Definition (Lean source)
N :
Type u_1
N → Type u_2
shared
H :
D :
n :
ℕ
hn :
n < D.card
extendTianPrefix H D hn :
ValuesOn (H.prefixIn D n) (swigΩ Ω) × ValuesOn ({(H.nodesAt D ⟨n, hn⟩).val} : Finset (SWIGNode N)) (swigΩ Ω) → ValuesOn (H.prefixIn D (n + 1)) (swigΩ Ω)
fun p
=> (valuesEquivOfEq (Ω := swigΩ Ω) (prefixIn_succ H D hn).symm) (valuesUnionMk p.1 p.2)
def tianPrefixDensityProductInPrefix reviewed
Causalean.SCM.ID

For a finite population of variables with measurable value spaces, a SWIG graph, a finite node set, a finite measure on its joint value space, and reference measures, assuming every graph-ordered singleton node value space is standard Borel and nonempty, the Tian prefix density product at a prefix length and an assignment on that prefix is one at length zero and otherwise the preceding product multiplied by the next conditional-density factor, with that factor taken as one when its index is outside the node set.

Definition (Lean source)
N :
Type u_1
N → Type u_2
shared
H :
D :
μ :
∀ (k : ℕ) (hk : k < D.card),
StandardBorelSpace (ValuesOn ({(H.nodesAt D ⟨k, hk⟩).val} : Finset (SWIGNode N)) (swigΩ Ω))
∀ (k : ℕ) (hk : k < D.card),
Nonempty (ValuesOn ({(H.nodesAt D ⟨k, hk⟩).val} : Finset (SWIGNode N)) (swigΩ Ω))
k :
ℕ
tianPrefixDensityProductInPrefix H D μ ref k :
ValuesOn (H.prefixIn D k) (swigΩ Ω) → ENNReal
clause 1
| 0, _ => 1
clause 2
| k + 1, z
=> tianPrefixDensityProductInPrefix H D μ ref k (valuesProjection (prefixIn_mono H D (le_succ k)) z) * if hk : k < D.card then ((condDistrib (valuesProjection (show ({(H.nodesAt D ⟨k, hk⟩).val} : Finset (SWIGNode N)) ⊆ D from by intro v hv rw [Finset.mem_singleton] at hv exact hv ▸ (H.nodesAt D ⟨k, hk⟩).property)) (valuesProjection (H.prefixIn_subset D k)) μ) (valuesProjection (prefixIn_mono H D (le_succ k)) z)).rnDeriv (jointRef ref ({(H.nodesAt D ⟨k, hk⟩).val} : Finset (SWIGNode N))) (valuesProjection (show ({(H.nodesAt D ⟨k, hk⟩).val} : Finset (SWIGNode N)) ⊆ H.prefixIn D (k + 1) from by intro v hv rw [Finset.mem_singleton] at hv subst hv rw [nodesAt_mem_prefixIn_iff H D (k + 1) ⟨k, hk⟩] exact lt_succ_self k) z) else 1
def tianPrefixStepDensityInPrefix reviewed
Causalean.SCM.ID

For a finite population of variables with measurable value spaces, a SWIG graph, a finite node set, a finite measure on its joint value space, reference measures, assuming every graph-ordered singleton node value space is standard Borel and nonempty, a prefix length, an assignment on that prefix, and a node index, the one-step Tian density is the conditional-density factor for that indexed node when it lies in both the prefix and the node set, and is one otherwise.

Definition (Lean source)
N :
Type u_1
N → Type u_2
shared
H :
D :
μ :
∀ (i : ℕ) (hi : i < D.card),
StandardBorelSpace (ValuesOn ({(H.nodesAt D ⟨i, hi⟩).val} : Finset (SWIGNode N)) (swigΩ Ω))
∀ (i : ℕ) (hi : i < D.card),
Nonempty (ValuesOn ({(H.nodesAt D ⟨i, hi⟩).val} : Finset (SWIGNode N)) (swigΩ Ω))
k :
ℕ
z :
ValuesOn (H.prefixIn D k) (swigΩ Ω)
i :
ℕ
tianPrefixStepDensityInPrefix H D μ ref k z i :
if hi : i < k then if hcard : i < D.card then ((condDistrib (valuesProjection (show ({(H.nodesAt D ⟨i, hcard⟩).val} : Finset (SWIGNode N)) ⊆ D from by intro v hv rw [Finset.mem_singleton] at hv exact hv ▸ (H.nodesAt D ⟨i, hcard⟩).property)) (valuesProjection (H.prefixIn_subset D i)) μ) (valuesProjection (prefixIn_mono H D (le_of_lt hi)) z)).rnDeriv (jointRef ref ({(H.nodesAt D ⟨i, hcard⟩).val} : Finset (SWIGNode N))) (valuesProjection (show ({(H.nodesAt D ⟨i, hcard⟩).val} : Finset (SWIGNode N)) ⊆ H.prefixIn D k from by intro v hv rw [Finset.mem_singleton] at hv subst hv rw [nodesAt_mem_prefixIn_iff H D k ⟨i, hcard⟩] exact hi) z) else 1 else 1
lemma tianPrefixDensityProductInPrefix_card_eq_tianDensityProduct reviewed
Causalean.SCM.ID

For a finite acyclic graph with measurable node-value spaces, a finite node set, a finite law on that set, coordinate reference measures, and a realization of the node values, the recursive density product at the full graph- ordered prefix equals Tian's finite product over all node positions.

Formal statement
N :
Type u_1
N → Type u_2
shared
H :
D :
μ :
∀ (k : ℕ) (hk : k < D.card),
StandardBorelSpace (ValuesOn ({(H.nodesAt D ⟨k, hk⟩).val} : Finset (SWIGNode N)) (swigΩ Ω))
∀ (k : ℕ) (hk : k < D.card),
Nonempty (ValuesOn ({(H.nodesAt D ⟨k, hk⟩).val} : Finset (SWIGNode N)) (swigΩ Ω))
y :
ValuesOn (H.prefixIn D D.card) (swigΩ Ω)
= tianDensityProduct H D μ ref ((valuesEquivOfEq (Ω := swigΩ Ω) (prefixIn_card H D)) y)
Proof (Lean source)
lemma tianPrefixDensityProductInPrefix_card_eq_tianDensityProduct (H : SWIGGraph N) (D : Finset (SWIGNode N)) (μ : Measure (ValuesOn D (swigΩ Ω))) (ref : ReferenceMeasures Ω) [IsFiniteMeasure μ] [∀ (k : ℕ) (hk : k < D.card), StandardBorelSpace (ValuesOn ({(H.nodesAt D ⟨k, hk⟩).val} : Finset (SWIGNode N)) (swigΩ Ω))] [∀ (k : ℕ) (hk : k < D.card), Nonempty (ValuesOn ({(H.nodesAt D ⟨k, hk⟩).val} : Finset (SWIGNode N)) (swigΩ Ω))] (y : ValuesOn (H.prefixIn D D.card) (swigΩ Ω)) : tianPrefixDensityProductInPrefix H D μ ref D.card y = tianDensityProduct H D μ ref ((valuesEquivOfEq (Ω := swigΩ Ω) (prefixIn_card H D)) y) := by rw [tianPrefixDensityProductInPrefix_eq_range_product H D μ ref D.card (le_refl _) y] rw [Finset.prod_range] simp only [tianDensityProduct, tianPrefixStepDensity, tianPrefixStepDensityInPrefix, coe_valuesEquivOfEq] refine Finset.prod_congr rfl ?_ intro i _hi have hproj : valuesProjection (H.prefixIn_subset D i.val) (valuesProjection (le_of_eq (prefixIn_card H D).symm) y) = valuesProjection (prefixIn_mono H D (le_of_lt i.isLt)) y := by funext a rfl have hnode : valuesProjection (show ({(H.nodesAt D i).val} : Finset (SWIGNode N)) ⊆ D from by intro v hv rw [Finset.mem_singleton] at hv exact hv ▸ (H.nodesAt D i).property) (valuesProjection (le_of_eq (prefixIn_card H D).symm) y) = valuesProjection (show ({(H.nodesAt D i).val} : Finset (SWIGNode N)) ⊆ H.prefixIn D D.card from by intro v hv rw [Finset.mem_singleton] at hv subst hv rw [nodesAt_mem_prefixIn_iff H D D.card i] exact i.isLt) y := by funext a rfl simp [i.isLt, hproj, hnode]
7 supporting declarations (lemmas, instances)
Chain­Rule 1 core · 2 supporting This file proves that a dominated finite law has density tianDensityProduct, then regroups that product into district densities under the global Markov property. ★ markov_tian_cfactorization_density

Measure-level Tian chain rule and c-factorization

This file proves that a dominated finite law has density tianDensityProduct, then regroups that product into district densities under the global Markov property. The results are measure-theoretic and do not yet specialize the law to an SCM intervention.

theorem markov_tian_cfactorization_density reviewed
Causalean.SCM.ID

Density form of the Markov-to-c-factorization theorem. Let H be a pure SWIG graph, D a finite set of SWIG nodes, μ a finite (probability) measure on the assignments to D, and ref a family of reference measures. If D is exactly the observed-node set of H and μ is absolutely continuous with respect to the product reference measure on D, then the Radon–Nikodym density of μ against that product reference equals, almost everywhere, the product over the c-components of H of their Tian district-density factors.

Formal statement
N :
Type u_1
N → Type u_2
shared
H :
D :
hD :
H.observed = D
μ :
∀ n, Fintype (Ω n)
∀ (k : ℕ) (hk : k < D.card),
StandardBorelSpace (ValuesOn ({(H.nodesAt D ⟨k, hk⟩).val} : Finset (SWIGNode N)) (swigΩ Ω))
∀ (k : ℕ) (hk : k < D.card),
Nonempty (ValuesOn ({(H.nodesAt D ⟨k, hk⟩).val} : Finset (SWIGNode N)) (swigΩ Ω))
hdom :
μ ≪ jointRef ref D
μ.rnDeriv (jointRef ref D)
=ᵐ[jointRef ref D] fun x => ∏ S ∈ H.cComponentSet, tianDistrictDensity H D μ ref S x
Proof (Lean source)
theorem markov_tian_cfactorization_density (H : SWIGGraph N) (D : Finset (SWIGNode N)) (hD : H.observed = D) (μ : Measure (ValuesOn D (swigΩ Ω))) (ref : ReferenceMeasures Ω) [∀ n, Fintype (Ω n)] [∀ n, MeasurableSingletonClass (Ω n)] [StandardBorelSpace (ValuesOn D (swigΩ Ω))] [IsProbabilityMeasure μ] [∀ (k : ℕ) (hk : k < D.card), StandardBorelSpace (ValuesOn ({(H.nodesAt D ⟨k, hk⟩).val} : Finset (SWIGNode N)) (swigΩ Ω))] [∀ (k : ℕ) (hk : k < D.card), Nonempty (ValuesOn ({(H.nodesAt D ⟨k, hk⟩).val} : Finset (SWIGNode N)) (swigΩ Ω))] (hdom : μ ≪ jointRef ref D) : μ.rnDeriv (jointRef ref D) =ᵐ[jointRef ref D] fun x => ∏ S ∈ H.cComponentSet, tianDistrictDensity H D μ ref S x := by exact (rnDeriv_eq_tianDensityProduct H D μ ref hdom).trans (Filter.EventuallyEq.of_eq (prod_tianDistrictDensity_eq_tianDensityProduct H D hD μ ref).symm)
2 supporting declarations (lemmas, instances)
Recovery 2 core · 2 supporting This file proves the global-Markov property of the post-intervention ancestral marginal, recovers each eligible district density from the observational model, and assembles the resulting Tian c-factorization used by disc ★ doAncestralDistrictDensity_recovered_from_obs★ doObsKernelAncestralMarginal_tian_cfactorization_density

SCM recovery for the Tian do-law density formula

This file proves the global-Markov property of the post-intervention ancestral marginal, recovers each eligible district density from the observational model, and assembles the resulting Tian c-factorization used by discrete ID soundness.

theorem doAncestralDistrictDensity_recovered_from_obs reviewed
Causalean.SCM.ID

T2, abstract density recovery statement. Fix a standard structural causal model M and an intervention target set X for which every targeted node is currently a random observed node and none of its fixed copies is already fixed, an output set Y, and a reference-measure family faithful to the graph. For a district S of the truncated c-component set of the post-intervention ancestral graph and a c-component C of the base graph that is factor-reachable from S, assume every fixed-value assignment gives an observational kernel with everywhere-positive point masses, no intervention target's random form lies in Y, and that an extension map from ancestral assignments to full observed assignments restricts back to the identity and agrees with the intervention values sDo on the targeted coordinates. Then the district factor of S computed from the density of the do-law's ancestral marginal equals, almost everywhere, the full-graph c-component density factor of C evaluated at the extension of the ancestral assignment.

Formal statement
N :
Type u_1
N → Type u_2
shared
∀ n, Nonempty (Ω n)
∀ n, Fintype (Ω n)
M :
SCM N Ω
X :
hStd :
M.isStandard
hObs :
∀ D ∈ X, SWIGNode.random D ∈ M.observed
hFix :
∀ D ∈ X, SWIGNode.fixed D ∉ M.fixed
Y :
href :
sDo :
(M.fixSet X hObs hFix).FixedValues
S C :
hS :
S ∈ fixTruncCComponentSet M X hObs hFix Y
hReach :
cFactorReachable M.toSWIGGraph C S
hCmem :
C ∈ M.toSWIGGraph.cComponentSet
∀ s' : M.FixedValues, IsFiniteMeasure (M.obsKernel s')
∀ (k : ℕ) (hk : k < (fixObservedAncestralSet M X hObs hFix Y).card),
StandardBorelSpace (ValuesOn ({(((M.fixSet X hObs hFix).toSWIGGraph.induce (fixAncestralSet M X hObs hFix Y)).nodesAt (fixObservedAncestralSet M X hObs hFix Y) ⟨k, hk⟩).val} : Finset (SWIGNode N)) (swigΩ Ω))
∀ (k : ℕ) (hk : k < (fixObservedAncestralSet M X hObs hFix Y).card),
Nonempty (ValuesOn ({(((M.fixSet X hObs hFix).toSWIGGraph.induce (fixAncestralSet M X hObs hFix Y)).nodesAt (fixObservedAncestralSet M X hObs hFix Y) ⟨k, hk⟩).val} : Finset (SWIGNode N)) (swigΩ Ω))
∀ (k : ℕ) (hk : k < M.observed.card),
StandardBorelSpace (ValuesOn ({(M.observedAt ⟨k, hk⟩).val} : Finset (SWIGNode N)) (swigΩ Ω))
∀ (k : ℕ) (hk : k < M.observed.card),
Nonempty (ValuesOn ({(M.observedAt ⟨k, hk⟩).val} : Finset (SWIGNode N)) (swigΩ Ω))
∀ k : ℕ,
CountableOrCountablyGenerated M.FixedValues (ValuesOn (M.prefixNodes k) (swigΩ Ω))
hpos :
∀ s' : M.FixedValues, DiscreteID.PositiveMass (M.obsKernel s')
hYX :
∀ D ∈ X, SWIGNode.random D ∉ Y
extend :
ValuesOn (fixObservedAncestralSet M X hObs hFix Y) (swigΩ Ω) → ValuesOn M.observed (swigΩ Ω)
hExtend :
∀ xD,
valuesProjection (show fixObservedAncestralSet M X hObs hFix Y ⊆ M.observed from inter_subset_right) (extend xD)
= xD
hExtendX :
∀ xD (D : N) (hD : D ∈ X),
extend xD ⟨SWIGNode.random D, hObs D hD⟩
= sDo ⟨SWIGNode.fixed D, mem_union_right _ (Finset.mem_image.mpr ⟨D, hD, rfl⟩)⟩
D :
fixObservedAncestralSet M X hObs hFix Y
H :
(M.fixSet X hObs hFix).toSWIGGraph.induce (fixAncestralSet M X hObs hFix Y)
tianDistrictDensity H D (doObsKernelAncestralMarginal M X hObs hFix Y sDo) ref S
=ᵐ[jointRef ref D] fun xD => M.cComponentDensityFactor ref (M.fixSetProj X hObs hFix sDo) C (extend xD)
Proof (Lean source)
theorem doAncestralDistrictDensity_recovered_from_obs [∀ n, Nonempty (Ω n)] [∀ n, Fintype (Ω n)] [∀ n, MeasurableSingletonClass (Ω n)] (M : SCM N Ω) (X : Finset N) (hStd : M.isStandard) (hObs : ∀ D ∈ X, SWIGNode.random D ∈ M.observed) (hFix : ∀ D ∈ X, SWIGNode.fixed D ∉ M.fixed) (Y : Finset (SWIGNode N)) (ref : ReferenceMeasures Ω) (href : ReferenceFaithful ref) (sDo : (M.fixSet X hObs hFix).FixedValues) (S C : Finset (SWIGNode N)) (hS : S ∈ fixTruncCComponentSet M X hObs hFix Y) (hReach : cFactorReachable M.toSWIGGraph C S) (hCmem : C ∈ M.toSWIGGraph.cComponentSet) [IsFiniteMeasure (doObsKernelAncestralMarginal M X hObs hFix Y sDo)] [∀ s' : M.FixedValues, IsFiniteMeasure (M.obsKernel s')] [∀ (k : ℕ) (hk : k < (fixObservedAncestralSet M X hObs hFix Y).card), StandardBorelSpace (ValuesOn ({(((M.fixSet X hObs hFix).toSWIGGraph.induce (fixAncestralSet M X hObs hFix Y)).nodesAt (fixObservedAncestralSet M X hObs hFix Y) ⟨k, hk⟩).val} : Finset (SWIGNode N)) (swigΩ Ω))] [∀ (k : ℕ) (hk : k < (fixObservedAncestralSet M X hObs hFix Y).card), Nonempty (ValuesOn ({(((M.fixSet X hObs hFix).toSWIGGraph.induce (fixAncestralSet M X hObs hFix Y)).nodesAt (fixObservedAncestralSet M X hObs hFix Y) ⟨k, hk⟩).val} : Finset (SWIGNode N)) (swigΩ Ω))] [∀ (k : ℕ) (hk : k < M.observed.card), StandardBorelSpace (ValuesOn ({(M.observedAt ⟨k, hk⟩).val} : Finset (SWIGNode N)) (swigΩ Ω))] [∀ (k : ℕ) (hk : k < M.observed.card), Nonempty (ValuesOn ({(M.observedAt ⟨k, hk⟩).val} : Finset (SWIGNode N)) (swigΩ Ω))] [∀ k : ℕ, CountableOrCountablyGenerated M.FixedValues (ValuesOn (M.prefixNodes k) (swigΩ Ω))] (hpos : ∀ s' : M.FixedValues, DiscreteID.PositiveMass (M.obsKernel s')) (hYX : ∀ D ∈ X, SWIGNode.random D ∉ Y) (extend : ValuesOn (fixObservedAncestralSet M X hObs hFix Y) (swigΩ Ω) → ValuesOn M.observed (swigΩ Ω)) (hExtend : ∀ xD, valuesProjection (show fixObservedAncestralSet M X hObs hFix Y ⊆ M.observed from inter_subset_right) (extend xD) = xD) (hExtendX : ∀ xD (D : N) (hD : D ∈ X), extend xD ⟨SWIGNode.random D, hObs D hD⟩ = sDo ⟨SWIGNode.fixed D, mem_union_right _ (Finset.mem_image.mpr ⟨D, hD, rfl⟩)⟩) : let D := fixObservedAncestralSet M X hObs hFix Y let H := (M.fixSet X hObs hFix).toSWIGGraph.induce (fixAncestralSet M X hObs hFix Y) tianDistrictDensity H D (doObsKernelAncestralMarginal M X hObs hFix Y sDo) ref S =ᵐ[jointRef ref D] fun xD => M.cComponentDensityFactor ref (M.fixSetProj X hObs hFix sDo) C (extend xD) := by classical rcases hReach with ⟨hSnonempty, hSsubC, hSmem⟩ have hCS : C = S := by by_contra hne rcases hSnonempty with ⟨v, hvS⟩ have hvC : v ∈ C := hSsubC hvS have hdisj := M.toSWIGGraph.cComponentSet_pairwise_disjoint hCmem hSmem hne exact (Finset.disjoint_left.mp hdisj) hvC hvS subst C exact tian_full_cComponent_density_recovery M X hStd hObs hFix Y ref href sDo S hS hSmem hpos hYX extend hExtend hExtendX
theorem doObsKernelAncestralMarginal_tian_cfactorization_density reviewed
Causalean.SCM.ID

ID-specific T1 wrapper. For an intervention target set X where every targeted node is currently a random observed node with no fixed copy already fixed, if the ancestral marginal of the do-law ν_M = (M.fixSet X).obsKernel.map π_D is absolutely continuous with respect to the product reference measure on the ancestral observed set, then its Radon–Nikodym density equals, almost everywhere, the product over the c-components of the induced post-intervention ancestral graph G_X[D] of their Tian district-density factors.

Formal statement
N :
Type u_1
N → Type u_2
shared
∀ n, Nonempty (swigΩ Ω n)
∀ n, Fintype (Ω n)
M :
SCM N Ω
X :
hObs :
∀ D ∈ X, SWIGNode.random D ∈ M.observed
hFix :
∀ D ∈ X, SWIGNode.fixed D ∉ M.fixed
Y :
s :
(M.fixSet X hObs hFix).FixedValues
StandardBorelSpace (M.fixSet X hObs hFix).RandomValues
StandardBorelSpace (M.fixSet X hObs hFix).ObservedValues
∀ s' : (M.fixSet X hObs hFix).FixedValues,
IsFiniteMeasure ((M.fixSet X hObs hFix).jointKernel s')
∀ s' : (M.fixSet X hObs hFix).FixedValues,
IsFiniteMeasure ((M.fixSet X hObs hFix).obsKernel s')
∀ (k : ℕ) (hk : k < (fixObservedAncestralSet M X hObs hFix Y).card),
StandardBorelSpace (ValuesOn ({(((M.fixSet X hObs hFix).toSWIGGraph.induce (fixAncestralSet M X hObs hFix Y)).nodesAt (fixObservedAncestralSet M X hObs hFix Y) ⟨k, hk⟩).val} : Finset (SWIGNode N)) (swigΩ Ω))
∀ (k : ℕ) (hk : k < (fixObservedAncestralSet M X hObs hFix Y).card),
Nonempty (ValuesOn ({(((M.fixSet X hObs hFix).toSWIGGraph.induce (fixAncestralSet M X hObs hFix Y)).nodesAt (fixObservedAncestralSet M X hObs hFix Y) ⟨k, hk⟩).val} : Finset (SWIGNode N)) (swigΩ Ω))
hdomD :
doObsKernelAncestralMarginal M X hObs hFix Y s ≪ jointRef ref (fixObservedAncestralSet M X hObs hFix Y)
D :
fixObservedAncestralSet M X hObs hFix Y
H :
(M.fixSet X hObs hFix).toSWIGGraph.induce (fixAncestralSet M X hObs hFix Y)
(doObsKernelAncestralMarginal M X hObs hFix Y s).rnDeriv (jointRef ref D)
=ᵐ[jointRef ref D] fun x => ∏ S ∈ H.cComponentSet, tianDistrictDensity H D (doObsKernelAncestralMarginal M X hObs hFix Y s) ref S x
Proof (Lean source)
theorem doObsKernelAncestralMarginal_tian_cfactorization_density [∀ n, StandardBorelSpace (swigΩ Ω n)] [∀ n, Nonempty (swigΩ Ω n)] [∀ n, Fintype (Ω n)] [∀ n, MeasurableSingletonClass (Ω n)] (M : SCM N Ω) (X : Finset N) (hObs : ∀ D ∈ X, SWIGNode.random D ∈ M.observed) (hFix : ∀ D ∈ X, SWIGNode.fixed D ∉ M.fixed) (Y : Finset (SWIGNode N)) (ref : ReferenceMeasures Ω) (s : (M.fixSet X hObs hFix).FixedValues) [StandardBorelSpace (ValuesOn (fixObservedAncestralSet M X hObs hFix Y) (swigΩ Ω))] [StandardBorelSpace (M.fixSet X hObs hFix).RandomValues] [StandardBorelSpace (M.fixSet X hObs hFix).ObservedValues] [∀ s' : (M.fixSet X hObs hFix).FixedValues, IsFiniteMeasure ((M.fixSet X hObs hFix).jointKernel s')] [∀ s' : (M.fixSet X hObs hFix).FixedValues, IsFiniteMeasure ((M.fixSet X hObs hFix).obsKernel s')] [IsFiniteMeasure (doObsKernelAncestralMarginal M X hObs hFix Y s)] [∀ (k : ℕ) (hk : k < (fixObservedAncestralSet M X hObs hFix Y).card), StandardBorelSpace (ValuesOn ({(((M.fixSet X hObs hFix).toSWIGGraph.induce (fixAncestralSet M X hObs hFix Y)).nodesAt (fixObservedAncestralSet M X hObs hFix Y) ⟨k, hk⟩).val} : Finset (SWIGNode N)) (swigΩ Ω))] [∀ (k : ℕ) (hk : k < (fixObservedAncestralSet M X hObs hFix Y).card), Nonempty (ValuesOn ({(((M.fixSet X hObs hFix).toSWIGGraph.induce (fixAncestralSet M X hObs hFix Y)).nodesAt (fixObservedAncestralSet M X hObs hFix Y) ⟨k, hk⟩).val} : Finset (SWIGNode N)) (swigΩ Ω))] (hdomD : doObsKernelAncestralMarginal M X hObs hFix Y s ≪ jointRef ref (fixObservedAncestralSet M X hObs hFix Y)) : let D := fixObservedAncestralSet M X hObs hFix Y let H := (M.fixSet X hObs hFix).toSWIGGraph.induce (fixAncestralSet M X hObs hFix Y) (doObsKernelAncestralMarginal M X hObs hFix Y s).rnDeriv (jointRef ref D) =ᵐ[jointRef ref D] fun x => ∏ S ∈ H.cComponentSet, tianDistrictDensity H D (doObsKernelAncestralMarginal M X hObs hFix Y s) ref S x := by intro D H exact markov_tian_cfactorization_density H D rfl (doObsKernelAncestralMarginal M X hObs hFix Y s) ref hdomD
2 supporting declarations (lemmas, instances)