Theorem: ProbabilityTheory.condDistrib_ae_eq_of_measure_eq_compProd
File: Mathlib/Probability/Kernel/CondDistrib.lean

tactic: have heq : μ.map X = (μ.map (fun x ↦ (X x, Y x))).fst := by
  ext s hs
  rw [Measure.map_apply hX hs, Measure.fst_apply hs, Measure.map_apply]
  exacts [rfl, Measurable.prod hX hY, measurable_fst hs]
state_before: α : Type u_1
β : Type u_2
Ω : Type u_3
F : Type u_4
inst✝⁵ : MeasurableSpace Ω
inst✝⁴ : StandardBorelSpace Ω
inst✝³ : Nonempty Ω
inst✝² : NormedAddCommGroup F
mα : MeasurableSpace α
μ : Measure α
inst✝¹ : IsFiniteMeasure μ
X : α → β
Y : α → Ω
mβ : MeasurableSpace β
s : Set Ω
t : Set β
f : β × Ω → F
hX : Measurable X
hY : Measurable Y
κ : ↥(kernel β Ω)
inst✝ : IsFiniteKernel κ
hκ : Measure.map (fun x => (X x, Y x)) μ = Measure.map X μ ⊗ₘ κ
⊢ ∀ᵐ (x : β) ∂Measure.map X μ, κ x = (condDistrib Y X μ) x
state_after: α : Type u_1
β : Type u_2
Ω : Type u_3
F : Type u_4
inst✝⁵ : MeasurableSpace Ω
inst✝⁴ : StandardBorelSpace Ω
inst✝³ : Nonempty Ω
inst✝² : NormedAddCommGroup F
mα : MeasurableSpace α
μ : Measure α
inst✝¹ : IsFiniteMeasure μ
X : α → β
Y : α → Ω
mβ : MeasurableSpace β
s : Set Ω
t : Set β
f : β × Ω → F
hX : Measurable X
hY : Measurable Y
κ : ↥(kernel β Ω)
inst✝ : IsFiniteKernel κ
hκ : Measure.map (fun x => (X x, Y x)) μ = Measure.map X μ ⊗ₘ κ
heq : Measure.map X μ = (Measure.map (fun x => (X x, Y x)) μ).fst
⊢ ∀ᵐ (x : β) ∂Measure.map X μ, κ x = (condDistrib Y X μ) x

tactic: rw [heq, condDistrib]
state_before: α : Type u_1
β : Type u_2
Ω : Type u_3
F : Type u_4
inst✝⁵ : MeasurableSpace Ω
inst✝⁴ : StandardBorelSpace Ω
inst✝³ : Nonempty Ω
inst✝² : NormedAddCommGroup F
mα : MeasurableSpace α
μ : Measure α
inst✝¹ : IsFiniteMeasure μ
X : α → β
Y : α → Ω
mβ : MeasurableSpace β
s : Set Ω
t : Set β
f : β × Ω → F
hX : Measurable X
hY : Measurable Y
κ : ↥(kernel β Ω)
inst✝ : IsFiniteKernel κ
hκ : Measure.map (fun x => (X x, Y x)) μ = Measure.map X μ ⊗ₘ κ
heq : Measure.map X μ = (Measure.map (fun x => (X x, Y x)) μ).fst
⊢ ∀ᵐ (x : β) ∂Measure.map X μ, κ x = (condDistrib Y X μ) x
state_after: α : Type u_1
β : Type u_2
Ω : Type u_3
F : Type u_4
inst✝⁵ : MeasurableSpace Ω
inst✝⁴ : StandardBorelSpace Ω
inst✝³ : Nonempty Ω
inst✝² : NormedAddCommGroup F
mα : MeasurableSpace α
μ : Measure α
inst✝¹ : IsFiniteMeasure μ
X : α → β
Y : α → Ω
mβ : MeasurableSpace β
s : Set Ω
t : Set β
f : β × Ω → F
hX : Measurable X
hY : Measurable Y
κ : ↥(kernel β Ω)
inst✝ : IsFiniteKernel κ
hκ : Measure.map (fun x => (X x, Y x)) μ = Measure.map X μ ⊗ₘ κ
heq : Measure.map X μ = (Measure.map (fun x => (X x, Y x)) μ).fst
⊢ ∀ᵐ (x : β) ∂(Measure.map (fun x => (X x, Y x)) μ).fst, κ x = (Measure.map (fun a => (X a, Y a)) μ).condKernel x

