[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
a : α
⊢ IsProbabilityMeasure (↑(condKernelReal ρ) a)
[PROOFSTEP]
rw [condKernelReal]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
a : α
⊢ IsProbabilityMeasure
    (↑{ val := fun a => StieltjesFunction.measure (condCdf ρ a),
          property := (_ : Measurable fun a => StieltjesFunction.measure (condCdf ρ a)) }
      a)
[PROOFSTEP]
exact instIsProbabilityMeasure ρ a
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
x : ℝ
s : Set α
hs : MeasurableSet s
⊢ ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) (Iic x) ∂Measure.fst ρ = ↑↑ρ (s ×ˢ Iic x)
[PROOFSTEP]
simp_rw [condKernelReal_Iic]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
x : ℝ
s : Set α
hs : MeasurableSet s
⊢ ∫⁻ (a : α) in s, ENNReal.ofReal (↑(condCdf ρ a) x) ∂Measure.fst ρ = ↑↑ρ (s ×ˢ Iic x)
[PROOFSTEP]
exact set_lintegral_condCdf ρ x hs
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
s : Set α
hs : MeasurableSet s
⊢ ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) univ ∂Measure.fst ρ = ↑↑ρ (s ×ˢ univ)
[PROOFSTEP]
simp only [measure_univ, lintegral_const, Measure.restrict_apply, MeasurableSet.univ, univ_inter, one_mul,
  Measure.fst_apply hs, ← prod_univ]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
⊢ ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) univ ∂Measure.fst ρ = ↑↑ρ univ
[PROOFSTEP]
rw [← set_lintegral_univ, set_lintegral_condKernelReal_univ ρ MeasurableSet.univ, univ_prod_univ]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set α
hs : MeasurableSet s
t : Set ℝ
ht : MeasurableSet t
⊢ ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) t ∂Measure.fst ρ = ↑↑ρ (s ×ˢ t)
[PROOFSTEP]
apply MeasurableSpace.induction_on_inter (borel_eq_generateFrom_Iic ℝ) isPiSystem_Iic _ _ _ _ ht
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set α
hs : MeasurableSet s
t : Set ℝ
ht : MeasurableSet t
⊢ ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) ∅ ∂Measure.fst ρ = ↑↑ρ (s ×ˢ ∅)
[PROOFSTEP]
simp only [measure_empty, lintegral_const, zero_mul, prod_empty]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set α
hs : MeasurableSet s
t : Set ℝ
ht : MeasurableSet t
⊢ ∀ (t : Set ℝ), t ∈ range Iic → ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) t ∂Measure.fst ρ = ↑↑ρ (s ×ˢ t)
[PROOFSTEP]
rintro t ⟨q, rfl⟩
[GOAL]
case intro
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set α
hs : MeasurableSet s
t : Set ℝ
ht : MeasurableSet t
q : ℝ
⊢ ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) (Iic q) ∂Measure.fst ρ = ↑↑ρ (s ×ˢ Iic q)
[PROOFSTEP]
exact set_lintegral_condKernelReal_Iic ρ q hs
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set α
hs : MeasurableSet s
t : Set ℝ
ht : MeasurableSet t
⊢ ∀ (t : Set ℝ),
    MeasurableSet t →
      ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) t ∂Measure.fst ρ = ↑↑ρ (s ×ˢ t) →
        ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) tᶜ ∂Measure.fst ρ = ↑↑ρ (s ×ˢ tᶜ)
[PROOFSTEP]
intro t ht ht_lintegral
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set α
hs : MeasurableSet s
t✝ : Set ℝ
ht✝ : MeasurableSet t✝
t : Set ℝ
ht : MeasurableSet t
ht_lintegral : ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) t ∂Measure.fst ρ = ↑↑ρ (s ×ˢ t)
⊢ ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) tᶜ ∂Measure.fst ρ = ↑↑ρ (s ×ˢ tᶜ)
[PROOFSTEP]
calc
  ∫⁻ a in s, condKernelReal ρ a tᶜ ∂ρ.fst = ∫⁻ a in s, condKernelReal ρ a univ - condKernelReal ρ a t ∂ρ.fst := by
    congr with a; rw [measure_compl ht (measure_ne_top (condKernelReal ρ a) _)]
  _ = ∫⁻ a in s, condKernelReal ρ a univ ∂ρ.fst - ∫⁻ a in s, condKernelReal ρ a t ∂ρ.fst :=
    by
    rw [lintegral_sub (kernel.measurable_coe (condKernelReal ρ) ht)]
    · rw [ht_lintegral]
      exact measure_ne_top ρ _
    · exact eventually_of_forall fun a => measure_mono (subset_univ _)
  _ = ρ (s ×ˢ univ) - ρ (s ×ˢ t) := by rw [set_lintegral_condKernelReal_univ ρ hs, ht_lintegral]
  _ = ρ (s ×ˢ tᶜ) := by
    rw [← measure_diff _ (hs.prod ht) (measure_ne_top ρ _)]
    · rw [prod_diff_prod, compl_eq_univ_diff]
      simp only [diff_self, empty_prod, union_empty]
    · rw [prod_subset_prod_iff]
      exact Or.inl ⟨subset_rfl, subset_univ t⟩
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set α
hs : MeasurableSet s
t✝ : Set ℝ
ht✝ : MeasurableSet t✝
t : Set ℝ
ht : MeasurableSet t
ht_lintegral : ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) t ∂Measure.fst ρ = ↑↑ρ (s ×ˢ t)
⊢ ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) tᶜ ∂Measure.fst ρ =
    ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) univ - ↑↑(↑(condKernelReal ρ) a) t ∂Measure.fst ρ
[PROOFSTEP]
congr with a
[GOAL]
case e_f.h
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set α
hs : MeasurableSet s
t✝ : Set ℝ
ht✝ : MeasurableSet t✝
t : Set ℝ
ht : MeasurableSet t
ht_lintegral : ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) t ∂Measure.fst ρ = ↑↑ρ (s ×ˢ t)
a : α
⊢ ↑↑(↑(condKernelReal ρ) a) tᶜ = ↑↑(↑(condKernelReal ρ) a) univ - ↑↑(↑(condKernelReal ρ) a) t
[PROOFSTEP]
rw [measure_compl ht (measure_ne_top (condKernelReal ρ a) _)]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set α
hs : MeasurableSet s
t✝ : Set ℝ
ht✝ : MeasurableSet t✝
t : Set ℝ
ht : MeasurableSet t
ht_lintegral : ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) t ∂Measure.fst ρ = ↑↑ρ (s ×ˢ t)
⊢ ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) univ - ↑↑(↑(condKernelReal ρ) a) t ∂Measure.fst ρ =
    ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) univ ∂Measure.fst ρ -
      ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) t ∂Measure.fst ρ
[PROOFSTEP]
rw [lintegral_sub (kernel.measurable_coe (condKernelReal ρ) ht)]
[GOAL]
case hg_fin
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set α
hs : MeasurableSet s
t✝ : Set ℝ
ht✝ : MeasurableSet t✝
t : Set ℝ
ht : MeasurableSet t
ht_lintegral : ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) t ∂Measure.fst ρ = ↑↑ρ (s ×ˢ t)
⊢ ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) t ∂Measure.fst ρ ≠ ⊤
[PROOFSTEP]
rw [ht_lintegral]
[GOAL]
case hg_fin
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set α
hs : MeasurableSet s
t✝ : Set ℝ
ht✝ : MeasurableSet t✝
t : Set ℝ
ht : MeasurableSet t
ht_lintegral : ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) t ∂Measure.fst ρ = ↑↑ρ (s ×ˢ t)
⊢ ↑↑ρ (s ×ˢ t) ≠ ⊤
[PROOFSTEP]
exact measure_ne_top ρ _
[GOAL]
case h_le
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set α
hs : MeasurableSet s
t✝ : Set ℝ
ht✝ : MeasurableSet t✝
t : Set ℝ
ht : MeasurableSet t
ht_lintegral : ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) t ∂Measure.fst ρ = ↑↑ρ (s ×ˢ t)
⊢ (fun a => ↑↑(↑(condKernelReal ρ) a) t) ≤ᵐ[Measure.restrict (Measure.fst ρ) s] fun a => ↑↑(↑(condKernelReal ρ) a) univ
[PROOFSTEP]
exact eventually_of_forall fun a => measure_mono (subset_univ _)
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set α
hs : MeasurableSet s
t✝ : Set ℝ
ht✝ : MeasurableSet t✝
t : Set ℝ
ht : MeasurableSet t
ht_lintegral : ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) t ∂Measure.fst ρ = ↑↑ρ (s ×ˢ t)
⊢ ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) univ ∂Measure.fst ρ -
      ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) t ∂Measure.fst ρ =
    ↑↑ρ (s ×ˢ univ) - ↑↑ρ (s ×ˢ t)
[PROOFSTEP]
rw [set_lintegral_condKernelReal_univ ρ hs, ht_lintegral]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set α
hs : MeasurableSet s
t✝ : Set ℝ
ht✝ : MeasurableSet t✝
t : Set ℝ
ht : MeasurableSet t
ht_lintegral : ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) t ∂Measure.fst ρ = ↑↑ρ (s ×ˢ t)
⊢ ↑↑ρ (s ×ˢ univ) - ↑↑ρ (s ×ˢ t) = ↑↑ρ (s ×ˢ tᶜ)
[PROOFSTEP]
rw [← measure_diff _ (hs.prod ht) (measure_ne_top ρ _)]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set α
hs : MeasurableSet s
t✝ : Set ℝ
ht✝ : MeasurableSet t✝
t : Set ℝ
ht : MeasurableSet t
ht_lintegral : ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) t ∂Measure.fst ρ = ↑↑ρ (s ×ˢ t)
⊢ ↑↑ρ (s ×ˢ univ \ s ×ˢ t) = ↑↑ρ (s ×ˢ tᶜ)
[PROOFSTEP]
rw [prod_diff_prod, compl_eq_univ_diff]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set α
hs : MeasurableSet s
t✝ : Set ℝ
ht✝ : MeasurableSet t✝
t : Set ℝ
ht : MeasurableSet t
ht_lintegral : ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) t ∂Measure.fst ρ = ↑↑ρ (s ×ˢ t)
⊢ ↑↑ρ (s ×ˢ (univ \ t) ∪ (s \ s) ×ˢ univ) = ↑↑ρ (s ×ˢ (univ \ t))
[PROOFSTEP]
simp only [diff_self, empty_prod, union_empty]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set α
hs : MeasurableSet s
t✝ : Set ℝ
ht✝ : MeasurableSet t✝
t : Set ℝ
ht : MeasurableSet t
ht_lintegral : ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) t ∂Measure.fst ρ = ↑↑ρ (s ×ˢ t)
⊢ s ×ˢ t ⊆ s ×ˢ univ
[PROOFSTEP]
rw [prod_subset_prod_iff]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set α
hs : MeasurableSet s
t✝ : Set ℝ
ht✝ : MeasurableSet t✝
t : Set ℝ
ht : MeasurableSet t
ht_lintegral : ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) t ∂Measure.fst ρ = ↑↑ρ (s ×ˢ t)
⊢ s ⊆ s ∧ t ⊆ univ ∨ s = ∅ ∨ t = ∅
[PROOFSTEP]
exact Or.inl ⟨subset_rfl, subset_univ t⟩
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set α
hs : MeasurableSet s
t : Set ℝ
ht : MeasurableSet t
⊢ ∀ (f : ℕ → Set ℝ),
    Pairwise (Disjoint on f) →
      (∀ (i : ℕ), MeasurableSet (f i)) →
        (∀ (i : ℕ), ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) (f i) ∂Measure.fst ρ = ↑↑ρ (s ×ˢ f i)) →
          ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) (⋃ (i : ℕ), f i) ∂Measure.fst ρ = ↑↑ρ (s ×ˢ ⋃ (i : ℕ), f i)
[PROOFSTEP]
intro f hf_disj hf_meas hf_eq
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set α
hs : MeasurableSet s
t : Set ℝ
ht : MeasurableSet t
f : ℕ → Set ℝ
hf_disj : Pairwise (Disjoint on f)
hf_meas : ∀ (i : ℕ), MeasurableSet (f i)
hf_eq : ∀ (i : ℕ), ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) (f i) ∂Measure.fst ρ = ↑↑ρ (s ×ˢ f i)
⊢ ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) (⋃ (i : ℕ), f i) ∂Measure.fst ρ = ↑↑ρ (s ×ˢ ⋃ (i : ℕ), f i)
[PROOFSTEP]
simp_rw [measure_iUnion hf_disj hf_meas]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set α
hs : MeasurableSet s
t : Set ℝ
ht : MeasurableSet t
f : ℕ → Set ℝ
hf_disj : Pairwise (Disjoint on f)
hf_meas : ∀ (i : ℕ), MeasurableSet (f i)
hf_eq : ∀ (i : ℕ), ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) (f i) ∂Measure.fst ρ = ↑↑ρ (s ×ˢ f i)
⊢ ∫⁻ (a : α) in s, ∑' (i : ℕ), ↑↑(↑(condKernelReal ρ) a) (f i) ∂Measure.fst ρ = ↑↑ρ (s ×ˢ ⋃ (i : ℕ), f i)
[PROOFSTEP]
rw [lintegral_tsum fun i => (kernel.measurable_coe _ (hf_meas i)).aemeasurable.restrict, prod_iUnion, measure_iUnion]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set α
hs : MeasurableSet s
t : Set ℝ
ht : MeasurableSet t
f : ℕ → Set ℝ
hf_disj : Pairwise (Disjoint on f)
hf_meas : ∀ (i : ℕ), MeasurableSet (f i)
hf_eq : ∀ (i : ℕ), ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) (f i) ∂Measure.fst ρ = ↑↑ρ (s ×ˢ f i)
⊢ ∑' (i : ℕ), ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) (f i) ∂Measure.fst ρ = ∑' (i : ℕ), ↑↑ρ (s ×ˢ f i)
[PROOFSTEP]
simp_rw [hf_eq]
[GOAL]
case hn
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set α
hs : MeasurableSet s
t : Set ℝ
ht : MeasurableSet t
f : ℕ → Set ℝ
hf_disj : Pairwise (Disjoint on f)
hf_meas : ∀ (i : ℕ), MeasurableSet (f i)
hf_eq : ∀ (i : ℕ), ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) (f i) ∂Measure.fst ρ = ↑↑ρ (s ×ˢ f i)
⊢ Pairwise (Disjoint on fun i => s ×ˢ f i)
[PROOFSTEP]
intro i j hij
[GOAL]
case hn
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set α
hs : MeasurableSet s
t : Set ℝ
ht : MeasurableSet t
f : ℕ → Set ℝ
hf_disj : Pairwise (Disjoint on f)
hf_meas : ∀ (i : ℕ), MeasurableSet (f i)
hf_eq : ∀ (i : ℕ), ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) (f i) ∂Measure.fst ρ = ↑↑ρ (s ×ˢ f i)
i j : ℕ
hij : i ≠ j
⊢ (Disjoint on fun i => s ×ˢ f i) i j
[PROOFSTEP]
rw [Function.onFun, disjoint_prod]
[GOAL]
case hn
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set α
hs : MeasurableSet s
t : Set ℝ
ht : MeasurableSet t
f : ℕ → Set ℝ
hf_disj : Pairwise (Disjoint on f)
hf_meas : ∀ (i : ℕ), MeasurableSet (f i)
hf_eq : ∀ (i : ℕ), ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) (f i) ∂Measure.fst ρ = ↑↑ρ (s ×ˢ f i)
i j : ℕ
hij : i ≠ j
⊢ Disjoint s s ∨ Disjoint (f i) (f j)
[PROOFSTEP]
exact Or.inr (hf_disj hij)
[GOAL]
case h
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set α
hs : MeasurableSet s
t : Set ℝ
ht : MeasurableSet t
f : ℕ → Set ℝ
hf_disj : Pairwise (Disjoint on f)
hf_meas : ∀ (i : ℕ), MeasurableSet (f i)
hf_eq : ∀ (i : ℕ), ∫⁻ (a : α) in s, ↑↑(↑(condKernelReal ρ) a) (f i) ∂Measure.fst ρ = ↑↑ρ (s ×ˢ f i)
⊢ ∀ (i : ℕ), MeasurableSet (s ×ˢ f i)
[PROOFSTEP]
exact fun i => MeasurableSet.prod hs (hf_meas i)
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
⊢ ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ s} ∂Measure.fst ρ = ↑↑ρ s
[PROOFSTEP]
apply MeasurableSpace.induction_on_inter generateFrom_prod.symm isPiSystem_prod _ _ _ _ hs
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
⊢ ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ ∅} ∂Measure.fst ρ = ↑↑ρ ∅
[PROOFSTEP]
simp only [mem_empty_iff_false, setOf_false, measure_empty, lintegral_const, zero_mul]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
⊢ ∀ (t : Set (α × ℝ)),
    t ∈ image2 (fun x x_1 => x ×ˢ x_1) {s | MeasurableSet s} {t | MeasurableSet t} →
      ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t} ∂Measure.fst ρ = ↑↑ρ t
[PROOFSTEP]
intro t ht
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
t : Set (α × ℝ)
ht : t ∈ image2 (fun x x_1 => x ×ˢ x_1) {s | MeasurableSet s} {t | MeasurableSet t}
⊢ ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t} ∂Measure.fst ρ = ↑↑ρ t
[PROOFSTEP]
rw [mem_image2] at ht 
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
t : Set (α × ℝ)
ht : ∃ a b, a ∈ {s | MeasurableSet s} ∧ b ∈ {t | MeasurableSet t} ∧ a ×ˢ b = t
⊢ ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t} ∂Measure.fst ρ = ↑↑ρ t
[PROOFSTEP]
obtain ⟨t₁, t₂, ht₁, ht₂, rfl⟩ := ht
[GOAL]
case intro.intro.intro.intro
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
t₁ : Set α
t₂ : Set ℝ
ht₁ : t₁ ∈ {s | MeasurableSet s}
ht₂ : t₂ ∈ {t | MeasurableSet t}
⊢ ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t₁ ×ˢ t₂} ∂Measure.fst ρ = ↑↑ρ (t₁ ×ˢ t₂)
[PROOFSTEP]
have h_prod_eq_snd : ∀ a ∈ t₁, {x : ℝ | (a, x) ∈ t₁ ×ˢ t₂} = t₂ :=
  by
  intro a ha
  simp only [ha, prod_mk_mem_set_prod_eq, true_and_iff, setOf_mem_eq]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
t₁ : Set α
t₂ : Set ℝ
ht₁ : t₁ ∈ {s | MeasurableSet s}
ht₂ : t₂ ∈ {t | MeasurableSet t}
⊢ ∀ (a : α), a ∈ t₁ → {x | (a, x) ∈ t₁ ×ˢ t₂} = t₂
[PROOFSTEP]
intro a ha
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
t₁ : Set α
t₂ : Set ℝ
ht₁ : t₁ ∈ {s | MeasurableSet s}
ht₂ : t₂ ∈ {t | MeasurableSet t}
a : α
ha : a ∈ t₁
⊢ {x | (a, x) ∈ t₁ ×ˢ t₂} = t₂
[PROOFSTEP]
simp only [ha, prod_mk_mem_set_prod_eq, true_and_iff, setOf_mem_eq]
[GOAL]
case intro.intro.intro.intro
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
t₁ : Set α
t₂ : Set ℝ
ht₁ : t₁ ∈ {s | MeasurableSet s}
ht₂ : t₂ ∈ {t | MeasurableSet t}
h_prod_eq_snd : ∀ (a : α), a ∈ t₁ → {x | (a, x) ∈ t₁ ×ˢ t₂} = t₂
⊢ ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t₁ ×ˢ t₂} ∂Measure.fst ρ = ↑↑ρ (t₁ ×ˢ t₂)
[PROOFSTEP]
cases' eq_empty_or_nonempty t₂ with h h
[GOAL]
case intro.intro.intro.intro.inl
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
t₁ : Set α
t₂ : Set ℝ
ht₁ : t₁ ∈ {s | MeasurableSet s}
ht₂ : t₂ ∈ {t | MeasurableSet t}
h_prod_eq_snd : ∀ (a : α), a ∈ t₁ → {x | (a, x) ∈ t₁ ×ˢ t₂} = t₂
h : t₂ = ∅
⊢ ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t₁ ×ˢ t₂} ∂Measure.fst ρ = ↑↑ρ (t₁ ×ˢ t₂)
[PROOFSTEP]
simp only [h, prod_empty, mem_empty_iff_false, setOf_false, measure_empty, lintegral_const, zero_mul]
[GOAL]
case intro.intro.intro.intro.inr
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
t₁ : Set α
t₂ : Set ℝ
ht₁ : t₁ ∈ {s | MeasurableSet s}
ht₂ : t₂ ∈ {t | MeasurableSet t}
h_prod_eq_snd : ∀ (a : α), a ∈ t₁ → {x | (a, x) ∈ t₁ ×ˢ t₂} = t₂
h : Set.Nonempty t₂
⊢ ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t₁ ×ˢ t₂} ∂Measure.fst ρ = ↑↑ρ (t₁ ×ˢ t₂)
[PROOFSTEP]
rw [← lintegral_add_compl _ ht₁]
[GOAL]
case intro.intro.intro.intro.inr
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
t₁ : Set α
t₂ : Set ℝ
ht₁ : t₁ ∈ {s | MeasurableSet s}
ht₂ : t₂ ∈ {t | MeasurableSet t}
h_prod_eq_snd : ∀ (a : α), a ∈ t₁ → {x | (a, x) ∈ t₁ ×ˢ t₂} = t₂
h : Set.Nonempty t₂
⊢ ∫⁻ (x : α) in t₁, ↑↑(↑(condKernelReal ρ) x) {x_1 | (x, x_1) ∈ t₁ ×ˢ t₂} ∂Measure.fst ρ +
      ∫⁻ (x : α) in t₁ᶜ, ↑↑(↑(condKernelReal ρ) x) {x_1 | (x, x_1) ∈ t₁ ×ˢ t₂} ∂Measure.fst ρ =
    ↑↑ρ (t₁ ×ˢ t₂)
