[GOAL]
𝕜 : 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
⊢ I.target = range ↑I
[PROOFSTEP]
rw [← image_univ, ← I.source_eq]
[GOAL]
𝕜 : 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
⊢ I.target = ↑I '' I.source
[PROOFSTEP]
exact I.image_source_eq_target.symm
[GOAL]
𝕜 : 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
x : H
⊢ ↑(ModelWithCorners.symm I) (↑I x) = x
[PROOFSTEP]
refine' I.left_inv' _
[GOAL]
𝕜 : 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
x : H
⊢ x ∈ I.source
[PROOFSTEP]
simp
[GOAL]
𝕜 : 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
s : Set H
⊢ ↑I '' s = ↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I
[PROOFSTEP]
refine' (I.toLocalEquiv.image_eq_target_inter_inv_preimage _).trans _
[GOAL]
case refine'_1
𝕜 : 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
s : Set H
⊢ s ⊆ I.source
[PROOFSTEP]
rw [I.source_eq]
[GOAL]
case refine'_1
𝕜 : 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
s : Set H
⊢ s ⊆ univ
[PROOFSTEP]
exact subset_univ _
[GOAL]
case refine'_2
𝕜 : 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
s : Set H
⊢ I.target ∩ ↑(LocalEquiv.symm I.toLocalEquiv) ⁻¹' s = ↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I
[PROOFSTEP]
rw [inter_comm, I.target_eq, I.toLocalEquiv_coe_symm]
[GOAL]
𝕜 : 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
x : H
s : Set H
⊢ map (↑(ModelWithCorners.symm I)) (𝓝[↑I '' s] ↑I x) = 𝓝[s] x
[PROOFSTEP]
rw [← I.map_nhdsWithin_eq, map_map, I.symm_comp_self, map_id]
[GOAL]
𝕜 : 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
x : H
⊢ map (↑(ModelWithCorners.symm I)) (𝓝[range ↑I] ↑I x) = 𝓝 x
[PROOFSTEP]
rw [← I.map_nhds_eq, map_map, I.symm_comp_self, map_id]
[GOAL]
𝕜 : 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
s : Set H
hs : IsOpen s
⊢ UniqueDiffOn 𝕜 (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I)
[PROOFSTEP]
rw [inter_comm]
[GOAL]
𝕜 : 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
s : Set H
hs : IsOpen s
⊢ UniqueDiffOn 𝕜 (range ↑I ∩ ↑(ModelWithCorners.symm I) ⁻¹' s)
[PROOFSTEP]
exact I.unique_diff.inter (hs.preimage I.continuous_invFun)
[GOAL]
𝕜 : 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
X : Type u_4
inst✝ : TopologicalSpace X
f : H → X
s : Set H
x : H
⊢ ContinuousWithinAt (f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I) (↑I x) ↔
    ContinuousWithinAt f s x
[PROOFSTEP]
refine' ⟨fun h => _, fun h => _⟩
[GOAL]
case refine'_1
𝕜 : 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
X : Type u_4
inst✝ : TopologicalSpace X
f : H → X
s : Set H
x : H
h : ContinuousWithinAt (f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I) (↑I x)
⊢ ContinuousWithinAt f s x
[PROOFSTEP]
have := h.comp I.continuousWithinAt (mapsTo_preimage _ _)
[GOAL]
case refine'_1
𝕜 : 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
X : Type u_4
inst✝ : TopologicalSpace X
f : H → X
s : Set H
x : H
h : ContinuousWithinAt (f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I) (↑I x)
this :
  ContinuousWithinAt ((f ∘ ↑(ModelWithCorners.symm I)) ∘ ↑I) (↑I ⁻¹' (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I)) x
⊢ ContinuousWithinAt f s x
[PROOFSTEP]
simp_rw [preimage_inter, preimage_preimage, I.left_inv, preimage_id', preimage_range, inter_univ] at this 
[GOAL]
case refine'_1
𝕜 : 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
X : Type u_4
inst✝ : TopologicalSpace X
f : H → X
s : Set H
x : H
h : ContinuousWithinAt (f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I) (↑I x)
this : ContinuousWithinAt ((f ∘ ↑(ModelWithCorners.symm I)) ∘ ↑I) s x
⊢ ContinuousWithinAt f s x
[PROOFSTEP]
rwa [Function.comp.assoc, I.symm_comp_self] at this 
[GOAL]
case refine'_2
𝕜 : 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
X : Type u_4
inst✝ : TopologicalSpace X
f : H → X
s : Set H
x : H
h : ContinuousWithinAt f s x
⊢ ContinuousWithinAt (f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I) (↑I x)
[PROOFSTEP]
rw [← I.left_inv x] at h 
[GOAL]
case refine'_2
𝕜 : 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
X : Type u_4
inst✝ : TopologicalSpace X
f : H → X
s : Set H
x : H
h : ContinuousWithinAt f s (↑(ModelWithCorners.symm I) (↑I x))
⊢ ContinuousWithinAt (f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I) (↑I x)
[PROOFSTEP]
exact h.comp I.continuousWithinAt_symm (inter_subset_left _ _)
[GOAL]
𝕜 : 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
inst✝ : LocallyCompactSpace E
I : ModelWithCorners 𝕜 E H
⊢ LocallyCompactSpace H
[PROOFSTEP]
have : ∀ x : H, (𝓝 x).HasBasis (fun s => s ∈ 𝓝 (I x) ∧ IsCompact s) fun s => I.symm '' (s ∩ range I) := fun x ↦
  by
  rw [← I.symm_map_nhdsWithin_range]
  exact ((compact_basis_nhds (I x)).inf_principal _).map _
[GOAL]
𝕜 : 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
inst✝ : LocallyCompactSpace E
I : ModelWithCorners 𝕜 E H
x : H
⊢ HasBasis (𝓝 x) (fun s => s ∈ 𝓝 (↑I x) ∧ IsCompact s) fun s => ↑(ModelWithCorners.symm I) '' (s ∩ range ↑I)
[PROOFSTEP]
rw [← I.symm_map_nhdsWithin_range]
[GOAL]
𝕜 : 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
inst✝ : LocallyCompactSpace E
I : ModelWithCorners 𝕜 E H
x : H
⊢ HasBasis (map (↑(ModelWithCorners.symm I)) (𝓝[range ↑I] ↑I x)) (fun s => s ∈ 𝓝 (↑I x) ∧ IsCompact s) fun s =>
    ↑(ModelWithCorners.symm I) '' (s ∩ range ↑I)
[PROOFSTEP]
exact ((compact_basis_nhds (I x)).inf_principal _).map _
[GOAL]
𝕜 : 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
inst✝ : LocallyCompactSpace E
I : ModelWithCorners 𝕜 E H
this :
  ∀ (x : H), HasBasis (𝓝 x) (fun s => s ∈ 𝓝 (↑I x) ∧ IsCompact s) fun s => ↑(ModelWithCorners.symm I) '' (s ∩ range ↑I)
⊢ LocallyCompactSpace H
[PROOFSTEP]
refine' locallyCompactSpace_of_hasBasis this _
[GOAL]
𝕜 : 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
inst✝ : LocallyCompactSpace E
I : ModelWithCorners 𝕜 E H
this :
  ∀ (x : H), HasBasis (𝓝 x) (fun s => s ∈ 𝓝 (↑I x) ∧ IsCompact s) fun s => ↑(ModelWithCorners.symm I) '' (s ∩ range ↑I)
⊢ ∀ (x : H) (i : Set E), i ∈ 𝓝 (↑I x) ∧ IsCompact i → IsCompact (↑(ModelWithCorners.symm I) '' (i ∩ range ↑I))
[PROOFSTEP]
rintro x s ⟨-, hsc⟩
[GOAL]
case intro
𝕜 : 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
inst✝ : LocallyCompactSpace E
I : ModelWithCorners 𝕜 E H
this :
  ∀ (x : H), HasBasis (𝓝 x) (fun s => s ∈ 𝓝 (↑I x) ∧ IsCompact s) fun s => ↑(ModelWithCorners.symm I) '' (s ∩ range ↑I)
x : H
s : Set E
hsc : IsCompact s
⊢ IsCompact (↑(ModelWithCorners.symm I) '' (s ∩ range ↑I))
[PROOFSTEP]
exact (hsc.inter_right I.closed_range).image I.continuous_symm
[GOAL]
𝕜 : Type u
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type v
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
H : Type w
inst✝³ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
E' : Type v'
inst✝² : NormedAddCommGroup E'
inst✝¹ : NormedSpace 𝕜 E'
H' : Type w'
inst✝ : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E' H'
src✝ : LocalEquiv (H × H') (E × E') := LocalEquiv.prod I.toLocalEquiv I'.toLocalEquiv
⊢ { toFun := fun x => (↑I x.fst, ↑I' x.snd),
        invFun := fun x => (↑(ModelWithCorners.symm I) x.fst, ↑(ModelWithCorners.symm I') x.snd),
        source := {x | x.fst ∈ I.source ∧ x.snd ∈ I'.source}, target := src✝.target,
        map_source' := (_ : ∀ ⦃x : H × H'⦄, x ∈ src✝.source → ↑src✝ x ∈ src✝.target),
        map_target' := (_ : ∀ ⦃x : E × E'⦄, x ∈ src✝.target → LocalEquiv.invFun src✝ x ∈ src✝.source),
        left_inv' := (_ : ∀ ⦃x : H × H'⦄, x ∈ src✝.source → LocalEquiv.invFun src✝ (↑src✝ x) = x),
        right_inv' := (_ : ∀ ⦃x : E × E'⦄, x ∈ src✝.target → ↑src✝ (LocalEquiv.invFun src✝ x) = x) }.source =
    univ
[PROOFSTEP]
simp only [setOf_true, mfld_simps]
[GOAL]
𝕜 : Type u
inst✝⁴ : NontriviallyNormedField 𝕜
ι : Type v
inst✝³ : Fintype ι
E : ι → Type w
inst✝² : (i : ι) → NormedAddCommGroup (E i)
inst✝¹ : (i : ι) → NormedSpace 𝕜 (E i)
H : ι → Type u'
inst✝ : (i : ι) → TopologicalSpace (H i)
I : (i : ι) → ModelWithCorners 𝕜 (E i) (H i)
⊢ (LocalEquiv.pi fun i => (I i).toLocalEquiv).source = univ
[PROOFSTEP]
simp only [Set.pi_univ, mfld_simps]
[GOAL]
𝕜 : Type u_1
inst✝¹² : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : NormedSpace 𝕜 E
E' : Type u_3
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : NormedSpace 𝕜 E'
F : Type u_4
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : NormedSpace 𝕜 F
F' : Type u_5
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : NormedSpace 𝕜 F'
H : Type u_6
inst✝³ : TopologicalSpace H
H' : Type u_7
inst✝² : TopologicalSpace H'
G : Type u_8
inst✝¹ : TopologicalSpace G
G' : Type u_9
inst✝ : TopologicalSpace G'
I : ModelWithCorners 𝕜 E H
J : ModelWithCorners 𝕜 F G
⊢ 𝓘(𝕜, E × F) = ModelWithCorners.prod 𝓘(𝕜, E) 𝓘(𝕜, F)
[PROOFSTEP]
ext1
[GOAL]
case toFun
𝕜 : Type u_1
inst✝¹² : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : NormedSpace 𝕜 E
E' : Type u_3
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : NormedSpace 𝕜 E'
F : Type u_4
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : NormedSpace 𝕜 F
F' : Type u_5
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : NormedSpace 𝕜 F'
H : Type u_6
inst✝³ : TopologicalSpace H
H' : Type u_7
inst✝² : TopologicalSpace H'
G : Type u_8
inst✝¹ : TopologicalSpace G
G' : Type u_9
inst✝ : TopologicalSpace G'
I : ModelWithCorners 𝕜 E H
J : ModelWithCorners 𝕜 F G
⊢ ↑𝓘(𝕜, E × F).toLocalEquiv = ↑(ModelWithCorners.prod 𝓘(𝕜, E) 𝓘(𝕜, F)).toLocalEquiv
[PROOFSTEP]
simp
[GOAL]
case invFun
𝕜 : Type u_1
inst✝¹² : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : NormedSpace 𝕜 E
E' : Type u_3
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : NormedSpace 𝕜 E'
F : Type u_4
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : NormedSpace 𝕜 F
F' : Type u_5
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : NormedSpace 𝕜 F'
H : Type u_6
inst✝³ : TopologicalSpace H
H' : Type u_7
inst✝² : TopologicalSpace H'
G : Type u_8
inst✝¹ : TopologicalSpace G
G' : Type u_9
inst✝ : TopologicalSpace G'
I : ModelWithCorners 𝕜 E H
J : ModelWithCorners 𝕜 F G
⊢ 𝓘(𝕜, E × F).toLocalEquiv.invFun = (ModelWithCorners.prod 𝓘(𝕜, E) 𝓘(𝕜, F)).toLocalEquiv.invFun
[PROOFSTEP]
simp
[GOAL]
case source
𝕜 : Type u_1
inst✝¹² : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : NormedSpace 𝕜 E
E' : Type u_3
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : NormedSpace 𝕜 E'
F : Type u_4
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : NormedSpace 𝕜 F
F' : Type u_5
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : NormedSpace 𝕜 F'
H : Type u_6
inst✝³ : TopologicalSpace H
H' : Type u_7
inst✝² : TopologicalSpace H'
G : Type u_8
inst✝¹ : TopologicalSpace G
G' : Type u_9
inst✝ : TopologicalSpace G'
I : ModelWithCorners 𝕜 E H
J : ModelWithCorners 𝕜 F G
⊢ 𝓘(𝕜, E × F).toLocalEquiv.source = (ModelWithCorners.prod 𝓘(𝕜, E) 𝓘(𝕜, F)).toLocalEquiv.source
[PROOFSTEP]
simp
[GOAL]
case target
𝕜 : Type u_1
inst✝¹² : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : NormedSpace 𝕜 E
E' : Type u_3
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : NormedSpace 𝕜 E'
F : Type u_4
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : NormedSpace 𝕜 F
F' : Type u_5
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : NormedSpace 𝕜 F'
H : Type u_6
inst✝³ : TopologicalSpace H
H' : Type u_7
inst✝² : TopologicalSpace H'
G : Type u_8
inst✝¹ : TopologicalSpace G
G' : Type u_9
inst✝ : TopologicalSpace G'
I : ModelWithCorners 𝕜 E H
J : ModelWithCorners 𝕜 F G
⊢ 𝓘(𝕜, E × F).toLocalEquiv.target = (ModelWithCorners.prod 𝓘(𝕜, E) 𝓘(𝕜, F)).toLocalEquiv.target
[PROOFSTEP]
simp
[GOAL]
𝕜 : Type u_1
inst✝¹² : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : NormedSpace 𝕜 E
E' : Type u_3
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : NormedSpace 𝕜 E'
F : Type u_4
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : NormedSpace 𝕜 F
F' : Type u_5
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : NormedSpace 𝕜 F'
H : Type u_6
inst✝³ : TopologicalSpace H
H' : Type u_7
inst✝² : TopologicalSpace H'
G : Type u_8
inst✝¹ : TopologicalSpace G
G' : Type u_9
inst✝ : TopologicalSpace G'
I : ModelWithCorners 𝕜 E H
J : ModelWithCorners 𝕜 F G
⊢ range ↑(prod I J) = range ↑I ×ˢ range ↑J
[PROOFSTEP]
simp_rw [← ModelWithCorners.target_eq]
[GOAL]
𝕜 : Type u_1
inst✝¹² : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : NormedSpace 𝕜 E
E' : Type u_3
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : NormedSpace 𝕜 E'
F : Type u_4
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : NormedSpace 𝕜 F
F' : Type u_5
inst✝⁵ : NormedAddCommGroup F'
inst✝⁴ : NormedSpace 𝕜 F'
H : Type u_6
inst✝³ : TopologicalSpace H
H' : Type u_7
inst✝² : TopologicalSpace H'
G : Type u_8
inst✝¹ : TopologicalSpace G
G' : Type u_9
inst✝ : TopologicalSpace G'
I : ModelWithCorners 𝕜 E H
J : ModelWithCorners 𝕜 F G
⊢ (prod I J).toLocalEquiv.target = I.target ×ˢ J.target
[PROOFSTEP]
rfl
[GOAL]
𝕜 : Type u_1
inst✝² : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
⊢ range ↑𝓘(𝕜, E) = univ
[PROOFSTEP]
simp
[GOAL]
𝕜 : Type u
inst✝⁸ : NontriviallyNormedField 𝕜
E : Type v
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
H : Type w
inst✝⁵ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
inst✝⁴ : Boundaryless I
E' : Type v'
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
H' : Type w'
inst✝¹ : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E' H'
inst✝ : Boundaryless I'
⊢ Boundaryless (prod I I')
[PROOFSTEP]
constructor
[GOAL]
case range_eq_univ
𝕜 : Type u
inst✝⁸ : NontriviallyNormedField 𝕜
E : Type v
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
H : Type w
inst✝⁵ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
inst✝⁴ : Boundaryless I
E' : Type v'
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
H' : Type w'
inst✝¹ : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E' H'
inst✝ : Boundaryless I'
⊢ range ↑(prod I I') = univ
[PROOFSTEP]
dsimp [ModelWithCorners.prod, ModelProd]
[GOAL]
case range_eq_univ
𝕜 : Type u
inst✝⁸ : NontriviallyNormedField 𝕜
E : Type v
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
H : Type w
inst✝⁵ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
inst✝⁴ : Boundaryless I
E' : Type v'
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
H' : Type w'
inst✝¹ : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E' H'
inst✝ : Boundaryless I'
⊢ (range fun x => (↑I x.fst, ↑I' x.snd)) = univ
[PROOFSTEP]
rw [← prod_range_range_eq, ModelWithCorners.Boundaryless.range_eq_univ, ModelWithCorners.Boundaryless.range_eq_univ,
  univ_prod_univ]
[GOAL]
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
f g : H → H
u v : Set H
hf : (fun f s => ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I)) f u
hg : (fun f s => ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I)) g v
x✝² : IsOpen u
x✝¹ : IsOpen v
x✝ : IsOpen (u ∩ f ⁻¹' v)
⊢ (fun f s => ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
    (g ∘ f) (u ∩ f ⁻¹' v)
[PROOFSTEP]
have : I ∘ (g ∘ f) ∘ I.symm = (I ∘ g ∘ I.symm) ∘ I ∘ f ∘ I.symm := by ext x; simp
[GOAL]
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
f g : H → H
u v : Set H
hf : (fun f s => ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I)) f u
hg : (fun f s => ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I)) g v
x✝² : IsOpen u
x✝¹ : IsOpen v
x✝ : IsOpen (u ∩ f ⁻¹' v)
⊢ ↑I ∘ (g ∘ f) ∘ ↑(ModelWithCorners.symm I) =
    (↑I ∘ g ∘ ↑(ModelWithCorners.symm I)) ∘ ↑I ∘ f ∘ ↑(ModelWithCorners.symm I)
[PROOFSTEP]
ext x
[GOAL]
case h
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
f g : H → H
u v : Set H
hf : (fun f s => ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I)) f u
hg : (fun f s => ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I)) g v
x✝² : IsOpen u
x✝¹ : IsOpen v
x✝ : IsOpen (u ∩ f ⁻¹' v)
x : E
⊢ (↑I ∘ (g ∘ f) ∘ ↑(ModelWithCorners.symm I)) x =
    ((↑I ∘ g ∘ ↑(ModelWithCorners.symm I)) ∘ ↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) x
[PROOFSTEP]
simp
[GOAL]
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
f g : H → H
u v : Set H
hf : (fun f s => ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I)) f u
hg : (fun f s => ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I)) g v
x✝² : IsOpen u
x✝¹ : IsOpen v
x✝ : IsOpen (u ∩ f ⁻¹' v)
this :
  ↑I ∘ (g ∘ f) ∘ ↑(ModelWithCorners.symm I) =
    (↑I ∘ g ∘ ↑(ModelWithCorners.symm I)) ∘ ↑I ∘ f ∘ ↑(ModelWithCorners.symm I)
⊢ (fun f s => ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
    (g ∘ f) (u ∩ f ⁻¹' v)
[PROOFSTEP]
simp only [this]
[GOAL]
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
f g : H → H
u v : Set H
hf : (fun f s => ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I)) f u
hg : (fun f s => ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I)) g v
x✝² : IsOpen u
x✝¹ : IsOpen v
x✝ : IsOpen (u ∩ f ⁻¹' v)
this :
  ↑I ∘ (g ∘ f) ∘ ↑(ModelWithCorners.symm I) =
    (↑I ∘ g ∘ ↑(ModelWithCorners.symm I)) ∘ ↑I ∘ f ∘ ↑(ModelWithCorners.symm I)
⊢ ContDiffOn 𝕜 n ((↑I ∘ g ∘ ↑(ModelWithCorners.symm I)) ∘ ↑I ∘ f ∘ ↑(ModelWithCorners.symm I))
    (↑(ModelWithCorners.symm I) ⁻¹' (u ∩ f ⁻¹' v) ∩ range ↑I)
[PROOFSTEP]
refine hg.comp (hf.mono ?_) ?_
[GOAL]
case refine_1
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
f g : H → H
u v : Set H
hf : (fun f s => ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I)) f u
hg : (fun f s => ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I)) g v
x✝² : IsOpen u
x✝¹ : IsOpen v
x✝ : IsOpen (u ∩ f ⁻¹' v)
this :
  ↑I ∘ (g ∘ f) ∘ ↑(ModelWithCorners.symm I) =
    (↑I ∘ g ∘ ↑(ModelWithCorners.symm I)) ∘ ↑I ∘ f ∘ ↑(ModelWithCorners.symm I)
⊢ ↑(ModelWithCorners.symm I) ⁻¹' (u ∩ f ⁻¹' v) ∩ range ↑I ⊆ ↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I
[PROOFSTEP]
rintro x ⟨hx1, hx2⟩
[GOAL]
case refine_1.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
f g : H → H
u v : Set H
hf : (fun f s => ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I)) f u
hg : (fun f s => ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I)) g v
x✝² : IsOpen u
x✝¹ : IsOpen v
x✝ : IsOpen (u ∩ f ⁻¹' v)
this :
  ↑I ∘ (g ∘ f) ∘ ↑(ModelWithCorners.symm I) =
    (↑I ∘ g ∘ ↑(ModelWithCorners.symm I)) ∘ ↑I ∘ f ∘ ↑(ModelWithCorners.symm I)
x : E
hx1 : x ∈ ↑(ModelWithCorners.symm I) ⁻¹' (u ∩ f ⁻¹' v)
hx2 : x ∈ range ↑I
⊢ x ∈ ↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I
[PROOFSTEP]
exact ⟨hx1.1, hx2⟩
[GOAL]
case refine_2
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
f g : H → H
u v : Set H
hf : (fun f s => ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I)) f u
hg : (fun f s => ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I)) g v
x✝² : IsOpen u
x✝¹ : IsOpen v
x✝ : IsOpen (u ∩ f ⁻¹' v)
this :
  ↑I ∘ (g ∘ f) ∘ ↑(ModelWithCorners.symm I) =
    (↑I ∘ g ∘ ↑(ModelWithCorners.symm I)) ∘ ↑I ∘ f ∘ ↑(ModelWithCorners.symm I)
⊢ ↑(ModelWithCorners.symm I) ⁻¹' (u ∩ f ⁻¹' v) ∩ range ↑I ⊆
    ↑I ∘ f ∘ ↑(ModelWithCorners.symm I) ⁻¹' (↑(ModelWithCorners.symm I) ⁻¹' v ∩ range ↑I)
