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

tactic: refine' le_antisymm _ _
state_before: ι : Type u_2
ι' : Type ?u.2507142
α : ι → Type u_1
inst✝² : Fintype ι
m : (i : ι) → OuterMeasure (α i)
inst✝¹ : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
inst✝ : ∀ (i : ι), SigmaFinite (μ i)
s : (i : ι) → Set (α i)
hs : ∀ (i : ι), MeasurableSet (s i)
⊢ ↑↑(Measure.pi μ) (Set.pi univ s) = ∏ i : ι, ↑↑(μ i) (s i)

tactic: rw [Measure.pi, toMeasure_apply _ _ (MeasurableSet.pi countable_univ fun i _ => hs i)]
state_before: case refine'_1
ι : Type u_2
ι' : Type ?u.2507142
α : ι → Type u_1
inst✝² : Fintype ι
m : (i : ι) → OuterMeasure (α i)
inst✝¹ : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
inst✝ : ∀ (i : ι), SigmaFinite (μ i)
s : (i : ι) → Set (α i)
hs : ∀ (i : ι), MeasurableSet (s i)
⊢ ↑↑(Measure.pi μ) (Set.pi univ s) ≤ ∏ i : ι, ↑↑(μ i) (s i)

tactic: apply OuterMeasure.pi_pi_le
state_before: case refine'_1
ι : Type u_2
ι' : Type ?u.2507142
α : ι → Type u_1
inst✝² : Fintype ι
m : (i : ι) → OuterMeasure (α i)
inst✝¹ : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
inst✝ : ∀ (i : ι), SigmaFinite (μ i)
s : (i : ι) → Set (α i)
hs : ∀ (i : ι), MeasurableSet (s i)
⊢ ↑(OuterMeasure.pi fun i => ↑(μ i)) (Set.pi univ fun i => s i) ≤ ∏ i : ι, ↑↑(μ i) (s i)

tactic: haveI : Encodable ι := Fintype.toEncodable ι
state_before: case refine'_2
ι : Type u_2
ι' : Type ?u.2507142
α : ι → Type u_1
inst✝² : Fintype ι
m : (i : ι) → OuterMeasure (α i)
inst✝¹ : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
inst✝ : ∀ (i : ι), SigmaFinite (μ i)
s : (i : ι) → Set (α i)
hs : ∀ (i : ι), MeasurableSet (s i)
⊢ ∏ i : ι, ↑↑(μ i) (s i) ≤ ↑↑(Measure.pi μ) (Set.pi univ s)

tactic: rw [← pi'_pi μ s]
state_before: case refine'_2
ι : Type u_2
ι' : Type ?u.2507142
α : ι → Type u_1
inst✝² : Fintype ι
m : (i : ι) → OuterMeasure (α i)
inst✝¹ : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
inst✝ : ∀ (i : ι), SigmaFinite (μ i)
s : (i : ι) → Set (α i)
hs : ∀ (i : ι), MeasurableSet (s i)
this : Encodable ι
⊢ ∏ i : ι, ↑↑(μ i) (s i) ≤ ↑↑(Measure.pi μ) (Set.pi univ s)

tactic: simp_rw [← pi'_pi μ s, Measure.pi,
  toMeasure_apply _ _ (MeasurableSet.pi countable_univ fun i _ => hs i)]
state_before: case refine'_2
ι : Type u_2
ι' : Type ?u.2507142
α : ι → Type u_1
inst✝² : Fintype ι
m : (i : ι) → OuterMeasure (α i)
inst✝¹ : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
inst✝ : ∀ (i : ι), SigmaFinite (μ i)
s : (i : ι) → Set (α i)
hs : ∀ (i : ι), MeasurableSet (s i)
this : Encodable ι
⊢ ↑↑(pi' μ) (Set.pi univ s) ≤ ↑↑(Measure.pi μ) (Set.pi univ s)

tactic: suffices (pi' μ).toOuterMeasure ≤ OuterMeasure.pi fun i => (μ i).toOuterMeasure by exact this _
state_before: case refine'_2
ι : Type u_2
ι' : Type ?u.2507142
α : ι → Type u_1
inst✝² : Fintype ι
m : (i : ι) → OuterMeasure (α i)
inst✝¹ : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
inst✝ : ∀ (i : ι), SigmaFinite (μ i)
s : (i : ι) → Set (α i)
hs : ∀ (i : ι), MeasurableSet (s i)
this : Encodable ι
⊢ ↑↑(pi' μ) (Set.pi univ s) ≤ ↑(OuterMeasure.pi fun i => ↑(μ i)) (Set.pi univ fun i => s i)

tactic: clear hs s
state_before: case refine'_2
ι : Type u_2
ι' : Type ?u.2507142
α : ι → Type u_1
inst✝² : Fintype ι
m : (i : ι) → OuterMeasure (α i)
inst✝¹ : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
inst✝ : ∀ (i : ι), SigmaFinite (μ i)
s : (i : ι) → Set (α i)
hs : ∀ (i : ι), MeasurableSet (s i)
this : Encodable ι
⊢ ↑(pi' μ) ≤ OuterMeasure.pi fun i => ↑(μ i)

tactic: rw [OuterMeasure.le_pi]
state_before: case refine'_2
ι : Type u_2
ι' : Type ?u.2507142
α : ι → Type u_1
inst✝² : Fintype ι
m : (i : ι) → OuterMeasure (α i)
inst✝¹ : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
inst✝ : ∀ (i : ι), SigmaFinite (μ i)
this : Encodable ι
⊢ ↑(pi' μ) ≤ OuterMeasure.pi fun i => ↑(μ i)

tactic: intro s _
state_before: case refine'_2
ι : Type u_2
ι' : Type ?u.2507142
α : ι → Type u_1
inst✝² : Fintype ι
m : (i : ι) → OuterMeasure (α i)
inst✝¹ : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
inst✝ : ∀ (i : ι), SigmaFinite (μ i)
this : Encodable ι
⊢ ∀ (s : (i : ι) → Set (α i)), Set.Nonempty (Set.pi univ s) → ↑↑(pi' μ) (Set.pi univ s) ≤ ∏ i : ι, ↑↑(μ i) (s i)

tactic: exact (pi'_pi μ s).le
state_before: case refine'_2
ι : Type u_2
ι' : Type ?u.2507142
α : ι → Type u_1
inst✝² : Fintype ι
m : (i : ι) → OuterMeasure (α i)
inst✝¹ : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
inst✝ : ∀ (i : ι), SigmaFinite (μ i)
this : Encodable ι
s : (i : ι) → Set (α i)
a✝ : Set.Nonempty (Set.pi univ s)
⊢ ↑↑(pi' μ) (Set.pi univ s) ≤ ∏ i : ι, ↑↑(μ i) (s i)

tactic: exact this _
state_before: ι : Type u_2
ι' : Type ?u.2507142
α : ι → Type u_1
inst✝² : Fintype ι
m : (i : ι) → OuterMeasure (α i)
inst✝¹ : (i : ι) → MeasurableSpace (α i)
μ : (i : ι) → Measure (α i)
inst✝ : ∀ (i : ι), SigmaFinite (μ i)
s : (i : ι) → Set (α i)
hs : ∀ (i : ι), MeasurableSet (s i)
this✝ : Encodable ι
this : ↑(pi' μ) ≤ OuterMeasure.pi fun i => ↑(μ i)
⊢ ↑↑(pi' μ) (Set.pi univ s) ≤ ↑(OuterMeasure.pi fun i => ↑(μ i)) (Set.pi univ fun i => s i)