[PROOFSTEP]
have h_eq1 :
  ∫⁻ a in t₁, condKernelReal ρ a {x : ℝ | (a, x) ∈ t₁ ×ˢ t₂} ∂ρ.fst = ∫⁻ a in t₁, condKernelReal ρ a t₂ ∂ρ.fst :=
  by
  refine' set_lintegral_congr_fun ht₁ (eventually_of_forall fun a ha => _)
  rw [h_prod_eq_snd a ha]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
t₁ : Set α
t₂ : Set ℝ
ht₁ : t₁ ∈ {s | MeasurableSet s}
ht₂ : t₂ ∈ {t | MeasurableSet t}
h_prod_eq_snd : ∀ (a : α), a ∈ t₁ → {x | (a, x) ∈ t₁ ×ˢ t₂} = t₂
h : Set.Nonempty t₂
⊢ ∫⁻ (a : α) in t₁, ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t₁ ×ˢ t₂} ∂Measure.fst ρ =
    ∫⁻ (a : α) in t₁, ↑↑(↑(condKernelReal ρ) a) t₂ ∂Measure.fst ρ
[PROOFSTEP]
refine' set_lintegral_congr_fun ht₁ (eventually_of_forall fun a ha => _)
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
t₁ : Set α
t₂ : Set ℝ
ht₁ : t₁ ∈ {s | MeasurableSet s}
ht₂ : t₂ ∈ {t | MeasurableSet t}
h_prod_eq_snd : ∀ (a : α), a ∈ t₁ → {x | (a, x) ∈ t₁ ×ˢ t₂} = t₂
h : Set.Nonempty t₂
a : α
ha : a ∈ t₁
⊢ ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t₁ ×ˢ t₂} = ↑↑(↑(condKernelReal ρ) a) t₂
[PROOFSTEP]
rw [h_prod_eq_snd a ha]
[GOAL]
case intro.intro.intro.intro.inr
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
t₁ : Set α
t₂ : Set ℝ
ht₁ : t₁ ∈ {s | MeasurableSet s}
ht₂ : t₂ ∈ {t | MeasurableSet t}
h_prod_eq_snd : ∀ (a : α), a ∈ t₁ → {x | (a, x) ∈ t₁ ×ˢ t₂} = t₂
h : Set.Nonempty t₂
h_eq1 :
  ∫⁻ (a : α) in t₁, ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t₁ ×ˢ t₂} ∂Measure.fst ρ =
    ∫⁻ (a : α) in t₁, ↑↑(↑(condKernelReal ρ) a) t₂ ∂Measure.fst ρ
⊢ ∫⁻ (x : α) in t₁, ↑↑(↑(condKernelReal ρ) x) {x_1 | (x, x_1) ∈ t₁ ×ˢ t₂} ∂Measure.fst ρ +
      ∫⁻ (x : α) in t₁ᶜ, ↑↑(↑(condKernelReal ρ) x) {x_1 | (x, x_1) ∈ t₁ ×ˢ t₂} ∂Measure.fst ρ =
    ↑↑ρ (t₁ ×ˢ t₂)
[PROOFSTEP]
have h_eq2 : ∫⁻ a in t₁ᶜ, condKernelReal ρ a {x : ℝ | (a, x) ∈ t₁ ×ˢ t₂} ∂ρ.fst = 0 :=
  by
  suffices h_eq_zero : ∀ a ∈ t₁ᶜ, condKernelReal ρ a {x : ℝ | (a, x) ∈ t₁ ×ˢ t₂} = 0
  · rw [set_lintegral_congr_fun ht₁.compl (eventually_of_forall h_eq_zero)]
    simp only [lintegral_const, zero_mul]
  intro a hat₁
  rw [mem_compl_iff] at hat₁ 
  simp only [hat₁, prod_mk_mem_set_prod_eq, false_and_iff, setOf_false, measure_empty]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
t₁ : Set α
t₂ : Set ℝ
ht₁ : t₁ ∈ {s | MeasurableSet s}
ht₂ : t₂ ∈ {t | MeasurableSet t}
h_prod_eq_snd : ∀ (a : α), a ∈ t₁ → {x | (a, x) ∈ t₁ ×ˢ t₂} = t₂
h : Set.Nonempty t₂
h_eq1 :
  ∫⁻ (a : α) in t₁, ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t₁ ×ˢ t₂} ∂Measure.fst ρ =
    ∫⁻ (a : α) in t₁, ↑↑(↑(condKernelReal ρ) a) t₂ ∂Measure.fst ρ
⊢ ∫⁻ (a : α) in t₁ᶜ, ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t₁ ×ˢ t₂} ∂Measure.fst ρ = 0
[PROOFSTEP]
suffices h_eq_zero : ∀ a ∈ t₁ᶜ, condKernelReal ρ a {x : ℝ | (a, x) ∈ t₁ ×ˢ t₂} = 0
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
t₁ : Set α
t₂ : Set ℝ
ht₁ : t₁ ∈ {s | MeasurableSet s}
ht₂ : t₂ ∈ {t | MeasurableSet t}
h_prod_eq_snd : ∀ (a : α), a ∈ t₁ → {x | (a, x) ∈ t₁ ×ˢ t₂} = t₂
h : Set.Nonempty t₂
h_eq1 :
  ∫⁻ (a : α) in t₁, ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t₁ ×ˢ t₂} ∂Measure.fst ρ =
    ∫⁻ (a : α) in t₁, ↑↑(↑(condKernelReal ρ) a) t₂ ∂Measure.fst ρ
h_eq_zero : ∀ (a : α), a ∈ t₁ᶜ → ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t₁ ×ˢ t₂} = 0
⊢ ∫⁻ (a : α) in t₁ᶜ, ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t₁ ×ˢ t₂} ∂Measure.fst ρ = 0
[PROOFSTEP]
rw [set_lintegral_congr_fun ht₁.compl (eventually_of_forall h_eq_zero)]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
t₁ : Set α
t₂ : Set ℝ
ht₁ : t₁ ∈ {s | MeasurableSet s}
ht₂ : t₂ ∈ {t | MeasurableSet t}
h_prod_eq_snd : ∀ (a : α), a ∈ t₁ → {x | (a, x) ∈ t₁ ×ˢ t₂} = t₂
h : Set.Nonempty t₂
h_eq1 :
  ∫⁻ (a : α) in t₁, ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t₁ ×ˢ t₂} ∂Measure.fst ρ =
    ∫⁻ (a : α) in t₁, ↑↑(↑(condKernelReal ρ) a) t₂ ∂Measure.fst ρ
h_eq_zero : ∀ (a : α), a ∈ t₁ᶜ → ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t₁ ×ˢ t₂} = 0
⊢ ∫⁻ (x : α) in t₁ᶜ, 0 ∂Measure.fst ρ = 0
[PROOFSTEP]
simp only [lintegral_const, zero_mul]
[GOAL]
case h_eq_zero
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
t₁ : Set α
t₂ : Set ℝ
ht₁ : t₁ ∈ {s | MeasurableSet s}
ht₂ : t₂ ∈ {t | MeasurableSet t}
h_prod_eq_snd : ∀ (a : α), a ∈ t₁ → {x | (a, x) ∈ t₁ ×ˢ t₂} = t₂
h : Set.Nonempty t₂
h_eq1 :
  ∫⁻ (a : α) in t₁, ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t₁ ×ˢ t₂} ∂Measure.fst ρ =
    ∫⁻ (a : α) in t₁, ↑↑(↑(condKernelReal ρ) a) t₂ ∂Measure.fst ρ
⊢ ∀ (a : α), a ∈ t₁ᶜ → ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t₁ ×ˢ t₂} = 0
[PROOFSTEP]
intro a hat₁
[GOAL]
case h_eq_zero
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
t₁ : Set α
t₂ : Set ℝ
ht₁ : t₁ ∈ {s | MeasurableSet s}
ht₂ : t₂ ∈ {t | MeasurableSet t}
h_prod_eq_snd : ∀ (a : α), a ∈ t₁ → {x | (a, x) ∈ t₁ ×ˢ t₂} = t₂
h : Set.Nonempty t₂
h_eq1 :
  ∫⁻ (a : α) in t₁, ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t₁ ×ˢ t₂} ∂Measure.fst ρ =
    ∫⁻ (a : α) in t₁, ↑↑(↑(condKernelReal ρ) a) t₂ ∂Measure.fst ρ
a : α
hat₁ : a ∈ t₁ᶜ
⊢ ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t₁ ×ˢ t₂} = 0
[PROOFSTEP]
rw [mem_compl_iff] at hat₁ 
[GOAL]
case h_eq_zero
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
t₁ : Set α
t₂ : Set ℝ
ht₁ : t₁ ∈ {s | MeasurableSet s}
ht₂ : t₂ ∈ {t | MeasurableSet t}
h_prod_eq_snd : ∀ (a : α), a ∈ t₁ → {x | (a, x) ∈ t₁ ×ˢ t₂} = t₂
h : Set.Nonempty t₂
h_eq1 :
  ∫⁻ (a : α) in t₁, ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t₁ ×ˢ t₂} ∂Measure.fst ρ =
    ∫⁻ (a : α) in t₁, ↑↑(↑(condKernelReal ρ) a) t₂ ∂Measure.fst ρ
a : α
hat₁ : ¬a ∈ t₁
⊢ ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t₁ ×ˢ t₂} = 0
[PROOFSTEP]
simp only [hat₁, prod_mk_mem_set_prod_eq, false_and_iff, setOf_false, measure_empty]
[GOAL]
case intro.intro.intro.intro.inr
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
t₁ : Set α
t₂ : Set ℝ
ht₁ : t₁ ∈ {s | MeasurableSet s}
ht₂ : t₂ ∈ {t | MeasurableSet t}
h_prod_eq_snd : ∀ (a : α), a ∈ t₁ → {x | (a, x) ∈ t₁ ×ˢ t₂} = t₂
h : Set.Nonempty t₂
h_eq1 :
  ∫⁻ (a : α) in t₁, ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t₁ ×ˢ t₂} ∂Measure.fst ρ =
    ∫⁻ (a : α) in t₁, ↑↑(↑(condKernelReal ρ) a) t₂ ∂Measure.fst ρ
h_eq2 : ∫⁻ (a : α) in t₁ᶜ, ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t₁ ×ˢ t₂} ∂Measure.fst ρ = 0
⊢ ∫⁻ (x : α) in t₁, ↑↑(↑(condKernelReal ρ) x) {x_1 | (x, x_1) ∈ t₁ ×ˢ t₂} ∂Measure.fst ρ +
      ∫⁻ (x : α) in t₁ᶜ, ↑↑(↑(condKernelReal ρ) x) {x_1 | (x, x_1) ∈ t₁ ×ˢ t₂} ∂Measure.fst ρ =
    ↑↑ρ (t₁ ×ˢ t₂)
[PROOFSTEP]
rw [h_eq1, h_eq2, add_zero]
[GOAL]
case intro.intro.intro.intro.inr
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
t₁ : Set α
t₂ : Set ℝ
ht₁ : t₁ ∈ {s | MeasurableSet s}
ht₂ : t₂ ∈ {t | MeasurableSet t}
h_prod_eq_snd : ∀ (a : α), a ∈ t₁ → {x | (a, x) ∈ t₁ ×ˢ t₂} = t₂
h : Set.Nonempty t₂
h_eq1 :
  ∫⁻ (a : α) in t₁, ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t₁ ×ˢ t₂} ∂Measure.fst ρ =
    ∫⁻ (a : α) in t₁, ↑↑(↑(condKernelReal ρ) a) t₂ ∂Measure.fst ρ
h_eq2 : ∫⁻ (a : α) in t₁ᶜ, ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t₁ ×ˢ t₂} ∂Measure.fst ρ = 0
⊢ ∫⁻ (a : α) in t₁, ↑↑(↑(condKernelReal ρ) a) t₂ ∂Measure.fst ρ = ↑↑ρ (t₁ ×ˢ t₂)
[PROOFSTEP]
exact set_lintegral_condKernelReal_prod ρ ht₁ ht₂
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
⊢ ∀ (t : Set (α × ℝ)),
    MeasurableSet t →
      ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t} ∂Measure.fst ρ = ↑↑ρ t →
        ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ tᶜ} ∂Measure.fst ρ = ↑↑ρ tᶜ
[PROOFSTEP]
intro t ht ht_eq
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
t : Set (α × ℝ)
ht : MeasurableSet t
ht_eq : ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t} ∂Measure.fst ρ = ↑↑ρ t
⊢ ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ tᶜ} ∂Measure.fst ρ = ↑↑ρ tᶜ
[PROOFSTEP]
calc
  ∫⁻ a, condKernelReal ρ a {x : ℝ | (a, x) ∈ tᶜ} ∂ρ.fst = ∫⁻ a, condKernelReal ρ a {x : ℝ | (a, x) ∈ t}ᶜ ∂ρ.fst := rfl
  _ = ∫⁻ a, condKernelReal ρ a univ - condKernelReal ρ a {x : ℝ | (a, x) ∈ t} ∂ρ.fst :=
    by
    congr with a : 1
    exact measure_compl (measurable_prod_mk_left ht) (measure_ne_top (condKernelReal ρ a) _)
  _ = ∫⁻ a, condKernelReal ρ a univ ∂ρ.fst - ∫⁻ a, condKernelReal ρ a {x : ℝ | (a, x) ∈ t} ∂ρ.fst :=
    by
    have h_le : (fun a => condKernelReal ρ a {x : ℝ | (a, x) ∈ t}) ≤ᵐ[ρ.fst] fun a => condKernelReal ρ a univ :=
      eventually_of_forall fun a => measure_mono (subset_univ _)
    rw [lintegral_sub _ _ h_le]
    · exact kernel.measurable_kernel_prod_mk_left ht
    refine' ((lintegral_mono_ae h_le).trans_lt _).ne
    rw [lintegral_condKernelReal_univ]
    exact measure_lt_top ρ univ
  _ = ρ univ - ρ t := by rw [ht_eq, lintegral_condKernelReal_univ]
  _ = ρ tᶜ := (measure_compl ht (measure_ne_top _ _)).symm
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
t : Set (α × ℝ)
ht : MeasurableSet t
ht_eq : ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t} ∂Measure.fst ρ = ↑↑ρ t
⊢ ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t}ᶜ ∂Measure.fst ρ =
    ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) univ - ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t} ∂Measure.fst ρ
[PROOFSTEP]
congr with a : 1
[GOAL]
case e_f.h
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
t : Set (α × ℝ)
ht : MeasurableSet t
ht_eq : ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t} ∂Measure.fst ρ = ↑↑ρ t
a : α
⊢ ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t}ᶜ =
    ↑↑(↑(condKernelReal ρ) a) univ - ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t}
[PROOFSTEP]
exact measure_compl (measurable_prod_mk_left ht) (measure_ne_top (condKernelReal ρ a) _)
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
t : Set (α × ℝ)
ht : MeasurableSet t
ht_eq : ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t} ∂Measure.fst ρ = ↑↑ρ t
⊢ ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) univ - ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t} ∂Measure.fst ρ =
    ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) univ ∂Measure.fst ρ -
      ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t} ∂Measure.fst ρ
[PROOFSTEP]
have h_le : (fun a => condKernelReal ρ a {x : ℝ | (a, x) ∈ t}) ≤ᵐ[ρ.fst] fun a => condKernelReal ρ a univ :=
  eventually_of_forall fun a => measure_mono (subset_univ _)
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
t : Set (α × ℝ)
ht : MeasurableSet t
ht_eq : ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t} ∂Measure.fst ρ = ↑↑ρ t
h_le : (fun a => ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t}) ≤ᵐ[Measure.fst ρ] fun a => ↑↑(↑(condKernelReal ρ) a) univ
⊢ ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) univ - ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t} ∂Measure.fst ρ =
    ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) univ ∂Measure.fst ρ -
      ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t} ∂Measure.fst ρ
[PROOFSTEP]
rw [lintegral_sub _ _ h_le]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
t : Set (α × ℝ)
ht : MeasurableSet t
ht_eq : ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t} ∂Measure.fst ρ = ↑↑ρ t
h_le : (fun a => ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t}) ≤ᵐ[Measure.fst ρ] fun a => ↑↑(↑(condKernelReal ρ) a) univ
⊢ Measurable fun a => ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t}
[PROOFSTEP]
exact kernel.measurable_kernel_prod_mk_left ht
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
t : Set (α × ℝ)
ht : MeasurableSet t
ht_eq : ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t} ∂Measure.fst ρ = ↑↑ρ t
h_le : (fun a => ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t}) ≤ᵐ[Measure.fst ρ] fun a => ↑↑(↑(condKernelReal ρ) a) univ
⊢ ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t} ∂Measure.fst ρ ≠ ⊤
[PROOFSTEP]
refine' ((lintegral_mono_ae h_le).trans_lt _).ne
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
t : Set (α × ℝ)
ht : MeasurableSet t
ht_eq : ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t} ∂Measure.fst ρ = ↑↑ρ t
h_le : (fun a => ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t}) ≤ᵐ[Measure.fst ρ] fun a => ↑↑(↑(condKernelReal ρ) a) univ
⊢ ∫⁻ (a : α), (fun a => ↑↑(↑(condKernelReal ρ) a) univ) a ∂Measure.fst ρ < ⊤
[PROOFSTEP]
rw [lintegral_condKernelReal_univ]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
t : Set (α × ℝ)
ht : MeasurableSet t
ht_eq : ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t} ∂Measure.fst ρ = ↑↑ρ t
h_le : (fun a => ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t}) ≤ᵐ[Measure.fst ρ] fun a => ↑↑(↑(condKernelReal ρ) a) univ
⊢ ↑↑ρ univ < ⊤
[PROOFSTEP]
exact measure_lt_top ρ univ
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
t : Set (α × ℝ)
ht : MeasurableSet t
ht_eq : ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t} ∂Measure.fst ρ = ↑↑ρ t
⊢ ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) univ ∂Measure.fst ρ -
      ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ t} ∂Measure.fst ρ =
    ↑↑ρ univ - ↑↑ρ t
[PROOFSTEP]
rw [ht_eq, lintegral_condKernelReal_univ]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
⊢ ∀ (f : ℕ → Set (α × ℝ)),
    Pairwise (Disjoint on f) →
      (∀ (i : ℕ), MeasurableSet (f i)) →
        (∀ (i : ℕ), ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ f i} ∂Measure.fst ρ = ↑↑ρ (f i)) →
          ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ ⋃ (i : ℕ), f i} ∂Measure.fst ρ = ↑↑ρ (⋃ (i : ℕ), f i)
[PROOFSTEP]
intro f hf_disj hf_meas hf_eq
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
f : ℕ → Set (α × ℝ)
hf_disj : Pairwise (Disjoint on f)
hf_meas : ∀ (i : ℕ), MeasurableSet (f i)
hf_eq : ∀ (i : ℕ), ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ f i} ∂Measure.fst ρ = ↑↑ρ (f i)
⊢ ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ ⋃ (i : ℕ), f i} ∂Measure.fst ρ = ↑↑ρ (⋃ (i : ℕ), f i)
[PROOFSTEP]
have h_eq : ∀ a, {x | (a, x) ∈ ⋃ i, f i} = ⋃ i, {x | (a, x) ∈ f i} :=
  by
  intro a
  ext1 x
  simp only [mem_iUnion, mem_setOf_eq]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
