-- 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)
⊢ (map (⇑(MeasurableEquiv.piCongrLeft (fun i => β i) e)) (Measure.pi fun i => μ (e i))) (univ.pi s) =
    ∏ i : ι', (μ i) (s i)

Tactic:
rw [e_meas.measurableEmbedding.map_apply]

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
s : (i : ι') → Set (β i)
x✝ : ∀ (i : ι'), MeasurableSet (s i)
⊢ (Measure.pi fun i => μ (e i)) (⇑e_meas ⁻¹' univ.pi s) = ∏ i : ι', (μ i) (s 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)
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)
⊢ (Measure.pi fun i => μ (e i)) (⇑e_meas ⁻¹' univ.pi s) = ∏ i : ι', (μ i) (s i)

Tactic:
have : e_meas ⁻¹' pi univ s = pi univ s' := by
  ext x
  simp only [mem_preimage, Set.mem_pi, mem_univ, forall_true_left, s']
  refine (e.forall_congr ?_).symm
  intro i
  rw [MeasurableEquiv.piCongrLeft_apply_apply e x i]

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
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'
⊢ (Measure.pi fun i => μ (e i)) (⇑e_meas ⁻¹' univ.pi s) = ∏ i : ι', (μ i) (s 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)
e_meas : ((b : ι) → β (e b)) ≃ᵐ ((a : ι') → β a) := MeasurableEquiv.piCongrLeft (fun i => β i) e
s : (i : ι') → Set (β i)
x✝ : ∀ (i : ι'), MeasurableSet (s i)
⊢ (Measure.pi fun i => μ (e i)) (⇑e_meas ⁻¹' univ.pi s) = ∏ i : ι', (μ i) (s i)

Tactic:
let s' : (i : ι) → Set (β (e i)) := fun i ↦ s (e i)

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
s : (i : ι') → Set (β i)
x✝ : ∀ (i : ι'), MeasurableSet (s i)
s' : (i : ι) → Set (β (e i)) := fun i => s (e i)
⊢ (Measure.pi fun i => μ (e i)) (⇑e_meas ⁻¹' univ.pi s) = ∏ i : ι', (μ i) (s i)