Theorem: contDiffGroupoid_prod
File: Mathlib/Geometry/Manifold/SmoothManifoldWithCorners.lean

Proof steps:
state_before: m n : ℕ∞
𝕜 : Type u_1
inst✝⁷ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace 𝕜 E
H : Type u_3
inst✝⁴ : TopologicalSpace H
I✝ : ModelWithCorners 𝕜 E H
M : Type u_4
inst✝³ : TopologicalSpace M
E' : Type u_5
H' : Type u_6
inst✝² : NormedAddCommGroup E'
inst✝¹ : NormedSpace 𝕜 E'
inst✝ : TopologicalSpace H'
I : ModelWithCorners 𝕜 E H
I' : ModelWithCorners 𝕜 E' H'
e : PartialHomeomorph H H
e' : PartialHomeomorph H' H'
he : e ∈ contDiffGroupoid ⊤ I
he' : e' ∈ contDiffGroupoid ⊤ I'
⊢ e.prod e' ∈ contDiffGroupoid ⊤ (I.prod I')
state_after: case intro
m n : ℕ∞
𝕜 : Type u_1
inst✝⁷ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace 𝕜 E
H : Type u_3
inst✝⁴ : TopologicalSpace H
I✝ : ModelWithCorners 𝕜 E H
M : Type u_4
inst✝³ : TopologicalSpace M
E' : Type u_5
H' : Type u_6
inst✝² : NormedAddCommGroup E'
inst✝¹ : NormedSpace 𝕜 E'
inst✝ : TopologicalSpace H'
I : ModelWithCorners 𝕜 E H
I' : ModelWithCorners 𝕜 E' H'
e : PartialHomeomorph H H
e' : PartialHomeomorph H' H'
he' : e' ∈ contDiffGroupoid ⊤ I'
he : (contDiffPregroupoid ⊤ I).property (↑e) e.source
he_symm : (contDiffPregroupoid ⊤ I).property (↑e.symm) e.target
⊢ e.prod e' ∈ contDiffGroupoid ⊤ (I.prod I')
tactic: cases' he with he he_symm
state_before: case intro
m n : ℕ∞
𝕜 : Type u_1
inst✝⁷ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace 𝕜 E
H : Type u_3
inst✝⁴ : TopologicalSpace H
I✝ : ModelWithCorners 𝕜 E H
M : Type u_4
inst✝³ : TopologicalSpace M
E' : Type u_5
H' : Type u_6
inst✝² : NormedAddCommGroup E'
inst✝¹ : NormedSpace 𝕜 E'
inst✝ : TopologicalSpace H'
I : ModelWithCorners 𝕜 E H
I' : ModelWithCorners 𝕜 E' H'
e : PartialHomeomorph H H
e' : PartialHomeomorph H' H'
he' : e' ∈ contDiffGroupoid ⊤ I'
he : (contDiffPregroupoid ⊤ I).property (↑e) e.source
he_symm : (contDiffPregroupoid ⊤ I).property (↑e.symm) e.target
⊢ e.prod e' ∈ contDiffGroupoid ⊤ (I.prod I')
state_after: case intro.intro
m n : ℕ∞
𝕜 : Type u_1
inst✝⁷ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace 𝕜 E
H : Type u_3
inst✝⁴ : TopologicalSpace H
I✝ : ModelWithCorners 𝕜 E H
M : Type u_4
inst✝³ : TopologicalSpace M
E' : Type u_5
H' : Type u_6
inst✝² : NormedAddCommGroup E'
inst✝¹ : NormedSpace 𝕜 E'
inst✝ : TopologicalSpace H'
I : ModelWithCorners 𝕜 E H
I' : ModelWithCorners 𝕜 E' H'
e : PartialHomeomorph H H
e' : PartialHomeomorph H' H'
he : (contDiffPregroupoid ⊤ I).property (↑e) e.source
he_symm : (contDiffPregroupoid ⊤ I).property (↑e.symm) e.target
he' : (contDiffPregroupoid ⊤ I').property (↑e') e'.source
he'_symm : (contDiffPregroupoid ⊤ I').property (↑e'.symm) e'.target
⊢ e.prod e' ∈ contDiffGroupoid ⊤ (I.prod I')
tactic: cases' he' with he' he'_symm
state_before: case intro.intro
m n : ℕ∞
𝕜 : Type u_1
inst✝⁷ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace 𝕜 E
H : Type u_3
inst✝⁴ : TopologicalSpace H
I✝ : ModelWithCorners 𝕜 E H
M : Type u_4
inst✝³ : TopologicalSpace M
E' : Type u_5
H' : Type u_6
inst✝² : NormedAddCommGroup E'
inst✝¹ : NormedSpace 𝕜 E'
inst✝ : TopologicalSpace H'
I : ModelWithCorners 𝕜 E H
I' : ModelWithCorners 𝕜 E' H'
e : PartialHomeomorph H H
e' : PartialHomeomorph H' H'
he : (contDiffPregroupoid ⊤ I).property (↑e) e.source
he_symm : (contDiffPregroupoid ⊤ I).property (↑e.symm) e.target
he' : (contDiffPregroupoid ⊤ I').property (↑e') e'.source
he'_symm : (contDiffPregroupoid ⊤ I').property (↑e'.symm) e'.target
⊢ e.prod e' ∈ contDiffGroupoid ⊤ (I.prod I')
state_after: case intro.intro.left
m n : ℕ∞
𝕜 : Type u_1
inst✝⁷ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace 𝕜 E
H : Type u_3
inst✝⁴ : TopologicalSpace H
I✝ : ModelWithCorners 𝕜 E H
M : Type u_4
inst✝³ : TopologicalSpace M
E' : Type u_5
H' : Type u_6
inst✝² : NormedAddCommGroup E'
inst✝¹ : NormedSpace 𝕜 E'
inst✝ : TopologicalSpace H'
I : ModelWithCorners 𝕜 E H
I' : ModelWithCorners 𝕜 E' H'
e : PartialHomeomorph H H
e' : PartialHomeomorph H' H'
he : (contDiffPregroupoid ⊤ I).property (↑e) e.source
he_symm : (contDiffPregroupoid ⊤ I).property (↑e.symm) e.target
he' : (contDiffPregroupoid ⊤ I').property (↑e') e'.source
he'_symm : (contDiffPregroupoid ⊤ I').property (↑e'.symm) e'.target
⊢ ContDiffOn 𝕜 ⊤ (↑(I.prod I') ∘ ↑(e.prod e') ∘ ↑(I.prod I').symm)
    (↑(I.prod I').symm ⁻¹' e.source ×ˢ e'.source ∩ range ↑(I.prod I'))

case intro.intro.right
m n : ℕ∞
𝕜 : Type u_1
inst✝⁷ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace 𝕜 E
H : Type u_3
inst✝⁴ : TopologicalSpace H
I✝ : ModelWithCorners 𝕜 E H
M : Type u_4
inst✝³ : TopologicalSpace M
E' : Type u_5
H' : Type u_6
inst✝² : NormedAddCommGroup E'
inst✝¹ : NormedSpace 𝕜 E'
inst✝ : TopologicalSpace H'
I : ModelWithCorners 𝕜 E H
I' : ModelWithCorners 𝕜 E' H'
e : PartialHomeomorph H H
e' : PartialHomeomorph H' H'
he : (contDiffPregroupoid ⊤ I).property (↑e) e.source
he_symm : (contDiffPregroupoid ⊤ I).property (↑e.symm) e.target
he' : (contDiffPregroupoid ⊤ I').property (↑e') e'.source
he'_symm : (contDiffPregroupoid ⊤ I').property (↑e'.symm) e'.target
⊢ ContDiffOn 𝕜 ⊤ (↑(I.prod I') ∘ ↑(e.prod e').symm ∘ ↑(I.prod I').symm)
    (↑(I.prod I').symm ⁻¹' (e.prod e'.toPartialEquiv).target ∩ range ↑(I.prod I'))
tactic: constructor <;> simp only [PartialEquiv.prod_source, PartialHomeomorph.prod_toPartialEquiv,
    contDiffPregroupoid]