f : ℕ → Set (α × ℝ)
hf_disj : Pairwise (Disjoint on f)
hf_meas : ∀ (i : ℕ), MeasurableSet (f i)
hf_eq : ∀ (i : ℕ), ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ f i} ∂Measure.fst ρ = ↑↑ρ (f i)
⊢ ∀ (a : α), {x | (a, x) ∈ ⋃ (i : ℕ), f i} = ⋃ (i : ℕ), {x | (a, x) ∈ f i}
[PROOFSTEP]
intro a
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
f : ℕ → Set (α × ℝ)
hf_disj : Pairwise (Disjoint on f)
hf_meas : ∀ (i : ℕ), MeasurableSet (f i)
hf_eq : ∀ (i : ℕ), ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ f i} ∂Measure.fst ρ = ↑↑ρ (f i)
a : α
⊢ {x | (a, x) ∈ ⋃ (i : ℕ), f i} = ⋃ (i : ℕ), {x | (a, x) ∈ f i}
[PROOFSTEP]
ext1 x
[GOAL]
case h
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
f : ℕ → Set (α × ℝ)
hf_disj : Pairwise (Disjoint on f)
hf_meas : ∀ (i : ℕ), MeasurableSet (f i)
hf_eq : ∀ (i : ℕ), ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ f i} ∂Measure.fst ρ = ↑↑ρ (f i)
a : α
x : ℝ
⊢ x ∈ {x | (a, x) ∈ ⋃ (i : ℕ), f i} ↔ x ∈ ⋃ (i : ℕ), {x | (a, x) ∈ f i}
[PROOFSTEP]
simp only [mem_iUnion, mem_setOf_eq]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
f : ℕ → Set (α × ℝ)
hf_disj : Pairwise (Disjoint on f)
hf_meas : ∀ (i : ℕ), MeasurableSet (f i)
hf_eq : ∀ (i : ℕ), ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ f i} ∂Measure.fst ρ = ↑↑ρ (f i)
h_eq : ∀ (a : α), {x | (a, x) ∈ ⋃ (i : ℕ), f i} = ⋃ (i : ℕ), {x | (a, x) ∈ f i}
⊢ ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ ⋃ (i : ℕ), f i} ∂Measure.fst ρ = ↑↑ρ (⋃ (i : ℕ), f i)
[PROOFSTEP]
simp_rw [h_eq]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
f : ℕ → Set (α × ℝ)
hf_disj : Pairwise (Disjoint on f)
hf_meas : ∀ (i : ℕ), MeasurableSet (f i)
hf_eq : ∀ (i : ℕ), ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ f i} ∂Measure.fst ρ = ↑↑ρ (f i)
h_eq : ∀ (a : α), {x | (a, x) ∈ ⋃ (i : ℕ), f i} = ⋃ (i : ℕ), {x | (a, x) ∈ f i}
⊢ ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) (⋃ (i : ℕ), {x | (a, x) ∈ f i}) ∂Measure.fst ρ = ↑↑ρ (⋃ (i : ℕ), f i)
[PROOFSTEP]
have h_disj : ∀ a, Pairwise (Disjoint on fun i => {x | (a, x) ∈ f i}) :=
  by
  intro a i j hij
  have h_disj := hf_disj hij
  rw [Function.onFun, disjoint_iff_inter_eq_empty] at h_disj ⊢
  ext1 x
  simp only [mem_inter_iff, mem_setOf_eq, mem_empty_iff_false, iff_false_iff]
  intro h_mem_both
  suffices (a, x) ∈ ∅ by rwa [mem_empty_iff_false] at this 
  rwa [← h_disj, mem_inter_iff]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
f : ℕ → Set (α × ℝ)
hf_disj : Pairwise (Disjoint on f)
hf_meas : ∀ (i : ℕ), MeasurableSet (f i)
hf_eq : ∀ (i : ℕ), ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ f i} ∂Measure.fst ρ = ↑↑ρ (f i)
h_eq : ∀ (a : α), {x | (a, x) ∈ ⋃ (i : ℕ), f i} = ⋃ (i : ℕ), {x | (a, x) ∈ f i}
⊢ ∀ (a : α), Pairwise (Disjoint on fun i => {x | (a, x) ∈ f i})
[PROOFSTEP]
intro a i j hij
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
f : ℕ → Set (α × ℝ)
hf_disj : Pairwise (Disjoint on f)
hf_meas : ∀ (i : ℕ), MeasurableSet (f i)
hf_eq : ∀ (i : ℕ), ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ f i} ∂Measure.fst ρ = ↑↑ρ (f i)
h_eq : ∀ (a : α), {x | (a, x) ∈ ⋃ (i : ℕ), f i} = ⋃ (i : ℕ), {x | (a, x) ∈ f i}
a : α
i j : ℕ
hij : i ≠ j
⊢ (Disjoint on fun i => {x | (a, x) ∈ f i}) i j
[PROOFSTEP]
have h_disj := hf_disj hij
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
f : ℕ → Set (α × ℝ)
hf_disj : Pairwise (Disjoint on f)
hf_meas : ∀ (i : ℕ), MeasurableSet (f i)
hf_eq : ∀ (i : ℕ), ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ f i} ∂Measure.fst ρ = ↑↑ρ (f i)
h_eq : ∀ (a : α), {x | (a, x) ∈ ⋃ (i : ℕ), f i} = ⋃ (i : ℕ), {x | (a, x) ∈ f i}
a : α
i j : ℕ
hij : i ≠ j
h_disj : (Disjoint on f) i j
⊢ (Disjoint on fun i => {x | (a, x) ∈ f i}) i j
[PROOFSTEP]
rw [Function.onFun, disjoint_iff_inter_eq_empty] at h_disj ⊢
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
f : ℕ → Set (α × ℝ)
hf_disj : Pairwise (Disjoint on f)
hf_meas : ∀ (i : ℕ), MeasurableSet (f i)
hf_eq : ∀ (i : ℕ), ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ f i} ∂Measure.fst ρ = ↑↑ρ (f i)
h_eq : ∀ (a : α), {x | (a, x) ∈ ⋃ (i : ℕ), f i} = ⋃ (i : ℕ), {x | (a, x) ∈ f i}
a : α
i j : ℕ
hij : i ≠ j
h_disj : f i ∩ f j = ∅
⊢ {x | (a, x) ∈ f i} ∩ {x | (a, x) ∈ f j} = ∅
[PROOFSTEP]
ext1 x
[GOAL]
case h
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
f : ℕ → Set (α × ℝ)
hf_disj : Pairwise (Disjoint on f)
hf_meas : ∀ (i : ℕ), MeasurableSet (f i)
hf_eq : ∀ (i : ℕ), ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ f i} ∂Measure.fst ρ = ↑↑ρ (f i)
h_eq : ∀ (a : α), {x | (a, x) ∈ ⋃ (i : ℕ), f i} = ⋃ (i : ℕ), {x | (a, x) ∈ f i}
a : α
i j : ℕ
hij : i ≠ j
h_disj : f i ∩ f j = ∅
x : ℝ
⊢ x ∈ {x | (a, x) ∈ f i} ∩ {x | (a, x) ∈ f j} ↔ x ∈ ∅
[PROOFSTEP]
simp only [mem_inter_iff, mem_setOf_eq, mem_empty_iff_false, iff_false_iff]
[GOAL]
case h
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
f : ℕ → Set (α × ℝ)
hf_disj : Pairwise (Disjoint on f)
hf_meas : ∀ (i : ℕ), MeasurableSet (f i)
hf_eq : ∀ (i : ℕ), ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ f i} ∂Measure.fst ρ = ↑↑ρ (f i)
h_eq : ∀ (a : α), {x | (a, x) ∈ ⋃ (i : ℕ), f i} = ⋃ (i : ℕ), {x | (a, x) ∈ f i}
a : α
i j : ℕ
hij : i ≠ j
h_disj : f i ∩ f j = ∅
x : ℝ
⊢ ¬((a, x) ∈ f i ∧ (a, x) ∈ f j)
[PROOFSTEP]
intro h_mem_both
[GOAL]
case h
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
f : ℕ → Set (α × ℝ)
hf_disj : Pairwise (Disjoint on f)
hf_meas : ∀ (i : ℕ), MeasurableSet (f i)
hf_eq : ∀ (i : ℕ), ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ f i} ∂Measure.fst ρ = ↑↑ρ (f i)
h_eq : ∀ (a : α), {x | (a, x) ∈ ⋃ (i : ℕ), f i} = ⋃ (i : ℕ), {x | (a, x) ∈ f i}
a : α
i j : ℕ
hij : i ≠ j
h_disj : f i ∩ f j = ∅
x : ℝ
h_mem_both : (a, x) ∈ f i ∧ (a, x) ∈ f j
⊢ False
[PROOFSTEP]
suffices (a, x) ∈ ∅ by rwa [mem_empty_iff_false] at this 
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
f : ℕ → Set (α × ℝ)
hf_disj : Pairwise (Disjoint on f)
hf_meas : ∀ (i : ℕ), MeasurableSet (f i)
hf_eq : ∀ (i : ℕ), ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ f i} ∂Measure.fst ρ = ↑↑ρ (f i)
h_eq : ∀ (a : α), {x | (a, x) ∈ ⋃ (i : ℕ), f i} = ⋃ (i : ℕ), {x | (a, x) ∈ f i}
a : α
i j : ℕ
hij : i ≠ j
h_disj : f i ∩ f j = ∅
x : ℝ
h_mem_both : (a, x) ∈ f i ∧ (a, x) ∈ f j
this : (a, x) ∈ ∅
⊢ False
[PROOFSTEP]
rwa [mem_empty_iff_false] at this 
[GOAL]
case h
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
f : ℕ → Set (α × ℝ)
hf_disj : Pairwise (Disjoint on f)
hf_meas : ∀ (i : ℕ), MeasurableSet (f i)
hf_eq : ∀ (i : ℕ), ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ f i} ∂Measure.fst ρ = ↑↑ρ (f i)
h_eq : ∀ (a : α), {x | (a, x) ∈ ⋃ (i : ℕ), f i} = ⋃ (i : ℕ), {x | (a, x) ∈ f i}
a : α
i j : ℕ
hij : i ≠ j
h_disj : f i ∩ f j = ∅
x : ℝ
h_mem_both : (a, x) ∈ f i ∧ (a, x) ∈ f j
⊢ (a, x) ∈ ∅
[PROOFSTEP]
rwa [← h_disj, mem_inter_iff]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
f : ℕ → Set (α × ℝ)
hf_disj : Pairwise (Disjoint on f)
hf_meas : ∀ (i : ℕ), MeasurableSet (f i)
hf_eq : ∀ (i : ℕ), ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ f i} ∂Measure.fst ρ = ↑↑ρ (f i)
h_eq : ∀ (a : α), {x | (a, x) ∈ ⋃ (i : ℕ), f i} = ⋃ (i : ℕ), {x | (a, x) ∈ f i}
h_disj : ∀ (a : α), Pairwise (Disjoint on fun i => {x | (a, x) ∈ f i})
⊢ ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) (⋃ (i : ℕ), {x | (a, x) ∈ f i}) ∂Measure.fst ρ = ↑↑ρ (⋃ (i : ℕ), f i)
[PROOFSTEP]
calc
  ∫⁻ a, condKernelReal ρ a (⋃ i, {x | (a, x) ∈ f i}) ∂ρ.fst =
      ∫⁻ a, ∑' i, condKernelReal ρ a {x | (a, x) ∈ f i} ∂ρ.fst :=
    by
    congr with a : 1
    rw [measure_iUnion (h_disj a) fun i => measurable_prod_mk_left (hf_meas i)]
  _ = ∑' i, ∫⁻ a, condKernelReal ρ a {x | (a, x) ∈ f i} ∂ρ.fst :=
    (lintegral_tsum fun i => (kernel.measurable_kernel_prod_mk_left (hf_meas i)).aemeasurable)
  _ = ∑' i, ρ (f i) := by simp_rw [hf_eq]
  _ = ρ (iUnion f) := (measure_iUnion hf_disj hf_meas).symm
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
f : ℕ → Set (α × ℝ)
hf_disj : Pairwise (Disjoint on f)
hf_meas : ∀ (i : ℕ), MeasurableSet (f i)
hf_eq : ∀ (i : ℕ), ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ f i} ∂Measure.fst ρ = ↑↑ρ (f i)
h_eq : ∀ (a : α), {x | (a, x) ∈ ⋃ (i : ℕ), f i} = ⋃ (i : ℕ), {x | (a, x) ∈ f i}
h_disj : ∀ (a : α), Pairwise (Disjoint on fun i => {x | (a, x) ∈ f i})
⊢ ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) (⋃ (i : ℕ), {x | (a, x) ∈ f i}) ∂Measure.fst ρ =
    ∫⁻ (a : α), ∑' (i : ℕ), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ f i} ∂Measure.fst ρ