[PROOFSTEP]
rintro x ⟨hx1, _⟩
[GOAL]
case refine_2.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
f g : H → H
u v : Set H
hf : (fun f s => ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I)) f u
hg : (fun f s => ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I)) g v
x✝² : IsOpen u
x✝¹ : IsOpen v
x✝ : IsOpen (u ∩ f ⁻¹' v)
this :
  ↑I ∘ (g ∘ f) ∘ ↑(ModelWithCorners.symm I) =
    (↑I ∘ g ∘ ↑(ModelWithCorners.symm I)) ∘ ↑I ∘ f ∘ ↑(ModelWithCorners.symm I)
x : E
hx1 : x ∈ ↑(ModelWithCorners.symm I) ⁻¹' (u ∩ f ⁻¹' v)
right✝ : x ∈ range ↑I
⊢ x ∈ ↑I ∘ f ∘ ↑(ModelWithCorners.symm I) ⁻¹' (↑(ModelWithCorners.symm I) ⁻¹' v ∩ range ↑I)
[PROOFSTEP]
simp only [mfld_simps] at hx1 ⊢
[GOAL]
case refine_2.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
f g : H → H
u v : Set H
hf : (fun f s => ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I)) f u
hg : (fun f s => ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I)) g v
x✝² : IsOpen u
x✝¹ : IsOpen v
x✝ : IsOpen (u ∩ f ⁻¹' v)
this :
  ↑I ∘ (g ∘ f) ∘ ↑(ModelWithCorners.symm I) =
    (↑I ∘ g ∘ ↑(ModelWithCorners.symm I)) ∘ ↑I ∘ f ∘ ↑(ModelWithCorners.symm I)
x : E
right✝ : x ∈ range ↑I
hx1 : ↑(ModelWithCorners.symm I) x ∈ u ∧ f (↑(ModelWithCorners.symm I) x) ∈ v
⊢ f (↑(ModelWithCorners.symm I) x) ∈ v
[PROOFSTEP]
exact hx1.2
[GOAL]
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
⊢ (fun f s => ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I)) id
    univ
[PROOFSTEP]
apply ContDiffOn.congr contDiff_id.contDiffOn
[GOAL]
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
⊢ ∀ (x : E), x ∈ ↑(ModelWithCorners.symm I) ⁻¹' univ ∩ range ↑I → (↑I ∘ id ∘ ↑(ModelWithCorners.symm I)) x = id x
[PROOFSTEP]
rintro x ⟨_, hx2⟩
[GOAL]
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
x : E
left✝ : x ∈ ↑(ModelWithCorners.symm I) ⁻¹' univ
hx2 : x ∈ range ↑I
⊢ (↑I ∘ id ∘ ↑(ModelWithCorners.symm I)) x = id x
[PROOFSTEP]
rcases mem_range.1 hx2 with ⟨y, hy⟩
[GOAL]
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
x : E
left✝ : x ∈ ↑(ModelWithCorners.symm I) ⁻¹' univ
hx2 : x ∈ range ↑I
y : H
hy : ↑I y = x
⊢ (↑I ∘ id ∘ ↑(ModelWithCorners.symm I)) x = id x
[PROOFSTEP]
rw [← hy]
[GOAL]
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
x : E
left✝ : x ∈ ↑(ModelWithCorners.symm I) ⁻¹' univ
hx2 : x ∈ range ↑I
y : H
hy : ↑I y = x
⊢ (↑I ∘ id ∘ ↑(ModelWithCorners.symm I)) (↑I y) = id (↑I y)
[PROOFSTEP]
simp only [mfld_simps]
[GOAL]
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
f : H✝ → H✝
u : Set H✝
x✝ : IsOpen u
H :
  ∀ (x : H✝),
    x ∈ u →
      ∃ v,
        IsOpen v ∧
          x ∈ v ∧
            (fun f s =>
                ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
              f (u ∩ v)
⊢ (fun f s => ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I)) f u
[PROOFSTEP]
apply contDiffOn_of_locally_contDiffOn
[GOAL]
case h
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
f : H✝ → H✝
u : Set H✝
x✝ : IsOpen u
H :
  ∀ (x : H✝),
    x ∈ u →
      ∃ v,
        IsOpen v ∧
          x ∈ v ∧
            (fun f s =>
                ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
              f (u ∩ v)
⊢ ∀ (x : E),
    x ∈ ↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I →
      ∃ u_1,
        IsOpen u_1 ∧
          x ∈ u_1 ∧
            ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I ∩ u_1)
[PROOFSTEP]
rintro y ⟨hy1, hy2⟩
[GOAL]
case h.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
f : H✝ → H✝
u : Set H✝
x✝ : IsOpen u
H :
  ∀ (x : H✝),
    x ∈ u →
      ∃ v,
        IsOpen v ∧
          x ∈ v ∧
            (fun f s =>
                ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
              f (u ∩ v)
y : E
hy1 : y ∈ ↑(ModelWithCorners.symm I) ⁻¹' u
hy2 : y ∈ range ↑I
⊢ ∃ u_1,
    IsOpen u_1 ∧
      y ∈ u_1 ∧ ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I ∩ u_1)
[PROOFSTEP]
rcases mem_range.1 hy2 with ⟨x, hx⟩
[GOAL]
case h.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
f : H✝ → H✝
u : Set H✝
x✝ : IsOpen u
H :
  ∀ (x : H✝),
    x ∈ u →
      ∃ v,
        IsOpen v ∧
          x ∈ v ∧
            (fun f s =>
                ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
              f (u ∩ v)
y : E
hy1 : y ∈ ↑(ModelWithCorners.symm I) ⁻¹' u
hy2 : y ∈ range ↑I
x : H✝
hx : ↑I x = y
⊢ ∃ u_1,
    IsOpen u_1 ∧
      y ∈ u_1 ∧ ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I ∩ u_1)
[PROOFSTEP]
rw [← hx] at hy1 ⊢
[GOAL]
case h.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
f : H✝ → H✝
u : Set H✝
x✝ : IsOpen u
H :
  ∀ (x : H✝),
    x ∈ u →
      ∃ v,
        IsOpen v ∧
          x ∈ v ∧
            (fun f s =>
                ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
              f (u ∩ v)
y : E
hy2 : y ∈ range ↑I
x : H✝
hy1 : ↑I x ∈ ↑(ModelWithCorners.symm I) ⁻¹' u
hx : ↑I x = y
⊢ ∃ u_1,
    IsOpen u_1 ∧
      ↑I x ∈ u_1 ∧
        ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I ∩ u_1)
[PROOFSTEP]
simp only [mfld_simps] at hy1 ⊢
[GOAL]
case h.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
f : H✝ → H✝
u : Set H✝
x✝ : IsOpen u
H :
  ∀ (x : H✝),
    x ∈ u →
      ∃ v,
        IsOpen v ∧
          x ∈ v ∧
            (fun f s =>
                ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
              f (u ∩ v)
y : E
hy2 : y ∈ range ↑I
x : H✝
hx : ↑I x = y
hy1 : x ∈ u
⊢ ∃ u_1,
    IsOpen u_1 ∧
      ↑I x ∈ u_1 ∧
        ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I ∩ u_1)
[PROOFSTEP]
rcases H x hy1 with ⟨v, v_open, xv, hv⟩
[GOAL]
case h.intro.intro.intro.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
f : H✝ → H✝
u : Set H✝
x✝ : IsOpen u
H :
  ∀ (x : H✝),
    x ∈ u →
      ∃ v,
        IsOpen v ∧
          x ∈ v ∧
            (fun f s =>
                ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
              f (u ∩ v)
y : E
hy2 : y ∈ range ↑I
x : H✝
hx : ↑I x = y
hy1 : x ∈ u
v : Set H✝
v_open : IsOpen v
xv : x ∈ v
hv : ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' (u ∩ v) ∩ range ↑I)
⊢ ∃ u_1,
    IsOpen u_1 ∧
      ↑I x ∈ u_1 ∧
        ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I ∩ u_1)
[PROOFSTEP]
have : I.symm ⁻¹' (u ∩ v) ∩ range I = I.symm ⁻¹' u ∩ range I ∩ I.symm ⁻¹' v :=
  by
  rw [preimage_inter, inter_assoc, inter_assoc]
  congr 1
  rw [inter_comm]
[GOAL]
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
f : H✝ → H✝
u : Set H✝
x✝ : IsOpen u
H :
  ∀ (x : H✝),
    x ∈ u →
      ∃ v,
        IsOpen v ∧
          x ∈ v ∧
            (fun f s =>
                ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
              f (u ∩ v)
y : E
hy2 : y ∈ range ↑I
x : H✝
hx : ↑I x = y
hy1 : x ∈ u
v : Set H✝
v_open : IsOpen v
xv : x ∈ v
hv : ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' (u ∩ v) ∩ range ↑I)
⊢ ↑(ModelWithCorners.symm I) ⁻¹' (u ∩ v) ∩ range ↑I =
    ↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I ∩ ↑(ModelWithCorners.symm I) ⁻¹' v
[PROOFSTEP]
rw [preimage_inter, inter_assoc, inter_assoc]
[GOAL]
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
f : H✝ → H✝
u : Set H✝
x✝ : IsOpen u
H :
  ∀ (x : H✝),
    x ∈ u →
      ∃ v,
        IsOpen v ∧
          x ∈ v ∧
            (fun f s =>
                ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
              f (u ∩ v)
y : E
hy2 : y ∈ range ↑I
x : H✝
hx : ↑I x = y
hy1 : x ∈ u
v : Set H✝
v_open : IsOpen v
xv : x ∈ v
hv : ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' (u ∩ v) ∩ range ↑I)
⊢ ↑(ModelWithCorners.symm I) ⁻¹' u ∩ (↑(ModelWithCorners.symm I) ⁻¹' v ∩ range ↑I) =
    ↑(ModelWithCorners.symm I) ⁻¹' u ∩ (range ↑I ∩ ↑(ModelWithCorners.symm I) ⁻¹' v)
[PROOFSTEP]
congr 1
[GOAL]
case e_a
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
f : H✝ → H✝
u : Set H✝
x✝ : IsOpen u
H :
  ∀ (x : H✝),
    x ∈ u →
      ∃ v,
        IsOpen v ∧
          x ∈ v ∧
            (fun f s =>
                ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
              f (u ∩ v)
y : E
hy2 : y ∈ range ↑I
x : H✝
hx : ↑I x = y
hy1 : x ∈ u
v : Set H✝
v_open : IsOpen v
xv : x ∈ v
hv : ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' (u ∩ v) ∩ range ↑I)
⊢ ↑(ModelWithCorners.symm I) ⁻¹' v ∩ range ↑I = range ↑I ∩ ↑(ModelWithCorners.symm I) ⁻¹' v
[PROOFSTEP]
rw [inter_comm]
[GOAL]
case h.intro.intro.intro.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
f : H✝ → H✝
u : Set H✝
x✝ : IsOpen u
H :
  ∀ (x : H✝),
    x ∈ u →
      ∃ v,
        IsOpen v ∧
          x ∈ v ∧
            (fun f s =>
                ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
              f (u ∩ v)
y : E
hy2 : y ∈ range ↑I
x : H✝
hx : ↑I x = y
hy1 : x ∈ u
v : Set H✝
v_open : IsOpen v
xv : x ∈ v
hv : ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' (u ∩ v) ∩ range ↑I)
this :
  ↑(ModelWithCorners.symm I) ⁻¹' (u ∩ v) ∩ range ↑I =
    ↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I ∩ ↑(ModelWithCorners.symm I) ⁻¹' v
⊢ ∃ u_1,
    IsOpen u_1 ∧
      ↑I x ∈ u_1 ∧
        ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I ∩ u_1)
[PROOFSTEP]
rw [this] at hv 
[GOAL]
case h.intro.intro.intro.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
f : H✝ → H✝
u : Set H✝
x✝ : IsOpen u
H :
  ∀ (x : H✝),
    x ∈ u →
      ∃ v,
        IsOpen v ∧
          x ∈ v ∧
            (fun f s =>
                ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
              f (u ∩ v)
y : E
hy2 : y ∈ range ↑I
x : H✝
hx : ↑I x = y
hy1 : x ∈ u
v : Set H✝
v_open : IsOpen v
xv : x ∈ v
hv :
  ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I))
    (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I ∩ ↑(ModelWithCorners.symm I) ⁻¹' v)
this :
  ↑(ModelWithCorners.symm I) ⁻¹' (u ∩ v) ∩ range ↑I =
    ↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I ∩ ↑(ModelWithCorners.symm I) ⁻¹' v
⊢ ∃ u_1,
    IsOpen u_1 ∧
      ↑I x ∈ u_1 ∧
        ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I ∩ u_1)
[PROOFSTEP]
exact ⟨I.symm ⁻¹' v, v_open.preimage I.continuous_symm, by simpa, hv⟩
[GOAL]
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
f : H✝ → H✝
u : Set H✝
x✝ : IsOpen u
H :
  ∀ (x : H✝),
    x ∈ u →
      ∃ v,
        IsOpen v ∧
          x ∈ v ∧
            (fun f s =>
                ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
              f (u ∩ v)
y : E
hy2 : y ∈ range ↑I
x : H✝
hx : ↑I x = y
hy1 : x ∈ u
v : Set H✝
v_open : IsOpen v
xv : x ∈ v
hv :
  ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I))
    (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I ∩ ↑(ModelWithCorners.symm I) ⁻¹' v)
this :
  ↑(ModelWithCorners.symm I) ⁻¹' (u ∩ v) ∩ range ↑I =
    ↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I ∩ ↑(ModelWithCorners.symm I) ⁻¹' v
⊢ ↑I x ∈ ↑(ModelWithCorners.symm I) ⁻¹' v
[PROOFSTEP]
simpa
[GOAL]
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
f g : H → H
u : Set H
x✝ : IsOpen u
fg : ∀ (x : H), x ∈ u → g x = f x
hf : (fun f s => ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I)) f u
⊢ (fun f s => ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I)) g u
[PROOFSTEP]
apply hf.congr
[GOAL]
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
f g : H → H
u : Set H
x✝ : IsOpen u
fg : ∀ (x : H), x ∈ u → g x = f x
hf : (fun f s => ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I)) f u
⊢ ∀ (x : E),
    x ∈ ↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I →
      (↑I ∘ g ∘ ↑(ModelWithCorners.symm I)) x = (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) x