tactic: refine eq_condKernel_of_measure_eq_compProd _ ?_
state_before: α : Type u_1
β : Type u_2
Ω : Type u_3
F : Type u_4
inst✝⁵ : MeasurableSpace Ω
inst✝⁴ : StandardBorelSpace Ω
inst✝³ : Nonempty Ω
inst✝² : NormedAddCommGroup F
mα : MeasurableSpace α
μ : Measure α
inst✝¹ : IsFiniteMeasure μ
X : α → β
Y : α → Ω
mβ : MeasurableSpace β
s : Set Ω
t : Set β
f : β × Ω → F
hX : Measurable X
hY : Measurable Y
κ : ↥(kernel β Ω)
inst✝ : IsFiniteKernel κ
hκ : Measure.map (fun x => (X x, Y x)) μ = Measure.map X μ ⊗ₘ κ
heq : Measure.map X μ = (Measure.map (fun x => (X x, Y x)) μ).fst
⊢ ∀ᵐ (x : β) ∂(Measure.map (fun x => (X x, Y x)) μ).fst, κ x = (Measure.map (fun a => (X a, Y a)) μ).condKernel x
state_after: α : Type u_1
β : Type u_2
Ω : Type u_3
F : Type u_4
inst✝⁵ : MeasurableSpace Ω
inst✝⁴ : StandardBorelSpace Ω
inst✝³ : Nonempty Ω
inst✝² : NormedAddCommGroup F
mα : MeasurableSpace α
μ : Measure α
inst✝¹ : IsFiniteMeasure μ
X : α → β
Y : α → Ω
mβ : MeasurableSpace β
s : Set Ω
t : Set β
f : β × Ω → F
hX : Measurable X
hY : Measurable Y
κ : ↥(kernel β Ω)
inst✝ : IsFiniteKernel κ
hκ : Measure.map (fun x => (X x, Y x)) μ = Measure.map X μ ⊗ₘ κ
heq : Measure.map X μ = (Measure.map (fun x => (X x, Y x)) μ).fst
⊢ Measure.map (fun a => (X a, Y a)) μ = (Measure.map (fun a => (X a, Y a)) μ).fst ⊗ₘ κ

tactic: convert hκ
state_before: α : Type u_1
β : Type u_2
Ω : Type u_3
F : Type u_4
inst✝⁵ : MeasurableSpace Ω
inst✝⁴ : StandardBorelSpace Ω
inst✝³ : Nonempty Ω
inst✝² : NormedAddCommGroup F
mα : MeasurableSpace α
μ : Measure α
inst✝¹ : IsFiniteMeasure μ
X : α → β
Y : α → Ω
mβ : MeasurableSpace β
s : Set Ω
t : Set β
f : β × Ω → F
hX : Measurable X
hY : Measurable Y
κ : ↥(kernel β Ω)
inst✝ : IsFiniteKernel κ
hκ : Measure.map (fun x => (X x, Y x)) μ = Measure.map X μ ⊗ₘ κ
heq : Measure.map X μ = (Measure.map (fun x => (X x, Y x)) μ).fst
⊢ Measure.map (fun a => (X a, Y a)) μ = (Measure.map (fun a => (X a, Y a)) μ).fst ⊗ₘ κ
state_after: case h.e'_3.h.e'_5
α : Type u_1
β : Type u_2
Ω : Type u_3
F : Type u_4
inst✝⁵ : MeasurableSpace Ω
inst✝⁴ : StandardBorelSpace Ω
inst✝³ : Nonempty Ω
inst✝² : NormedAddCommGroup F
mα : MeasurableSpace α
μ : Measure α
inst✝¹ : IsFiniteMeasure μ
X : α → β
Y : α → Ω
mβ : MeasurableSpace β
s : Set Ω
t : Set β
f : β × Ω → F
hX : Measurable X
hY : Measurable Y
κ : ↥(kernel β Ω)
inst✝ : IsFiniteKernel κ
hκ : Measure.map (fun x => (X x, Y x)) μ = Measure.map X μ ⊗ₘ κ
heq : Measure.map X μ = (Measure.map (fun x => (X x, Y x)) μ).fst
⊢ (Measure.map (fun a => (X a, Y a)) μ).fst = Measure.map X μ