[PROOFSTEP]
congr with a : 1
[GOAL]
case e_f.h
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
f : ℕ → Set (α × ℝ)
hf_disj : Pairwise (Disjoint on f)
hf_meas : ∀ (i : ℕ), MeasurableSet (f i)
hf_eq : ∀ (i : ℕ), ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ f i} ∂Measure.fst ρ = ↑↑ρ (f i)
h_eq : ∀ (a : α), {x | (a, x) ∈ ⋃ (i : ℕ), f i} = ⋃ (i : ℕ), {x | (a, x) ∈ f i}
h_disj : ∀ (a : α), Pairwise (Disjoint on fun i => {x | (a, x) ∈ f i})
a : α
⊢ ↑↑(↑(condKernelReal ρ) a) (⋃ (i : ℕ), {x | (a, x) ∈ f i}) = ∑' (i : ℕ), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ f i}
[PROOFSTEP]
rw [measure_iUnion (h_disj a) fun i => measurable_prod_mk_left (hf_meas i)]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set (α × ℝ)
hs : MeasurableSet s
f : ℕ → Set (α × ℝ)
hf_disj : Pairwise (Disjoint on f)
hf_meas : ∀ (i : ℕ), MeasurableSet (f i)
hf_eq : ∀ (i : ℕ), ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ f i} ∂Measure.fst ρ = ↑↑ρ (f i)
h_eq : ∀ (a : α), {x | (a, x) ∈ ⋃ (i : ℕ), f i} = ⋃ (i : ℕ), {x | (a, x) ∈ f i}
h_disj : ∀ (a : α), Pairwise (Disjoint on fun i => {x | (a, x) ∈ f i})
⊢ ∑' (i : ℕ), ∫⁻ (a : α), ↑↑(↑(condKernelReal ρ) a) {x | (a, x) ∈ f i} ∂Measure.fst ρ = ∑' (i : ℕ), ↑↑ρ (f i)
[PROOFSTEP]
simp_rw [hf_eq]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ✝ : Measure (α × ℝ)
inst✝² : IsFiniteMeasure ρ✝
γ : Type u_2
inst✝¹ : MeasurableSpace γ
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
⊢ const γ ρ = const γ (Measure.fst ρ) ⊗ₖ prodMkLeft γ (condKernelReal ρ)
[PROOFSTEP]
ext a s hs : 2
[GOAL]
case h.h
α : Type u_1
mα : MeasurableSpace α
ρ✝ : Measure (α × ℝ)
inst✝² : IsFiniteMeasure ρ✝
γ : Type u_2
inst✝¹ : MeasurableSpace γ
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
a : γ
s : Set (α × ℝ)
hs : MeasurableSet s
⊢ ↑↑(↑(const γ ρ) a) s = ↑↑(↑(const γ (Measure.fst ρ) ⊗ₖ prodMkLeft γ (condKernelReal ρ)) a) s
[PROOFSTEP]
rw [kernel.compProd_apply _ _ _ hs, kernel.const_apply, kernel.const_apply]
[GOAL]
case h.h
α : Type u_1
mα : MeasurableSpace α
ρ✝ : Measure (α × ℝ)
inst✝² : IsFiniteMeasure ρ✝
γ : Type u_2
inst✝¹ : MeasurableSpace γ
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
a : γ
s : Set (α × ℝ)
hs : MeasurableSet s
⊢ ↑↑ρ s = ∫⁻ (b : α), ↑↑(↑(prodMkLeft γ (condKernelReal ρ)) (a, b)) {c | (b, c) ∈ s} ∂Measure.fst ρ
[PROOFSTEP]
simp_rw [kernel.prodMkLeft_apply]
[GOAL]
case h.h
α : Type u_1
mα : MeasurableSpace α
ρ✝ : Measure (α × ℝ)
inst✝² : IsFiniteMeasure ρ✝
γ : Type u_2
inst✝¹ : MeasurableSpace γ
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
a : γ
s : Set (α × ℝ)
hs : MeasurableSet s
⊢ ↑↑ρ s = ∫⁻ (b : α), ↑↑(↑(condKernelReal ρ) b) {c | (b, c) ∈ s} ∂Measure.fst ρ
[PROOFSTEP]
rw [lintegral_condKernelReal_mem ρ hs]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
⊢ ρ = ↑(kernel.const Unit (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft Unit (condKernelReal ρ)) ()
[PROOFSTEP]
rw [← kernel.const_eq_compProd_real Unit ρ, kernel.const_apply]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
f : α × ℝ → ℝ≥0∞
hf : Measurable f
⊢ ∫⁻ (a : α), ∫⁻ (y : ℝ), f (a, y) ∂↑(condKernelReal ρ) a ∂Measure.fst ρ = ∫⁻ (x : α × ℝ), f x ∂ρ
[PROOFSTEP]
nth_rw 3 [measure_eq_compProd_real ρ]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
f : α × ℝ → ℝ≥0∞
hf : Measurable f
⊢ ∫⁻ (a : α), ∫⁻ (y : ℝ), f (a, y) ∂↑(condKernelReal ρ) a ∂Measure.fst ρ =
    ∫⁻ (x : α × ℝ), f x ∂↑(kernel.const Unit (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft Unit (condKernelReal ρ)) ()
[PROOFSTEP]
rw [kernel.lintegral_compProd _ _ _ hf, kernel.const_apply]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
f : α × ℝ → ℝ≥0∞
hf : Measurable f
⊢ ∫⁻ (a : α), ∫⁻ (y : ℝ), f (a, y) ∂↑(condKernelReal ρ) a ∂Measure.fst ρ =
    ∫⁻ (b : α), ∫⁻ (c : ℝ), f (b, c) ∂↑(kernel.prodMkLeft Unit (condKernelReal ρ)) ((), b) ∂Measure.fst ρ
[PROOFSTEP]
simp_rw [kernel.prodMkLeft_apply]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set ℝ
hs : MeasurableSet s
hρ : ↑↑ρ {x | x.snd ∈ sᶜ} = 0
⊢ ∀ᵐ (a : α) ∂Measure.fst ρ, ↑↑(↑(condKernelReal ρ) a) s = 1
[PROOFSTEP]
have h :
  ρ {x | x.snd ∈ sᶜ} = (kernel.const Unit ρ.fst ⊗ₖ kernel.prodMkLeft Unit (condKernelReal ρ)) () {x | x.snd ∈ sᶜ} := by
  rw [← measure_eq_compProd_real]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set ℝ
hs : MeasurableSet s
hρ : ↑↑ρ {x | x.snd ∈ sᶜ} = 0
⊢ ↑↑ρ {x | x.snd ∈ sᶜ} =
    ↑↑(↑(kernel.const Unit (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft Unit (condKernelReal ρ)) ()) {x | x.snd ∈ sᶜ}
[PROOFSTEP]
rw [← measure_eq_compProd_real]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set ℝ
hs : MeasurableSet s
hρ : ↑↑ρ {x | x.snd ∈ sᶜ} = 0
h :
  ↑↑ρ {x | x.snd ∈ sᶜ} =
    ↑↑(↑(kernel.const Unit (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft Unit (condKernelReal ρ)) ()) {x | x.snd ∈ sᶜ}
⊢ ∀ᵐ (a : α) ∂Measure.fst ρ, ↑↑(↑(condKernelReal ρ) a) s = 1
[PROOFSTEP]
rw [hρ, kernel.compProd_apply] at h 
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set ℝ
hs : MeasurableSet s
hρ : ↑↑ρ {x | x.snd ∈ sᶜ} = 0
h :
  0 =
    ∫⁻ (b : α),
      ↑↑(↑(kernel.prodMkLeft Unit (condKernelReal ρ)) ((), b))
        {c | (b, c) ∈ {x | x.snd ∈ sᶜ}} ∂↑(kernel.const Unit (Measure.fst ρ)) ()
⊢ ∀ᵐ (a : α) ∂Measure.fst ρ, ↑↑(↑(condKernelReal ρ) a) s = 1
case hs
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set ℝ
hs : MeasurableSet s
hρ : ↑↑ρ {x | x.snd ∈ sᶜ} = 0
h : 0 = ↑↑(↑(kernel.const Unit (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft Unit (condKernelReal ρ)) ()) {x | x.snd ∈ sᶜ}
⊢ MeasurableSet {x | x.snd ∈ sᶜ}
[PROOFSTEP]
swap
[GOAL]
case hs
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set ℝ
hs : MeasurableSet s
hρ : ↑↑ρ {x | x.snd ∈ sᶜ} = 0
h : 0 = ↑↑(↑(kernel.const Unit (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft Unit (condKernelReal ρ)) ()) {x | x.snd ∈ sᶜ}
⊢ MeasurableSet {x | x.snd ∈ sᶜ}
[PROOFSTEP]
exact measurable_snd hs.compl
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set ℝ
hs : MeasurableSet s
hρ : ↑↑ρ {x | x.snd ∈ sᶜ} = 0
h :
  0 =
    ∫⁻ (b : α),
      ↑↑(↑(kernel.prodMkLeft Unit (condKernelReal ρ)) ((), b))
        {c | (b, c) ∈ {x | x.snd ∈ sᶜ}} ∂↑(kernel.const Unit (Measure.fst ρ)) ()
⊢ ∀ᵐ (a : α) ∂Measure.fst ρ, ↑↑(↑(condKernelReal ρ) a) s = 1
[PROOFSTEP]
rw [eq_comm, lintegral_eq_zero_iff] at h 
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set ℝ
hs : MeasurableSet s
hρ : ↑↑ρ {x | x.snd ∈ sᶜ} = 0
h :
  (fun b =>
      ↑↑(↑(kernel.prodMkLeft Unit (condKernelReal ρ)) ((), b))
        {c | (b, c) ∈ {x | x.snd ∈ sᶜ}}) =ᵐ[↑(kernel.const Unit (Measure.fst ρ)) ()]
    0
⊢ ∀ᵐ (a : α) ∂Measure.fst ρ, ↑↑(↑(condKernelReal ρ) a) s = 1
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set ℝ
hs : MeasurableSet s
hρ : ↑↑ρ {x | x.snd ∈ sᶜ} = 0
h :
  ∫⁻ (b : α),
      ↑↑(↑(kernel.prodMkLeft Unit (condKernelReal ρ)) ((), b))
        {c | (b, c) ∈ {x | x.snd ∈ sᶜ}} ∂↑(kernel.const Unit (Measure.fst ρ)) () =
    0
⊢ Measurable fun b => ↑↑(↑(kernel.prodMkLeft Unit (condKernelReal ρ)) ((), b)) {c | (b, c) ∈ {x | x.snd ∈ sᶜ}}
[PROOFSTEP]
swap
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set ℝ
hs : MeasurableSet s
hρ : ↑↑ρ {x | x.snd ∈ sᶜ} = 0
h :
  ∫⁻ (b : α),
      ↑↑(↑(kernel.prodMkLeft Unit (condKernelReal ρ)) ((), b))
        {c | (b, c) ∈ {x | x.snd ∈ sᶜ}} ∂↑(kernel.const Unit (Measure.fst ρ)) () =
    0
⊢ Measurable fun b => ↑↑(↑(kernel.prodMkLeft Unit (condKernelReal ρ)) ((), b)) {c | (b, c) ∈ {x | x.snd ∈ sᶜ}}
[PROOFSTEP]
simp_rw [kernel.prodMkLeft_apply']
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set ℝ
hs : MeasurableSet s
hρ : ↑↑ρ {x | x.snd ∈ sᶜ} = 0
h :
  ∫⁻ (b : α),
      ↑↑(↑(kernel.prodMkLeft Unit (condKernelReal ρ)) ((), b))
        {c | (b, c) ∈ {x | x.snd ∈ sᶜ}} ∂↑(kernel.const Unit (Measure.fst ρ)) () =
    0
⊢ Measurable fun b => ↑↑(↑(condKernelReal ρ) b) {c | (b, c) ∈ {x | x.snd ∈ sᶜ}}
[PROOFSTEP]
simp only [mem_compl_iff, mem_setOf_eq]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set ℝ
hs : MeasurableSet s
hρ : ↑↑ρ {x | x.snd ∈ sᶜ} = 0
h :
  ∫⁻ (b : α),
      ↑↑(↑(kernel.prodMkLeft Unit (condKernelReal ρ)) ((), b))
        {c | (b, c) ∈ {x | x.snd ∈ sᶜ}} ∂↑(kernel.const Unit (Measure.fst ρ)) () =
    0
⊢ Measurable fun b => ↑↑(↑(condKernelReal ρ) b) {c | ¬c ∈ s}
[PROOFSTEP]
exact kernel.measurable_coe _ hs.compl
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set ℝ
hs : MeasurableSet s
hρ : ↑↑ρ {x | x.snd ∈ sᶜ} = 0
h :
  (fun b =>
      ↑↑(↑(kernel.prodMkLeft Unit (condKernelReal ρ)) ((), b))
        {c | (b, c) ∈ {x | x.snd ∈ sᶜ}}) =ᵐ[↑(kernel.const Unit (Measure.fst ρ)) ()]
    0
⊢ ∀ᵐ (a : α) ∂Measure.fst ρ, ↑↑(↑(condKernelReal ρ) a) s = 1
[PROOFSTEP]
rw [kernel.const_apply] at h 
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set ℝ
hs : MeasurableSet s
hρ : ↑↑ρ {x | x.snd ∈ sᶜ} = 0
h :
  (fun b => ↑↑(↑(kernel.prodMkLeft Unit (condKernelReal ρ)) ((), b)) {c | (b, c) ∈ {x | x.snd ∈ sᶜ}}) =ᵐ[Measure.fst ρ]
    0
⊢ ∀ᵐ (a : α) ∂Measure.fst ρ, ↑↑(↑(condKernelReal ρ) a) s = 1
[PROOFSTEP]
simp only [mem_compl_iff, mem_setOf_eq, kernel.prodMkLeft_apply'] at h 
[GOAL]
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set ℝ
hs : MeasurableSet s
hρ : ↑↑ρ {x | x.snd ∈ sᶜ} = 0
h : (fun b => ↑↑(↑(condKernelReal ρ) b) {c | ¬c ∈ s}) =ᵐ[Measure.fst ρ] 0
⊢ ∀ᵐ (a : α) ∂Measure.fst ρ, ↑↑(↑(condKernelReal ρ) a) s = 1
[PROOFSTEP]
filter_upwards [h] with a ha
[GOAL]
case h
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set ℝ
hs : MeasurableSet s
hρ : ↑↑ρ {x | x.snd ∈ sᶜ} = 0
h : (fun b => ↑↑(↑(condKernelReal ρ) b) {c | ¬c ∈ s}) =ᵐ[Measure.fst ρ] 0
a : α
ha : ↑↑(↑(condKernelReal ρ) a) {c | ¬c ∈ s} = OfNat.ofNat 0 a
⊢ ↑↑(↑(condKernelReal ρ) a) s = 1
[PROOFSTEP]
change condKernelReal ρ a sᶜ = 0 at ha 
[GOAL]
case h
α : Type u_1
mα : MeasurableSpace α
ρ : Measure (α × ℝ)
inst✝ : IsFiniteMeasure ρ
s : Set ℝ
hs : MeasurableSet s
hρ : ↑↑ρ {x | x.snd ∈ sᶜ} = 0
h : (fun b => ↑↑(↑(condKernelReal ρ) b) {c | ¬c ∈ s}) =ᵐ[Measure.fst ρ] 0
a : α
ha : ↑↑(↑(condKernelReal ρ) a) sᶜ = 0
⊢ ↑↑(↑(condKernelReal ρ) a) s = 1
[PROOFSTEP]
rwa [prob_compl_eq_zero_iff hs] at ha 
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
⊢ ∃ η _h, kernel.const γ ρ = kernel.const γ (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft γ η
[PROOFSTEP]
obtain ⟨f, hf⟩ := exists_measurableEmbedding_real Ω
[GOAL]
case intro
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
⊢ ∃ η _h, kernel.const γ ρ = kernel.const γ (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft γ η
[PROOFSTEP]
let ρ' : Measure (α × ℝ) :=
  ρ.map
    (Prod.map id f)
      -- The general idea is to define `η = kernel.comapRight (condKernelReal ρ') hf`. There is
        -- however an issue: that `η` may not be a Markov kernel since its value is only a
        -- probability distribution almost everywhere with respect to `ρ.fst`, not everywhere.
        -- We modify it to obtain a Markov kernel which is almost everywhere equal.
[GOAL]
case intro
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
⊢ ∃ η _h, kernel.const γ ρ = kernel.const γ (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft γ η
[PROOFSTEP]
let ρ_set := (toMeasurable ρ.fst {a | condKernelReal ρ' a (range f) = 1}ᶜ)ᶜ
[GOAL]
case intro
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
⊢ ∃ η _h, kernel.const γ ρ = kernel.const γ (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft γ η
[PROOFSTEP]
have hm : MeasurableSet ρ_set := (measurableSet_toMeasurable _ _).compl
[GOAL]
case intro
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
⊢ ∃ η _h, kernel.const γ ρ = kernel.const γ (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft γ η
[PROOFSTEP]
have h_eq_one_of_mem : ∀ a ∈ ρ_set, condKernelReal ρ' a (range f) = 1 :=
  by
  intro a ha
  rw [mem_compl_iff] at ha 
  have h_ss := subset_toMeasurable ρ.fst {a : α | condKernelReal ρ' a (range f) = 1}ᶜ
  suffices ha' : a ∉ {a : α | condKernelReal ρ' a (range f) = 1}ᶜ
  · rwa [not_mem_compl_iff] at ha' 
  exact not_mem_subset h_ss ha
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
⊢ ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
[PROOFSTEP]
intro a ha
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
a : α
ha : a ∈ ρ_set
⊢ ↑↑(↑(condKernelReal ρ') a) (range f) = 1
[PROOFSTEP]
rw [mem_compl_iff] at ha 
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
a : α
ha : ¬a ∈ toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ
⊢ ↑↑(↑(condKernelReal ρ') a) (range f) = 1
[PROOFSTEP]
have h_ss := subset_toMeasurable ρ.fst {a : α | condKernelReal ρ' a (range f) = 1}ᶜ
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
a : α
ha : ¬a ∈ toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ
h_ss :
  {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ ⊆
    toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ
⊢ ↑↑(↑(condKernelReal ρ') a) (range f) = 1
[PROOFSTEP]
suffices ha' : a ∉ {a : α | condKernelReal ρ' a (range f) = 1}ᶜ
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
a : α
ha : ¬a ∈ toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ
h_ss :
  {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ ⊆
    toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ
ha' : ¬a ∈ {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ
⊢ ↑↑(↑(condKernelReal ρ') a) (range f) = 1
[PROOFSTEP]
rwa [not_mem_compl_iff] at ha' 
[GOAL]
case ha'
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
a : α
ha : ¬a ∈ toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ
h_ss :
  {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ ⊆
    toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ
⊢ ¬a ∈ {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ
[PROOFSTEP]
exact not_mem_subset h_ss ha
[GOAL]
case intro
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
⊢ ∃ η _h, kernel.const γ ρ = kernel.const γ (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft γ η
[PROOFSTEP]
have h_prod_embed : MeasurableEmbedding (Prod.map (id : α → α) f) := MeasurableEmbedding.id.prod_mk hf
[GOAL]
case intro
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
⊢ ∃ η _h, kernel.const γ ρ = kernel.const γ (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft γ η
[PROOFSTEP]
have h_fst : ρ'.fst = ρ.fst := by
  ext1 u hu
  rw [Measure.fst_apply hu, Measure.fst_apply hu, Measure.map_apply h_prod_embed.measurable (measurable_fst hu)]
  rfl
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
⊢ Measure.fst ρ' = Measure.fst ρ
[PROOFSTEP]
ext1 u hu
[GOAL]
case h
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
u : Set α
hu : MeasurableSet u
⊢ ↑↑(Measure.fst ρ') u = ↑↑(Measure.fst ρ) u
[PROOFSTEP]
rw [Measure.fst_apply hu, Measure.fst_apply hu, Measure.map_apply h_prod_embed.measurable (measurable_fst hu)]
[GOAL]
case h
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
u : Set α
hu : MeasurableSet u
⊢ ↑↑ρ (Prod.map id f ⁻¹' (Prod.fst ⁻¹' u)) = ↑↑ρ (Prod.fst ⁻¹' u)
[PROOFSTEP]
rfl
[GOAL]
case intro
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
⊢ ∃ η _h, kernel.const γ ρ = kernel.const γ (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft γ η
[PROOFSTEP]
have h_ae : ∀ᵐ a ∂ρ.fst, a ∈ ρ_set := by
  rw [ae_iff]
  simp only [not_mem_compl_iff, setOf_mem_eq, measure_toMeasurable]
  change ρ.fst {a : α | a ∉ {a' : α | condKernelReal ρ' a' (range f) = 1}} = 0
  rw [← ae_iff, ← h_fst]
  refine' ae_condKernelReal_eq_one ρ' hf.measurableSet_range _
  rw [Measure.map_apply h_prod_embed.measurable]
  swap; · exact measurable_snd hf.measurableSet_range.compl
  convert measure_empty (α := α × Ω)
  ext1 x
  simp only [mem_compl_iff, mem_range, preimage_setOf_eq, Prod_map, mem_setOf_eq, mem_empty_iff_false, iff_false_iff,
    Classical.not_not, exists_apply_eq_apply]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
⊢ ∀ᵐ (a : α) ∂Measure.fst ρ, a ∈ ρ_set
[PROOFSTEP]
rw [ae_iff]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
⊢ ↑↑(Measure.fst ρ) {a | ¬a ∈ ρ_set} = 0
[PROOFSTEP]
simp only [not_mem_compl_iff, setOf_mem_eq, measure_toMeasurable]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
⊢ ↑↑(Measure.fst ρ) {a | ↑↑(↑(condKernelReal (Measure.map (Prod.map id f) ρ)) a) (range f) = 1}ᶜ = 0
[PROOFSTEP]
change ρ.fst {a : α | a ∉ {a' : α | condKernelReal ρ' a' (range f) = 1}} = 0
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
⊢ ↑↑(Measure.fst ρ) {a | ¬a ∈ {a' | ↑↑(↑(condKernelReal ρ') a') (range f) = 1}} = 0
[PROOFSTEP]
rw [← ae_iff, ← h_fst]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
⊢ ∀ᵐ (a : α) ∂Measure.fst ρ', a ∈ {a' | ↑↑(↑(condKernelReal ρ') a') (range f) = 1}
[PROOFSTEP]
refine' ae_condKernelReal_eq_one ρ' hf.measurableSet_range _
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
⊢ ↑↑ρ' {x | x.snd ∈ (range f)ᶜ} = 0
[PROOFSTEP]
rw [Measure.map_apply h_prod_embed.measurable]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
⊢ ↑↑ρ (Prod.map id f ⁻¹' {x | x.snd ∈ (range f)ᶜ}) = 0
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
⊢ MeasurableSet {x | x.snd ∈ (range f)ᶜ}
[PROOFSTEP]
swap
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
⊢ MeasurableSet {x | x.snd ∈ (range f)ᶜ}
[PROOFSTEP]
exact measurable_snd hf.measurableSet_range.compl
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
⊢ ↑↑ρ (Prod.map id f ⁻¹' {x | x.snd ∈ (range f)ᶜ}) = 0
[PROOFSTEP]
convert measure_empty (α := α × Ω)
[GOAL]
case h.e'_2.h.e'_3
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
⊢ Prod.map id f ⁻¹' {x | x.snd ∈ (range f)ᶜ} = ∅
[PROOFSTEP]
ext1 x
[GOAL]
case h.e'_2.h.e'_3.h
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
x : α × Ω
⊢ x ∈ Prod.map id f ⁻¹' {x | x.snd ∈ (range f)ᶜ} ↔ x ∈ ∅
[PROOFSTEP]
simp only [mem_compl_iff, mem_range, preimage_setOf_eq, Prod_map, mem_setOf_eq, mem_empty_iff_false, iff_false_iff,
  Classical.not_not, exists_apply_eq_apply]
[GOAL]
case intro
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
h_ae : ∀ᵐ (a : α) ∂Measure.fst ρ, a ∈ ρ_set
⊢ ∃ η _h, kernel.const γ ρ = kernel.const γ (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft γ η
[PROOFSTEP]
classical
obtain ⟨x₀, hx₀⟩ : ∃ x, x ∈ range f := range_nonempty _
let η' :=
  kernel.piecewise hm (condKernelReal ρ')
    (kernel.deterministic (fun _ => x₀) measurable_const)
      -- We show that `kernel.comapRight η' hf` is a suitable Markov kernel.
refine' ⟨kernel.comapRight η' hf, _, _⟩
· refine' kernel.IsMarkovKernel.comapRight _ _ fun a => _
  rw [kernel.piecewise_apply']
  split_ifs with h_mem
  · exact h_eq_one_of_mem _ h_mem
  · rw [kernel.deterministic_apply' _ _ hf.measurableSet_range, Set.indicator_apply, if_pos hx₀]
have : kernel.const γ ρ = kernel.comapRight (kernel.const γ ρ') h_prod_embed :=
  by
  ext c t ht : 2
  rw [kernel.const_apply, kernel.comapRight_apply' _ _ _ ht, kernel.const_apply,
    Measure.map_apply h_prod_embed.measurable (h_prod_embed.measurableSet_image.mpr ht)]
  congr with x : 1
  rw [← @Prod.mk.eta _ _ x]
  simp only [id.def, mem_preimage, Prod.map_mk, mem_image, Prod.mk.inj_iff, Prod.exists]
  refine' ⟨fun h => ⟨x.1, x.2, h, rfl, rfl⟩, _⟩
  rintro ⟨a, b, h_mem, rfl, hf_eq⟩
  rwa [hf.injective hf_eq] at h_mem 
rw [this, kernel.const_eq_compProd_real _ ρ']
ext c t ht : 2
rw [kernel.comapRight_apply' _ _ _ ht, kernel.compProd_apply _ _ _ (h_prod_embed.measurableSet_image.mpr ht),
  kernel.const_apply, h_fst, kernel.compProd_apply _ _ _ ht, kernel.const_apply]
refine' lintegral_congr_ae _
filter_upwards [h_ae] with a ha
rw [kernel.prodMkLeft_apply', kernel.prodMkLeft_apply', kernel.comapRight_apply']
swap
· exact measurable_prod_mk_left ht
have h1 : {c : ℝ | (a, c) ∈ Prod.map id f '' t} = f '' {c : Ω | (a, c) ∈ t} :=
  by
  ext1 x
  simp only [Prod_map, id.def, mem_image, Prod.mk.inj_iff, Prod.exists, mem_setOf_eq]
  constructor
  · rintro ⟨a', b, h_mem, rfl, hf_eq⟩
    exact ⟨b, h_mem, hf_eq⟩
  · rintro ⟨b, h_mem, hf_eq⟩
    exact ⟨a, b, h_mem, rfl, hf_eq⟩
have h2 : condKernelReal ρ' (c, a).snd = η' (c, a).snd := by rw [kernel.piecewise_apply, if_pos ha]
rw [h1, h2]
[GOAL]
case intro
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
h_ae : ∀ᵐ (a : α) ∂Measure.fst ρ, a ∈ ρ_set
⊢ ∃ η _h, kernel.const γ ρ = kernel.const γ (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft γ η
[PROOFSTEP]
obtain ⟨x₀, hx₀⟩ : ∃ x, x ∈ range f := range_nonempty _
[GOAL]
case intro.intro
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
h_ae : ∀ᵐ (a : α) ∂Measure.fst ρ, a ∈ ρ_set
x₀ : ℝ
hx₀ : x₀ ∈ range f
⊢ ∃ η _h, kernel.const γ ρ = kernel.const γ (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft γ η
[PROOFSTEP]
let η' :=
  kernel.piecewise hm (condKernelReal ρ')
    (kernel.deterministic (fun _ => x₀) measurable_const)
      -- We show that `kernel.comapRight η' hf` is a suitable Markov kernel.
[GOAL]
case intro.intro
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
h_ae : ∀ᵐ (a : α) ∂Measure.fst ρ, a ∈ ρ_set
x₀ : ℝ
hx₀ : x₀ ∈ range f
η' : { x // x ∈ kernel α ℝ } :=
  kernel.piecewise hm (condKernelReal ρ') (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀))
⊢ ∃ η _h, kernel.const γ ρ = kernel.const γ (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft γ η
[PROOFSTEP]
refine' ⟨kernel.comapRight η' hf, _, _⟩
[GOAL]
case intro.intro.refine'_1
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
h_ae : ∀ᵐ (a : α) ∂Measure.fst ρ, a ∈ ρ_set
x₀ : ℝ
hx₀ : x₀ ∈ range f
η' : { x // x ∈ kernel α ℝ } :=
  kernel.piecewise hm (condKernelReal ρ') (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀))
⊢ IsMarkovKernel (kernel.comapRight η' hf)
[PROOFSTEP]
refine' kernel.IsMarkovKernel.comapRight _ _ fun a => _
[GOAL]
case intro.intro.refine'_1
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
h_ae : ∀ᵐ (a : α) ∂Measure.fst ρ, a ∈ ρ_set
x₀ : ℝ
hx₀ : x₀ ∈ range f
η' : { x // x ∈ kernel α ℝ } :=
  kernel.piecewise hm (condKernelReal ρ') (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀))
a : α
⊢ ↑↑(↑η' a) (range f) = 1
[PROOFSTEP]
rw [kernel.piecewise_apply']
[GOAL]
case intro.intro.refine'_1
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
h_ae : ∀ᵐ (a : α) ∂Measure.fst ρ, a ∈ ρ_set
x₀ : ℝ
hx₀ : x₀ ∈ range f
η' : { x // x ∈ kernel α ℝ } :=
  kernel.piecewise hm (condKernelReal ρ') (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀))
a : α
⊢ (if a ∈ ρ_set then ↑↑(↑(condKernelReal ρ') a) (range f)
    else ↑↑(↑(kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀)) a) (range f)) =
    1
[PROOFSTEP]
split_ifs with h_mem
[GOAL]
case pos
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
h_ae : ∀ᵐ (a : α) ∂Measure.fst ρ, a ∈ ρ_set
x₀ : ℝ
hx₀ : x₀ ∈ range f
η' : { x // x ∈ kernel α ℝ } :=
  kernel.piecewise hm (condKernelReal ρ') (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀))
a : α
h_mem : a ∈ ρ_set
⊢ ↑↑(↑(condKernelReal ρ') a) (range f) = 1
[PROOFSTEP]
exact h_eq_one_of_mem _ h_mem
[GOAL]
case neg
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
h_ae : ∀ᵐ (a : α) ∂Measure.fst ρ, a ∈ ρ_set
x₀ : ℝ
hx₀ : x₀ ∈ range f
η' : { x // x ∈ kernel α ℝ } :=
  kernel.piecewise hm (condKernelReal ρ') (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀))
a : α
h_mem : ¬a ∈ ρ_set
⊢ ↑↑(↑(kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀)) a) (range f) = 1
[PROOFSTEP]
rw [kernel.deterministic_apply' _ _ hf.measurableSet_range, Set.indicator_apply, if_pos hx₀]
[GOAL]
case intro.intro.refine'_2
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
h_ae : ∀ᵐ (a : α) ∂Measure.fst ρ, a ∈ ρ_set
x₀ : ℝ
hx₀ : x₀ ∈ range f
η' : { x // x ∈ kernel α ℝ } :=
  kernel.piecewise hm (condKernelReal ρ') (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀))
⊢ kernel.const γ ρ = kernel.const γ (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft γ (kernel.comapRight η' hf)
[PROOFSTEP]
have : kernel.const γ ρ = kernel.comapRight (kernel.const γ ρ') h_prod_embed :=
  by
  ext c t ht : 2
  rw [kernel.const_apply, kernel.comapRight_apply' _ _ _ ht, kernel.const_apply,
    Measure.map_apply h_prod_embed.measurable (h_prod_embed.measurableSet_image.mpr ht)]
  congr with x : 1
  rw [← @Prod.mk.eta _ _ x]
  simp only [id.def, mem_preimage, Prod.map_mk, mem_image, Prod.mk.inj_iff, Prod.exists]
  refine' ⟨fun h => ⟨x.1, x.2, h, rfl, rfl⟩, _⟩
  rintro ⟨a, b, h_mem, rfl, hf_eq⟩
  rwa [hf.injective hf_eq] at h_mem 
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
h_ae : ∀ᵐ (a : α) ∂Measure.fst ρ, a ∈ ρ_set
x₀ : ℝ
hx₀ : x₀ ∈ range f
η' : { x // x ∈ kernel α ℝ } :=
  kernel.piecewise hm (condKernelReal ρ') (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀))
⊢ kernel.const γ ρ = kernel.comapRight (kernel.const γ ρ') h_prod_embed
[PROOFSTEP]
ext c t ht : 2
[GOAL]
case h.h
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
h_ae : ∀ᵐ (a : α) ∂Measure.fst ρ, a ∈ ρ_set
x₀ : ℝ
hx₀ : x₀ ∈ range f
η' : { x // x ∈ kernel α ℝ } :=
  kernel.piecewise hm (condKernelReal ρ') (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀))
c : γ
t : Set (α × Ω)
ht : MeasurableSet t
⊢ ↑↑(↑(kernel.const γ ρ) c) t = ↑↑(↑(kernel.comapRight (kernel.const γ ρ') h_prod_embed) c) t
[PROOFSTEP]
rw [kernel.const_apply, kernel.comapRight_apply' _ _ _ ht, kernel.const_apply,
  Measure.map_apply h_prod_embed.measurable (h_prod_embed.measurableSet_image.mpr ht)]
[GOAL]
case h.h
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
h_ae : ∀ᵐ (a : α) ∂Measure.fst ρ, a ∈ ρ_set
x₀ : ℝ
hx₀ : x₀ ∈ range f
η' : { x // x ∈ kernel α ℝ } :=
  kernel.piecewise hm (condKernelReal ρ') (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀))
c : γ
t : Set (α × Ω)
ht : MeasurableSet t
⊢ ↑↑ρ t = ↑↑ρ (Prod.map id f ⁻¹' (Prod.map id f '' t))
[PROOFSTEP]
congr with x : 1
[GOAL]
case h.h.e_a.h
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
h_ae : ∀ᵐ (a : α) ∂Measure.fst ρ, a ∈ ρ_set
x₀ : ℝ
hx₀ : x₀ ∈ range f
η' : { x // x ∈ kernel α ℝ } :=
  kernel.piecewise hm (condKernelReal ρ') (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀))
c : γ
t : Set (α × Ω)
ht : MeasurableSet t
x : α × Ω
⊢ x ∈ t ↔ x ∈ Prod.map id f ⁻¹' (Prod.map id f '' t)
[PROOFSTEP]
rw [← @Prod.mk.eta _ _ x]
[GOAL]
case h.h.e_a.h
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
h_ae : ∀ᵐ (a : α) ∂Measure.fst ρ, a ∈ ρ_set
x₀ : ℝ
hx₀ : x₀ ∈ range f
η' : { x // x ∈ kernel α ℝ } :=
  kernel.piecewise hm (condKernelReal ρ') (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀))
c : γ
t : Set (α × Ω)
ht : MeasurableSet t
x : α × Ω
⊢ (x.fst, x.snd) ∈ t ↔ (x.fst, x.snd) ∈ Prod.map id f ⁻¹' (Prod.map id f '' t)
[PROOFSTEP]
simp only [id.def, mem_preimage, Prod.map_mk, mem_image, Prod.mk.inj_iff, Prod.exists]
[GOAL]
case h.h.e_a.h
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
h_ae : ∀ᵐ (a : α) ∂Measure.fst ρ, a ∈ ρ_set
x₀ : ℝ
hx₀ : x₀ ∈ range f
η' : { x // x ∈ kernel α ℝ } :=
  kernel.piecewise hm (condKernelReal ρ') (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀))
c : γ
t : Set (α × Ω)
ht : MeasurableSet t
x : α × Ω
⊢ (x.fst, x.snd) ∈ t ↔ ∃ a b, (a, b) ∈ t ∧ a = x.fst ∧ f b = f x.snd
[PROOFSTEP]
refine' ⟨fun h => ⟨x.1, x.2, h, rfl, rfl⟩, _⟩
[GOAL]
case h.h.e_a.h
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
h_ae : ∀ᵐ (a : α) ∂Measure.fst ρ, a ∈ ρ_set
x₀ : ℝ
hx₀ : x₀ ∈ range f
η' : { x // x ∈ kernel α ℝ } :=
  kernel.piecewise hm (condKernelReal ρ') (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀))
c : γ
t : Set (α × Ω)
ht : MeasurableSet t
x : α × Ω
⊢ (∃ a b, (a, b) ∈ t ∧ a = x.fst ∧ f b = f x.snd) → (x.fst, x.snd) ∈ t
[PROOFSTEP]
rintro ⟨a, b, h_mem, rfl, hf_eq⟩
[GOAL]
case h.h.e_a.h.intro.intro.intro.intro
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
h_ae : ∀ᵐ (a : α) ∂Measure.fst ρ, a ∈ ρ_set
x₀ : ℝ
hx₀ : x₀ ∈ range f
η' : { x // x ∈ kernel α ℝ } :=
  kernel.piecewise hm (condKernelReal ρ') (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀))
c : γ
t : Set (α × Ω)
ht : MeasurableSet t
x : α × Ω
b : Ω
hf_eq : f b = f x.snd
h_mem : (x.fst, b) ∈ t
⊢ (x.fst, x.snd) ∈ t
[PROOFSTEP]
rwa [hf.injective hf_eq] at h_mem 
[GOAL]
case intro.intro.refine'_2
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
h_ae : ∀ᵐ (a : α) ∂Measure.fst ρ, a ∈ ρ_set
x₀ : ℝ
hx₀ : x₀ ∈ range f
η' : { x // x ∈ kernel α ℝ } :=
  kernel.piecewise hm (condKernelReal ρ') (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀))
this : kernel.const γ ρ = kernel.comapRight (kernel.const γ ρ') h_prod_embed
⊢ kernel.const γ ρ = kernel.const γ (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft γ (kernel.comapRight η' hf)
[PROOFSTEP]
rw [this, kernel.const_eq_compProd_real _ ρ']
[GOAL]
case intro.intro.refine'_2
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
h_ae : ∀ᵐ (a : α) ∂Measure.fst ρ, a ∈ ρ_set
x₀ : ℝ
hx₀ : x₀ ∈ range f
η' : { x // x ∈ kernel α ℝ } :=
  kernel.piecewise hm (condKernelReal ρ') (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀))
this : kernel.const γ ρ = kernel.comapRight (kernel.const γ ρ') h_prod_embed
⊢ kernel.comapRight (kernel.const γ (Measure.fst ρ') ⊗ₖ kernel.prodMkLeft γ (condKernelReal ρ')) h_prod_embed =
    kernel.const γ (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft γ (kernel.comapRight η' hf)
[PROOFSTEP]
ext c t ht : 2
[GOAL]
case intro.intro.refine'_2.h.h
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
h_ae : ∀ᵐ (a : α) ∂Measure.fst ρ, a ∈ ρ_set
x₀ : ℝ
hx₀ : x₀ ∈ range f
η' : { x // x ∈ kernel α ℝ } :=
  kernel.piecewise hm (condKernelReal ρ') (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀))
this : kernel.const γ ρ = kernel.comapRight (kernel.const γ ρ') h_prod_embed
c : γ
t : Set (α × Ω)
ht : MeasurableSet t
⊢ ↑↑(↑(kernel.comapRight (kernel.const γ (Measure.fst ρ') ⊗ₖ kernel.prodMkLeft γ (condKernelReal ρ')) h_prod_embed) c)
      t =
    ↑↑(↑(kernel.const γ (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft γ (kernel.comapRight η' hf)) c) t
[PROOFSTEP]
rw [kernel.comapRight_apply' _ _ _ ht, kernel.compProd_apply _ _ _ (h_prod_embed.measurableSet_image.mpr ht),
  kernel.const_apply, h_fst, kernel.compProd_apply _ _ _ ht, kernel.const_apply]
[GOAL]
case intro.intro.refine'_2.h.h
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
h_ae : ∀ᵐ (a : α) ∂Measure.fst ρ, a ∈ ρ_set
x₀ : ℝ
hx₀ : x₀ ∈ range f
η' : { x // x ∈ kernel α ℝ } :=
  kernel.piecewise hm (condKernelReal ρ') (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀))
this : kernel.const γ ρ = kernel.comapRight (kernel.const γ ρ') h_prod_embed
c : γ
t : Set (α × Ω)
ht : MeasurableSet t
⊢ ∫⁻ (b : α), ↑↑(↑(kernel.prodMkLeft γ (condKernelReal ρ')) (c, b)) {c | (b, c) ∈ Prod.map id f '' t} ∂Measure.fst ρ =
    ∫⁻ (b : α), ↑↑(↑(kernel.prodMkLeft γ (kernel.comapRight η' hf)) (c, b)) {c | (b, c) ∈ t} ∂Measure.fst ρ
[PROOFSTEP]
refine' lintegral_congr_ae _
[GOAL]
case intro.intro.refine'_2.h.h
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
h_ae : ∀ᵐ (a : α) ∂Measure.fst ρ, a ∈ ρ_set
x₀ : ℝ
hx₀ : x₀ ∈ range f
η' : { x // x ∈ kernel α ℝ } :=
  kernel.piecewise hm (condKernelReal ρ') (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀))
this : kernel.const γ ρ = kernel.comapRight (kernel.const γ ρ') h_prod_embed
c : γ
t : Set (α × Ω)
ht : MeasurableSet t
⊢ (fun b => ↑↑(↑(kernel.prodMkLeft γ (condKernelReal ρ')) (c, b)) {c | (b, c) ∈ Prod.map id f '' t}) =ᵐ[Measure.fst ρ]
    fun b => ↑↑(↑(kernel.prodMkLeft γ (kernel.comapRight η' hf)) (c, b)) {c | (b, c) ∈ t}
[PROOFSTEP]
filter_upwards [h_ae] with a ha
[GOAL]
case h
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
h_ae : ∀ᵐ (a : α) ∂Measure.fst ρ, a ∈ ρ_set
x₀ : ℝ
hx₀ : x₀ ∈ range f
η' : { x // x ∈ kernel α ℝ } :=
  kernel.piecewise hm (condKernelReal ρ') (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀))
this : kernel.const γ ρ = kernel.comapRight (kernel.const γ ρ') h_prod_embed
c : γ
t : Set (α × Ω)
ht : MeasurableSet t
a : α
ha : a ∈ (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal (Measure.map (Prod.map id f) ρ)) a) (range f) = 1}ᶜ)ᶜ
⊢ ↑↑(↑(kernel.prodMkLeft γ (condKernelReal (Measure.map (Prod.map id f) ρ))) (c, a)) {c | (a, c) ∈ Prod.map id f '' t} =
    ↑↑(↑(kernel.prodMkLeft γ
                (kernel.comapRight
                  (kernel.piecewise hm (condKernelReal (Measure.map (Prod.map id f) ρ))
                    (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀)))
                  hf))
            (c, a))
      {c | (a, c) ∈ t}
[PROOFSTEP]
rw [kernel.prodMkLeft_apply', kernel.prodMkLeft_apply', kernel.comapRight_apply']
[GOAL]
case h
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
h_ae : ∀ᵐ (a : α) ∂Measure.fst ρ, a ∈ ρ_set
x₀ : ℝ
hx₀ : x₀ ∈ range f
η' : { x // x ∈ kernel α ℝ } :=
  kernel.piecewise hm (condKernelReal ρ') (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀))
this : kernel.const γ ρ = kernel.comapRight (kernel.const γ ρ') h_prod_embed
c : γ
t : Set (α × Ω)
ht : MeasurableSet t
a : α
ha : a ∈ (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal (Measure.map (Prod.map id f) ρ)) a) (range f) = 1}ᶜ)ᶜ
⊢ ↑↑(↑(condKernelReal (Measure.map (Prod.map id f) ρ)) (c, a).snd) {c | (a, c) ∈ Prod.map id f '' t} =
    ↑↑(↑(kernel.piecewise hm (condKernelReal (Measure.map (Prod.map id f) ρ))
                (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀)))
            (c, a).snd)
      (f '' {c | (a, c) ∈ t})
case h.ht
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
h_ae : ∀ᵐ (a : α) ∂Measure.fst ρ, a ∈ ρ_set
x₀ : ℝ
hx₀ : x₀ ∈ range f
η' : { x // x ∈ kernel α ℝ } :=
  kernel.piecewise hm (condKernelReal ρ') (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀))
this : kernel.const γ ρ = kernel.comapRight (kernel.const γ ρ') h_prod_embed
c : γ
t : Set (α × Ω)
ht : MeasurableSet t
a : α
ha : a ∈ (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal (Measure.map (Prod.map id f) ρ)) a) (range f) = 1}ᶜ)ᶜ
⊢ MeasurableSet {c | (a, c) ∈ t}
[PROOFSTEP]
swap
[GOAL]
case h.ht
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
h_ae : ∀ᵐ (a : α) ∂Measure.fst ρ, a ∈ ρ_set
x₀ : ℝ
hx₀ : x₀ ∈ range f
η' : { x // x ∈ kernel α ℝ } :=
  kernel.piecewise hm (condKernelReal ρ') (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀))
this : kernel.const γ ρ = kernel.comapRight (kernel.const γ ρ') h_prod_embed
c : γ
t : Set (α × Ω)
ht : MeasurableSet t
a : α
ha : a ∈ (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal (Measure.map (Prod.map id f) ρ)) a) (range f) = 1}ᶜ)ᶜ
⊢ MeasurableSet {c | (a, c) ∈ t}
[PROOFSTEP]
exact measurable_prod_mk_left ht
[GOAL]
case h
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
h_ae : ∀ᵐ (a : α) ∂Measure.fst ρ, a ∈ ρ_set
x₀ : ℝ
hx₀ : x₀ ∈ range f
η' : { x // x ∈ kernel α ℝ } :=
  kernel.piecewise hm (condKernelReal ρ') (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀))
this : kernel.const γ ρ = kernel.comapRight (kernel.const γ ρ') h_prod_embed
c : γ
t : Set (α × Ω)
ht : MeasurableSet t
a : α
ha : a ∈ (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal (Measure.map (Prod.map id f) ρ)) a) (range f) = 1}ᶜ)ᶜ
⊢ ↑↑(↑(condKernelReal (Measure.map (Prod.map id f) ρ)) (c, a).snd) {c | (a, c) ∈ Prod.map id f '' t} =
    ↑↑(↑(kernel.piecewise hm (condKernelReal (Measure.map (Prod.map id f) ρ))
                (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀)))
            (c, a).snd)
      (f '' {c | (a, c) ∈ t})
[PROOFSTEP]
have h1 : {c : ℝ | (a, c) ∈ Prod.map id f '' t} = f '' {c : Ω | (a, c) ∈ t} :=
  by
  ext1 x
  simp only [Prod_map, id.def, mem_image, Prod.mk.inj_iff, Prod.exists, mem_setOf_eq]
  constructor
  · rintro ⟨a', b, h_mem, rfl, hf_eq⟩
    exact ⟨b, h_mem, hf_eq⟩
  · rintro ⟨b, h_mem, hf_eq⟩
    exact ⟨a, b, h_mem, rfl, hf_eq⟩
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
h_ae : ∀ᵐ (a : α) ∂Measure.fst ρ, a ∈ ρ_set
x₀ : ℝ
hx₀ : x₀ ∈ range f
η' : { x // x ∈ kernel α ℝ } :=
  kernel.piecewise hm (condKernelReal ρ') (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀))
this : kernel.const γ ρ = kernel.comapRight (kernel.const γ ρ') h_prod_embed
c : γ
t : Set (α × Ω)
ht : MeasurableSet t
a : α
ha : a ∈ (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal (Measure.map (Prod.map id f) ρ)) a) (range f) = 1}ᶜ)ᶜ
⊢ {c | (a, c) ∈ Prod.map id f '' t} = f '' {c | (a, c) ∈ t}
[PROOFSTEP]
ext1 x
[GOAL]
case h
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
h_ae : ∀ᵐ (a : α) ∂Measure.fst ρ, a ∈ ρ_set
x₀ : ℝ
hx₀ : x₀ ∈ range f
η' : { x // x ∈ kernel α ℝ } :=
  kernel.piecewise hm (condKernelReal ρ') (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀))
this : kernel.const γ ρ = kernel.comapRight (kernel.const γ ρ') h_prod_embed
c : γ
t : Set (α × Ω)
ht : MeasurableSet t
a : α
ha : a ∈ (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal (Measure.map (Prod.map id f) ρ)) a) (range f) = 1}ᶜ)ᶜ
x : ℝ
⊢ x ∈ {c | (a, c) ∈ Prod.map id f '' t} ↔ x ∈ f '' {c | (a, c) ∈ t}
[PROOFSTEP]
simp only [Prod_map, id.def, mem_image, Prod.mk.inj_iff, Prod.exists, mem_setOf_eq]
[GOAL]
case h
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
h_ae : ∀ᵐ (a : α) ∂Measure.fst ρ, a ∈ ρ_set
x₀ : ℝ
hx₀ : x₀ ∈ range f
η' : { x // x ∈ kernel α ℝ } :=
  kernel.piecewise hm (condKernelReal ρ') (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀))
this : kernel.const γ ρ = kernel.comapRight (kernel.const γ ρ') h_prod_embed
c : γ
t : Set (α × Ω)
ht : MeasurableSet t
a : α
ha : a ∈ (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal (Measure.map (Prod.map id f) ρ)) a) (range f) = 1}ᶜ)ᶜ
x : ℝ
⊢ (∃ a_1 b, (a_1, b) ∈ t ∧ a_1 = a ∧ f b = x) ↔ ∃ x_1, (a, x_1) ∈ t ∧ f x_1 = x
[PROOFSTEP]
constructor
[GOAL]
case h.mp
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
h_ae : ∀ᵐ (a : α) ∂Measure.fst ρ, a ∈ ρ_set
x₀ : ℝ
hx₀ : x₀ ∈ range f
η' : { x // x ∈ kernel α ℝ } :=
  kernel.piecewise hm (condKernelReal ρ') (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀))
this : kernel.const γ ρ = kernel.comapRight (kernel.const γ ρ') h_prod_embed
c : γ
t : Set (α × Ω)
ht : MeasurableSet t
a : α
ha : a ∈ (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal (Measure.map (Prod.map id f) ρ)) a) (range f) = 1}ᶜ)ᶜ
x : ℝ
⊢ (∃ a_1 b, (a_1, b) ∈ t ∧ a_1 = a ∧ f b = x) → ∃ x_1, (a, x_1) ∈ t ∧ f x_1 = x
[PROOFSTEP]
rintro ⟨a', b, h_mem, rfl, hf_eq⟩
[GOAL]
case h.mp.intro.intro.intro.intro
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
h_ae : ∀ᵐ (a : α) ∂Measure.fst ρ, a ∈ ρ_set
x₀ : ℝ
hx₀ : x₀ ∈ range f
η' : { x // x ∈ kernel α ℝ } :=
  kernel.piecewise hm (condKernelReal ρ') (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀))
this : kernel.const γ ρ = kernel.comapRight (kernel.const γ ρ') h_prod_embed
c : γ
t : Set (α × Ω)
ht : MeasurableSet t
x : ℝ
a' : α
b : Ω
h_mem : (a', b) ∈ t
hf_eq : f b = x
ha : a' ∈ (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal (Measure.map (Prod.map id f) ρ)) a) (range f) = 1}ᶜ)ᶜ
⊢ ∃ x_1, (a', x_1) ∈ t ∧ f x_1 = x
[PROOFSTEP]
exact ⟨b, h_mem, hf_eq⟩
[GOAL]
case h.mpr
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
h_ae : ∀ᵐ (a : α) ∂Measure.fst ρ, a ∈ ρ_set
x₀ : ℝ
hx₀ : x₀ ∈ range f
η' : { x // x ∈ kernel α ℝ } :=
  kernel.piecewise hm (condKernelReal ρ') (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀))
this : kernel.const γ ρ = kernel.comapRight (kernel.const γ ρ') h_prod_embed
c : γ
t : Set (α × Ω)
ht : MeasurableSet t
a : α
ha : a ∈ (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal (Measure.map (Prod.map id f) ρ)) a) (range f) = 1}ᶜ)ᶜ
x : ℝ
⊢ (∃ x_1, (a, x_1) ∈ t ∧ f x_1 = x) → ∃ a_2 b, (a_2, b) ∈ t ∧ a_2 = a ∧ f b = x
[PROOFSTEP]
rintro ⟨b, h_mem, hf_eq⟩
[GOAL]
case h.mpr.intro.intro
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
h_ae : ∀ᵐ (a : α) ∂Measure.fst ρ, a ∈ ρ_set
x₀ : ℝ
hx₀ : x₀ ∈ range f
η' : { x // x ∈ kernel α ℝ } :=
  kernel.piecewise hm (condKernelReal ρ') (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀))
this : kernel.const γ ρ = kernel.comapRight (kernel.const γ ρ') h_prod_embed
c : γ
t : Set (α × Ω)
ht : MeasurableSet t
a : α
ha : a ∈ (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal (Measure.map (Prod.map id f) ρ)) a) (range f) = 1}ᶜ)ᶜ
x : ℝ
b : Ω
h_mem : (a, b) ∈ t
hf_eq : f b = x
⊢ ∃ a_1 b, (a_1, b) ∈ t ∧ a_1 = a ∧ f b = x
[PROOFSTEP]
exact ⟨a, b, h_mem, rfl, hf_eq⟩
[GOAL]
case h
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
h_ae : ∀ᵐ (a : α) ∂Measure.fst ρ, a ∈ ρ_set
x₀ : ℝ
hx₀ : x₀ ∈ range f
η' : { x // x ∈ kernel α ℝ } :=
  kernel.piecewise hm (condKernelReal ρ') (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀))
this : kernel.const γ ρ = kernel.comapRight (kernel.const γ ρ') h_prod_embed
c : γ
t : Set (α × Ω)
ht : MeasurableSet t
a : α
ha : a ∈ (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal (Measure.map (Prod.map id f) ρ)) a) (range f) = 1}ᶜ)ᶜ
h1 : {c | (a, c) ∈ Prod.map id f '' t} = f '' {c | (a, c) ∈ t}
⊢ ↑↑(↑(condKernelReal (Measure.map (Prod.map id f) ρ)) (c, a).snd) {c | (a, c) ∈ Prod.map id f '' t} =
    ↑↑(↑(kernel.piecewise hm (condKernelReal (Measure.map (Prod.map id f) ρ))
                (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀)))
            (c, a).snd)
      (f '' {c | (a, c) ∈ t})
[PROOFSTEP]
have h2 : condKernelReal ρ' (c, a).snd = η' (c, a).snd := by rw [kernel.piecewise_apply, if_pos ha]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
h_ae : ∀ᵐ (a : α) ∂Measure.fst ρ, a ∈ ρ_set
x₀ : ℝ
hx₀ : x₀ ∈ range f
η' : { x // x ∈ kernel α ℝ } :=
  kernel.piecewise hm (condKernelReal ρ') (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀))
this : kernel.const γ ρ = kernel.comapRight (kernel.const γ ρ') h_prod_embed
c : γ
t : Set (α × Ω)
ht : MeasurableSet t
a : α
ha : a ∈ (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal (Measure.map (Prod.map id f) ρ)) a) (range f) = 1}ᶜ)ᶜ
h1 : {c | (a, c) ∈ Prod.map id f '' t} = f '' {c | (a, c) ∈ t}
⊢ ↑(condKernelReal ρ') (c, a).snd = ↑η' (c, a).snd
[PROOFSTEP]
rw [kernel.piecewise_apply, if_pos ha]
[GOAL]
case h
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁶ : TopologicalSpace Ω
inst✝⁵ : PolishSpace Ω
inst✝⁴ : MeasurableSpace Ω
inst✝³ : BorelSpace Ω
inst✝² : Nonempty Ω
ρ : Measure (α × Ω)
inst✝¹ : IsFiniteMeasure ρ
γ : Type u_3
inst✝ : MeasurableSpace γ
f : Ω → ℝ
hf : MeasurableEmbedding f
ρ' : Measure (α × ℝ) := Measure.map (Prod.map id f) ρ
ρ_set : Set α := (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal ρ') a) (range f) = 1}ᶜ)ᶜ
hm : MeasurableSet ρ_set
h_eq_one_of_mem : ∀ (a : α), a ∈ ρ_set → ↑↑(↑(condKernelReal ρ') a) (range f) = 1
h_prod_embed : MeasurableEmbedding (Prod.map id f)
h_fst : Measure.fst ρ' = Measure.fst ρ
h_ae : ∀ᵐ (a : α) ∂Measure.fst ρ, a ∈ ρ_set
x₀ : ℝ
hx₀ : x₀ ∈ range f
η' : { x // x ∈ kernel α ℝ } :=
  kernel.piecewise hm (condKernelReal ρ') (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀))
this : kernel.const γ ρ = kernel.comapRight (kernel.const γ ρ') h_prod_embed
c : γ
t : Set (α × Ω)
ht : MeasurableSet t
a : α
ha : a ∈ (toMeasurable (Measure.fst ρ) {a | ↑↑(↑(condKernelReal (Measure.map (Prod.map id f) ρ)) a) (range f) = 1}ᶜ)ᶜ
h1 : {c | (a, c) ∈ Prod.map id f '' t} = f '' {c | (a, c) ∈ t}
h2 : ↑(condKernelReal ρ') (c, a).snd = ↑η' (c, a).snd
⊢ ↑↑(↑(condKernelReal (Measure.map (Prod.map id f) ρ)) (c, a).snd) {c | (a, c) ∈ Prod.map id f '' t} =
    ↑↑(↑(kernel.piecewise hm (condKernelReal (Measure.map (Prod.map id f) ρ))
                (kernel.deterministic (fun x => x₀) (_ : Measurable fun x => x₀)))
            (c, a).snd)
      (f '' {c | (a, c) ∈ t})
[PROOFSTEP]
rw [h1, h2]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
⊢ Measure.condKernel ρ =
    Exists.choose (_ : ∃ η _h, kernel.const Unit ρ = kernel.const Unit (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft Unit η)
[PROOFSTEP]
rw [MeasureTheory.Measure.condKernel]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
⊢ IsMarkovKernel (Measure.condKernel ρ)
[PROOFSTEP]
rw [condKernel_def]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
⊢ IsMarkovKernel
    (Exists.choose (_ : ∃ η _h, kernel.const Unit ρ = kernel.const Unit (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft Unit η))
[PROOFSTEP]
exact (exists_cond_kernel ρ Unit).choose_spec.choose
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
⊢ const Unit ρ = const Unit (Measure.fst ρ) ⊗ₖ prodMkLeft Unit (Measure.condKernel ρ)
[PROOFSTEP]
simp_rw [condKernel_def]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
⊢ const Unit ρ =
    const Unit (Measure.fst ρ) ⊗ₖ
      prodMkLeft Unit (Exists.choose (_ : ∃ η _h, const Unit ρ = const Unit (Measure.fst ρ) ⊗ₖ prodMkLeft Unit η))
[PROOFSTEP]
exact (exists_cond_kernel ρ Unit).choose_spec.choose_spec
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
⊢ ρ = ↑(kernel.const Unit (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft Unit (Measure.condKernel ρ)) ()
[PROOFSTEP]
rw [← kernel.const_unit_eq_compProd, kernel.const_apply]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁷ : TopologicalSpace Ω
inst✝⁶ : PolishSpace Ω
inst✝⁵ : MeasurableSpace Ω
inst✝⁴ : BorelSpace Ω
inst✝³ : Nonempty Ω
ρ✝ : Measure (α × Ω)
inst✝² : IsFiniteMeasure ρ✝
γ : Type u_3
inst✝¹ : MeasurableSpace γ
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
⊢ const γ ρ = const γ (Measure.fst ρ) ⊗ₖ prodMkLeft γ (Measure.condKernel ρ)
[PROOFSTEP]
ext a s hs : 2
[GOAL]
case h.h
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁷ : TopologicalSpace Ω
inst✝⁶ : PolishSpace Ω
inst✝⁵ : MeasurableSpace Ω
inst✝⁴ : BorelSpace Ω
inst✝³ : Nonempty Ω
ρ✝ : Measure (α × Ω)
inst✝² : IsFiniteMeasure ρ✝
γ : Type u_3
inst✝¹ : MeasurableSpace γ
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
a : γ
s : Set (α × Ω)
hs : MeasurableSet s
⊢ ↑↑(↑(const γ ρ) a) s = ↑↑(↑(const γ (Measure.fst ρ) ⊗ₖ prodMkLeft γ (Measure.condKernel ρ)) a) s
[PROOFSTEP]
simpa only [kernel.const_apply, kernel.compProd_apply _ _ _ hs, kernel.prodMkLeft_apply'] using
  kernel.ext_iff'.mp (kernel.const_unit_eq_compProd ρ) () s hs
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
s : Set (α × Ω)
hs : MeasurableSet s
⊢ ∫⁻ (a : α), ↑↑(↑(Measure.condKernel ρ) a) {x | (a, x) ∈ s} ∂Measure.fst ρ = ↑↑ρ s
[PROOFSTEP]
conv_rhs => rw [measure_eq_compProd ρ]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
s : Set (α × Ω)
hs : MeasurableSet s
| ↑↑ρ s
[PROOFSTEP]
rw [measure_eq_compProd ρ]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
s : Set (α × Ω)
hs : MeasurableSet s
| ↑↑ρ s
[PROOFSTEP]
rw [measure_eq_compProd ρ]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
s : Set (α × Ω)
hs : MeasurableSet s
| ↑↑ρ s
[PROOFSTEP]
rw [measure_eq_compProd ρ]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
s : Set (α × Ω)
hs : MeasurableSet s
⊢ ∫⁻ (a : α), ↑↑(↑(Measure.condKernel ρ) a) {x | (a, x) ∈ s} ∂Measure.fst ρ =
    ↑↑(↑(kernel.const Unit (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft Unit (Measure.condKernel ρ)) ()) s
[PROOFSTEP]
simp_rw [kernel.compProd_apply _ _ _ hs, kernel.const_apply, kernel.prodMkLeft_apply]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
s : Set α
hs : MeasurableSet s
t : Set Ω
ht : MeasurableSet t
⊢ ∫⁻ (a : α) in s, ↑↑(↑(Measure.condKernel ρ) a) t ∂Measure.fst ρ = ↑↑ρ (s ×ˢ t)
[PROOFSTEP]
have : ρ (s ×ˢ t) = ((kernel.const Unit ρ.fst ⊗ₖ kernel.prodMkLeft Unit ρ.condKernel) ()) (s ×ˢ t) := by congr;
  exact measure_eq_compProd ρ
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
s : Set α
hs : MeasurableSet s
t : Set Ω
ht : MeasurableSet t
⊢ ↑↑ρ (s ×ˢ t) = ↑↑(↑(kernel.const Unit (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft Unit (Measure.condKernel ρ)) ()) (s ×ˢ t)
[PROOFSTEP]
congr
[GOAL]
case e_self.e_self
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
s : Set α
hs : MeasurableSet s
t : Set Ω
ht : MeasurableSet t
⊢ ρ = ↑(kernel.const Unit (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft Unit (Measure.condKernel ρ)) ()
[PROOFSTEP]
exact measure_eq_compProd ρ
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
s : Set α
hs : MeasurableSet s
t : Set Ω
ht : MeasurableSet t
this :
  ↑↑ρ (s ×ˢ t) = ↑↑(↑(kernel.const Unit (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft Unit (Measure.condKernel ρ)) ()) (s ×ˢ t)
⊢ ∫⁻ (a : α) in s, ↑↑(↑(Measure.condKernel ρ) a) t ∂Measure.fst ρ = ↑↑ρ (s ×ˢ t)
[PROOFSTEP]
rw [this, kernel.compProd_apply _ _ _ (hs.prod ht)]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
s : Set α
hs : MeasurableSet s
t : Set Ω
ht : MeasurableSet t
this :
  ↑↑ρ (s ×ˢ t) = ↑↑(↑(kernel.const Unit (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft Unit (Measure.condKernel ρ)) ()) (s ×ˢ t)
⊢ ∫⁻ (a : α) in s, ↑↑(↑(Measure.condKernel ρ) a) t ∂Measure.fst ρ =
    ∫⁻ (b : α),
      ↑↑(↑(kernel.prodMkLeft Unit (Measure.condKernel ρ)) ((), b))
        {c | (b, c) ∈ s ×ˢ t} ∂↑(kernel.const Unit (Measure.fst ρ)) ()
[PROOFSTEP]
simp only [prod_mk_mem_set_prod_eq, kernel.lintegral_const, kernel.prodMkLeft_apply]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
s : Set α
hs : MeasurableSet s
t : Set Ω
ht : MeasurableSet t
this :
  ↑↑ρ (s ×ˢ t) = ↑↑(↑(kernel.const Unit (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft Unit (Measure.condKernel ρ)) ()) (s ×ˢ t)
⊢ ∫⁻ (a : α) in s, ↑↑(↑(Measure.condKernel ρ) a) t ∂Measure.fst ρ =
    ∫⁻ (x : α), ↑↑(↑(Measure.condKernel ρ) x) {c | x ∈ s ∧ c ∈ t} ∂Measure.fst ρ
[PROOFSTEP]
rw [← lintegral_indicator _ hs]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
s : Set α
hs : MeasurableSet s
t : Set Ω
ht : MeasurableSet t
this :
  ↑↑ρ (s ×ˢ t) = ↑↑(↑(kernel.const Unit (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft Unit (Measure.condKernel ρ)) ()) (s ×ˢ t)
⊢ ∫⁻ (a : α), indicator s (fun a => ↑↑(↑(Measure.condKernel ρ) a) t) a ∂Measure.fst ρ =
    ∫⁻ (x : α), ↑↑(↑(Measure.condKernel ρ) x) {c | x ∈ s ∧ c ∈ t} ∂Measure.fst ρ
[PROOFSTEP]
congr
[GOAL]
case e_f
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
s : Set α
hs : MeasurableSet s
t : Set Ω
ht : MeasurableSet t
this :
  ↑↑ρ (s ×ˢ t) = ↑↑(↑(kernel.const Unit (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft Unit (Measure.condKernel ρ)) ()) (s ×ˢ t)
⊢ (fun a => indicator s (fun a => ↑↑(↑(Measure.condKernel ρ) a) t) a) = fun x =>
    ↑↑(↑(Measure.condKernel ρ) x) {c | x ∈ s ∧ c ∈ t}
[PROOFSTEP]
ext1 x
[GOAL]
case e_f.h
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
s : Set α
hs : MeasurableSet s
t : Set Ω
ht : MeasurableSet t
this :
  ↑↑ρ (s ×ˢ t) = ↑↑(↑(kernel.const Unit (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft Unit (Measure.condKernel ρ)) ()) (s ×ˢ t)
x : α
⊢ indicator s (fun a => ↑↑(↑(Measure.condKernel ρ) a) t) x = ↑↑(↑(Measure.condKernel ρ) x) {c | x ∈ s ∧ c ∈ t}
[PROOFSTEP]
classical
rw [indicator_apply]
split_ifs with hx
· simp only [hx, if_true, true_and_iff, setOf_mem_eq]
· simp only [hx, if_false, false_and_iff, setOf_false, measure_empty]
[GOAL]
case e_f.h
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
s : Set α
hs : MeasurableSet s
t : Set Ω
ht : MeasurableSet t
this :
  ↑↑ρ (s ×ˢ t) = ↑↑(↑(kernel.const Unit (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft Unit (Measure.condKernel ρ)) ()) (s ×ˢ t)
x : α
⊢ indicator s (fun a => ↑↑(↑(Measure.condKernel ρ) a) t) x = ↑↑(↑(Measure.condKernel ρ) x) {c | x ∈ s ∧ c ∈ t}
[PROOFSTEP]
rw [indicator_apply]
[GOAL]
case e_f.h
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
s : Set α
hs : MeasurableSet s
t : Set Ω
ht : MeasurableSet t
this :
  ↑↑ρ (s ×ˢ t) = ↑↑(↑(kernel.const Unit (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft Unit (Measure.condKernel ρ)) ()) (s ×ˢ t)
x : α
⊢ (if x ∈ s then ↑↑(↑(Measure.condKernel ρ) x) t else 0) = ↑↑(↑(Measure.condKernel ρ) x) {c | x ∈ s ∧ c ∈ t}
[PROOFSTEP]
split_ifs with hx
[GOAL]
case pos
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
s : Set α
hs : MeasurableSet s
t : Set Ω
ht : MeasurableSet t
this :
  ↑↑ρ (s ×ˢ t) = ↑↑(↑(kernel.const Unit (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft Unit (Measure.condKernel ρ)) ()) (s ×ˢ t)
x : α
hx : x ∈ s
⊢ ↑↑(↑(Measure.condKernel ρ) x) t = ↑↑(↑(Measure.condKernel ρ) x) {c | x ∈ s ∧ c ∈ t}
[PROOFSTEP]
simp only [hx, if_true, true_and_iff, setOf_mem_eq]
[GOAL]
case neg
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
s : Set α
hs : MeasurableSet s
t : Set Ω
ht : MeasurableSet t
this :
  ↑↑ρ (s ×ˢ t) = ↑↑(↑(kernel.const Unit (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft Unit (Measure.condKernel ρ)) ()) (s ×ˢ t)
x : α
hx : ¬x ∈ s
⊢ 0 = ↑↑(↑(Measure.condKernel ρ) x) {c | x ∈ s ∧ c ∈ t}
[PROOFSTEP]
simp only [hx, if_false, false_and_iff, setOf_false, measure_empty]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → ℝ≥0∞
hf : Measurable f
⊢ ∫⁻ (a : α), ∫⁻ (ω : Ω), f (a, ω) ∂↑(Measure.condKernel ρ) a ∂Measure.fst ρ = ∫⁻ (x : α × Ω), f x ∂ρ
[PROOFSTEP]
conv_rhs => rw [measure_eq_compProd ρ]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → ℝ≥0∞
hf : Measurable f
| ∫⁻ (x : α × Ω), f x ∂ρ
[PROOFSTEP]
rw [measure_eq_compProd ρ]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → ℝ≥0∞
hf : Measurable f
| ∫⁻ (x : α × Ω), f x ∂ρ
[PROOFSTEP]
rw [measure_eq_compProd ρ]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → ℝ≥0∞
hf : Measurable f
| ∫⁻ (x : α × Ω), f x ∂ρ
[PROOFSTEP]
rw [measure_eq_compProd ρ]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → ℝ≥0∞
hf : Measurable f
⊢ ∫⁻ (a : α), ∫⁻ (ω : Ω), f (a, ω) ∂↑(Measure.condKernel ρ) a ∂Measure.fst ρ =
    ∫⁻ (x : α × Ω), f x ∂↑(kernel.const Unit (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft Unit (Measure.condKernel ρ)) ()
[PROOFSTEP]
rw [kernel.lintegral_compProd _ _ _ hf, kernel.const_apply]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → ℝ≥0∞
hf : Measurable f
⊢ ∫⁻ (a : α), ∫⁻ (ω : Ω), f (a, ω) ∂↑(Measure.condKernel ρ) a ∂Measure.fst ρ =
    ∫⁻ (b : α), ∫⁻ (c : Ω), f (b, c) ∂↑(kernel.prodMkLeft Unit (Measure.condKernel ρ)) ((), b) ∂Measure.fst ρ
[PROOFSTEP]
simp_rw [kernel.prodMkLeft_apply]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → ℝ≥0∞
hf : Measurable f
s : Set α
hs : MeasurableSet s
t : Set Ω
ht : MeasurableSet t
⊢ ∫⁻ (a : α) in s, ∫⁻ (ω : Ω) in t, f (a, ω) ∂↑(Measure.condKernel ρ) a ∂Measure.fst ρ =
    ∫⁻ (x : α × Ω) in s ×ˢ t, f x ∂ρ
[PROOFSTEP]
conv_rhs => rw [measure_eq_compProd ρ]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → ℝ≥0∞
hf : Measurable f
s : Set α
hs : MeasurableSet s
t : Set Ω
ht : MeasurableSet t
| ∫⁻ (x : α × Ω) in s ×ˢ t, f x ∂ρ
[PROOFSTEP]
rw [measure_eq_compProd ρ]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → ℝ≥0∞
hf : Measurable f
s : Set α
hs : MeasurableSet s
t : Set Ω
ht : MeasurableSet t
| ∫⁻ (x : α × Ω) in s ×ˢ t, f x ∂ρ
[PROOFSTEP]
rw [measure_eq_compProd ρ]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → ℝ≥0∞
hf : Measurable f
s : Set α
hs : MeasurableSet s
t : Set Ω
ht : MeasurableSet t
| ∫⁻ (x : α × Ω) in s ×ˢ t, f x ∂ρ
[PROOFSTEP]
rw [measure_eq_compProd ρ]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → ℝ≥0∞
hf : Measurable f
s : Set α
hs : MeasurableSet s
t : Set Ω
ht : MeasurableSet t
⊢ ∫⁻ (a : α) in s, ∫⁻ (ω : Ω) in t, f (a, ω) ∂↑(Measure.condKernel ρ) a ∂Measure.fst ρ =
    ∫⁻ (x : α × Ω) in s ×ˢ t,
      f x ∂↑(kernel.const Unit (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft Unit (Measure.condKernel ρ)) ()
[PROOFSTEP]
rw [← kernel.restrict_apply _ (hs.prod ht), ← kernel.compProd_restrict hs ht, kernel.lintegral_compProd _ _ _ hf,
  kernel.restrict_apply]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → ℝ≥0∞
hf : Measurable f
s : Set α
hs : MeasurableSet s
t : Set Ω
ht : MeasurableSet t
⊢ ∫⁻ (a : α) in s, ∫⁻ (ω : Ω) in t, f (a, ω) ∂↑(Measure.condKernel ρ) a ∂Measure.fst ρ =
    ∫⁻ (b : α) in s,
      ∫⁻ (c : Ω),
        f
          (b,
            c) ∂↑(kernel.restrict (kernel.prodMkLeft Unit (Measure.condKernel ρ)) ht)
          ((), b) ∂↑(kernel.const Unit (Measure.fst ρ)) ()
[PROOFSTEP]
conv_rhs => enter [2, b, 1]; rw [kernel.restrict_apply _ ht]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → ℝ≥0∞
hf : Measurable f
s : Set α
hs : MeasurableSet s
t : Set Ω
ht : MeasurableSet t
| ∫⁻ (b : α) in s,
    ∫⁻ (c : Ω),
      f
        (b,
          c) ∂↑(kernel.restrict (kernel.prodMkLeft Unit (Measure.condKernel ρ)) ht)
        ((), b) ∂↑(kernel.const Unit (Measure.fst ρ)) ()
[PROOFSTEP]
enter [2, b, 1]; rw [kernel.restrict_apply _ ht]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → ℝ≥0∞
hf : Measurable f
s : Set α
hs : MeasurableSet s
t : Set Ω
ht : MeasurableSet t
| ∫⁻ (b : α) in s,
    ∫⁻ (c : Ω),
      f
        (b,
          c) ∂↑(kernel.restrict (kernel.prodMkLeft Unit (Measure.condKernel ρ)) ht)
        ((), b) ∂↑(kernel.const Unit (Measure.fst ρ)) ()
[PROOFSTEP]
enter [2, b, 1]; rw [kernel.restrict_apply _ ht]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → ℝ≥0∞
hf : Measurable f
s : Set α
hs : MeasurableSet s
t : Set Ω
ht : MeasurableSet t
| ∫⁻ (b : α) in s,
    ∫⁻ (c : Ω),
      f
        (b,
          c) ∂↑(kernel.restrict (kernel.prodMkLeft Unit (Measure.condKernel ρ)) ht)
        ((), b) ∂↑(kernel.const Unit (Measure.fst ρ)) ()
[PROOFSTEP]
enter [2, b, 1]
[GOAL]
case h
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → ℝ≥0∞
hf : Measurable f
s : Set α
hs : MeasurableSet s
t : Set Ω
ht : MeasurableSet t
b : α
| ↑(kernel.restrict (kernel.prodMkLeft Unit (Measure.condKernel ρ)) ht) ((), b)
[PROOFSTEP]
rw [kernel.restrict_apply _ ht]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → ℝ≥0∞
hf : Measurable f
s : Set α
hs : MeasurableSet s
⊢ ∫⁻ (a : α) in s, ∫⁻ (ω : Ω), f (a, ω) ∂↑(Measure.condKernel ρ) a ∂Measure.fst ρ = ∫⁻ (x : α × Ω) in s ×ˢ univ, f x ∂ρ
[PROOFSTEP]
rw [← set_lintegral_condKernel ρ hf hs MeasurableSet.univ]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → ℝ≥0∞
hf : Measurable f
s : Set α
hs : MeasurableSet s
⊢ ∫⁻ (a : α) in s, ∫⁻ (ω : Ω), f (a, ω) ∂↑(Measure.condKernel ρ) a ∂Measure.fst ρ =
    ∫⁻ (a : α) in s, ∫⁻ (ω : Ω) in univ, f (a, ω) ∂↑(Measure.condKernel ρ) a ∂Measure.fst ρ
[PROOFSTEP]
simp_rw [Measure.restrict_univ]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → ℝ≥0∞
hf : Measurable f
t : Set Ω
ht : MeasurableSet t
⊢ ∫⁻ (a : α), ∫⁻ (ω : Ω) in t, f (a, ω) ∂↑(Measure.condKernel ρ) a ∂Measure.fst ρ = ∫⁻ (x : α × Ω) in univ ×ˢ t, f x ∂ρ
[PROOFSTEP]
rw [← set_lintegral_condKernel ρ hf MeasurableSet.univ ht]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : PolishSpace Ω
inst✝³ : MeasurableSpace Ω
inst✝² : BorelSpace Ω
inst✝¹ : Nonempty Ω
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → ℝ≥0∞
hf : Measurable f
t : Set Ω
ht : MeasurableSet t
⊢ ∫⁻ (a : α), ∫⁻ (ω : Ω) in t, f (a, ω) ∂↑(Measure.condKernel ρ) a ∂Measure.fst ρ =
    ∫⁻ (a : α) in univ, ∫⁻ (ω : Ω) in t, f (a, ω) ∂↑(Measure.condKernel ρ) a ∂Measure.fst ρ
[PROOFSTEP]
simp_rw [Measure.restrict_univ]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁹ : TopologicalSpace Ω
inst✝⁸ : PolishSpace Ω
inst✝⁷ : MeasurableSpace Ω
inst✝⁶ : BorelSpace Ω
inst✝⁵ : Nonempty Ω
ρ✝ : Measure (α × Ω)
inst✝⁴ : IsFiniteMeasure ρ✝
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : CompleteSpace E
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → E
hf : AEStronglyMeasurable f ρ
⊢ AEStronglyMeasurable (fun x => ∫ (y : Ω), f (x, y) ∂↑(Measure.condKernel ρ) x) (Measure.fst ρ)
[PROOFSTEP]
rw [measure_eq_compProd ρ] at hf 
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁹ : TopologicalSpace Ω
inst✝⁸ : PolishSpace Ω
inst✝⁷ : MeasurableSpace Ω
inst✝⁶ : BorelSpace Ω
inst✝⁵ : Nonempty Ω
ρ✝ : Measure (α × Ω)
inst✝⁴ : IsFiniteMeasure ρ✝
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : CompleteSpace E
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → E
hf : AEStronglyMeasurable f (↑(kernel.const Unit (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft Unit (Measure.condKernel ρ)) ())
⊢ AEStronglyMeasurable (fun x => ∫ (y : Ω), f (x, y) ∂↑(Measure.condKernel ρ) x) (Measure.fst ρ)
[PROOFSTEP]
exact AEStronglyMeasurable.integral_kernel_compProd hf
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁹ : TopologicalSpace Ω
inst✝⁸ : PolishSpace Ω
inst✝⁷ : MeasurableSpace Ω
inst✝⁶ : BorelSpace Ω
inst✝⁵ : Nonempty Ω
ρ✝ : Measure (α × Ω)
inst✝⁴ : IsFiniteMeasure ρ✝
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : CompleteSpace E
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → E
hf : Integrable f
⊢ ∫ (a : α), ∫ (x : Ω), f (a, x) ∂↑(Measure.condKernel ρ) a ∂Measure.fst ρ = ∫ (ω : α × Ω), f ω ∂ρ
[PROOFSTEP]
conv_rhs => rw [measure_eq_compProd ρ]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁹ : TopologicalSpace Ω
inst✝⁸ : PolishSpace Ω
inst✝⁷ : MeasurableSpace Ω
inst✝⁶ : BorelSpace Ω
inst✝⁵ : Nonempty Ω
ρ✝ : Measure (α × Ω)
inst✝⁴ : IsFiniteMeasure ρ✝
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : CompleteSpace E
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → E
hf : Integrable f
| ∫ (ω : α × Ω), f ω ∂ρ
[PROOFSTEP]
rw [measure_eq_compProd ρ]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁹ : TopologicalSpace Ω
inst✝⁸ : PolishSpace Ω
inst✝⁷ : MeasurableSpace Ω
inst✝⁶ : BorelSpace Ω
inst✝⁵ : Nonempty Ω
ρ✝ : Measure (α × Ω)
inst✝⁴ : IsFiniteMeasure ρ✝
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : CompleteSpace E
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → E
hf : Integrable f
| ∫ (ω : α × Ω), f ω ∂ρ
[PROOFSTEP]
rw [measure_eq_compProd ρ]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁹ : TopologicalSpace Ω
inst✝⁸ : PolishSpace Ω
inst✝⁷ : MeasurableSpace Ω
inst✝⁶ : BorelSpace Ω
inst✝⁵ : Nonempty Ω
ρ✝ : Measure (α × Ω)
inst✝⁴ : IsFiniteMeasure ρ✝
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : CompleteSpace E
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → E
hf : Integrable f
| ∫ (ω : α × Ω), f ω ∂ρ
[PROOFSTEP]
rw [measure_eq_compProd ρ]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁹ : TopologicalSpace Ω
inst✝⁸ : PolishSpace Ω
inst✝⁷ : MeasurableSpace Ω
inst✝⁶ : BorelSpace Ω
inst✝⁵ : Nonempty Ω
ρ✝ : Measure (α × Ω)
inst✝⁴ : IsFiniteMeasure ρ✝
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : CompleteSpace E
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → E
hf : Integrable f
⊢ ∫ (a : α), ∫ (x : Ω), f (a, x) ∂↑(Measure.condKernel ρ) a ∂Measure.fst ρ =
    ∫ (ω : α × Ω), f ω ∂↑(kernel.const Unit (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft Unit (Measure.condKernel ρ)) ()
[PROOFSTEP]
have hf' : Integrable f ((kernel.const Unit ρ.fst ⊗ₖ kernel.prodMkLeft Unit ρ.condKernel) ()) := by
  rwa [measure_eq_compProd ρ] at hf 
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁹ : TopologicalSpace Ω
inst✝⁸ : PolishSpace Ω
inst✝⁷ : MeasurableSpace Ω
inst✝⁶ : BorelSpace Ω
inst✝⁵ : Nonempty Ω
ρ✝ : Measure (α × Ω)
inst✝⁴ : IsFiniteMeasure ρ✝
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : CompleteSpace E
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → E
hf : Integrable f
⊢ Integrable f
[PROOFSTEP]
rwa [measure_eq_compProd ρ] at hf 
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁹ : TopologicalSpace Ω
inst✝⁸ : PolishSpace Ω
inst✝⁷ : MeasurableSpace Ω
inst✝⁶ : BorelSpace Ω
inst✝⁵ : Nonempty Ω
ρ✝ : Measure (α × Ω)
inst✝⁴ : IsFiniteMeasure ρ✝
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : CompleteSpace E
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → E
hf : Integrable f
hf' : Integrable f
⊢ ∫ (a : α), ∫ (x : Ω), f (a, x) ∂↑(Measure.condKernel ρ) a ∂Measure.fst ρ =
    ∫ (ω : α × Ω), f ω ∂↑(kernel.const Unit (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft Unit (Measure.condKernel ρ)) ()
[PROOFSTEP]
rw [integral_compProd hf', kernel.const_apply]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁹ : TopologicalSpace Ω
inst✝⁸ : PolishSpace Ω
inst✝⁷ : MeasurableSpace Ω
inst✝⁶ : BorelSpace Ω
inst✝⁵ : Nonempty Ω
ρ✝ : Measure (α × Ω)
inst✝⁴ : IsFiniteMeasure ρ✝
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : CompleteSpace E
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → E
hf : Integrable f
hf' : Integrable f
⊢ ∫ (a : α), ∫ (x : Ω), f (a, x) ∂↑(Measure.condKernel ρ) a ∂Measure.fst ρ =
    ∫ (x : α), ∫ (y : Ω), f (x, y) ∂↑(kernel.prodMkLeft Unit (Measure.condKernel ρ)) ((), x) ∂Measure.fst ρ
[PROOFSTEP]
simp_rw [kernel.prodMkLeft_apply]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁹ : TopologicalSpace Ω
inst✝⁸ : PolishSpace Ω
inst✝⁷ : MeasurableSpace Ω
inst✝⁶ : BorelSpace Ω
inst✝⁵ : Nonempty Ω
ρ✝ : Measure (α × Ω)
inst✝⁴ : IsFiniteMeasure ρ✝
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : CompleteSpace E
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → E
s : Set α
hs : MeasurableSet s
t : Set Ω
ht : MeasurableSet t
hf : IntegrableOn f (s ×ˢ t)
⊢ ∫ (a : α) in s, ∫ (ω : Ω) in t, f (a, ω) ∂↑(Measure.condKernel ρ) a ∂Measure.fst ρ = ∫ (x : α × Ω) in s ×ˢ t, f x ∂ρ
[PROOFSTEP]
conv_rhs => rw [measure_eq_compProd ρ]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁹ : TopologicalSpace Ω
inst✝⁸ : PolishSpace Ω
inst✝⁷ : MeasurableSpace Ω
inst✝⁶ : BorelSpace Ω
inst✝⁵ : Nonempty Ω
ρ✝ : Measure (α × Ω)
inst✝⁴ : IsFiniteMeasure ρ✝
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : CompleteSpace E
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → E
s : Set α
hs : MeasurableSet s
t : Set Ω
ht : MeasurableSet t
hf : IntegrableOn f (s ×ˢ t)
| ∫ (x : α × Ω) in s ×ˢ t, f x ∂ρ
[PROOFSTEP]
rw [measure_eq_compProd ρ]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁹ : TopologicalSpace Ω
inst✝⁸ : PolishSpace Ω
inst✝⁷ : MeasurableSpace Ω
inst✝⁶ : BorelSpace Ω
inst✝⁵ : Nonempty Ω
ρ✝ : Measure (α × Ω)
inst✝⁴ : IsFiniteMeasure ρ✝
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : CompleteSpace E
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → E
s : Set α
hs : MeasurableSet s
t : Set Ω
ht : MeasurableSet t
hf : IntegrableOn f (s ×ˢ t)
| ∫ (x : α × Ω) in s ×ˢ t, f x ∂ρ
[PROOFSTEP]
rw [measure_eq_compProd ρ]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁹ : TopologicalSpace Ω
inst✝⁸ : PolishSpace Ω
inst✝⁷ : MeasurableSpace Ω
inst✝⁶ : BorelSpace Ω
inst✝⁵ : Nonempty Ω
ρ✝ : Measure (α × Ω)
inst✝⁴ : IsFiniteMeasure ρ✝
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : CompleteSpace E
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → E
s : Set α
hs : MeasurableSet s
t : Set Ω
ht : MeasurableSet t
hf : IntegrableOn f (s ×ˢ t)
| ∫ (x : α × Ω) in s ×ˢ t, f x ∂ρ
[PROOFSTEP]
rw [measure_eq_compProd ρ]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁹ : TopologicalSpace Ω
inst✝⁸ : PolishSpace Ω
inst✝⁷ : MeasurableSpace Ω
inst✝⁶ : BorelSpace Ω
inst✝⁵ : Nonempty Ω
ρ✝ : Measure (α × Ω)
inst✝⁴ : IsFiniteMeasure ρ✝
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : CompleteSpace E
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → E
s : Set α
hs : MeasurableSet s
t : Set Ω
ht : MeasurableSet t
hf : IntegrableOn f (s ×ˢ t)
⊢ ∫ (a : α) in s, ∫ (ω : Ω) in t, f (a, ω) ∂↑(Measure.condKernel ρ) a ∂Measure.fst ρ =
    ∫ (x : α × Ω) in s ×ˢ t,
      f x ∂↑(kernel.const Unit (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft Unit (Measure.condKernel ρ)) ()
[PROOFSTEP]
rw [set_integral_compProd hs ht]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁹ : TopologicalSpace Ω
inst✝⁸ : PolishSpace Ω
inst✝⁷ : MeasurableSpace Ω
inst✝⁶ : BorelSpace Ω
inst✝⁵ : Nonempty Ω
ρ✝ : Measure (α × Ω)
inst✝⁴ : IsFiniteMeasure ρ✝
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : CompleteSpace E
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → E
s : Set α
hs : MeasurableSet s
t : Set Ω
ht : MeasurableSet t
hf : IntegrableOn f (s ×ˢ t)
⊢ ∫ (a : α) in s, ∫ (ω : Ω) in t, f (a, ω) ∂↑(Measure.condKernel ρ) a ∂Measure.fst ρ =
    ∫ (x : α) in s,
      ∫ (y : Ω) in t,
        f (x, y) ∂↑(kernel.prodMkLeft Unit (Measure.condKernel ρ)) ((), x) ∂↑(kernel.const Unit (Measure.fst ρ)) ()
[PROOFSTEP]
simp_rw [kernel.prodMkLeft_apply, kernel.const_apply]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁹ : TopologicalSpace Ω
inst✝⁸ : PolishSpace Ω
inst✝⁷ : MeasurableSpace Ω
inst✝⁶ : BorelSpace Ω
inst✝⁵ : Nonempty Ω
ρ✝ : Measure (α × Ω)
inst✝⁴ : IsFiniteMeasure ρ✝
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : CompleteSpace E
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → E
s : Set α
hs : MeasurableSet s
t : Set Ω
ht : MeasurableSet t
hf : IntegrableOn f (s ×ˢ t)
⊢ IntegrableOn (fun x => f x) (s ×ˢ t)
[PROOFSTEP]
rwa [measure_eq_compProd ρ] at hf 
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁹ : TopologicalSpace Ω
inst✝⁸ : PolishSpace Ω
inst✝⁷ : MeasurableSpace Ω
inst✝⁶ : BorelSpace Ω
inst✝⁵ : Nonempty Ω
ρ✝ : Measure (α × Ω)
inst✝⁴ : IsFiniteMeasure ρ✝
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : CompleteSpace E
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → E
s : Set α
hs : MeasurableSet s
hf : IntegrableOn f (s ×ˢ univ)
⊢ ∫ (a : α) in s, ∫ (ω : Ω), f (a, ω) ∂↑(Measure.condKernel ρ) a ∂Measure.fst ρ = ∫ (x : α × Ω) in s ×ˢ univ, f x ∂ρ
[PROOFSTEP]
rw [← set_integral_condKernel hs MeasurableSet.univ hf]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁹ : TopologicalSpace Ω
inst✝⁸ : PolishSpace Ω
inst✝⁷ : MeasurableSpace Ω
inst✝⁶ : BorelSpace Ω
inst✝⁵ : Nonempty Ω
ρ✝ : Measure (α × Ω)
inst✝⁴ : IsFiniteMeasure ρ✝
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : CompleteSpace E
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → E
s : Set α
hs : MeasurableSet s
hf : IntegrableOn f (s ×ˢ univ)
⊢ ∫ (a : α) in s, ∫ (ω : Ω), f (a, ω) ∂↑(Measure.condKernel ρ) a ∂Measure.fst ρ =
    ∫ (a : α) in s, ∫ (ω : Ω) in univ, f (a, ω) ∂↑(Measure.condKernel ρ) a ∂Measure.fst ρ
[PROOFSTEP]
simp_rw [Measure.restrict_univ]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁹ : TopologicalSpace Ω
inst✝⁸ : PolishSpace Ω
inst✝⁷ : MeasurableSpace Ω
inst✝⁶ : BorelSpace Ω
inst✝⁵ : Nonempty Ω
ρ✝ : Measure (α × Ω)
inst✝⁴ : IsFiniteMeasure ρ✝
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : CompleteSpace E
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → E
t : Set Ω
ht : MeasurableSet t
hf : IntegrableOn f (univ ×ˢ t)
⊢ ∫ (a : α), ∫ (ω : Ω) in t, f (a, ω) ∂↑(Measure.condKernel ρ) a ∂Measure.fst ρ = ∫ (x : α × Ω) in univ ×ˢ t, f x ∂ρ
[PROOFSTEP]
rw [← set_integral_condKernel MeasurableSet.univ ht hf]
[GOAL]
α : Type u_1
mα : MeasurableSpace α
Ω : Type u_2
inst✝⁹ : TopologicalSpace Ω
inst✝⁸ : PolishSpace Ω
inst✝⁷ : MeasurableSpace Ω
inst✝⁶ : BorelSpace Ω
inst✝⁵ : Nonempty Ω
ρ✝ : Measure (α × Ω)
inst✝⁴ : IsFiniteMeasure ρ✝
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : CompleteSpace E
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → E
t : Set Ω
ht : MeasurableSet t
hf : IntegrableOn f (univ ×ˢ t)
⊢ ∫ (a : α), ∫ (ω : Ω) in t, f (a, ω) ∂↑(Measure.condKernel ρ) a ∂Measure.fst ρ =
    ∫ (a : α) in univ, ∫ (ω : Ω) in t, f (a, ω) ∂↑(Measure.condKernel ρ) a ∂Measure.fst ρ
[PROOFSTEP]
simp_rw [Measure.restrict_univ]
[GOAL]
α : Type u_1
Ω : Type u_2
E : Type u_3
F : Type u_4
mα : MeasurableSpace α
inst✝⁹ : MeasurableSpace Ω
inst✝⁸ : TopologicalSpace Ω
inst✝⁷ : BorelSpace Ω
inst✝⁶ : PolishSpace Ω
inst✝⁵ : Nonempty Ω
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : CompleteSpace E
inst✝¹ : NormedAddCommGroup F
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → F
hf : AEStronglyMeasurable f ρ
⊢ ((∀ᵐ (a : α) ∂Measure.fst ρ, Integrable fun ω => f (a, ω)) ∧
      Integrable fun a => ∫ (ω : Ω), ‖f (a, ω)‖ ∂↑(Measure.condKernel ρ) a) ↔
    Integrable f
[PROOFSTEP]
rw [measure_eq_compProd ρ] at hf 
[GOAL]
α : Type u_1
Ω : Type u_2
E : Type u_3
F : Type u_4
mα : MeasurableSpace α
inst✝⁹ : MeasurableSpace Ω
inst✝⁸ : TopologicalSpace Ω
inst✝⁷ : BorelSpace Ω
inst✝⁶ : PolishSpace Ω
inst✝⁵ : Nonempty Ω
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : CompleteSpace E
inst✝¹ : NormedAddCommGroup F
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → F
hf : AEStronglyMeasurable f (↑(kernel.const Unit (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft Unit (Measure.condKernel ρ)) ())
⊢ ((∀ᵐ (a : α) ∂Measure.fst ρ, Integrable fun ω => f (a, ω)) ∧
      Integrable fun a => ∫ (ω : Ω), ‖f (a, ω)‖ ∂↑(Measure.condKernel ρ) a) ↔
    Integrable f
[PROOFSTEP]
conv_rhs => rw [measure_eq_compProd ρ]
[GOAL]
α : Type u_1
Ω : Type u_2
E : Type u_3
F : Type u_4
mα : MeasurableSpace α
inst✝⁹ : MeasurableSpace Ω
inst✝⁸ : TopologicalSpace Ω
inst✝⁷ : BorelSpace Ω
inst✝⁶ : PolishSpace Ω
inst✝⁵ : Nonempty Ω
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : CompleteSpace E
inst✝¹ : NormedAddCommGroup F
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → F
hf : AEStronglyMeasurable f (↑(kernel.const Unit (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft Unit (Measure.condKernel ρ)) ())
| Integrable f
[PROOFSTEP]
rw [measure_eq_compProd ρ]
[GOAL]
α : Type u_1
Ω : Type u_2
E : Type u_3
F : Type u_4
mα : MeasurableSpace α
inst✝⁹ : MeasurableSpace Ω
inst✝⁸ : TopologicalSpace Ω
inst✝⁷ : BorelSpace Ω
inst✝⁶ : PolishSpace Ω
inst✝⁵ : Nonempty Ω
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : CompleteSpace E
inst✝¹ : NormedAddCommGroup F
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → F
hf : AEStronglyMeasurable f (↑(kernel.const Unit (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft Unit (Measure.condKernel ρ)) ())
| Integrable f
[PROOFSTEP]
rw [measure_eq_compProd ρ]
[GOAL]
α : Type u_1
Ω : Type u_2
E : Type u_3
F : Type u_4
mα : MeasurableSpace α
inst✝⁹ : MeasurableSpace Ω
inst✝⁸ : TopologicalSpace Ω
inst✝⁷ : BorelSpace Ω
inst✝⁶ : PolishSpace Ω
inst✝⁵ : Nonempty Ω
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : CompleteSpace E
inst✝¹ : NormedAddCommGroup F
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → F
hf : AEStronglyMeasurable f (↑(kernel.const Unit (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft Unit (Measure.condKernel ρ)) ())
| Integrable f
[PROOFSTEP]
rw [measure_eq_compProd ρ]
[GOAL]
α : Type u_1
Ω : Type u_2
E : Type u_3
F : Type u_4
mα : MeasurableSpace α
inst✝⁹ : MeasurableSpace Ω
inst✝⁸ : TopologicalSpace Ω
inst✝⁷ : BorelSpace Ω
inst✝⁶ : PolishSpace Ω
inst✝⁵ : Nonempty Ω
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : CompleteSpace E
inst✝¹ : NormedAddCommGroup F
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → F
hf : AEStronglyMeasurable f (↑(kernel.const Unit (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft Unit (Measure.condKernel ρ)) ())
⊢ ((∀ᵐ (a : α) ∂Measure.fst ρ, Integrable fun ω => f (a, ω)) ∧
      Integrable fun a => ∫ (ω : Ω), ‖f (a, ω)‖ ∂↑(Measure.condKernel ρ) a) ↔
    Integrable f
[PROOFSTEP]
rw [integrable_compProd_iff hf]
[GOAL]
α : Type u_1
Ω : Type u_2
E : Type u_3
F : Type u_4
mα : MeasurableSpace α
inst✝⁹ : MeasurableSpace Ω
inst✝⁸ : TopologicalSpace Ω
inst✝⁷ : BorelSpace Ω
inst✝⁶ : PolishSpace Ω
inst✝⁵ : Nonempty Ω
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : CompleteSpace E
inst✝¹ : NormedAddCommGroup F
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → F
hf : AEStronglyMeasurable f (↑(kernel.const Unit (Measure.fst ρ) ⊗ₖ kernel.prodMkLeft Unit (Measure.condKernel ρ)) ())
⊢ ((∀ᵐ (a : α) ∂Measure.fst ρ, Integrable fun ω => f (a, ω)) ∧
      Integrable fun a => ∫ (ω : Ω), ‖f (a, ω)‖ ∂↑(Measure.condKernel ρ) a) ↔
    (∀ᵐ (x : α) ∂↑(kernel.const Unit (Measure.fst ρ)) (), Integrable fun y => f (x, y)) ∧
      Integrable fun x => ∫ (y : Ω), ‖f (x, y)‖ ∂↑(kernel.prodMkLeft Unit (Measure.condKernel ρ)) ((), x)
[PROOFSTEP]
simp_rw [kernel.prodMkLeft_apply, kernel.const_apply]
[GOAL]
α : Type u_1
Ω : Type u_2
E : Type u_3
F : Type u_4
mα : MeasurableSpace α
inst✝⁹ : MeasurableSpace Ω
inst✝⁸ : TopologicalSpace Ω
inst✝⁷ : BorelSpace Ω
inst✝⁶ : PolishSpace Ω
inst✝⁵ : Nonempty Ω
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : CompleteSpace E
inst✝¹ : NormedAddCommGroup F
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → F
hf_int : Integrable f
⊢ ∀ᵐ (a : α) ∂Measure.fst ρ, Integrable fun ω => f (a, ω)
[PROOFSTEP]
have hf_ae : AEStronglyMeasurable f ρ := hf_int.1
[GOAL]
α : Type u_1
Ω : Type u_2
E : Type u_3
F : Type u_4
mα : MeasurableSpace α
inst✝⁹ : MeasurableSpace Ω
inst✝⁸ : TopologicalSpace Ω
inst✝⁷ : BorelSpace Ω
inst✝⁶ : PolishSpace Ω
inst✝⁵ : Nonempty Ω
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : CompleteSpace E
inst✝¹ : NormedAddCommGroup F
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → F
hf_int : Integrable f
hf_ae : AEStronglyMeasurable f ρ
⊢ ∀ᵐ (a : α) ∂Measure.fst ρ, Integrable fun ω => f (a, ω)
[PROOFSTEP]
rw [← hf_ae.ae_integrable_condKernel_iff] at hf_int 
[GOAL]
α : Type u_1
Ω : Type u_2
E : Type u_3
F : Type u_4
mα : MeasurableSpace α
inst✝⁹ : MeasurableSpace Ω
inst✝⁸ : TopologicalSpace Ω
inst✝⁷ : BorelSpace Ω
inst✝⁶ : PolishSpace Ω
inst✝⁵ : Nonempty Ω
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : CompleteSpace E
inst✝¹ : NormedAddCommGroup F
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → F
hf_int :
  (∀ᵐ (a : α) ∂Measure.fst ρ, Integrable fun ω => f (a, ω)) ∧
    Integrable fun a => ∫ (ω : Ω), ‖f (a, ω)‖ ∂↑(Measure.condKernel ρ) a
hf_ae : AEStronglyMeasurable f ρ
⊢ ∀ᵐ (a : α) ∂Measure.fst ρ, Integrable fun ω => f (a, ω)
[PROOFSTEP]
exact hf_int.1
[GOAL]
α : Type u_1
Ω : Type u_2
E : Type u_3
F : Type u_4
mα : MeasurableSpace α
inst✝⁹ : MeasurableSpace Ω
inst✝⁸ : TopologicalSpace Ω
inst✝⁷ : BorelSpace Ω
inst✝⁶ : PolishSpace Ω
inst✝⁵ : Nonempty Ω
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : CompleteSpace E
inst✝¹ : NormedAddCommGroup F
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → F
hf_int : Integrable f
⊢ Integrable fun x => ∫ (y : Ω), ‖f (x, y)‖ ∂↑(Measure.condKernel ρ) x
[PROOFSTEP]
have hf_ae : AEStronglyMeasurable f ρ := hf_int.1
[GOAL]
α : Type u_1
Ω : Type u_2
E : Type u_3
F : Type u_4
mα : MeasurableSpace α
inst✝⁹ : MeasurableSpace Ω
inst✝⁸ : TopologicalSpace Ω
inst✝⁷ : BorelSpace Ω
inst✝⁶ : PolishSpace Ω
inst✝⁵ : Nonempty Ω
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : CompleteSpace E
inst✝¹ : NormedAddCommGroup F
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → F
hf_int : Integrable f
hf_ae : AEStronglyMeasurable f ρ
⊢ Integrable fun x => ∫ (y : Ω), ‖f (x, y)‖ ∂↑(Measure.condKernel ρ) x
[PROOFSTEP]
rw [← hf_ae.ae_integrable_condKernel_iff] at hf_int 
[GOAL]
α : Type u_1
Ω : Type u_2
E : Type u_3
F : Type u_4
mα : MeasurableSpace α
inst✝⁹ : MeasurableSpace Ω
inst✝⁸ : TopologicalSpace Ω
inst✝⁷ : BorelSpace Ω
inst✝⁶ : PolishSpace Ω
inst✝⁵ : Nonempty Ω
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : CompleteSpace E
inst✝¹ : NormedAddCommGroup F
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → F
hf_int :
  (∀ᵐ (a : α) ∂Measure.fst ρ, Integrable fun ω => f (a, ω)) ∧
    Integrable fun a => ∫ (ω : Ω), ‖f (a, ω)‖ ∂↑(Measure.condKernel ρ) a
hf_ae : AEStronglyMeasurable f ρ
⊢ Integrable fun x => ∫ (y : Ω), ‖f (x, y)‖ ∂↑(Measure.condKernel ρ) x
[PROOFSTEP]
exact hf_int.2
[GOAL]
α : Type u_1
Ω : Type u_2
E : Type u_3
F : Type u_4
mα : MeasurableSpace α
inst✝⁹ : MeasurableSpace Ω
inst✝⁸ : TopologicalSpace Ω
inst✝⁷ : BorelSpace Ω
inst✝⁶ : PolishSpace Ω
inst✝⁵ : Nonempty Ω
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : CompleteSpace E
inst✝¹ : NormedAddCommGroup F
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → E
hf_int : Integrable f
⊢ Integrable fun x => ‖∫ (y : Ω), f (x, y) ∂↑(Measure.condKernel ρ) x‖
[PROOFSTEP]
refine' hf_int.integral_norm_condKernel.mono hf_int.1.integral_condKernel.norm _
[GOAL]
α : Type u_1
Ω : Type u_2
E : Type u_3
F : Type u_4
mα : MeasurableSpace α
inst✝⁹ : MeasurableSpace Ω
inst✝⁸ : TopologicalSpace Ω
inst✝⁷ : BorelSpace Ω
inst✝⁶ : PolishSpace Ω
inst✝⁵ : Nonempty Ω
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : CompleteSpace E
inst✝¹ : NormedAddCommGroup F
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → E
hf_int : Integrable f
⊢ ∀ᵐ (a : α) ∂Measure.fst ρ,
    ‖‖∫ (y : Ω), f (a, y) ∂↑(Measure.condKernel ρ) a‖‖ ≤ ‖∫ (y : Ω), ‖f (a, y)‖ ∂↑(Measure.condKernel ρ) a‖
[PROOFSTEP]
refine' eventually_of_forall fun x => _
[GOAL]
α : Type u_1
Ω : Type u_2
E : Type u_3
F : Type u_4
mα : MeasurableSpace α
inst✝⁹ : MeasurableSpace Ω
inst✝⁸ : TopologicalSpace Ω
inst✝⁷ : BorelSpace Ω
inst✝⁶ : PolishSpace Ω
inst✝⁵ : Nonempty Ω
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : CompleteSpace E
inst✝¹ : NormedAddCommGroup F
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → E
hf_int : Integrable f
x : α
⊢ ‖‖∫ (y : Ω), f (x, y) ∂↑(Measure.condKernel ρ) x‖‖ ≤ ‖∫ (y : Ω), ‖f (x, y)‖ ∂↑(Measure.condKernel ρ) x‖
[PROOFSTEP]
rw [norm_norm]
[GOAL]
α : Type u_1
Ω : Type u_2
E : Type u_3
F : Type u_4
mα : MeasurableSpace α
inst✝⁹ : MeasurableSpace Ω
inst✝⁸ : TopologicalSpace Ω
inst✝⁷ : BorelSpace Ω
inst✝⁶ : PolishSpace Ω
inst✝⁵ : Nonempty Ω
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : CompleteSpace E
inst✝¹ : NormedAddCommGroup F
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → E
hf_int : Integrable f
x : α
⊢ ‖∫ (y : Ω), f (x, y) ∂↑(Measure.condKernel ρ) x‖ ≤ ‖∫ (y : Ω), ‖f (x, y)‖ ∂↑(Measure.condKernel ρ) x‖
[PROOFSTEP]
refine' (norm_integral_le_integral_norm _).trans_eq (Real.norm_of_nonneg _).symm
[GOAL]
α : Type u_1
Ω : Type u_2
E : Type u_3
F : Type u_4
mα : MeasurableSpace α
inst✝⁹ : MeasurableSpace Ω
inst✝⁸ : TopologicalSpace Ω
inst✝⁷ : BorelSpace Ω
inst✝⁶ : PolishSpace Ω
inst✝⁵ : Nonempty Ω
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : CompleteSpace E
inst✝¹ : NormedAddCommGroup F
ρ : Measure (α × Ω)
inst✝ : IsFiniteMeasure ρ
f : α × Ω → E
hf_int : Integrable f
x : α
⊢ 0 ≤ ∫ (a : Ω), ‖f (x, a)‖ ∂↑(Measure.condKernel ρ) x
[PROOFSTEP]
exact integral_nonneg_of_ae (eventually_of_forall fun y => norm_nonneg _)
