-- Mathlib/MeasureTheory/Measure/Haar/OfBasis.lean
theorem Basis.prod_parallelepiped (v : Basis ι ℝ E) (w : Basis ι' ℝ F) :
    (v.prod w).parallelepiped = v.parallelepiped.prod w.parallelepiped

Proof state:
case h.left.left
ι : Type u_1
ι' : Type u_2
E : Type u_3
F : Type u_4
inst✝⁵ : Fintype ι
inst✝⁴ : Fintype ι'
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ E
inst✝ : NormedSpace ℝ F
v : Basis ι ℝ E
w : Basis ι' ℝ F
x : E × F
t : ι → ℝ
ht1 : t ∈ Icc 0 1
ht2 : x.1 = ∑ i : ι, t i • v i
s : ι' → ℝ
hs1 : s ∈ Icc 0 1
hs2 : x.2 = ∑ i : ι', s i • w i
⊢ ∀ (x : ι ⊕ ι'), 0 ≤ Sum.elim t s x

Tactic:
aesop

Result:
no goals

Proof state:
case h
ι : Type u_1
ι' : Type u_2
E : Type u_3
F : Type u_4
inst✝⁵ : Fintype ι
inst✝⁴ : Fintype ι'
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ E
inst✝ : NormedSpace ℝ F
v : Basis ι ℝ E
w : Basis ι' ℝ F
x : E × F
t : ι ⊕ ι' → ℝ
ht1 : t ∈ Icc 0 1
ht2 : x = ∑ i : ι ⊕ ι', t i • (v.prod w) i
⊢ t ∘ Sum.inl ∈ Icc 0 1 ∧ x.1 = ∑ i : ι, (t ∘ Sum.inl) i • v i

Tactic:
constructor

Result:
case h.left
ι : Type u_1
ι' : Type u_2
E : Type u_3
F : Type u_4
inst✝⁵ : Fintype ι
inst✝⁴ : Fintype ι'
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ E
inst✝ : NormedSpace ℝ F
v : Basis ι ℝ E
w : Basis ι' ℝ F
x : E × F
t : ι ⊕ ι' → ℝ
ht1 : t ∈ Icc 0 1
ht2 : x = ∑ i : ι ⊕ ι', t i • (v.prod w) i
⊢ t ∘ Sum.inl ∈ Icc 0 1

case h.right
ι : Type u_1
ι' : Type u_2
E : Type u_3
F : Type u_4
inst✝⁵ : Fintype ι
inst✝⁴ : Fintype ι'
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ E
inst✝ : NormedSpace ℝ F
v : Basis ι ℝ E
w : Basis ι' ℝ F
x : E × F
t : ι ⊕ ι' → ℝ
ht1 : t ∈ Icc 0 1
ht2 : x = ∑ i : ι ⊕ ι', t i • (v.prod w) i
⊢ x.1 = ∑ i : ι, (t ∘ Sum.inl) i • v i

Proof state:
case h.h.mp.intro.intro.right
ι : Type u_1
ι' : Type u_2
E : Type u_3
F : Type u_4
inst✝⁵ : Fintype ι
inst✝⁴ : Fintype ι'
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ E
inst✝ : NormedSpace ℝ F
v : Basis ι ℝ E
w : Basis ι' ℝ F
x : E × F
t : ι ⊕ ι' → ℝ
ht1 : t ∈ Icc 0 1
ht2 : x = ∑ i : ι ⊕ ι', t i • (v.prod w) i
⊢ ∃ t ∈ Icc 0 1, x.2 = ∑ i : ι', t i • w i

Tactic:
use t ∘ Sum.inr

Result:
case h
ι : Type u_1
ι' : Type u_2
E : Type u_3
F : Type u_4
inst✝⁵ : Fintype ι
inst✝⁴ : Fintype ι'
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ E
inst✝ : NormedSpace ℝ F
v : Basis ι ℝ E
w : Basis ι' ℝ F
x : E × F
t : ι ⊕ ι' → ℝ
ht1 : t ∈ Icc 0 1
ht2 : x = ∑ i : ι ⊕ ι', t i • (v.prod w) i
⊢ t ∘ Sum.inr ∈ Icc 0 1 ∧ x.2 = ∑ i : ι', (t ∘ Sum.inr) i • w i

Proof state:
case h.h.mpr
ι : Type u_1
ι' : Type u_2
E : Type u_3
F : Type u_4
inst✝⁵ : Fintype ι
inst✝⁴ : Fintype ι'
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ E
inst✝ : NormedSpace ℝ F
v : Basis ι ℝ E
w : Basis ι' ℝ F
x : E × F
⊢ ((∃ t ∈ Icc 0 1, x.1 = ∑ i : ι, t i • v i) ∧ ∃ t ∈ Icc 0 1, x.2 = ∑ i : ι', t i • w i) →
    ∃ t ∈ Icc 0 1, x = ∑ i : ι ⊕ ι', t i • (v.prod w) i

Tactic:
intro h

Result:
case h.h.mpr
ι : Type u_1
ι' : Type u_2
E : Type u_3
F : Type u_4
inst✝⁵ : Fintype ι
inst✝⁴ : Fintype ι'
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ E
inst✝ : NormedSpace ℝ F
v : Basis ι ℝ E
w : Basis ι' ℝ F
x : E × F
h : (∃ t ∈ Icc 0 1, x.1 = ∑ i : ι, t i • v i) ∧ ∃ t ∈ Icc 0 1, x.2 = ∑ i : ι', t i • w i
⊢ ∃ t ∈ Icc 0 1, x = ∑ i : ι ⊕ ι', t i • (v.prod w) i

Proof state:
case h.left.right
ι : Type u_1
ι' : Type u_2
E : Type u_3
F : Type u_4
inst✝⁵ : Fintype ι
inst✝⁴ : Fintype ι'
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ E
inst✝ : NormedSpace ℝ F
v : Basis ι ℝ E
w : Basis ι' ℝ F
x : E × F
t : ι → ℝ
ht1 : t ∈ Icc 0 1
ht2 : x.1 = ∑ i : ι, t i • v i
s : ι' → ℝ
hs1 : s ∈ Icc 0 1
hs2 : x.2 = ∑ i : ι', s i • w i
⊢ Sum.elim t s ≤ 1

Tactic:
change ∀ x : ι ⊕ ι', Sum.elim t s x ≤ 1

Result:
case h.left.right
ι : Type u_1
ι' : Type u_2
E : Type u_3
F : Type u_4
inst✝⁵ : Fintype ι
inst✝⁴ : Fintype ι'
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ E
inst✝ : NormedSpace ℝ F
v : Basis ι ℝ E
w : Basis ι' ℝ F
x : E × F
t : ι → ℝ
ht1 : t ∈ Icc 0 1
ht2 : x.1 = ∑ i : ι, t i • v i
s : ι' → ℝ
hs1 : s ∈ Icc 0 1
hs2 : x.2 = ∑ i : ι', s i • w i
⊢ ∀ (x : ι ⊕ ι'), Sum.elim t s x ≤ 1

Proof state:
case h.h.mpr
ι : Type u_1
ι' : Type u_2
E : Type u_3
F : Type u_4
inst✝⁵ : Fintype ι
inst✝⁴ : Fintype ι'
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ E
inst✝ : NormedSpace ℝ F
v : Basis ι ℝ E
w : Basis ι' ℝ F
x : E × F
h : (∃ t ∈ Icc 0 1, x.1 = ∑ i : ι, t i • v i) ∧ ∃ t ∈ Icc 0 1, x.2 = ∑ i : ι', t i • w i
⊢ ∃ t ∈ Icc 0 1, x = ∑ i : ι ⊕ ι', t i • (v.prod w) i

Tactic:
rcases h with ⟨⟨t, ht1, ht2⟩, ⟨s, hs1, hs2⟩⟩

Result:
case h.h.mpr.intro.intro.intro.intro.intro
ι : Type u_1
ι' : Type u_2
E : Type u_3
F : Type u_4
inst✝⁵ : Fintype ι
inst✝⁴ : Fintype ι'
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ E
inst✝ : NormedSpace ℝ F
v : Basis ι ℝ E
w : Basis ι' ℝ F
x : E × F
t : ι → ℝ
ht1 : t ∈ Icc 0 1
ht2 : x.1 = ∑ i : ι, t i • v i
s : ι' → ℝ
hs1 : s ∈ Icc 0 1
hs2 : x.2 = ∑ i : ι', s i • w i
⊢ ∃ t ∈ Icc 0 1, x = ∑ i : ι ⊕ ι', t i • (v.prod w) i

Proof state:
case h.h.mp
ι : Type u_1
ι' : Type u_2
E : Type u_3
F : Type u_4
inst✝⁵ : Fintype ι
inst✝⁴ : Fintype ι'
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ E
inst✝ : NormedSpace ℝ F
v : Basis ι ℝ E
w : Basis ι' ℝ F
x : E × F
⊢ (∃ t ∈ Icc 0 1, x = ∑ i : ι ⊕ ι', t i • (v.prod w) i) →
    (∃ t ∈ Icc 0 1, x.1 = ∑ i : ι, t i • v i) ∧ ∃ t ∈ Icc 0 1, x.2 = ∑ i : ι', t i • w i

Tactic:
intro h

Result:
case h.h.mp
ι : Type u_1
ι' : Type u_2
E : Type u_3
F : Type u_4
inst✝⁵ : Fintype ι
inst✝⁴ : Fintype ι'
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ E
inst✝ : NormedSpace ℝ F
v : Basis ι ℝ E
w : Basis ι' ℝ F
x : E × F
h : ∃ t ∈ Icc 0 1, x = ∑ i : ι ⊕ ι', t i • (v.prod w) i
⊢ (∃ t ∈ Icc 0 1, x.1 = ∑ i : ι, t i • v i) ∧ ∃ t ∈ Icc 0 1, x.2 = ∑ i : ι', t i • w i

Proof state:
case h.h
ι : Type u_1
ι' : Type u_2
E : Type u_3
F : Type u_4
inst✝⁵ : Fintype ι
inst✝⁴ : Fintype ι'
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ E
inst✝ : NormedSpace ℝ F
v : Basis ι ℝ E
w : Basis ι' ℝ F
x : E × F
⊢ x ∈ ↑(v.prod w).parallelepiped ↔ x ∈ ↑(v.parallelepiped.prod w.parallelepiped)

Tactic:
simp only [Basis.coe_parallelepiped, TopologicalSpace.PositiveCompacts.coe_prod, Set.mem_prod,
  mem_parallelepiped_iff]

Result:
case h.h
ι : Type u_1
ι' : Type u_2
E : Type u_3
F : Type u_4
inst✝⁵ : Fintype ι
inst✝⁴ : Fintype ι'
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ E
inst✝ : NormedSpace ℝ F
v : Basis ι ℝ E
w : Basis ι' ℝ F
x : E × F
⊢ (∃ t ∈ Icc 0 1, x = ∑ i : ι ⊕ ι', t i • (v.prod w) i) ↔
    (∃ t ∈ Icc 0 1, x.1 = ∑ i : ι, t i • v i) ∧ ∃ t ∈ Icc 0 1, x.2 = ∑ i : ι', t i • w i

Proof state:
case h.right.snd
ι : Type u_1
ι' : Type u_2
E : Type u_3
F : Type u_4
inst✝⁵ : Fintype ι
inst✝⁴ : Fintype ι'
inst✝³ : NormedAddCommGroup E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ E
inst✝ : NormedSpace ℝ F
v : Basis ι ℝ E
w : Basis ι' ℝ F
x : E × F
t : ι → ℝ
ht1 : t ∈ Icc 0 1
ht2 : x.1 = ∑ i : ι, t i • v i
s : ι' → ℝ
hs1 : s ∈ Icc 0 1
hs2 : x.2 = ∑ i : ι', s i • w i
⊢ x.2 = (∑ i : ι ⊕ ι', Sum.elim t s i • (v.prod w) i).2

Tactic:
simp [hs2, Prod.snd_sum]

Result:
no goals