-- Mathlib/MeasureTheory/Constructions/Pi.lean
lemma pi_map_piCongrLeft [hι' : Fintype ι'] (e : ι ≃ ι') {β : ι' → Type*}
    [∀ i, MeasurableSpace (β i)] (μ : (i : ι') → Measure (β i)) [∀ i, SigmaFinite (μ i)] :
    (Measure.pi fun i ↦ μ (e i)).map (MeasurableEquiv.piCongrLeft (fun i ↦ β i) e)
      = Measure.pi μ

Proof state:
ι : Type u_1
ι' : Type u_2
inst✝² : Fintype ι
hι' : Fintype ι'
e : ι ≃ ι'
β : ι' → Type u_4
inst✝¹ : (i : ι') → MeasurableSpace (β i)
μ : (i : ι') → Measure (β i)
inst✝ : ∀ (i : ι'), SigmaFinite (μ i)
e_meas : ((b : ι) → β (e b)) ≃ᵐ ((a : ι') → β a) := MeasurableEquiv.piCongrLeft (fun i => β i) e
s : (i : ι') → Set (β i)
x✝ : ∀ (i : ι'), MeasurableSet (s i)
s' : (i : ι) → Set (β (e i)) := fun i => s (e i)
⊢ ⇑e_meas ⁻¹' univ.pi s = univ.pi s'

Tactic:
ext x

Result:
case h
ι : Type u_1
ι' : Type u_2
inst✝² : Fintype ι
hι' : Fintype ι'
e : ι ≃ ι'
β : ι' → Type u_4
inst✝¹ : (i : ι') → MeasurableSpace (β i)
μ : (i : ι') → Measure (β i)
inst✝ : ∀ (i : ι'), SigmaFinite (μ i)
e_meas : ((b : ι) → β (e b)) ≃ᵐ ((a : ι') → β a) := MeasurableEquiv.piCongrLeft (fun i => β i) e
s : (i : ι') → Set (β i)
x✝ : ∀ (i : ι'), MeasurableSet (s i)
s' : (i : ι) → Set (β (e i)) := fun i => s (e i)
x : (b : ι) → β (e b)
⊢ x ∈ ⇑e_meas ⁻¹' univ.pi s ↔ x ∈ univ.pi s'

Proof state:
case hfg
ι : Type u_1
ι' : Type u_2
inst✝² : Fintype ι
hι' : Fintype ι'
e : ι ≃ ι'
β : ι' → Type u_4
inst✝¹ : (i : ι') → MeasurableSpace (β i)
μ : (i : ι') → Measure (β i)
inst✝ : ∀ (i : ι'), SigmaFinite (μ i)
e_meas : ((b : ι) → β (e b)) ≃ᵐ ((a : ι') → β a) := MeasurableEquiv.piCongrLeft (fun i => β i) e
s : (i : ι') → Set (β i)
x✝ : ∀ (i : ι'), MeasurableSet (s i)
s' : (i : ι) → Set (β (e i)) := fun i => s (e i)
this : ⇑e_meas ⁻¹' univ.pi s = univ.pi s'
i : ι'
a✝ : i ∈ Finset.univ
⊢ (μ i) (s i) = (μ (e (e.symm i))) (s' (e.symm i))

Tactic:
simp only [s']

Result:
case hfg
ι : Type u_1
ι' : Type u_2
inst✝² : Fintype ι
hι' : Fintype ι'
e : ι ≃ ι'
β : ι' → Type u_4
inst✝¹ : (i : ι') → MeasurableSpace (β i)
μ : (i : ι') → Measure (β i)
inst✝ : ∀ (i : ι'), SigmaFinite (μ i)
e_meas : ((b : ι) → β (e b)) ≃ᵐ ((a : ι') → β a) := MeasurableEquiv.piCongrLeft (fun i => β i) e
s : (i : ι') → Set (β i)
x✝ : ∀ (i : ι'), MeasurableSet (s i)
s' : (i : ι) → Set (β (e i)) := fun i => s (e i)
this : ⇑e_meas ⁻¹' univ.pi s = univ.pi s'
i : ι'
a✝ : i ∈ Finset.univ
⊢ (μ i) (s i) = (μ (e (e.symm i))) (s (e (e.symm i)))

Proof state:
ι : Type u_1
ι' : Type u_2
inst✝² : Fintype ι
hι' : Fintype ι'
e : ι ≃ ι'
β : ι' → Type u_4
inst✝¹ : (i : ι') → MeasurableSpace (β i)
μ : (i : ι') → Measure (β i)
inst✝ : ∀ (i : ι'), SigmaFinite (μ i)
⊢ map (⇑(MeasurableEquiv.piCongrLeft (fun i => β i) e)) (Measure.pi fun i => μ (e i)) = Measure.pi μ

Tactic:
let e_meas : ((b : ι) → β (e b)) ≃ᵐ ((a : ι') → β a) :=
  MeasurableEquiv.piCongrLeft (fun i ↦ β i) e

Result:
ι : Type u_1
ι' : Type u_2
inst✝² : Fintype ι
hι' : Fintype ι'
e : ι ≃ ι'
β : ι' → Type u_4
inst✝¹ : (i : ι') → MeasurableSpace (β i)
μ : (i : ι') → Measure (β i)
inst✝ : ∀ (i : ι'), SigmaFinite (μ i)
e_meas : ((b : ι) → β (e b)) ≃ᵐ ((a : ι') → β a) := MeasurableEquiv.piCongrLeft (fun i => β i) e
⊢ map (⇑(MeasurableEquiv.piCongrLeft (fun i => β i) e)) (Measure.pi fun i => μ (e i)) = Measure.pi μ

Proof state:
case hfg.h.e_1.h.e_1.e_a
ι : Type u_1
ι' : Type u_2
inst✝² : Fintype ι
hι' : Fintype ι'
e : ι ≃ ι'
β : ι' → Type u_4
inst✝¹ : (i : ι') → MeasurableSpace (β i)
μ : (i : ι') → Measure (β i)
inst✝ : ∀ (i : ι'), SigmaFinite (μ i)
e_meas : ((b : ι) → β (e b)) ≃ᵐ ((a : ι') → β a) := MeasurableEquiv.piCongrLeft (fun i => β i) e
s : (i : ι') → Set (β i)
x✝ : ∀ (i : ι'), MeasurableSet (s i)
s' : (i : ι) → Set (β (e i)) := fun i => s (e i)
this : ⇑e_meas ⁻¹' univ.pi s = univ.pi s'
i : ι'
a✝ : i ∈ Finset.univ
⊢ i = e (e.symm i)

case hfg.h.e_1.h.e_2.e_1
ι : Type u_1
ι' : Type u_2
inst✝² : Fintype ι
hι' : Fintype ι'
e : ι ≃ ι'
β : ι' → Type u_4
inst✝¹ : (i : ι') → MeasurableSpace (β i)
μ : (i : ι') → Measure (β i)
inst✝ : ∀ (i : ι'), SigmaFinite (μ i)
e_meas : ((b : ι) → β (e b)) ≃ᵐ ((a : ι') → β a) := MeasurableEquiv.piCongrLeft (fun i => β i) e
s : (i : ι') → Set (β i)
x✝ : ∀ (i : ι'), MeasurableSet (s i)
s' : (i : ι) → Set (β (e i)) := fun i => s (e i)
this : ⇑e_meas ⁻¹' univ.pi s = univ.pi s'
i : ι'
a✝ : i ∈ Finset.univ
⊢ i = e (e.symm i)

case hfg.h.e_2.e_α.e_a
ι : Type u_1
ι' : Type u_2
inst✝² : Fintype ι
hι' : Fintype ι'
e : ι ≃ ι'
β : ι' → Type u_4
inst✝¹ : (i : ι') → MeasurableSpace (β i)
μ : (i : ι') → Measure (β i)
inst✝ : ∀ (i : ι'), SigmaFinite (μ i)
e_meas : ((b : ι) → β (e b)) ≃ᵐ ((a : ι') → β a) := MeasurableEquiv.piCongrLeft (fun i => β i) e
s : (i : ι') → Set (β i)
x✝ : ∀ (i : ι'), MeasurableSet (s i)
s' : (i : ι) → Set (β (e i)) := fun i => s (e i)
this : ⇑e_meas ⁻¹' univ.pi s = univ.pi s'
i : ι'
a✝ : i ∈ Finset.univ
⊢ i = e (e.symm i)

case hfg.h.e_3
ι : Type u_1
ι' : Type u_2
inst✝² : Fintype ι
hι' : Fintype ι'
e : ι ≃ ι'
β : ι' → Type u_4
inst✝¹ : (i : ι') → MeasurableSpace (β i)
μ : (i : ι') → Measure (β i)
inst✝ : ∀ (i : ι'), SigmaFinite (μ i)
e_meas : ((b : ι) → β (e b)) ≃ᵐ ((a : ι') → β a) := MeasurableEquiv.piCongrLeft (fun i => β i) e
s : (i : ι') → Set (β i)
x✝ : ∀ (i : ι'), MeasurableSet (s i)
s' : (i : ι) → Set (β (e i)) := fun i => s (e i)
this : ⇑e_meas ⁻¹' univ.pi s = univ.pi s'
i : ι'
a✝ : i ∈ Finset.univ
⊢ HEq (fun x => ℝ≥0∞) fun x => ℝ≥0∞

case hfg.h.e_4.e_1.e_a
ι : Type u_1
ι' : Type u_2
inst✝² : Fintype ι
hι' : Fintype ι'
e : ι ≃ ι'
β : ι' → Type u_4
inst✝¹ : (i : ι') → MeasurableSpace (β i)
μ : (i : ι') → Measure (β i)
inst✝ : ∀ (i : ι'), SigmaFinite (μ i)
e_meas : ((b : ι) → β (e b)) ≃ᵐ ((a : ι') → β a) := MeasurableEquiv.piCongrLeft (fun i => β i) e
s : (i : ι') → Set (β i)
x✝ : ∀ (i : ι'), MeasurableSet (s i)
s' : (i : ι) → Set (β (e i)) := fun i => s (e i)
this : ⇑e_meas ⁻¹' univ.pi s = univ.pi s'
i : ι'
a✝ : i ∈ Finset.univ
⊢ i = e (e.symm i)

case hfg.h.e_4.e_2.e_1
ι : Type u_1
ι' : Type u_2
inst✝² : Fintype ι
hι' : Fintype ι'
e : ι ≃ ι'
β : ι' → Type u_4
inst✝¹ : (i : ι') → MeasurableSpace (β i)
μ : (i : ι') → Measure (β i)
inst✝ : ∀ (i : ι'), SigmaFinite (μ i)
e_meas : ((b : ι) → β (e b)) ≃ᵐ ((a : ι') → β a) := MeasurableEquiv.piCongrLeft (fun i => β i) e
s : (i : ι') → Set (β i)
x✝ : ∀ (i : ι'), MeasurableSet (s i)
s' : (i : ι) → Set (β (e i)) := fun i => s (e i)
this : ⇑e_meas ⁻¹' univ.pi s = univ.pi s'
i : ι'
a✝ : i ∈ Finset.univ
⊢ i = e (e.symm i)

case hfg.h.e_5.e_1
ι : Type u_1
ι' : Type u_2
inst✝² : Fintype ι
hι' : Fintype ι'
e : ι ≃ ι'
β : ι' → Type u_4
inst✝¹ : (i : ι') → MeasurableSpace (β i)
μ : (i : ι') → Measure (β i)
inst✝ : ∀ (i : ι'), SigmaFinite (μ i)
e_meas : ((b : ι) → β (e b)) ≃ᵐ ((a : ι') → β a) := MeasurableEquiv.piCongrLeft (fun i => β i) e
s : (i : ι') → Set (β i)
x✝ : ∀ (i : ι'), MeasurableSet (s i)
s' : (i : ι) → Set (β (e i)) := fun i => s (e i)
this : ⇑e_meas ⁻¹' univ.pi s = univ.pi s'
i : ι'
a✝ : i ∈ Finset.univ
⊢ i = e (e.symm i)

case hfg.h.e_6
ι : Type u_1
ι' : Type u_2
inst✝² : Fintype ι
hι' : Fintype ι'
e : ι ≃ ι'
β : ι' → Type u_4
inst✝¹ : (i : ι') → MeasurableSpace (β i)
μ : (i : ι') → Measure (β i)
inst✝ : ∀ (i : ι'), SigmaFinite (μ i)
e_meas : ((b : ι) → β (e b)) ≃ᵐ ((a : ι') → β a) := MeasurableEquiv.piCongrLeft (fun i => β i) e
s : (i : ι') → Set (β i)
x✝ : ∀ (i : ι'), MeasurableSet (s i)
s' : (i : ι) → Set (β (e i)) := fun i => s (e i)
this : ⇑e_meas ⁻¹' univ.pi s = univ.pi s'
i : ι'
a✝ : i ∈ Finset.univ
⊢ HEq (s i) (s (e (e.symm i)))

Tactic:
all_goals rw [e.apply_symm_apply]

Result:
no goals