Theorem: ProbabilityTheory.kernel.apply_eq_measure_condKernel_of_compProd_eq
File: Mathlib/Probability/Kernel/Disintegration/Unique.lean

tactic: have : ρ a = (ρ a).fst ⊗ₘ kernel.comap κ (fun b ↦ (a, b)) measurable_prod_mk_left := by
  ext s hs
  conv_lhs => rw [← hκ]
  rw [Measure.compProd_apply hs, kernel.compProd_apply _ _ _ hs]
  rfl
state_before: α : Type u_1
β : Type u_2
Ω : Type u_3
mα : MeasurableSpace α
mβ : MeasurableSpace β
inst✝⁴ : MeasurableSpace Ω
inst✝³ : StandardBorelSpace Ω
inst✝² : Nonempty Ω
ρ : ↥(kernel α (β × Ω))
inst✝¹ : IsFiniteKernel ρ
κ : ↥(kernel (α × β) Ω)
inst✝ : IsFiniteKernel κ
hκ : fst ρ ⊗ₖ κ = ρ
a : α
⊢ (fun b => κ (a, b)) =ᶠ[ae ((fst ρ) a)] ⇑(ρ a).condKernel
state_after: α : Type u_1
β : Type u_2
Ω : Type u_3
mα : MeasurableSpace α
mβ : MeasurableSpace β
inst✝⁴ : MeasurableSpace Ω
inst✝³ : StandardBorelSpace Ω
inst✝² : Nonempty Ω
ρ : ↥(kernel α (β × Ω))
inst✝¹ : IsFiniteKernel ρ
κ : ↥(kernel (α × β) Ω)
inst✝ : IsFiniteKernel κ
hκ : fst ρ ⊗ₖ κ = ρ
a : α
this : ρ a = (ρ a).fst ⊗ₘ comap κ (fun b => (a, b)) ⋯
⊢ (fun b => κ (a, b)) =ᶠ[ae ((fst ρ) a)] ⇑(ρ a).condKernel

tactic: have h := eq_condKernel_of_measure_eq_compProd _ this
state_before: α : Type u_1
β : Type u_2
Ω : Type u_3
mα : MeasurableSpace α
mβ : MeasurableSpace β
inst✝⁴ : MeasurableSpace Ω
inst✝³ : StandardBorelSpace Ω
inst✝² : Nonempty Ω
ρ : ↥(kernel α (β × Ω))
inst✝¹ : IsFiniteKernel ρ
κ : ↥(kernel (α × β) Ω)
inst✝ : IsFiniteKernel κ
hκ : fst ρ ⊗ₖ κ = ρ
a : α
this : ρ a = (ρ a).fst ⊗ₘ comap κ (fun b => (a, b)) ⋯
⊢ (fun b => κ (a, b)) =ᶠ[ae ((fst ρ) a)] ⇑(ρ a).condKernel
state_after: α : Type u_1
β : Type u_2
Ω : Type u_3
mα : MeasurableSpace α
mβ : MeasurableSpace β
inst✝⁴ : MeasurableSpace Ω
inst✝³ : StandardBorelSpace Ω
inst✝² : Nonempty Ω
ρ : ↥(kernel α (β × Ω))
inst✝¹ : IsFiniteKernel ρ
κ : ↥(kernel (α × β) Ω)
inst✝ : IsFiniteKernel κ
hκ : fst ρ ⊗ₖ κ = ρ
a : α
this : ρ a = (ρ a).fst ⊗ₘ comap κ (fun b => (a, b)) ⋯
h : ∀ᵐ (x : β) ∂(ρ a).fst, (comap κ (fun b => (a, b)) ⋯) x = (ρ a).condKernel x
⊢ (fun b => κ (a, b)) =ᶠ[ae ((fst ρ) a)] ⇑(ρ a).condKernel

tactic: rw [kernel.fst_apply]
state_before: α : Type u_1
β : Type u_2
Ω : Type u_3
mα : MeasurableSpace α
mβ : MeasurableSpace β
inst✝⁴ : MeasurableSpace Ω
inst✝³ : StandardBorelSpace Ω
inst✝² : Nonempty Ω
ρ : ↥(kernel α (β × Ω))
inst✝¹ : IsFiniteKernel ρ
κ : ↥(kernel (α × β) Ω)
inst✝ : IsFiniteKernel κ
hκ : fst ρ ⊗ₖ κ = ρ
a : α
this : ρ a = (ρ a).fst ⊗ₘ comap κ (fun b => (a, b)) ⋯
h : ∀ᵐ (x : β) ∂(ρ a).fst, (comap κ (fun b => (a, b)) ⋯) x = (ρ a).condKernel x
⊢ (fun b => κ (a, b)) =ᶠ[ae ((fst ρ) a)] ⇑(ρ a).condKernel
state_after: α : Type u_1
β : Type u_2
Ω : Type u_3
mα : MeasurableSpace α
mβ : MeasurableSpace β
inst✝⁴ : MeasurableSpace Ω
inst✝³ : StandardBorelSpace Ω
inst✝² : Nonempty Ω
ρ : ↥(kernel α (β × Ω))
inst✝¹ : IsFiniteKernel ρ
κ : ↥(kernel (α × β) Ω)
inst✝ : IsFiniteKernel κ
hκ : fst ρ ⊗ₖ κ = ρ
a : α
this : ρ a = (ρ a).fst ⊗ₘ comap κ (fun b => (a, b)) ⋯
h : ∀ᵐ (x : β) ∂(ρ a).fst, (comap κ (fun b => (a, b)) ⋯) x = (ρ a).condKernel x
⊢ (fun b => κ (a, b)) =ᶠ[ae (Measure.map Prod.fst (ρ a))] ⇑(ρ a).condKernel