tactic: exact heq.symm
state_before: case h.e'_3.h.e'_5
α : Type u_1
β : Type u_2
Ω : Type u_3
F : Type u_4
inst✝⁵ : MeasurableSpace Ω
inst✝⁴ : StandardBorelSpace Ω
inst✝³ : Nonempty Ω
inst✝² : NormedAddCommGroup F
mα : MeasurableSpace α
μ : Measure α
inst✝¹ : IsFiniteMeasure μ
X : α → β
Y : α → Ω
mβ : MeasurableSpace β
s : Set Ω
t : Set β
f : β × Ω → F
hX : Measurable X
hY : Measurable Y
κ : ↥(kernel β Ω)
inst✝ : IsFiniteKernel κ
hκ : Measure.map (fun x => (X x, Y x)) μ = Measure.map X μ ⊗ₘ κ
heq : Measure.map X μ = (Measure.map (fun x => (X x, Y x)) μ).fst
⊢ (Measure.map (fun a => (X a, Y a)) μ).fst = Measure.map X μ
state_after: no goals

tactic: ext s hs
state_before: α : Type u_1
β : Type u_2
Ω : Type u_3
F : Type u_4
inst✝⁵ : MeasurableSpace Ω
inst✝⁴ : StandardBorelSpace Ω
inst✝³ : Nonempty Ω
inst✝² : NormedAddCommGroup F
mα : MeasurableSpace α
μ : Measure α
inst✝¹ : IsFiniteMeasure μ
X : α → β
Y : α → Ω
mβ : MeasurableSpace β
s : Set Ω
t : Set β
f : β × Ω → F
hX : Measurable X
hY : Measurable Y
κ : ↥(kernel β Ω)
inst✝ : IsFiniteKernel κ
hκ : Measure.map (fun x => (X x, Y x)) μ = Measure.map X μ ⊗ₘ κ
⊢ Measure.map X μ = (Measure.map (fun x => (X x, Y x)) μ).fst
state_after: case h
α : Type u_1
β : Type u_2
Ω : Type u_3
F : Type u_4
inst✝⁵ : MeasurableSpace Ω
inst✝⁴ : StandardBorelSpace Ω
inst✝³ : Nonempty Ω
inst✝² : NormedAddCommGroup F
mα : MeasurableSpace α
μ : Measure α
inst✝¹ : IsFiniteMeasure μ
X : α → β
Y : α → Ω
mβ : MeasurableSpace β
s✝ : Set Ω
t : Set β
f : β × Ω → F
hX : Measurable X
hY : Measurable Y
κ : ↥(kernel β Ω)
inst✝ : IsFiniteKernel κ
hκ : Measure.map (fun x => (X x, Y x)) μ = Measure.map X μ ⊗ₘ κ
s : Set β
hs : MeasurableSet s
⊢ (Measure.map X μ) s = (Measure.map (fun x => (X x, Y x)) μ).fst s

