Theorem: parallelepiped_comp_equiv
File: Mathlib/MeasureTheory/Measure/Haar/OfBasis.lean

tactic: simp only [parallelepiped]
state_before: ι : Type u_2
ι' : Type u_1
E : Type u_3
F : Type ?u.30696
inst✝⁵ : Fintype ι
inst✝⁴ : Fintype ι'
inst✝³ : AddCommGroup E
inst✝² : Module ℝ E
inst✝¹ : AddCommGroup F
inst✝ : Module ℝ F
v : ι → E
e : ι' ≃ ι
⊢ parallelepiped (v ∘ ↑e) = parallelepiped v

tactic: let K : (ι' → ℝ) ≃ (ι → ℝ) := Equiv.piCongrLeft' (fun _a : ι' => ℝ) e
state_before: ι : Type u_2
ι' : Type u_1
E : Type u_3
F : Type ?u.30696
inst✝⁵ : Fintype ι
inst✝⁴ : Fintype ι'
inst✝³ : AddCommGroup E
inst✝² : Module ℝ E
inst✝¹ : AddCommGroup F
inst✝ : Module ℝ F
v : ι → E
e : ι' ≃ ι
⊢ (fun a => ∑ x : ι', a x • (v ∘ ↑e) x) '' Icc 0 1 = (fun t => ∑ i : ι, t i • v i) '' Icc 0 1

tactic: rw [this, ← image_comp]
state_before: ι : Type u_2
ι' : Type u_1
E : Type u_3
F : Type ?u.30696
inst✝⁵ : Fintype ι
inst✝⁴ : Fintype ι'
inst✝³ : AddCommGroup E
inst✝² : Module ℝ E
inst✝¹ : AddCommGroup F
inst✝ : Module ℝ F
v : ι → E
e : ι' ≃ ι
K : (ι' → ℝ) ≃ (ι → ℝ) := Equiv.piCongrLeft' (fun _a => ℝ) e
this : Icc 0 1 = ↑K '' Icc 0 1
⊢ (fun a => ∑ x : ι', a x • (v ∘ ↑e) x) '' Icc 0 1 = (fun t => ∑ i : ι, t i • v i) '' Icc 0 1

tactic: congr 1 with x
state_before: ι : Type u_2
ι' : Type u_1
E : Type u_3
F : Type ?u.30696
inst✝⁵ : Fintype ι
inst✝⁴ : Fintype ι'
inst✝³ : AddCommGroup E
inst✝² : Module ℝ E
inst✝¹ : AddCommGroup F
inst✝ : Module ℝ F
v : ι → E
e : ι' ≃ ι
K : (ι' → ℝ) ≃ (ι → ℝ) := Equiv.piCongrLeft' (fun _a => ℝ) e
this : Icc 0 1 = ↑K '' Icc 0 1
⊢ (fun a => ∑ x : ι', a x • (v ∘ ↑e) x) '' Icc 0 1 = (fun t => ∑ i : ι, t i • v i) ∘ ↑K '' Icc 0 1

tactic: have := fun z : ι' → ℝ => e.symm.sum_comp fun i => z i • v (e i)
state_before: case h
ι : Type u_2
ι' : Type u_1
E : Type u_3
F : Type ?u.30696
inst✝⁵ : Fintype ι
inst✝⁴ : Fintype ι'
inst✝³ : AddCommGroup E
inst✝² : Module ℝ E
inst✝¹ : AddCommGroup F
inst✝ : Module ℝ F
v : ι → E
e : ι' ≃ ι
K : (ι' → ℝ) ≃ (ι → ℝ) := Equiv.piCongrLeft' (fun _a => ℝ) e
this : Icc 0 1 = ↑K '' Icc 0 1
x : E
⊢ x ∈ (fun a => ∑ x : ι', a x • (v ∘ ↑e) x) '' Icc 0 1 ↔ x ∈ (fun t => ∑ i : ι, t i • v i) ∘ ↑K '' Icc 0 1

tactic: simp_rw [Equiv.apply_symm_apply] at this
state_before: case h
ι : Type u_2
ι' : Type u_1
E : Type u_3
F : Type ?u.30696
inst✝⁵ : Fintype ι
inst✝⁴ : Fintype ι'
inst✝³ : AddCommGroup E
inst✝² : Module ℝ E
inst✝¹ : AddCommGroup F
inst✝ : Module ℝ F
v : ι → E
e : ι' ≃ ι
K : (ι' → ℝ) ≃ (ι → ℝ) := Equiv.piCongrLeft' (fun _a => ℝ) e
this✝ : Icc 0 1 = ↑K '' Icc 0 1
x : E
this : ∀ (z : ι' → ℝ), ∑ i : ι, z (↑e.symm i) • v (↑e (↑e.symm i)) = ∑ i : ι', z i • v (↑e i)
⊢ x ∈ (fun a => ∑ x : ι', a x • (v ∘ ↑e) x) '' Icc 0 1 ↔ x ∈ (fun t => ∑ i : ι, t i • v i) ∘ ↑K '' Icc 0 1

tactic: simp_rw [Function.comp_apply, ge_iff_le, zero_le_one, not_true, gt_iff_lt, mem_image, mem_Icc,
  Equiv.piCongrLeft'_apply, this]
state_before: case h
ι : Type u_2
ι' : Type u_1
E : Type u_3
F : Type ?u.30696
inst✝⁵ : Fintype ι
inst✝⁴ : Fintype ι'
inst✝³ : AddCommGroup E
inst✝² : Module ℝ E
inst✝¹ : AddCommGroup F
inst✝ : Module ℝ F
v : ι → E
e : ι' ≃ ι
K : (ι' → ℝ) ≃ (ι → ℝ) := Equiv.piCongrLeft' (fun _a => ℝ) e
this✝ : Icc 0 1 = ↑K '' Icc 0 1
x : E
this : ∀ (z : ι' → ℝ), ∑ x : ι, z (↑e.symm x) • v x = ∑ x : ι', z x • v (↑e x)
⊢ x ∈ (fun a => ∑ x : ι', a x • (v ∘ ↑e) x) '' Icc 0 1 ↔ x ∈ (fun t => ∑ i : ι, t i • v i) ∘ ↑K '' Icc 0 1

tactic: rw [← Equiv.preimage_eq_iff_eq_image]
state_before: ι : Type u_2
ι' : Type u_1
E : Type u_3
F : Type ?u.30696
inst✝⁵ : Fintype ι
inst✝⁴ : Fintype ι'
inst✝³ : AddCommGroup E
inst✝² : Module ℝ E
inst✝¹ : AddCommGroup F
inst✝ : Module ℝ F
v : ι → E
e : ι' ≃ ι
K : (ι' → ℝ) ≃ (ι → ℝ) := Equiv.piCongrLeft' (fun _a => ℝ) e
⊢ Icc 0 1 = ↑K '' Icc 0 1

tactic: ext x
state_before: ι : Type u_2
ι' : Type u_1
E : Type u_3
F : Type ?u.30696
inst✝⁵ : Fintype ι
inst✝⁴ : Fintype ι'
inst✝³ : AddCommGroup E
inst✝² : Module ℝ E
inst✝¹ : AddCommGroup F
inst✝ : Module ℝ F
v : ι → E
e : ι' ≃ ι
K : (ι' → ℝ) ≃ (ι → ℝ) := Equiv.piCongrLeft' (fun _a => ℝ) e
⊢ ↑K ⁻¹' Icc 0 1 = Icc 0 1

tactic: simp only [mem_preimage, mem_Icc, Pi.le_def, Pi.zero_apply, Equiv.piCongrLeft'_apply,
  Pi.one_apply]
state_before: case h
ι : Type u_2
ι' : Type u_1
E : Type u_3
F : Type ?u.30696
inst✝⁵ : Fintype ι
inst✝⁴ : Fintype ι'
inst✝³ : AddCommGroup E
inst✝² : Module ℝ E
inst✝¹ : AddCommGroup F
inst✝ : Module ℝ F
v : ι → E
e : ι' ≃ ι
K : (ι' → ℝ) ≃ (ι → ℝ) := Equiv.piCongrLeft' (fun _a => ℝ) e
x : ι' → ℝ
⊢ x ∈ ↑K ⁻¹' Icc 0 1 ↔ x ∈ Icc 0 1

tactic: refine'
  ⟨fun h => ⟨fun i => _, fun i => _⟩, fun h =>
    ⟨fun i => h.1 (e.symm i), fun i => h.2 (e.symm i)⟩⟩
state_before: case h
ι : Type u_2
ι' : Type u_1
E : Type u_3
F : Type ?u.30696
inst✝⁵ : Fintype ι
inst✝⁴ : Fintype ι'
inst✝³ : AddCommGroup E
inst✝² : Module ℝ E
inst✝¹ : AddCommGroup F
inst✝ : Module ℝ F
v : ι → E
e : ι' ≃ ι
K : (ι' → ℝ) ≃ (ι → ℝ) := Equiv.piCongrLeft' (fun _a => ℝ) e
x : ι' → ℝ
⊢ ((∀ (i : ι), 0 ≤ x (↑e.symm i)) ∧ ∀ (i : ι), x (↑e.symm i) ≤ 1) ↔ (∀ (i : ι'), 0 ≤ x i) ∧ ∀ (i : ι'), x i ≤ 1

tactic: simpa only [Equiv.symm_apply_apply] using h.1 (e i)
state_before: case h.refine'_1
ι : Type u_2
ι' : Type u_1
E : Type u_3
F : Type ?u.30696
inst✝⁵ : Fintype ι
inst✝⁴ : Fintype ι'
inst✝³ : AddCommGroup E
inst✝² : Module ℝ E
inst✝¹ : AddCommGroup F
inst✝ : Module ℝ F
v : ι → E
e : ι' ≃ ι
K : (ι' → ℝ) ≃ (ι → ℝ) := Equiv.piCongrLeft' (fun _a => ℝ) e
x : ι' → ℝ
h : (∀ (i : ι), 0 ≤ x (↑e.symm i)) ∧ ∀ (i : ι), x (↑e.symm i) ≤ 1
i : ι'
⊢ 0 ≤ x i

tactic: simpa only [Equiv.symm_apply_apply] using h.2 (e i)
state_before: case h.refine'_2
ι : Type u_2
ι' : Type u_1
E : Type u_3
F : Type ?u.30696
inst✝⁵ : Fintype ι
inst✝⁴ : Fintype ι'
inst✝³ : AddCommGroup E
inst✝² : Module ℝ E
inst✝¹ : AddCommGroup F
inst✝ : Module ℝ F
v : ι → E
e : ι' ≃ ι
K : (ι' → ℝ) ≃ (ι → ℝ) := Equiv.piCongrLeft' (fun _a => ℝ) e
x : ι' → ℝ
h : (∀ (i : ι), 0 ≤ x (↑e.symm i)) ∧ ∀ (i : ι), x (↑e.symm i) ≤ 1
i : ι'
⊢ x i ≤ 1