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

tactic: cases' he with he he_symm
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: constructor <;> simp only [PartialEquiv.prod_source, PartialHomeomorph.prod_toPartialEquiv,
  contDiffPregroupoid]
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: have h3 := ContDiffOn.prod_map he he'
state_before: 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'))
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
h3 :
  ContDiffOn 𝕜 ⊤ (Prod.map (↑I ∘ ↑e ∘ ↑I.symm) (↑I' ∘ ↑e' ∘ ↑I'.symm))
    ((↑I.symm ⁻¹' e.source ∩ range ↑I) ×ˢ (↑I'.symm ⁻¹' e'.source ∩ range ↑I'))
⊢ ContDiffOn 𝕜 ⊤ (↑(I.prod I') ∘ ↑(e.prod e') ∘ ↑(I.prod I').symm)
    (↑(I.prod I').symm ⁻¹' e.source ×ˢ e'.source ∩ range ↑(I.prod I'))

tactic: rw [← I.image_eq, ← I'.image_eq, prod_image_image_eq] at h3
state_before: 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
h3 :
  ContDiffOn 𝕜 ⊤ (Prod.map (↑I ∘ ↑e ∘ ↑I.symm) (↑I' ∘ ↑e' ∘ ↑I'.symm))
    ((↑I.symm ⁻¹' e.source ∩ range ↑I) ×ˢ (↑I'.symm ⁻¹' e'.source ∩ range ↑I'))
⊢ ContDiffOn 𝕜 ⊤ (↑(I.prod I') ∘ ↑(e.prod e') ∘ ↑(I.prod I').symm)
    (↑(I.prod I').symm ⁻¹' e.source ×ˢ e'.source ∩ range ↑(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
h3 :
  ContDiffOn 𝕜 ⊤ (Prod.map (↑I ∘ ↑e ∘ ↑I.symm) (↑I' ∘ ↑e' ∘ ↑I'.symm))
    ((fun p => (↑I p.1, ↑I' p.2)) '' e.source ×ˢ e'.source)
⊢ ContDiffOn 𝕜 ⊤ (↑(I.prod I') ∘ ↑(e.prod e') ∘ ↑(I.prod I').symm)
    (↑(I.prod I').symm ⁻¹' e.source ×ˢ e'.source ∩ range ↑(I.prod I'))

tactic: rw [← (I.prod I').image_eq]
state_before: 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
h3 :
  ContDiffOn 𝕜 ⊤ (Prod.map (↑I ∘ ↑e ∘ ↑I.symm) (↑I' ∘ ↑e' ∘ ↑I'.symm))
    ((fun p => (↑I p.1, ↑I' p.2)) '' e.source ×ˢ e'.source)
⊢ ContDiffOn 𝕜 ⊤ (↑(I.prod I') ∘ ↑(e.prod e') ∘ ↑(I.prod I').symm)
    (↑(I.prod I').symm ⁻¹' e.source ×ˢ e'.source ∩ range ↑(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
h3 :
  ContDiffOn 𝕜 ⊤ (Prod.map (↑I ∘ ↑e ∘ ↑I.symm) (↑I' ∘ ↑e' ∘ ↑I'.symm))
    ((fun p => (↑I p.1, ↑I' p.2)) '' e.source ×ˢ e'.source)
⊢ ContDiffOn 𝕜 ⊤ (↑(I.prod I') ∘ ↑(e.prod e') ∘ ↑(I.prod I').symm) (↑(I.prod I') '' e.source ×ˢ e'.source)

tactic: exact h3
state_before: 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
h3 :
  ContDiffOn 𝕜 ⊤ (Prod.map (↑I ∘ ↑e ∘ ↑I.symm) (↑I' ∘ ↑e' ∘ ↑I'.symm))
    ((fun p => (↑I p.1, ↑I' p.2)) '' e.source ×ˢ e'.source)
⊢ ContDiffOn 𝕜 ⊤ (↑(I.prod I') ∘ ↑(e.prod e') ∘ ↑(I.prod I').symm) (↑(I.prod I') '' e.source ×ˢ e'.source)
state_after: no goals

tactic: have h3 := ContDiffOn.prod_map he_symm he'_symm
state_before: 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'))
state_after: 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
h3 :
  ContDiffOn 𝕜 ⊤ (Prod.map (↑I ∘ ↑e.symm ∘ ↑I.symm) (↑I' ∘ ↑e'.symm ∘ ↑I'.symm))
    ((↑I.symm ⁻¹' e.target ∩ range ↑I) ×ˢ (↑I'.symm ⁻¹' e'.target ∩ range ↑I'))
⊢ 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: rw [← I.image_eq, ← I'.image_eq, prod_image_image_eq] at h3
state_before: 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
h3 :
  ContDiffOn 𝕜 ⊤ (Prod.map (↑I ∘ ↑e.symm ∘ ↑I.symm) (↑I' ∘ ↑e'.symm ∘ ↑I'.symm))
    ((↑I.symm ⁻¹' e.target ∩ range ↑I) ×ˢ (↑I'.symm ⁻¹' e'.target ∩ range ↑I'))
⊢ 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'))
state_after: 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
h3 :
  ContDiffOn 𝕜 ⊤ (Prod.map (↑I ∘ ↑e.symm ∘ ↑I.symm) (↑I' ∘ ↑e'.symm ∘ ↑I'.symm))
    ((fun p => (↑I p.1, ↑I' p.2)) '' e.target ×ˢ 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: rw [← (I.prod I').image_eq]
state_before: 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
h3 :
  ContDiffOn 𝕜 ⊤ (Prod.map (↑I ∘ ↑e.symm ∘ ↑I.symm) (↑I' ∘ ↑e'.symm ∘ ↑I'.symm))
    ((fun p => (↑I p.1, ↑I' p.2)) '' e.target ×ˢ 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'))
state_after: 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
h3 :
  ContDiffOn 𝕜 ⊤ (Prod.map (↑I ∘ ↑e.symm ∘ ↑I.symm) (↑I' ∘ ↑e'.symm ∘ ↑I'.symm))
    ((fun p => (↑I p.1, ↑I' p.2)) '' e.target ×ˢ e'.target)
⊢ ContDiffOn 𝕜 ⊤ (↑(I.prod I') ∘ ↑(e.prod e').symm ∘ ↑(I.prod I').symm)
    (↑(I.prod I') '' (e.prod e'.toPartialEquiv).target)

tactic: exact h3
state_before: 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
h3 :
  ContDiffOn 𝕜 ⊤ (Prod.map (↑I ∘ ↑e.symm ∘ ↑I.symm) (↑I' ∘ ↑e'.symm ∘ ↑I'.symm))
    ((fun p => (↑I p.1, ↑I' p.2)) '' e.target ×ˢ e'.target)
⊢ ContDiffOn 𝕜 ⊤ (↑(I.prod I') ∘ ↑(e.prod e').symm ∘ ↑(I.prod I').symm)
    (↑(I.prod I') '' (e.prod e'.toPartialEquiv).target)
state_after: no goals