tactic: rw [Measure.map_apply hX hs, Measure.fst_apply hs, Measure.map_apply]
state_before: case h
α : Type u_1
β : Type u_2
Ω : Type u_3
F : Type u_4
inst✝⁵ : MeasurableSpace Ω
inst✝⁴ : StandardBorelSpace Ω
inst✝³ : Nonempty Ω
inst✝² : NormedAddCommGroup F
mα : MeasurableSpace α
μ : Measure α
inst✝¹ : IsFiniteMeasure μ
X : α → β
Y : α → Ω
mβ : MeasurableSpace β
s✝ : Set Ω
t : Set β
f : β × Ω → F
hX : Measurable X
hY : Measurable Y
κ : ↥(kernel β Ω)
inst✝ : IsFiniteKernel κ
hκ : Measure.map (fun x => (X x, Y x)) μ = Measure.map X μ ⊗ₘ κ
s : Set β
hs : MeasurableSet s
⊢ (Measure.map X μ) s = (Measure.map (fun x => (X x, Y x)) μ).fst s
state_after: case h
α : Type u_1
β : Type u_2
Ω : Type u_3
F : Type u_4
inst✝⁵ : MeasurableSpace Ω
inst✝⁴ : StandardBorelSpace Ω
inst✝³ : Nonempty Ω
inst✝² : NormedAddCommGroup F
mα : MeasurableSpace α
μ : Measure α
inst✝¹ : IsFiniteMeasure μ
X : α → β
Y : α → Ω
mβ : MeasurableSpace β
s✝ : Set Ω
t : Set β
f : β × Ω → F
hX : Measurable X
hY : Measurable Y
κ : ↥(kernel β Ω)
inst✝ : IsFiniteKernel κ
hκ : Measure.map (fun x => (X x, Y x)) μ = Measure.map X μ ⊗ₘ κ
s : Set β
hs : MeasurableSet s
⊢ μ (X ⁻¹' s) = μ ((fun x => (X x, Y x)) ⁻¹' (Prod.fst ⁻¹' s))

case h.hf
α : Type u_1
β : Type u_2
Ω : Type u_3
F : Type u_4
inst✝⁵ : MeasurableSpace Ω
inst✝⁴ : StandardBorelSpace Ω
inst✝³ : Nonempty Ω
inst✝² : NormedAddCommGroup F
mα : MeasurableSpace α
μ : Measure α
inst✝¹ : IsFiniteMeasure μ
X : α → β
Y : α → Ω
mβ : MeasurableSpace β
s✝ : Set Ω
t : Set β
f : β × Ω → F
hX : Measurable X
hY : Measurable Y
κ : ↥(kernel β Ω)
inst✝ : IsFiniteKernel κ
hκ : Measure.map (fun x => (X x, Y x)) μ = Measure.map X μ ⊗ₘ κ
s : Set β
hs : MeasurableSet s
⊢ Measurable fun x => (X x, Y x)

case h.hs
α : Type u_1
β : Type u_2
Ω : Type u_3
F : Type u_4
inst✝⁵ : MeasurableSpace Ω
inst✝⁴ : StandardBorelSpace Ω
inst✝³ : Nonempty Ω
inst✝² : NormedAddCommGroup F
mα : MeasurableSpace α
μ : Measure α
inst✝¹ : IsFiniteMeasure μ
X : α → β
Y : α → Ω
mβ : MeasurableSpace β
s✝ : Set Ω
t : Set β
f : β × Ω → F
hX : Measurable X
hY : Measurable Y
κ : ↥(kernel β Ω)
inst✝ : IsFiniteKernel κ
hκ : Measure.map (fun x => (X x, Y x)) μ = Measure.map X μ ⊗ₘ κ
s : Set β
hs : MeasurableSet s
⊢ MeasurableSet (Prod.fst ⁻¹' s)

tactic: exacts [rfl, Measurable.prod hX hY, measurable_fst hs]
state_before: case h
α : Type u_1
β : Type u_2
Ω : Type u_3
F : Type u_4
inst✝⁵ : MeasurableSpace Ω
inst✝⁴ : StandardBorelSpace Ω
inst✝³ : Nonempty Ω
inst✝² : NormedAddCommGroup F
mα : MeasurableSpace α
μ : Measure α
inst✝¹ : IsFiniteMeasure μ
X : α → β
Y : α → Ω
mβ : MeasurableSpace β
s✝ : Set Ω
t : Set β
f : β × Ω → F
hX : Measurable X
hY : Measurable Y
κ : ↥(kernel β Ω)
inst✝ : IsFiniteKernel κ
hκ : Measure.map (fun x => (X x, Y x)) μ = Measure.map X μ ⊗ₘ κ
s : Set β
hs : MeasurableSet s
⊢ μ (X ⁻¹' s) = μ ((fun x => (X x, Y x)) ⁻¹' (Prod.fst ⁻¹' s))

case h.hf
α : Type u_1
β : Type u_2
Ω : Type u_3
F : Type u_4
inst✝⁵ : MeasurableSpace Ω
inst✝⁴ : StandardBorelSpace Ω
inst✝³ : Nonempty Ω
inst✝² : NormedAddCommGroup F
mα : MeasurableSpace α
μ : Measure α
inst✝¹ : IsFiniteMeasure μ
X : α → β
Y : α → Ω
mβ : MeasurableSpace β
s✝ : Set Ω
t : Set β
f : β × Ω → F
hX : Measurable X
hY : Measurable Y
κ : ↥(kernel β Ω)
inst✝ : IsFiniteKernel κ
hκ : Measure.map (fun x => (X x, Y x)) μ = Measure.map X μ ⊗ₘ κ
s : Set β
hs : MeasurableSet s
⊢ Measurable fun x => (X x, Y x)

case h.hs
α : Type u_1
β : Type u_2
Ω : Type u_3
F : Type u_4
inst✝⁵ : MeasurableSpace Ω
inst✝⁴ : StandardBorelSpace Ω
inst✝³ : Nonempty Ω
inst✝² : NormedAddCommGroup F
mα : MeasurableSpace α
μ : Measure α
inst✝¹ : IsFiniteMeasure μ
X : α → β
Y : α → Ω
mβ : MeasurableSpace β
s✝ : Set Ω
t : Set β
f : β × Ω → F
hX : Measurable X
hY : Measurable Y
κ : ↥(kernel β Ω)
inst✝ : IsFiniteKernel κ
hκ : Measure.map (fun x => (X x, Y x)) μ = Measure.map X μ ⊗ₘ κ
s : Set β
hs : MeasurableSet s
⊢ MeasurableSet (Prod.fst ⁻¹' s)
state_after: no goals