Theorem: ProbabilityTheory.kernel.compProd_fst_borelMarkovFromReal
File: Mathlib/Probability/Kernel/Disintegration/Basic.lean

tactic: let e := embeddingReal Ω
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
Ω : Type u_4
mα : MeasurableSpace α
mβ : MeasurableSpace β
mγ : MeasurableSpace γ
inst✝⁵ : CountablyGenerated γ
inst✝⁴ : MeasurableSpace Ω
inst✝³ : StandardBorelSpace Ω
inst✝² : Nonempty Ω
κ : ↥(kernel α (β × Ω))
inst✝¹ : IsSFiniteKernel κ
η : ↥(kernel (α × β) ℝ)
inst✝ : IsSFiniteKernel η
hη : fst (map κ (Prod.map id (embeddingReal Ω)) ⋯) ⊗ₖ η = map κ (Prod.map id (embeddingReal Ω)) ⋯
⊢ fst κ ⊗ₖ borelMarkovFromReal Ω η = κ
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
Ω : Type u_4
mα : MeasurableSpace α
mβ : MeasurableSpace β
mγ : MeasurableSpace γ
inst✝⁵ : CountablyGenerated γ
inst✝⁴ : MeasurableSpace Ω
inst✝³ : StandardBorelSpace Ω
inst✝² : Nonempty Ω
κ : ↥(kernel α (β × Ω))
inst✝¹ : IsSFiniteKernel κ
η : ↥(kernel (α × β) ℝ)
inst✝ : IsSFiniteKernel η
hη : fst (map κ (Prod.map id (embeddingReal Ω)) ⋯) ⊗ₖ η = map κ (Prod.map id (embeddingReal Ω)) ⋯
e : Ω → ℝ := embeddingReal Ω
⊢ fst κ ⊗ₖ borelMarkovFromReal Ω η = κ

tactic: let he := measurableEmbedding_embeddingReal Ω
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
Ω : Type u_4
mα : MeasurableSpace α
mβ : MeasurableSpace β
mγ : MeasurableSpace γ
inst✝⁵ : CountablyGenerated γ
inst✝⁴ : MeasurableSpace Ω
inst✝³ : StandardBorelSpace Ω
inst✝² : Nonempty Ω
κ : ↥(kernel α (β × Ω))
inst✝¹ : IsSFiniteKernel κ
η : ↥(kernel (α × β) ℝ)
inst✝ : IsSFiniteKernel η
hη : fst (map κ (Prod.map id (embeddingReal Ω)) ⋯) ⊗ₖ η = map κ (Prod.map id (embeddingReal Ω)) ⋯
e : Ω → ℝ := embeddingReal Ω
⊢ fst κ ⊗ₖ borelMarkovFromReal Ω η = κ
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
Ω : Type u_4
mα : MeasurableSpace α
mβ : MeasurableSpace β
mγ : MeasurableSpace γ
inst✝⁵ : CountablyGenerated γ
inst✝⁴ : MeasurableSpace Ω
inst✝³ : StandardBorelSpace Ω
inst✝² : Nonempty Ω
κ : ↥(kernel α (β × Ω))
inst✝¹ : IsSFiniteKernel κ
η : ↥(kernel (α × β) ℝ)
inst✝ : IsSFiniteKernel η
hη : fst (map κ (Prod.map id (embeddingReal Ω)) ⋯) ⊗ₖ η = map κ (Prod.map id (embeddingReal Ω)) ⋯
e : Ω → ℝ := embeddingReal Ω
he : MeasurableEmbedding (embeddingReal Ω) := measurableEmbedding_embeddingReal Ω
⊢ fst κ ⊗ₖ borelMarkovFromReal Ω η = κ