tactic: filter_upwards [h] with b hb
state_before: α : Type u_1
β : Type u_2
Ω : Type u_3
mα : MeasurableSpace α
mβ : MeasurableSpace β
inst✝⁴ : MeasurableSpace Ω
inst✝³ : StandardBorelSpace Ω
inst✝² : Nonempty Ω
ρ : ↥(kernel α (β × Ω))
inst✝¹ : IsFiniteKernel ρ
κ : ↥(kernel (α × β) Ω)
inst✝ : IsFiniteKernel κ
hκ : fst ρ ⊗ₖ κ = ρ
a : α
this : ρ a = (ρ a).fst ⊗ₘ comap κ (fun b => (a, b)) ⋯
h : ∀ᵐ (x : β) ∂(ρ a).fst, (comap κ (fun b => (a, b)) ⋯) x = (ρ a).condKernel x
⊢ (fun b => κ (a, b)) =ᶠ[ae (Measure.map Prod.fst (ρ a))] ⇑(ρ a).condKernel
state_after: case h
α : Type u_1
β : Type u_2
Ω : Type u_3
mα : MeasurableSpace α
mβ : MeasurableSpace β
inst✝⁴ : MeasurableSpace Ω
inst✝³ : StandardBorelSpace Ω
inst✝² : Nonempty Ω
ρ : ↥(kernel α (β × Ω))
inst✝¹ : IsFiniteKernel ρ
κ : ↥(kernel (α × β) Ω)
inst✝ : IsFiniteKernel κ
hκ : fst ρ ⊗ₖ κ = ρ
a : α
this : ρ a = (ρ a).fst ⊗ₘ comap κ (fun b => (a, b)) ⋯
h : ∀ᵐ (x : β) ∂(ρ a).fst, (comap κ (fun b => (a, b)) ⋯) x = (ρ a).condKernel x
b : β
hb : (comap κ (fun b => (a, b)) ⋯) b = (ρ a).condKernel b
⊢ κ (a, b) = (ρ a).condKernel b

tactic: rw [← hb, kernel.comap_apply]
state_before: case h
α : Type u_1
β : Type u_2
Ω : Type u_3
mα : MeasurableSpace α
mβ : MeasurableSpace β
inst✝⁴ : MeasurableSpace Ω
inst✝³ : StandardBorelSpace Ω
inst✝² : Nonempty Ω
ρ : ↥(kernel α (β × Ω))
inst✝¹ : IsFiniteKernel ρ
κ : ↥(kernel (α × β) Ω)
inst✝ : IsFiniteKernel κ
hκ : fst ρ ⊗ₖ κ = ρ
a : α
this : ρ a = (ρ a).fst ⊗ₘ comap κ (fun b => (a, b)) ⋯
h : ∀ᵐ (x : β) ∂(ρ a).fst, (comap κ (fun b => (a, b)) ⋯) x = (ρ a).condKernel x
b : β
hb : (comap κ (fun b => (a, b)) ⋯) b = (ρ a).condKernel b
⊢ κ (a, b) = (ρ a).condKernel b
state_after: no goals

tactic: ext s hs
state_before: α : Type u_1
β : Type u_2
Ω : Type u_3
mα : MeasurableSpace α
mβ : MeasurableSpace β
inst✝⁴ : MeasurableSpace Ω
inst✝³ : StandardBorelSpace Ω
inst✝² : Nonempty Ω
ρ : ↥(kernel α (β × Ω))
inst✝¹ : IsFiniteKernel ρ
κ : ↥(kernel (α × β) Ω)
inst✝ : IsFiniteKernel κ
hκ : fst ρ ⊗ₖ κ = ρ
a : α
⊢ ρ a = (ρ a).fst ⊗ₘ comap κ (fun b => (a, b)) ⋯
state_after: case h
α : Type u_1
β : Type u_2
Ω : Type u_3
mα : MeasurableSpace α
mβ : MeasurableSpace β
inst✝⁴ : MeasurableSpace Ω
inst✝³ : StandardBorelSpace Ω
inst✝² : Nonempty Ω
ρ : ↥(kernel α (β × Ω))
inst✝¹ : IsFiniteKernel ρ
κ : ↥(kernel (α × β) Ω)
inst✝ : IsFiniteKernel κ
hκ : fst ρ ⊗ₖ κ = ρ
a : α
s : Set (β × Ω)
hs : MeasurableSet s
⊢ (ρ a) s = ((ρ a).fst ⊗ₘ comap κ (fun b => (a, b)) ⋯) s