[PROOFSTEP]
rintro y ⟨hy1, hy2⟩
[GOAL]
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
f g : H → H
u : Set H
x✝ : IsOpen u
fg : ∀ (x : H), x ∈ u → g x = f x
hf : (fun f s => ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I)) f u
y : E
hy1 : y ∈ ↑(ModelWithCorners.symm I) ⁻¹' u
hy2 : y ∈ range ↑I
⊢ (↑I ∘ g ∘ ↑(ModelWithCorners.symm I)) y = (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) y
[PROOFSTEP]
rcases mem_range.1 hy2 with ⟨x, hx⟩
[GOAL]
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
f g : H → H
u : Set H
x✝ : IsOpen u
fg : ∀ (x : H), x ∈ u → g x = f x
hf : (fun f s => ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I)) f u
y : E
hy1 : y ∈ ↑(ModelWithCorners.symm I) ⁻¹' u
hy2 : y ∈ range ↑I
x : H
hx : ↑I x = y
⊢ (↑I ∘ g ∘ ↑(ModelWithCorners.symm I)) y = (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) y
[PROOFSTEP]
rw [← hx] at hy1 ⊢
[GOAL]
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
f g : H → H
u : Set H
x✝ : IsOpen u
fg : ∀ (x : H), x ∈ u → g x = f x
hf : (fun f s => ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I)) f u
y : E
hy2 : y ∈ range ↑I
x : H
hy1 : ↑I x ∈ ↑(ModelWithCorners.symm I) ⁻¹' u
hx : ↑I x = y
⊢ (↑I ∘ g ∘ ↑(ModelWithCorners.symm I)) (↑I x) = (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑I x)
[PROOFSTEP]
simp only [mfld_simps] at hy1 ⊢
[GOAL]
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
f g : H → H
u : Set H
x✝ : IsOpen u
fg : ∀ (x : H), x ∈ u → g x = f x
hf : (fun f s => ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I)) f u
y : E
hy2 : y ∈ range ↑I
x : H
hx : ↑I x = y
hy1 : x ∈ u
⊢ ↑I (g x) = ↑I (f x)
[PROOFSTEP]
rw [fg _ hy1]
[GOAL]
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
h : m ≤ n
⊢ contDiffGroupoid n I ≤ contDiffGroupoid m I
[PROOFSTEP]
rw [contDiffGroupoid, contDiffGroupoid]
[GOAL]
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
h : m ≤ n
⊢ Pregroupoid.groupoid
      {
        property := fun f s =>
          ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I),
        comp :=
          (_ :
            ∀ {f g : H → H} {u v : Set H},
              ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I) →
                ContDiffOn 𝕜 n (↑I ∘ g ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' v ∩ range ↑I) →
                  IsOpen u →
                    IsOpen v →
                      IsOpen (u ∩ f ⁻¹' v) →
                        (fun f s =>
                            ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I))
                              (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
                          (g ∘ f) (u ∩ f ⁻¹' v)),
        id_mem :=
          (_ : ContDiffOn 𝕜 n (↑I ∘ id ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' univ ∩ range ↑I)),
        locality :=
          (_ :
            ∀ {f : H → H} {u : Set H},
              IsOpen u →
                (∀ (x : H),
                    x ∈ u →
                      ∃ v,
                        IsOpen v ∧
                          x ∈ v ∧
                            (fun f s =>
                                ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I))
                                  (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
                              f (u ∩ v)) →
                  ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I)),
        congr :=
          (_ :
            ∀ {f g : H → H} {u : Set H},
              IsOpen u →
                (∀ (x : H), x ∈ u → g x = f x) →
                  ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I) →
                    ContDiffOn 𝕜 n (↑I ∘ g ∘ ↑(ModelWithCorners.symm I))
                      (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I)) } ≤
    Pregroupoid.groupoid
      {
        property := fun f s =>
          ContDiffOn 𝕜 m (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I),
        comp :=
          (_ :
            ∀ {f g : H → H} {u v : Set H},
              ContDiffOn 𝕜 m (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I) →
                ContDiffOn 𝕜 m (↑I ∘ g ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' v ∩ range ↑I) →
                  IsOpen u →
                    IsOpen v →
                      IsOpen (u ∩ f ⁻¹' v) →
                        (fun f s =>
                            ContDiffOn 𝕜 m (↑I ∘ f ∘ ↑(ModelWithCorners.symm I))
                              (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
                          (g ∘ f) (u ∩ f ⁻¹' v)),
        id_mem :=
          (_ : ContDiffOn 𝕜 m (↑I ∘ id ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' univ ∩ range ↑I)),
        locality :=
          (_ :
            ∀ {f : H → H} {u : Set H},
              IsOpen u →
                (∀ (x : H),
                    x ∈ u →
                      ∃ v,
                        IsOpen v ∧
                          x ∈ v ∧
                            (fun f s =>
                                ContDiffOn 𝕜 m (↑I ∘ f ∘ ↑(ModelWithCorners.symm I))
                                  (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
                              f (u ∩ v)) →
                  ContDiffOn 𝕜 m (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I)),
        congr :=
          (_ :
            ∀ {f g : H → H} {u : Set H},
              IsOpen u →
                (∀ (x : H), x ∈ u → g x = f x) →
                  ContDiffOn 𝕜 m (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I) →
                    ContDiffOn 𝕜 m (↑I ∘ g ∘ ↑(ModelWithCorners.symm I))
                      (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I)) }
[PROOFSTEP]
apply groupoid_of_pregroupoid_le
[GOAL]
case h
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
h : m ≤ n
⊢ ∀ (f : H → H) (s : Set H),
    Pregroupoid.property
        {
          property := fun f s =>
            ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I),
          comp :=
            (_ :
              ∀ {f g : H → H} {u v : Set H},
                ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I) →
                  ContDiffOn 𝕜 n (↑I ∘ g ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' v ∩ range ↑I) →
                    IsOpen u →
                      IsOpen v →
                        IsOpen (u ∩ f ⁻¹' v) →
                          (fun f s =>
                              ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I))
                                (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
                            (g ∘ f) (u ∩ f ⁻¹' v)),
          id_mem :=
            (_ :
              ContDiffOn 𝕜 n (↑I ∘ id ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' univ ∩ range ↑I)),
          locality :=
            (_ :
              ∀ {f : H → H} {u : Set H},
                IsOpen u →
                  (∀ (x : H),
                      x ∈ u →
                        ∃ v,
                          IsOpen v ∧
                            x ∈ v ∧
                              (fun f s =>
                                  ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I))
                                    (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
                                f (u ∩ v)) →
                    ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I)),
          congr :=
            (_ :
              ∀ {f g : H → H} {u : Set H},
                IsOpen u →
                  (∀ (x : H), x ∈ u → g x = f x) →
                    ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I) →
                      ContDiffOn 𝕜 n (↑I ∘ g ∘ ↑(ModelWithCorners.symm I))
                        (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I)) }
        f s →
      Pregroupoid.property
        {
          property := fun f s =>
            ContDiffOn 𝕜 m (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I),
          comp :=
            (_ :
              ∀ {f g : H → H} {u v : Set H},
                ContDiffOn 𝕜 m (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I) →
                  ContDiffOn 𝕜 m (↑I ∘ g ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' v ∩ range ↑I) →
                    IsOpen u →
                      IsOpen v →
                        IsOpen (u ∩ f ⁻¹' v) →
                          (fun f s =>
                              ContDiffOn 𝕜 m (↑I ∘ f ∘ ↑(ModelWithCorners.symm I))
                                (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
                            (g ∘ f) (u ∩ f ⁻¹' v)),
          id_mem :=
            (_ :
              ContDiffOn 𝕜 m (↑I ∘ id ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' univ ∩ range ↑I)),
          locality :=
            (_ :
              ∀ {f : H → H} {u : Set H},
                IsOpen u →
                  (∀ (x : H),
                      x ∈ u →
                        ∃ v,
                          IsOpen v ∧
                            x ∈ v ∧
                              (fun f s =>
                                  ContDiffOn 𝕜 m (↑I ∘ f ∘ ↑(ModelWithCorners.symm I))
                                    (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
                                f (u ∩ v)) →
                    ContDiffOn 𝕜 m (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I)),
          congr :=
            (_ :
              ∀ {f g : H → H} {u : Set H},
                IsOpen u →
                  (∀ (x : H), x ∈ u → g x = f x) →
                    ContDiffOn 𝕜 m (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I) →
                      ContDiffOn 𝕜 m (↑I ∘ g ∘ ↑(ModelWithCorners.symm I))
                        (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I)) }
        f s
[PROOFSTEP]
intro f s hfs
[GOAL]
case h
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
h : m ≤ n
f : H → H
s : Set H
hfs :
  Pregroupoid.property
    {
      property := fun f s =>
        ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I),
      comp :=
        (_ :
          ∀ {f g : H → H} {u v : Set H},
            ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I) →
              ContDiffOn 𝕜 n (↑I ∘ g ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' v ∩ range ↑I) →
                IsOpen u →
                  IsOpen v →
                    IsOpen (u ∩ f ⁻¹' v) →
                      (fun f s =>
                          ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I))
                            (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
                        (g ∘ f) (u ∩ f ⁻¹' v)),
      id_mem :=
        (_ : ContDiffOn 𝕜 n (↑I ∘ id ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' univ ∩ range ↑I)),
      locality :=
        (_ :
          ∀ {f : H → H} {u : Set H},
            IsOpen u →
              (∀ (x : H),
                  x ∈ u →
                    ∃ v,
                      IsOpen v ∧
                        x ∈ v ∧
                          (fun f s =>
                              ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I))
                                (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
                            f (u ∩ v)) →
                ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I)),
      congr :=
        (_ :
          ∀ {f g : H → H} {u : Set H},
            IsOpen u →
              (∀ (x : H), x ∈ u → g x = f x) →
                ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I) →
                  ContDiffOn 𝕜 n (↑I ∘ g ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I)) }
    f s
⊢ Pregroupoid.property
    {
      property := fun f s =>
        ContDiffOn 𝕜 m (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I),
      comp :=
        (_ :
          ∀ {f g : H → H} {u v : Set H},
            ContDiffOn 𝕜 m (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I) →
              ContDiffOn 𝕜 m (↑I ∘ g ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' v ∩ range ↑I) →
                IsOpen u →
                  IsOpen v →
                    IsOpen (u ∩ f ⁻¹' v) →
                      (fun f s =>
                          ContDiffOn 𝕜 m (↑I ∘ f ∘ ↑(ModelWithCorners.symm I))
                            (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
                        (g ∘ f) (u ∩ f ⁻¹' v)),
      id_mem :=
        (_ : ContDiffOn 𝕜 m (↑I ∘ id ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' univ ∩ range ↑I)),
      locality :=
        (_ :
          ∀ {f : H → H} {u : Set H},
            IsOpen u →
              (∀ (x : H),
                  x ∈ u →
                    ∃ v,
                      IsOpen v ∧
                        x ∈ v ∧
                          (fun f s =>
                              ContDiffOn 𝕜 m (↑I ∘ f ∘ ↑(ModelWithCorners.symm I))
                                (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
                            f (u ∩ v)) →
                ContDiffOn 𝕜 m (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I)),
      congr :=
        (_ :
          ∀ {f g : H → H} {u : Set H},
            IsOpen u →
              (∀ (x : H), x ∈ u → g x = f x) →
                ContDiffOn 𝕜 m (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I) →
                  ContDiffOn 𝕜 m (↑I ∘ g ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I)) }
    f s
[PROOFSTEP]
exact ContDiffOn.of_le hfs h
[GOAL]
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
⊢ contDiffGroupoid 0 I = continuousGroupoid H
[PROOFSTEP]
apply le_antisymm le_top
[GOAL]
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
⊢ ⊤ ≤ contDiffGroupoid 0 I
[PROOFSTEP]
intro u
  _
    -- we have to check that every local homeomorphism belongs to `contDiffGroupoid 0 I`,
      -- by unfolding its definition
[GOAL]
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
u : LocalHomeomorph H H
a✝ : u ∈ ⊤.members
⊢ u ∈ (contDiffGroupoid 0 I).members
[PROOFSTEP]
change u ∈ contDiffGroupoid 0 I
[GOAL]
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
u : LocalHomeomorph H H
a✝ : u ∈ ⊤.members
⊢ u ∈ contDiffGroupoid 0 I
[PROOFSTEP]
rw [contDiffGroupoid, mem_groupoid_of_pregroupoid]
[GOAL]
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
u : LocalHomeomorph H H
a✝ : u ∈ ⊤.members
⊢ Pregroupoid.property
      {
        property := fun f s =>
          ContDiffOn 𝕜 0 (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I),
        comp :=
          (_ :
            ∀ {f g : H → H} {u v : Set H},
              ContDiffOn 𝕜 0 (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I) →
                ContDiffOn 𝕜 0 (↑I ∘ g ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' v ∩ range ↑I) →
                  IsOpen u →
                    IsOpen v →
                      IsOpen (u ∩ f ⁻¹' v) →
                        (fun f s =>
                            ContDiffOn 𝕜 0 (↑I ∘ f ∘ ↑(ModelWithCorners.symm I))
                              (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
                          (g ∘ f) (u ∩ f ⁻¹' v)),
        id_mem :=
          (_ : ContDiffOn 𝕜 0 (↑I ∘ id ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' univ ∩ range ↑I)),
        locality :=
          (_ :
            ∀ {f : H → H} {u : Set H},
              IsOpen u →
                (∀ (x : H),
                    x ∈ u →
                      ∃ v,
                        IsOpen v ∧
                          x ∈ v ∧
                            (fun f s =>
                                ContDiffOn 𝕜 0 (↑I ∘ f ∘ ↑(ModelWithCorners.symm I))
                                  (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
                              f (u ∩ v)) →
                  ContDiffOn 𝕜 0 (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I)),
        congr :=
          (_ :
            ∀ {f g : H → H} {u : Set H},
              IsOpen u →
                (∀ (x : H), x ∈ u → g x = f x) →
                  ContDiffOn 𝕜 0 (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I) →
                    ContDiffOn 𝕜 0 (↑I ∘ g ∘ ↑(ModelWithCorners.symm I))
                      (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I)) }
      (↑u) u.source ∧
    Pregroupoid.property
      {
        property := fun f s =>
          ContDiffOn 𝕜 0 (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I),
        comp :=
          (_ :
            ∀ {f g : H → H} {u v : Set H},
              ContDiffOn 𝕜 0 (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I) →
                ContDiffOn 𝕜 0 (↑I ∘ g ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' v ∩ range ↑I) →
                  IsOpen u →
                    IsOpen v →
                      IsOpen (u ∩ f ⁻¹' v) →
                        (fun f s =>
                            ContDiffOn 𝕜 0 (↑I ∘ f ∘ ↑(ModelWithCorners.symm I))
                              (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
                          (g ∘ f) (u ∩ f ⁻¹' v)),
        id_mem :=
          (_ : ContDiffOn 𝕜 0 (↑I ∘ id ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' univ ∩ range ↑I)),
        locality :=
          (_ :
            ∀ {f : H → H} {u : Set H},
              IsOpen u →
                (∀ (x : H),
                    x ∈ u →
                      ∃ v,
                        IsOpen v ∧
                          x ∈ v ∧
                            (fun f s =>
                                ContDiffOn 𝕜 0 (↑I ∘ f ∘ ↑(ModelWithCorners.symm I))
                                  (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
                              f (u ∩ v)) →
                  ContDiffOn 𝕜 0 (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I)),
        congr :=
          (_ :
            ∀ {f g : H → H} {u : Set H},
              IsOpen u →
                (∀ (x : H), x ∈ u → g x = f x) →
                  ContDiffOn 𝕜 0 (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I) →
                    ContDiffOn 𝕜 0 (↑I ∘ g ∘ ↑(ModelWithCorners.symm I))
                      (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I)) }
      (↑(LocalHomeomorph.symm u)) u.target
[PROOFSTEP]
simp only [contDiffOn_zero]
[GOAL]
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
u : LocalHomeomorph H H
a✝ : u ∈ ⊤.members
⊢ ContinuousOn (↑I ∘ ↑u ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u.source ∩ range ↑I) ∧
    ContinuousOn (↑I ∘ ↑(LocalHomeomorph.symm u) ∘ ↑(ModelWithCorners.symm I))
      (↑(ModelWithCorners.symm I) ⁻¹' u.target ∩ range ↑I)
[PROOFSTEP]
constructor
[GOAL]
case 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
u : LocalHomeomorph H H
a✝ : u ∈ ⊤.members
⊢ ContinuousOn (↑I ∘ ↑u ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u.source ∩ range ↑I)
[PROOFSTEP]
refine' I.continuous.comp_continuousOn (u.continuousOn.comp I.continuousOn_symm _)
[GOAL]
case 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
u : LocalHomeomorph H H
a✝ : u ∈ ⊤.members
⊢ MapsTo (↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u.source ∩ range ↑I) u.source
[PROOFSTEP]
exact (mapsTo_preimage _ _).mono_left (inter_subset_left _ _)
[GOAL]
case 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
u : LocalHomeomorph H H
a✝ : u ∈ ⊤.members
⊢ ContinuousOn (↑I ∘ ↑(LocalHomeomorph.symm u) ∘ ↑(ModelWithCorners.symm I))
    (↑(ModelWithCorners.symm I) ⁻¹' u.target ∩ range ↑I)
[PROOFSTEP]
refine' I.continuous.comp_continuousOn (u.symm.continuousOn.comp I.continuousOn_symm _)
[GOAL]
case 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
u : LocalHomeomorph H H
a✝ : u ∈ ⊤.members
⊢ MapsTo (↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u.target ∩ range ↑I)
    (LocalHomeomorph.symm u).toLocalEquiv.source
[PROOFSTEP]
exact (mapsTo_preimage _ _).mono_left (inter_subset_left _ _)
[GOAL]
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
s : Set H
hs : IsOpen s
⊢ LocalHomeomorph.ofSet s hs ∈ contDiffGroupoid n I
[PROOFSTEP]
rw [contDiffGroupoid, mem_groupoid_of_pregroupoid]
[GOAL]
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
s : Set H
hs : IsOpen s
⊢ Pregroupoid.property
      {
        property := fun f s =>
          ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I),
        comp :=
          (_ :
            ∀ {f g : H → H} {u v : Set H},
              ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I) →
                ContDiffOn 𝕜 n (↑I ∘ g ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' v ∩ range ↑I) →
                  IsOpen u →
                    IsOpen v →
                      IsOpen (u ∩ f ⁻¹' v) →
                        (fun f s =>
                            ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I))
                              (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
                          (g ∘ f) (u ∩ f ⁻¹' v)),
        id_mem :=
          (_ : ContDiffOn 𝕜 n (↑I ∘ id ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' univ ∩ range ↑I)),
        locality :=
          (_ :
            ∀ {f : H → H} {u : Set H},
              IsOpen u →
                (∀ (x : H),
                    x ∈ u →
                      ∃ v,
                        IsOpen v ∧
                          x ∈ v ∧
                            (fun f s =>
                                ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I))
                                  (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
                              f (u ∩ v)) →
                  ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I)),
        congr :=
          (_ :
            ∀ {f g : H → H} {u : Set H},
              IsOpen u →
                (∀ (x : H), x ∈ u → g x = f x) →
                  ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I) →
                    ContDiffOn 𝕜 n (↑I ∘ g ∘ ↑(ModelWithCorners.symm I))
                      (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I)) }
      (↑(LocalHomeomorph.ofSet s hs)) (LocalHomeomorph.ofSet s hs).toLocalEquiv.source ∧
    Pregroupoid.property
      {
        property := fun f s =>
          ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I),
        comp :=
          (_ :
            ∀ {f g : H → H} {u v : Set H},
              ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I) →
                ContDiffOn 𝕜 n (↑I ∘ g ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' v ∩ range ↑I) →
                  IsOpen u →
                    IsOpen v →
                      IsOpen (u ∩ f ⁻¹' v) →
                        (fun f s =>
                            ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I))
                              (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
                          (g ∘ f) (u ∩ f ⁻¹' v)),
        id_mem :=
          (_ : ContDiffOn 𝕜 n (↑I ∘ id ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' univ ∩ range ↑I)),
        locality :=
          (_ :
            ∀ {f : H → H} {u : Set H},
              IsOpen u →
                (∀ (x : H),
                    x ∈ u →
                      ∃ v,
                        IsOpen v ∧
                          x ∈ v ∧
                            (fun f s =>
                                ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I))
                                  (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
                              f (u ∩ v)) →
                  ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I)),
        congr :=
          (_ :
            ∀ {f g : H → H} {u : Set H},
              IsOpen u →
                (∀ (x : H), x ∈ u → g x = f x) →
                  ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I) →
                    ContDiffOn 𝕜 n (↑I ∘ g ∘ ↑(ModelWithCorners.symm I))
                      (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I)) }
      (↑(LocalHomeomorph.symm (LocalHomeomorph.ofSet s hs))) (LocalHomeomorph.ofSet s hs).toLocalEquiv.target
[PROOFSTEP]
suffices h : ContDiffOn 𝕜 n (I ∘ I.symm) (I.symm ⁻¹' s ∩ range I)
[GOAL]
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
s : Set H
hs : IsOpen s
h : ContDiffOn 𝕜 n (↑I ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I)
⊢ Pregroupoid.property
      {
        property := fun f s =>
          ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I),
        comp :=
          (_ :
            ∀ {f g : H → H} {u v : Set H},
              ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I) →
                ContDiffOn 𝕜 n (↑I ∘ g ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' v ∩ range ↑I) →
                  IsOpen u →
                    IsOpen v →
                      IsOpen (u ∩ f ⁻¹' v) →
                        (fun f s =>
                            ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I))
                              (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
                          (g ∘ f) (u ∩ f ⁻¹' v)),
        id_mem :=
          (_ : ContDiffOn 𝕜 n (↑I ∘ id ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' univ ∩ range ↑I)),
        locality :=
          (_ :
            ∀ {f : H → H} {u : Set H},
              IsOpen u →
                (∀ (x : H),
                    x ∈ u →
                      ∃ v,
                        IsOpen v ∧
                          x ∈ v ∧
                            (fun f s =>
                                ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I))
                                  (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
                              f (u ∩ v)) →
                  ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I)),
        congr :=
          (_ :
            ∀ {f g : H → H} {u : Set H},
              IsOpen u →
                (∀ (x : H), x ∈ u → g x = f x) →
                  ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I) →
                    ContDiffOn 𝕜 n (↑I ∘ g ∘ ↑(ModelWithCorners.symm I))
                      (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I)) }
      (↑(LocalHomeomorph.ofSet s hs)) (LocalHomeomorph.ofSet s hs).toLocalEquiv.source ∧
    Pregroupoid.property
      {
        property := fun f s =>
          ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I),
        comp :=
          (_ :
            ∀ {f g : H → H} {u v : Set H},
              ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I) →
                ContDiffOn 𝕜 n (↑I ∘ g ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' v ∩ range ↑I) →
                  IsOpen u →
                    IsOpen v →
                      IsOpen (u ∩ f ⁻¹' v) →
                        (fun f s =>
                            ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I))
                              (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
                          (g ∘ f) (u ∩ f ⁻¹' v)),
        id_mem :=
          (_ : ContDiffOn 𝕜 n (↑I ∘ id ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' univ ∩ range ↑I)),
        locality :=
          (_ :
            ∀ {f : H → H} {u : Set H},
              IsOpen u →
                (∀ (x : H),
                    x ∈ u →
                      ∃ v,
                        IsOpen v ∧
                          x ∈ v ∧
                            (fun f s =>
                                ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I))
                                  (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
                              f (u ∩ v)) →
                  ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I)),
        congr :=
          (_ :
            ∀ {f g : H → H} {u : Set H},
              IsOpen u →
                (∀ (x : H), x ∈ u → g x = f x) →
                  ContDiffOn 𝕜 n (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I) →
                    ContDiffOn 𝕜 n (↑I ∘ g ∘ ↑(ModelWithCorners.symm I))
                      (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I)) }
      (↑(LocalHomeomorph.symm (LocalHomeomorph.ofSet s hs))) (LocalHomeomorph.ofSet s hs).toLocalEquiv.target
[PROOFSTEP]
simp [h]
[GOAL]
case h
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
s : Set H
hs : IsOpen s
⊢ ContDiffOn 𝕜 n (↑I ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I)
[PROOFSTEP]
have : ContDiffOn 𝕜 n id (univ : Set E) := contDiff_id.contDiffOn
[GOAL]
case h
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
s : Set H
hs : IsOpen s
this : ContDiffOn 𝕜 n id univ
⊢ ContDiffOn 𝕜 n (↑I ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I)
[PROOFSTEP]
exact this.congr_mono (fun x hx => I.right_inv hx.2) (subset_univ _)
[GOAL]
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 : LocalHomeomorph H H
e' : LocalHomeomorph H' H'
he : e ∈ contDiffGroupoid ⊤ I
he' : e' ∈ contDiffGroupoid ⊤ I'
⊢ LocalHomeomorph.prod e e' ∈ contDiffGroupoid ⊤ (ModelWithCorners.prod I I')
[PROOFSTEP]
cases' he with he he_symm
[GOAL]
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 : LocalHomeomorph H H
e' : LocalHomeomorph H' H'
he' : e' ∈ contDiffGroupoid ⊤ I'
he :
  Pregroupoid.property
    {
      property := fun f s =>
        ContDiffOn 𝕜 ⊤ (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I),
      comp :=
        (_ :
          ∀ {f g : H → H} {u v : Set H},
            ContDiffOn 𝕜 ⊤ (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I) →
              ContDiffOn 𝕜 ⊤ (↑I ∘ g ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' v ∩ range ↑I) →
                IsOpen u →
                  IsOpen v →
                    IsOpen (u ∩ f ⁻¹' v) →
                      (fun f s =>
                          ContDiffOn 𝕜 ⊤ (↑I ∘ f ∘ ↑(ModelWithCorners.symm I))
                            (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
                        (g ∘ f) (u ∩ f ⁻¹' v)),
      id_mem :=
        (_ : ContDiffOn 𝕜 ⊤ (↑I ∘ id ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' univ ∩ range ↑I)),
      locality :=
        (_ :
          ∀ {f : H → H} {u : Set H},
            IsOpen u →
              (∀ (x : H),
                  x ∈ u →
                    ∃ v,
                      IsOpen v ∧
                        x ∈ v ∧
                          (fun f s =>
                              ContDiffOn 𝕜 ⊤ (↑I ∘ f ∘ ↑(ModelWithCorners.symm I))
                                (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
                            f (u ∩ v)) →
                ContDiffOn 𝕜 ⊤ (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I)),
      congr :=
        (_ :
          ∀ {f g : H → H} {u : Set H},
            IsOpen u →
              (∀ (x : H), x ∈ u → g x = f x) →
                ContDiffOn 𝕜 ⊤ (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I) →
                  ContDiffOn 𝕜 ⊤ (↑I ∘ g ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I)) }
    (↑e) e.source
he_symm :
  Pregroupoid.property
    {
      property := fun f s =>
        ContDiffOn 𝕜 ⊤ (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I),
      comp :=
        (_ :
          ∀ {f g : H → H} {u v : Set H},
            ContDiffOn 𝕜 ⊤ (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I) →
              ContDiffOn 𝕜 ⊤ (↑I ∘ g ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' v ∩ range ↑I) →
                IsOpen u →
                  IsOpen v →
                    IsOpen (u ∩ f ⁻¹' v) →
                      (fun f s =>
                          ContDiffOn 𝕜 ⊤ (↑I ∘ f ∘ ↑(ModelWithCorners.symm I))
                            (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
                        (g ∘ f) (u ∩ f ⁻¹' v)),
      id_mem :=
        (_ : ContDiffOn 𝕜 ⊤ (↑I ∘ id ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' univ ∩ range ↑I)),
      locality :=
        (_ :
          ∀ {f : H → H} {u : Set H},
            IsOpen u →
              (∀ (x : H),
                  x ∈ u →
                    ∃ v,
                      IsOpen v ∧
                        x ∈ v ∧
                          (fun f s =>
                              ContDiffOn 𝕜 ⊤ (↑I ∘ f ∘ ↑(ModelWithCorners.symm I))
                                (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
                            f (u ∩ v)) →
                ContDiffOn 𝕜 ⊤ (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I)),
      congr :=
        (_ :
          ∀ {f g : H → H} {u : Set H},
            IsOpen u →
              (∀ (x : H), x ∈ u → g x = f x) →
                ContDiffOn 𝕜 ⊤ (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I) →
                  ContDiffOn 𝕜 ⊤ (↑I ∘ g ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I)) }
    (↑(LocalHomeomorph.symm e)) e.target
⊢ LocalHomeomorph.prod e e' ∈ contDiffGroupoid ⊤ (ModelWithCorners.prod I I')
[PROOFSTEP]
cases' he' with he' he'_symm
[GOAL]
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 : LocalHomeomorph H H
e' : LocalHomeomorph H' H'
he :
  Pregroupoid.property
    {
      property := fun f s =>
        ContDiffOn 𝕜 ⊤ (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I),
      comp :=
        (_ :
          ∀ {f g : H → H} {u v : Set H},
            ContDiffOn 𝕜 ⊤ (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I) →
              ContDiffOn 𝕜 ⊤ (↑I ∘ g ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' v ∩ range ↑I) →
                IsOpen u →
                  IsOpen v →
                    IsOpen (u ∩ f ⁻¹' v) →
                      (fun f s =>
                          ContDiffOn 𝕜 ⊤ (↑I ∘ f ∘ ↑(ModelWithCorners.symm I))
                            (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
                        (g ∘ f) (u ∩ f ⁻¹' v)),
      id_mem :=
        (_ : ContDiffOn 𝕜 ⊤ (↑I ∘ id ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' univ ∩ range ↑I)),
      locality :=
        (_ :
          ∀ {f : H → H} {u : Set H},
            IsOpen u →
              (∀ (x : H),
                  x ∈ u →
                    ∃ v,
                      IsOpen v ∧
                        x ∈ v ∧
                          (fun f s =>
                              ContDiffOn 𝕜 ⊤ (↑I ∘ f ∘ ↑(ModelWithCorners.symm I))
                                (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
                            f (u ∩ v)) →
                ContDiffOn 𝕜 ⊤ (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I)),
      congr :=
        (_ :
          ∀ {f g : H → H} {u : Set H},
            IsOpen u →
              (∀ (x : H), x ∈ u → g x = f x) →
                ContDiffOn 𝕜 ⊤ (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I) →
                  ContDiffOn 𝕜 ⊤ (↑I ∘ g ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I)) }
    (↑e) e.source
he_symm :
  Pregroupoid.property
    {
      property := fun f s =>
        ContDiffOn 𝕜 ⊤ (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I),
      comp :=
        (_ :
          ∀ {f g : H → H} {u v : Set H},
            ContDiffOn 𝕜 ⊤ (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I) →
              ContDiffOn 𝕜 ⊤ (↑I ∘ g ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' v ∩ range ↑I) →
                IsOpen u →
                  IsOpen v →
                    IsOpen (u ∩ f ⁻¹' v) →
                      (fun f s =>
                          ContDiffOn 𝕜 ⊤ (↑I ∘ f ∘ ↑(ModelWithCorners.symm I))
                            (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
                        (g ∘ f) (u ∩ f ⁻¹' v)),
      id_mem :=
        (_ : ContDiffOn 𝕜 ⊤ (↑I ∘ id ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' univ ∩ range ↑I)),
      locality :=
        (_ :
          ∀ {f : H → H} {u : Set H},
            IsOpen u →
              (∀ (x : H),
                  x ∈ u →
                    ∃ v,
                      IsOpen v ∧
                        x ∈ v ∧
                          (fun f s =>
                              ContDiffOn 𝕜 ⊤ (↑I ∘ f ∘ ↑(ModelWithCorners.symm I))
                                (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
                            f (u ∩ v)) →
                ContDiffOn 𝕜 ⊤ (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I)),
      congr :=
        (_ :
          ∀ {f g : H → H} {u : Set H},
            IsOpen u →
              (∀ (x : H), x ∈ u → g x = f x) →
                ContDiffOn 𝕜 ⊤ (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I) →
                  ContDiffOn 𝕜 ⊤ (↑I ∘ g ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I)) }
    (↑(LocalHomeomorph.symm e)) e.target
he' :
  Pregroupoid.property
    {
      property := fun f s =>
        ContDiffOn 𝕜 ⊤ (↑I' ∘ f ∘ ↑(ModelWithCorners.symm I')) (↑(ModelWithCorners.symm I') ⁻¹' s ∩ range ↑I'),
      comp :=
        (_ :
          ∀ {f g : H' → H'} {u v : Set H'},
            ContDiffOn 𝕜 ⊤ (↑I' ∘ f ∘ ↑(ModelWithCorners.symm I')) (↑(ModelWithCorners.symm I') ⁻¹' u ∩ range ↑I') →
              ContDiffOn 𝕜 ⊤ (↑I' ∘ g ∘ ↑(ModelWithCorners.symm I')) (↑(ModelWithCorners.symm I') ⁻¹' v ∩ range ↑I') →
                IsOpen u →
                  IsOpen v →
                    IsOpen (u ∩ f ⁻¹' v) →
                      (fun f s =>
                          ContDiffOn 𝕜 ⊤ (↑I' ∘ f ∘ ↑(ModelWithCorners.symm I'))
                            (↑(ModelWithCorners.symm I') ⁻¹' s ∩ range ↑I'))
                        (g ∘ f) (u ∩ f ⁻¹' v)),
      id_mem :=
        (_ :
          ContDiffOn 𝕜 ⊤ (↑I' ∘ id ∘ ↑(ModelWithCorners.symm I')) (↑(ModelWithCorners.symm I') ⁻¹' univ ∩ range ↑I')),
      locality :=
        (_ :
          ∀ {f : H' → H'} {u : Set H'},
            IsOpen u →
              (∀ (x : H'),
                  x ∈ u →
                    ∃ v,
                      IsOpen v ∧
                        x ∈ v ∧
                          (fun f s =>
                              ContDiffOn 𝕜 ⊤ (↑I' ∘ f ∘ ↑(ModelWithCorners.symm I'))
                                (↑(ModelWithCorners.symm I') ⁻¹' s ∩ range ↑I'))
                            f (u ∩ v)) →
                ContDiffOn 𝕜 ⊤ (↑I' ∘ f ∘ ↑(ModelWithCorners.symm I')) (↑(ModelWithCorners.symm I') ⁻¹' u ∩ range ↑I')),
      congr :=
        (_ :
          ∀ {f g : H' → H'} {u : Set H'},
            IsOpen u →
              (∀ (x : H'), x ∈ u → g x = f x) →
                ContDiffOn 𝕜 ⊤ (↑I' ∘ f ∘ ↑(ModelWithCorners.symm I')) (↑(ModelWithCorners.symm I') ⁻¹' u ∩ range ↑I') →
                  ContDiffOn 𝕜 ⊤ (↑I' ∘ g ∘ ↑(ModelWithCorners.symm I'))
                    (↑(ModelWithCorners.symm I') ⁻¹' u ∩ range ↑I')) }
    (↑e') e'.source
he'_symm :
  Pregroupoid.property
    {
      property := fun f s =>
        ContDiffOn 𝕜 ⊤ (↑I' ∘ f ∘ ↑(ModelWithCorners.symm I')) (↑(ModelWithCorners.symm I') ⁻¹' s ∩ range ↑I'),
      comp :=
        (_ :
          ∀ {f g : H' → H'} {u v : Set H'},
            ContDiffOn 𝕜 ⊤ (↑I' ∘ f ∘ ↑(ModelWithCorners.symm I')) (↑(ModelWithCorners.symm I') ⁻¹' u ∩ range ↑I') →
              ContDiffOn 𝕜 ⊤ (↑I' ∘ g ∘ ↑(ModelWithCorners.symm I')) (↑(ModelWithCorners.symm I') ⁻¹' v ∩ range ↑I') →
                IsOpen u →
                  IsOpen v →
                    IsOpen (u ∩ f ⁻¹' v) →
                      (fun f s =>
                          ContDiffOn 𝕜 ⊤ (↑I' ∘ f ∘ ↑(ModelWithCorners.symm I'))
                            (↑(ModelWithCorners.symm I') ⁻¹' s ∩ range ↑I'))
                        (g ∘ f) (u ∩ f ⁻¹' v)),
      id_mem :=
        (_ :
          ContDiffOn 𝕜 ⊤ (↑I' ∘ id ∘ ↑(ModelWithCorners.symm I')) (↑(ModelWithCorners.symm I') ⁻¹' univ ∩ range ↑I')),
      locality :=
        (_ :
          ∀ {f : H' → H'} {u : Set H'},
            IsOpen u →
              (∀ (x : H'),
                  x ∈ u →
                    ∃ v,
                      IsOpen v ∧
                        x ∈ v ∧
                          (fun f s =>
                              ContDiffOn 𝕜 ⊤ (↑I' ∘ f ∘ ↑(ModelWithCorners.symm I'))
                                (↑(ModelWithCorners.symm I') ⁻¹' s ∩ range ↑I'))
                            f (u ∩ v)) →
                ContDiffOn 𝕜 ⊤ (↑I' ∘ f ∘ ↑(ModelWithCorners.symm I')) (↑(ModelWithCorners.symm I') ⁻¹' u ∩ range ↑I')),
      congr :=
        (_ :
          ∀ {f g : H' → H'} {u : Set H'},
            IsOpen u →
              (∀ (x : H'), x ∈ u → g x = f x) →
                ContDiffOn 𝕜 ⊤ (↑I' ∘ f ∘ ↑(ModelWithCorners.symm I')) (↑(ModelWithCorners.symm I') ⁻¹' u ∩ range ↑I') →
                  ContDiffOn 𝕜 ⊤ (↑I' ∘ g ∘ ↑(ModelWithCorners.symm I'))
                    (↑(ModelWithCorners.symm I') ⁻¹' u ∩ range ↑I')) }
    (↑(LocalHomeomorph.symm e')) e'.target
⊢ LocalHomeomorph.prod e e' ∈ contDiffGroupoid ⊤ (ModelWithCorners.prod I I')
[PROOFSTEP]
simp only at he he_symm he' he'_symm 
[GOAL]
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 : LocalHomeomorph H H
e' : LocalHomeomorph H' H'
he : ContDiffOn 𝕜 ⊤ (↑I ∘ ↑e ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' e.source ∩ range ↑I)
he_symm :
  ContDiffOn 𝕜 ⊤ (↑I ∘ ↑(LocalHomeomorph.symm e) ∘ ↑(ModelWithCorners.symm I))
    (↑(ModelWithCorners.symm I) ⁻¹' e.target ∩ range ↑I)
he' : ContDiffOn 𝕜 ⊤ (↑I' ∘ ↑e' ∘ ↑(ModelWithCorners.symm I')) (↑(ModelWithCorners.symm I') ⁻¹' e'.source ∩ range ↑I')
he'_symm :
  ContDiffOn 𝕜 ⊤ (↑I' ∘ ↑(LocalHomeomorph.symm e') ∘ ↑(ModelWithCorners.symm I'))
    (↑(ModelWithCorners.symm I') ⁻¹' e'.target ∩ range ↑I')
⊢ LocalHomeomorph.prod e e' ∈ contDiffGroupoid ⊤ (ModelWithCorners.prod I I')
[PROOFSTEP]
constructor
[GOAL]
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 : LocalHomeomorph H H
e' : LocalHomeomorph H' H'
he : ContDiffOn 𝕜 ⊤ (↑I ∘ ↑e ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' e.source ∩ range ↑I)
he_symm :
  ContDiffOn 𝕜 ⊤ (↑I ∘ ↑(LocalHomeomorph.symm e) ∘ ↑(ModelWithCorners.symm I))
    (↑(ModelWithCorners.symm I) ⁻¹' e.target ∩ range ↑I)
he' : ContDiffOn 𝕜 ⊤ (↑I' ∘ ↑e' ∘ ↑(ModelWithCorners.symm I')) (↑(ModelWithCorners.symm I') ⁻¹' e'.source ∩ range ↑I')
he'_symm :
  ContDiffOn 𝕜 ⊤ (↑I' ∘ ↑(LocalHomeomorph.symm e') ∘ ↑(ModelWithCorners.symm I'))
    (↑(ModelWithCorners.symm I') ⁻¹' e'.target ∩ range ↑I')
⊢ Pregroupoid.property
    {
      property := fun f s =>
        ContDiffOn 𝕜 ⊤ (↑(ModelWithCorners.prod I I') ∘ f ∘ ↑(ModelWithCorners.symm (ModelWithCorners.prod I I')))
          (↑(ModelWithCorners.symm (ModelWithCorners.prod I I')) ⁻¹' s ∩ range ↑(ModelWithCorners.prod I I')),
      comp :=
        (_ :
          ∀ {f g : ModelProd H H' → ModelProd H H'} {u v : Set (ModelProd H H')},
            ContDiffOn 𝕜 ⊤ (↑(ModelWithCorners.prod I I') ∘ f ∘ ↑(ModelWithCorners.symm (ModelWithCorners.prod I I')))
                (↑(ModelWithCorners.symm (ModelWithCorners.prod I I')) ⁻¹' u ∩ range ↑(ModelWithCorners.prod I I')) →
              ContDiffOn 𝕜 ⊤ (↑(ModelWithCorners.prod I I') ∘ g ∘ ↑(ModelWithCorners.symm (ModelWithCorners.prod I I')))
                  (↑(ModelWithCorners.symm (ModelWithCorners.prod I I')) ⁻¹' v ∩ range ↑(ModelWithCorners.prod I I')) →
                IsOpen u →
                  IsOpen v →
                    IsOpen (u ∩ f ⁻¹' v) →
                      (fun f s =>
                          ContDiffOn 𝕜 ⊤
                            (↑(ModelWithCorners.prod I I') ∘ f ∘ ↑(ModelWithCorners.symm (ModelWithCorners.prod I I')))
                            (↑(ModelWithCorners.symm (ModelWithCorners.prod I I')) ⁻¹' s ∩
                              range ↑(ModelWithCorners.prod I I')))
                        (g ∘ f) (u ∩ f ⁻¹' v)),
      id_mem :=
        (_ :
          ContDiffOn 𝕜 ⊤ (↑(ModelWithCorners.prod I I') ∘ id ∘ ↑(ModelWithCorners.symm (ModelWithCorners.prod I I')))
            (↑(ModelWithCorners.symm (ModelWithCorners.prod I I')) ⁻¹' univ ∩ range ↑(ModelWithCorners.prod I I'))),
      locality :=
        (_ :
          ∀ {f : ModelProd H H' → ModelProd H H'} {u : Set (ModelProd H H')},
            IsOpen u →
              (∀ (x : ModelProd H H'),
                  x ∈ u →
                    ∃ v,
                      IsOpen v ∧
                        x ∈ v ∧
                          (fun f s =>
                              ContDiffOn 𝕜 ⊤
                                (↑(ModelWithCorners.prod I I') ∘
                                  f ∘ ↑(ModelWithCorners.symm (ModelWithCorners.prod I I')))
                                (↑(ModelWithCorners.symm (ModelWithCorners.prod I I')) ⁻¹' s ∩
                                  range ↑(ModelWithCorners.prod I I')))
                            f (u ∩ v)) →
                ContDiffOn 𝕜 ⊤
                  (↑(ModelWithCorners.prod I I') ∘ f ∘ ↑(ModelWithCorners.symm (ModelWithCorners.prod I I')))
                  (↑(ModelWithCorners.symm (ModelWithCorners.prod I I')) ⁻¹' u ∩ range ↑(ModelWithCorners.prod I I'))),
      congr :=
        (_ :
          ∀ {f g : ModelProd H H' → ModelProd H H'} {u : Set (ModelProd H H')},
            IsOpen u →
              (∀ (x : ModelProd H H'), x ∈ u → g x = f x) →
                ContDiffOn 𝕜 ⊤
                    (↑(ModelWithCorners.prod I I') ∘ f ∘ ↑(ModelWithCorners.symm (ModelWithCorners.prod I I')))
                    (↑(ModelWithCorners.symm (ModelWithCorners.prod I I')) ⁻¹' u ∩
                      range ↑(ModelWithCorners.prod I I')) →
                  ContDiffOn 𝕜 ⊤
                    (↑(ModelWithCorners.prod I I') ∘ g ∘ ↑(ModelWithCorners.symm (ModelWithCorners.prod I I')))
                    (↑(ModelWithCorners.symm (ModelWithCorners.prod I I')) ⁻¹' u ∩
                      range ↑(ModelWithCorners.prod I I'))) }
    (↑(LocalHomeomorph.prod e e')) (LocalHomeomorph.prod e e').toLocalEquiv.source
[PROOFSTEP]
simp only [LocalEquiv.prod_source, LocalHomeomorph.prod_toLocalEquiv]
[GOAL]
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 : LocalHomeomorph H H
e' : LocalHomeomorph H' H'
he : ContDiffOn 𝕜 ⊤ (↑I ∘ ↑e ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' e.source ∩ range ↑I)
he_symm :
  ContDiffOn 𝕜 ⊤ (↑I ∘ ↑(LocalHomeomorph.symm e) ∘ ↑(ModelWithCorners.symm I))
    (↑(ModelWithCorners.symm I) ⁻¹' e.target ∩ range ↑I)
he' : ContDiffOn 𝕜 ⊤ (↑I' ∘ ↑e' ∘ ↑(ModelWithCorners.symm I')) (↑(ModelWithCorners.symm I') ⁻¹' e'.source ∩ range ↑I')
he'_symm :
  ContDiffOn 𝕜 ⊤ (↑I' ∘ ↑(LocalHomeomorph.symm e') ∘ ↑(ModelWithCorners.symm I'))
    (↑(ModelWithCorners.symm I') ⁻¹' e'.target ∩ range ↑I')
⊢ Pregroupoid.property
    {
      property := fun f s =>
        ContDiffOn 𝕜 ⊤ (↑(ModelWithCorners.prod I I') ∘ f ∘ ↑(ModelWithCorners.symm (ModelWithCorners.prod I I')))
          (↑(ModelWithCorners.symm (ModelWithCorners.prod I I')) ⁻¹' s ∩ range ↑(ModelWithCorners.prod I I')),
      comp :=
        (_ :
          ∀ {f g : ModelProd H H' → ModelProd H H'} {u v : Set (ModelProd H H')},
            ContDiffOn 𝕜 ⊤ (↑(ModelWithCorners.prod I I') ∘ f ∘ ↑(ModelWithCorners.symm (ModelWithCorners.prod I I')))
                (↑(ModelWithCorners.symm (ModelWithCorners.prod I I')) ⁻¹' u ∩ range ↑(ModelWithCorners.prod I I')) →
              ContDiffOn 𝕜 ⊤ (↑(ModelWithCorners.prod I I') ∘ g ∘ ↑(ModelWithCorners.symm (ModelWithCorners.prod I I')))
                  (↑(ModelWithCorners.symm (ModelWithCorners.prod I I')) ⁻¹' v ∩ range ↑(ModelWithCorners.prod I I')) →
                IsOpen u →
                  IsOpen v →
                    IsOpen (u ∩ f ⁻¹' v) →
                      (fun f s =>
                          ContDiffOn 𝕜 ⊤
                            (↑(ModelWithCorners.prod I I') ∘ f ∘ ↑(ModelWithCorners.symm (ModelWithCorners.prod I I')))
                            (↑(ModelWithCorners.symm (ModelWithCorners.prod I I')) ⁻¹' s ∩
                              range ↑(ModelWithCorners.prod I I')))
                        (g ∘ f) (u ∩ f ⁻¹' v)),
      id_mem :=
        (_ :
          ContDiffOn 𝕜 ⊤ (↑(ModelWithCorners.prod I I') ∘ id ∘ ↑(ModelWithCorners.symm (ModelWithCorners.prod I I')))
            (↑(ModelWithCorners.symm (ModelWithCorners.prod I I')) ⁻¹' univ ∩ range ↑(ModelWithCorners.prod I I'))),
      locality :=
        (_ :
          ∀ {f : ModelProd H H' → ModelProd H H'} {u : Set (ModelProd H H')},
            IsOpen u →
              (∀ (x : ModelProd H H'),
                  x ∈ u →
                    ∃ v,
                      IsOpen v ∧
                        x ∈ v ∧
                          (fun f s =>
                              ContDiffOn 𝕜 ⊤
                                (↑(ModelWithCorners.prod I I') ∘
                                  f ∘ ↑(ModelWithCorners.symm (ModelWithCorners.prod I I')))
                                (↑(ModelWithCorners.symm (ModelWithCorners.prod I I')) ⁻¹' s ∩
                                  range ↑(ModelWithCorners.prod I I')))
                            f (u ∩ v)) →
                ContDiffOn 𝕜 ⊤
                  (↑(ModelWithCorners.prod I I') ∘ f ∘ ↑(ModelWithCorners.symm (ModelWithCorners.prod I I')))
                  (↑(ModelWithCorners.symm (ModelWithCorners.prod I I')) ⁻¹' u ∩ range ↑(ModelWithCorners.prod I I'))),
      congr :=
        (_ :
          ∀ {f g : ModelProd H H' → ModelProd H H'} {u : Set (ModelProd H H')},
            IsOpen u →
              (∀ (x : ModelProd H H'), x ∈ u → g x = f x) →
                ContDiffOn 𝕜 ⊤
                    (↑(ModelWithCorners.prod I I') ∘ f ∘ ↑(ModelWithCorners.symm (ModelWithCorners.prod I I')))
                    (↑(ModelWithCorners.symm (ModelWithCorners.prod I I')) ⁻¹' u ∩
                      range ↑(ModelWithCorners.prod I I')) →
                  ContDiffOn 𝕜 ⊤
                    (↑(ModelWithCorners.prod I I') ∘ g ∘ ↑(ModelWithCorners.symm (ModelWithCorners.prod I I')))
                    (↑(ModelWithCorners.symm (ModelWithCorners.prod I I')) ⁻¹' u ∩
                      range ↑(ModelWithCorners.prod I I'))) }
    (↑(LocalHomeomorph.symm (LocalHomeomorph.prod e e'))) (LocalHomeomorph.prod e e').toLocalEquiv.target
[PROOFSTEP]
simp only [LocalEquiv.prod_source, LocalHomeomorph.prod_toLocalEquiv]
[GOAL]
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 : LocalHomeomorph H H
e' : LocalHomeomorph H' H'
he : ContDiffOn 𝕜 ⊤ (↑I ∘ ↑e ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' e.source ∩ range ↑I)
he_symm :
  ContDiffOn 𝕜 ⊤ (↑I ∘ ↑(LocalHomeomorph.symm e) ∘ ↑(ModelWithCorners.symm I))
    (↑(ModelWithCorners.symm I) ⁻¹' e.target ∩ range ↑I)
he' : ContDiffOn 𝕜 ⊤ (↑I' ∘ ↑e' ∘ ↑(ModelWithCorners.symm I')) (↑(ModelWithCorners.symm I') ⁻¹' e'.source ∩ range ↑I')
he'_symm :
  ContDiffOn 𝕜 ⊤ (↑I' ∘ ↑(LocalHomeomorph.symm e') ∘ ↑(ModelWithCorners.symm I'))
    (↑(ModelWithCorners.symm I') ⁻¹' e'.target ∩ range ↑I')
⊢ ContDiffOn 𝕜 ⊤
    (↑(ModelWithCorners.prod I I') ∘
      ↑(LocalHomeomorph.prod e e') ∘ ↑(ModelWithCorners.symm (ModelWithCorners.prod I I')))
    (↑(ModelWithCorners.symm (ModelWithCorners.prod I I')) ⁻¹' e.source ×ˢ e'.source ∩
      range ↑(ModelWithCorners.prod I I'))
[PROOFSTEP]
have h3 := ContDiffOn.prod_map he he'
[GOAL]
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 : LocalHomeomorph H H
e' : LocalHomeomorph H' H'
he : ContDiffOn 𝕜 ⊤ (↑I ∘ ↑e ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' e.source ∩ range ↑I)
he_symm :
  ContDiffOn 𝕜 ⊤ (↑I ∘ ↑(LocalHomeomorph.symm e) ∘ ↑(ModelWithCorners.symm I))
    (↑(ModelWithCorners.symm I) ⁻¹' e.target ∩ range ↑I)
he' : ContDiffOn 𝕜 ⊤ (↑I' ∘ ↑e' ∘ ↑(ModelWithCorners.symm I')) (↑(ModelWithCorners.symm I') ⁻¹' e'.source ∩ range ↑I')
he'_symm :
  ContDiffOn 𝕜 ⊤ (↑I' ∘ ↑(LocalHomeomorph.symm e') ∘ ↑(ModelWithCorners.symm I'))
    (↑(ModelWithCorners.symm I') ⁻¹' e'.target ∩ range ↑I')
h3 :
  ContDiffOn 𝕜 ⊤ (Prod.map (↑I ∘ ↑e ∘ ↑(ModelWithCorners.symm I)) (↑I' ∘ ↑e' ∘ ↑(ModelWithCorners.symm I')))
    ((↑(ModelWithCorners.symm I) ⁻¹' e.source ∩ range ↑I) ×ˢ (↑(ModelWithCorners.symm I') ⁻¹' e'.source ∩ range ↑I'))
⊢ ContDiffOn 𝕜 ⊤
    (↑(ModelWithCorners.prod I I') ∘
      ↑(LocalHomeomorph.prod e e') ∘ ↑(ModelWithCorners.symm (ModelWithCorners.prod I I')))
    (↑(ModelWithCorners.symm (ModelWithCorners.prod I I')) ⁻¹' e.source ×ˢ e'.source ∩
      range ↑(ModelWithCorners.prod I I'))
[PROOFSTEP]
rw [← I.image_eq, ← I'.image_eq, Set.prod_image_image_eq] at h3 
[GOAL]
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 : LocalHomeomorph H H
e' : LocalHomeomorph H' H'
he : ContDiffOn 𝕜 ⊤ (↑I ∘ ↑e ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' e.source ∩ range ↑I)
he_symm :
  ContDiffOn 𝕜 ⊤ (↑I ∘ ↑(LocalHomeomorph.symm e) ∘ ↑(ModelWithCorners.symm I))
    (↑(ModelWithCorners.symm I) ⁻¹' e.target ∩ range ↑I)
he' : ContDiffOn 𝕜 ⊤ (↑I' ∘ ↑e' ∘ ↑(ModelWithCorners.symm I')) (↑(ModelWithCorners.symm I') ⁻¹' e'.source ∩ range ↑I')
he'_symm :
  ContDiffOn 𝕜 ⊤ (↑I' ∘ ↑(LocalHomeomorph.symm e') ∘ ↑(ModelWithCorners.symm I'))
    (↑(ModelWithCorners.symm I') ⁻¹' e'.target ∩ range ↑I')
h3 :
  ContDiffOn 𝕜 ⊤ (Prod.map (↑I ∘ ↑e ∘ ↑(ModelWithCorners.symm I)) (↑I' ∘ ↑e' ∘ ↑(ModelWithCorners.symm I')))
    ((fun p => (↑I p.fst, ↑I' p.snd)) '' e.source ×ˢ e'.source)
⊢ ContDiffOn 𝕜 ⊤
    (↑(ModelWithCorners.prod I I') ∘
      ↑(LocalHomeomorph.prod e e') ∘ ↑(ModelWithCorners.symm (ModelWithCorners.prod I I')))
    (↑(ModelWithCorners.symm (ModelWithCorners.prod I I')) ⁻¹' e.source ×ˢ e'.source ∩
      range ↑(ModelWithCorners.prod I I'))
[PROOFSTEP]
rw [← (I.prod I').image_eq]
[GOAL]
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 : LocalHomeomorph H H
e' : LocalHomeomorph H' H'
he : ContDiffOn 𝕜 ⊤ (↑I ∘ ↑e ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' e.source ∩ range ↑I)
he_symm :
  ContDiffOn 𝕜 ⊤ (↑I ∘ ↑(LocalHomeomorph.symm e) ∘ ↑(ModelWithCorners.symm I))
    (↑(ModelWithCorners.symm I) ⁻¹' e.target ∩ range ↑I)
he' : ContDiffOn 𝕜 ⊤ (↑I' ∘ ↑e' ∘ ↑(ModelWithCorners.symm I')) (↑(ModelWithCorners.symm I') ⁻¹' e'.source ∩ range ↑I')
he'_symm :
  ContDiffOn 𝕜 ⊤ (↑I' ∘ ↑(LocalHomeomorph.symm e') ∘ ↑(ModelWithCorners.symm I'))
    (↑(ModelWithCorners.symm I') ⁻¹' e'.target ∩ range ↑I')
h3 :
  ContDiffOn 𝕜 ⊤ (Prod.map (↑I ∘ ↑e ∘ ↑(ModelWithCorners.symm I)) (↑I' ∘ ↑e' ∘ ↑(ModelWithCorners.symm I')))
    ((fun p => (↑I p.fst, ↑I' p.snd)) '' e.source ×ˢ e'.source)
⊢ ContDiffOn 𝕜 ⊤
    (↑(ModelWithCorners.prod I I') ∘
      ↑(LocalHomeomorph.prod e e') ∘ ↑(ModelWithCorners.symm (ModelWithCorners.prod I I')))
    (↑(ModelWithCorners.prod I I') '' e.source ×ˢ e'.source)
[PROOFSTEP]
exact h3
[GOAL]
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 : LocalHomeomorph H H
e' : LocalHomeomorph H' H'
he : ContDiffOn 𝕜 ⊤ (↑I ∘ ↑e ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' e.source ∩ range ↑I)
he_symm :
  ContDiffOn 𝕜 ⊤ (↑I ∘ ↑(LocalHomeomorph.symm e) ∘ ↑(ModelWithCorners.symm I))
    (↑(ModelWithCorners.symm I) ⁻¹' e.target ∩ range ↑I)
he' : ContDiffOn 𝕜 ⊤ (↑I' ∘ ↑e' ∘ ↑(ModelWithCorners.symm I')) (↑(ModelWithCorners.symm I') ⁻¹' e'.source ∩ range ↑I')
he'_symm :
  ContDiffOn 𝕜 ⊤ (↑I' ∘ ↑(LocalHomeomorph.symm e') ∘ ↑(ModelWithCorners.symm I'))
    (↑(ModelWithCorners.symm I') ⁻¹' e'.target ∩ range ↑I')
⊢ ContDiffOn 𝕜 ⊤
    (↑(ModelWithCorners.prod I I') ∘
      ↑(LocalHomeomorph.symm (LocalHomeomorph.prod e e')) ∘ ↑(ModelWithCorners.symm (ModelWithCorners.prod I I')))
    (↑(ModelWithCorners.symm (ModelWithCorners.prod I I')) ⁻¹' (LocalEquiv.prod e.toLocalEquiv e'.toLocalEquiv).target ∩
      range ↑(ModelWithCorners.prod I I'))
[PROOFSTEP]
have h3 := ContDiffOn.prod_map he_symm he'_symm
[GOAL]
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 : LocalHomeomorph H H
e' : LocalHomeomorph H' H'
he : ContDiffOn 𝕜 ⊤ (↑I ∘ ↑e ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' e.source ∩ range ↑I)
he_symm :
  ContDiffOn 𝕜 ⊤ (↑I ∘ ↑(LocalHomeomorph.symm e) ∘ ↑(ModelWithCorners.symm I))
    (↑(ModelWithCorners.symm I) ⁻¹' e.target ∩ range ↑I)
he' : ContDiffOn 𝕜 ⊤ (↑I' ∘ ↑e' ∘ ↑(ModelWithCorners.symm I')) (↑(ModelWithCorners.symm I') ⁻¹' e'.source ∩ range ↑I')
he'_symm :
  ContDiffOn 𝕜 ⊤ (↑I' ∘ ↑(LocalHomeomorph.symm e') ∘ ↑(ModelWithCorners.symm I'))
    (↑(ModelWithCorners.symm I') ⁻¹' e'.target ∩ range ↑I')
h3 :
  ContDiffOn 𝕜 ⊤
    (Prod.map (↑I ∘ ↑(LocalHomeomorph.symm e) ∘ ↑(ModelWithCorners.symm I))
      (↑I' ∘ ↑(LocalHomeomorph.symm e') ∘ ↑(ModelWithCorners.symm I')))
    ((↑(ModelWithCorners.symm I) ⁻¹' e.target ∩ range ↑I) ×ˢ (↑(ModelWithCorners.symm I') ⁻¹' e'.target ∩ range ↑I'))
⊢ ContDiffOn 𝕜 ⊤
    (↑(ModelWithCorners.prod I I') ∘
      ↑(LocalHomeomorph.symm (LocalHomeomorph.prod e e')) ∘ ↑(ModelWithCorners.symm (ModelWithCorners.prod I I')))
    (↑(ModelWithCorners.symm (ModelWithCorners.prod I I')) ⁻¹' (LocalEquiv.prod e.toLocalEquiv e'.toLocalEquiv).target ∩
      range ↑(ModelWithCorners.prod I I'))
[PROOFSTEP]
rw [← I.image_eq, ← I'.image_eq, Set.prod_image_image_eq] at h3 
[GOAL]
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 : LocalHomeomorph H H
e' : LocalHomeomorph H' H'
he : ContDiffOn 𝕜 ⊤ (↑I ∘ ↑e ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' e.source ∩ range ↑I)
he_symm :
  ContDiffOn 𝕜 ⊤ (↑I ∘ ↑(LocalHomeomorph.symm e) ∘ ↑(ModelWithCorners.symm I))
    (↑(ModelWithCorners.symm I) ⁻¹' e.target ∩ range ↑I)
he' : ContDiffOn 𝕜 ⊤ (↑I' ∘ ↑e' ∘ ↑(ModelWithCorners.symm I')) (↑(ModelWithCorners.symm I') ⁻¹' e'.source ∩ range ↑I')
he'_symm :
  ContDiffOn 𝕜 ⊤ (↑I' ∘ ↑(LocalHomeomorph.symm e') ∘ ↑(ModelWithCorners.symm I'))
    (↑(ModelWithCorners.symm I') ⁻¹' e'.target ∩ range ↑I')
h3 :
  ContDiffOn 𝕜 ⊤
    (Prod.map (↑I ∘ ↑(LocalHomeomorph.symm e) ∘ ↑(ModelWithCorners.symm I))
      (↑I' ∘ ↑(LocalHomeomorph.symm e') ∘ ↑(ModelWithCorners.symm I')))
    ((fun p => (↑I p.fst, ↑I' p.snd)) '' e.target ×ˢ e'.target)
⊢ ContDiffOn 𝕜 ⊤
    (↑(ModelWithCorners.prod I I') ∘
      ↑(LocalHomeomorph.symm (LocalHomeomorph.prod e e')) ∘ ↑(ModelWithCorners.symm (ModelWithCorners.prod I I')))
    (↑(ModelWithCorners.symm (ModelWithCorners.prod I I')) ⁻¹' (LocalEquiv.prod e.toLocalEquiv e'.toLocalEquiv).target ∩
      range ↑(ModelWithCorners.prod I I'))
[PROOFSTEP]
rw [← (I.prod I').image_eq]
[GOAL]
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 : LocalHomeomorph H H
e' : LocalHomeomorph H' H'
he : ContDiffOn 𝕜 ⊤ (↑I ∘ ↑e ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' e.source ∩ range ↑I)
he_symm :
  ContDiffOn 𝕜 ⊤ (↑I ∘ ↑(LocalHomeomorph.symm e) ∘ ↑(ModelWithCorners.symm I))
    (↑(ModelWithCorners.symm I) ⁻¹' e.target ∩ range ↑I)
he' : ContDiffOn 𝕜 ⊤ (↑I' ∘ ↑e' ∘ ↑(ModelWithCorners.symm I')) (↑(ModelWithCorners.symm I') ⁻¹' e'.source ∩ range ↑I')
he'_symm :
  ContDiffOn 𝕜 ⊤ (↑I' ∘ ↑(LocalHomeomorph.symm e') ∘ ↑(ModelWithCorners.symm I'))
    (↑(ModelWithCorners.symm I') ⁻¹' e'.target ∩ range ↑I')
h3 :
  ContDiffOn 𝕜 ⊤
    (Prod.map (↑I ∘ ↑(LocalHomeomorph.symm e) ∘ ↑(ModelWithCorners.symm I))
      (↑I' ∘ ↑(LocalHomeomorph.symm e') ∘ ↑(ModelWithCorners.symm I')))
    ((fun p => (↑I p.fst, ↑I' p.snd)) '' e.target ×ˢ e'.target)
⊢ ContDiffOn 𝕜 ⊤
    (↑(ModelWithCorners.prod I I') ∘
      ↑(LocalHomeomorph.symm (LocalHomeomorph.prod e e')) ∘ ↑(ModelWithCorners.symm (ModelWithCorners.prod I I')))
    (↑(ModelWithCorners.prod I I') '' (LocalEquiv.prod e.toLocalEquiv e'.toLocalEquiv).target)
[PROOFSTEP]
exact h3
[GOAL]
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'
⊢ idRestrGroupoid ≤ contDiffGroupoid n I
[PROOFSTEP]
apply StructureGroupoid.le_iff.mpr
[GOAL]
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'
⊢ ∀ (e : LocalHomeomorph H H), e ∈ idRestrGroupoid → e ∈ contDiffGroupoid n I
[PROOFSTEP]
rintro e ⟨s, hs, hes⟩
[GOAL]
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'
e : LocalHomeomorph H H
s : Set H
hs : IsOpen s
hes : e ≈ LocalHomeomorph.ofSet s hs
⊢ e ∈ contDiffGroupoid n I
[PROOFSTEP]
apply (contDiffGroupoid n I).eq_on_source' _ _ _ hes
[GOAL]
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'
e : LocalHomeomorph H H
s : Set H
hs : IsOpen s
hes : e ≈ LocalHomeomorph.ofSet s hs
⊢ LocalHomeomorph.ofSet s hs ∈ (contDiffGroupoid n I).members
[PROOFSTEP]
exact ofSet_mem_contDiffGroupoid n I hs
[GOAL]
𝕜 : 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
inst✝ : ChartedSpace H M
h :
  ∀ (e e' : LocalHomeomorph M H),
    e ∈ atlas H M →
      e' ∈ atlas H M →
        ContDiffOn 𝕜 ⊤ (↑I ∘ ↑(LocalHomeomorph.symm e ≫ₕ e') ∘ ↑(ModelWithCorners.symm I))
          (↑(ModelWithCorners.symm I) ⁻¹' (LocalHomeomorph.symm e ≫ₕ e').toLocalEquiv.source ∩ range ↑I)
⊢ ∀ {e e' : LocalHomeomorph M H}, e ∈ atlas H M → e' ∈ atlas H M → LocalHomeomorph.symm e ≫ₕ e' ∈ contDiffGroupoid ⊤ I
[PROOFSTEP]
haveI : HasGroupoid M (contDiffGroupoid ∞ I) := hasGroupoid_of_pregroupoid _ (h _ _)
[GOAL]
𝕜 : 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
inst✝ : ChartedSpace H M
h :
  ∀ (e e' : LocalHomeomorph M H),
    e ∈ atlas H M →
      e' ∈ atlas H M →
        ContDiffOn 𝕜 ⊤ (↑I ∘ ↑(LocalHomeomorph.symm e ≫ₕ e') ∘ ↑(ModelWithCorners.symm I))
          (↑(ModelWithCorners.symm I) ⁻¹' (LocalHomeomorph.symm e ≫ₕ e').toLocalEquiv.source ∩ range ↑I)
this : HasGroupoid M (contDiffGroupoid ⊤ I)
⊢ ∀ {e e' : LocalHomeomorph M H}, e ∈ atlas H M → e' ∈ atlas H M → LocalHomeomorph.symm e ≫ₕ e' ∈ contDiffGroupoid ⊤ I
[PROOFSTEP]
apply StructureGroupoid.compatible
[GOAL]
𝕜✝ : 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✝
inst✝¹³ : ChartedSpace H✝ M✝
𝕜 : Type u_5
inst✝¹² : NontriviallyNormedField 𝕜
E : Type u_6
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : NormedSpace 𝕜 E
E' : Type u_7
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : NormedSpace 𝕜 E'
H : Type u_8
inst✝⁷ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
H' : Type u_9
inst✝⁶ : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E' H'
M : Type u_10
inst✝⁵ : TopologicalSpace M
inst✝⁴ : ChartedSpace H M
inst✝³ : SmoothManifoldWithCorners I M
M' : Type u_11
inst✝² : TopologicalSpace M'
inst✝¹ : ChartedSpace H' M'
inst✝ : SmoothManifoldWithCorners I' M'
⊢ ∀ {e e' : LocalHomeomorph (M × M') (ModelProd H H')},
    e ∈ atlas (ModelProd H H') (M × M') →
      e' ∈ atlas (ModelProd H H') (M × M') →
        LocalHomeomorph.symm e ≫ₕ e' ∈ contDiffGroupoid ⊤ (ModelWithCorners.prod I I')
[PROOFSTEP]
rintro f g ⟨f1, f2, hf1, hf2, rfl⟩ ⟨g1, g2, hg1, hg2, rfl⟩
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro
𝕜✝ : 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✝
inst✝¹³ : ChartedSpace H✝ M✝
𝕜 : Type u_5
inst✝¹² : NontriviallyNormedField 𝕜
E : Type u_6
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : NormedSpace 𝕜 E
E' : Type u_7
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : NormedSpace 𝕜 E'
H : Type u_8
inst✝⁷ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
H' : Type u_9
inst✝⁶ : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E' H'
M : Type u_10
inst✝⁵ : TopologicalSpace M
inst✝⁴ : ChartedSpace H M
inst✝³ : SmoothManifoldWithCorners I M
M' : Type u_11
inst✝² : TopologicalSpace M'
inst✝¹ : ChartedSpace H' M'
inst✝ : SmoothManifoldWithCorners I' M'
f1 : LocalHomeomorph M H
f2 : LocalHomeomorph M' H'
hf1 : f1 ∈ atlas H M
hf2 : f2 ∈ atlas H' M'
g1 : LocalHomeomorph M H
g2 : LocalHomeomorph M' H'
hg1 : g1 ∈ atlas H M
hg2 : g2 ∈ atlas H' M'
⊢ LocalHomeomorph.symm (LocalHomeomorph.prod f1 f2) ≫ₕ LocalHomeomorph.prod g1 g2 ∈
    contDiffGroupoid ⊤ (ModelWithCorners.prod I I')
[PROOFSTEP]
rw [LocalHomeomorph.prod_symm, LocalHomeomorph.prod_trans]
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro
𝕜✝ : 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✝
inst✝¹³ : ChartedSpace H✝ M✝
𝕜 : Type u_5
inst✝¹² : NontriviallyNormedField 𝕜
E : Type u_6
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : NormedSpace 𝕜 E
E' : Type u_7
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : NormedSpace 𝕜 E'
H : Type u_8
inst✝⁷ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
H' : Type u_9
inst✝⁶ : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E' H'
M : Type u_10
inst✝⁵ : TopologicalSpace M
inst✝⁴ : ChartedSpace H M
inst✝³ : SmoothManifoldWithCorners I M
M' : Type u_11
inst✝² : TopologicalSpace M'
inst✝¹ : ChartedSpace H' M'
inst✝ : SmoothManifoldWithCorners I' M'
f1 : LocalHomeomorph M H
f2 : LocalHomeomorph M' H'
hf1 : f1 ∈ atlas H M
hf2 : f2 ∈ atlas H' M'
g1 : LocalHomeomorph M H
g2 : LocalHomeomorph M' H'
hg1 : g1 ∈ atlas H M
hg2 : g2 ∈ atlas H' M'
⊢ LocalHomeomorph.prod (LocalHomeomorph.symm f1 ≫ₕ g1) (LocalHomeomorph.symm f2 ≫ₕ g2) ∈
    contDiffGroupoid ⊤ (ModelWithCorners.prod I I')
[PROOFSTEP]
have h1 := (contDiffGroupoid ⊤ I).compatible hf1 hg1
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro
𝕜✝ : 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✝
inst✝¹³ : ChartedSpace H✝ M✝
𝕜 : Type u_5
inst✝¹² : NontriviallyNormedField 𝕜
E : Type u_6
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : NormedSpace 𝕜 E
E' : Type u_7
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : NormedSpace 𝕜 E'
H : Type u_8
inst✝⁷ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
H' : Type u_9
inst✝⁶ : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E' H'
M : Type u_10
inst✝⁵ : TopologicalSpace M
inst✝⁴ : ChartedSpace H M
inst✝³ : SmoothManifoldWithCorners I M
M' : Type u_11
inst✝² : TopologicalSpace M'
inst✝¹ : ChartedSpace H' M'
inst✝ : SmoothManifoldWithCorners I' M'
f1 : LocalHomeomorph M H
f2 : LocalHomeomorph M' H'
hf1 : f1 ∈ atlas H M
hf2 : f2 ∈ atlas H' M'
g1 : LocalHomeomorph M H
g2 : LocalHomeomorph M' H'
hg1 : g1 ∈ atlas H M
hg2 : g2 ∈ atlas H' M'
h1 : LocalHomeomorph.symm f1 ≫ₕ g1 ∈ contDiffGroupoid ⊤ I
⊢ LocalHomeomorph.prod (LocalHomeomorph.symm f1 ≫ₕ g1) (LocalHomeomorph.symm f2 ≫ₕ g2) ∈
    contDiffGroupoid ⊤ (ModelWithCorners.prod I I')
[PROOFSTEP]
have h2 := (contDiffGroupoid ⊤ I').compatible hf2 hg2
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro
𝕜✝ : 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✝
inst✝¹³ : ChartedSpace H✝ M✝
𝕜 : Type u_5
inst✝¹² : NontriviallyNormedField 𝕜
E : Type u_6
inst✝¹¹ : NormedAddCommGroup E
inst✝¹⁰ : NormedSpace 𝕜 E
E' : Type u_7
inst✝⁹ : NormedAddCommGroup E'
inst✝⁸ : NormedSpace 𝕜 E'
H : Type u_8
inst✝⁷ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
H' : Type u_9
inst✝⁶ : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E' H'
M : Type u_10
inst✝⁵ : TopologicalSpace M
inst✝⁴ : ChartedSpace H M
inst✝³ : SmoothManifoldWithCorners I M
M' : Type u_11
inst✝² : TopologicalSpace M'
inst✝¹ : ChartedSpace H' M'
inst✝ : SmoothManifoldWithCorners I' M'
f1 : LocalHomeomorph M H
f2 : LocalHomeomorph M' H'
hf1 : f1 ∈ atlas H M
hf2 : f2 ∈ atlas H' M'
g1 : LocalHomeomorph M H
g2 : LocalHomeomorph M' H'
hg1 : g1 ∈ atlas H M
hg2 : g2 ∈ atlas H' M'
h1 : LocalHomeomorph.symm f1 ≫ₕ g1 ∈ contDiffGroupoid ⊤ I
h2 : LocalHomeomorph.symm f2 ≫ₕ g2 ∈ contDiffGroupoid ⊤ I'
⊢ LocalHomeomorph.prod (LocalHomeomorph.symm f1 ≫ₕ g1) (LocalHomeomorph.symm f2 ≫ₕ g2) ∈
    contDiffGroupoid ⊤ (ModelWithCorners.prod I I')
[PROOFSTEP]
exact contDiffGroupoid_prod h1 h2
[GOAL]
𝕜 : 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
inst✝ : Nonempty M
f : M → H
h : OpenEmbedding f
⊢ (toLocalHomeomorph f h).toLocalEquiv.source = univ
[PROOFSTEP]
simp
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
⊢ (extend f I).source = f.source
[PROOFSTEP]
rw [extend, LocalEquiv.trans_source, I.source_eq, preimage_univ, inter_univ]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
⊢ IsOpen (extend f I).source
[PROOFSTEP]
rw [extend_source]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
⊢ IsOpen f.source
[PROOFSTEP]
exact f.open_source
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
⊢ (extend f I).target = ↑(ModelWithCorners.symm I) ⁻¹' f.target ∩ range ↑I
[PROOFSTEP]
simp_rw [extend, LocalEquiv.trans_target, I.target_eq, I.toLocalEquiv_coe_symm, inter_comm]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
hs : s ⊆ f.source
⊢ MapsTo (↑(extend f I)) s (↑(LocalEquiv.symm (extend f I)) ⁻¹' s ∩ range ↑I)
[PROOFSTEP]
rw [mapsTo', extend_coe, extend_coe_symm, preimage_comp, ← I.image_eq, image_comp,
  f.image_eq_target_inter_inv_preimage hs]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
hs : s ⊆ f.source
⊢ ↑I '' (f.target ∩ ↑(LocalHomeomorph.symm f) ⁻¹' s) ⊆ ↑I '' (↑(LocalHomeomorph.symm f) ⁻¹' s)
[PROOFSTEP]
exact image_subset _ (inter_subset_right _ _)
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
x : M
hxf : x ∈ f.source
⊢ x ∈ (extend f I).source
[PROOFSTEP]
rwa [f.extend_source]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
x : M
h : x ∈ f.source
⊢ x ∈ (extend f I).source
[PROOFSTEP]
rwa [f.extend_source I]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
⊢ ContinuousOn (↑(extend f I)) (extend f I).source
[PROOFSTEP]
refine' I.continuous.comp_continuousOn _
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
⊢ ContinuousOn (fun x => ↑(LocalEquiv.symm (LocalEquiv.restr (LocalEquiv.symm f.toLocalEquiv) I.source)) x)
    (extend f I).source
[PROOFSTEP]
rw [extend_source]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
⊢ ContinuousOn (fun x => ↑(LocalEquiv.symm (LocalEquiv.restr (LocalEquiv.symm f.toLocalEquiv) I.source)) x) f.source
[PROOFSTEP]
exact f.continuousOn
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
x : M
hy : x ∈ f.source
⊢ map (↑(extend f I)) (𝓝 x) = 𝓝[range ↑I] ↑(extend f I) x
[PROOFSTEP]
rwa [extend_coe, comp_apply, ← I.map_nhds_eq, ← f.map_nhds_eq, map_map]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
y : M
hy : y ∈ f.source
⊢ (extend f I).target ∈ 𝓝[range ↑I] ↑(extend f I) y
[PROOFSTEP]
rw [← LocalEquiv.image_source_eq_target, ← map_extend_nhds f I hy]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
y : M
hy : y ∈ f.source
⊢ ↑(extend f I) '' (extend f I).source ∈ map (↑(extend f I)) (𝓝 y)
[PROOFSTEP]
exact image_mem_map (extend_source_mem_nhds _ _ hy)
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
⊢ (extend f I).target ⊆ range ↑I
[PROOFSTEP]
simp only [mfld_simps]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
x : M
h : x ∈ f.source
⊢ x ∈ (extend f I).source
[PROOFSTEP]
rwa [f.extend_source]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁹ : NontriviallyNormedField 𝕜
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedSpace 𝕜 E
inst✝⁶ : TopologicalSpace H
inst✝⁵ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁴ : NormedAddCommGroup E'
inst✝³ : NormedSpace 𝕜 E'
inst✝² : TopologicalSpace H'
inst✝¹ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s✝ t : Set M
X : Type u_8
inst✝ : TopologicalSpace X
g : M → X
s : Set M
x : M
⊢ ContinuousWithinAt (g ∘ ↑(LocalEquiv.symm (extend f I))) (↑(LocalEquiv.symm (extend f I)) ⁻¹' s ∩ range ↑I)
      (↑(extend f I) x) ↔
    ContinuousWithinAt (g ∘ ↑(LocalHomeomorph.symm f)) (↑(LocalHomeomorph.symm f) ⁻¹' s) (↑f x)
[PROOFSTEP]
rw [← I.symm_continuousWithinAt_comp_right_iff]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁹ : NontriviallyNormedField 𝕜
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedSpace 𝕜 E
inst✝⁶ : TopologicalSpace H
inst✝⁵ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁴ : NormedAddCommGroup E'
inst✝³ : NormedSpace 𝕜 E'
inst✝² : TopologicalSpace H'
inst✝¹ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s✝ t : Set M
X : Type u_8
inst✝ : TopologicalSpace X
g : M → X
s : Set M
x : M
⊢ ContinuousWithinAt (g ∘ ↑(LocalEquiv.symm (extend f I))) (↑(LocalEquiv.symm (extend f I)) ⁻¹' s ∩ range ↑I)
      (↑(extend f I) x) ↔
    ContinuousWithinAt ((g ∘ ↑(LocalHomeomorph.symm f)) ∘ ↑(ModelWithCorners.symm I))
      (↑(ModelWithCorners.symm I) ⁻¹' (↑(LocalHomeomorph.symm f) ⁻¹' s) ∩ range ↑I) (↑I (↑f x))
[PROOFSTEP]
rfl
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s✝ t : Set M
s : Set E
hs : IsOpen s
⊢ IsOpen (f.source ∩ ↑(extend f I) ⁻¹' s)
[PROOFSTEP]
rw [← extend_source f I]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s✝ t : Set M
s : Set E
hs : IsOpen s
⊢ IsOpen ((extend f I).source ∩ ↑(extend f I) ⁻¹' s)
[PROOFSTEP]
exact isOpen_extend_preimage' f I hs
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
y : M
hy : y ∈ f.source
⊢ map (↑(extend f I)) (𝓝[s] y) = 𝓝[↑(extend f I) '' ((extend f I).source ∩ s)] ↑(extend f I) y
[PROOFSTEP]
set e := f.extend I
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
y : M
hy : y ∈ f.source
e : LocalEquiv M E := extend f I
⊢ map (↑e) (𝓝[s] y) = 𝓝[↑e '' (e.source ∩ s)] ↑e y
[PROOFSTEP]
calc
  map e (𝓝[s] y) = map e (𝓝[e.source ∩ s] y) :=
    congr_arg (map e) (nhdsWithin_inter_of_mem (extend_source_mem_nhdsWithin f I hy)).symm
  _ = 𝓝[e '' (e.source ∩ s)] e y :=
    ((f.extend I).leftInvOn.mono <| inter_subset_left _ _).map_nhdsWithin_eq
      ((f.extend I).left_inv <| by rwa [f.extend_source]) (continuousAt_extend_symm f I hy).continuousWithinAt
      (continuousAt_extend f I hy).continuousWithinAt
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
y : M
hy : y ∈ f.source
e : LocalEquiv M E := extend f I
⊢ y ∈ (extend f I).source
[PROOFSTEP]
rwa [f.extend_source]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
y : M
hy : y ∈ f.source
hs : s ⊆ f.source
⊢ map (↑(extend f I)) (𝓝[s] y) = 𝓝[↑(extend f I) '' s] ↑(extend f I) y
[PROOFSTEP]
rw [map_extend_nhdsWithin_eq_image _ _ hy, inter_eq_self_of_subset_right]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
y : M
hy : y ∈ f.source
hs : s ⊆ f.source
⊢ s ⊆ (extend f I).source
[PROOFSTEP]
rwa [extend_source]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
y : M
hy : y ∈ f.source
⊢ map (↑(extend f I)) (𝓝[s] y) = 𝓝[↑(LocalEquiv.symm (extend f I)) ⁻¹' s ∩ range ↑I] ↑(extend f I) y
[PROOFSTEP]
rw [map_extend_nhdsWithin_eq_image f I hy, nhdsWithin_inter, ← nhdsWithin_extend_target_eq _ _ hy, ← nhdsWithin_inter,
  (f.extend I).image_source_inter_eq', inter_comm]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
y : M
hy : y ∈ f.source
⊢ map (↑(LocalEquiv.symm (extend f I))) (𝓝[↑(LocalEquiv.symm (extend f I)) ⁻¹' s ∩ range ↑I] ↑(extend f I) y) = 𝓝[s] y
[PROOFSTEP]
rw [← map_extend_nhdsWithin f I hy, map_map, Filter.map_congr, map_id]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
y : M
hy : y ∈ f.source
⊢ ↑(LocalEquiv.symm (extend f I)) ∘ ↑(extend f I) =ᶠ[𝓝[s] y] id
[PROOFSTEP]
exact (f.extend I).leftInvOn.eqOn.eventuallyEq_of_mem (extend_source_mem_nhdsWithin _ _ hy)
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
y : M
hy : y ∈ f.source
⊢ map (↑(LocalEquiv.symm (extend f I))) (𝓝[range ↑I] ↑(extend f I) y) = 𝓝 y
[PROOFSTEP]
rw [← nhdsWithin_univ, ← map_extend_symm_nhdsWithin f I hy, preimage_univ, univ_inter]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
α : Type u_8
y : M
l : Filter α
g : α → M
hg : ∀ᶠ (z : α) in l, g z ∈ f.source
hy : y ∈ f.source
⊢ Tendsto (↑(extend f I) ∘ g) l (𝓝 (↑(extend f I) y)) ↔ Tendsto g l (𝓝 y)
[PROOFSTEP]
refine ⟨fun h u hu ↦ mem_map.2 ?_, (continuousAt_extend _ _ hy).tendsto.comp⟩
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
α : Type u_8
y : M
l : Filter α
g : α → M
hg : ∀ᶠ (z : α) in l, g z ∈ f.source
hy : y ∈ f.source
h : Tendsto (↑(extend f I) ∘ g) l (𝓝 (↑(extend f I) y))
u : Set M
hu : u ∈ 𝓝 y
⊢ g ⁻¹' u ∈ l
[PROOFSTEP]
have := (f.continuousAt_extend_symm I hy).tendsto.comp h
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
α : Type u_8
y : M
l : Filter α
g : α → M
hg : ∀ᶠ (z : α) in l, g z ∈ f.source
hy : y ∈ f.source
h : Tendsto (↑(extend f I) ∘ g) l (𝓝 (↑(extend f I) y))
u : Set M
hu : u ∈ 𝓝 y
this :
  Tendsto (↑(LocalEquiv.symm (extend f I)) ∘ ↑(extend f I) ∘ g) l
    (𝓝 (↑(LocalEquiv.symm (extend f I)) (↑(extend f I) y)))
⊢ g ⁻¹' u ∈ l
[PROOFSTEP]
rw [extend_left_inv _ _ hy] at this 
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
α : Type u_8
y : M
l : Filter α
g : α → M
hg : ∀ᶠ (z : α) in l, g z ∈ f.source
hy : y ∈ f.source
h : Tendsto (↑(extend f I) ∘ g) l (𝓝 (↑(extend f I) y))
u : Set M
hu : u ∈ 𝓝 y
this : Tendsto (↑(LocalEquiv.symm (extend f I)) ∘ ↑(extend f I) ∘ g) l (𝓝 y)
⊢ g ⁻¹' u ∈ l
[PROOFSTEP]
filter_upwards [hg, mem_map.1 (this hu)] with z hz hzu
[GOAL]
case h
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
α : Type u_8
y : M
l : Filter α
g : α → M
hg : ∀ᶠ (z : α) in l, g z ∈ f.source
hy : y ∈ f.source
h : Tendsto (↑(extend f I) ∘ g) l (𝓝 (↑(extend f I) y))
u : Set M
hu : u ∈ 𝓝 y
this : Tendsto (↑(LocalEquiv.symm (extend f I)) ∘ ↑(extend f I) ∘ g) l (𝓝 y)
z : α
hz : g z ∈ f.source
hzu : z ∈ ↑(LocalEquiv.symm (extend f I)) ∘ ↑(extend f I) ∘ g ⁻¹' u
⊢ z ∈ g ⁻¹' u
[PROOFSTEP]
simpa only [(· ∘ ·), extend_left_inv _ _ hz, mem_preimage] using hzu
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f'✝ : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
y : M
f' : LocalHomeomorph M' H'
g : M → M'
hy : y ∈ f.source
hgy : g y ∈ f'.source
hmaps : MapsTo g s f'.source
⊢ ContinuousWithinAt (↑(extend f' I') ∘ g ∘ ↑(LocalEquiv.symm (extend f I)))
      (↑(LocalEquiv.symm (extend f I)) ⁻¹' s ∩ range ↑I) (↑(extend f I) y) ↔
    ContinuousWithinAt g s y
[PROOFSTEP]
unfold ContinuousWithinAt
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f'✝ : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
y : M
f' : LocalHomeomorph M' H'
g : M → M'
hy : y ∈ f.source
hgy : g y ∈ f'.source
hmaps : MapsTo g s f'.source
⊢ Tendsto (↑(extend f' I') ∘ g ∘ ↑(LocalEquiv.symm (extend f I)))
      (𝓝[↑(LocalEquiv.symm (extend f I)) ⁻¹' s ∩ range ↑I] ↑(extend f I) y)
      (𝓝 ((↑(extend f' I') ∘ g ∘ ↑(LocalEquiv.symm (extend f I))) (↑(extend f I) y))) ↔
    Tendsto g (𝓝[s] y) (𝓝 (g y))
[PROOFSTEP]
simp only [comp_apply]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f'✝ : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
y : M
f' : LocalHomeomorph M' H'
g : M → M'
hy : y ∈ f.source
hgy : g y ∈ f'.source
hmaps : MapsTo g s f'.source
⊢ Tendsto (↑(extend f' I') ∘ g ∘ ↑(LocalEquiv.symm (extend f I)))
      (𝓝[↑(LocalEquiv.symm (extend f I)) ⁻¹' s ∩ range ↑I] ↑(extend f I) y)
      (𝓝 (↑(extend f' I') (g (↑(LocalEquiv.symm (extend f I)) (↑(extend f I) y))))) ↔
    Tendsto g (𝓝[s] y) (𝓝 (g y))
[PROOFSTEP]
rw [extend_left_inv _ _ hy, f'.tendsto_extend_comp_iff _ _ hgy, ← f.map_extend_symm_nhdsWithin I hy, tendsto_map'_iff]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f'✝ : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
y : M
f' : LocalHomeomorph M' H'
g : M → M'
hy : y ∈ f.source
hgy : g y ∈ f'.source
hmaps : MapsTo g s f'.source
⊢ ∀ᶠ (z : E) in 𝓝[↑(LocalEquiv.symm (extend f I)) ⁻¹' s ∩ range ↑I] ↑(extend f I) y,
    (g ∘ ↑(LocalEquiv.symm (extend f I))) z ∈ f'.source
[PROOFSTEP]
rw [← f.map_extend_nhdsWithin I hy, eventually_map]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f'✝ : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
y : M
f' : LocalHomeomorph M' H'
g : M → M'
hy : y ∈ f.source
hgy : g y ∈ f'.source
hmaps : MapsTo g s f'.source
⊢ ∀ᶠ (a : M) in 𝓝[s] y, (g ∘ ↑(LocalEquiv.symm (extend f I))) (↑(extend f I) a) ∈ f'.source
[PROOFSTEP]
filter_upwards [inter_mem_nhdsWithin _ (f.open_source.mem_nhds hy)] with z hz
[GOAL]
case h
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f'✝ : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
y : M
f' : LocalHomeomorph M' H'
g : M → M'
hy : y ∈ f.source
hgy : g y ∈ f'.source
hmaps : MapsTo g s f'.source
z : M
hz : z ∈ s ∩ f.source
⊢ (g ∘ ↑(LocalEquiv.symm (extend f I))) (↑(extend f I) z) ∈ f'.source
[PROOFSTEP]
rw [comp_apply, extend_left_inv _ _ hz.2]
[GOAL]
case h
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f'✝ : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
y : M
f' : LocalHomeomorph M' H'
g : M → M'
hy : y ∈ f.source
hgy : g y ∈ f'.source
hmaps : MapsTo g s f'.source
z : M
hz : z ∈ s ∩ f.source
⊢ g z ∈ f'.source
[PROOFSTEP]
exact
  hmaps
    hz.1
      -- there is no definition `writtenInExtend` but we already use some made-up names in this file
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f'✝ : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
f' : LocalHomeomorph M' H'
g : M → M'
hs : s ⊆ f.source
hmaps : MapsTo g s f'.source
⊢ ContinuousOn (↑(extend f' I') ∘ g ∘ ↑(LocalEquiv.symm (extend f I))) (↑(extend f I) '' s) ↔ ContinuousOn g s
[PROOFSTEP]
refine ball_image_iff.trans <| forall₂_congr fun x hx ↦ ?_
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f'✝ : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
f' : LocalHomeomorph M' H'
g : M → M'
hs : s ⊆ f.source
hmaps : MapsTo g s f'.source
x : M
hx : x ∈ s
⊢ ContinuousWithinAt (↑(extend f' I') ∘ g ∘ ↑(LocalEquiv.symm (extend f I))) (↑(extend f I) '' s) (↑(extend f I) x) ↔
    ContinuousWithinAt g s x
[PROOFSTEP]
refine (continuousWithinAt_congr_nhds ?_).trans (continuousWithinAt_writtenInExtend_iff _ _ _ (hs hx) (hmaps hx) hmaps)
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f'✝ : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
f' : LocalHomeomorph M' H'
g : M → M'
hs : s ⊆ f.source
hmaps : MapsTo g s f'.source
x : M
hx : x ∈ s
⊢ 𝓝[↑(extend f I) '' s] ↑(extend f I) x = 𝓝[↑(LocalEquiv.symm (extend f I)) ⁻¹' s ∩ range ↑I] ↑(extend f I) x
[PROOFSTEP]
rw [← map_extend_nhdsWithin_eq_image_of_subset, ← map_extend_nhdsWithin]
[GOAL]
case hy
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f'✝ : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
f' : LocalHomeomorph M' H'
g : M → M'
hs : s ⊆ f.source
hmaps : MapsTo g s f'.source
x : M
hx : x ∈ s
⊢ x ∈ f.source
case hy
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f'✝ : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
f' : LocalHomeomorph M' H'
g : M → M'
hs : s ⊆ f.source
hmaps : MapsTo g s f'.source
x : M
hx : x ∈ s
⊢ x ∈ f.source
case hs
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f'✝ : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
f' : LocalHomeomorph M' H'
g : M → M'
hs : s ⊆ f.source
hmaps : MapsTo g s f'.source
x : M
hx : x ∈ s
⊢ s ⊆ f.source
[PROOFSTEP]
exacts [hs hx, hs hx, hs]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
x : M
h : x ∈ f.source
ht : t ∈ 𝓝[s] x
⊢ ↑(LocalEquiv.symm (extend f I)) ⁻¹' t ∈ 𝓝[↑(LocalEquiv.symm (extend f I)) ⁻¹' s ∩ range ↑I] ↑(extend f I) x
[PROOFSTEP]
rwa [← map_extend_symm_nhdsWithin f I h, mem_map] at ht 
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
x : M
h : x ∈ f.source
ht : t ∈ 𝓝 x
⊢ ↑(LocalEquiv.symm (extend f I)) ⁻¹' t ∈ 𝓝 (↑(extend f I) x)
[PROOFSTEP]
apply (continuousAt_extend_symm f I h).preimage_mem_nhds
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
x : M
h : x ∈ f.source
ht : t ∈ 𝓝 x
⊢ t ∈ 𝓝 (↑(LocalEquiv.symm (extend f I)) (↑(extend f I) x))
[PROOFSTEP]
rwa [(f.extend I).left_inv]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
x : M
h : x ∈ f.source
ht : t ∈ 𝓝 x
⊢ x ∈ (extend f I).source
[PROOFSTEP]
rwa [f.extend_source]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
⊢ ↑(LocalEquiv.symm (extend f I)) ⁻¹' (s ∩ t) ∩ range ↑I =
    ↑(LocalEquiv.symm (extend f I)) ⁻¹' s ∩ range ↑I ∩ ↑(LocalEquiv.symm (extend f I)) ⁻¹' t
[PROOFSTEP]
mfld_set_tac
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s✝ t s : Set M
x : M
hx : x ∈ f.source
⊢ ↑(LocalEquiv.symm (extend f I)) ⁻¹' s ∩ range ↑I =ᶠ[𝓝 (↑(extend f I) x)]
    (extend f I).target ∩ ↑(LocalEquiv.symm (extend f I)) ⁻¹' s
[PROOFSTEP]
rw [f.extend_target, inter_assoc, inter_comm (range I)]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s✝ t s : Set M
x : M
hx : x ∈ f.source
⊢ ↑(LocalEquiv.symm (extend f I)) ⁻¹' s ∩ range ↑I =ᶠ[𝓝 (↑(extend f I) x)]
    ↑(ModelWithCorners.symm I) ⁻¹' f.target ∩ (↑(LocalEquiv.symm (extend f I)) ⁻¹' s ∩ range ↑I)
[PROOFSTEP]
conv =>
  congr
  ·skip
  rw [← univ_inter (_ ∩ range I)]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s✝ t s : Set M
x : M
hx : x ∈ f.source
| ↑(LocalEquiv.symm (extend f I)) ⁻¹' s ∩ range ↑I =ᶠ[𝓝 (↑(extend f I) x)]
    ↑(ModelWithCorners.symm I) ⁻¹' f.target ∩ (↑(LocalEquiv.symm (extend f I)) ⁻¹' s ∩ range ↑I)
[PROOFSTEP]
  congr
  ·skip
  rw [← univ_inter (_ ∩ range I)]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s✝ t s : Set M
x : M
hx : x ∈ f.source
| ↑(LocalEquiv.symm (extend f I)) ⁻¹' s ∩ range ↑I =ᶠ[𝓝 (↑(extend f I) x)]
    ↑(ModelWithCorners.symm I) ⁻¹' f.target ∩ (↑(LocalEquiv.symm (extend f I)) ⁻¹' s ∩ range ↑I)
[PROOFSTEP]
  congr
  ·skip
  rw [← univ_inter (_ ∩ range I)]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s✝ t s : Set M
x : M
hx : x ∈ f.source
| ↑(LocalEquiv.symm (extend f I)) ⁻¹' s ∩ range ↑I =ᶠ[𝓝 (↑(extend f I) x)]
    ↑(ModelWithCorners.symm I) ⁻¹' f.target ∩ (↑(LocalEquiv.symm (extend f I)) ⁻¹' s ∩ range ↑I)
[PROOFSTEP]
congr
[GOAL]
case l
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s✝ t s : Set M
x : M
hx : x ∈ f.source
| 𝓝 (↑(extend f I) x)
case f
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s✝ t s : Set M
x : M
hx : x ∈ f.source
| ↑(LocalEquiv.symm (extend f I)) ⁻¹' s ∩ range ↑I
case g
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s✝ t s : Set M
x : M
hx : x ∈ f.source
| ↑(ModelWithCorners.symm I) ⁻¹' f.target ∩ (↑(LocalEquiv.symm (extend f I)) ⁻¹' s ∩ range ↑I)
[PROOFSTEP]
·skip
[GOAL]
case l
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s✝ t s : Set M
x : M
hx : x ∈ f.source
| 𝓝 (↑(extend f I) x)
[PROOFSTEP]
skip
[GOAL]
case l
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s✝ t s : Set M
x : M
hx : x ∈ f.source
| 𝓝 (↑(extend f I) x)
[PROOFSTEP]
skip
[GOAL]
case l
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s✝ t s : Set M
x : M
hx : x ∈ f.source
| 𝓝 (↑(extend f I) x)
[PROOFSTEP]
skip
[GOAL]
case f
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s✝ t s : Set M
x : M
hx : x ∈ f.source
| ↑(LocalEquiv.symm (extend f I)) ⁻¹' s ∩ range ↑I
case g
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s✝ t s : Set M
x : M
hx : x ∈ f.source
| ↑(ModelWithCorners.symm I) ⁻¹' f.target ∩ (↑(LocalEquiv.symm (extend f I)) ⁻¹' s ∩ range ↑I)
[PROOFSTEP]
rw [← univ_inter (_ ∩ range I)]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s✝ t s : Set M
x : M
hx : x ∈ f.source
⊢ univ ∩ (↑(LocalEquiv.symm (extend f I)) ⁻¹' s ∩ range ↑I) =ᶠ[𝓝 (↑(extend f I) x)]
    ↑(ModelWithCorners.symm I) ⁻¹' f.target ∩ (↑(LocalEquiv.symm (extend f I)) ⁻¹' s ∩ range ↑I)
[PROOFSTEP]
refine' (eventuallyEq_univ.mpr _).symm.inter EventuallyEq.rfl
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s✝ t s : Set M
x : M
hx : x ∈ f.source
⊢ ↑(ModelWithCorners.symm I) ⁻¹' f.target ∈ 𝓝 (↑(extend f I) x)
[PROOFSTEP]
refine' I.continuousAt_symm.preimage_mem_nhds (f.open_target.mem_nhds _)
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s✝ t s : Set M
x : M
hx : x ∈ f.source
⊢ ↑(ModelWithCorners.symm I) (↑(extend f I) x) ∈ f.target
[PROOFSTEP]
simp_rw [f.extend_coe, Function.comp_apply, I.left_inv, f.mapsTo hx]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s✝ t s : Set M
x : M
hs : s ⊆ f.source
hx : x ∈ f.source
⊢ ↑(LocalEquiv.symm (extend f I)) ⁻¹' s ∩ range ↑I =ᶠ[𝓝 (↑(extend f I) x)] ↑(extend f I) '' s
[PROOFSTEP]
rw [← nhdsWithin_eq_iff_eventuallyEq, ← map_extend_nhdsWithin _ _ hx,
  map_extend_nhdsWithin_eq_image_of_subset _ _ hx hs]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
⊢ (LocalEquiv.symm (extend f I) ≫ extend f' I).source = ↑I '' (LocalHomeomorph.symm f ≫ₕ f').toLocalEquiv.source
[PROOFSTEP]
simp_rw [LocalEquiv.trans_source, I.image_eq, extend_source, LocalEquiv.symm_source, extend_target,
  inter_right_comm _ (range I)]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
⊢ ↑(ModelWithCorners.symm I) ⁻¹' f.target ∩ ↑(LocalEquiv.symm (extend f I)) ⁻¹' f'.source ∩ range ↑I =
    ↑(ModelWithCorners.symm I) ⁻¹' (LocalHomeomorph.symm f ≫ₕ f').toLocalEquiv.source ∩ range ↑I
[PROOFSTEP]
rfl
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
⊢ ↑(extend f I) '' (f.source ∩ f'.source) = (LocalEquiv.symm (extend f I) ≫ extend f' I).source
[PROOFSTEP]
simp_rw [f.extend_coord_change_source, f.extend_coe, image_comp I f, trans_source'', symm_symm, symm_target]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
x : E
hx : x ∈ (LocalEquiv.symm (extend f I) ≫ extend f' I).source
⊢ (LocalEquiv.symm (extend f I) ≫ extend f' I).source ∈ 𝓝[range ↑I] x
[PROOFSTEP]
rw [f.extend_coord_change_source] at hx ⊢
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
x : E
hx : x ∈ ↑I '' (LocalHomeomorph.symm f ≫ₕ f').toLocalEquiv.source
⊢ ↑I '' (LocalHomeomorph.symm f ≫ₕ f').toLocalEquiv.source ∈ 𝓝[range ↑I] x
[PROOFSTEP]
obtain ⟨x, hx, rfl⟩ := hx
[GOAL]
case intro.intro
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
x : H
hx : x ∈ (LocalHomeomorph.symm f ≫ₕ f').toLocalEquiv.source
⊢ ↑I '' (LocalHomeomorph.symm f ≫ₕ f').toLocalEquiv.source ∈ 𝓝[range ↑I] ↑I x
[PROOFSTEP]
refine' I.image_mem_nhdsWithin _
[GOAL]
case intro.intro
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
x : H
hx : x ∈ (LocalHomeomorph.symm f ≫ₕ f').toLocalEquiv.source
⊢ (LocalHomeomorph.symm f ≫ₕ f').toLocalEquiv.source ∈ 𝓝 x
[PROOFSTEP]
refine' (LocalHomeomorph.open_source _).mem_nhds hx
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
x : M
hxf : x ∈ f.source
hxf' : x ∈ f'.source
⊢ (LocalEquiv.symm (extend f I) ≫ extend f' I).source ∈ 𝓝[range ↑I] ↑(extend f I) x
[PROOFSTEP]
apply extend_coord_change_source_mem_nhdsWithin
[GOAL]
case hx
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
x : M
hxf : x ∈ f.source
hxf' : x ∈ f'.source
⊢ ↑(extend f I) x ∈ (LocalEquiv.symm (extend f I) ≫ extend f' I).source
[PROOFSTEP]
rw [← extend_image_source_inter]
[GOAL]
case hx
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁸ : NontriviallyNormedField 𝕜
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
inst✝⁵ : TopologicalSpace H
inst✝⁴ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝³ : NormedAddCommGroup E'
inst✝² : NormedSpace 𝕜 E'
inst✝¹ : TopologicalSpace H'
inst✝ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
x : M
hxf : x ∈ f.source
hxf' : x ∈ f'.source
⊢ ↑(extend f I) x ∈ ↑(extend f I) '' (f.source ∩ f'.source)
[PROOFSTEP]
exact mem_image_of_mem _ ⟨hxf, hxf'⟩
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁹ : NontriviallyNormedField 𝕜
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedSpace 𝕜 E
inst✝⁶ : TopologicalSpace H
inst✝⁵ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁴ : NormedAddCommGroup E'
inst✝³ : NormedSpace 𝕜 E'
inst✝² : TopologicalSpace H'
inst✝¹ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
inst✝ : ChartedSpace H M
hf : f ∈ maximalAtlas I M
hf' : f' ∈ maximalAtlas I M
⊢ ContDiffOn 𝕜 ⊤ (↑(extend f I) ∘ ↑(LocalEquiv.symm (extend f' I))) (LocalEquiv.symm (extend f' I) ≫ extend f I).source
[PROOFSTEP]
rw [extend_coord_change_source, I.image_eq]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁹ : NontriviallyNormedField 𝕜
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedSpace 𝕜 E
inst✝⁶ : TopologicalSpace H
inst✝⁵ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁴ : NormedAddCommGroup E'
inst✝³ : NormedSpace 𝕜 E'
inst✝² : TopologicalSpace H'
inst✝¹ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
inst✝ : ChartedSpace H M
hf : f ∈ maximalAtlas I M
hf' : f' ∈ maximalAtlas I M
⊢ ContDiffOn 𝕜 ⊤ (↑(extend f I) ∘ ↑(LocalEquiv.symm (extend f' I)))
    (↑(ModelWithCorners.symm I) ⁻¹' (LocalHomeomorph.symm f' ≫ₕ f).toLocalEquiv.source ∩ range ↑I)
[PROOFSTEP]
exact (StructureGroupoid.compatible_of_mem_maximalAtlas hf' hf).1
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁹ : NontriviallyNormedField 𝕜
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedSpace 𝕜 E
inst✝⁶ : TopologicalSpace H
inst✝⁵ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁴ : NormedAddCommGroup E'
inst✝³ : NormedSpace 𝕜 E'
inst✝² : TopologicalSpace H'
inst✝¹ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
inst✝ : ChartedSpace H M
hf : f ∈ maximalAtlas I M
hf' : f' ∈ maximalAtlas I M
x : E
hx : x ∈ (LocalEquiv.symm (extend f' I) ≫ extend f I).source
⊢ ContDiffWithinAt 𝕜 ⊤ (↑(extend f I) ∘ ↑(LocalEquiv.symm (extend f' I))) (range ↑I) x
[PROOFSTEP]
apply (contDiffOn_extend_coord_change I hf hf' x hx).mono_of_mem
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁹ : NontriviallyNormedField 𝕜
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedSpace 𝕜 E
inst✝⁶ : TopologicalSpace H
inst✝⁵ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁴ : NormedAddCommGroup E'
inst✝³ : NormedSpace 𝕜 E'
inst✝² : TopologicalSpace H'
inst✝¹ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
inst✝ : ChartedSpace H M
hf : f ∈ maximalAtlas I M
hf' : f' ∈ maximalAtlas I M
x : E
hx : x ∈ (LocalEquiv.symm (extend f' I) ≫ extend f I).source
⊢ (LocalEquiv.symm (extend f' I) ≫ extend f I).source ∈ 𝓝[range ↑I] x
[PROOFSTEP]
rw [extend_coord_change_source] at hx ⊢
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁹ : NontriviallyNormedField 𝕜
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedSpace 𝕜 E
inst✝⁶ : TopologicalSpace H
inst✝⁵ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁴ : NormedAddCommGroup E'
inst✝³ : NormedSpace 𝕜 E'
inst✝² : TopologicalSpace H'
inst✝¹ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
inst✝ : ChartedSpace H M
hf : f ∈ maximalAtlas I M
hf' : f' ∈ maximalAtlas I M
x : E
hx : x ∈ ↑I '' (LocalHomeomorph.symm f' ≫ₕ f).toLocalEquiv.source
⊢ ↑I '' (LocalHomeomorph.symm f' ≫ₕ f).toLocalEquiv.source ∈ 𝓝[range ↑I] x
[PROOFSTEP]
obtain ⟨z, hz, rfl⟩ := hx
[GOAL]
case intro.intro
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁹ : NontriviallyNormedField 𝕜
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedSpace 𝕜 E
inst✝⁶ : TopologicalSpace H
inst✝⁵ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁴ : NormedAddCommGroup E'
inst✝³ : NormedSpace 𝕜 E'
inst✝² : TopologicalSpace H'
inst✝¹ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
inst✝ : ChartedSpace H M
hf : f ∈ maximalAtlas I M
hf' : f' ∈ maximalAtlas I M
z : H
hz : z ∈ (LocalHomeomorph.symm f' ≫ₕ f).toLocalEquiv.source
⊢ ↑I '' (LocalHomeomorph.symm f' ≫ₕ f).toLocalEquiv.source ∈ 𝓝[range ↑I] ↑I z
[PROOFSTEP]
exact I.image_mem_nhdsWithin ((LocalHomeomorph.open_source _).mem_nhds hz)
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁹ : NontriviallyNormedField 𝕜
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedSpace 𝕜 E
inst✝⁶ : TopologicalSpace H
inst✝⁵ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁴ : NormedAddCommGroup E'
inst✝³ : NormedSpace 𝕜 E'
inst✝² : TopologicalSpace H'
inst✝¹ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
inst✝ : ChartedSpace H M
hf : f ∈ maximalAtlas I M
hf' : f' ∈ maximalAtlas I M
x : M
hxf : x ∈ f.source
hxf' : x ∈ f'.source
⊢ ContDiffWithinAt 𝕜 ⊤ (↑(extend f I) ∘ ↑(LocalEquiv.symm (extend f' I))) (range ↑I) (↑(extend f' I) x)
[PROOFSTEP]
refine' contDiffWithinAt_extend_coord_change I hf hf' _
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁹ : NontriviallyNormedField 𝕜
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedSpace 𝕜 E
inst✝⁶ : TopologicalSpace H
inst✝⁵ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁴ : NormedAddCommGroup E'
inst✝³ : NormedSpace 𝕜 E'
inst✝² : TopologicalSpace H'
inst✝¹ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
inst✝ : ChartedSpace H M
hf : f ∈ maximalAtlas I M
hf' : f' ∈ maximalAtlas I M
x : M
hxf : x ∈ f.source
hxf' : x ∈ f'.source
⊢ ↑(extend f' I) x ∈ (LocalEquiv.symm (extend f' I) ≫ extend f I).source
[PROOFSTEP]
rw [← extend_image_source_inter]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝⁹ : NontriviallyNormedField 𝕜
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedSpace 𝕜 E
inst✝⁶ : TopologicalSpace H
inst✝⁵ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁴ : NormedAddCommGroup E'
inst✝³ : NormedSpace 𝕜 E'
inst✝² : TopologicalSpace H'
inst✝¹ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
inst✝ : ChartedSpace H M
hf : f ∈ maximalAtlas I M
hf' : f' ∈ maximalAtlas I M
x : M
hxf : x ∈ f.source
hxf' : x ∈ f'.source
⊢ ↑(extend f' I) x ∈ ↑(extend f' I) '' (f'.source ∩ f.source)
[PROOFSTEP]
exact mem_image_of_mem _ ⟨hxf', hxf⟩
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝¹⁰ : NontriviallyNormedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : TopologicalSpace H
inst✝⁶ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁵ : NormedAddCommGroup E'
inst✝⁴ : NormedSpace 𝕜 E'
inst✝³ : TopologicalSpace H'
inst✝² : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
inst✝¹ : ChartedSpace H M
inst✝ : ChartedSpace H' M'
⊢ x ∈ (extChartAt I x).source
[PROOFSTEP]
simp only [extChartAt_source, mem_chart_source]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝¹⁰ : NontriviallyNormedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : TopologicalSpace H
inst✝⁶ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁵ : NormedAddCommGroup E'
inst✝⁴ : NormedSpace 𝕜 E'
inst✝³ : TopologicalSpace H'
inst✝² : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
inst✝¹ : ChartedSpace H M
inst✝ : ChartedSpace H' M'
x : M
⊢ UniqueDiffOn 𝕜 (extChartAt I x).target
[PROOFSTEP]
rw [extChartAt_target]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝¹⁰ : NontriviallyNormedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : TopologicalSpace H
inst✝⁶ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁵ : NormedAddCommGroup E'
inst✝⁴ : NormedSpace 𝕜 E'
inst✝³ : TopologicalSpace H'
inst✝² : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
inst✝¹ : ChartedSpace H M
inst✝ : ChartedSpace H' M'
x : M
⊢ UniqueDiffOn 𝕜 (↑(ModelWithCorners.symm I) ⁻¹' (chartAt H x).toLocalEquiv.target ∩ range ↑I)
[PROOFSTEP]
exact I.unique_diff_preimage (chartAt H x).open_target
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝¹⁰ : NontriviallyNormedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : TopologicalSpace H
inst✝⁶ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁵ : NormedAddCommGroup E'
inst✝⁴ : NormedSpace 𝕜 E'
inst✝³ : TopologicalSpace H'
inst✝² : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
inst✝¹ : ChartedSpace H M
inst✝ : ChartedSpace H' M'
x' : M
h : x' ∈ (extChartAt I x).source
⊢ x' ∈ (chartAt H x).toLocalEquiv.source
[PROOFSTEP]
rwa [← extChartAt_source I]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝¹⁰ : NontriviallyNormedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : TopologicalSpace H
inst✝⁶ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁵ : NormedAddCommGroup E'
inst✝⁴ : NormedSpace 𝕜 E'
inst✝³ : TopologicalSpace H'
inst✝² : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
inst✝¹ : ChartedSpace H M
inst✝ : ChartedSpace H' M'
x' : M
h : x' ∈ (extChartAt I x).source
⊢ x' ∈ (chartAt H x).toLocalEquiv.source
[PROOFSTEP]
rwa [← extChartAt_source I]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝¹⁰ : NontriviallyNormedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : TopologicalSpace H
inst✝⁶ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁵ : NormedAddCommGroup E'
inst✝⁴ : NormedSpace 𝕜 E'
inst✝³ : TopologicalSpace H'
inst✝² : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
inst✝¹ : ChartedSpace H M
inst✝ : ChartedSpace H' M'
x y : M
hy : y ∈ (extChartAt I x).source
⊢ y ∈ (chartAt H x).toLocalEquiv.source
[PROOFSTEP]
rwa [← extChartAt_source I]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝¹⁰ : NontriviallyNormedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : TopologicalSpace H
inst✝⁶ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁵ : NormedAddCommGroup E'
inst✝⁴ : NormedSpace 𝕜 E'
inst✝³ : TopologicalSpace H'
inst✝² : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
inst✝¹ : ChartedSpace H M
inst✝ : ChartedSpace H' M'
y : M
hy : y ∈ (extChartAt I x).source
⊢ y ∈ (chartAt H x).toLocalEquiv.source
[PROOFSTEP]
rwa [← extChartAt_source I]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝¹⁰ : NontriviallyNormedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : TopologicalSpace H
inst✝⁶ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁵ : NormedAddCommGroup E'
inst✝⁴ : NormedSpace 𝕜 E'
inst✝³ : TopologicalSpace H'
inst✝² : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
inst✝¹ : ChartedSpace H M
inst✝ : ChartedSpace H' M'
⊢ (extChartAt I x).target ⊆ range ↑I
[PROOFSTEP]
simp only [mfld_simps]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝¹⁰ : NontriviallyNormedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : TopologicalSpace H
inst✝⁶ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁵ : NormedAddCommGroup E'
inst✝⁴ : NormedSpace 𝕜 E'
inst✝³ : TopologicalSpace H'
inst✝² : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
inst✝¹ : ChartedSpace H M
inst✝ : ChartedSpace H' M'
y : M
hy : y ∈ (extChartAt I x).source
⊢ y ∈ (chartAt H x).toLocalEquiv.source
[PROOFSTEP]
rwa [← extChartAt_source I]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝¹⁰ : NontriviallyNormedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : TopologicalSpace H
inst✝⁶ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁵ : NormedAddCommGroup E'
inst✝⁴ : NormedSpace 𝕜 E'
inst✝³ : TopologicalSpace H'
inst✝² : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s✝ t : Set M
inst✝¹ : ChartedSpace H M
inst✝ : ChartedSpace H' M'
s : Set E
hs : IsOpen s
⊢ IsOpen ((chartAt H x).toLocalEquiv.source ∩ ↑(extChartAt I x) ⁻¹' s)
[PROOFSTEP]
rw [← extChartAt_source I]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝¹⁰ : NontriviallyNormedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : TopologicalSpace H
inst✝⁶ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁵ : NormedAddCommGroup E'
inst✝⁴ : NormedSpace 𝕜 E'
inst✝³ : TopologicalSpace H'
inst✝² : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s✝ t : Set M
inst✝¹ : ChartedSpace H M
inst✝ : ChartedSpace H' M'
s : Set E
hs : IsOpen s
⊢ IsOpen ((extChartAt I x).source ∩ ↑(extChartAt I x) ⁻¹' s)
[PROOFSTEP]
exact isOpen_extChartAt_preimage' I x hs
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝¹⁰ : NontriviallyNormedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : TopologicalSpace H
inst✝⁶ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁵ : NormedAddCommGroup E'
inst✝⁴ : NormedSpace 𝕜 E'
inst✝³ : TopologicalSpace H'
inst✝² : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
inst✝¹ : ChartedSpace H M
inst✝ : ChartedSpace H' M'
y : M
hy : y ∈ (extChartAt I x).source
⊢ y ∈ (chartAt H x).toLocalEquiv.source
[PROOFSTEP]
rwa [← extChartAt_source I]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝¹⁰ : NontriviallyNormedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : TopologicalSpace H
inst✝⁶ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁵ : NormedAddCommGroup E'
inst✝⁴ : NormedSpace 𝕜 E'
inst✝³ : TopologicalSpace H'
inst✝² : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
inst✝¹ : ChartedSpace H M
inst✝ : ChartedSpace H' M'
y : M
hy : y ∈ (extChartAt I x).source
⊢ y ∈ (chartAt H x).toLocalEquiv.source
[PROOFSTEP]
rwa [← extChartAt_source I]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝¹⁰ : NontriviallyNormedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : TopologicalSpace H
inst✝⁶ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁵ : NormedAddCommGroup E'
inst✝⁴ : NormedSpace 𝕜 E'
inst✝³ : TopologicalSpace H'
inst✝² : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
inst✝¹ : ChartedSpace H M
inst✝ : ChartedSpace H' M'
y : M
hy : y ∈ (extChartAt I x).source
⊢ y ∈ (chartAt H x).toLocalEquiv.source
[PROOFSTEP]
rwa [← extChartAt_source I]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝¹⁰ : NontriviallyNormedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : TopologicalSpace H
inst✝⁶ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁵ : NormedAddCommGroup E'
inst✝⁴ : NormedSpace 𝕜 E'
inst✝³ : TopologicalSpace H'
inst✝² : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
inst✝¹ : ChartedSpace H M
inst✝ : ChartedSpace H' M'
y : M
hy : y ∈ (extChartAt I x).source
⊢ y ∈ (chartAt H x).toLocalEquiv.source
[PROOFSTEP]
rwa [← extChartAt_source I]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝¹⁰ : NontriviallyNormedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : TopologicalSpace H
inst✝⁶ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁵ : NormedAddCommGroup E'
inst✝⁴ : NormedSpace 𝕜 E'
inst✝³ : TopologicalSpace H'
inst✝² : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
inst✝¹ : ChartedSpace H M
inst✝ : ChartedSpace H' M'
x' : M
h : x' ∈ (extChartAt I x).source
ht : t ∈ 𝓝[s] x'
⊢ ↑(LocalEquiv.symm (extChartAt I x)) ⁻¹' t ∈
    𝓝[↑(LocalEquiv.symm (extChartAt I x)) ⁻¹' s ∩ range ↑I] ↑(extChartAt I x) x'
[PROOFSTEP]
rwa [← map_extChartAt_symm_nhdsWithin' I x h, mem_map] at ht 
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝¹⁰ : NontriviallyNormedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : TopologicalSpace H
inst✝⁶ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁵ : NormedAddCommGroup E'
inst✝⁴ : NormedSpace 𝕜 E'
inst✝³ : TopologicalSpace H'
inst✝² : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
inst✝¹ : ChartedSpace H M
inst✝ : ChartedSpace H' M'
x' : M
h : x' ∈ (extChartAt I x).source
ht : t ∈ 𝓝 x'
⊢ x' ∈ (chartAt H x).toLocalEquiv.source
[PROOFSTEP]
rwa [← extChartAt_source I]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝¹⁰ : NontriviallyNormedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : TopologicalSpace H
inst✝⁶ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁵ : NormedAddCommGroup E'
inst✝⁴ : NormedSpace 𝕜 E'
inst✝³ : TopologicalSpace H'
inst✝² : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
inst✝¹ : ChartedSpace H M
inst✝ : ChartedSpace H' M'
ht : t ∈ 𝓝 x
⊢ ↑(LocalEquiv.symm (extChartAt I x)) ⁻¹' t ∈ 𝓝 (↑(extChartAt I x) x)
[PROOFSTEP]
apply (continuousAt_extChartAt_symm I x).preimage_mem_nhds
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝¹⁰ : NontriviallyNormedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : TopologicalSpace H
inst✝⁶ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁵ : NormedAddCommGroup E'
inst✝⁴ : NormedSpace 𝕜 E'
inst✝³ : TopologicalSpace H'
inst✝² : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
inst✝¹ : ChartedSpace H M
inst✝ : ChartedSpace H' M'
ht : t ∈ 𝓝 x
⊢ t ∈ 𝓝 (↑(LocalEquiv.symm (extChartAt I x)) (↑(extChartAt I x) x))
[PROOFSTEP]
rwa [(extChartAt I x).left_inv (mem_extChartAt_source _ _)]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝¹⁰ : NontriviallyNormedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : TopologicalSpace H
inst✝⁶ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁵ : NormedAddCommGroup E'
inst✝⁴ : NormedSpace 𝕜 E'
inst✝³ : TopologicalSpace H'
inst✝² : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x : M
s t : Set M
inst✝¹ : ChartedSpace H M
inst✝ : ChartedSpace H' M'
⊢ ↑(LocalEquiv.symm (extChartAt I x)) ⁻¹' (s ∩ t) ∩ range ↑I =
    ↑(LocalEquiv.symm (extChartAt I x)) ⁻¹' s ∩ range ↑I ∩ ↑(LocalEquiv.symm (extChartAt I x)) ⁻¹' t
[PROOFSTEP]
mfld_set_tac
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝¹⁰ : NontriviallyNormedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : TopologicalSpace H
inst✝⁶ : TopologicalSpace M
f✝ f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁵ : NormedAddCommGroup E'
inst✝⁴ : NormedSpace 𝕜 E'
inst✝³ : TopologicalSpace H'
inst✝² : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
inst✝¹ : ChartedSpace H M
inst✝ : ChartedSpace H' M'
f : M → M'
x : M
hc : ContinuousWithinAt f s x
⊢ 𝓝[↑(LocalEquiv.symm (extChartAt I x)) ⁻¹' s ∩ range ↑I] ↑(extChartAt I x) x =
    𝓝[(extChartAt I x).target ∩ ↑(LocalEquiv.symm (extChartAt I x)) ⁻¹' (s ∩ f ⁻¹' (extChartAt I' (f x)).source)]
      ↑(extChartAt I x) x
[PROOFSTEP]
rw [← (extChartAt I x).image_source_inter_eq', ← map_extChartAt_nhdsWithin_eq_image, ← map_extChartAt_nhdsWithin,
  nhdsWithin_inter_of_mem']
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝¹⁰ : NontriviallyNormedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : TopologicalSpace H
inst✝⁶ : TopologicalSpace M
f✝ f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁵ : NormedAddCommGroup E'
inst✝⁴ : NormedSpace 𝕜 E'
inst✝³ : TopologicalSpace H'
inst✝² : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
inst✝¹ : ChartedSpace H M
inst✝ : ChartedSpace H' M'
f : M → M'
x : M
hc : ContinuousWithinAt f s x
⊢ f ⁻¹' (extChartAt I' (f x)).source ∈ 𝓝[s] x
[PROOFSTEP]
exact hc (extChartAt_source_mem_nhds _ _)
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝¹⁰ : NontriviallyNormedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : TopologicalSpace H
inst✝⁶ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁵ : NormedAddCommGroup E'
inst✝⁴ : NormedSpace 𝕜 E'
inst✝³ : TopologicalSpace H'
inst✝² : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
inst✝¹ : ChartedSpace H M
inst✝ : ChartedSpace H' M'
x : M
y : E
h : y ∈ (extChartAt I x).target
⊢ writtenInExtChartAt I I x (↑(chartAt H x)) y = y
[PROOFSTEP]
simp_all only [mfld_simps]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝¹⁰ : NontriviallyNormedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : TopologicalSpace H
inst✝⁶ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁵ : NormedAddCommGroup E'
inst✝⁴ : NormedSpace 𝕜 E'
inst✝³ : TopologicalSpace H'
inst✝² : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
inst✝¹ : ChartedSpace H M
inst✝ : ChartedSpace H' M'
x : M
y : E
h : y ∈ (extChartAt I x).target
⊢ writtenInExtChartAt I I (↑(chartAt H x) x) (↑(LocalHomeomorph.symm (chartAt H x))) y = y
[PROOFSTEP]
simp_all only [mfld_simps]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝¹⁰ : NontriviallyNormedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : TopologicalSpace H
inst✝⁶ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁵ : NormedAddCommGroup E'
inst✝⁴ : NormedSpace 𝕜 E'
inst✝³ : TopologicalSpace H'
inst✝² : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
inst✝¹ : ChartedSpace H M
inst✝ : ChartedSpace H' M'
x : M
y : E
h : y ∈ (extChartAt I x).target
⊢ writtenInExtChartAt I 𝓘(𝕜, E) x (↑(extChartAt I x)) y = y
[PROOFSTEP]
simp_all only [mfld_simps]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝¹⁰ : NontriviallyNormedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : TopologicalSpace H
inst✝⁶ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁵ : NormedAddCommGroup E'
inst✝⁴ : NormedSpace 𝕜 E'
inst✝³ : TopologicalSpace H'
inst✝² : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
inst✝¹ : ChartedSpace H M
inst✝ : ChartedSpace H' M'
x : M
y : E
h : y ∈ (extChartAt I x).target
⊢ writtenInExtChartAt 𝓘(𝕜, E) I (↑(extChartAt I x) x) (↑(LocalEquiv.symm (extChartAt I x))) y = y
[PROOFSTEP]
simp_all only [mfld_simps]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝¹⁰ : NontriviallyNormedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : TopologicalSpace H
inst✝⁶ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁵ : NormedAddCommGroup E'
inst✝⁴ : NormedSpace 𝕜 E'
inst✝³ : TopologicalSpace H'
inst✝² : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
inst✝¹ : ChartedSpace H M
inst✝ : ChartedSpace H' M'
x : E
⊢ extChartAt 𝓘(𝕜, E) x = LocalEquiv.refl E
[PROOFSTEP]
simp only [mfld_simps]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝¹⁰ : NontriviallyNormedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : TopologicalSpace H
inst✝⁶ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁵ : NormedAddCommGroup E'
inst✝⁴ : NormedSpace 𝕜 E'
inst✝³ : TopologicalSpace H'
inst✝² : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
inst✝¹ : ChartedSpace H M
inst✝ : ChartedSpace H' M'
x : M × M'
⊢ extChartAt (ModelWithCorners.prod I I') x = LocalEquiv.prod (extChartAt I x.fst) (extChartAt I' x.snd)
[PROOFSTEP]
simp only [mfld_simps]
  -- Porting note: `simp` can't use `LocalEquiv.prod_trans` here because of a type
    -- synonym
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝¹⁰ : NontriviallyNormedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : TopologicalSpace H
inst✝⁶ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁵ : NormedAddCommGroup E'
inst✝⁴ : NormedSpace 𝕜 E'
inst✝³ : TopologicalSpace H'
inst✝² : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
inst✝¹ : ChartedSpace H M
inst✝ : ChartedSpace H' M'
x : M × M'
⊢ LocalEquiv.prod (chartAt H x.fst).toLocalEquiv (chartAt H' x.snd).toLocalEquiv ≫
      LocalEquiv.prod I.toLocalEquiv I'.toLocalEquiv =
    LocalEquiv.prod ((chartAt H x.fst).toLocalEquiv ≫ I.toLocalEquiv)
      ((chartAt H' x.snd).toLocalEquiv ≫ I'.toLocalEquiv)
[PROOFSTEP]
rw [LocalEquiv.prod_trans]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝¹¹ : NontriviallyNormedField 𝕜
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : NormedSpace 𝕜 E
inst✝⁸ : TopologicalSpace H
inst✝⁷ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : NormedSpace 𝕜 E'
inst✝⁴ : TopologicalSpace H'
inst✝³ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
inst✝² : ChartedSpace H M
inst✝¹ : ChartedSpace H' M'
inst✝ : ChartedSpace H H'
x : M'
y : E
hy : y ∈ (extChartAt I x).target
⊢ writtenInExtChartAt I I x (↑(chartAt H' x)) y = y
[PROOFSTEP]
letI := ChartedSpace.comp H H' M'
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝¹¹ : NontriviallyNormedField 𝕜
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : NormedSpace 𝕜 E
inst✝⁸ : TopologicalSpace H
inst✝⁷ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : NormedSpace 𝕜 E'
inst✝⁴ : TopologicalSpace H'
inst✝³ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
inst✝² : ChartedSpace H M
inst✝¹ : ChartedSpace H' M'
inst✝ : ChartedSpace H H'
x : M'
y : E
hy : y ∈ (extChartAt I x).target
this : ChartedSpace H M' := ChartedSpace.comp H H' M'
⊢ writtenInExtChartAt I I x (↑(chartAt H' x)) y = y
[PROOFSTEP]
simp_all only [mfld_simps, chartAt_comp]
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝¹¹ : NontriviallyNormedField 𝕜
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : NormedSpace 𝕜 E
inst✝⁸ : TopologicalSpace H
inst✝⁷ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : NormedSpace 𝕜 E'
inst✝⁴ : TopologicalSpace H'
inst✝³ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
inst✝² : ChartedSpace H M
inst✝¹ : ChartedSpace H' M'
inst✝ : ChartedSpace H H'
x : M'
y : E
hy : y ∈ (extChartAt I x).target
⊢ writtenInExtChartAt I I (↑(chartAt H' x) x) (↑(LocalHomeomorph.symm (chartAt H' x))) y = y
[PROOFSTEP]
letI := ChartedSpace.comp H H' M'
[GOAL]
𝕜 : Type u_1
E : Type u_2
M : Type u_3
H : Type u_4
E' : Type u_5
M' : Type u_6
H' : Type u_7
inst✝¹¹ : NontriviallyNormedField 𝕜
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : NormedSpace 𝕜 E
inst✝⁸ : TopologicalSpace H
inst✝⁷ : TopologicalSpace M
f f' : LocalHomeomorph M H
I : ModelWithCorners 𝕜 E H
inst✝⁶ : NormedAddCommGroup E'
inst✝⁵ : NormedSpace 𝕜 E'
inst✝⁴ : TopologicalSpace H'
inst✝³ : TopologicalSpace M'
I' : ModelWithCorners 𝕜 E' H'
x✝ : M
s t : Set M
inst✝² : ChartedSpace H M
inst✝¹ : ChartedSpace H' M'
inst✝ : ChartedSpace H H'
x : M'
y : E
hy : y ∈ (extChartAt I x).target
this : ChartedSpace H M' := ChartedSpace.comp H H' M'
⊢ writtenInExtChartAt I I (↑(chartAt H' x) x) (↑(LocalHomeomorph.symm (chartAt H' x))) y = y
[PROOFSTEP]
simp_all only [mfld_simps, chartAt_comp]