tactic: let κ' := map κ (Prod.map (id : β → β) e) (measurable_id.prod_map he.measurable)
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
Ω : Type u_4
mα : MeasurableSpace α
mβ : MeasurableSpace β
mγ : MeasurableSpace γ
inst✝⁵ : CountablyGenerated γ
inst✝⁴ : MeasurableSpace Ω
inst✝³ : StandardBorelSpace Ω
inst✝² : Nonempty Ω
κ : ↥(kernel α (β × Ω))
inst✝¹ : IsSFiniteKernel κ
η : ↥(kernel (α × β) ℝ)
inst✝ : IsSFiniteKernel η
hη : fst (map κ (Prod.map id (embeddingReal Ω)) ⋯) ⊗ₖ η = map κ (Prod.map id (embeddingReal Ω)) ⋯
e : Ω → ℝ := embeddingReal Ω
he : MeasurableEmbedding (embeddingReal Ω) := measurableEmbedding_embeddingReal Ω
⊢ fst κ ⊗ₖ borelMarkovFromReal Ω η = κ
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
Ω : Type u_4
mα : MeasurableSpace α
mβ : MeasurableSpace β
mγ : MeasurableSpace γ
inst✝⁵ : CountablyGenerated γ
inst✝⁴ : MeasurableSpace Ω
inst✝³ : StandardBorelSpace Ω
inst✝² : Nonempty Ω
κ : ↥(kernel α (β × Ω))
inst✝¹ : IsSFiniteKernel κ
η : ↥(kernel (α × β) ℝ)
inst✝ : IsSFiniteKernel η
hη : fst (map κ (Prod.map id (embeddingReal Ω)) ⋯) ⊗ₖ η = map κ (Prod.map id (embeddingReal Ω)) ⋯
e : Ω → ℝ := embeddingReal Ω
he : MeasurableEmbedding (embeddingReal Ω) := measurableEmbedding_embeddingReal Ω
κ' : ↥(kernel α (β × ℝ)) := map κ (Prod.map id e) ⋯
⊢ fst κ ⊗ₖ borelMarkovFromReal Ω η = κ

tactic: have hη' : fst κ' ⊗ₖ η = κ' := hη
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
Ω : Type u_4
mα : MeasurableSpace α
mβ : MeasurableSpace β
mγ : MeasurableSpace γ
inst✝⁵ : CountablyGenerated γ
inst✝⁴ : MeasurableSpace Ω
inst✝³ : StandardBorelSpace Ω
inst✝² : Nonempty Ω
κ : ↥(kernel α (β × Ω))
inst✝¹ : IsSFiniteKernel κ
η : ↥(kernel (α × β) ℝ)
inst✝ : IsSFiniteKernel η
hη : fst (map κ (Prod.map id (embeddingReal Ω)) ⋯) ⊗ₖ η = map κ (Prod.map id (embeddingReal Ω)) ⋯
e : Ω → ℝ := embeddingReal Ω
he : MeasurableEmbedding (embeddingReal Ω) := measurableEmbedding_embeddingReal Ω
κ' : ↥(kernel α (β × ℝ)) := map κ (Prod.map id e) ⋯
⊢ fst κ ⊗ₖ borelMarkovFromReal Ω η = κ
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
Ω : Type u_4
mα : MeasurableSpace α
mβ : MeasurableSpace β
mγ : MeasurableSpace γ
inst✝⁵ : CountablyGenerated γ
inst✝⁴ : MeasurableSpace Ω
inst✝³ : StandardBorelSpace Ω
inst✝² : Nonempty Ω
κ : ↥(kernel α (β × Ω))
inst✝¹ : IsSFiniteKernel κ
η : ↥(kernel (α × β) ℝ)
inst✝ : IsSFiniteKernel η
hη : fst (map κ (Prod.map id (embeddingReal Ω)) ⋯) ⊗ₖ η = map κ (Prod.map id (embeddingReal Ω)) ⋯
e : Ω → ℝ := embeddingReal Ω
he : MeasurableEmbedding (embeddingReal Ω) := measurableEmbedding_embeddingReal Ω
κ' : ↥(kernel α (β × ℝ)) := map κ (Prod.map id e) ⋯
hη' : fst κ' ⊗ₖ η = κ'
⊢ fst κ ⊗ₖ borelMarkovFromReal Ω η = κ