tactic: conv_lhs => rw [← hκ]
state_before: case h
α : Type u_1
β : Type u_2
Ω : Type u_3
mα : MeasurableSpace α
mβ : MeasurableSpace β
inst✝⁴ : MeasurableSpace Ω
inst✝³ : StandardBorelSpace Ω
inst✝² : Nonempty Ω
ρ : ↥(kernel α (β × Ω))
inst✝¹ : IsFiniteKernel ρ
κ : ↥(kernel (α × β) Ω)
inst✝ : IsFiniteKernel κ
hκ : fst ρ ⊗ₖ κ = ρ
a : α
s : Set (β × Ω)
hs : MeasurableSet s
⊢ (ρ a) s = ((ρ a).fst ⊗ₘ comap κ (fun b => (a, b)) ⋯) s
state_after: case h
α : Type u_1
β : Type u_2
Ω : Type u_3
mα : MeasurableSpace α
mβ : MeasurableSpace β
inst✝⁴ : MeasurableSpace Ω
inst✝³ : StandardBorelSpace Ω
inst✝² : Nonempty Ω
ρ : ↥(kernel α (β × Ω))
inst✝¹ : IsFiniteKernel ρ
κ : ↥(kernel (α × β) Ω)
inst✝ : IsFiniteKernel κ
hκ : fst ρ ⊗ₖ κ = ρ
a : α
s : Set (β × Ω)
hs : MeasurableSet s
⊢ ((fst ρ ⊗ₖ κ) a) s = ((ρ a).fst ⊗ₘ comap κ (fun b => (a, b)) ⋯) s

tactic: rw [Measure.compProd_apply hs, kernel.compProd_apply _ _ _ hs]
state_before: case h
α : Type u_1
β : Type u_2
Ω : Type u_3
mα : MeasurableSpace α
mβ : MeasurableSpace β
inst✝⁴ : MeasurableSpace Ω
inst✝³ : StandardBorelSpace Ω
inst✝² : Nonempty Ω
ρ : ↥(kernel α (β × Ω))
inst✝¹ : IsFiniteKernel ρ
κ : ↥(kernel (α × β) Ω)
inst✝ : IsFiniteKernel κ
hκ : fst ρ ⊗ₖ κ = ρ
a : α
s : Set (β × Ω)
hs : MeasurableSet s
⊢ ((fst ρ ⊗ₖ κ) a) s = ((ρ a).fst ⊗ₘ comap κ (fun b => (a, b)) ⋯) s
state_after: case h
α : Type u_1
β : Type u_2
Ω : Type u_3
mα : MeasurableSpace α
mβ : MeasurableSpace β
inst✝⁴ : MeasurableSpace Ω
inst✝³ : StandardBorelSpace Ω
inst✝² : Nonempty Ω
ρ : ↥(kernel α (β × Ω))
inst✝¹ : IsFiniteKernel ρ
κ : ↥(kernel (α × β) Ω)
inst✝ : IsFiniteKernel κ
hκ : fst ρ ⊗ₖ κ = ρ
a : α
s : Set (β × Ω)
hs : MeasurableSet s
⊢ ∫⁻ (b : β), (κ (a, b)) {c | (b, c) ∈ s} ∂(fst ρ) a =
    ∫⁻ (a_1 : β), ((comap κ (fun b => (a, b)) ⋯) a_1) (Prod.mk a_1 ⁻¹' s) ∂(ρ a).fst

tactic: rfl
state_before: case h
α : Type u_1
β : Type u_2
Ω : Type u_3
mα : MeasurableSpace α
mβ : MeasurableSpace β
inst✝⁴ : MeasurableSpace Ω
inst✝³ : StandardBorelSpace Ω
inst✝² : Nonempty Ω
ρ : ↥(kernel α (β × Ω))
inst✝¹ : IsFiniteKernel ρ
κ : ↥(kernel (α × β) Ω)
inst✝ : IsFiniteKernel κ
hκ : fst ρ ⊗ₖ κ = ρ
a : α
s : Set (β × Ω)
hs : MeasurableSet s
⊢ ∫⁻ (b : β), (κ (a, b)) {c | (b, c) ∈ s} ∂(fst ρ) a =
    ∫⁻ (a_1 : β), ((comap κ (fun b => (a, b)) ⋯) a_1) (Prod.mk a_1 ⁻¹' s) ∂(ρ a).fst
state_after: no goals