Theorem: MeasureTheory.Measure.pi_caratheodory
File: Mathlib/MeasureTheory/Constructions/Pi.lean

Proof steps:
state_before: ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
inst✝¹ : Fintype ι
m : (i : ι) → OuterMeasure (α i)
inst✝ : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
⊢ MeasurableSpace.pi ≤ (OuterMeasure.pi fun i => (μ i).toOuterMeasure).caratheodory
state_after: ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
inst✝¹ : Fintype ι
m : (i : ι) → OuterMeasure (α i)
inst✝ : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
⊢ ∀ (i : ι),
    MeasurableSpace.comap (fun b => b i) (inst✝ i) ≤ (OuterMeasure.pi fun i => (μ i).toOuterMeasure).caratheodory
tactic: refine iSup_le ?_
state_before: ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
inst✝¹ : Fintype ι
m : (i : ι) → OuterMeasure (α i)
inst✝ : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
⊢ ∀ (i : ι),
    MeasurableSpace.comap (fun b => b i) (inst✝ i) ≤ (OuterMeasure.pi fun i => (μ i).toOuterMeasure).caratheodory
state_after: ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
inst✝¹ : Fintype ι
m : (i : ι) → OuterMeasure (α i)
inst✝ : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
i : ι
s : Set ((a : ι) → α a)
hs : MeasurableSet s
⊢ MeasurableSet s
tactic: intro i s hs
state_before: ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
inst✝¹ : Fintype ι
m : (i : ι) → OuterMeasure (α i)
inst✝ : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
i : ι
s : Set ((a : ι) → α a)
hs : MeasurableSet s
⊢ MeasurableSet s
state_after: case intro.intro
ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
inst✝¹ : Fintype ι
m : (i : ι) → OuterMeasure (α i)
inst✝ : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
i : ι
s : Set (α i)
hs : MeasurableSet s
⊢ MeasurableSet ((fun b => b i) ⁻¹' s)
tactic: rcases hs with ⟨s, hs, rfl⟩
state_before: case intro.intro
ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
inst✝¹ : Fintype ι
m : (i : ι) → OuterMeasure (α i)
inst✝ : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
i : ι
s : Set (α i)
hs : MeasurableSet s
⊢ MeasurableSet ((fun b => b i) ⁻¹' s)
state_after: case intro.intro.hs
ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
inst✝¹ : Fintype ι
m : (i : ι) → OuterMeasure (α i)
inst✝ : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
i : ι
s : Set (α i)
hs : MeasurableSet s
⊢ ∀ (t : Set ((a : ι) → α a)),
    piPremeasure (fun i => (μ i).toOuterMeasure) (t ∩ (fun b => b i) ⁻¹' s) +
        piPremeasure (fun i => (μ i).toOuterMeasure) (t \ (fun b => b i) ⁻¹' s) ≤
      piPremeasure (fun i => (μ i).toOuterMeasure) t
tactic: apply boundedBy_caratheodory
state_before: case intro.intro.hs
ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
inst✝¹ : Fintype ι
m : (i : ι) → OuterMeasure (α i)
inst✝ : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
i : ι
s : Set (α i)
hs : MeasurableSet s
⊢ ∀ (t : Set ((a : ι) → α a)),
    piPremeasure (fun i => (μ i).toOuterMeasure) (t ∩ (fun b => b i) ⁻¹' s) +
        piPremeasure (fun i => (μ i).toOuterMeasure) (t \ (fun b => b i) ⁻¹' s) ≤
      piPremeasure (fun i => (μ i).toOuterMeasure) t
state_after: case intro.intro.hs
ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
inst✝¹ : Fintype ι
m : (i : ι) → OuterMeasure (α i)
inst✝ : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
i : ι
s : Set (α i)
hs : MeasurableSet s
t : Set ((a : ι) → α a)
⊢ piPremeasure (fun i => (μ i).toOuterMeasure) (t ∩ (fun b => b i) ⁻¹' s) +
      piPremeasure (fun i => (μ i).toOuterMeasure) (t \ (fun b => b i) ⁻¹' s) ≤
    piPremeasure (fun i => (μ i).toOuterMeasure) t
tactic: intro t
state_before: case intro.intro.hs
ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
inst✝¹ : Fintype ι
m : (i : ι) → OuterMeasure (α i)
inst✝ : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
i : ι
s : Set (α i)
hs : MeasurableSet s
t : Set ((a : ι) → α a)
⊢ piPremeasure (fun i => (μ i).toOuterMeasure) (t ∩ (fun b => b i) ⁻¹' s) +
      piPremeasure (fun i => (μ i).toOuterMeasure) (t \ (fun b => b i) ⁻¹' s) ≤
    piPremeasure (fun i => (μ i).toOuterMeasure) t
state_after: case intro.intro.hs
ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
inst✝¹ : Fintype ι
m : (i : ι) → OuterMeasure (α i)
inst✝ : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
i : ι
s : Set (α i)
hs : MeasurableSet s
t : Set ((a : ι) → α a)
⊢ ∏ x : ι, (μ x).toOuterMeasure (eval x '' (t ∩ (fun b => b i) ⁻¹' s)) +
      ∏ x : ι, (μ x).toOuterMeasure (eval x '' (t \ (fun b => b i) ⁻¹' s)) ≤
    ∏ x : ι, (μ x).toOuterMeasure (eval x '' t)
tactic: simp_rw [piPremeasure]
state_before: case intro.intro.hs
ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
inst✝¹ : Fintype ι
m : (i : ι) → OuterMeasure (α i)
inst✝ : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
i : ι
s : Set (α i)
hs : MeasurableSet s
t : Set ((a : ι) → α a)
⊢ ∏ x : ι, (μ x).toOuterMeasure (eval x '' (t ∩ (fun b => b i) ⁻¹' s)) +
      ∏ x : ι, (μ x).toOuterMeasure (eval x '' (t \ (fun b => b i) ⁻¹' s)) ≤
    ∏ x : ι, (μ x).toOuterMeasure (eval x '' t)
state_after: case intro.intro.hs.refine_1
ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
inst✝¹ : Fintype ι
m : (i : ι) → OuterMeasure (α i)
inst✝ : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
i : ι
s : Set (α i)
hs : MeasurableSet s
t : Set ((a : ι) → α a)
⊢ (μ i).toOuterMeasure (eval i '' (t ∩ (fun b => b i) ⁻¹' s)) +
      (μ i).toOuterMeasure (eval i '' (t \ (fun b => b i) ⁻¹' s)) ≤
    (μ i).toOuterMeasure (eval i '' t)

case intro.intro.hs.refine_2
ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
inst✝¹ : Fintype ι
m : (i : ι) → OuterMeasure (α i)
inst✝ : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
i : ι
s : Set (α i)
hs : MeasurableSet s
t : Set ((a : ι) → α a)
⊢ ∀ j ∈ Finset.univ,
    j ≠ i → (μ j).toOuterMeasure (eval j '' (t ∩ (fun b => b i) ⁻¹' s)) ≤ (μ j).toOuterMeasure (eval j '' t)

case intro.intro.hs.refine_3
ι : Type u_1
ι' : Type u_2
α : ι → Type u_3
inst✝¹ : Fintype ι
m : (i : ι) → OuterMeasure (α i)
inst✝ : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
i : ι
s : Set (α i)
hs : MeasurableSet s
t : Set ((a : ι) → α a)
⊢ ∀ j ∈ Finset.univ,
    j ≠ i → (μ j).toOuterMeasure (eval j '' (t \ (fun b => b i) ⁻¹' s)) ≤ (μ j).toOuterMeasure (eval j '' t)
tactic: refine Finset.prod_add_prod_le' (Finset.mem_univ i) ?_ ?_ ?_