tactic: have h_prod_embed : MeasurableEmbedding (Prod.map (id : β → β) e) :=
  MeasurableEmbedding.id.prod_mk he
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
Ω : Type u_4
mα : MeasurableSpace α
mβ : MeasurableSpace β
mγ : MeasurableSpace γ
inst✝⁵ : CountablyGenerated γ
inst✝⁴ : MeasurableSpace Ω
inst✝³ : StandardBorelSpace Ω
inst✝² : Nonempty Ω
κ : ↥(kernel α (β × Ω))
inst✝¹ : IsSFiniteKernel κ
η : ↥(kernel (α × β) ℝ)
inst✝ : IsSFiniteKernel η
hη : fst (map κ (Prod.map id (embeddingReal Ω)) ⋯) ⊗ₖ η = map κ (Prod.map id (embeddingReal Ω)) ⋯
e : Ω → ℝ := embeddingReal Ω
he : MeasurableEmbedding (embeddingReal Ω) := measurableEmbedding_embeddingReal Ω
κ' : ↥(kernel α (β × ℝ)) := map κ (Prod.map id e) ⋯
hη' : fst κ' ⊗ₖ η = κ'
⊢ fst κ ⊗ₖ borelMarkovFromReal Ω η = κ
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
Ω : Type u_4
mα : MeasurableSpace α
mβ : MeasurableSpace β
mγ : MeasurableSpace γ
inst✝⁵ : CountablyGenerated γ
inst✝⁴ : MeasurableSpace Ω
inst✝³ : StandardBorelSpace Ω
inst✝² : Nonempty Ω
κ : ↥(kernel α (β × Ω))
inst✝¹ : IsSFiniteKernel κ
η : ↥(kernel (α × β) ℝ)
inst✝ : IsSFiniteKernel η
hη : fst (map κ (Prod.map id (embeddingReal Ω)) ⋯) ⊗ₖ η = map κ (Prod.map id (embeddingReal Ω)) ⋯
e : Ω → ℝ := embeddingReal Ω
he : MeasurableEmbedding (embeddingReal Ω) := measurableEmbedding_embeddingReal Ω
κ' : ↥(kernel α (β × ℝ)) := map κ (Prod.map id e) ⋯
hη' : fst κ' ⊗ₖ η = κ'
h_prod_embed : MeasurableEmbedding (Prod.map id e)
⊢ fst κ ⊗ₖ borelMarkovFromReal Ω η = κ

tactic: have : κ = comapRight κ' h_prod_embed := by
  ext c t : 2
  unfold_let κ'
  rw [comapRight_apply, map_apply, h_prod_embed.comap_map]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
Ω : Type u_4
mα : MeasurableSpace α
mβ : MeasurableSpace β
mγ : MeasurableSpace γ
inst✝⁵ : CountablyGenerated γ
inst✝⁴ : MeasurableSpace Ω
inst✝³ : StandardBorelSpace Ω
inst✝² : Nonempty Ω
κ : ↥(kernel α (β × Ω))
inst✝¹ : IsSFiniteKernel κ
η : ↥(kernel (α × β) ℝ)
inst✝ : IsSFiniteKernel η
hη : fst (map κ (Prod.map id (embeddingReal Ω)) ⋯) ⊗ₖ η = map κ (Prod.map id (embeddingReal Ω)) ⋯
e : Ω → ℝ := embeddingReal Ω
he : MeasurableEmbedding (embeddingReal Ω) := measurableEmbedding_embeddingReal Ω
κ' : ↥(kernel α (β × ℝ)) := map κ (Prod.map id e) ⋯
hη' : fst κ' ⊗ₖ η = κ'
h_prod_embed : MeasurableEmbedding (Prod.map id e)
⊢ fst κ ⊗ₖ borelMarkovFromReal Ω η = κ
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
Ω : Type u_4
mα : MeasurableSpace α
mβ : MeasurableSpace β
mγ : MeasurableSpace γ
inst✝⁵ : CountablyGenerated γ
inst✝⁴ : MeasurableSpace Ω
inst✝³ : StandardBorelSpace Ω
inst✝² : Nonempty Ω
κ : ↥(kernel α (β × Ω))
inst✝¹ : IsSFiniteKernel κ
η : ↥(kernel (α × β) ℝ)
inst✝ : IsSFiniteKernel η
hη : fst (map κ (Prod.map id (embeddingReal Ω)) ⋯) ⊗ₖ η = map κ (Prod.map id (embeddingReal Ω)) ⋯
e : Ω → ℝ := embeddingReal Ω
he : MeasurableEmbedding (embeddingReal Ω) := measurableEmbedding_embeddingReal Ω
κ' : ↥(kernel α (β × ℝ)) := map κ (Prod.map id e) ⋯
hη' : fst κ' ⊗ₖ η = κ'
h_prod_embed : MeasurableEmbedding (Prod.map id e)
this : κ = comapRight κ' h_prod_embed
⊢ fst κ ⊗ₖ borelMarkovFromReal Ω η = κ

tactic: conv_rhs => rw [this, ← hη']
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
Ω : Type u_4
mα : MeasurableSpace α
mβ : MeasurableSpace β
mγ : MeasurableSpace γ
inst✝⁵ : CountablyGenerated γ
inst✝⁴ : MeasurableSpace Ω
inst✝³ : StandardBorelSpace Ω
inst✝² : Nonempty Ω
κ : ↥(kernel α (β × Ω))
inst✝¹ : IsSFiniteKernel κ
η : ↥(kernel (α × β) ℝ)
inst✝ : IsSFiniteKernel η
hη : fst (map κ (Prod.map id (embeddingReal Ω)) ⋯) ⊗ₖ η = map κ (Prod.map id (embeddingReal Ω)) ⋯
e : Ω → ℝ := embeddingReal Ω
he : MeasurableEmbedding (embeddingReal Ω) := measurableEmbedding_embeddingReal Ω
κ' : ↥(kernel α (β × ℝ)) := map κ (Prod.map id e) ⋯
hη' : fst κ' ⊗ₖ η = κ'
h_prod_embed : MeasurableEmbedding (Prod.map id e)
this : κ = comapRight κ' h_prod_embed
⊢ fst κ ⊗ₖ borelMarkovFromReal Ω η = κ
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
Ω : Type u_4
mα : MeasurableSpace α
mβ : MeasurableSpace β
mγ : MeasurableSpace γ
inst✝⁵ : CountablyGenerated γ
inst✝⁴ : MeasurableSpace Ω
inst✝³ : StandardBorelSpace Ω
inst✝² : Nonempty Ω
κ : ↥(kernel α (β × Ω))
inst✝¹ : IsSFiniteKernel κ
η : ↥(kernel (α × β) ℝ)
inst✝ : IsSFiniteKernel η
hη : fst (map κ (Prod.map id (embeddingReal Ω)) ⋯) ⊗ₖ η = map κ (Prod.map id (embeddingReal Ω)) ⋯
e : Ω → ℝ := embeddingReal Ω
he : MeasurableEmbedding (embeddingReal Ω) := measurableEmbedding_embeddingReal Ω
κ' : ↥(kernel α (β × ℝ)) := map κ (Prod.map id e) ⋯
hη' : fst κ' ⊗ₖ η = κ'
h_prod_embed : MeasurableEmbedding (Prod.map id e)
this : κ = comapRight κ' h_prod_embed
⊢ fst κ ⊗ₖ borelMarkovFromReal Ω η = comapRight (fst κ' ⊗ₖ η) h_prod_embed

tactic: exact compProd_fst_borelMarkovFromReal_eq_comapRight_compProd κ η hη
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
Ω : Type u_4
mα : MeasurableSpace α
mβ : MeasurableSpace β
mγ : MeasurableSpace γ
inst✝⁵ : CountablyGenerated γ
inst✝⁴ : MeasurableSpace Ω
inst✝³ : StandardBorelSpace Ω
inst✝² : Nonempty Ω
κ : ↥(kernel α (β × Ω))
inst✝¹ : IsSFiniteKernel κ
η : ↥(kernel (α × β) ℝ)
inst✝ : IsSFiniteKernel η
hη : fst (map κ (Prod.map id (embeddingReal Ω)) ⋯) ⊗ₖ η = map κ (Prod.map id (embeddingReal Ω)) ⋯
e : Ω → ℝ := embeddingReal Ω
he : MeasurableEmbedding (embeddingReal Ω) := measurableEmbedding_embeddingReal Ω
κ' : ↥(kernel α (β × ℝ)) := map κ (Prod.map id e) ⋯
hη' : fst κ' ⊗ₖ η = κ'
h_prod_embed : MeasurableEmbedding (Prod.map id e)
this : κ = comapRight κ' h_prod_embed
⊢ fst κ ⊗ₖ borelMarkovFromReal Ω η = comapRight (fst κ' ⊗ₖ η) h_prod_embed
state_after: no goals

tactic: ext c t : 2
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
Ω : Type u_4
mα : MeasurableSpace α
mβ : MeasurableSpace β
mγ : MeasurableSpace γ
inst✝⁵ : CountablyGenerated γ
inst✝⁴ : MeasurableSpace Ω
inst✝³ : StandardBorelSpace Ω
inst✝² : Nonempty Ω
κ : ↥(kernel α (β × Ω))
inst✝¹ : IsSFiniteKernel κ
η : ↥(kernel (α × β) ℝ)
inst✝ : IsSFiniteKernel η
hη : fst (map κ (Prod.map id (embeddingReal Ω)) ⋯) ⊗ₖ η = map κ (Prod.map id (embeddingReal Ω)) ⋯
e : Ω → ℝ := embeddingReal Ω
he : MeasurableEmbedding (embeddingReal Ω) := measurableEmbedding_embeddingReal Ω
κ' : ↥(kernel α (β × ℝ)) := map κ (Prod.map id e) ⋯
hη' : fst κ' ⊗ₖ η = κ'
h_prod_embed : MeasurableEmbedding (Prod.map id e)
⊢ κ = comapRight κ' h_prod_embed
state_after: case h.h
α : Type u_1
β : Type u_2
γ : Type u_3
Ω : Type u_4
mα : MeasurableSpace α
mβ : MeasurableSpace β
mγ : MeasurableSpace γ
inst✝⁵ : CountablyGenerated γ
inst✝⁴ : MeasurableSpace Ω
inst✝³ : StandardBorelSpace Ω
inst✝² : Nonempty Ω
κ : ↥(kernel α (β × Ω))
inst✝¹ : IsSFiniteKernel κ
η : ↥(kernel (α × β) ℝ)
inst✝ : IsSFiniteKernel η
hη : fst (map κ (Prod.map id (embeddingReal Ω)) ⋯) ⊗ₖ η = map κ (Prod.map id (embeddingReal Ω)) ⋯
e : Ω → ℝ := embeddingReal Ω
he : MeasurableEmbedding (embeddingReal Ω) := measurableEmbedding_embeddingReal Ω
κ' : ↥(kernel α (β × ℝ)) := map κ (Prod.map id e) ⋯
hη' : fst κ' ⊗ₖ η = κ'
h_prod_embed : MeasurableEmbedding (Prod.map id e)
c : α
t : Set (β × Ω)
a✝ : MeasurableSet t
⊢ (κ c) t = ((comapRight κ' h_prod_embed) c) t

tactic: unfold_let κ'
state_before: case h.h
α : Type u_1
β : Type u_2
γ : Type u_3
Ω : Type u_4
mα : MeasurableSpace α
mβ : MeasurableSpace β
mγ : MeasurableSpace γ
inst✝⁵ : CountablyGenerated γ
inst✝⁴ : MeasurableSpace Ω
inst✝³ : StandardBorelSpace Ω
inst✝² : Nonempty Ω
κ : ↥(kernel α (β × Ω))
inst✝¹ : IsSFiniteKernel κ
η : ↥(kernel (α × β) ℝ)
inst✝ : IsSFiniteKernel η
hη : fst (map κ (Prod.map id (embeddingReal Ω)) ⋯) ⊗ₖ η = map κ (Prod.map id (embeddingReal Ω)) ⋯
e : Ω → ℝ := embeddingReal Ω
he : MeasurableEmbedding (embeddingReal Ω) := measurableEmbedding_embeddingReal Ω
κ' : ↥(kernel α (β × ℝ)) := map κ (Prod.map id e) ⋯
hη' : fst κ' ⊗ₖ η = κ'
h_prod_embed : MeasurableEmbedding (Prod.map id e)
c : α
t : Set (β × Ω)
a✝ : MeasurableSet t
⊢ (κ c) t = ((comapRight κ' h_prod_embed) c) t
state_after: case h.h
α : Type u_1
β : Type u_2
γ : Type u_3
Ω : Type u_4
mα : MeasurableSpace α
mβ : MeasurableSpace β
mγ : MeasurableSpace γ
inst✝⁵ : CountablyGenerated γ
inst✝⁴ : MeasurableSpace Ω
inst✝³ : StandardBorelSpace Ω
inst✝² : Nonempty Ω
κ : ↥(kernel α (β × Ω))
inst✝¹ : IsSFiniteKernel κ
η : ↥(kernel (α × β) ℝ)
inst✝ : IsSFiniteKernel η
hη : fst (map κ (Prod.map id (embeddingReal Ω)) ⋯) ⊗ₖ η = map κ (Prod.map id (embeddingReal Ω)) ⋯
e : Ω → ℝ := embeddingReal Ω
he : MeasurableEmbedding (embeddingReal Ω) := measurableEmbedding_embeddingReal Ω
κ' : ↥(kernel α (β × ℝ)) := map κ (Prod.map id e) ⋯
hη' : fst κ' ⊗ₖ η = κ'
h_prod_embed : MeasurableEmbedding (Prod.map id e)
c : α
t : Set (β × Ω)
a✝ : MeasurableSet t
⊢ (κ c) t = ((comapRight (map κ (Prod.map id e) ⋯) h_prod_embed) c) t

tactic: rw [comapRight_apply, map_apply, h_prod_embed.comap_map]
state_before: case h.h
α : Type u_1
β : Type u_2
γ : Type u_3
Ω : Type u_4
mα : MeasurableSpace α
mβ : MeasurableSpace β
mγ : MeasurableSpace γ
inst✝⁵ : CountablyGenerated γ
inst✝⁴ : MeasurableSpace Ω
inst✝³ : StandardBorelSpace Ω
inst✝² : Nonempty Ω
κ : ↥(kernel α (β × Ω))
inst✝¹ : IsSFiniteKernel κ
η : ↥(kernel (α × β) ℝ)
inst✝ : IsSFiniteKernel η
hη : fst (map κ (Prod.map id (embeddingReal Ω)) ⋯) ⊗ₖ η = map κ (Prod.map id (embeddingReal Ω)) ⋯
e : Ω → ℝ := embeddingReal Ω
he : MeasurableEmbedding (embeddingReal Ω) := measurableEmbedding_embeddingReal Ω
κ' : ↥(kernel α (β × ℝ)) := map κ (Prod.map id e) ⋯
hη' : fst κ' ⊗ₖ η = κ'
h_prod_embed : MeasurableEmbedding (Prod.map id e)
c : α
t : Set (β × Ω)
a✝ : MeasurableSet t
⊢ (κ c) t = ((comapRight (map κ (Prod.map id e) ⋯) h_prod_embed) c) t
state_after: no goals