topology.local_homeomorph
⟷
Mathlib.Topology.PartialHomeomorph
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
local_invariant_prop
(#19146)
Define structure_groupoid.local_invariant_prop.sheaf
, the sheaf-of-types of functions f : M → M'
(for charted spaces M
, M'
) satisfying some local property in the sense of structure_groupoid.local_invariant_prop
(for example continuity, differentiability, smoothness).
@@ -1146,6 +1146,17 @@ lemma subtype_restr_def : e.subtype_restr s = s.local_homeomorph_subtype_coe.tra
@[simp, mfld_simps] lemma subtype_restr_source : (e.subtype_restr s).source = coe ⁻¹' e.source :=
by simp only [subtype_restr_def] with mfld_simps
+variables {s}
+
+lemma map_subtype_source {x : s} (hxe : (x:α) ∈ e.source) : e x ∈ (e.subtype_restr s).target :=
+begin
+ refine ⟨e.map_source hxe, _⟩,
+ rw [s.local_homeomorph_subtype_coe_target, mem_preimage, e.left_inv_on hxe],
+ exact x.prop
+end
+
+variables (s)
+
/- This lemma characterizes the transition functions of an open subset in terms of the transition
functions of the original space. -/
lemma subtype_restr_symm_trans_subtype_restr (f f' : local_homeomorph α β) :
@@ -1167,4 +1178,24 @@ begin
simp only with mfld_simps,
end
+lemma subtype_restr_symm_eq_on_of_le {U V : opens α} [nonempty U] [nonempty V] (hUV : U ≤ V) :
+ eq_on (e.subtype_restr V).symm (set.inclusion hUV ∘ (e.subtype_restr U).symm)
+ (e.subtype_restr U).target :=
+begin
+ set i := set.inclusion hUV,
+ intros y hy,
+ dsimp [local_homeomorph.subtype_restr_def] at ⊢ hy,
+ have hyV : e.symm y ∈ V.local_homeomorph_subtype_coe.target,
+ { rw opens.local_homeomorph_subtype_coe_target at ⊢ hy,
+ exact hUV hy.2 },
+ refine V.local_homeomorph_subtype_coe.inj_on _ trivial _,
+ { rw ←local_homeomorph.symm_target,
+ apply local_homeomorph.map_source,
+ rw local_homeomorph.symm_source,
+ exact hyV },
+ { rw V.local_homeomorph_subtype_coe.right_inv hyV,
+ show _ = U.local_homeomorph_subtype_coe _,
+ rw U.local_homeomorph_subtype_coe.right_inv hy.2 }
+end
+
end local_homeomorph
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(first ported)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -1421,7 +1421,7 @@ theorem prod_eq_prod_of_nonempty {e₁ e₁' : PartialHomeomorph α β} {e₂ e
haveI : Nonempty δ := ⟨e₂ y⟩
simp_rw [PartialHomeomorph.ext_iff, prod_apply, prod_symm_apply, prod_source, Prod.ext_iff,
Set.prod_eq_prod_iff_of_nonempty h, forall_and, Prod.forall, forall_const, forall_forall_const,
- and_assoc', and_left_comm]
+ and_assoc, and_left_comm]
#align local_homeomorph.prod_eq_prod_of_nonempty PartialHomeomorph.prod_eq_prod_of_nonempty
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -3,7 +3,7 @@ Copyright (c) 2019 Sébastien Gouëzel. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
-/
-import Logic.Equiv.LocalEquiv
+import Logic.Equiv.PartialEquiv
import Topology.Sets.Opens
#align_import topology.local_homeomorph from "leanprover-community/mathlib"@"431589bce478b2229eba14b14a283250428217db"
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -286,10 +286,10 @@ theorem source_preimage_target : e.source ⊆ e ⁻¹' e.target :=
#align local_homeomorph.source_preimage_target PartialHomeomorph.source_preimage_target
-/
-#print PartialHomeomorph.eq_of_localEquiv_eq /-
-theorem eq_of_localEquiv_eq {e e' : PartialHomeomorph α β}
+#print PartialHomeomorph.eq_of_partialEquiv_eq /-
+theorem eq_of_partialEquiv_eq {e e' : PartialHomeomorph α β}
(h : e.toPartialEquiv = e'.toPartialEquiv) : e = e' := by cases e; cases e'; cases h; rfl
-#align local_homeomorph.eq_of_local_equiv_eq PartialHomeomorph.eq_of_localEquiv_eq
+#align local_homeomorph.eq_of_local_equiv_eq PartialHomeomorph.eq_of_partialEquiv_eq
-/
#print PartialHomeomorph.eventually_left_inverse /-
@@ -416,7 +416,7 @@ called `eq_on_source`. -/
@[ext]
protected theorem ext (e' : PartialHomeomorph α β) (h : ∀ x, e x = e' x)
(hinv : ∀ x, e.symm x = e'.symm x) (hs : e.source = e'.source) : e = e' :=
- eq_of_localEquiv_eq (PartialEquiv.ext h hinv hs)
+ eq_of_partialEquiv_eq (PartialEquiv.ext h hinv hs)
#align local_homeomorph.ext PartialHomeomorph.ext
-/
@@ -450,7 +450,7 @@ theorem symm_target : e.symm.target = e.source :=
#print PartialHomeomorph.symm_symm /-
@[simp, mfld_simps]
theorem symm_symm : e.symm.symm = e :=
- eq_of_localEquiv_eq <| by simp
+ eq_of_partialEquiv_eq <| by simp
#align local_homeomorph.symm_symm PartialHomeomorph.symm_symm
-/
@@ -982,11 +982,11 @@ protected def refl (α : Type _) [TopologicalSpace α] : PartialHomeomorph α α
#align local_homeomorph.refl PartialHomeomorph.refl
-/
-#print PartialHomeomorph.refl_localEquiv /-
+#print PartialHomeomorph.refl_partialEquiv /-
@[simp, mfld_simps]
-theorem refl_localEquiv : (PartialHomeomorph.refl α).toPartialEquiv = PartialEquiv.refl α :=
+theorem refl_partialEquiv : (PartialHomeomorph.refl α).toPartialEquiv = PartialEquiv.refl α :=
rfl
-#align local_homeomorph.refl_local_equiv PartialHomeomorph.refl_localEquiv
+#align local_homeomorph.refl_local_equiv PartialHomeomorph.refl_partialEquiv
-/
#print PartialHomeomorph.refl_symm /-
@@ -1150,7 +1150,7 @@ theorem inv_image_trans_target : e'.symm '' (e.trans e').target = e'.source ∩
#print PartialHomeomorph.trans_assoc /-
theorem trans_assoc (e'' : PartialHomeomorph γ δ) :
(e.trans e').trans e'' = e.trans (e'.trans e'') :=
- eq_of_localEquiv_eq <|
+ eq_of_partialEquiv_eq <|
PartialEquiv.trans_assoc e.toPartialEquiv e'.toPartialEquiv e''.toPartialEquiv
#align local_homeomorph.trans_assoc PartialHomeomorph.trans_assoc
-/
@@ -1158,14 +1158,14 @@ theorem trans_assoc (e'' : PartialHomeomorph γ δ) :
#print PartialHomeomorph.trans_refl /-
@[simp, mfld_simps]
theorem trans_refl : e.trans (PartialHomeomorph.refl β) = e :=
- eq_of_localEquiv_eq <| PartialEquiv.trans_refl e.toPartialEquiv
+ eq_of_partialEquiv_eq <| PartialEquiv.trans_refl e.toPartialEquiv
#align local_homeomorph.trans_refl PartialHomeomorph.trans_refl
-/
#print PartialHomeomorph.refl_trans /-
@[simp, mfld_simps]
theorem refl_trans : (PartialHomeomorph.refl α).trans e = e :=
- eq_of_localEquiv_eq <| PartialEquiv.refl_trans e.toPartialEquiv
+ eq_of_partialEquiv_eq <| PartialEquiv.refl_trans e.toPartialEquiv
#align local_homeomorph.refl_trans PartialHomeomorph.refl_trans
-/
@@ -1207,7 +1207,7 @@ theorem ofSet_trans_ofSet {s : Set α} (hs : IsOpen s) {s' : Set α} (hs' : IsOp
#print PartialHomeomorph.restr_trans /-
theorem restr_trans (s : Set α) : (e.restr s).trans e' = (e.trans e').restr s :=
- eq_of_localEquiv_eq <| PartialEquiv.restr_trans e.toPartialEquiv e'.toPartialEquiv (interior s)
+ eq_of_partialEquiv_eq <| PartialEquiv.restr_trans e.toPartialEquiv e'.toPartialEquiv (interior s)
#align local_homeomorph.restr_trans PartialHomeomorph.restr_trans
-/
@@ -1363,7 +1363,7 @@ theorem trans_symm_self : e.symm.trans e ≈ PartialHomeomorph.ofSet e.target e.
#print PartialHomeomorph.eq_of_eqOnSource_univ /-
theorem eq_of_eqOnSource_univ {e e' : PartialHomeomorph α β} (h : e ≈ e') (s : e.source = univ)
(t : e.target = univ) : e = e' :=
- eq_of_localEquiv_eq <| PartialEquiv.eq_of_eqOnSource_univ _ _ h s t
+ eq_of_partialEquiv_eq <| PartialEquiv.eq_of_eqOnSource_univ _ _ h s t
#align local_homeomorph.eq_of_eq_on_source_univ PartialHomeomorph.eq_of_eqOnSource_univ
-/
@@ -1405,7 +1405,7 @@ theorem refl_prod_refl {α β : Type _} [TopologicalSpace α] [TopologicalSpace
theorem prod_trans {η : Type _} {ε : Type _} [TopologicalSpace η] [TopologicalSpace ε]
(e : PartialHomeomorph α β) (f : PartialHomeomorph β γ) (e' : PartialHomeomorph δ η)
(f' : PartialHomeomorph η ε) : (e.Prod e').trans (f.Prod f') = (e.trans f).Prod (e'.trans f') :=
- PartialHomeomorph.eq_of_localEquiv_eq <| by
+ PartialHomeomorph.eq_of_partialEquiv_eq <| by
dsimp only [trans_to_local_equiv, prod_to_local_equiv] <;> apply PartialEquiv.prod_trans
#align local_homeomorph.prod_trans PartialHomeomorph.prod_trans
-/
@@ -1715,7 +1715,7 @@ theorem symm_toPartialHomeomorph : e.symm.toPartialHomeomorph = e.toPartialHomeo
@[simp, mfld_simps]
theorem trans_toPartialHomeomorph :
(e.trans e').toPartialHomeomorph = e.toPartialHomeomorph.trans e'.toPartialHomeomorph :=
- PartialHomeomorph.eq_of_localEquiv_eq <| Equiv.trans_toPartialEquiv _ _
+ PartialHomeomorph.eq_of_partialEquiv_eq <| Equiv.trans_toPartialEquiv _ _
#align homeomorph.trans_to_local_homeomorph Homeomorph.trans_toPartialHomeomorph
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -853,21 +853,22 @@ theorem isOpen_inter_preimage_symm {s : Set α} (hs : IsOpen s) : IsOpen (e.targ
#align local_homeomorph.preimage_open_of_open_symm PartialHomeomorph.isOpen_inter_preimage_symm
-/
-#print PartialHomeomorph.image_isOpen_of_isOpen /-
+#print PartialHomeomorph.isOpen_image_of_subset_source /-
/-- The image of an open set in the source is open. -/
-theorem image_isOpen_of_isOpen {s : Set α} (hs : IsOpen s) (h : s ⊆ e.source) : IsOpen (e '' s) :=
+theorem isOpen_image_of_subset_source {s : Set α} (hs : IsOpen s) (h : s ⊆ e.source) :
+ IsOpen (e '' s) :=
by
have : e '' s = e.target ∩ e.symm ⁻¹' s := e.to_local_equiv.image_eq_target_inter_inv_preimage h
rw [this]
exact e.continuous_on_symm.preimage_open_of_open e.open_target hs
-#align local_homeomorph.image_open_of_open PartialHomeomorph.image_isOpen_of_isOpen
+#align local_homeomorph.image_open_of_open PartialHomeomorph.isOpen_image_of_subset_source
-/
-#print PartialHomeomorph.image_isOpen_of_isOpen' /-
+#print PartialHomeomorph.isOpen_image_source_inter /-
/-- The image of the restriction of an open set to the source is open. -/
-theorem image_isOpen_of_isOpen' {s : Set α} (hs : IsOpen s) : IsOpen (e '' (e.source ∩ s)) :=
- image_isOpen_of_isOpen _ (IsOpen.inter e.open_source hs) (inter_subset_left _ _)
-#align local_homeomorph.image_open_of_open' PartialHomeomorph.image_isOpen_of_isOpen'
+theorem isOpen_image_source_inter {s : Set α} (hs : IsOpen s) : IsOpen (e '' (e.source ∩ s)) :=
+ isOpen_image_of_subset_source _ (IsOpen.inter e.open_source hs) (inter_subset_left _ _)
+#align local_homeomorph.image_open_of_open' PartialHomeomorph.isOpen_image_source_inter
-/
#print PartialHomeomorph.ofContinuousOpenRestrict /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -1754,33 +1754,33 @@ open TopologicalSpace
variable (s : Opens α) [Nonempty s]
-#print TopologicalSpace.Opens.localHomeomorphSubtypeCoe /-
+#print TopologicalSpace.Opens.partialHomeomorphSubtypeCoe /-
/-- The inclusion of an open subset `s` of a space `α` into `α` is a local homeomorphism from the
subtype `s` to `α`. -/
-noncomputable def localHomeomorphSubtypeCoe : PartialHomeomorph s α :=
+noncomputable def partialHomeomorphSubtypeCoe : PartialHomeomorph s α :=
OpenEmbedding.toPartialHomeomorph _ s.2.openEmbedding_subtype_val
-#align topological_space.opens.local_homeomorph_subtype_coe TopologicalSpace.Opens.localHomeomorphSubtypeCoe
+#align topological_space.opens.local_homeomorph_subtype_coe TopologicalSpace.Opens.partialHomeomorphSubtypeCoe
-/
-#print TopologicalSpace.Opens.localHomeomorphSubtypeCoe_coe /-
+#print TopologicalSpace.Opens.partialHomeomorphSubtypeCoe_coe /-
@[simp, mfld_simps]
-theorem localHomeomorphSubtypeCoe_coe : (s.localHomeomorphSubtypeCoe : s → α) = coe :=
+theorem partialHomeomorphSubtypeCoe_coe : (s.partialHomeomorphSubtypeCoe : s → α) = coe :=
rfl
-#align topological_space.opens.local_homeomorph_subtype_coe_coe TopologicalSpace.Opens.localHomeomorphSubtypeCoe_coe
+#align topological_space.opens.local_homeomorph_subtype_coe_coe TopologicalSpace.Opens.partialHomeomorphSubtypeCoe_coe
-/
-#print TopologicalSpace.Opens.localHomeomorphSubtypeCoe_source /-
+#print TopologicalSpace.Opens.partialHomeomorphSubtypeCoe_source /-
@[simp, mfld_simps]
-theorem localHomeomorphSubtypeCoe_source : s.localHomeomorphSubtypeCoe.source = Set.univ :=
+theorem partialHomeomorphSubtypeCoe_source : s.partialHomeomorphSubtypeCoe.source = Set.univ :=
rfl
-#align topological_space.opens.local_homeomorph_subtype_coe_source TopologicalSpace.Opens.localHomeomorphSubtypeCoe_source
+#align topological_space.opens.local_homeomorph_subtype_coe_source TopologicalSpace.Opens.partialHomeomorphSubtypeCoe_source
-/
-#print TopologicalSpace.Opens.localHomeomorphSubtypeCoe_target /-
+#print TopologicalSpace.Opens.partialHomeomorphSubtypeCoe_target /-
@[simp, mfld_simps]
-theorem localHomeomorphSubtypeCoe_target : s.localHomeomorphSubtypeCoe.target = s := by
+theorem partialHomeomorphSubtypeCoe_target : s.partialHomeomorphSubtypeCoe.target = s := by
simp only [local_homeomorph_subtype_coe, Subtype.range_coe_subtype, mfld_simps]; rfl
-#align topological_space.opens.local_homeomorph_subtype_coe_target TopologicalSpace.Opens.localHomeomorphSubtypeCoe_target
+#align topological_space.opens.local_homeomorph_subtype_coe_target TopologicalSpace.Opens.partialHomeomorphSubtypeCoe_target
-/
end TopologicalSpace.Opens
@@ -1797,12 +1797,12 @@ variable (s : Opens α) [Nonempty s]
/-- The restriction of a local homeomorphism `e` to an open subset `s` of the domain type produces a
local homeomorphism whose domain is the subtype `s`.-/
noncomputable def subtypeRestr : PartialHomeomorph s β :=
- s.localHomeomorphSubtypeCoe.trans e
+ s.partialHomeomorphSubtypeCoe.trans e
#align local_homeomorph.subtype_restr PartialHomeomorph.subtypeRestr
-/
#print PartialHomeomorph.subtypeRestr_def /-
-theorem subtypeRestr_def : e.subtypeRestr s = s.localHomeomorphSubtypeCoe.trans e :=
+theorem subtypeRestr_def : e.subtypeRestr s = s.partialHomeomorphSubtypeCoe.trans e :=
rfl
#align local_homeomorph.subtype_restr_def PartialHomeomorph.subtypeRestr_def
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -1349,19 +1349,15 @@ theorem Set.EqOn.restr_eqOn_source {e e' : PartialHomeomorph α β}
#align local_homeomorph.set.eq_on.restr_eq_on_source PartialHomeomorph.Set.EqOn.restr_eqOn_source
-/
-#print PartialHomeomorph.trans_self_symm /-
/-- Composition of a local homeomorphism and its inverse is equivalent to the restriction of the
identity to the source -/
theorem trans_self_symm : e.trans e.symm ≈ PartialHomeomorph.ofSet e.source e.open_source :=
PartialEquiv.trans_self_symm _
#align local_homeomorph.trans_self_symm PartialHomeomorph.trans_self_symm
--/
-#print PartialHomeomorph.trans_symm_self /-
theorem trans_symm_self : e.symm.trans e ≈ PartialHomeomorph.ofSet e.target e.open_target :=
e.symm.trans_self_symm
#align local_homeomorph.trans_symm_self PartialHomeomorph.trans_symm_self
--/
#print PartialHomeomorph.eq_of_eqOnSource_univ /-
theorem eq_of_eqOnSource_univ {e e' : PartialHomeomorph α β} (h : e ≈ e') (s : e.source = univ)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -61,7 +61,7 @@ variable {α : Type _} {β : Type _} {γ : Type _} {δ : Type _} [TopologicalSpa
/-- local homeomorphisms, defined on open subsets of the space -/
@[nolint has_nonempty_instance]
structure PartialHomeomorph (α : Type _) (β : Type _) [TopologicalSpace α]
- [TopologicalSpace β] extends LocalEquiv α β where
+ [TopologicalSpace β] extends PartialEquiv α β where
open_source : IsOpen source
open_target : IsOpen target
continuous_toFun : ContinuousOn to_fun source
@@ -79,7 +79,7 @@ instance : CoeFun (PartialHomeomorph α β) fun _ => α → β :=
#print PartialHomeomorph.symm /-
/-- The inverse of a local homeomorphism -/
protected def symm : PartialHomeomorph β α :=
- { e.toLocalEquiv.symm with
+ { e.toPartialEquiv.symm with
open_source := e.open_target
open_target := e.open_source
continuous_toFun := e.continuous_invFun
@@ -103,8 +103,8 @@ def Simps.symm_apply (e : PartialHomeomorph α β) : β → α :=
-/
initialize_simps_projections PartialHomeomorph (to_local_equiv_to_fun → apply,
- to_local_equiv_inv_fun → symm_apply, toLocalEquiv_source → source, toLocalEquiv_target → target,
- -toLocalEquiv)
+ to_local_equiv_inv_fun → symm_apply, toPartialEquiv_source → source, toPartialEquiv_target →
+ target, -toPartialEquiv)
#print PartialHomeomorph.continuousOn /-
protected theorem continuousOn : ContinuousOn e e.source :=
@@ -120,23 +120,24 @@ theorem continuousOn_symm : ContinuousOn e.symm e.target :=
#print PartialHomeomorph.mk_coe /-
@[simp, mfld_simps]
-theorem mk_coe (e : LocalEquiv α β) (a b c d) : (PartialHomeomorph.mk e a b c d : α → β) = e :=
+theorem mk_coe (e : PartialEquiv α β) (a b c d) : (PartialHomeomorph.mk e a b c d : α → β) = e :=
rfl
#align local_homeomorph.mk_coe PartialHomeomorph.mk_coe
-/
#print PartialHomeomorph.mk_coe_symm /-
@[simp, mfld_simps]
-theorem mk_coe_symm (e : LocalEquiv α β) (a b c d) :
+theorem mk_coe_symm (e : PartialEquiv α β) (a b c d) :
((PartialHomeomorph.mk e a b c d).symm : β → α) = e.symm :=
rfl
#align local_homeomorph.mk_coe_symm PartialHomeomorph.mk_coe_symm
-/
-#print PartialHomeomorph.toLocalEquiv_injective /-
-theorem toLocalEquiv_injective : Injective (toLocalEquiv : PartialHomeomorph α β → LocalEquiv α β)
+#print PartialHomeomorph.toPartialEquiv_injective /-
+theorem toPartialEquiv_injective :
+ Injective (toLocalEquiv : PartialHomeomorph α β → PartialEquiv α β)
| ⟨e, h₁, h₂, h₃, h₄⟩, ⟨e', h₁', h₂', h₃', h₄'⟩, rfl => rfl
-#align local_homeomorph.to_local_equiv_injective PartialHomeomorph.toLocalEquiv_injective
+#align local_homeomorph.to_local_equiv_injective PartialHomeomorph.toPartialEquiv_injective
-/
#print PartialHomeomorph.toFun_eq_coe /-
@@ -157,14 +158,14 @@ theorem invFun_eq_coe (e : PartialHomeomorph α β) : e.invFun = e.symm :=
#print PartialHomeomorph.coe_coe /-
@[simp, mfld_simps]
-theorem coe_coe : (e.toLocalEquiv : α → β) = e :=
+theorem coe_coe : (e.toPartialEquiv : α → β) = e :=
rfl
#align local_homeomorph.coe_coe PartialHomeomorph.coe_coe
-/
#print PartialHomeomorph.coe_coe_symm /-
@[simp, mfld_simps]
-theorem coe_coe_symm : (e.toLocalEquiv.symm : β → α) = e.symm :=
+theorem coe_coe_symm : (e.toPartialEquiv.symm : β → α) = e.symm :=
rfl
#align local_homeomorph.coe_coe_symm PartialHomeomorph.coe_coe_symm
-/
@@ -200,7 +201,7 @@ theorem right_inv {x : β} (h : x ∈ e.target) : e (e.symm x) = x :=
#print PartialHomeomorph.eq_symm_apply /-
theorem eq_symm_apply {x : α} {y : β} (hx : x ∈ e.source) (hy : y ∈ e.target) :
x = e.symm y ↔ e x = y :=
- e.toLocalEquiv.eq_symm_apply hx hy
+ e.toPartialEquiv.eq_symm_apply hx hy
#align local_homeomorph.eq_symm_apply PartialHomeomorph.eq_symm_apply
-/
@@ -253,7 +254,7 @@ protected theorem surjOn : SurjOn e e.source e.target :=
/-- A homeomorphism induces a local homeomorphism on the whole space -/
@[simps (config := { mfld_cfg with simpRhs := true })]
def Homeomorph.toPartialHomeomorph (e : α ≃ₜ β) : PartialHomeomorph α β :=
- { e.toEquiv.toLocalEquiv with
+ { e.toEquiv.toPartialEquiv with
open_source := isOpen_univ
open_target := isOpen_univ
continuous_toFun := by erw [← continuous_iff_continuousOn_univ]; exact e.continuous_to_fun
@@ -263,9 +264,9 @@ def Homeomorph.toPartialHomeomorph (e : α ≃ₜ β) : PartialHomeomorph α β
#print PartialHomeomorph.replaceEquiv /-
/-- Replace `to_local_equiv` field to provide better definitional equalities. -/
-def replaceEquiv (e : PartialHomeomorph α β) (e' : LocalEquiv α β) (h : e.toLocalEquiv = e') :
+def replaceEquiv (e : PartialHomeomorph α β) (e' : PartialEquiv α β) (h : e.toPartialEquiv = e') :
PartialHomeomorph α β where
- toLocalEquiv := e'
+ toPartialEquiv := e'
open_source := h ▸ e.open_source
open_target := h ▸ e.open_target
continuous_toFun := h ▸ e.continuous_toFun
@@ -274,8 +275,8 @@ def replaceEquiv (e : PartialHomeomorph α β) (e' : LocalEquiv α β) (h : e.to
-/
#print PartialHomeomorph.replaceEquiv_eq_self /-
-theorem replaceEquiv_eq_self (e : PartialHomeomorph α β) (e' : LocalEquiv α β)
- (h : e.toLocalEquiv = e') : e.replaceEquiv e' h = e := by cases e; subst e'; rfl
+theorem replaceEquiv_eq_self (e : PartialHomeomorph α β) (e' : PartialEquiv α β)
+ (h : e.toPartialEquiv = e') : e.replaceEquiv e' h = e := by cases e; subst e'; rfl
#align local_homeomorph.replace_equiv_eq_self PartialHomeomorph.replaceEquiv_eq_self
-/
@@ -286,8 +287,8 @@ theorem source_preimage_target : e.source ⊆ e ⁻¹' e.target :=
-/
#print PartialHomeomorph.eq_of_localEquiv_eq /-
-theorem eq_of_localEquiv_eq {e e' : PartialHomeomorph α β} (h : e.toLocalEquiv = e'.toLocalEquiv) :
- e = e' := by cases e; cases e'; cases h; rfl
+theorem eq_of_localEquiv_eq {e e' : PartialHomeomorph α β}
+ (h : e.toPartialEquiv = e'.toPartialEquiv) : e = e' := by cases e; cases e'; cases h; rfl
#align local_homeomorph.eq_of_local_equiv_eq PartialHomeomorph.eq_of_localEquiv_eq
-/
@@ -343,20 +344,20 @@ theorem nhdsWithin_target_inter {x} (hx : x ∈ e.target) (s : Set β) : 𝓝[e.
#print PartialHomeomorph.image_eq_target_inter_inv_preimage /-
theorem image_eq_target_inter_inv_preimage {s : Set α} (h : s ⊆ e.source) :
e '' s = e.target ∩ e.symm ⁻¹' s :=
- e.toLocalEquiv.image_eq_target_inter_inv_preimage h
+ e.toPartialEquiv.image_eq_target_inter_inv_preimage h
#align local_homeomorph.image_eq_target_inter_inv_preimage PartialHomeomorph.image_eq_target_inter_inv_preimage
-/
#print PartialHomeomorph.image_source_inter_eq' /-
theorem image_source_inter_eq' (s : Set α) : e '' (e.source ∩ s) = e.target ∩ e.symm ⁻¹' s :=
- e.toLocalEquiv.image_source_inter_eq' s
+ e.toPartialEquiv.image_source_inter_eq' s
#align local_homeomorph.image_source_inter_eq' PartialHomeomorph.image_source_inter_eq'
-/
#print PartialHomeomorph.image_source_inter_eq /-
theorem image_source_inter_eq (s : Set α) :
e '' (e.source ∩ s) = e.target ∩ e.symm ⁻¹' (e.source ∩ s) :=
- e.toLocalEquiv.image_source_inter_eq s
+ e.toPartialEquiv.image_source_inter_eq s
#align local_homeomorph.image_source_inter_eq PartialHomeomorph.image_source_inter_eq
-/
@@ -377,7 +378,7 @@ theorem symm_image_target_inter_eq (s : Set β) :
#print PartialHomeomorph.source_inter_preimage_inv_preimage /-
theorem source_inter_preimage_inv_preimage (s : Set α) :
e.source ∩ e ⁻¹' (e.symm ⁻¹' s) = e.source ∩ s :=
- e.toLocalEquiv.source_inter_preimage_inv_preimage s
+ e.toPartialEquiv.source_inter_preimage_inv_preimage s
#align local_homeomorph.source_inter_preimage_inv_preimage PartialHomeomorph.source_inter_preimage_inv_preimage
-/
@@ -391,13 +392,13 @@ theorem target_inter_inv_preimage_preimage (s : Set β) :
#print PartialHomeomorph.source_inter_preimage_target_inter /-
theorem source_inter_preimage_target_inter (s : Set β) :
e.source ∩ e ⁻¹' (e.target ∩ s) = e.source ∩ e ⁻¹' s :=
- e.toLocalEquiv.source_inter_preimage_target_inter s
+ e.toPartialEquiv.source_inter_preimage_target_inter s
#align local_homeomorph.source_inter_preimage_target_inter PartialHomeomorph.source_inter_preimage_target_inter
-/
#print PartialHomeomorph.image_source_eq_target /-
theorem image_source_eq_target (e : PartialHomeomorph α β) : e '' e.source = e.target :=
- e.toLocalEquiv.image_source_eq_target
+ e.toPartialEquiv.image_source_eq_target
#align local_homeomorph.image_source_eq_target PartialHomeomorph.image_source_eq_target
-/
@@ -415,7 +416,7 @@ called `eq_on_source`. -/
@[ext]
protected theorem ext (e' : PartialHomeomorph α β) (h : ∀ x, e x = e' x)
(hinv : ∀ x, e.symm x = e'.symm x) (hs : e.source = e'.source) : e = e' :=
- eq_of_localEquiv_eq (LocalEquiv.ext h hinv hs)
+ eq_of_localEquiv_eq (PartialEquiv.ext h hinv hs)
#align local_homeomorph.ext PartialHomeomorph.ext
-/
@@ -426,11 +427,11 @@ protected theorem ext_iff {e e' : PartialHomeomorph α β} :
#align local_homeomorph.ext_iff PartialHomeomorph.ext_iff
-/
-#print PartialHomeomorph.symm_toLocalEquiv /-
+#print PartialHomeomorph.symm_toPartialEquiv /-
@[simp, mfld_simps]
-theorem symm_toLocalEquiv : e.symm.toLocalEquiv = e.toLocalEquiv.symm :=
+theorem symm_toPartialEquiv : e.symm.toPartialEquiv = e.toPartialEquiv.symm :=
rfl
-#align local_homeomorph.symm_to_local_equiv PartialHomeomorph.symm_toLocalEquiv
+#align local_homeomorph.symm_to_local_equiv PartialHomeomorph.symm_toPartialEquiv
-/
#print PartialHomeomorph.symm_source /-
@@ -608,10 +609,10 @@ namespace IsImage
variable {e} {s : Set α} {t : Set β} {x : α} {y : β}
-#print PartialHomeomorph.IsImage.toLocalEquiv /-
-theorem toLocalEquiv (h : e.IsImage s t) : e.toLocalEquiv.IsImage s t :=
+#print PartialHomeomorph.IsImage.toPartialEquiv /-
+theorem toPartialEquiv (h : e.IsImage s t) : e.toPartialEquiv.IsImage s t :=
h
-#align local_homeomorph.is_image.to_local_equiv PartialHomeomorph.IsImage.toLocalEquiv
+#align local_homeomorph.is_image.to_local_equiv PartialHomeomorph.IsImage.toPartialEquiv
-/
#print PartialHomeomorph.IsImage.apply_mem_iff /-
@@ -622,7 +623,7 @@ theorem apply_mem_iff (h : e.IsImage s t) (hx : x ∈ e.source) : e x ∈ t ↔
#print PartialHomeomorph.IsImage.symm /-
protected theorem symm (h : e.IsImage s t) : e.symm.IsImage t s :=
- h.toLocalEquiv.symm
+ h.toPartialEquiv.symm
#align local_homeomorph.is_image.symm PartialHomeomorph.IsImage.symm
-/
@@ -641,7 +642,7 @@ theorem symm_iff : e.symm.IsImage t s ↔ e.IsImage s t :=
#print PartialHomeomorph.IsImage.mapsTo /-
protected theorem mapsTo (h : e.IsImage s t) : MapsTo e (e.source ∩ s) (e.target ∩ t) :=
- h.toLocalEquiv.MapsTo
+ h.toPartialEquiv.MapsTo
#align local_homeomorph.is_image.maps_to PartialHomeomorph.IsImage.mapsTo
-/
@@ -653,7 +654,7 @@ theorem symm_mapsTo (h : e.IsImage s t) : MapsTo e.symm (e.target ∩ t) (e.sour
#print PartialHomeomorph.IsImage.image_eq /-
theorem image_eq (h : e.IsImage s t) : e '' (e.source ∩ s) = e.target ∩ t :=
- h.toLocalEquiv.image_eq
+ h.toPartialEquiv.image_eq
#align local_homeomorph.is_image.image_eq PartialHomeomorph.IsImage.image_eq
-/
@@ -665,7 +666,7 @@ theorem symm_image_eq (h : e.IsImage s t) : e.symm '' (e.target ∩ t) = e.sourc
#print PartialHomeomorph.IsImage.iff_preimage_eq /-
theorem iff_preimage_eq : e.IsImage s t ↔ e.source ∩ e ⁻¹' t = e.source ∩ s :=
- LocalEquiv.IsImage.iff_preimage_eq
+ PartialEquiv.IsImage.iff_preimage_eq
#align local_homeomorph.is_image.iff_preimage_eq PartialHomeomorph.IsImage.iff_preimage_eq
-/
@@ -706,13 +707,13 @@ alias ⟨preimage_eq', of_preimage_eq'⟩ := iff_preimage_eq'
#print PartialHomeomorph.IsImage.of_image_eq /-
theorem of_image_eq (h : e '' (e.source ∩ s) = e.target ∩ t) : e.IsImage s t :=
- LocalEquiv.IsImage.of_image_eq h
+ PartialEquiv.IsImage.of_image_eq h
#align local_homeomorph.is_image.of_image_eq PartialHomeomorph.IsImage.of_image_eq
-/
#print PartialHomeomorph.IsImage.of_symm_image_eq /-
theorem of_symm_image_eq (h : e.symm '' (e.target ∩ t) = e.source ∩ s) : e.IsImage s t :=
- LocalEquiv.IsImage.of_symm_image_eq h
+ PartialEquiv.IsImage.of_symm_image_eq h
#align local_homeomorph.is_image.of_symm_image_eq PartialHomeomorph.IsImage.of_symm_image_eq
-/
@@ -744,7 +745,7 @@ protected theorem diff {s' t'} (h : e.IsImage s t) (h' : e.IsImage s' t') :
theorem leftInvOn_piecewise {e' : PartialHomeomorph α β} [∀ i, Decidable (i ∈ s)]
[∀ i, Decidable (i ∈ t)] (h : e.IsImage s t) (h' : e'.IsImage s t) :
LeftInvOn (t.piecewise e.symm e'.symm) (s.piecewise e e') (s.ite e.source e'.source) :=
- h.toLocalEquiv.leftInvOn_piecewise h'
+ h.toPartialEquiv.leftInvOn_piecewise h'
#align local_homeomorph.is_image.left_inv_on_piecewise PartialHomeomorph.IsImage.leftInvOn_piecewise
-/
@@ -752,7 +753,7 @@ theorem leftInvOn_piecewise {e' : PartialHomeomorph α β} [∀ i, Decidable (i
theorem inter_eq_of_inter_eq_of_eqOn {e' : PartialHomeomorph α β} (h : e.IsImage s t)
(h' : e'.IsImage s t) (hs : e.source ∩ s = e'.source ∩ s) (Heq : EqOn e e' (e.source ∩ s)) :
e.target ∩ t = e'.target ∩ t :=
- h.toLocalEquiv.inter_eq_of_inter_eq_of_eqOn h' hs Heq
+ h.toPartialEquiv.inter_eq_of_inter_eq_of_eqOn h' hs Heq
#align local_homeomorph.is_image.inter_eq_of_inter_eq_of_eq_on PartialHomeomorph.IsImage.inter_eq_of_inter_eq_of_eqOn
-/
@@ -760,7 +761,7 @@ theorem inter_eq_of_inter_eq_of_eqOn {e' : PartialHomeomorph α β} (h : e.IsIma
theorem symm_eqOn_of_inter_eq_of_eqOn {e' : PartialHomeomorph α β} (h : e.IsImage s t)
(hs : e.source ∩ s = e'.source ∩ s) (Heq : EqOn e e' (e.source ∩ s)) :
EqOn e.symm e'.symm (e.target ∩ t) :=
- h.toLocalEquiv.symm_eq_on_of_inter_eq_of_eqOn hs Heq
+ h.toPartialEquiv.symm_eq_on_of_inter_eq_of_eqOn hs Heq
#align local_homeomorph.is_image.symm_eq_on_of_inter_eq_of_eq_on PartialHomeomorph.IsImage.symm_eqOn_of_inter_eq_of_eqOn
-/
@@ -797,10 +798,10 @@ theorem isOpen_iff (h : e.IsImage s t) : IsOpen (e.source ∩ s) ↔ IsOpen (e.t
#print PartialHomeomorph.IsImage.restr /-
/-- Restrict a `local_homeomorph` to a pair of corresponding open sets. -/
-@[simps toLocalEquiv]
+@[simps toPartialEquiv]
def restr (h : e.IsImage s t) (hs : IsOpen (e.source ∩ s)) : PartialHomeomorph α β
where
- toLocalEquiv := h.toLocalEquiv.restr
+ toPartialEquiv := h.toPartialEquiv.restr
open_source := hs
open_target := h.isOpen_iff.1 hs
continuous_toFun := e.ContinuousOn.mono (inter_subset_left _ _)
@@ -812,7 +813,7 @@ end IsImage
#print PartialHomeomorph.isImage_source_target /-
theorem isImage_source_target : e.IsImage e.source e.target :=
- e.toLocalEquiv.isImage_source_target
+ e.toPartialEquiv.isImage_source_target
#align local_homeomorph.is_image_source_target PartialHomeomorph.isImage_source_target
-/
@@ -820,7 +821,7 @@ theorem isImage_source_target : e.IsImage e.source e.target :=
theorem isImage_source_target_of_disjoint (e' : PartialHomeomorph α β)
(hs : Disjoint e.source e'.source) (ht : Disjoint e.target e'.target) :
e.IsImage e'.source e'.target :=
- e.toLocalEquiv.isImage_source_target_of_disjoint e'.toLocalEquiv hs ht
+ e.toPartialEquiv.isImage_source_target_of_disjoint e'.toPartialEquiv hs ht
#align local_homeomorph.is_image_source_target_of_disjoint PartialHomeomorph.isImage_source_target_of_disjoint
-/
@@ -871,10 +872,10 @@ theorem image_isOpen_of_isOpen' {s : Set α} (hs : IsOpen s) : IsOpen (e '' (e.s
#print PartialHomeomorph.ofContinuousOpenRestrict /-
/-- A `local_equiv` with continuous open forward map and an open source is a `local_homeomorph`. -/
-def ofContinuousOpenRestrict (e : LocalEquiv α β) (hc : ContinuousOn e e.source)
+def ofContinuousOpenRestrict (e : PartialEquiv α β) (hc : ContinuousOn e e.source)
(ho : IsOpenMap (e.source.restrict e)) (hs : IsOpen e.source) : PartialHomeomorph α β
where
- toLocalEquiv := e
+ toPartialEquiv := e
open_source := hs
open_target := by simpa only [range_restrict, e.image_source_eq_target] using ho.is_open_range
continuous_toFun := hc
@@ -884,7 +885,7 @@ def ofContinuousOpenRestrict (e : LocalEquiv α β) (hc : ContinuousOn e e.sourc
#print PartialHomeomorph.ofContinuousOpen /-
/-- A `local_equiv` with continuous open forward map and an open source is a `local_homeomorph`. -/
-def ofContinuousOpen (e : LocalEquiv α β) (hc : ContinuousOn e e.source) (ho : IsOpenMap e)
+def ofContinuousOpen (e : PartialEquiv α β) (hc : ContinuousOn e e.source) (ho : IsOpenMap e)
(hs : IsOpen e.source) : PartialHomeomorph α β :=
ofContinuousOpenRestrict e hc (ho.restrict hs) hs
#align local_homeomorph.of_continuous_open PartialHomeomorph.ofContinuousOpen
@@ -900,12 +901,12 @@ protected def restrOpen (s : Set α) (hs : IsOpen s) : PartialHomeomorph α β :
#align local_homeomorph.restr_open PartialHomeomorph.restrOpen
-/
-#print PartialHomeomorph.restrOpen_toLocalEquiv /-
+#print PartialHomeomorph.restrOpen_toPartialEquiv /-
@[simp, mfld_simps]
-theorem restrOpen_toLocalEquiv (s : Set α) (hs : IsOpen s) :
- (e.restrOpen s hs).toLocalEquiv = e.toLocalEquiv.restr s :=
+theorem restrOpen_toPartialEquiv (s : Set α) (hs : IsOpen s) :
+ (e.restrOpen s hs).toPartialEquiv = e.toPartialEquiv.restr s :=
rfl
-#align local_homeomorph.restr_open_to_local_equiv PartialHomeomorph.restrOpen_toLocalEquiv
+#align local_homeomorph.restr_open_to_local_equiv PartialHomeomorph.restrOpen_toPartialEquiv
-/
#print PartialHomeomorph.restrOpen_source /-
@@ -926,12 +927,12 @@ protected def restr (s : Set α) : PartialHomeomorph α β :=
#align local_homeomorph.restr PartialHomeomorph.restr
-/
-#print PartialHomeomorph.restr_toLocalEquiv /-
+#print PartialHomeomorph.restr_toPartialEquiv /-
@[simp, mfld_simps]
-theorem restr_toLocalEquiv (s : Set α) :
- (e.restr s).toLocalEquiv = e.toLocalEquiv.restr (interior s) :=
+theorem restr_toPartialEquiv (s : Set α) :
+ (e.restr s).toPartialEquiv = e.toPartialEquiv.restr (interior s) :=
rfl
-#align local_homeomorph.restr_to_local_equiv PartialHomeomorph.restr_toLocalEquiv
+#align local_homeomorph.restr_to_local_equiv PartialHomeomorph.restr_toPartialEquiv
-/
#print PartialHomeomorph.restr_source' /-
@@ -940,11 +941,11 @@ theorem restr_source' (s : Set α) (hs : IsOpen s) : (e.restr s).source = e.sour
#align local_homeomorph.restr_source' PartialHomeomorph.restr_source'
-/
-#print PartialHomeomorph.restr_toLocalEquiv' /-
-theorem restr_toLocalEquiv' (s : Set α) (hs : IsOpen s) :
- (e.restr s).toLocalEquiv = e.toLocalEquiv.restr s := by
+#print PartialHomeomorph.restr_toPartialEquiv' /-
+theorem restr_toPartialEquiv' (s : Set α) (hs : IsOpen s) :
+ (e.restr s).toPartialEquiv = e.toPartialEquiv.restr s := by
rw [e.restr_to_local_equiv, hs.interior_eq]
-#align local_homeomorph.restr_to_local_equiv' PartialHomeomorph.restr_toLocalEquiv'
+#align local_homeomorph.restr_to_local_equiv' PartialHomeomorph.restr_toPartialEquiv'
-/
#print PartialHomeomorph.restr_eq_of_source_subset /-
@@ -952,7 +953,7 @@ theorem restr_eq_of_source_subset {e : PartialHomeomorph α β} {s : Set α} (h
e.restr s = e := by
apply eq_of_local_equiv_eq
rw [restr_to_local_equiv]
- apply LocalEquiv.restr_eq_of_source_subset
+ apply PartialEquiv.restr_eq_of_source_subset
exact interior_maximal h e.open_source
#align local_homeomorph.restr_eq_of_source_subset PartialHomeomorph.restr_eq_of_source_subset
-/
@@ -982,7 +983,7 @@ protected def refl (α : Type _) [TopologicalSpace α] : PartialHomeomorph α α
#print PartialHomeomorph.refl_localEquiv /-
@[simp, mfld_simps]
-theorem refl_localEquiv : (PartialHomeomorph.refl α).toLocalEquiv = LocalEquiv.refl α :=
+theorem refl_localEquiv : (PartialHomeomorph.refl α).toPartialEquiv = PartialEquiv.refl α :=
rfl
#align local_homeomorph.refl_local_equiv PartialHomeomorph.refl_localEquiv
-/
@@ -1002,7 +1003,7 @@ variable {s : Set α} (hs : IsOpen s)
/-- The identity local equiv on a set `s` -/
@[simps (config := mfld_cfg) apply, simps (config := { attrs := [] }) source target]
def ofSet (s : Set α) (hs : IsOpen s) : PartialHomeomorph α α :=
- { LocalEquiv.ofSet s with
+ { PartialEquiv.ofSet s with
open_source := hs
open_target := hs
continuous_toFun := continuous_id.ContinuousOn
@@ -1010,11 +1011,11 @@ def ofSet (s : Set α) (hs : IsOpen s) : PartialHomeomorph α α :=
#align local_homeomorph.of_set PartialHomeomorph.ofSet
-/
-#print PartialHomeomorph.ofSet_toLocalEquiv /-
+#print PartialHomeomorph.ofSet_toPartialEquiv /-
@[simp, mfld_simps]
-theorem ofSet_toLocalEquiv : (ofSet s hs).toLocalEquiv = LocalEquiv.ofSet s :=
+theorem ofSet_toPartialEquiv : (ofSet s hs).toPartialEquiv = PartialEquiv.ofSet s :=
rfl
-#align local_homeomorph.of_set_to_local_equiv PartialHomeomorph.ofSet_toLocalEquiv
+#align local_homeomorph.of_set_to_local_equiv PartialHomeomorph.ofSet_toPartialEquiv
-/
#print PartialHomeomorph.ofSet_symm /-
@@ -1037,7 +1038,7 @@ end
the second coincide. -/
protected def trans' (h : e.target = e'.source) : PartialHomeomorph α γ :=
{
- LocalEquiv.trans' e.toLocalEquiv e'.toLocalEquiv
+ PartialEquiv.trans' e.toPartialEquiv e'.toPartialEquiv
h with
open_source := e.open_source
open_target := e'.open_target
@@ -1061,11 +1062,12 @@ protected def trans : PartialHomeomorph α γ :=
#align local_homeomorph.trans PartialHomeomorph.trans
-/
-#print PartialHomeomorph.trans_toLocalEquiv /-
+#print PartialHomeomorph.trans_toPartialEquiv /-
@[simp, mfld_simps]
-theorem trans_toLocalEquiv : (e.trans e').toLocalEquiv = e.toLocalEquiv.trans e'.toLocalEquiv :=
+theorem trans_toPartialEquiv :
+ (e.trans e').toPartialEquiv = e.toPartialEquiv.trans e'.toPartialEquiv :=
rfl
-#align local_homeomorph.trans_to_local_equiv PartialHomeomorph.trans_toLocalEquiv
+#align local_homeomorph.trans_to_local_equiv PartialHomeomorph.trans_toPartialEquiv
-/
#print PartialHomeomorph.coe_trans /-
@@ -1098,25 +1100,25 @@ theorem trans_symm_eq_symm_trans_symm : (e.trans e').symm = e'.symm.trans e.symm
/- This could be considered as a simp lemma, but there are many situations where it makes something
simple into something more complicated. -/
theorem trans_source : (e.trans e').source = e.source ∩ e ⁻¹' e'.source :=
- LocalEquiv.trans_source e.toLocalEquiv e'.toLocalEquiv
+ PartialEquiv.trans_source e.toPartialEquiv e'.toPartialEquiv
#align local_homeomorph.trans_source PartialHomeomorph.trans_source
-/
#print PartialHomeomorph.trans_source' /-
theorem trans_source' : (e.trans e').source = e.source ∩ e ⁻¹' (e.target ∩ e'.source) :=
- LocalEquiv.trans_source' e.toLocalEquiv e'.toLocalEquiv
+ PartialEquiv.trans_source' e.toPartialEquiv e'.toPartialEquiv
#align local_homeomorph.trans_source' PartialHomeomorph.trans_source'
-/
#print PartialHomeomorph.trans_source'' /-
theorem trans_source'' : (e.trans e').source = e.symm '' (e.target ∩ e'.source) :=
- LocalEquiv.trans_source'' e.toLocalEquiv e'.toLocalEquiv
+ PartialEquiv.trans_source'' e.toPartialEquiv e'.toPartialEquiv
#align local_homeomorph.trans_source'' PartialHomeomorph.trans_source''
-/
#print PartialHomeomorph.image_trans_source /-
theorem image_trans_source : e '' (e.trans e').source = e.target ∩ e'.source :=
- LocalEquiv.image_trans_source e.toLocalEquiv e'.toLocalEquiv
+ PartialEquiv.image_trans_source e.toPartialEquiv e'.toPartialEquiv
#align local_homeomorph.image_trans_source PartialHomeomorph.image_trans_source
-/
@@ -1147,28 +1149,29 @@ theorem inv_image_trans_target : e'.symm '' (e.trans e').target = e'.source ∩
#print PartialHomeomorph.trans_assoc /-
theorem trans_assoc (e'' : PartialHomeomorph γ δ) :
(e.trans e').trans e'' = e.trans (e'.trans e'') :=
- eq_of_localEquiv_eq <| LocalEquiv.trans_assoc e.toLocalEquiv e'.toLocalEquiv e''.toLocalEquiv
+ eq_of_localEquiv_eq <|
+ PartialEquiv.trans_assoc e.toPartialEquiv e'.toPartialEquiv e''.toPartialEquiv
#align local_homeomorph.trans_assoc PartialHomeomorph.trans_assoc
-/
#print PartialHomeomorph.trans_refl /-
@[simp, mfld_simps]
theorem trans_refl : e.trans (PartialHomeomorph.refl β) = e :=
- eq_of_localEquiv_eq <| LocalEquiv.trans_refl e.toLocalEquiv
+ eq_of_localEquiv_eq <| PartialEquiv.trans_refl e.toPartialEquiv
#align local_homeomorph.trans_refl PartialHomeomorph.trans_refl
-/
#print PartialHomeomorph.refl_trans /-
@[simp, mfld_simps]
theorem refl_trans : (PartialHomeomorph.refl α).trans e = e :=
- eq_of_localEquiv_eq <| LocalEquiv.refl_trans e.toLocalEquiv
+ eq_of_localEquiv_eq <| PartialEquiv.refl_trans e.toPartialEquiv
#align local_homeomorph.refl_trans PartialHomeomorph.refl_trans
-/
#print PartialHomeomorph.trans_ofSet /-
theorem trans_ofSet {s : Set β} (hs : IsOpen s) : e.trans (ofSet s hs) = e.restr (e ⁻¹' s) :=
(PartialHomeomorph.ext _ _ (fun x => rfl) fun x => rfl) <| by
- simp [LocalEquiv.trans_source, (e.preimage_interior _).symm, hs.interior_eq]
+ simp [PartialEquiv.trans_source, (e.preimage_interior _).symm, hs.interior_eq]
#align local_homeomorph.trans_of_set PartialHomeomorph.trans_ofSet
-/
@@ -1181,7 +1184,7 @@ theorem trans_of_set' {s : Set β} (hs : IsOpen s) :
#print PartialHomeomorph.ofSet_trans /-
theorem ofSet_trans {s : Set α} (hs : IsOpen s) : (ofSet s hs).trans e = e.restr s :=
(PartialHomeomorph.ext _ _ (fun x => rfl) fun x => rfl) <| by
- simp [LocalEquiv.trans_source, hs.interior_eq, inter_comm]
+ simp [PartialEquiv.trans_source, hs.interior_eq, inter_comm]
#align local_homeomorph.of_set_trans PartialHomeomorph.ofSet_trans
-/
@@ -1203,7 +1206,7 @@ theorem ofSet_trans_ofSet {s : Set α} (hs : IsOpen s) {s' : Set α} (hs' : IsOp
#print PartialHomeomorph.restr_trans /-
theorem restr_trans (s : Set α) : (e.restr s).trans e' = (e.trans e').restr s :=
- eq_of_localEquiv_eq <| LocalEquiv.restr_trans e.toLocalEquiv e'.toLocalEquiv (interior s)
+ eq_of_localEquiv_eq <| PartialEquiv.restr_trans e.toPartialEquiv e'.toPartialEquiv (interior s)
#align local_homeomorph.restr_trans PartialHomeomorph.restr_trans
-/
@@ -1213,7 +1216,7 @@ We modify the source and target to have better definitional behavior. -/
@[simps (config := { fullyApplied := false })]
def transHomeomorph (e' : β ≃ₜ γ) : PartialHomeomorph α γ
where
- toLocalEquiv := e.toLocalEquiv.transEquiv e'.toEquiv
+ toPartialEquiv := e.toPartialEquiv.transEquiv e'.toEquiv
open_source := e.open_source
open_target := e.open_target.Preimage e'.symm.Continuous
continuous_toFun := e'.Continuous.comp_continuousOn e.ContinuousOn
@@ -1224,7 +1227,7 @@ def transHomeomorph (e' : β ≃ₜ γ) : PartialHomeomorph α γ
#print PartialHomeomorph.transHomeomorph_eq_trans /-
theorem transHomeomorph_eq_trans (e' : β ≃ₜ γ) :
e.transHomeomorph e' = e.trans e'.toPartialHomeomorph :=
- toLocalEquiv_injective <| LocalEquiv.transEquiv_eq_trans _ _
+ toPartialEquiv_injective <| PartialEquiv.transEquiv_eq_trans _ _
#align local_homeomorph.trans_equiv_eq_trans PartialHomeomorph.transHomeomorph_eq_trans
-/
@@ -1234,7 +1237,7 @@ We modify the source and target to have better definitional behavior. -/
@[simps (config := { fullyApplied := false })]
def Homeomorph.transPartialHomeomorph (e : α ≃ₜ β) : PartialHomeomorph α γ
where
- toLocalEquiv := e.toEquiv.transLocalEquiv e'.toLocalEquiv
+ toPartialEquiv := e.toEquiv.transPartialEquiv e'.toPartialEquiv
open_source := e'.open_source.Preimage e.Continuous
open_target := e'.open_target
continuous_toFun := e'.ContinuousOn.comp e.Continuous.ContinuousOn fun x h => h
@@ -1245,7 +1248,7 @@ def Homeomorph.transPartialHomeomorph (e : α ≃ₜ β) : PartialHomeomorph α
#print Homeomorph.transPartialHomeomorph_eq_trans /-
theorem Homeomorph.transPartialHomeomorph_eq_trans (e : α ≃ₜ β) :
e.transPartialHomeomorph e' = e.toPartialHomeomorph.trans e' :=
- toLocalEquiv_injective <| Equiv.transLocalEquiv_eq_trans _ _
+ toPartialEquiv_injective <| Equiv.transPartialEquiv_eq_trans _ _
#align homeomorph.trans_local_homeomorph_eq_trans Homeomorph.transPartialHomeomorph_eq_trans
-/
@@ -1259,7 +1262,7 @@ def EqOnSource (e e' : PartialHomeomorph α β) : Prop :=
#print PartialHomeomorph.eqOnSource_iff /-
theorem eqOnSource_iff (e e' : PartialHomeomorph α β) :
- EqOnSource e e' ↔ LocalEquiv.EqOnSource e.toLocalEquiv e'.toLocalEquiv :=
+ EqOnSource e e' ↔ PartialEquiv.EqOnSource e.toPartialEquiv e'.toPartialEquiv :=
Iff.rfl
#align local_homeomorph.eq_on_source_iff PartialHomeomorph.eqOnSource_iff
-/
@@ -1269,9 +1272,10 @@ instance : Setoid (PartialHomeomorph α β)
where
R := EqOnSource
iseqv :=
- ⟨fun e => (@LocalEquiv.eqOnSourceSetoid α β).iseqv.1 e.toLocalEquiv, fun e e' h =>
- (@LocalEquiv.eqOnSourceSetoid α β).iseqv.2.1 ((eqOnSource_iff e e').1 h), fun e e' e'' h h' =>
- (@LocalEquiv.eqOnSourceSetoid α β).iseqv.2.2 ((eqOnSource_iff e e').1 h)
+ ⟨fun e => (@PartialEquiv.eqOnSourceSetoid α β).iseqv.1 e.toPartialEquiv, fun e e' h =>
+ (@PartialEquiv.eqOnSourceSetoid α β).iseqv.2.1 ((eqOnSource_iff e e').1 h),
+ fun e e' e'' h h' =>
+ (@PartialEquiv.eqOnSourceSetoid α β).iseqv.2.2 ((eqOnSource_iff e e').1 h)
((eqOnSource_iff e' e'').1 h')⟩
#print PartialHomeomorph.eqOnSource_refl /-
@@ -1283,7 +1287,7 @@ theorem eqOnSource_refl : e ≈ e :=
#print PartialHomeomorph.EqOnSource.symm' /-
/-- If two local homeomorphisms are equivalent, so are their inverses -/
theorem EqOnSource.symm' {e e' : PartialHomeomorph α β} (h : e ≈ e') : e.symm ≈ e'.symm :=
- LocalEquiv.EqOnSource.symm' h
+ PartialEquiv.EqOnSource.symm' h
#align local_homeomorph.eq_on_source.symm' PartialHomeomorph.EqOnSource.symm'
-/
@@ -1320,7 +1324,7 @@ theorem EqOnSource.symm_eqOn_target {e e' : PartialHomeomorph α β} (h : e ≈
/-- Composition of local homeomorphisms respects equivalence -/
theorem EqOnSource.trans' {e e' : PartialHomeomorph α β} {f f' : PartialHomeomorph β γ}
(he : e ≈ e') (hf : f ≈ f') : e.trans f ≈ e'.trans f' :=
- LocalEquiv.EqOnSource.trans' he hf
+ PartialEquiv.EqOnSource.trans' he hf
#align local_homeomorph.eq_on_source.trans' PartialHomeomorph.EqOnSource.trans'
-/
@@ -1328,7 +1332,7 @@ theorem EqOnSource.trans' {e e' : PartialHomeomorph α β} {f f' : PartialHomeom
/-- Restriction of local homeomorphisms respects equivalence -/
theorem EqOnSource.restr {e e' : PartialHomeomorph α β} (he : e ≈ e') (s : Set α) :
e.restr s ≈ e'.restr s :=
- LocalEquiv.EqOnSource.restr he _
+ PartialEquiv.EqOnSource.restr he _
#align local_homeomorph.eq_on_source.restr PartialHomeomorph.EqOnSource.restr
-/
@@ -1349,7 +1353,7 @@ theorem Set.EqOn.restr_eqOn_source {e e' : PartialHomeomorph α β}
/-- Composition of a local homeomorphism and its inverse is equivalent to the restriction of the
identity to the source -/
theorem trans_self_symm : e.trans e.symm ≈ PartialHomeomorph.ofSet e.source e.open_source :=
- LocalEquiv.trans_self_symm _
+ PartialEquiv.trans_self_symm _
#align local_homeomorph.trans_self_symm PartialHomeomorph.trans_self_symm
-/
@@ -1362,7 +1366,7 @@ theorem trans_symm_self : e.symm.trans e ≈ PartialHomeomorph.ofSet e.target e.
#print PartialHomeomorph.eq_of_eqOnSource_univ /-
theorem eq_of_eqOnSource_univ {e e' : PartialHomeomorph α β} (h : e ≈ e') (s : e.source = univ)
(t : e.target = univ) : e = e' :=
- eq_of_localEquiv_eq <| LocalEquiv.eq_of_eqOnSource_univ _ _ h s t
+ eq_of_localEquiv_eq <| PartialEquiv.eq_of_eqOnSource_univ _ _ h s t
#align local_homeomorph.eq_of_eq_on_source_univ PartialHomeomorph.eq_of_eqOnSource_univ
-/
@@ -1370,7 +1374,7 @@ section Prod
#print PartialHomeomorph.prod /-
/-- The product of two local homeomorphisms, as a local homeomorphism on the product space. -/
-@[simps (config := mfld_cfg) toLocalEquiv apply,
+@[simps (config := mfld_cfg) toPartialEquiv apply,
simps (config := { attrs := [] }) source target symm_apply]
def prod (e : PartialHomeomorph α β) (e' : PartialHomeomorph γ δ) :
PartialHomeomorph (α × γ) (β × δ)
@@ -1379,7 +1383,7 @@ def prod (e : PartialHomeomorph α β) (e' : PartialHomeomorph γ δ) :
open_target := e.open_target.Prod e'.open_target
continuous_toFun := e.ContinuousOn.Prod_map e'.ContinuousOn
continuous_invFun := e.continuousOn_symm.Prod_map e'.continuousOn_symm
- toLocalEquiv := e.toLocalEquiv.Prod e'.toLocalEquiv
+ toPartialEquiv := e.toPartialEquiv.Prod e'.toPartialEquiv
#align local_homeomorph.prod PartialHomeomorph.prod
-/
@@ -1405,7 +1409,7 @@ theorem prod_trans {η : Type _} {ε : Type _} [TopologicalSpace η] [Topologica
(e : PartialHomeomorph α β) (f : PartialHomeomorph β γ) (e' : PartialHomeomorph δ η)
(f' : PartialHomeomorph η ε) : (e.Prod e').trans (f.Prod f') = (e.trans f).Prod (e'.trans f') :=
PartialHomeomorph.eq_of_localEquiv_eq <| by
- dsimp only [trans_to_local_equiv, prod_to_local_equiv] <;> apply LocalEquiv.prod_trans
+ dsimp only [trans_to_local_equiv, prod_to_local_equiv] <;> apply PartialEquiv.prod_trans
#align local_homeomorph.prod_trans PartialHomeomorph.prod_trans
-/
@@ -1444,13 +1448,13 @@ are inverse of each other on the new `source` and `target`, the definition assum
and `t` are related both by `e.is_image` and `e'.is_image`. To ensure that the new maps are
continuous on `source`/`target`, it also assumes that `e.source` and `e'.source` meet `frontier s`
on the same set and `e x = e' x` on this intersection. -/
-@[simps (config := { fullyApplied := false }) toLocalEquiv apply]
+@[simps (config := { fullyApplied := false }) toPartialEquiv apply]
def piecewise (e e' : PartialHomeomorph α β) (s : Set α) (t : Set β) [∀ x, Decidable (x ∈ s)]
[∀ y, Decidable (y ∈ t)] (H : e.IsImage s t) (H' : e'.IsImage s t)
(Hs : e.source ∩ frontier s = e'.source ∩ frontier s)
(Heq : EqOn e e' (e.source ∩ frontier s)) : PartialHomeomorph α β
where
- toLocalEquiv := e.toLocalEquiv.piecewise e'.toLocalEquiv s t H H'
+ toPartialEquiv := e.toPartialEquiv.piecewise e'.toPartialEquiv s t H H'
open_source := e.open_source.ite e'.open_source Hs
open_target :=
e.open_target.ite e'.open_target <| H.frontier.inter_eq_of_inter_eq_of_eqOn H'.frontier Hs Heq
@@ -1487,8 +1491,8 @@ def disjointUnion (e e' : PartialHomeomorph α β) [∀ x, Decidable (x ∈ e.so
(e'.isImage_source_target_of_disjoint e Hs.symm Ht.symm)
(by rw [e.open_source.inter_frontier_eq, (Hs.symm.frontier_right e'.open_source).inter_eq])
(by rw [e.open_source.inter_frontier_eq]; exact eq_on_empty _ _)).replaceEquiv
- (e.toLocalEquiv.disjointUnion e'.toLocalEquiv Hs Ht)
- (LocalEquiv.disjointUnion_eq_piecewise _ _ _ _).symm
+ (e.toPartialEquiv.disjointUnion e'.toPartialEquiv Hs Ht)
+ (PartialEquiv.disjointUnion_eq_piecewise _ _ _ _).symm
#align local_homeomorph.disjoint_union PartialHomeomorph.disjointUnion
-/
@@ -1501,10 +1505,10 @@ variable {ι : Type _} [Fintype ι] {Xi Yi : ι → Type _} [∀ i, TopologicalS
#print PartialHomeomorph.pi /-
/-- The product of a finite family of `local_homeomorph`s. -/
-@[simps toLocalEquiv]
+@[simps toPartialEquiv]
def pi : PartialHomeomorph (∀ i, Xi i) (∀ i, Yi i)
where
- toLocalEquiv := LocalEquiv.pi fun i => (ei i).toLocalEquiv
+ toPartialEquiv := PartialEquiv.pi fun i => (ei i).toPartialEquiv
open_source := isOpen_set_pi finite_univ fun i hi => (ei i).open_source
open_target := isOpen_set_pi finite_univ fun i hi => (ei i).open_target
continuous_toFun :=
@@ -1714,7 +1718,7 @@ theorem symm_toPartialHomeomorph : e.symm.toPartialHomeomorph = e.toPartialHomeo
@[simp, mfld_simps]
theorem trans_toPartialHomeomorph :
(e.trans e').toPartialHomeomorph = e.toPartialHomeomorph.trans e'.toPartialHomeomorph :=
- PartialHomeomorph.eq_of_localEquiv_eq <| Equiv.trans_toLocalEquiv _ _
+ PartialHomeomorph.eq_of_localEquiv_eq <| Equiv.trans_toPartialEquiv _ _
#align homeomorph.trans_to_local_homeomorph Homeomorph.trans_toPartialHomeomorph
-/
@@ -1729,7 +1733,7 @@ variable (f : α → β) (h : OpenEmbedding f)
is all of `α`. The converse is also true; see `local_homeomorph.to_open_embedding`. -/
@[simps (config := mfld_cfg) apply source target]
noncomputable def toPartialHomeomorph [Nonempty α] : PartialHomeomorph α β :=
- PartialHomeomorph.ofContinuousOpen ((h.toEmbedding.inj.InjOn univ).toLocalEquiv _ _)
+ PartialHomeomorph.ofContinuousOpen ((h.toEmbedding.inj.InjOn univ).toPartialEquiv _ _)
h.Continuous.ContinuousOn h.IsOpenMap isOpen_univ
#align open_embedding.to_local_homeomorph OpenEmbedding.toPartialHomeomorph
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -57,443 +57,443 @@ open scoped Topology
variable {α : Type _} {β : Type _} {γ : Type _} {δ : Type _} [TopologicalSpace α]
[TopologicalSpace β] [TopologicalSpace γ] [TopologicalSpace δ]
-#print LocalHomeomorph /-
+#print PartialHomeomorph /-
/-- local homeomorphisms, defined on open subsets of the space -/
@[nolint has_nonempty_instance]
-structure LocalHomeomorph (α : Type _) (β : Type _) [TopologicalSpace α]
+structure PartialHomeomorph (α : Type _) (β : Type _) [TopologicalSpace α]
[TopologicalSpace β] extends LocalEquiv α β where
open_source : IsOpen source
open_target : IsOpen target
continuous_toFun : ContinuousOn to_fun source
continuous_invFun : ContinuousOn inv_fun target
-#align local_homeomorph LocalHomeomorph
+#align local_homeomorph PartialHomeomorph
-/
-namespace LocalHomeomorph
+namespace PartialHomeomorph
-variable (e : LocalHomeomorph α β) (e' : LocalHomeomorph β γ)
+variable (e : PartialHomeomorph α β) (e' : PartialHomeomorph β γ)
-instance : CoeFun (LocalHomeomorph α β) fun _ => α → β :=
+instance : CoeFun (PartialHomeomorph α β) fun _ => α → β :=
⟨fun e => e.toFun⟩
-#print LocalHomeomorph.symm /-
+#print PartialHomeomorph.symm /-
/-- The inverse of a local homeomorphism -/
-protected def symm : LocalHomeomorph β α :=
+protected def symm : PartialHomeomorph β α :=
{ e.toLocalEquiv.symm with
open_source := e.open_target
open_target := e.open_source
continuous_toFun := e.continuous_invFun
continuous_invFun := e.continuous_toFun }
-#align local_homeomorph.symm LocalHomeomorph.symm
+#align local_homeomorph.symm PartialHomeomorph.symm
-/
-#print LocalHomeomorph.Simps.apply /-
+#print PartialHomeomorph.Simps.apply /-
/-- See Note [custom simps projection]. We need to specify this projection explicitly in this case,
because it is a composition of multiple projections. -/
-def Simps.apply (e : LocalHomeomorph α β) : α → β :=
+def Simps.apply (e : PartialHomeomorph α β) : α → β :=
e
-#align local_homeomorph.simps.apply LocalHomeomorph.Simps.apply
+#align local_homeomorph.simps.apply PartialHomeomorph.Simps.apply
-/
-#print LocalHomeomorph.Simps.symm_apply /-
+#print PartialHomeomorph.Simps.symm_apply /-
/-- See Note [custom simps projection] -/
-def Simps.symm_apply (e : LocalHomeomorph α β) : β → α :=
+def Simps.symm_apply (e : PartialHomeomorph α β) : β → α :=
e.symm
-#align local_homeomorph.simps.symm_apply LocalHomeomorph.Simps.symm_apply
+#align local_homeomorph.simps.symm_apply PartialHomeomorph.Simps.symm_apply
-/
-initialize_simps_projections LocalHomeomorph (to_local_equiv_to_fun → apply,
+initialize_simps_projections PartialHomeomorph (to_local_equiv_to_fun → apply,
to_local_equiv_inv_fun → symm_apply, toLocalEquiv_source → source, toLocalEquiv_target → target,
-toLocalEquiv)
-#print LocalHomeomorph.continuousOn /-
+#print PartialHomeomorph.continuousOn /-
protected theorem continuousOn : ContinuousOn e e.source :=
e.continuous_toFun
-#align local_homeomorph.continuous_on LocalHomeomorph.continuousOn
+#align local_homeomorph.continuous_on PartialHomeomorph.continuousOn
-/
-#print LocalHomeomorph.continuousOn_symm /-
+#print PartialHomeomorph.continuousOn_symm /-
theorem continuousOn_symm : ContinuousOn e.symm e.target :=
e.continuous_invFun
-#align local_homeomorph.continuous_on_symm LocalHomeomorph.continuousOn_symm
+#align local_homeomorph.continuous_on_symm PartialHomeomorph.continuousOn_symm
-/
-#print LocalHomeomorph.mk_coe /-
+#print PartialHomeomorph.mk_coe /-
@[simp, mfld_simps]
-theorem mk_coe (e : LocalEquiv α β) (a b c d) : (LocalHomeomorph.mk e a b c d : α → β) = e :=
+theorem mk_coe (e : LocalEquiv α β) (a b c d) : (PartialHomeomorph.mk e a b c d : α → β) = e :=
rfl
-#align local_homeomorph.mk_coe LocalHomeomorph.mk_coe
+#align local_homeomorph.mk_coe PartialHomeomorph.mk_coe
-/
-#print LocalHomeomorph.mk_coe_symm /-
+#print PartialHomeomorph.mk_coe_symm /-
@[simp, mfld_simps]
theorem mk_coe_symm (e : LocalEquiv α β) (a b c d) :
- ((LocalHomeomorph.mk e a b c d).symm : β → α) = e.symm :=
+ ((PartialHomeomorph.mk e a b c d).symm : β → α) = e.symm :=
rfl
-#align local_homeomorph.mk_coe_symm LocalHomeomorph.mk_coe_symm
+#align local_homeomorph.mk_coe_symm PartialHomeomorph.mk_coe_symm
-/
-#print LocalHomeomorph.toLocalEquiv_injective /-
-theorem toLocalEquiv_injective : Injective (toLocalEquiv : LocalHomeomorph α β → LocalEquiv α β)
+#print PartialHomeomorph.toLocalEquiv_injective /-
+theorem toLocalEquiv_injective : Injective (toLocalEquiv : PartialHomeomorph α β → LocalEquiv α β)
| ⟨e, h₁, h₂, h₃, h₄⟩, ⟨e', h₁', h₂', h₃', h₄'⟩, rfl => rfl
-#align local_homeomorph.to_local_equiv_injective LocalHomeomorph.toLocalEquiv_injective
+#align local_homeomorph.to_local_equiv_injective PartialHomeomorph.toLocalEquiv_injective
-/
-#print LocalHomeomorph.toFun_eq_coe /-
+#print PartialHomeomorph.toFun_eq_coe /-
/- Register a few simp lemmas to make sure that `simp` puts the application of a local
homeomorphism in its normal form, i.e., in terms of its coercion to a function. -/
@[simp, mfld_simps]
-theorem toFun_eq_coe (e : LocalHomeomorph α β) : e.toFun = e :=
+theorem toFun_eq_coe (e : PartialHomeomorph α β) : e.toFun = e :=
rfl
-#align local_homeomorph.to_fun_eq_coe LocalHomeomorph.toFun_eq_coe
+#align local_homeomorph.to_fun_eq_coe PartialHomeomorph.toFun_eq_coe
-/
-#print LocalHomeomorph.invFun_eq_coe /-
+#print PartialHomeomorph.invFun_eq_coe /-
@[simp, mfld_simps]
-theorem invFun_eq_coe (e : LocalHomeomorph α β) : e.invFun = e.symm :=
+theorem invFun_eq_coe (e : PartialHomeomorph α β) : e.invFun = e.symm :=
rfl
-#align local_homeomorph.inv_fun_eq_coe LocalHomeomorph.invFun_eq_coe
+#align local_homeomorph.inv_fun_eq_coe PartialHomeomorph.invFun_eq_coe
-/
-#print LocalHomeomorph.coe_coe /-
+#print PartialHomeomorph.coe_coe /-
@[simp, mfld_simps]
theorem coe_coe : (e.toLocalEquiv : α → β) = e :=
rfl
-#align local_homeomorph.coe_coe LocalHomeomorph.coe_coe
+#align local_homeomorph.coe_coe PartialHomeomorph.coe_coe
-/
-#print LocalHomeomorph.coe_coe_symm /-
+#print PartialHomeomorph.coe_coe_symm /-
@[simp, mfld_simps]
theorem coe_coe_symm : (e.toLocalEquiv.symm : β → α) = e.symm :=
rfl
-#align local_homeomorph.coe_coe_symm LocalHomeomorph.coe_coe_symm
+#align local_homeomorph.coe_coe_symm PartialHomeomorph.coe_coe_symm
-/
-#print LocalHomeomorph.map_source /-
+#print PartialHomeomorph.map_source /-
@[simp, mfld_simps]
theorem map_source {x : α} (h : x ∈ e.source) : e x ∈ e.target :=
e.map_source' h
-#align local_homeomorph.map_source LocalHomeomorph.map_source
+#align local_homeomorph.map_source PartialHomeomorph.map_source
-/
-#print LocalHomeomorph.map_target /-
+#print PartialHomeomorph.map_target /-
@[simp, mfld_simps]
theorem map_target {x : β} (h : x ∈ e.target) : e.symm x ∈ e.source :=
e.map_target' h
-#align local_homeomorph.map_target LocalHomeomorph.map_target
+#align local_homeomorph.map_target PartialHomeomorph.map_target
-/
-#print LocalHomeomorph.left_inv /-
+#print PartialHomeomorph.left_inv /-
@[simp, mfld_simps]
theorem left_inv {x : α} (h : x ∈ e.source) : e.symm (e x) = x :=
e.left_inv' h
-#align local_homeomorph.left_inv LocalHomeomorph.left_inv
+#align local_homeomorph.left_inv PartialHomeomorph.left_inv
-/
-#print LocalHomeomorph.right_inv /-
+#print PartialHomeomorph.right_inv /-
@[simp, mfld_simps]
theorem right_inv {x : β} (h : x ∈ e.target) : e (e.symm x) = x :=
e.right_inv' h
-#align local_homeomorph.right_inv LocalHomeomorph.right_inv
+#align local_homeomorph.right_inv PartialHomeomorph.right_inv
-/
-#print LocalHomeomorph.eq_symm_apply /-
+#print PartialHomeomorph.eq_symm_apply /-
theorem eq_symm_apply {x : α} {y : β} (hx : x ∈ e.source) (hy : y ∈ e.target) :
x = e.symm y ↔ e x = y :=
e.toLocalEquiv.eq_symm_apply hx hy
-#align local_homeomorph.eq_symm_apply LocalHomeomorph.eq_symm_apply
+#align local_homeomorph.eq_symm_apply PartialHomeomorph.eq_symm_apply
-/
-#print LocalHomeomorph.mapsTo /-
+#print PartialHomeomorph.mapsTo /-
protected theorem mapsTo : MapsTo e e.source e.target := fun x => e.map_source
-#align local_homeomorph.maps_to LocalHomeomorph.mapsTo
+#align local_homeomorph.maps_to PartialHomeomorph.mapsTo
-/
-#print LocalHomeomorph.symm_mapsTo /-
+#print PartialHomeomorph.symm_mapsTo /-
protected theorem symm_mapsTo : MapsTo e.symm e.target e.source :=
e.symm.MapsTo
-#align local_homeomorph.symm_maps_to LocalHomeomorph.symm_mapsTo
+#align local_homeomorph.symm_maps_to PartialHomeomorph.symm_mapsTo
-/
-#print LocalHomeomorph.leftInvOn /-
+#print PartialHomeomorph.leftInvOn /-
protected theorem leftInvOn : LeftInvOn e.symm e e.source := fun x => e.left_inv
-#align local_homeomorph.left_inv_on LocalHomeomorph.leftInvOn
+#align local_homeomorph.left_inv_on PartialHomeomorph.leftInvOn
-/
-#print LocalHomeomorph.rightInvOn /-
+#print PartialHomeomorph.rightInvOn /-
protected theorem rightInvOn : RightInvOn e.symm e e.target := fun x => e.right_inv
-#align local_homeomorph.right_inv_on LocalHomeomorph.rightInvOn
+#align local_homeomorph.right_inv_on PartialHomeomorph.rightInvOn
-/
-#print LocalHomeomorph.invOn /-
+#print PartialHomeomorph.invOn /-
protected theorem invOn : InvOn e.symm e e.source e.target :=
⟨e.LeftInvOn, e.RightInvOn⟩
-#align local_homeomorph.inv_on LocalHomeomorph.invOn
+#align local_homeomorph.inv_on PartialHomeomorph.invOn
-/
-#print LocalHomeomorph.injOn /-
+#print PartialHomeomorph.injOn /-
protected theorem injOn : InjOn e e.source :=
e.LeftInvOn.InjOn
-#align local_homeomorph.inj_on LocalHomeomorph.injOn
+#align local_homeomorph.inj_on PartialHomeomorph.injOn
-/
-#print LocalHomeomorph.bijOn /-
+#print PartialHomeomorph.bijOn /-
protected theorem bijOn : BijOn e e.source e.target :=
e.InvOn.BijOn e.MapsTo e.symm_mapsTo
-#align local_homeomorph.bij_on LocalHomeomorph.bijOn
+#align local_homeomorph.bij_on PartialHomeomorph.bijOn
-/
-#print LocalHomeomorph.surjOn /-
+#print PartialHomeomorph.surjOn /-
protected theorem surjOn : SurjOn e e.source e.target :=
e.BijOn.SurjOn
-#align local_homeomorph.surj_on LocalHomeomorph.surjOn
+#align local_homeomorph.surj_on PartialHomeomorph.surjOn
-/
-#print Homeomorph.toLocalHomeomorph /-
+#print Homeomorph.toPartialHomeomorph /-
/-- A homeomorphism induces a local homeomorphism on the whole space -/
@[simps (config := { mfld_cfg with simpRhs := true })]
-def Homeomorph.toLocalHomeomorph (e : α ≃ₜ β) : LocalHomeomorph α β :=
+def Homeomorph.toPartialHomeomorph (e : α ≃ₜ β) : PartialHomeomorph α β :=
{ e.toEquiv.toLocalEquiv with
open_source := isOpen_univ
open_target := isOpen_univ
continuous_toFun := by erw [← continuous_iff_continuousOn_univ]; exact e.continuous_to_fun
continuous_invFun := by erw [← continuous_iff_continuousOn_univ]; exact e.continuous_inv_fun }
-#align homeomorph.to_local_homeomorph Homeomorph.toLocalHomeomorph
+#align homeomorph.to_local_homeomorph Homeomorph.toPartialHomeomorph
-/
-#print LocalHomeomorph.replaceEquiv /-
+#print PartialHomeomorph.replaceEquiv /-
/-- Replace `to_local_equiv` field to provide better definitional equalities. -/
-def replaceEquiv (e : LocalHomeomorph α β) (e' : LocalEquiv α β) (h : e.toLocalEquiv = e') :
- LocalHomeomorph α β where
+def replaceEquiv (e : PartialHomeomorph α β) (e' : LocalEquiv α β) (h : e.toLocalEquiv = e') :
+ PartialHomeomorph α β where
toLocalEquiv := e'
open_source := h ▸ e.open_source
open_target := h ▸ e.open_target
continuous_toFun := h ▸ e.continuous_toFun
continuous_invFun := h ▸ e.continuous_invFun
-#align local_homeomorph.replace_equiv LocalHomeomorph.replaceEquiv
+#align local_homeomorph.replace_equiv PartialHomeomorph.replaceEquiv
-/
-#print LocalHomeomorph.replaceEquiv_eq_self /-
-theorem replaceEquiv_eq_self (e : LocalHomeomorph α β) (e' : LocalEquiv α β)
+#print PartialHomeomorph.replaceEquiv_eq_self /-
+theorem replaceEquiv_eq_self (e : PartialHomeomorph α β) (e' : LocalEquiv α β)
(h : e.toLocalEquiv = e') : e.replaceEquiv e' h = e := by cases e; subst e'; rfl
-#align local_homeomorph.replace_equiv_eq_self LocalHomeomorph.replaceEquiv_eq_self
+#align local_homeomorph.replace_equiv_eq_self PartialHomeomorph.replaceEquiv_eq_self
-/
-#print LocalHomeomorph.source_preimage_target /-
+#print PartialHomeomorph.source_preimage_target /-
theorem source_preimage_target : e.source ⊆ e ⁻¹' e.target :=
e.MapsTo
-#align local_homeomorph.source_preimage_target LocalHomeomorph.source_preimage_target
+#align local_homeomorph.source_preimage_target PartialHomeomorph.source_preimage_target
-/
-#print LocalHomeomorph.eq_of_localEquiv_eq /-
-theorem eq_of_localEquiv_eq {e e' : LocalHomeomorph α β} (h : e.toLocalEquiv = e'.toLocalEquiv) :
+#print PartialHomeomorph.eq_of_localEquiv_eq /-
+theorem eq_of_localEquiv_eq {e e' : PartialHomeomorph α β} (h : e.toLocalEquiv = e'.toLocalEquiv) :
e = e' := by cases e; cases e'; cases h; rfl
-#align local_homeomorph.eq_of_local_equiv_eq LocalHomeomorph.eq_of_localEquiv_eq
+#align local_homeomorph.eq_of_local_equiv_eq PartialHomeomorph.eq_of_localEquiv_eq
-/
-#print LocalHomeomorph.eventually_left_inverse /-
-theorem eventually_left_inverse (e : LocalHomeomorph α β) {x} (hx : x ∈ e.source) :
+#print PartialHomeomorph.eventually_left_inverse /-
+theorem eventually_left_inverse (e : PartialHomeomorph α β) {x} (hx : x ∈ e.source) :
∀ᶠ y in 𝓝 x, e.symm (e y) = y :=
(e.open_source.eventually_mem hx).mono e.left_inv'
-#align local_homeomorph.eventually_left_inverse LocalHomeomorph.eventually_left_inverse
+#align local_homeomorph.eventually_left_inverse PartialHomeomorph.eventually_left_inverse
-/
-#print LocalHomeomorph.eventually_left_inverse' /-
-theorem eventually_left_inverse' (e : LocalHomeomorph α β) {x} (hx : x ∈ e.target) :
+#print PartialHomeomorph.eventually_left_inverse' /-
+theorem eventually_left_inverse' (e : PartialHomeomorph α β) {x} (hx : x ∈ e.target) :
∀ᶠ y in 𝓝 (e.symm x), e.symm (e y) = y :=
e.eventually_left_inverse (e.map_target hx)
-#align local_homeomorph.eventually_left_inverse' LocalHomeomorph.eventually_left_inverse'
+#align local_homeomorph.eventually_left_inverse' PartialHomeomorph.eventually_left_inverse'
-/
-#print LocalHomeomorph.eventually_right_inverse /-
-theorem eventually_right_inverse (e : LocalHomeomorph α β) {x} (hx : x ∈ e.target) :
+#print PartialHomeomorph.eventually_right_inverse /-
+theorem eventually_right_inverse (e : PartialHomeomorph α β) {x} (hx : x ∈ e.target) :
∀ᶠ y in 𝓝 x, e (e.symm y) = y :=
(e.open_target.eventually_mem hx).mono e.right_inv'
-#align local_homeomorph.eventually_right_inverse LocalHomeomorph.eventually_right_inverse
+#align local_homeomorph.eventually_right_inverse PartialHomeomorph.eventually_right_inverse
-/
-#print LocalHomeomorph.eventually_right_inverse' /-
-theorem eventually_right_inverse' (e : LocalHomeomorph α β) {x} (hx : x ∈ e.source) :
+#print PartialHomeomorph.eventually_right_inverse' /-
+theorem eventually_right_inverse' (e : PartialHomeomorph α β) {x} (hx : x ∈ e.source) :
∀ᶠ y in 𝓝 (e x), e (e.symm y) = y :=
e.eventually_right_inverse (e.map_source hx)
-#align local_homeomorph.eventually_right_inverse' LocalHomeomorph.eventually_right_inverse'
+#align local_homeomorph.eventually_right_inverse' PartialHomeomorph.eventually_right_inverse'
-/
-#print LocalHomeomorph.eventually_ne_nhdsWithin /-
-theorem eventually_ne_nhdsWithin (e : LocalHomeomorph α β) {x} (hx : x ∈ e.source) :
+#print PartialHomeomorph.eventually_ne_nhdsWithin /-
+theorem eventually_ne_nhdsWithin (e : PartialHomeomorph α β) {x} (hx : x ∈ e.source) :
∀ᶠ x' in 𝓝[≠] x, e x' ≠ e x :=
eventually_nhdsWithin_iff.2 <|
(e.eventually_left_inverse hx).mono fun x' hx' =>
mt fun h => by rw [mem_singleton_iff, ← e.left_inv hx, ← h, hx']
-#align local_homeomorph.eventually_ne_nhds_within LocalHomeomorph.eventually_ne_nhdsWithin
+#align local_homeomorph.eventually_ne_nhds_within PartialHomeomorph.eventually_ne_nhdsWithin
-/
-#print LocalHomeomorph.nhdsWithin_source_inter /-
+#print PartialHomeomorph.nhdsWithin_source_inter /-
theorem nhdsWithin_source_inter {x} (hx : x ∈ e.source) (s : Set α) : 𝓝[e.source ∩ s] x = 𝓝[s] x :=
nhdsWithin_inter_of_mem (mem_nhdsWithin_of_mem_nhds <| IsOpen.mem_nhds e.open_source hx)
-#align local_homeomorph.nhds_within_source_inter LocalHomeomorph.nhdsWithin_source_inter
+#align local_homeomorph.nhds_within_source_inter PartialHomeomorph.nhdsWithin_source_inter
-/
-#print LocalHomeomorph.nhdsWithin_target_inter /-
+#print PartialHomeomorph.nhdsWithin_target_inter /-
theorem nhdsWithin_target_inter {x} (hx : x ∈ e.target) (s : Set β) : 𝓝[e.target ∩ s] x = 𝓝[s] x :=
e.symm.nhdsWithin_source_inter hx s
-#align local_homeomorph.nhds_within_target_inter LocalHomeomorph.nhdsWithin_target_inter
+#align local_homeomorph.nhds_within_target_inter PartialHomeomorph.nhdsWithin_target_inter
-/
-#print LocalHomeomorph.image_eq_target_inter_inv_preimage /-
+#print PartialHomeomorph.image_eq_target_inter_inv_preimage /-
theorem image_eq_target_inter_inv_preimage {s : Set α} (h : s ⊆ e.source) :
e '' s = e.target ∩ e.symm ⁻¹' s :=
e.toLocalEquiv.image_eq_target_inter_inv_preimage h
-#align local_homeomorph.image_eq_target_inter_inv_preimage LocalHomeomorph.image_eq_target_inter_inv_preimage
+#align local_homeomorph.image_eq_target_inter_inv_preimage PartialHomeomorph.image_eq_target_inter_inv_preimage
-/
-#print LocalHomeomorph.image_source_inter_eq' /-
+#print PartialHomeomorph.image_source_inter_eq' /-
theorem image_source_inter_eq' (s : Set α) : e '' (e.source ∩ s) = e.target ∩ e.symm ⁻¹' s :=
e.toLocalEquiv.image_source_inter_eq' s
-#align local_homeomorph.image_source_inter_eq' LocalHomeomorph.image_source_inter_eq'
+#align local_homeomorph.image_source_inter_eq' PartialHomeomorph.image_source_inter_eq'
-/
-#print LocalHomeomorph.image_source_inter_eq /-
+#print PartialHomeomorph.image_source_inter_eq /-
theorem image_source_inter_eq (s : Set α) :
e '' (e.source ∩ s) = e.target ∩ e.symm ⁻¹' (e.source ∩ s) :=
e.toLocalEquiv.image_source_inter_eq s
-#align local_homeomorph.image_source_inter_eq LocalHomeomorph.image_source_inter_eq
+#align local_homeomorph.image_source_inter_eq PartialHomeomorph.image_source_inter_eq
-/
-#print LocalHomeomorph.symm_image_eq_source_inter_preimage /-
+#print PartialHomeomorph.symm_image_eq_source_inter_preimage /-
theorem symm_image_eq_source_inter_preimage {s : Set β} (h : s ⊆ e.target) :
e.symm '' s = e.source ∩ e ⁻¹' s :=
e.symm.image_eq_target_inter_inv_preimage h
-#align local_homeomorph.symm_image_eq_source_inter_preimage LocalHomeomorph.symm_image_eq_source_inter_preimage
+#align local_homeomorph.symm_image_eq_source_inter_preimage PartialHomeomorph.symm_image_eq_source_inter_preimage
-/
-#print LocalHomeomorph.symm_image_target_inter_eq /-
+#print PartialHomeomorph.symm_image_target_inter_eq /-
theorem symm_image_target_inter_eq (s : Set β) :
e.symm '' (e.target ∩ s) = e.source ∩ e ⁻¹' (e.target ∩ s) :=
e.symm.image_source_inter_eq _
-#align local_homeomorph.symm_image_target_inter_eq LocalHomeomorph.symm_image_target_inter_eq
+#align local_homeomorph.symm_image_target_inter_eq PartialHomeomorph.symm_image_target_inter_eq
-/
-#print LocalHomeomorph.source_inter_preimage_inv_preimage /-
+#print PartialHomeomorph.source_inter_preimage_inv_preimage /-
theorem source_inter_preimage_inv_preimage (s : Set α) :
e.source ∩ e ⁻¹' (e.symm ⁻¹' s) = e.source ∩ s :=
e.toLocalEquiv.source_inter_preimage_inv_preimage s
-#align local_homeomorph.source_inter_preimage_inv_preimage LocalHomeomorph.source_inter_preimage_inv_preimage
+#align local_homeomorph.source_inter_preimage_inv_preimage PartialHomeomorph.source_inter_preimage_inv_preimage
-/
-#print LocalHomeomorph.target_inter_inv_preimage_preimage /-
+#print PartialHomeomorph.target_inter_inv_preimage_preimage /-
theorem target_inter_inv_preimage_preimage (s : Set β) :
e.target ∩ e.symm ⁻¹' (e ⁻¹' s) = e.target ∩ s :=
e.symm.source_inter_preimage_inv_preimage _
-#align local_homeomorph.target_inter_inv_preimage_preimage LocalHomeomorph.target_inter_inv_preimage_preimage
+#align local_homeomorph.target_inter_inv_preimage_preimage PartialHomeomorph.target_inter_inv_preimage_preimage
-/
-#print LocalHomeomorph.source_inter_preimage_target_inter /-
+#print PartialHomeomorph.source_inter_preimage_target_inter /-
theorem source_inter_preimage_target_inter (s : Set β) :
e.source ∩ e ⁻¹' (e.target ∩ s) = e.source ∩ e ⁻¹' s :=
e.toLocalEquiv.source_inter_preimage_target_inter s
-#align local_homeomorph.source_inter_preimage_target_inter LocalHomeomorph.source_inter_preimage_target_inter
+#align local_homeomorph.source_inter_preimage_target_inter PartialHomeomorph.source_inter_preimage_target_inter
-/
-#print LocalHomeomorph.image_source_eq_target /-
-theorem image_source_eq_target (e : LocalHomeomorph α β) : e '' e.source = e.target :=
+#print PartialHomeomorph.image_source_eq_target /-
+theorem image_source_eq_target (e : PartialHomeomorph α β) : e '' e.source = e.target :=
e.toLocalEquiv.image_source_eq_target
-#align local_homeomorph.image_source_eq_target LocalHomeomorph.image_source_eq_target
+#align local_homeomorph.image_source_eq_target PartialHomeomorph.image_source_eq_target
-/
-#print LocalHomeomorph.symm_image_target_eq_source /-
-theorem symm_image_target_eq_source (e : LocalHomeomorph α β) : e.symm '' e.target = e.source :=
+#print PartialHomeomorph.symm_image_target_eq_source /-
+theorem symm_image_target_eq_source (e : PartialHomeomorph α β) : e.symm '' e.target = e.source :=
e.symm.image_source_eq_target
-#align local_homeomorph.symm_image_target_eq_source LocalHomeomorph.symm_image_target_eq_source
+#align local_homeomorph.symm_image_target_eq_source PartialHomeomorph.symm_image_target_eq_source
-/
-#print LocalHomeomorph.ext /-
+#print PartialHomeomorph.ext /-
/-- Two local homeomorphisms are equal when they have equal `to_fun`, `inv_fun` and `source`.
It is not sufficient to have equal `to_fun` and `source`, as this only determines `inv_fun` on
the target. This would only be true for a weaker notion of equality, arguably the right one,
called `eq_on_source`. -/
@[ext]
-protected theorem ext (e' : LocalHomeomorph α β) (h : ∀ x, e x = e' x)
+protected theorem ext (e' : PartialHomeomorph α β) (h : ∀ x, e x = e' x)
(hinv : ∀ x, e.symm x = e'.symm x) (hs : e.source = e'.source) : e = e' :=
eq_of_localEquiv_eq (LocalEquiv.ext h hinv hs)
-#align local_homeomorph.ext LocalHomeomorph.ext
+#align local_homeomorph.ext PartialHomeomorph.ext
-/
-#print LocalHomeomorph.ext_iff /-
-protected theorem ext_iff {e e' : LocalHomeomorph α β} :
+#print PartialHomeomorph.ext_iff /-
+protected theorem ext_iff {e e' : PartialHomeomorph α β} :
e = e' ↔ (∀ x, e x = e' x) ∧ (∀ x, e.symm x = e'.symm x) ∧ e.source = e'.source :=
⟨by rintro rfl; exact ⟨fun x => rfl, fun x => rfl, rfl⟩, fun h => e.ext e' h.1 h.2.1 h.2.2⟩
-#align local_homeomorph.ext_iff LocalHomeomorph.ext_iff
+#align local_homeomorph.ext_iff PartialHomeomorph.ext_iff
-/
-#print LocalHomeomorph.symm_toLocalEquiv /-
+#print PartialHomeomorph.symm_toLocalEquiv /-
@[simp, mfld_simps]
theorem symm_toLocalEquiv : e.symm.toLocalEquiv = e.toLocalEquiv.symm :=
rfl
-#align local_homeomorph.symm_to_local_equiv LocalHomeomorph.symm_toLocalEquiv
+#align local_homeomorph.symm_to_local_equiv PartialHomeomorph.symm_toLocalEquiv
-/
-#print LocalHomeomorph.symm_source /-
+#print PartialHomeomorph.symm_source /-
-- The following lemmas are already simp via local_equiv
theorem symm_source : e.symm.source = e.target :=
rfl
-#align local_homeomorph.symm_source LocalHomeomorph.symm_source
+#align local_homeomorph.symm_source PartialHomeomorph.symm_source
-/
-#print LocalHomeomorph.symm_target /-
+#print PartialHomeomorph.symm_target /-
theorem symm_target : e.symm.target = e.source :=
rfl
-#align local_homeomorph.symm_target LocalHomeomorph.symm_target
+#align local_homeomorph.symm_target PartialHomeomorph.symm_target
-/
-#print LocalHomeomorph.symm_symm /-
+#print PartialHomeomorph.symm_symm /-
@[simp, mfld_simps]
theorem symm_symm : e.symm.symm = e :=
eq_of_localEquiv_eq <| by simp
-#align local_homeomorph.symm_symm LocalHomeomorph.symm_symm
+#align local_homeomorph.symm_symm PartialHomeomorph.symm_symm
-/
-#print LocalHomeomorph.continuousAt /-
+#print PartialHomeomorph.continuousAt /-
/-- A local homeomorphism is continuous at any point of its source -/
protected theorem continuousAt {x : α} (h : x ∈ e.source) : ContinuousAt e x :=
(e.ContinuousOn x h).ContinuousAt (e.open_source.mem_nhds h)
-#align local_homeomorph.continuous_at LocalHomeomorph.continuousAt
+#align local_homeomorph.continuous_at PartialHomeomorph.continuousAt
-/
-#print LocalHomeomorph.continuousAt_symm /-
+#print PartialHomeomorph.continuousAt_symm /-
/-- A local homeomorphism inverse is continuous at any point of its target -/
theorem continuousAt_symm {x : β} (h : x ∈ e.target) : ContinuousAt e.symm x :=
e.symm.ContinuousAt h
-#align local_homeomorph.continuous_at_symm LocalHomeomorph.continuousAt_symm
+#align local_homeomorph.continuous_at_symm PartialHomeomorph.continuousAt_symm
-/
-#print LocalHomeomorph.tendsto_symm /-
+#print PartialHomeomorph.tendsto_symm /-
theorem tendsto_symm {x} (hx : x ∈ e.source) : Tendsto e.symm (𝓝 (e x)) (𝓝 x) := by
simpa only [ContinuousAt, e.left_inv hx] using e.continuous_at_symm (e.map_source hx)
-#align local_homeomorph.tendsto_symm LocalHomeomorph.tendsto_symm
+#align local_homeomorph.tendsto_symm PartialHomeomorph.tendsto_symm
-/
-#print LocalHomeomorph.map_nhds_eq /-
+#print PartialHomeomorph.map_nhds_eq /-
theorem map_nhds_eq {x} (hx : x ∈ e.source) : map e (𝓝 x) = 𝓝 (e x) :=
le_antisymm (e.ContinuousAt hx) <|
le_map_of_right_inverse (e.eventually_right_inverse' hx) (e.tendsto_symm hx)
-#align local_homeomorph.map_nhds_eq LocalHomeomorph.map_nhds_eq
+#align local_homeomorph.map_nhds_eq PartialHomeomorph.map_nhds_eq
-/
-#print LocalHomeomorph.symm_map_nhds_eq /-
+#print PartialHomeomorph.symm_map_nhds_eq /-
theorem symm_map_nhds_eq {x} (hx : x ∈ e.source) : map e.symm (𝓝 (e x)) = 𝓝 x :=
(e.symm.map_nhds_eq <| e.map_source hx).trans <| by rw [e.left_inv hx]
-#align local_homeomorph.symm_map_nhds_eq LocalHomeomorph.symm_map_nhds_eq
+#align local_homeomorph.symm_map_nhds_eq PartialHomeomorph.symm_map_nhds_eq
-/
-#print LocalHomeomorph.image_mem_nhds /-
+#print PartialHomeomorph.image_mem_nhds /-
theorem image_mem_nhds {x} (hx : x ∈ e.source) {s : Set α} (hs : s ∈ 𝓝 x) : e '' s ∈ 𝓝 (e x) :=
e.map_nhds_eq hx ▸ Filter.image_mem_map hs
-#align local_homeomorph.image_mem_nhds LocalHomeomorph.image_mem_nhds
+#align local_homeomorph.image_mem_nhds PartialHomeomorph.image_mem_nhds
-/
-#print LocalHomeomorph.map_nhdsWithin_eq /-
-theorem map_nhdsWithin_eq (e : LocalHomeomorph α β) {x} (hx : x ∈ e.source) (s : Set α) :
+#print PartialHomeomorph.map_nhdsWithin_eq /-
+theorem map_nhdsWithin_eq (e : PartialHomeomorph α β) {x} (hx : x ∈ e.source) (s : Set α) :
map e (𝓝[s] x) = 𝓝[e '' (e.source ∩ s)] e x :=
calc
map e (𝓝[s] x) = map e (𝓝[e.source ∩ s] x) :=
@@ -502,45 +502,45 @@ theorem map_nhdsWithin_eq (e : LocalHomeomorph α β) {x} (hx : x ∈ e.source)
(e.LeftInvOn.mono <| inter_subset_left _ _).map_nhdsWithin_eq (e.left_inv hx)
(e.continuousAt_symm (e.map_source hx)).ContinuousWithinAt
(e.ContinuousAt hx).ContinuousWithinAt
-#align local_homeomorph.map_nhds_within_eq LocalHomeomorph.map_nhdsWithin_eq
+#align local_homeomorph.map_nhds_within_eq PartialHomeomorph.map_nhdsWithin_eq
-/
-#print LocalHomeomorph.map_nhdsWithin_preimage_eq /-
-theorem map_nhdsWithin_preimage_eq (e : LocalHomeomorph α β) {x} (hx : x ∈ e.source) (s : Set β) :
+#print PartialHomeomorph.map_nhdsWithin_preimage_eq /-
+theorem map_nhdsWithin_preimage_eq (e : PartialHomeomorph α β) {x} (hx : x ∈ e.source) (s : Set β) :
map e (𝓝[e ⁻¹' s] x) = 𝓝[s] e x := by
rw [e.map_nhds_within_eq hx, e.image_source_inter_eq', e.target_inter_inv_preimage_preimage,
e.nhds_within_target_inter (e.map_source hx)]
-#align local_homeomorph.map_nhds_within_preimage_eq LocalHomeomorph.map_nhdsWithin_preimage_eq
+#align local_homeomorph.map_nhds_within_preimage_eq PartialHomeomorph.map_nhdsWithin_preimage_eq
-/
-#print LocalHomeomorph.eventually_nhds /-
-theorem eventually_nhds (e : LocalHomeomorph α β) {x : α} (p : β → Prop) (hx : x ∈ e.source) :
+#print PartialHomeomorph.eventually_nhds /-
+theorem eventually_nhds (e : PartialHomeomorph α β) {x : α} (p : β → Prop) (hx : x ∈ e.source) :
(∀ᶠ y in 𝓝 (e x), p y) ↔ ∀ᶠ x in 𝓝 x, p (e x) :=
Iff.trans (by rw [e.map_nhds_eq hx]) eventually_map
-#align local_homeomorph.eventually_nhds LocalHomeomorph.eventually_nhds
+#align local_homeomorph.eventually_nhds PartialHomeomorph.eventually_nhds
-/
-#print LocalHomeomorph.eventually_nhds' /-
-theorem eventually_nhds' (e : LocalHomeomorph α β) {x : α} (p : α → Prop) (hx : x ∈ e.source) :
+#print PartialHomeomorph.eventually_nhds' /-
+theorem eventually_nhds' (e : PartialHomeomorph α β) {x : α} (p : α → Prop) (hx : x ∈ e.source) :
(∀ᶠ y in 𝓝 (e x), p (e.symm y)) ↔ ∀ᶠ x in 𝓝 x, p x :=
by
rw [e.eventually_nhds _ hx]
refine' eventually_congr ((e.eventually_left_inverse hx).mono fun y hy => _)
rw [hy]
-#align local_homeomorph.eventually_nhds' LocalHomeomorph.eventually_nhds'
+#align local_homeomorph.eventually_nhds' PartialHomeomorph.eventually_nhds'
-/
-#print LocalHomeomorph.eventually_nhdsWithin /-
-theorem eventually_nhdsWithin (e : LocalHomeomorph α β) {x : α} (p : β → Prop) {s : Set α}
+#print PartialHomeomorph.eventually_nhdsWithin /-
+theorem eventually_nhdsWithin (e : PartialHomeomorph α β) {x : α} (p : β → Prop) {s : Set α}
(hx : x ∈ e.source) : (∀ᶠ y in 𝓝[e.symm ⁻¹' s] e x, p y) ↔ ∀ᶠ x in 𝓝[s] x, p (e x) :=
by
refine' Iff.trans _ eventually_map
rw [e.map_nhds_within_eq hx, e.image_source_inter_eq', e.nhds_within_target_inter (e.maps_to hx)]
-#align local_homeomorph.eventually_nhds_within LocalHomeomorph.eventually_nhdsWithin
+#align local_homeomorph.eventually_nhds_within PartialHomeomorph.eventually_nhdsWithin
-/
-#print LocalHomeomorph.eventually_nhdsWithin' /-
-theorem eventually_nhdsWithin' (e : LocalHomeomorph α β) {x : α} (p : α → Prop) {s : Set α}
+#print PartialHomeomorph.eventually_nhdsWithin' /-
+theorem eventually_nhdsWithin' (e : PartialHomeomorph α β) {x : α} (p : α → Prop) {s : Set α}
(hx : x ∈ e.source) : (∀ᶠ y in 𝓝[e.symm ⁻¹' s] e x, p (e.symm y)) ↔ ∀ᶠ x in 𝓝[s] x, p x :=
by
rw [e.eventually_nhds_within _ hx]
@@ -549,14 +549,14 @@ theorem eventually_nhdsWithin' (e : LocalHomeomorph α β) {x : α} (p : α →
((eventually_nhdsWithin_of_eventually_nhds <| e.eventually_left_inverse hx).mono fun y hy =>
_)
rw [hy]
-#align local_homeomorph.eventually_nhds_within' LocalHomeomorph.eventually_nhdsWithin'
+#align local_homeomorph.eventually_nhds_within' PartialHomeomorph.eventually_nhdsWithin'
-/
-#print LocalHomeomorph.preimage_eventuallyEq_target_inter_preimage_inter /-
+#print PartialHomeomorph.preimage_eventuallyEq_target_inter_preimage_inter /-
/-- This lemma is useful in the manifold library in the case that `e` is a chart. It states that
locally around `e x` the set `e.symm ⁻¹' s` is the same as the set intersected with the target
of `e` and some other neighborhood of `f x` (which will be the source of a chart on `γ`). -/
-theorem preimage_eventuallyEq_target_inter_preimage_inter {e : LocalHomeomorph α β} {s : Set α}
+theorem preimage_eventuallyEq_target_inter_preimage_inter {e : PartialHomeomorph α β} {s : Set α}
{t : Set γ} {x : α} {f : α → γ} (hf : ContinuousWithinAt f s x) (hxe : x ∈ e.source)
(ht : t ∈ 𝓝 (f x)) : e.symm ⁻¹' s =ᶠ[𝓝 (e x)] (e.target ∩ e.symm ⁻¹' (s ∩ f ⁻¹' t) : Set β) :=
by
@@ -566,13 +566,13 @@ theorem preimage_eventuallyEq_target_inter_preimage_inter {e : LocalHomeomorph
intro y hy hyu
simp_rw [mem_inter_iff, mem_preimage, mem_inter_iff, e.maps_to hy, true_and_iff, iff_self_and,
e.left_inv hy, iff_true_intro hyu]
-#align local_homeomorph.preimage_eventually_eq_target_inter_preimage_inter LocalHomeomorph.preimage_eventuallyEq_target_inter_preimage_inter
+#align local_homeomorph.preimage_eventually_eq_target_inter_preimage_inter PartialHomeomorph.preimage_eventuallyEq_target_inter_preimage_inter
-/
-#print LocalHomeomorph.isOpen_inter_preimage /-
+#print PartialHomeomorph.isOpen_inter_preimage /-
theorem isOpen_inter_preimage {s : Set β} (hs : IsOpen s) : IsOpen (e.source ∩ e ⁻¹' s) :=
e.ContinuousOn.isOpen_inter_preimage e.open_source hs
-#align local_homeomorph.preimage_open_of_open LocalHomeomorph.isOpen_inter_preimage
+#align local_homeomorph.preimage_open_of_open PartialHomeomorph.isOpen_inter_preimage
-/
/-!
@@ -591,7 +591,7 @@ we transfer API about `local_equiv.is_image` to local homeomorphisms and add a f
-/
-#print LocalHomeomorph.IsImage /-
+#print PartialHomeomorph.IsImage /-
/-- We say that `t : set β` is an image of `s : set α` under a local homeomorphism `e` if any of the
following equivalent conditions hold:
@@ -601,441 +601,441 @@ following equivalent conditions hold:
-/
def IsImage (s : Set α) (t : Set β) : Prop :=
∀ ⦃x⦄, x ∈ e.source → (e x ∈ t ↔ x ∈ s)
-#align local_homeomorph.is_image LocalHomeomorph.IsImage
+#align local_homeomorph.is_image PartialHomeomorph.IsImage
-/
namespace IsImage
variable {e} {s : Set α} {t : Set β} {x : α} {y : β}
-#print LocalHomeomorph.IsImage.toLocalEquiv /-
+#print PartialHomeomorph.IsImage.toLocalEquiv /-
theorem toLocalEquiv (h : e.IsImage s t) : e.toLocalEquiv.IsImage s t :=
h
-#align local_homeomorph.is_image.to_local_equiv LocalHomeomorph.IsImage.toLocalEquiv
+#align local_homeomorph.is_image.to_local_equiv PartialHomeomorph.IsImage.toLocalEquiv
-/
-#print LocalHomeomorph.IsImage.apply_mem_iff /-
+#print PartialHomeomorph.IsImage.apply_mem_iff /-
theorem apply_mem_iff (h : e.IsImage s t) (hx : x ∈ e.source) : e x ∈ t ↔ x ∈ s :=
h hx
-#align local_homeomorph.is_image.apply_mem_iff LocalHomeomorph.IsImage.apply_mem_iff
+#align local_homeomorph.is_image.apply_mem_iff PartialHomeomorph.IsImage.apply_mem_iff
-/
-#print LocalHomeomorph.IsImage.symm /-
+#print PartialHomeomorph.IsImage.symm /-
protected theorem symm (h : e.IsImage s t) : e.symm.IsImage t s :=
h.toLocalEquiv.symm
-#align local_homeomorph.is_image.symm LocalHomeomorph.IsImage.symm
+#align local_homeomorph.is_image.symm PartialHomeomorph.IsImage.symm
-/
-#print LocalHomeomorph.IsImage.symm_apply_mem_iff /-
+#print PartialHomeomorph.IsImage.symm_apply_mem_iff /-
theorem symm_apply_mem_iff (h : e.IsImage s t) (hy : y ∈ e.target) : e.symm y ∈ s ↔ y ∈ t :=
h.symm hy
-#align local_homeomorph.is_image.symm_apply_mem_iff LocalHomeomorph.IsImage.symm_apply_mem_iff
+#align local_homeomorph.is_image.symm_apply_mem_iff PartialHomeomorph.IsImage.symm_apply_mem_iff
-/
-#print LocalHomeomorph.IsImage.symm_iff /-
+#print PartialHomeomorph.IsImage.symm_iff /-
@[simp]
theorem symm_iff : e.symm.IsImage t s ↔ e.IsImage s t :=
⟨fun h => h.symm, fun h => h.symm⟩
-#align local_homeomorph.is_image.symm_iff LocalHomeomorph.IsImage.symm_iff
+#align local_homeomorph.is_image.symm_iff PartialHomeomorph.IsImage.symm_iff
-/
-#print LocalHomeomorph.IsImage.mapsTo /-
+#print PartialHomeomorph.IsImage.mapsTo /-
protected theorem mapsTo (h : e.IsImage s t) : MapsTo e (e.source ∩ s) (e.target ∩ t) :=
h.toLocalEquiv.MapsTo
-#align local_homeomorph.is_image.maps_to LocalHomeomorph.IsImage.mapsTo
+#align local_homeomorph.is_image.maps_to PartialHomeomorph.IsImage.mapsTo
-/
-#print LocalHomeomorph.IsImage.symm_mapsTo /-
+#print PartialHomeomorph.IsImage.symm_mapsTo /-
theorem symm_mapsTo (h : e.IsImage s t) : MapsTo e.symm (e.target ∩ t) (e.source ∩ s) :=
h.symm.MapsTo
-#align local_homeomorph.is_image.symm_maps_to LocalHomeomorph.IsImage.symm_mapsTo
+#align local_homeomorph.is_image.symm_maps_to PartialHomeomorph.IsImage.symm_mapsTo
-/
-#print LocalHomeomorph.IsImage.image_eq /-
+#print PartialHomeomorph.IsImage.image_eq /-
theorem image_eq (h : e.IsImage s t) : e '' (e.source ∩ s) = e.target ∩ t :=
h.toLocalEquiv.image_eq
-#align local_homeomorph.is_image.image_eq LocalHomeomorph.IsImage.image_eq
+#align local_homeomorph.is_image.image_eq PartialHomeomorph.IsImage.image_eq
-/
-#print LocalHomeomorph.IsImage.symm_image_eq /-
+#print PartialHomeomorph.IsImage.symm_image_eq /-
theorem symm_image_eq (h : e.IsImage s t) : e.symm '' (e.target ∩ t) = e.source ∩ s :=
h.symm.image_eq
-#align local_homeomorph.is_image.symm_image_eq LocalHomeomorph.IsImage.symm_image_eq
+#align local_homeomorph.is_image.symm_image_eq PartialHomeomorph.IsImage.symm_image_eq
-/
-#print LocalHomeomorph.IsImage.iff_preimage_eq /-
+#print PartialHomeomorph.IsImage.iff_preimage_eq /-
theorem iff_preimage_eq : e.IsImage s t ↔ e.source ∩ e ⁻¹' t = e.source ∩ s :=
LocalEquiv.IsImage.iff_preimage_eq
-#align local_homeomorph.is_image.iff_preimage_eq LocalHomeomorph.IsImage.iff_preimage_eq
+#align local_homeomorph.is_image.iff_preimage_eq PartialHomeomorph.IsImage.iff_preimage_eq
-/
alias ⟨preimage_eq, of_preimage_eq⟩ := iff_preimage_eq
-#align local_homeomorph.is_image.preimage_eq LocalHomeomorph.IsImage.preimage_eq
-#align local_homeomorph.is_image.of_preimage_eq LocalHomeomorph.IsImage.of_preimage_eq
+#align local_homeomorph.is_image.preimage_eq PartialHomeomorph.IsImage.preimage_eq
+#align local_homeomorph.is_image.of_preimage_eq PartialHomeomorph.IsImage.of_preimage_eq
-#print LocalHomeomorph.IsImage.iff_symm_preimage_eq /-
+#print PartialHomeomorph.IsImage.iff_symm_preimage_eq /-
theorem iff_symm_preimage_eq : e.IsImage s t ↔ e.target ∩ e.symm ⁻¹' s = e.target ∩ t :=
symm_iff.symm.trans iff_preimage_eq
-#align local_homeomorph.is_image.iff_symm_preimage_eq LocalHomeomorph.IsImage.iff_symm_preimage_eq
+#align local_homeomorph.is_image.iff_symm_preimage_eq PartialHomeomorph.IsImage.iff_symm_preimage_eq
-/
alias ⟨symm_preimage_eq, of_symm_preimage_eq⟩ := iff_symm_preimage_eq
-#align local_homeomorph.is_image.symm_preimage_eq LocalHomeomorph.IsImage.symm_preimage_eq
-#align local_homeomorph.is_image.of_symm_preimage_eq LocalHomeomorph.IsImage.of_symm_preimage_eq
+#align local_homeomorph.is_image.symm_preimage_eq PartialHomeomorph.IsImage.symm_preimage_eq
+#align local_homeomorph.is_image.of_symm_preimage_eq PartialHomeomorph.IsImage.of_symm_preimage_eq
-#print LocalHomeomorph.IsImage.iff_symm_preimage_eq' /-
+#print PartialHomeomorph.IsImage.iff_symm_preimage_eq' /-
theorem iff_symm_preimage_eq' :
e.IsImage s t ↔ e.target ∩ e.symm ⁻¹' (e.source ∩ s) = e.target ∩ t := by
rw [iff_symm_preimage_eq, ← image_source_inter_eq, ← image_source_inter_eq']
-#align local_homeomorph.is_image.iff_symm_preimage_eq' LocalHomeomorph.IsImage.iff_symm_preimage_eq'
+#align local_homeomorph.is_image.iff_symm_preimage_eq' PartialHomeomorph.IsImage.iff_symm_preimage_eq'
-/
alias ⟨symm_preimage_eq', of_symm_preimage_eq'⟩ := iff_symm_preimage_eq'
-#align local_homeomorph.is_image.symm_preimage_eq' LocalHomeomorph.IsImage.symm_preimage_eq'
-#align local_homeomorph.is_image.of_symm_preimage_eq' LocalHomeomorph.IsImage.of_symm_preimage_eq'
+#align local_homeomorph.is_image.symm_preimage_eq' PartialHomeomorph.IsImage.symm_preimage_eq'
+#align local_homeomorph.is_image.of_symm_preimage_eq' PartialHomeomorph.IsImage.of_symm_preimage_eq'
-#print LocalHomeomorph.IsImage.iff_preimage_eq' /-
+#print PartialHomeomorph.IsImage.iff_preimage_eq' /-
theorem iff_preimage_eq' : e.IsImage s t ↔ e.source ∩ e ⁻¹' (e.target ∩ t) = e.source ∩ s :=
symm_iff.symm.trans iff_symm_preimage_eq'
-#align local_homeomorph.is_image.iff_preimage_eq' LocalHomeomorph.IsImage.iff_preimage_eq'
+#align local_homeomorph.is_image.iff_preimage_eq' PartialHomeomorph.IsImage.iff_preimage_eq'
-/
alias ⟨preimage_eq', of_preimage_eq'⟩ := iff_preimage_eq'
-#align local_homeomorph.is_image.preimage_eq' LocalHomeomorph.IsImage.preimage_eq'
-#align local_homeomorph.is_image.of_preimage_eq' LocalHomeomorph.IsImage.of_preimage_eq'
+#align local_homeomorph.is_image.preimage_eq' PartialHomeomorph.IsImage.preimage_eq'
+#align local_homeomorph.is_image.of_preimage_eq' PartialHomeomorph.IsImage.of_preimage_eq'
-#print LocalHomeomorph.IsImage.of_image_eq /-
+#print PartialHomeomorph.IsImage.of_image_eq /-
theorem of_image_eq (h : e '' (e.source ∩ s) = e.target ∩ t) : e.IsImage s t :=
LocalEquiv.IsImage.of_image_eq h
-#align local_homeomorph.is_image.of_image_eq LocalHomeomorph.IsImage.of_image_eq
+#align local_homeomorph.is_image.of_image_eq PartialHomeomorph.IsImage.of_image_eq
-/
-#print LocalHomeomorph.IsImage.of_symm_image_eq /-
+#print PartialHomeomorph.IsImage.of_symm_image_eq /-
theorem of_symm_image_eq (h : e.symm '' (e.target ∩ t) = e.source ∩ s) : e.IsImage s t :=
LocalEquiv.IsImage.of_symm_image_eq h
-#align local_homeomorph.is_image.of_symm_image_eq LocalHomeomorph.IsImage.of_symm_image_eq
+#align local_homeomorph.is_image.of_symm_image_eq PartialHomeomorph.IsImage.of_symm_image_eq
-/
-#print LocalHomeomorph.IsImage.compl /-
+#print PartialHomeomorph.IsImage.compl /-
protected theorem compl (h : e.IsImage s t) : e.IsImage (sᶜ) (tᶜ) := fun x hx => not_congr (h hx)
-#align local_homeomorph.is_image.compl LocalHomeomorph.IsImage.compl
+#align local_homeomorph.is_image.compl PartialHomeomorph.IsImage.compl
-/
-#print LocalHomeomorph.IsImage.inter /-
+#print PartialHomeomorph.IsImage.inter /-
protected theorem inter {s' t'} (h : e.IsImage s t) (h' : e.IsImage s' t') :
e.IsImage (s ∩ s') (t ∩ t') := fun x hx => and_congr (h hx) (h' hx)
-#align local_homeomorph.is_image.inter LocalHomeomorph.IsImage.inter
+#align local_homeomorph.is_image.inter PartialHomeomorph.IsImage.inter
-/
-#print LocalHomeomorph.IsImage.union /-
+#print PartialHomeomorph.IsImage.union /-
protected theorem union {s' t'} (h : e.IsImage s t) (h' : e.IsImage s' t') :
e.IsImage (s ∪ s') (t ∪ t') := fun x hx => or_congr (h hx) (h' hx)
-#align local_homeomorph.is_image.union LocalHomeomorph.IsImage.union
+#align local_homeomorph.is_image.union PartialHomeomorph.IsImage.union
-/
-#print LocalHomeomorph.IsImage.diff /-
+#print PartialHomeomorph.IsImage.diff /-
protected theorem diff {s' t'} (h : e.IsImage s t) (h' : e.IsImage s' t') :
e.IsImage (s \ s') (t \ t') :=
h.inter h'.compl
-#align local_homeomorph.is_image.diff LocalHomeomorph.IsImage.diff
+#align local_homeomorph.is_image.diff PartialHomeomorph.IsImage.diff
-/
-#print LocalHomeomorph.IsImage.leftInvOn_piecewise /-
-theorem leftInvOn_piecewise {e' : LocalHomeomorph α β} [∀ i, Decidable (i ∈ s)]
+#print PartialHomeomorph.IsImage.leftInvOn_piecewise /-
+theorem leftInvOn_piecewise {e' : PartialHomeomorph α β} [∀ i, Decidable (i ∈ s)]
[∀ i, Decidable (i ∈ t)] (h : e.IsImage s t) (h' : e'.IsImage s t) :
LeftInvOn (t.piecewise e.symm e'.symm) (s.piecewise e e') (s.ite e.source e'.source) :=
h.toLocalEquiv.leftInvOn_piecewise h'
-#align local_homeomorph.is_image.left_inv_on_piecewise LocalHomeomorph.IsImage.leftInvOn_piecewise
+#align local_homeomorph.is_image.left_inv_on_piecewise PartialHomeomorph.IsImage.leftInvOn_piecewise
-/
-#print LocalHomeomorph.IsImage.inter_eq_of_inter_eq_of_eqOn /-
-theorem inter_eq_of_inter_eq_of_eqOn {e' : LocalHomeomorph α β} (h : e.IsImage s t)
+#print PartialHomeomorph.IsImage.inter_eq_of_inter_eq_of_eqOn /-
+theorem inter_eq_of_inter_eq_of_eqOn {e' : PartialHomeomorph α β} (h : e.IsImage s t)
(h' : e'.IsImage s t) (hs : e.source ∩ s = e'.source ∩ s) (Heq : EqOn e e' (e.source ∩ s)) :
e.target ∩ t = e'.target ∩ t :=
h.toLocalEquiv.inter_eq_of_inter_eq_of_eqOn h' hs Heq
-#align local_homeomorph.is_image.inter_eq_of_inter_eq_of_eq_on LocalHomeomorph.IsImage.inter_eq_of_inter_eq_of_eqOn
+#align local_homeomorph.is_image.inter_eq_of_inter_eq_of_eq_on PartialHomeomorph.IsImage.inter_eq_of_inter_eq_of_eqOn
-/
-#print LocalHomeomorph.IsImage.symm_eqOn_of_inter_eq_of_eqOn /-
-theorem symm_eqOn_of_inter_eq_of_eqOn {e' : LocalHomeomorph α β} (h : e.IsImage s t)
+#print PartialHomeomorph.IsImage.symm_eqOn_of_inter_eq_of_eqOn /-
+theorem symm_eqOn_of_inter_eq_of_eqOn {e' : PartialHomeomorph α β} (h : e.IsImage s t)
(hs : e.source ∩ s = e'.source ∩ s) (Heq : EqOn e e' (e.source ∩ s)) :
EqOn e.symm e'.symm (e.target ∩ t) :=
h.toLocalEquiv.symm_eq_on_of_inter_eq_of_eqOn hs Heq
-#align local_homeomorph.is_image.symm_eq_on_of_inter_eq_of_eq_on LocalHomeomorph.IsImage.symm_eqOn_of_inter_eq_of_eqOn
+#align local_homeomorph.is_image.symm_eq_on_of_inter_eq_of_eq_on PartialHomeomorph.IsImage.symm_eqOn_of_inter_eq_of_eqOn
-/
-#print LocalHomeomorph.IsImage.map_nhdsWithin_eq /-
+#print PartialHomeomorph.IsImage.map_nhdsWithin_eq /-
theorem map_nhdsWithin_eq (h : e.IsImage s t) (hx : x ∈ e.source) : map e (𝓝[s] x) = 𝓝[t] e x := by
rw [e.map_nhds_within_eq hx, h.image_eq, e.nhds_within_target_inter (e.map_source hx)]
-#align local_homeomorph.is_image.map_nhds_within_eq LocalHomeomorph.IsImage.map_nhdsWithin_eq
+#align local_homeomorph.is_image.map_nhds_within_eq PartialHomeomorph.IsImage.map_nhdsWithin_eq
-/
-#print LocalHomeomorph.IsImage.closure /-
+#print PartialHomeomorph.IsImage.closure /-
protected theorem closure (h : e.IsImage s t) : e.IsImage (closure s) (closure t) := fun x hx => by
simp only [mem_closure_iff_nhdsWithin_neBot, ← h.map_nhds_within_eq hx, map_ne_bot_iff]
-#align local_homeomorph.is_image.closure LocalHomeomorph.IsImage.closure
+#align local_homeomorph.is_image.closure PartialHomeomorph.IsImage.closure
-/
-#print LocalHomeomorph.IsImage.interior /-
+#print PartialHomeomorph.IsImage.interior /-
protected theorem interior (h : e.IsImage s t) : e.IsImage (interior s) (interior t) := by
simpa only [closure_compl, compl_compl] using h.compl.closure.compl
-#align local_homeomorph.is_image.interior LocalHomeomorph.IsImage.interior
+#align local_homeomorph.is_image.interior PartialHomeomorph.IsImage.interior
-/
-#print LocalHomeomorph.IsImage.frontier /-
+#print PartialHomeomorph.IsImage.frontier /-
protected theorem frontier (h : e.IsImage s t) : e.IsImage (frontier s) (frontier t) :=
h.closure.diffₓ h.interior
-#align local_homeomorph.is_image.frontier LocalHomeomorph.IsImage.frontier
+#align local_homeomorph.is_image.frontier PartialHomeomorph.IsImage.frontier
-/
-#print LocalHomeomorph.IsImage.isOpen_iff /-
+#print PartialHomeomorph.IsImage.isOpen_iff /-
theorem isOpen_iff (h : e.IsImage s t) : IsOpen (e.source ∩ s) ↔ IsOpen (e.target ∩ t) :=
⟨fun hs => h.symm_preimage_eq' ▸ e.symm.isOpen_inter_preimage hs, fun hs =>
h.preimage_eq' ▸ e.isOpen_inter_preimage hs⟩
-#align local_homeomorph.is_image.is_open_iff LocalHomeomorph.IsImage.isOpen_iff
+#align local_homeomorph.is_image.is_open_iff PartialHomeomorph.IsImage.isOpen_iff
-/
-#print LocalHomeomorph.IsImage.restr /-
+#print PartialHomeomorph.IsImage.restr /-
/-- Restrict a `local_homeomorph` to a pair of corresponding open sets. -/
@[simps toLocalEquiv]
-def restr (h : e.IsImage s t) (hs : IsOpen (e.source ∩ s)) : LocalHomeomorph α β
+def restr (h : e.IsImage s t) (hs : IsOpen (e.source ∩ s)) : PartialHomeomorph α β
where
toLocalEquiv := h.toLocalEquiv.restr
open_source := hs
open_target := h.isOpen_iff.1 hs
continuous_toFun := e.ContinuousOn.mono (inter_subset_left _ _)
continuous_invFun := e.symm.ContinuousOn.mono (inter_subset_left _ _)
-#align local_homeomorph.is_image.restr LocalHomeomorph.IsImage.restr
+#align local_homeomorph.is_image.restr PartialHomeomorph.IsImage.restr
-/
end IsImage
-#print LocalHomeomorph.isImage_source_target /-
+#print PartialHomeomorph.isImage_source_target /-
theorem isImage_source_target : e.IsImage e.source e.target :=
e.toLocalEquiv.isImage_source_target
-#align local_homeomorph.is_image_source_target LocalHomeomorph.isImage_source_target
+#align local_homeomorph.is_image_source_target PartialHomeomorph.isImage_source_target
-/
-#print LocalHomeomorph.isImage_source_target_of_disjoint /-
-theorem isImage_source_target_of_disjoint (e' : LocalHomeomorph α β)
+#print PartialHomeomorph.isImage_source_target_of_disjoint /-
+theorem isImage_source_target_of_disjoint (e' : PartialHomeomorph α β)
(hs : Disjoint e.source e'.source) (ht : Disjoint e.target e'.target) :
e.IsImage e'.source e'.target :=
e.toLocalEquiv.isImage_source_target_of_disjoint e'.toLocalEquiv hs ht
-#align local_homeomorph.is_image_source_target_of_disjoint LocalHomeomorph.isImage_source_target_of_disjoint
+#align local_homeomorph.is_image_source_target_of_disjoint PartialHomeomorph.isImage_source_target_of_disjoint
-/
-#print LocalHomeomorph.preimage_interior /-
+#print PartialHomeomorph.preimage_interior /-
/-- Preimage of interior or interior of preimage coincide for local homeomorphisms, when restricted
to the source. -/
theorem preimage_interior (s : Set β) :
e.source ∩ e ⁻¹' interior s = e.source ∩ interior (e ⁻¹' s) :=
(IsImage.of_preimage_eq rfl).interior.preimage_eq
-#align local_homeomorph.preimage_interior LocalHomeomorph.preimage_interior
+#align local_homeomorph.preimage_interior PartialHomeomorph.preimage_interior
-/
-#print LocalHomeomorph.preimage_closure /-
+#print PartialHomeomorph.preimage_closure /-
theorem preimage_closure (s : Set β) : e.source ∩ e ⁻¹' closure s = e.source ∩ closure (e ⁻¹' s) :=
(IsImage.of_preimage_eq rfl).closure.preimage_eq
-#align local_homeomorph.preimage_closure LocalHomeomorph.preimage_closure
+#align local_homeomorph.preimage_closure PartialHomeomorph.preimage_closure
-/
-#print LocalHomeomorph.preimage_frontier /-
+#print PartialHomeomorph.preimage_frontier /-
theorem preimage_frontier (s : Set β) :
e.source ∩ e ⁻¹' frontier s = e.source ∩ frontier (e ⁻¹' s) :=
(IsImage.of_preimage_eq rfl).frontier.preimage_eq
-#align local_homeomorph.preimage_frontier LocalHomeomorph.preimage_frontier
+#align local_homeomorph.preimage_frontier PartialHomeomorph.preimage_frontier
-/
-#print LocalHomeomorph.isOpen_inter_preimage_symm /-
+#print PartialHomeomorph.isOpen_inter_preimage_symm /-
theorem isOpen_inter_preimage_symm {s : Set α} (hs : IsOpen s) : IsOpen (e.target ∩ e.symm ⁻¹' s) :=
e.symm.ContinuousOn.isOpen_inter_preimage e.open_target hs
-#align local_homeomorph.preimage_open_of_open_symm LocalHomeomorph.isOpen_inter_preimage_symm
+#align local_homeomorph.preimage_open_of_open_symm PartialHomeomorph.isOpen_inter_preimage_symm
-/
-#print LocalHomeomorph.image_isOpen_of_isOpen /-
+#print PartialHomeomorph.image_isOpen_of_isOpen /-
/-- The image of an open set in the source is open. -/
theorem image_isOpen_of_isOpen {s : Set α} (hs : IsOpen s) (h : s ⊆ e.source) : IsOpen (e '' s) :=
by
have : e '' s = e.target ∩ e.symm ⁻¹' s := e.to_local_equiv.image_eq_target_inter_inv_preimage h
rw [this]
exact e.continuous_on_symm.preimage_open_of_open e.open_target hs
-#align local_homeomorph.image_open_of_open LocalHomeomorph.image_isOpen_of_isOpen
+#align local_homeomorph.image_open_of_open PartialHomeomorph.image_isOpen_of_isOpen
-/
-#print LocalHomeomorph.image_isOpen_of_isOpen' /-
+#print PartialHomeomorph.image_isOpen_of_isOpen' /-
/-- The image of the restriction of an open set to the source is open. -/
theorem image_isOpen_of_isOpen' {s : Set α} (hs : IsOpen s) : IsOpen (e '' (e.source ∩ s)) :=
image_isOpen_of_isOpen _ (IsOpen.inter e.open_source hs) (inter_subset_left _ _)
-#align local_homeomorph.image_open_of_open' LocalHomeomorph.image_isOpen_of_isOpen'
+#align local_homeomorph.image_open_of_open' PartialHomeomorph.image_isOpen_of_isOpen'
-/
-#print LocalHomeomorph.ofContinuousOpenRestrict /-
+#print PartialHomeomorph.ofContinuousOpenRestrict /-
/-- A `local_equiv` with continuous open forward map and an open source is a `local_homeomorph`. -/
def ofContinuousOpenRestrict (e : LocalEquiv α β) (hc : ContinuousOn e e.source)
- (ho : IsOpenMap (e.source.restrict e)) (hs : IsOpen e.source) : LocalHomeomorph α β
+ (ho : IsOpenMap (e.source.restrict e)) (hs : IsOpen e.source) : PartialHomeomorph α β
where
toLocalEquiv := e
open_source := hs
open_target := by simpa only [range_restrict, e.image_source_eq_target] using ho.is_open_range
continuous_toFun := hc
continuous_invFun := e.image_source_eq_target ▸ ho.continuousOn_image_of_leftInvOn e.LeftInvOn
-#align local_homeomorph.of_continuous_open_restrict LocalHomeomorph.ofContinuousOpenRestrict
+#align local_homeomorph.of_continuous_open_restrict PartialHomeomorph.ofContinuousOpenRestrict
-/
-#print LocalHomeomorph.ofContinuousOpen /-
+#print PartialHomeomorph.ofContinuousOpen /-
/-- A `local_equiv` with continuous open forward map and an open source is a `local_homeomorph`. -/
def ofContinuousOpen (e : LocalEquiv α β) (hc : ContinuousOn e e.source) (ho : IsOpenMap e)
- (hs : IsOpen e.source) : LocalHomeomorph α β :=
+ (hs : IsOpen e.source) : PartialHomeomorph α β :=
ofContinuousOpenRestrict e hc (ho.restrict hs) hs
-#align local_homeomorph.of_continuous_open LocalHomeomorph.ofContinuousOpen
+#align local_homeomorph.of_continuous_open PartialHomeomorph.ofContinuousOpen
-/
-#print LocalHomeomorph.restrOpen /-
+#print PartialHomeomorph.restrOpen /-
/-- Restricting a local homeomorphism `e` to `e.source ∩ s` when `s` is open. This is sometimes hard
to use because of the openness assumption, but it has the advantage that when it can
be used then its local_equiv is defeq to local_equiv.restr -/
-protected def restrOpen (s : Set α) (hs : IsOpen s) : LocalHomeomorph α β :=
+protected def restrOpen (s : Set α) (hs : IsOpen s) : PartialHomeomorph α β :=
(@IsImage.of_symm_preimage_eq α β _ _ e s (e.symm ⁻¹' s) rfl).restr
(IsOpen.inter e.open_source hs)
-#align local_homeomorph.restr_open LocalHomeomorph.restrOpen
+#align local_homeomorph.restr_open PartialHomeomorph.restrOpen
-/
-#print LocalHomeomorph.restrOpen_toLocalEquiv /-
+#print PartialHomeomorph.restrOpen_toLocalEquiv /-
@[simp, mfld_simps]
theorem restrOpen_toLocalEquiv (s : Set α) (hs : IsOpen s) :
(e.restrOpen s hs).toLocalEquiv = e.toLocalEquiv.restr s :=
rfl
-#align local_homeomorph.restr_open_to_local_equiv LocalHomeomorph.restrOpen_toLocalEquiv
+#align local_homeomorph.restr_open_to_local_equiv PartialHomeomorph.restrOpen_toLocalEquiv
-/
-#print LocalHomeomorph.restrOpen_source /-
+#print PartialHomeomorph.restrOpen_source /-
-- Already simp via local_equiv
theorem restrOpen_source (s : Set α) (hs : IsOpen s) : (e.restrOpen s hs).source = e.source ∩ s :=
rfl
-#align local_homeomorph.restr_open_source LocalHomeomorph.restrOpen_source
+#align local_homeomorph.restr_open_source PartialHomeomorph.restrOpen_source
-/
-#print LocalHomeomorph.restr /-
+#print PartialHomeomorph.restr /-
/-- Restricting a local homeomorphism `e` to `e.source ∩ interior s`. We use the interior to make
sure that the restriction is well defined whatever the set s, since local homeomorphisms are by
definition defined on open sets. In applications where `s` is open, this coincides with the
restriction of local equivalences -/
@[simps (config := mfld_cfg) apply symm_apply, simps (config := { attrs := [] }) source target]
-protected def restr (s : Set α) : LocalHomeomorph α β :=
+protected def restr (s : Set α) : PartialHomeomorph α β :=
e.restrOpen (interior s) isOpen_interior
-#align local_homeomorph.restr LocalHomeomorph.restr
+#align local_homeomorph.restr PartialHomeomorph.restr
-/
-#print LocalHomeomorph.restr_toLocalEquiv /-
+#print PartialHomeomorph.restr_toLocalEquiv /-
@[simp, mfld_simps]
theorem restr_toLocalEquiv (s : Set α) :
(e.restr s).toLocalEquiv = e.toLocalEquiv.restr (interior s) :=
rfl
-#align local_homeomorph.restr_to_local_equiv LocalHomeomorph.restr_toLocalEquiv
+#align local_homeomorph.restr_to_local_equiv PartialHomeomorph.restr_toLocalEquiv
-/
-#print LocalHomeomorph.restr_source' /-
+#print PartialHomeomorph.restr_source' /-
theorem restr_source' (s : Set α) (hs : IsOpen s) : (e.restr s).source = e.source ∩ s := by
rw [e.restr_source, hs.interior_eq]
-#align local_homeomorph.restr_source' LocalHomeomorph.restr_source'
+#align local_homeomorph.restr_source' PartialHomeomorph.restr_source'
-/
-#print LocalHomeomorph.restr_toLocalEquiv' /-
+#print PartialHomeomorph.restr_toLocalEquiv' /-
theorem restr_toLocalEquiv' (s : Set α) (hs : IsOpen s) :
(e.restr s).toLocalEquiv = e.toLocalEquiv.restr s := by
rw [e.restr_to_local_equiv, hs.interior_eq]
-#align local_homeomorph.restr_to_local_equiv' LocalHomeomorph.restr_toLocalEquiv'
+#align local_homeomorph.restr_to_local_equiv' PartialHomeomorph.restr_toLocalEquiv'
-/
-#print LocalHomeomorph.restr_eq_of_source_subset /-
-theorem restr_eq_of_source_subset {e : LocalHomeomorph α β} {s : Set α} (h : e.source ⊆ s) :
+#print PartialHomeomorph.restr_eq_of_source_subset /-
+theorem restr_eq_of_source_subset {e : PartialHomeomorph α β} {s : Set α} (h : e.source ⊆ s) :
e.restr s = e := by
apply eq_of_local_equiv_eq
rw [restr_to_local_equiv]
apply LocalEquiv.restr_eq_of_source_subset
exact interior_maximal h e.open_source
-#align local_homeomorph.restr_eq_of_source_subset LocalHomeomorph.restr_eq_of_source_subset
+#align local_homeomorph.restr_eq_of_source_subset PartialHomeomorph.restr_eq_of_source_subset
-/
-#print LocalHomeomorph.restr_univ /-
+#print PartialHomeomorph.restr_univ /-
@[simp, mfld_simps]
-theorem restr_univ {e : LocalHomeomorph α β} : e.restr univ = e :=
+theorem restr_univ {e : PartialHomeomorph α β} : e.restr univ = e :=
restr_eq_of_source_subset (subset_univ _)
-#align local_homeomorph.restr_univ LocalHomeomorph.restr_univ
+#align local_homeomorph.restr_univ PartialHomeomorph.restr_univ
-/
-#print LocalHomeomorph.restr_source_inter /-
+#print PartialHomeomorph.restr_source_inter /-
theorem restr_source_inter (s : Set α) : e.restr (e.source ∩ s) = e.restr s :=
by
- refine' LocalHomeomorph.ext _ _ (fun x => rfl) (fun x => rfl) _
+ refine' PartialHomeomorph.ext _ _ (fun x => rfl) (fun x => rfl) _
simp [e.open_source.interior_eq, ← inter_assoc]
-#align local_homeomorph.restr_source_inter LocalHomeomorph.restr_source_inter
+#align local_homeomorph.restr_source_inter PartialHomeomorph.restr_source_inter
-/
-#print LocalHomeomorph.refl /-
+#print PartialHomeomorph.refl /-
/-- The identity on the whole space as a local homeomorphism. -/
@[simps (config := mfld_cfg) apply, simps (config := { attrs := [] }) source target]
-protected def refl (α : Type _) [TopologicalSpace α] : LocalHomeomorph α α :=
- (Homeomorph.refl α).toLocalHomeomorph
-#align local_homeomorph.refl LocalHomeomorph.refl
+protected def refl (α : Type _) [TopologicalSpace α] : PartialHomeomorph α α :=
+ (Homeomorph.refl α).toPartialHomeomorph
+#align local_homeomorph.refl PartialHomeomorph.refl
-/
-#print LocalHomeomorph.refl_localEquiv /-
+#print PartialHomeomorph.refl_localEquiv /-
@[simp, mfld_simps]
-theorem refl_localEquiv : (LocalHomeomorph.refl α).toLocalEquiv = LocalEquiv.refl α :=
+theorem refl_localEquiv : (PartialHomeomorph.refl α).toLocalEquiv = LocalEquiv.refl α :=
rfl
-#align local_homeomorph.refl_local_equiv LocalHomeomorph.refl_localEquiv
+#align local_homeomorph.refl_local_equiv PartialHomeomorph.refl_localEquiv
-/
-#print LocalHomeomorph.refl_symm /-
+#print PartialHomeomorph.refl_symm /-
@[simp, mfld_simps]
-theorem refl_symm : (LocalHomeomorph.refl α).symm = LocalHomeomorph.refl α :=
+theorem refl_symm : (PartialHomeomorph.refl α).symm = PartialHomeomorph.refl α :=
rfl
-#align local_homeomorph.refl_symm LocalHomeomorph.refl_symm
+#align local_homeomorph.refl_symm PartialHomeomorph.refl_symm
-/
section
variable {s : Set α} (hs : IsOpen s)
-#print LocalHomeomorph.ofSet /-
+#print PartialHomeomorph.ofSet /-
/-- The identity local equiv on a set `s` -/
@[simps (config := mfld_cfg) apply, simps (config := { attrs := [] }) source target]
-def ofSet (s : Set α) (hs : IsOpen s) : LocalHomeomorph α α :=
+def ofSet (s : Set α) (hs : IsOpen s) : PartialHomeomorph α α :=
{ LocalEquiv.ofSet s with
open_source := hs
open_target := hs
continuous_toFun := continuous_id.ContinuousOn
continuous_invFun := continuous_id.ContinuousOn }
-#align local_homeomorph.of_set LocalHomeomorph.ofSet
+#align local_homeomorph.of_set PartialHomeomorph.ofSet
-/
-#print LocalHomeomorph.ofSet_toLocalEquiv /-
+#print PartialHomeomorph.ofSet_toLocalEquiv /-
@[simp, mfld_simps]
theorem ofSet_toLocalEquiv : (ofSet s hs).toLocalEquiv = LocalEquiv.ofSet s :=
rfl
-#align local_homeomorph.of_set_to_local_equiv LocalHomeomorph.ofSet_toLocalEquiv
+#align local_homeomorph.of_set_to_local_equiv PartialHomeomorph.ofSet_toLocalEquiv
-/
-#print LocalHomeomorph.ofSet_symm /-
+#print PartialHomeomorph.ofSet_symm /-
@[simp, mfld_simps]
theorem ofSet_symm : (ofSet s hs).symm = ofSet s hs :=
rfl
-#align local_homeomorph.of_set_symm LocalHomeomorph.ofSet_symm
+#align local_homeomorph.of_set_symm PartialHomeomorph.ofSet_symm
-/
-#print LocalHomeomorph.ofSet_univ_eq_refl /-
+#print PartialHomeomorph.ofSet_univ_eq_refl /-
@[simp, mfld_simps]
-theorem ofSet_univ_eq_refl : ofSet univ isOpen_univ = LocalHomeomorph.refl α := by ext <;> simp
-#align local_homeomorph.of_set_univ_eq_refl LocalHomeomorph.ofSet_univ_eq_refl
+theorem ofSet_univ_eq_refl : ofSet univ isOpen_univ = PartialHomeomorph.refl α := by ext <;> simp
+#align local_homeomorph.of_set_univ_eq_refl PartialHomeomorph.ofSet_univ_eq_refl
-/
end
-#print LocalHomeomorph.trans' /-
+#print PartialHomeomorph.trans' /-
/-- Composition of two local homeomorphisms when the target of the first and the source of
the second coincide. -/
-protected def trans' (h : e.target = e'.source) : LocalHomeomorph α γ :=
+protected def trans' (h : e.target = e'.source) : PartialHomeomorph α γ :=
{
LocalEquiv.trans' e.toLocalEquiv e'.toLocalEquiv
h with
@@ -1049,222 +1049,223 @@ protected def trans' (h : e.target = e'.source) : LocalHomeomorph α γ :=
apply e.continuous_inv_fun.comp e'.continuous_inv_fun
rw [h]
exact e'.to_local_equiv.target_subset_preimage_source }
-#align local_homeomorph.trans' LocalHomeomorph.trans'
+#align local_homeomorph.trans' PartialHomeomorph.trans'
-/
-#print LocalHomeomorph.trans /-
+#print PartialHomeomorph.trans /-
/-- Composing two local homeomorphisms, by restricting to the maximal domain where their
composition is well defined. -/
-protected def trans : LocalHomeomorph α γ :=
- LocalHomeomorph.trans' (e.symm.restrOpen e'.source e'.open_source).symm
+protected def trans : PartialHomeomorph α γ :=
+ PartialHomeomorph.trans' (e.symm.restrOpen e'.source e'.open_source).symm
(e'.restrOpen e.target e.open_target) (by simp [inter_comm])
-#align local_homeomorph.trans LocalHomeomorph.trans
+#align local_homeomorph.trans PartialHomeomorph.trans
-/
-#print LocalHomeomorph.trans_toLocalEquiv /-
+#print PartialHomeomorph.trans_toLocalEquiv /-
@[simp, mfld_simps]
theorem trans_toLocalEquiv : (e.trans e').toLocalEquiv = e.toLocalEquiv.trans e'.toLocalEquiv :=
rfl
-#align local_homeomorph.trans_to_local_equiv LocalHomeomorph.trans_toLocalEquiv
+#align local_homeomorph.trans_to_local_equiv PartialHomeomorph.trans_toLocalEquiv
-/
-#print LocalHomeomorph.coe_trans /-
+#print PartialHomeomorph.coe_trans /-
@[simp, mfld_simps]
theorem coe_trans : (e.trans e' : α → γ) = e' ∘ e :=
rfl
-#align local_homeomorph.coe_trans LocalHomeomorph.coe_trans
+#align local_homeomorph.coe_trans PartialHomeomorph.coe_trans
-/
-#print LocalHomeomorph.coe_trans_symm /-
+#print PartialHomeomorph.coe_trans_symm /-
@[simp, mfld_simps]
theorem coe_trans_symm : ((e.trans e').symm : γ → α) = e.symm ∘ e'.symm :=
rfl
-#align local_homeomorph.coe_trans_symm LocalHomeomorph.coe_trans_symm
+#align local_homeomorph.coe_trans_symm PartialHomeomorph.coe_trans_symm
-/
-#print LocalHomeomorph.trans_apply /-
+#print PartialHomeomorph.trans_apply /-
theorem trans_apply {x : α} : (e.trans e') x = e' (e x) :=
rfl
-#align local_homeomorph.trans_apply LocalHomeomorph.trans_apply
+#align local_homeomorph.trans_apply PartialHomeomorph.trans_apply
-/
-#print LocalHomeomorph.trans_symm_eq_symm_trans_symm /-
+#print PartialHomeomorph.trans_symm_eq_symm_trans_symm /-
theorem trans_symm_eq_symm_trans_symm : (e.trans e').symm = e'.symm.trans e.symm := by
cases e <;> cases e' <;> rfl
-#align local_homeomorph.trans_symm_eq_symm_trans_symm LocalHomeomorph.trans_symm_eq_symm_trans_symm
+#align local_homeomorph.trans_symm_eq_symm_trans_symm PartialHomeomorph.trans_symm_eq_symm_trans_symm
-/
-#print LocalHomeomorph.trans_source /-
+#print PartialHomeomorph.trans_source /-
/- This could be considered as a simp lemma, but there are many situations where it makes something
simple into something more complicated. -/
theorem trans_source : (e.trans e').source = e.source ∩ e ⁻¹' e'.source :=
LocalEquiv.trans_source e.toLocalEquiv e'.toLocalEquiv
-#align local_homeomorph.trans_source LocalHomeomorph.trans_source
+#align local_homeomorph.trans_source PartialHomeomorph.trans_source
-/
-#print LocalHomeomorph.trans_source' /-
+#print PartialHomeomorph.trans_source' /-
theorem trans_source' : (e.trans e').source = e.source ∩ e ⁻¹' (e.target ∩ e'.source) :=
LocalEquiv.trans_source' e.toLocalEquiv e'.toLocalEquiv
-#align local_homeomorph.trans_source' LocalHomeomorph.trans_source'
+#align local_homeomorph.trans_source' PartialHomeomorph.trans_source'
-/
-#print LocalHomeomorph.trans_source'' /-
+#print PartialHomeomorph.trans_source'' /-
theorem trans_source'' : (e.trans e').source = e.symm '' (e.target ∩ e'.source) :=
LocalEquiv.trans_source'' e.toLocalEquiv e'.toLocalEquiv
-#align local_homeomorph.trans_source'' LocalHomeomorph.trans_source''
+#align local_homeomorph.trans_source'' PartialHomeomorph.trans_source''
-/
-#print LocalHomeomorph.image_trans_source /-
+#print PartialHomeomorph.image_trans_source /-
theorem image_trans_source : e '' (e.trans e').source = e.target ∩ e'.source :=
LocalEquiv.image_trans_source e.toLocalEquiv e'.toLocalEquiv
-#align local_homeomorph.image_trans_source LocalHomeomorph.image_trans_source
+#align local_homeomorph.image_trans_source PartialHomeomorph.image_trans_source
-/
-#print LocalHomeomorph.trans_target /-
+#print PartialHomeomorph.trans_target /-
theorem trans_target : (e.trans e').target = e'.target ∩ e'.symm ⁻¹' e.target :=
rfl
-#align local_homeomorph.trans_target LocalHomeomorph.trans_target
+#align local_homeomorph.trans_target PartialHomeomorph.trans_target
-/
-#print LocalHomeomorph.trans_target' /-
+#print PartialHomeomorph.trans_target' /-
theorem trans_target' : (e.trans e').target = e'.target ∩ e'.symm ⁻¹' (e'.source ∩ e.target) :=
trans_source' e'.symm e.symm
-#align local_homeomorph.trans_target' LocalHomeomorph.trans_target'
+#align local_homeomorph.trans_target' PartialHomeomorph.trans_target'
-/
-#print LocalHomeomorph.trans_target'' /-
+#print PartialHomeomorph.trans_target'' /-
theorem trans_target'' : (e.trans e').target = e' '' (e'.source ∩ e.target) :=
trans_source'' e'.symm e.symm
-#align local_homeomorph.trans_target'' LocalHomeomorph.trans_target''
+#align local_homeomorph.trans_target'' PartialHomeomorph.trans_target''
-/
-#print LocalHomeomorph.inv_image_trans_target /-
+#print PartialHomeomorph.inv_image_trans_target /-
theorem inv_image_trans_target : e'.symm '' (e.trans e').target = e'.source ∩ e.target :=
image_trans_source e'.symm e.symm
-#align local_homeomorph.inv_image_trans_target LocalHomeomorph.inv_image_trans_target
+#align local_homeomorph.inv_image_trans_target PartialHomeomorph.inv_image_trans_target
-/
-#print LocalHomeomorph.trans_assoc /-
-theorem trans_assoc (e'' : LocalHomeomorph γ δ) : (e.trans e').trans e'' = e.trans (e'.trans e'') :=
+#print PartialHomeomorph.trans_assoc /-
+theorem trans_assoc (e'' : PartialHomeomorph γ δ) :
+ (e.trans e').trans e'' = e.trans (e'.trans e'') :=
eq_of_localEquiv_eq <| LocalEquiv.trans_assoc e.toLocalEquiv e'.toLocalEquiv e''.toLocalEquiv
-#align local_homeomorph.trans_assoc LocalHomeomorph.trans_assoc
+#align local_homeomorph.trans_assoc PartialHomeomorph.trans_assoc
-/
-#print LocalHomeomorph.trans_refl /-
+#print PartialHomeomorph.trans_refl /-
@[simp, mfld_simps]
-theorem trans_refl : e.trans (LocalHomeomorph.refl β) = e :=
+theorem trans_refl : e.trans (PartialHomeomorph.refl β) = e :=
eq_of_localEquiv_eq <| LocalEquiv.trans_refl e.toLocalEquiv
-#align local_homeomorph.trans_refl LocalHomeomorph.trans_refl
+#align local_homeomorph.trans_refl PartialHomeomorph.trans_refl
-/
-#print LocalHomeomorph.refl_trans /-
+#print PartialHomeomorph.refl_trans /-
@[simp, mfld_simps]
-theorem refl_trans : (LocalHomeomorph.refl α).trans e = e :=
+theorem refl_trans : (PartialHomeomorph.refl α).trans e = e :=
eq_of_localEquiv_eq <| LocalEquiv.refl_trans e.toLocalEquiv
-#align local_homeomorph.refl_trans LocalHomeomorph.refl_trans
+#align local_homeomorph.refl_trans PartialHomeomorph.refl_trans
-/
-#print LocalHomeomorph.trans_ofSet /-
+#print PartialHomeomorph.trans_ofSet /-
theorem trans_ofSet {s : Set β} (hs : IsOpen s) : e.trans (ofSet s hs) = e.restr (e ⁻¹' s) :=
- (LocalHomeomorph.ext _ _ (fun x => rfl) fun x => rfl) <| by
+ (PartialHomeomorph.ext _ _ (fun x => rfl) fun x => rfl) <| by
simp [LocalEquiv.trans_source, (e.preimage_interior _).symm, hs.interior_eq]
-#align local_homeomorph.trans_of_set LocalHomeomorph.trans_ofSet
+#align local_homeomorph.trans_of_set PartialHomeomorph.trans_ofSet
-/
-#print LocalHomeomorph.trans_of_set' /-
+#print PartialHomeomorph.trans_of_set' /-
theorem trans_of_set' {s : Set β} (hs : IsOpen s) :
e.trans (ofSet s hs) = e.restr (e.source ∩ e ⁻¹' s) := by rw [trans_of_set, restr_source_inter]
-#align local_homeomorph.trans_of_set' LocalHomeomorph.trans_of_set'
+#align local_homeomorph.trans_of_set' PartialHomeomorph.trans_of_set'
-/
-#print LocalHomeomorph.ofSet_trans /-
+#print PartialHomeomorph.ofSet_trans /-
theorem ofSet_trans {s : Set α} (hs : IsOpen s) : (ofSet s hs).trans e = e.restr s :=
- (LocalHomeomorph.ext _ _ (fun x => rfl) fun x => rfl) <| by
+ (PartialHomeomorph.ext _ _ (fun x => rfl) fun x => rfl) <| by
simp [LocalEquiv.trans_source, hs.interior_eq, inter_comm]
-#align local_homeomorph.of_set_trans LocalHomeomorph.ofSet_trans
+#align local_homeomorph.of_set_trans PartialHomeomorph.ofSet_trans
-/
-#print LocalHomeomorph.ofSet_trans' /-
+#print PartialHomeomorph.ofSet_trans' /-
theorem ofSet_trans' {s : Set α} (hs : IsOpen s) : (ofSet s hs).trans e = e.restr (e.source ∩ s) :=
by rw [of_set_trans, restr_source_inter]
-#align local_homeomorph.of_set_trans' LocalHomeomorph.ofSet_trans'
+#align local_homeomorph.of_set_trans' PartialHomeomorph.ofSet_trans'
-/
-#print LocalHomeomorph.ofSet_trans_ofSet /-
+#print PartialHomeomorph.ofSet_trans_ofSet /-
@[simp, mfld_simps]
theorem ofSet_trans_ofSet {s : Set α} (hs : IsOpen s) {s' : Set α} (hs' : IsOpen s') :
(ofSet s hs).trans (ofSet s' hs') = ofSet (s ∩ s') (IsOpen.inter hs hs') :=
by
rw [(of_set s hs).trans_ofSet hs']
ext <;> simp [hs'.interior_eq]
-#align local_homeomorph.of_set_trans_of_set LocalHomeomorph.ofSet_trans_ofSet
+#align local_homeomorph.of_set_trans_of_set PartialHomeomorph.ofSet_trans_ofSet
-/
-#print LocalHomeomorph.restr_trans /-
+#print PartialHomeomorph.restr_trans /-
theorem restr_trans (s : Set α) : (e.restr s).trans e' = (e.trans e').restr s :=
eq_of_localEquiv_eq <| LocalEquiv.restr_trans e.toLocalEquiv e'.toLocalEquiv (interior s)
-#align local_homeomorph.restr_trans LocalHomeomorph.restr_trans
+#align local_homeomorph.restr_trans PartialHomeomorph.restr_trans
-/
-#print LocalHomeomorph.transHomeomorph /-
+#print PartialHomeomorph.transHomeomorph /-
/-- Postcompose a local homeomorphism with an homeomorphism.
We modify the source and target to have better definitional behavior. -/
@[simps (config := { fullyApplied := false })]
-def transHomeomorph (e' : β ≃ₜ γ) : LocalHomeomorph α γ
+def transHomeomorph (e' : β ≃ₜ γ) : PartialHomeomorph α γ
where
toLocalEquiv := e.toLocalEquiv.transEquiv e'.toEquiv
open_source := e.open_source
open_target := e.open_target.Preimage e'.symm.Continuous
continuous_toFun := e'.Continuous.comp_continuousOn e.ContinuousOn
continuous_invFun := e.symm.ContinuousOn.comp e'.symm.Continuous.ContinuousOn fun x h => h
-#align local_homeomorph.trans_homeomorph LocalHomeomorph.transHomeomorph
+#align local_homeomorph.trans_homeomorph PartialHomeomorph.transHomeomorph
-/
-#print LocalHomeomorph.transHomeomorph_eq_trans /-
+#print PartialHomeomorph.transHomeomorph_eq_trans /-
theorem transHomeomorph_eq_trans (e' : β ≃ₜ γ) :
- e.transHomeomorph e' = e.trans e'.toLocalHomeomorph :=
+ e.transHomeomorph e' = e.trans e'.toPartialHomeomorph :=
toLocalEquiv_injective <| LocalEquiv.transEquiv_eq_trans _ _
-#align local_homeomorph.trans_equiv_eq_trans LocalHomeomorph.transHomeomorph_eq_trans
+#align local_homeomorph.trans_equiv_eq_trans PartialHomeomorph.transHomeomorph_eq_trans
-/
-#print Homeomorph.transLocalHomeomorph /-
+#print Homeomorph.transPartialHomeomorph /-
/-- Precompose a local homeomorphism with an homeomorphism.
We modify the source and target to have better definitional behavior. -/
@[simps (config := { fullyApplied := false })]
-def Homeomorph.transLocalHomeomorph (e : α ≃ₜ β) : LocalHomeomorph α γ
+def Homeomorph.transPartialHomeomorph (e : α ≃ₜ β) : PartialHomeomorph α γ
where
toLocalEquiv := e.toEquiv.transLocalEquiv e'.toLocalEquiv
open_source := e'.open_source.Preimage e.Continuous
open_target := e'.open_target
continuous_toFun := e'.ContinuousOn.comp e.Continuous.ContinuousOn fun x h => h
continuous_invFun := e.symm.Continuous.comp_continuousOn e'.symm.ContinuousOn
-#align homeomorph.trans_local_homeomorph Homeomorph.transLocalHomeomorph
+#align homeomorph.trans_local_homeomorph Homeomorph.transPartialHomeomorph
-/
-#print Homeomorph.transLocalHomeomorph_eq_trans /-
-theorem Homeomorph.transLocalHomeomorph_eq_trans (e : α ≃ₜ β) :
- e.transLocalHomeomorph e' = e.toLocalHomeomorph.trans e' :=
+#print Homeomorph.transPartialHomeomorph_eq_trans /-
+theorem Homeomorph.transPartialHomeomorph_eq_trans (e : α ≃ₜ β) :
+ e.transPartialHomeomorph e' = e.toPartialHomeomorph.trans e' :=
toLocalEquiv_injective <| Equiv.transLocalEquiv_eq_trans _ _
-#align homeomorph.trans_local_homeomorph_eq_trans Homeomorph.transLocalHomeomorph_eq_trans
+#align homeomorph.trans_local_homeomorph_eq_trans Homeomorph.transPartialHomeomorph_eq_trans
-/
-#print LocalHomeomorph.EqOnSource /-
+#print PartialHomeomorph.EqOnSource /-
/-- `eq_on_source e e'` means that `e` and `e'` have the same source, and coincide there. They
should really be considered the same local equiv. -/
-def EqOnSource (e e' : LocalHomeomorph α β) : Prop :=
+def EqOnSource (e e' : PartialHomeomorph α β) : Prop :=
e.source = e'.source ∧ EqOn e e' e.source
-#align local_homeomorph.eq_on_source LocalHomeomorph.EqOnSource
+#align local_homeomorph.eq_on_source PartialHomeomorph.EqOnSource
-/
-#print LocalHomeomorph.eqOnSource_iff /-
-theorem eqOnSource_iff (e e' : LocalHomeomorph α β) :
+#print PartialHomeomorph.eqOnSource_iff /-
+theorem eqOnSource_iff (e e' : PartialHomeomorph α β) :
EqOnSource e e' ↔ LocalEquiv.EqOnSource e.toLocalEquiv e'.toLocalEquiv :=
Iff.rfl
-#align local_homeomorph.eq_on_source_iff LocalHomeomorph.eqOnSource_iff
+#align local_homeomorph.eq_on_source_iff PartialHomeomorph.eqOnSource_iff
-/
/-- `eq_on_source` is an equivalence relation -/
-instance : Setoid (LocalHomeomorph α β)
+instance : Setoid (PartialHomeomorph α β)
where
R := EqOnSource
iseqv :=
@@ -1273,66 +1274,66 @@ instance : Setoid (LocalHomeomorph α β)
(@LocalEquiv.eqOnSourceSetoid α β).iseqv.2.2 ((eqOnSource_iff e e').1 h)
((eqOnSource_iff e' e'').1 h')⟩
-#print LocalHomeomorph.eqOnSource_refl /-
+#print PartialHomeomorph.eqOnSource_refl /-
theorem eqOnSource_refl : e ≈ e :=
Setoid.refl _
-#align local_homeomorph.eq_on_source_refl LocalHomeomorph.eqOnSource_refl
+#align local_homeomorph.eq_on_source_refl PartialHomeomorph.eqOnSource_refl
-/
-#print LocalHomeomorph.EqOnSource.symm' /-
+#print PartialHomeomorph.EqOnSource.symm' /-
/-- If two local homeomorphisms are equivalent, so are their inverses -/
-theorem EqOnSource.symm' {e e' : LocalHomeomorph α β} (h : e ≈ e') : e.symm ≈ e'.symm :=
+theorem EqOnSource.symm' {e e' : PartialHomeomorph α β} (h : e ≈ e') : e.symm ≈ e'.symm :=
LocalEquiv.EqOnSource.symm' h
-#align local_homeomorph.eq_on_source.symm' LocalHomeomorph.EqOnSource.symm'
+#align local_homeomorph.eq_on_source.symm' PartialHomeomorph.EqOnSource.symm'
-/
-#print LocalHomeomorph.EqOnSource.source_eq /-
+#print PartialHomeomorph.EqOnSource.source_eq /-
/-- Two equivalent local homeomorphisms have the same source -/
-theorem EqOnSource.source_eq {e e' : LocalHomeomorph α β} (h : e ≈ e') : e.source = e'.source :=
+theorem EqOnSource.source_eq {e e' : PartialHomeomorph α β} (h : e ≈ e') : e.source = e'.source :=
h.1
-#align local_homeomorph.eq_on_source.source_eq LocalHomeomorph.EqOnSource.source_eq
+#align local_homeomorph.eq_on_source.source_eq PartialHomeomorph.EqOnSource.source_eq
-/
-#print LocalHomeomorph.EqOnSource.target_eq /-
+#print PartialHomeomorph.EqOnSource.target_eq /-
/-- Two equivalent local homeomorphisms have the same target -/
-theorem EqOnSource.target_eq {e e' : LocalHomeomorph α β} (h : e ≈ e') : e.target = e'.target :=
+theorem EqOnSource.target_eq {e e' : PartialHomeomorph α β} (h : e ≈ e') : e.target = e'.target :=
h.symm'.1
-#align local_homeomorph.eq_on_source.target_eq LocalHomeomorph.EqOnSource.target_eq
+#align local_homeomorph.eq_on_source.target_eq PartialHomeomorph.EqOnSource.target_eq
-/
-#print LocalHomeomorph.EqOnSource.eqOn /-
+#print PartialHomeomorph.EqOnSource.eqOn /-
/-- Two equivalent local homeomorphisms have coinciding `to_fun` on the source -/
-theorem EqOnSource.eqOn {e e' : LocalHomeomorph α β} (h : e ≈ e') : EqOn e e' e.source :=
+theorem EqOnSource.eqOn {e e' : PartialHomeomorph α β} (h : e ≈ e') : EqOn e e' e.source :=
h.2
-#align local_homeomorph.eq_on_source.eq_on LocalHomeomorph.EqOnSource.eqOn
+#align local_homeomorph.eq_on_source.eq_on PartialHomeomorph.EqOnSource.eqOn
-/
-#print LocalHomeomorph.EqOnSource.symm_eqOn_target /-
+#print PartialHomeomorph.EqOnSource.symm_eqOn_target /-
/-- Two equivalent local homeomorphisms have coinciding `inv_fun` on the target -/
-theorem EqOnSource.symm_eqOn_target {e e' : LocalHomeomorph α β} (h : e ≈ e') :
+theorem EqOnSource.symm_eqOn_target {e e' : PartialHomeomorph α β} (h : e ≈ e') :
EqOn e.symm e'.symm e.target :=
h.symm'.2
-#align local_homeomorph.eq_on_source.symm_eq_on_target LocalHomeomorph.EqOnSource.symm_eqOn_target
+#align local_homeomorph.eq_on_source.symm_eq_on_target PartialHomeomorph.EqOnSource.symm_eqOn_target
-/
-#print LocalHomeomorph.EqOnSource.trans' /-
+#print PartialHomeomorph.EqOnSource.trans' /-
/-- Composition of local homeomorphisms respects equivalence -/
-theorem EqOnSource.trans' {e e' : LocalHomeomorph α β} {f f' : LocalHomeomorph β γ} (he : e ≈ e')
- (hf : f ≈ f') : e.trans f ≈ e'.trans f' :=
+theorem EqOnSource.trans' {e e' : PartialHomeomorph α β} {f f' : PartialHomeomorph β γ}
+ (he : e ≈ e') (hf : f ≈ f') : e.trans f ≈ e'.trans f' :=
LocalEquiv.EqOnSource.trans' he hf
-#align local_homeomorph.eq_on_source.trans' LocalHomeomorph.EqOnSource.trans'
+#align local_homeomorph.eq_on_source.trans' PartialHomeomorph.EqOnSource.trans'
-/
-#print LocalHomeomorph.EqOnSource.restr /-
+#print PartialHomeomorph.EqOnSource.restr /-
/-- Restriction of local homeomorphisms respects equivalence -/
-theorem EqOnSource.restr {e e' : LocalHomeomorph α β} (he : e ≈ e') (s : Set α) :
+theorem EqOnSource.restr {e e' : PartialHomeomorph α β} (he : e ≈ e') (s : Set α) :
e.restr s ≈ e'.restr s :=
LocalEquiv.EqOnSource.restr he _
-#align local_homeomorph.eq_on_source.restr LocalHomeomorph.EqOnSource.restr
+#align local_homeomorph.eq_on_source.restr PartialHomeomorph.EqOnSource.restr
-/
-#print LocalHomeomorph.Set.EqOn.restr_eqOn_source /-
-theorem Set.EqOn.restr_eqOn_source {e e' : LocalHomeomorph α β}
+#print PartialHomeomorph.Set.EqOn.restr_eqOn_source /-
+theorem Set.EqOn.restr_eqOn_source {e e' : PartialHomeomorph α β}
(h : EqOn e e' (e.source ∩ e'.source)) : e.restr e'.source ≈ e'.restr e.source :=
by
constructor
@@ -1341,74 +1342,75 @@ theorem Set.EqOn.restr_eqOn_source {e e' : LocalHomeomorph α β}
exact Set.inter_comm _ _
· rw [e.restr_source' _ e'.open_source]
refine' (eq_on.trans _ h).trans _ <;> simp only [mfld_simps]
-#align local_homeomorph.set.eq_on.restr_eq_on_source LocalHomeomorph.Set.EqOn.restr_eqOn_source
+#align local_homeomorph.set.eq_on.restr_eq_on_source PartialHomeomorph.Set.EqOn.restr_eqOn_source
-/
-#print LocalHomeomorph.trans_self_symm /-
+#print PartialHomeomorph.trans_self_symm /-
/-- Composition of a local homeomorphism and its inverse is equivalent to the restriction of the
identity to the source -/
-theorem trans_self_symm : e.trans e.symm ≈ LocalHomeomorph.ofSet e.source e.open_source :=
+theorem trans_self_symm : e.trans e.symm ≈ PartialHomeomorph.ofSet e.source e.open_source :=
LocalEquiv.trans_self_symm _
-#align local_homeomorph.trans_self_symm LocalHomeomorph.trans_self_symm
+#align local_homeomorph.trans_self_symm PartialHomeomorph.trans_self_symm
-/
-#print LocalHomeomorph.trans_symm_self /-
-theorem trans_symm_self : e.symm.trans e ≈ LocalHomeomorph.ofSet e.target e.open_target :=
+#print PartialHomeomorph.trans_symm_self /-
+theorem trans_symm_self : e.symm.trans e ≈ PartialHomeomorph.ofSet e.target e.open_target :=
e.symm.trans_self_symm
-#align local_homeomorph.trans_symm_self LocalHomeomorph.trans_symm_self
+#align local_homeomorph.trans_symm_self PartialHomeomorph.trans_symm_self
-/
-#print LocalHomeomorph.eq_of_eqOnSource_univ /-
-theorem eq_of_eqOnSource_univ {e e' : LocalHomeomorph α β} (h : e ≈ e') (s : e.source = univ)
+#print PartialHomeomorph.eq_of_eqOnSource_univ /-
+theorem eq_of_eqOnSource_univ {e e' : PartialHomeomorph α β} (h : e ≈ e') (s : e.source = univ)
(t : e.target = univ) : e = e' :=
eq_of_localEquiv_eq <| LocalEquiv.eq_of_eqOnSource_univ _ _ h s t
-#align local_homeomorph.eq_of_eq_on_source_univ LocalHomeomorph.eq_of_eqOnSource_univ
+#align local_homeomorph.eq_of_eq_on_source_univ PartialHomeomorph.eq_of_eqOnSource_univ
-/
section Prod
-#print LocalHomeomorph.prod /-
+#print PartialHomeomorph.prod /-
/-- The product of two local homeomorphisms, as a local homeomorphism on the product space. -/
@[simps (config := mfld_cfg) toLocalEquiv apply,
simps (config := { attrs := [] }) source target symm_apply]
-def prod (e : LocalHomeomorph α β) (e' : LocalHomeomorph γ δ) : LocalHomeomorph (α × γ) (β × δ)
+def prod (e : PartialHomeomorph α β) (e' : PartialHomeomorph γ δ) :
+ PartialHomeomorph (α × γ) (β × δ)
where
open_source := e.open_source.Prod e'.open_source
open_target := e.open_target.Prod e'.open_target
continuous_toFun := e.ContinuousOn.Prod_map e'.ContinuousOn
continuous_invFun := e.continuousOn_symm.Prod_map e'.continuousOn_symm
toLocalEquiv := e.toLocalEquiv.Prod e'.toLocalEquiv
-#align local_homeomorph.prod LocalHomeomorph.prod
+#align local_homeomorph.prod PartialHomeomorph.prod
-/
-#print LocalHomeomorph.prod_symm /-
+#print PartialHomeomorph.prod_symm /-
@[simp, mfld_simps]
-theorem prod_symm (e : LocalHomeomorph α β) (e' : LocalHomeomorph γ δ) :
+theorem prod_symm (e : PartialHomeomorph α β) (e' : PartialHomeomorph γ δ) :
(e.Prod e').symm = e.symm.Prod e'.symm :=
rfl
-#align local_homeomorph.prod_symm LocalHomeomorph.prod_symm
+#align local_homeomorph.prod_symm PartialHomeomorph.prod_symm
-/
-#print LocalHomeomorph.refl_prod_refl /-
+#print PartialHomeomorph.refl_prod_refl /-
@[simp]
theorem refl_prod_refl {α β : Type _} [TopologicalSpace α] [TopologicalSpace β] :
- (LocalHomeomorph.refl α).Prod (LocalHomeomorph.refl β) = LocalHomeomorph.refl (α × β) := by
- ext1 ⟨x, y⟩; · rfl; · rintro ⟨x, y⟩; rfl; exact univ_prod_univ
-#align local_homeomorph.refl_prod_refl LocalHomeomorph.refl_prod_refl
+ (PartialHomeomorph.refl α).Prod (PartialHomeomorph.refl β) = PartialHomeomorph.refl (α × β) :=
+ by ext1 ⟨x, y⟩; · rfl; · rintro ⟨x, y⟩; rfl; exact univ_prod_univ
+#align local_homeomorph.refl_prod_refl PartialHomeomorph.refl_prod_refl
-/
-#print LocalHomeomorph.prod_trans /-
+#print PartialHomeomorph.prod_trans /-
@[simp, mfld_simps]
theorem prod_trans {η : Type _} {ε : Type _} [TopologicalSpace η] [TopologicalSpace ε]
- (e : LocalHomeomorph α β) (f : LocalHomeomorph β γ) (e' : LocalHomeomorph δ η)
- (f' : LocalHomeomorph η ε) : (e.Prod e').trans (f.Prod f') = (e.trans f).Prod (e'.trans f') :=
- LocalHomeomorph.eq_of_localEquiv_eq <| by
+ (e : PartialHomeomorph α β) (f : PartialHomeomorph β γ) (e' : PartialHomeomorph δ η)
+ (f' : PartialHomeomorph η ε) : (e.Prod e').trans (f.Prod f') = (e.trans f).Prod (e'.trans f') :=
+ PartialHomeomorph.eq_of_localEquiv_eq <| by
dsimp only [trans_to_local_equiv, prod_to_local_equiv] <;> apply LocalEquiv.prod_trans
-#align local_homeomorph.prod_trans LocalHomeomorph.prod_trans
+#align local_homeomorph.prod_trans PartialHomeomorph.prod_trans
-/
-#print LocalHomeomorph.prod_eq_prod_of_nonempty /-
-theorem prod_eq_prod_of_nonempty {e₁ e₁' : LocalHomeomorph α β} {e₂ e₂' : LocalHomeomorph γ δ}
+#print PartialHomeomorph.prod_eq_prod_of_nonempty /-
+theorem prod_eq_prod_of_nonempty {e₁ e₁' : PartialHomeomorph α β} {e₂ e₂' : PartialHomeomorph γ δ}
(h : (e₁.Prod e₂).source.Nonempty) : e₁.Prod e₂ = e₁'.Prod e₂' ↔ e₁ = e₁' ∧ e₂ = e₂' :=
by
obtain ⟨⟨x, y⟩, -⟩ := id h
@@ -1416,24 +1418,24 @@ theorem prod_eq_prod_of_nonempty {e₁ e₁' : LocalHomeomorph α β} {e₂ e₂
haveI : Nonempty β := ⟨e₁ x⟩
haveI : Nonempty γ := ⟨y⟩
haveI : Nonempty δ := ⟨e₂ y⟩
- simp_rw [LocalHomeomorph.ext_iff, prod_apply, prod_symm_apply, prod_source, Prod.ext_iff,
+ simp_rw [PartialHomeomorph.ext_iff, prod_apply, prod_symm_apply, prod_source, Prod.ext_iff,
Set.prod_eq_prod_iff_of_nonempty h, forall_and, Prod.forall, forall_const, forall_forall_const,
and_assoc', and_left_comm]
-#align local_homeomorph.prod_eq_prod_of_nonempty LocalHomeomorph.prod_eq_prod_of_nonempty
+#align local_homeomorph.prod_eq_prod_of_nonempty PartialHomeomorph.prod_eq_prod_of_nonempty
-/
-#print LocalHomeomorph.prod_eq_prod_of_nonempty' /-
-theorem prod_eq_prod_of_nonempty' {e₁ e₁' : LocalHomeomorph α β} {e₂ e₂' : LocalHomeomorph γ δ}
+#print PartialHomeomorph.prod_eq_prod_of_nonempty' /-
+theorem prod_eq_prod_of_nonempty' {e₁ e₁' : PartialHomeomorph α β} {e₂ e₂' : PartialHomeomorph γ δ}
(h : (e₁'.Prod e₂').source.Nonempty) : e₁.Prod e₂ = e₁'.Prod e₂' ↔ e₁ = e₁' ∧ e₂ = e₂' := by
rw [eq_comm, prod_eq_prod_of_nonempty h, eq_comm, @eq_comm _ e₂']
-#align local_homeomorph.prod_eq_prod_of_nonempty' LocalHomeomorph.prod_eq_prod_of_nonempty'
+#align local_homeomorph.prod_eq_prod_of_nonempty' PartialHomeomorph.prod_eq_prod_of_nonempty'
-/
end Prod
section Piecewise
-#print LocalHomeomorph.piecewise /-
+#print PartialHomeomorph.piecewise /-
/-- Combine two `local_homeomorph`s using `set.piecewise`. The source of the new `local_homeomorph`
is `s.ite e.source e'.source = e.source ∩ s ∪ e'.source \ s`, and similarly for target. The
function sends `e.source ∩ s` to `e.target ∩ t` using `e` and `e'.source \ s` to `e'.target \ t`
@@ -1443,10 +1445,10 @@ and `t` are related both by `e.is_image` and `e'.is_image`. To ensure that the n
continuous on `source`/`target`, it also assumes that `e.source` and `e'.source` meet `frontier s`
on the same set and `e x = e' x` on this intersection. -/
@[simps (config := { fullyApplied := false }) toLocalEquiv apply]
-def piecewise (e e' : LocalHomeomorph α β) (s : Set α) (t : Set β) [∀ x, Decidable (x ∈ s)]
+def piecewise (e e' : PartialHomeomorph α β) (s : Set α) (t : Set β) [∀ x, Decidable (x ∈ s)]
[∀ y, Decidable (y ∈ t)] (H : e.IsImage s t) (H' : e'.IsImage s t)
(Hs : e.source ∩ frontier s = e'.source ∩ frontier s)
- (Heq : EqOn e e' (e.source ∩ frontier s)) : LocalHomeomorph α β
+ (Heq : EqOn e e' (e.source ∩ frontier s)) : PartialHomeomorph α β
where
toLocalEquiv := e.toLocalEquiv.piecewise e'.toLocalEquiv s t H H'
open_source := e.open_source.ite e'.open_source Hs
@@ -1457,13 +1459,13 @@ def piecewise (e e' : LocalHomeomorph α β) (s : Set α) (t : Set β) [∀ x, D
continuousOn_piecewise_ite e.continuousOn_symm e'.continuousOn_symm
(H.frontier.inter_eq_of_inter_eq_of_eqOn H'.frontier Hs Heq)
(H.frontier.symm_eq_on_of_inter_eq_of_eqOn Hs Heq)
-#align local_homeomorph.piecewise LocalHomeomorph.piecewise
+#align local_homeomorph.piecewise PartialHomeomorph.piecewise
-/
-#print LocalHomeomorph.symm_piecewise /-
+#print PartialHomeomorph.symm_piecewise /-
@[simp]
-theorem symm_piecewise (e e' : LocalHomeomorph α β) {s : Set α} {t : Set β} [∀ x, Decidable (x ∈ s)]
- [∀ y, Decidable (y ∈ t)] (H : e.IsImage s t) (H' : e'.IsImage s t)
+theorem symm_piecewise (e e' : PartialHomeomorph α β) {s : Set α} {t : Set β}
+ [∀ x, Decidable (x ∈ s)] [∀ y, Decidable (y ∈ t)] (H : e.IsImage s t) (H' : e'.IsImage s t)
(Hs : e.source ∩ frontier s = e'.source ∩ frontier s)
(Heq : EqOn e e' (e.source ∩ frontier s)) :
(e.piecewise e' s t H H' Hs Heq).symm =
@@ -1471,23 +1473,23 @@ theorem symm_piecewise (e e' : LocalHomeomorph α β) {s : Set α} {t : Set β}
(H.frontier.inter_eq_of_inter_eq_of_eqOn H'.frontier Hs Heq)
(H.frontier.symm_eq_on_of_inter_eq_of_eqOn Hs Heq) :=
rfl
-#align local_homeomorph.symm_piecewise LocalHomeomorph.symm_piecewise
+#align local_homeomorph.symm_piecewise PartialHomeomorph.symm_piecewise
-/
-#print LocalHomeomorph.disjointUnion /-
+#print PartialHomeomorph.disjointUnion /-
/-- Combine two `local_homeomorph`s with disjoint sources and disjoint targets. We reuse
`local_homeomorph.piecewise` then override `to_local_equiv` to `local_equiv.disjoint_union`.
This way we have better definitional equalities for `source` and `target`. -/
-def disjointUnion (e e' : LocalHomeomorph α β) [∀ x, Decidable (x ∈ e.source)]
+def disjointUnion (e e' : PartialHomeomorph α β) [∀ x, Decidable (x ∈ e.source)]
[∀ y, Decidable (y ∈ e.target)] (Hs : Disjoint e.source e'.source)
- (Ht : Disjoint e.target e'.target) : LocalHomeomorph α β :=
+ (Ht : Disjoint e.target e'.target) : PartialHomeomorph α β :=
(e.piecewise e' e.source e.target e.isImage_source_target
(e'.isImage_source_target_of_disjoint e Hs.symm Ht.symm)
(by rw [e.open_source.inter_frontier_eq, (Hs.symm.frontier_right e'.open_source).inter_eq])
(by rw [e.open_source.inter_frontier_eq]; exact eq_on_empty _ _)).replaceEquiv
(e.toLocalEquiv.disjointUnion e'.toLocalEquiv Hs Ht)
(LocalEquiv.disjointUnion_eq_piecewise _ _ _ _).symm
-#align local_homeomorph.disjoint_union LocalHomeomorph.disjointUnion
+#align local_homeomorph.disjoint_union PartialHomeomorph.disjointUnion
-/
end Piecewise
@@ -1495,12 +1497,12 @@ end Piecewise
section Pi
variable {ι : Type _} [Fintype ι] {Xi Yi : ι → Type _} [∀ i, TopologicalSpace (Xi i)]
- [∀ i, TopologicalSpace (Yi i)] (ei : ∀ i, LocalHomeomorph (Xi i) (Yi i))
+ [∀ i, TopologicalSpace (Yi i)] (ei : ∀ i, PartialHomeomorph (Xi i) (Yi i))
-#print LocalHomeomorph.pi /-
+#print PartialHomeomorph.pi /-
/-- The product of a finite family of `local_homeomorph`s. -/
@[simps toLocalEquiv]
-def pi : LocalHomeomorph (∀ i, Xi i) (∀ i, Yi i)
+def pi : PartialHomeomorph (∀ i, Xi i) (∀ i, Yi i)
where
toLocalEquiv := LocalEquiv.pi fun i => (ei i).toLocalEquiv
open_source := isOpen_set_pi finite_univ fun i hi => (ei i).open_source
@@ -1511,14 +1513,14 @@ def pi : LocalHomeomorph (∀ i, Xi i) (∀ i, Yi i)
continuous_invFun :=
continuousOn_pi.2 fun i =>
(ei i).continuousOn_symm.comp (continuous_apply _).ContinuousOn fun f hf => hf i trivial
-#align local_homeomorph.pi LocalHomeomorph.pi
+#align local_homeomorph.pi PartialHomeomorph.pi
-/
end Pi
section Continuity
-#print LocalHomeomorph.continuousWithinAt_iff_continuousWithinAt_comp_right /-
+#print PartialHomeomorph.continuousWithinAt_iff_continuousWithinAt_comp_right /-
/-- Continuity within a set at a point can be read under right composition with a local
homeomorphism, if the point is in its target -/
theorem continuousWithinAt_iff_continuousWithinAt_comp_right {f : β → γ} {s : Set β} {x : β}
@@ -1526,20 +1528,20 @@ theorem continuousWithinAt_iff_continuousWithinAt_comp_right {f : β → γ} {s
ContinuousWithinAt f s x ↔ ContinuousWithinAt (f ∘ e) (e ⁻¹' s) (e.symm x) := by
simp_rw [ContinuousWithinAt, ← @tendsto_map'_iff _ _ _ _ e,
e.map_nhds_within_preimage_eq (e.map_target h), (· ∘ ·), e.right_inv h]
-#align local_homeomorph.continuous_within_at_iff_continuous_within_at_comp_right LocalHomeomorph.continuousWithinAt_iff_continuousWithinAt_comp_right
+#align local_homeomorph.continuous_within_at_iff_continuous_within_at_comp_right PartialHomeomorph.continuousWithinAt_iff_continuousWithinAt_comp_right
-/
-#print LocalHomeomorph.continuousAt_iff_continuousAt_comp_right /-
+#print PartialHomeomorph.continuousAt_iff_continuousAt_comp_right /-
/-- Continuity at a point can be read under right composition with a local homeomorphism, if the
point is in its target -/
theorem continuousAt_iff_continuousAt_comp_right {f : β → γ} {x : β} (h : x ∈ e.target) :
ContinuousAt f x ↔ ContinuousAt (f ∘ e) (e.symm x) := by
rw [← continuousWithinAt_univ, e.continuous_within_at_iff_continuous_within_at_comp_right h,
preimage_univ, continuousWithinAt_univ]
-#align local_homeomorph.continuous_at_iff_continuous_at_comp_right LocalHomeomorph.continuousAt_iff_continuousAt_comp_right
+#align local_homeomorph.continuous_at_iff_continuous_at_comp_right PartialHomeomorph.continuousAt_iff_continuousAt_comp_right
-/
-#print LocalHomeomorph.continuousOn_iff_continuousOn_comp_right /-
+#print PartialHomeomorph.continuousOn_iff_continuousOn_comp_right /-
/-- A function is continuous on a set if and only if its composition with a local homeomorphism
on the right is continuous on the corresponding set. -/
theorem continuousOn_iff_continuousOn_comp_right {f : β → γ} {s : Set β} (h : s ⊆ e.target) :
@@ -1550,10 +1552,10 @@ theorem continuousOn_iff_continuousOn_comp_right {f : β → γ} {s : Set β} (h
rw [e.continuous_within_at_iff_continuous_within_at_comp_right (h hx),
e.symm_image_eq_source_inter_preimage h, inter_comm, continuousWithinAt_inter]
exact IsOpen.mem_nhds e.open_source (e.map_target (h hx))
-#align local_homeomorph.continuous_on_iff_continuous_on_comp_right LocalHomeomorph.continuousOn_iff_continuousOn_comp_right
+#align local_homeomorph.continuous_on_iff_continuous_on_comp_right PartialHomeomorph.continuousOn_iff_continuousOn_comp_right
-/
-#print LocalHomeomorph.continuousWithinAt_iff_continuousWithinAt_comp_left /-
+#print PartialHomeomorph.continuousWithinAt_iff_continuousWithinAt_comp_left /-
/-- Continuity within a set at a point can be read under left composition with a local
homeomorphism if a neighborhood of the initial point is sent to the source of the local
homeomorphism-/
@@ -1568,10 +1570,10 @@ theorem continuousWithinAt_iff_continuousWithinAt_comp_left {f : γ → α} {s :
(e.continuous_at_symm (e.map_source hx)).ContinuousWithinAt
ContinuousWithinAt.comp this fe_cont (subset_univ _)
exact this.congr (fun y hy => by simp [e.left_inv hy.2]) (by simp [e.left_inv hx])
-#align local_homeomorph.continuous_within_at_iff_continuous_within_at_comp_left LocalHomeomorph.continuousWithinAt_iff_continuousWithinAt_comp_left
+#align local_homeomorph.continuous_within_at_iff_continuous_within_at_comp_left PartialHomeomorph.continuousWithinAt_iff_continuousWithinAt_comp_left
-/
-#print LocalHomeomorph.continuousAt_iff_continuousAt_comp_left /-
+#print PartialHomeomorph.continuousAt_iff_continuousAt_comp_left /-
/-- Continuity at a point can be read under left composition with a local homeomorphism if a
neighborhood of the initial point is sent to the source of the local homeomorphism-/
theorem continuousAt_iff_continuousAt_comp_left {f : γ → α} {x : γ} (h : f ⁻¹' e.source ∈ 𝓝 x) :
@@ -1581,10 +1583,10 @@ theorem continuousAt_iff_continuousAt_comp_left {f : γ → α} {x : γ} (h : f
have h' : f ⁻¹' e.source ∈ 𝓝[univ] x := by rwa [nhdsWithin_univ]
rw [← continuousWithinAt_univ, ← continuousWithinAt_univ,
e.continuous_within_at_iff_continuous_within_at_comp_left hx h']
-#align local_homeomorph.continuous_at_iff_continuous_at_comp_left LocalHomeomorph.continuousAt_iff_continuousAt_comp_left
+#align local_homeomorph.continuous_at_iff_continuous_at_comp_left PartialHomeomorph.continuousAt_iff_continuousAt_comp_left
-/
-#print LocalHomeomorph.continuousOn_iff_continuousOn_comp_left /-
+#print PartialHomeomorph.continuousOn_iff_continuousOn_comp_left /-
/-- A function is continuous on a set if and only if its composition with a local homeomorphism
on the left is continuous on the corresponding set. -/
theorem continuousOn_iff_continuousOn_comp_left {f : γ → α} {s : Set γ} (h : s ⊆ f ⁻¹' e.source) :
@@ -1592,10 +1594,10 @@ theorem continuousOn_iff_continuousOn_comp_left {f : γ → α} {s : Set γ} (h
forall₂_congr fun x hx =>
e.continuousWithinAt_iff_continuousWithinAt_comp_left (h hx)
(mem_of_superset self_mem_nhdsWithin h)
-#align local_homeomorph.continuous_on_iff_continuous_on_comp_left LocalHomeomorph.continuousOn_iff_continuousOn_comp_left
+#align local_homeomorph.continuous_on_iff_continuous_on_comp_left PartialHomeomorph.continuousOn_iff_continuousOn_comp_left
-/
-#print LocalHomeomorph.continuous_iff_continuous_comp_left /-
+#print PartialHomeomorph.continuous_iff_continuous_comp_left /-
/-- A function is continuous if and only if its composition with a local homeomorphism
on the left is continuous and its image is contained in the source. -/
theorem continuous_iff_continuous_comp_left {f : γ → α} (h : f ⁻¹' e.source = univ) :
@@ -1603,12 +1605,12 @@ theorem continuous_iff_continuous_comp_left {f : γ → α} (h : f ⁻¹' e.sour
by
simp only [continuous_iff_continuousOn_univ]
exact e.continuous_on_iff_continuous_on_comp_left (Eq.symm h).Subset
-#align local_homeomorph.continuous_iff_continuous_comp_left LocalHomeomorph.continuous_iff_continuous_comp_left
+#align local_homeomorph.continuous_iff_continuous_comp_left PartialHomeomorph.continuous_iff_continuous_comp_left
-/
end Continuity
-#print LocalHomeomorph.homeomorphOfImageSubsetSource /-
+#print PartialHomeomorph.homeomorphOfImageSubsetSource /-
/-- The homeomorphism obtained by restricting a `local_homeomorph` to a subset of the source. -/
@[simps]
def homeomorphOfImageSubsetSource {s : Set α} {t : Set β} (hs : s ⊆ e.source) (ht : e '' s = t) :
@@ -1630,24 +1632,24 @@ def homeomorphOfImageSubsetSource {s : Set α} {t : Set β} (hs : s ⊆ e.source
let ⟨a, ha1, ha2⟩ := show b ∈ e '' s from ht.symm ▸ hb
ha2 ▸ e.map_source (hs ha1))).subtype_mk
_
-#align local_homeomorph.homeomorph_of_image_subset_source LocalHomeomorph.homeomorphOfImageSubsetSource
+#align local_homeomorph.homeomorph_of_image_subset_source PartialHomeomorph.homeomorphOfImageSubsetSource
-/
-#print LocalHomeomorph.toHomeomorphSourceTarget /-
+#print PartialHomeomorph.toHomeomorphSourceTarget /-
/-- A local homeomrphism defines a homeomorphism between its source and target. -/
def toHomeomorphSourceTarget : e.source ≃ₜ e.target :=
e.homeomorphOfImageSubsetSource subset_rfl e.image_source_eq_target
-#align local_homeomorph.to_homeomorph_source_target LocalHomeomorph.toHomeomorphSourceTarget
+#align local_homeomorph.to_homeomorph_source_target PartialHomeomorph.toHomeomorphSourceTarget
-/
-#print LocalHomeomorph.secondCountableTopology_source /-
-theorem secondCountableTopology_source [SecondCountableTopology β] (e : LocalHomeomorph α β) :
+#print PartialHomeomorph.secondCountableTopology_source /-
+theorem secondCountableTopology_source [SecondCountableTopology β] (e : PartialHomeomorph α β) :
SecondCountableTopology e.source :=
e.toHomeomorphSourceTarget.SecondCountableTopology
-#align local_homeomorph.second_countable_topology_source LocalHomeomorph.secondCountableTopology_source
+#align local_homeomorph.second_countable_topology_source PartialHomeomorph.secondCountableTopology_source
-/
-#print LocalHomeomorph.toHomeomorphOfSourceEqUnivTargetEqUniv /-
+#print PartialHomeomorph.toHomeomorphOfSourceEqUnivTargetEqUniv /-
/-- If a local homeomorphism has source and target equal to univ, then it induces a homeomorphism
between the whole spaces, expressed in this definition. -/
@[simps (config := mfld_cfg) apply symm_apply]
@@ -1665,10 +1667,10 @@ def toHomeomorphOfSourceEqUnivTargetEqUniv (h : e.source = (univ : Set α)) (h'
rw [continuous_iff_continuousOn_univ]
convert e.continuous_inv_fun
rw [h']
-#align local_homeomorph.to_homeomorph_of_source_eq_univ_target_eq_univ LocalHomeomorph.toHomeomorphOfSourceEqUnivTargetEqUniv
+#align local_homeomorph.to_homeomorph_of_source_eq_univ_target_eq_univ PartialHomeomorph.toHomeomorphOfSourceEqUnivTargetEqUniv
-/
-#print LocalHomeomorph.to_openEmbedding /-
+#print PartialHomeomorph.to_openEmbedding /-
/-- A local homeomorphism whose source is all of `α` defines an open embedding of `α` into `β`. The
converse is also true; see `open_embedding.to_local_homeomorph`. -/
theorem to_openEmbedding (h : e.source = Set.univ) : OpenEmbedding e :=
@@ -1682,37 +1684,38 @@ theorem to_openEmbedding (h : e.source = Set.univ) : OpenEmbedding e :=
exact e.inj_on
· intro U hU
simpa only [h, subset_univ, mfld_simps] using e.image_open_of_open hU
-#align local_homeomorph.to_open_embedding LocalHomeomorph.to_openEmbedding
+#align local_homeomorph.to_open_embedding PartialHomeomorph.to_openEmbedding
-/
-end LocalHomeomorph
+end PartialHomeomorph
namespace Homeomorph
variable (e : α ≃ₜ β) (e' : β ≃ₜ γ)
-#print Homeomorph.refl_toLocalHomeomorph /-
+#print Homeomorph.refl_toPartialHomeomorph /-
/- Register as simp lemmas that the fields of a local homeomorphism built from a homeomorphism
correspond to the fields of the original homeomorphism. -/
@[simp, mfld_simps]
-theorem refl_toLocalHomeomorph : (Homeomorph.refl α).toLocalHomeomorph = LocalHomeomorph.refl α :=
+theorem refl_toPartialHomeomorph :
+ (Homeomorph.refl α).toPartialHomeomorph = PartialHomeomorph.refl α :=
rfl
-#align homeomorph.refl_to_local_homeomorph Homeomorph.refl_toLocalHomeomorph
+#align homeomorph.refl_to_local_homeomorph Homeomorph.refl_toPartialHomeomorph
-/
-#print Homeomorph.symm_toLocalHomeomorph /-
+#print Homeomorph.symm_toPartialHomeomorph /-
@[simp, mfld_simps]
-theorem symm_toLocalHomeomorph : e.symm.toLocalHomeomorph = e.toLocalHomeomorph.symm :=
+theorem symm_toPartialHomeomorph : e.symm.toPartialHomeomorph = e.toPartialHomeomorph.symm :=
rfl
-#align homeomorph.symm_to_local_homeomorph Homeomorph.symm_toLocalHomeomorph
+#align homeomorph.symm_to_local_homeomorph Homeomorph.symm_toPartialHomeomorph
-/
-#print Homeomorph.trans_toLocalHomeomorph /-
+#print Homeomorph.trans_toPartialHomeomorph /-
@[simp, mfld_simps]
-theorem trans_toLocalHomeomorph :
- (e.trans e').toLocalHomeomorph = e.toLocalHomeomorph.trans e'.toLocalHomeomorph :=
- LocalHomeomorph.eq_of_localEquiv_eq <| Equiv.trans_toLocalEquiv _ _
-#align homeomorph.trans_to_local_homeomorph Homeomorph.trans_toLocalHomeomorph
+theorem trans_toPartialHomeomorph :
+ (e.trans e').toPartialHomeomorph = e.toPartialHomeomorph.trans e'.toPartialHomeomorph :=
+ PartialHomeomorph.eq_of_localEquiv_eq <| Equiv.trans_toLocalEquiv _ _
+#align homeomorph.trans_to_local_homeomorph Homeomorph.trans_toPartialHomeomorph
-/
end Homeomorph
@@ -1721,14 +1724,14 @@ namespace OpenEmbedding
variable (f : α → β) (h : OpenEmbedding f)
-#print OpenEmbedding.toLocalHomeomorph /-
+#print OpenEmbedding.toPartialHomeomorph /-
/-- An open embedding of `α` into `β`, with `α` nonempty, defines a local homeomorphism whose source
is all of `α`. The converse is also true; see `local_homeomorph.to_open_embedding`. -/
@[simps (config := mfld_cfg) apply source target]
-noncomputable def toLocalHomeomorph [Nonempty α] : LocalHomeomorph α β :=
- LocalHomeomorph.ofContinuousOpen ((h.toEmbedding.inj.InjOn univ).toLocalEquiv _ _)
+noncomputable def toPartialHomeomorph [Nonempty α] : PartialHomeomorph α β :=
+ PartialHomeomorph.ofContinuousOpen ((h.toEmbedding.inj.InjOn univ).toLocalEquiv _ _)
h.Continuous.ContinuousOn h.IsOpenMap isOpen_univ
-#align open_embedding.to_local_homeomorph OpenEmbedding.toLocalHomeomorph
+#align open_embedding.to_local_homeomorph OpenEmbedding.toPartialHomeomorph
-/
#print OpenEmbedding.continuousAt_iff /-
@@ -1737,7 +1740,7 @@ theorem continuousAt_iff {f : α → β} {g : β → γ} (hf : OpenEmbedding f)
by
haveI : Nonempty α := ⟨x⟩
convert ((hf.to_local_homeomorph f).continuousAt_iff_continuousAt_comp_right _).symm
- · apply (LocalHomeomorph.left_inv _ _).symm
+ · apply (PartialHomeomorph.left_inv _ _).symm
simp
· simp
#align open_embedding.continuous_at_iff OpenEmbedding.continuousAt_iff
@@ -1754,8 +1757,8 @@ variable (s : Opens α) [Nonempty s]
#print TopologicalSpace.Opens.localHomeomorphSubtypeCoe /-
/-- The inclusion of an open subset `s` of a space `α` into `α` is a local homeomorphism from the
subtype `s` to `α`. -/
-noncomputable def localHomeomorphSubtypeCoe : LocalHomeomorph s α :=
- OpenEmbedding.toLocalHomeomorph _ s.2.openEmbedding_subtype_val
+noncomputable def localHomeomorphSubtypeCoe : PartialHomeomorph s α :=
+ OpenEmbedding.toPartialHomeomorph _ s.2.openEmbedding_subtype_val
#align topological_space.opens.local_homeomorph_subtype_coe TopologicalSpace.Opens.localHomeomorphSubtypeCoe
-/
@@ -1782,60 +1785,60 @@ theorem localHomeomorphSubtypeCoe_target : s.localHomeomorphSubtypeCoe.target =
end TopologicalSpace.Opens
-namespace LocalHomeomorph
+namespace PartialHomeomorph
open TopologicalSpace
-variable (e : LocalHomeomorph α β)
+variable (e : PartialHomeomorph α β)
variable (s : Opens α) [Nonempty s]
-#print LocalHomeomorph.subtypeRestr /-
+#print PartialHomeomorph.subtypeRestr /-
/-- The restriction of a local homeomorphism `e` to an open subset `s` of the domain type produces a
local homeomorphism whose domain is the subtype `s`.-/
-noncomputable def subtypeRestr : LocalHomeomorph s β :=
+noncomputable def subtypeRestr : PartialHomeomorph s β :=
s.localHomeomorphSubtypeCoe.trans e
-#align local_homeomorph.subtype_restr LocalHomeomorph.subtypeRestr
+#align local_homeomorph.subtype_restr PartialHomeomorph.subtypeRestr
-/
-#print LocalHomeomorph.subtypeRestr_def /-
+#print PartialHomeomorph.subtypeRestr_def /-
theorem subtypeRestr_def : e.subtypeRestr s = s.localHomeomorphSubtypeCoe.trans e :=
rfl
-#align local_homeomorph.subtype_restr_def LocalHomeomorph.subtypeRestr_def
+#align local_homeomorph.subtype_restr_def PartialHomeomorph.subtypeRestr_def
-/
-#print LocalHomeomorph.subtypeRestr_coe /-
+#print PartialHomeomorph.subtypeRestr_coe /-
@[simp, mfld_simps]
theorem subtypeRestr_coe :
- ((e.subtypeRestr s : LocalHomeomorph s β) : s → β) = Set.restrict ↑s (e : α → β) :=
+ ((e.subtypeRestr s : PartialHomeomorph s β) : s → β) = Set.restrict ↑s (e : α → β) :=
rfl
-#align local_homeomorph.subtype_restr_coe LocalHomeomorph.subtypeRestr_coe
+#align local_homeomorph.subtype_restr_coe PartialHomeomorph.subtypeRestr_coe
-/
-#print LocalHomeomorph.subtypeRestr_source /-
+#print PartialHomeomorph.subtypeRestr_source /-
@[simp, mfld_simps]
theorem subtypeRestr_source : (e.subtypeRestr s).source = coe ⁻¹' e.source := by
simp only [subtype_restr_def, mfld_simps]
-#align local_homeomorph.subtype_restr_source LocalHomeomorph.subtypeRestr_source
+#align local_homeomorph.subtype_restr_source PartialHomeomorph.subtypeRestr_source
-/
variable {s}
-#print LocalHomeomorph.map_subtype_source /-
+#print PartialHomeomorph.map_subtype_source /-
theorem map_subtype_source {x : s} (hxe : (x : α) ∈ e.source) : e x ∈ (e.subtypeRestr s).target :=
by
refine' ⟨e.map_source hxe, _⟩
rw [s.local_homeomorph_subtype_coe_target, mem_preimage, e.left_inv_on hxe]
exact x.prop
-#align local_homeomorph.map_subtype_source LocalHomeomorph.map_subtype_source
+#align local_homeomorph.map_subtype_source PartialHomeomorph.map_subtype_source
-/
variable (s)
-#print LocalHomeomorph.subtypeRestr_symm_trans_subtypeRestr /-
+#print PartialHomeomorph.subtypeRestr_symm_trans_subtypeRestr /-
/- This lemma characterizes the transition functions of an open subset in terms of the transition
functions of the original space. -/
-theorem subtypeRestr_symm_trans_subtypeRestr (f f' : LocalHomeomorph α β) :
+theorem subtypeRestr_symm_trans_subtypeRestr (f f' : PartialHomeomorph α β) :
(f.subtypeRestr s).symm.trans (f'.subtypeRestr s) ≈
(f.symm.trans f').restr (f.target ∩ f.symm ⁻¹' s) :=
by
@@ -1852,31 +1855,31 @@ theorem subtypeRestr_symm_trans_subtypeRestr (f f' : LocalHomeomorph α β) :
-- f has been eliminated !!!
refine' Setoid.trans (trans_symm_self s.local_homeomorph_subtype_coe) _
simp only [mfld_simps]
-#align local_homeomorph.subtype_restr_symm_trans_subtype_restr LocalHomeomorph.subtypeRestr_symm_trans_subtypeRestr
+#align local_homeomorph.subtype_restr_symm_trans_subtype_restr PartialHomeomorph.subtypeRestr_symm_trans_subtypeRestr
-/
-#print LocalHomeomorph.subtypeRestr_symm_eqOn_of_le /-
+#print PartialHomeomorph.subtypeRestr_symm_eqOn_of_le /-
theorem subtypeRestr_symm_eqOn_of_le {U V : Opens α} [Nonempty U] [Nonempty V] (hUV : U ≤ V) :
EqOn (e.subtypeRestr V).symm (Set.inclusion hUV ∘ (e.subtypeRestr U).symm)
(e.subtypeRestr U).target :=
by
set i := Set.inclusion hUV
intro y hy
- dsimp [LocalHomeomorph.subtypeRestr_def] at hy ⊢
+ dsimp [PartialHomeomorph.subtypeRestr_def] at hy ⊢
have hyV : e.symm y ∈ V.local_homeomorph_subtype_coe.target :=
by
rw [opens.local_homeomorph_subtype_coe_target] at hy ⊢
exact hUV hy.2
refine' V.local_homeomorph_subtype_coe.inj_on _ trivial _
- · rw [← LocalHomeomorph.symm_target]
- apply LocalHomeomorph.map_source
- rw [LocalHomeomorph.symm_source]
+ · rw [← PartialHomeomorph.symm_target]
+ apply PartialHomeomorph.map_source
+ rw [PartialHomeomorph.symm_source]
exact hyV
· rw [V.local_homeomorph_subtype_coe.right_inv hyV]
show _ = U.local_homeomorph_subtype_coe _
rw [U.local_homeomorph_subtype_coe.right_inv hy.2]
-#align local_homeomorph.subtype_restr_symm_eq_on_of_le LocalHomeomorph.subtypeRestr_symm_eqOn_of_le
+#align local_homeomorph.subtype_restr_symm_eq_on_of_le PartialHomeomorph.subtypeRestr_symm_eqOn_of_le
-/
-end LocalHomeomorph
+end PartialHomeomorph
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -569,10 +569,10 @@ theorem preimage_eventuallyEq_target_inter_preimage_inter {e : LocalHomeomorph
#align local_homeomorph.preimage_eventually_eq_target_inter_preimage_inter LocalHomeomorph.preimage_eventuallyEq_target_inter_preimage_inter
-/
-#print LocalHomeomorph.preimage_open_of_open /-
-theorem preimage_open_of_open {s : Set β} (hs : IsOpen s) : IsOpen (e.source ∩ e ⁻¹' s) :=
- e.ContinuousOn.preimage_open_of_open e.open_source hs
-#align local_homeomorph.preimage_open_of_open LocalHomeomorph.preimage_open_of_open
+#print LocalHomeomorph.isOpen_inter_preimage /-
+theorem isOpen_inter_preimage {s : Set β} (hs : IsOpen s) : IsOpen (e.source ∩ e ⁻¹' s) :=
+ e.ContinuousOn.isOpen_inter_preimage e.open_source hs
+#align local_homeomorph.preimage_open_of_open LocalHomeomorph.isOpen_inter_preimage
-/
/-!
@@ -790,8 +790,8 @@ protected theorem frontier (h : e.IsImage s t) : e.IsImage (frontier s) (frontie
#print LocalHomeomorph.IsImage.isOpen_iff /-
theorem isOpen_iff (h : e.IsImage s t) : IsOpen (e.source ∩ s) ↔ IsOpen (e.target ∩ t) :=
- ⟨fun hs => h.symm_preimage_eq' ▸ e.symm.preimage_open_of_open hs, fun hs =>
- h.preimage_eq' ▸ e.preimage_open_of_open hs⟩
+ ⟨fun hs => h.symm_preimage_eq' ▸ e.symm.isOpen_inter_preimage hs, fun hs =>
+ h.preimage_eq' ▸ e.isOpen_inter_preimage hs⟩
#align local_homeomorph.is_image.is_open_iff LocalHomeomorph.IsImage.isOpen_iff
-/
@@ -846,27 +846,27 @@ theorem preimage_frontier (s : Set β) :
#align local_homeomorph.preimage_frontier LocalHomeomorph.preimage_frontier
-/
-#print LocalHomeomorph.preimage_open_of_open_symm /-
-theorem preimage_open_of_open_symm {s : Set α} (hs : IsOpen s) : IsOpen (e.target ∩ e.symm ⁻¹' s) :=
- e.symm.ContinuousOn.preimage_open_of_open e.open_target hs
-#align local_homeomorph.preimage_open_of_open_symm LocalHomeomorph.preimage_open_of_open_symm
+#print LocalHomeomorph.isOpen_inter_preimage_symm /-
+theorem isOpen_inter_preimage_symm {s : Set α} (hs : IsOpen s) : IsOpen (e.target ∩ e.symm ⁻¹' s) :=
+ e.symm.ContinuousOn.isOpen_inter_preimage e.open_target hs
+#align local_homeomorph.preimage_open_of_open_symm LocalHomeomorph.isOpen_inter_preimage_symm
-/
-#print LocalHomeomorph.image_open_of_open /-
+#print LocalHomeomorph.image_isOpen_of_isOpen /-
/-- The image of an open set in the source is open. -/
-theorem image_open_of_open {s : Set α} (hs : IsOpen s) (h : s ⊆ e.source) : IsOpen (e '' s) :=
+theorem image_isOpen_of_isOpen {s : Set α} (hs : IsOpen s) (h : s ⊆ e.source) : IsOpen (e '' s) :=
by
have : e '' s = e.target ∩ e.symm ⁻¹' s := e.to_local_equiv.image_eq_target_inter_inv_preimage h
rw [this]
exact e.continuous_on_symm.preimage_open_of_open e.open_target hs
-#align local_homeomorph.image_open_of_open LocalHomeomorph.image_open_of_open
+#align local_homeomorph.image_open_of_open LocalHomeomorph.image_isOpen_of_isOpen
-/
-#print LocalHomeomorph.image_open_of_open' /-
+#print LocalHomeomorph.image_isOpen_of_isOpen' /-
/-- The image of the restriction of an open set to the source is open. -/
-theorem image_open_of_open' {s : Set α} (hs : IsOpen s) : IsOpen (e '' (e.source ∩ s)) :=
- image_open_of_open _ (IsOpen.inter e.open_source hs) (inter_subset_left _ _)
-#align local_homeomorph.image_open_of_open' LocalHomeomorph.image_open_of_open'
+theorem image_isOpen_of_isOpen' {s : Set α} (hs : IsOpen s) : IsOpen (e '' (e.source ∩ s)) :=
+ image_isOpen_of_isOpen _ (IsOpen.inter e.open_source hs) (inter_subset_left _ _)
+#align local_homeomorph.image_open_of_open' LocalHomeomorph.image_isOpen_of_isOpen'
-/
#print LocalHomeomorph.ofContinuousOpenRestrict /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -1358,11 +1358,11 @@ theorem trans_symm_self : e.symm.trans e ≈ LocalHomeomorph.ofSet e.target e.op
#align local_homeomorph.trans_symm_self LocalHomeomorph.trans_symm_self
-/
-#print LocalHomeomorph.eq_of_eq_on_source_univ /-
-theorem eq_of_eq_on_source_univ {e e' : LocalHomeomorph α β} (h : e ≈ e') (s : e.source = univ)
+#print LocalHomeomorph.eq_of_eqOnSource_univ /-
+theorem eq_of_eqOnSource_univ {e e' : LocalHomeomorph α β} (h : e ≈ e') (s : e.source = univ)
(t : e.target = univ) : e = e' :=
- eq_of_localEquiv_eq <| LocalEquiv.eq_of_eq_on_source_univ _ _ h s t
-#align local_homeomorph.eq_of_eq_on_source_univ LocalHomeomorph.eq_of_eq_on_source_univ
+ eq_of_localEquiv_eq <| LocalEquiv.eq_of_eqOnSource_univ _ _ h s t
+#align local_homeomorph.eq_of_eq_on_source_univ LocalHomeomorph.eq_of_eqOnSource_univ
-/
section Prod
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,8 +3,8 @@ Copyright (c) 2019 Sébastien Gouëzel. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
-/
-import Mathbin.Logic.Equiv.LocalEquiv
-import Mathbin.Topology.Sets.Opens
+import Logic.Equiv.LocalEquiv
+import Topology.Sets.Opens
#align_import topology.local_homeomorph from "leanprover-community/mathlib"@"431589bce478b2229eba14b14a283250428217db"
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -669,7 +669,7 @@ theorem iff_preimage_eq : e.IsImage s t ↔ e.source ∩ e ⁻¹' t = e.source
#align local_homeomorph.is_image.iff_preimage_eq LocalHomeomorph.IsImage.iff_preimage_eq
-/
-alias iff_preimage_eq ↔ preimage_eq of_preimage_eq
+alias ⟨preimage_eq, of_preimage_eq⟩ := iff_preimage_eq
#align local_homeomorph.is_image.preimage_eq LocalHomeomorph.IsImage.preimage_eq
#align local_homeomorph.is_image.of_preimage_eq LocalHomeomorph.IsImage.of_preimage_eq
@@ -679,7 +679,7 @@ theorem iff_symm_preimage_eq : e.IsImage s t ↔ e.target ∩ e.symm ⁻¹' s =
#align local_homeomorph.is_image.iff_symm_preimage_eq LocalHomeomorph.IsImage.iff_symm_preimage_eq
-/
-alias iff_symm_preimage_eq ↔ symm_preimage_eq of_symm_preimage_eq
+alias ⟨symm_preimage_eq, of_symm_preimage_eq⟩ := iff_symm_preimage_eq
#align local_homeomorph.is_image.symm_preimage_eq LocalHomeomorph.IsImage.symm_preimage_eq
#align local_homeomorph.is_image.of_symm_preimage_eq LocalHomeomorph.IsImage.of_symm_preimage_eq
@@ -690,7 +690,7 @@ theorem iff_symm_preimage_eq' :
#align local_homeomorph.is_image.iff_symm_preimage_eq' LocalHomeomorph.IsImage.iff_symm_preimage_eq'
-/
-alias iff_symm_preimage_eq' ↔ symm_preimage_eq' of_symm_preimage_eq'
+alias ⟨symm_preimage_eq', of_symm_preimage_eq'⟩ := iff_symm_preimage_eq'
#align local_homeomorph.is_image.symm_preimage_eq' LocalHomeomorph.IsImage.symm_preimage_eq'
#align local_homeomorph.is_image.of_symm_preimage_eq' LocalHomeomorph.IsImage.of_symm_preimage_eq'
@@ -700,7 +700,7 @@ theorem iff_preimage_eq' : e.IsImage s t ↔ e.source ∩ e ⁻¹' (e.target ∩
#align local_homeomorph.is_image.iff_preimage_eq' LocalHomeomorph.IsImage.iff_preimage_eq'
-/
-alias iff_preimage_eq' ↔ preimage_eq' of_preimage_eq'
+alias ⟨preimage_eq', of_preimage_eq'⟩ := iff_preimage_eq'
#align local_homeomorph.is_image.preimage_eq' LocalHomeomorph.IsImage.preimage_eq'
#align local_homeomorph.is_image.of_preimage_eq' LocalHomeomorph.IsImage.of_preimage_eq'
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,15 +2,12 @@
Copyright (c) 2019 Sébastien Gouëzel. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
-
-! This file was ported from Lean 3 source module topology.local_homeomorph
-! leanprover-community/mathlib commit 431589bce478b2229eba14b14a283250428217db
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Logic.Equiv.LocalEquiv
import Mathbin.Topology.Sets.Opens
+#align_import topology.local_homeomorph from "leanprover-community/mathlib"@"431589bce478b2229eba14b14a283250428217db"
+
/-!
# Local homeomorphisms
@@ -1223,10 +1220,11 @@ def transHomeomorph (e' : β ≃ₜ γ) : LocalHomeomorph α γ
#align local_homeomorph.trans_homeomorph LocalHomeomorph.transHomeomorph
-/
-#print LocalHomeomorph.trans_equiv_eq_trans /-
-theorem trans_equiv_eq_trans (e' : β ≃ₜ γ) : e.transHomeomorph e' = e.trans e'.toLocalHomeomorph :=
+#print LocalHomeomorph.transHomeomorph_eq_trans /-
+theorem transHomeomorph_eq_trans (e' : β ≃ₜ γ) :
+ e.transHomeomorph e' = e.trans e'.toLocalHomeomorph :=
toLocalEquiv_injective <| LocalEquiv.transEquiv_eq_trans _ _
-#align local_homeomorph.trans_equiv_eq_trans LocalHomeomorph.trans_equiv_eq_trans
+#align local_homeomorph.trans_equiv_eq_trans LocalHomeomorph.transHomeomorph_eq_trans
-/
#print Homeomorph.transLocalHomeomorph /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/d30d31261cdb4d2f5e612eabc3c4bf45556350d5
@@ -1823,12 +1823,14 @@ theorem subtypeRestr_source : (e.subtypeRestr s).source = coe ⁻¹' e.source :=
variable {s}
+#print LocalHomeomorph.map_subtype_source /-
theorem map_subtype_source {x : s} (hxe : (x : α) ∈ e.source) : e x ∈ (e.subtypeRestr s).target :=
by
refine' ⟨e.map_source hxe, _⟩
rw [s.local_homeomorph_subtype_coe_target, mem_preimage, e.left_inv_on hxe]
exact x.prop
#align local_homeomorph.map_subtype_source LocalHomeomorph.map_subtype_source
+-/
variable (s)
@@ -1855,6 +1857,7 @@ theorem subtypeRestr_symm_trans_subtypeRestr (f f' : LocalHomeomorph α β) :
#align local_homeomorph.subtype_restr_symm_trans_subtype_restr LocalHomeomorph.subtypeRestr_symm_trans_subtypeRestr
-/
+#print LocalHomeomorph.subtypeRestr_symm_eqOn_of_le /-
theorem subtypeRestr_symm_eqOn_of_le {U V : Opens α} [Nonempty U] [Nonempty V] (hUV : U ≤ V) :
EqOn (e.subtypeRestr V).symm (Set.inclusion hUV ∘ (e.subtypeRestr U).symm)
(e.subtypeRestr U).target :=
@@ -1875,6 +1878,7 @@ theorem subtypeRestr_symm_eqOn_of_le {U V : Opens α} [Nonempty U] [Nonempty V]
show _ = U.local_homeomorph_subtype_coe _
rw [U.local_homeomorph_subtype_coe.right_inv hy.2]
#align local_homeomorph.subtype_restr_symm_eq_on_of_le LocalHomeomorph.subtypeRestr_symm_eqOn_of_le
+-/
end LocalHomeomorph
mathlib commit https://github.com/leanprover-community/mathlib/commit/6285167a053ad0990fc88e56c48ccd9fae6550eb
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
! This file was ported from Lean 3 source module topology.local_homeomorph
-! leanprover-community/mathlib commit 23aa88e32dcc9d2a24cca7bc23268567ed4cd7d6
+! leanprover-community/mathlib commit 431589bce478b2229eba14b14a283250428217db
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -1821,6 +1821,17 @@ theorem subtypeRestr_source : (e.subtypeRestr s).source = coe ⁻¹' e.source :=
#align local_homeomorph.subtype_restr_source LocalHomeomorph.subtypeRestr_source
-/
+variable {s}
+
+theorem map_subtype_source {x : s} (hxe : (x : α) ∈ e.source) : e x ∈ (e.subtypeRestr s).target :=
+ by
+ refine' ⟨e.map_source hxe, _⟩
+ rw [s.local_homeomorph_subtype_coe_target, mem_preimage, e.left_inv_on hxe]
+ exact x.prop
+#align local_homeomorph.map_subtype_source LocalHomeomorph.map_subtype_source
+
+variable (s)
+
#print LocalHomeomorph.subtypeRestr_symm_trans_subtypeRestr /-
/- This lemma characterizes the transition functions of an open subset in terms of the transition
functions of the original space. -/
@@ -1844,5 +1855,26 @@ theorem subtypeRestr_symm_trans_subtypeRestr (f f' : LocalHomeomorph α β) :
#align local_homeomorph.subtype_restr_symm_trans_subtype_restr LocalHomeomorph.subtypeRestr_symm_trans_subtypeRestr
-/
+theorem subtypeRestr_symm_eqOn_of_le {U V : Opens α} [Nonempty U] [Nonempty V] (hUV : U ≤ V) :
+ EqOn (e.subtypeRestr V).symm (Set.inclusion hUV ∘ (e.subtypeRestr U).symm)
+ (e.subtypeRestr U).target :=
+ by
+ set i := Set.inclusion hUV
+ intro y hy
+ dsimp [LocalHomeomorph.subtypeRestr_def] at hy ⊢
+ have hyV : e.symm y ∈ V.local_homeomorph_subtype_coe.target :=
+ by
+ rw [opens.local_homeomorph_subtype_coe_target] at hy ⊢
+ exact hUV hy.2
+ refine' V.local_homeomorph_subtype_coe.inj_on _ trivial _
+ · rw [← LocalHomeomorph.symm_target]
+ apply LocalHomeomorph.map_source
+ rw [LocalHomeomorph.symm_source]
+ exact hyV
+ · rw [V.local_homeomorph_subtype_coe.right_inv hyV]
+ show _ = U.local_homeomorph_subtype_coe _
+ rw [U.local_homeomorph_subtype_coe.right_inv hy.2]
+#align local_homeomorph.subtype_restr_symm_eq_on_of_le LocalHomeomorph.subtypeRestr_symm_eqOn_of_le
+
end LocalHomeomorph
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -109,9 +109,11 @@ initialize_simps_projections LocalHomeomorph (to_local_equiv_to_fun → apply,
to_local_equiv_inv_fun → symm_apply, toLocalEquiv_source → source, toLocalEquiv_target → target,
-toLocalEquiv)
+#print LocalHomeomorph.continuousOn /-
protected theorem continuousOn : ContinuousOn e e.source :=
e.continuous_toFun
#align local_homeomorph.continuous_on LocalHomeomorph.continuousOn
+-/
#print LocalHomeomorph.continuousOn_symm /-
theorem continuousOn_symm : ContinuousOn e.symm e.target :=
@@ -119,47 +121,63 @@ theorem continuousOn_symm : ContinuousOn e.symm e.target :=
#align local_homeomorph.continuous_on_symm LocalHomeomorph.continuousOn_symm
-/
+#print LocalHomeomorph.mk_coe /-
@[simp, mfld_simps]
theorem mk_coe (e : LocalEquiv α β) (a b c d) : (LocalHomeomorph.mk e a b c d : α → β) = e :=
rfl
#align local_homeomorph.mk_coe LocalHomeomorph.mk_coe
+-/
+#print LocalHomeomorph.mk_coe_symm /-
@[simp, mfld_simps]
theorem mk_coe_symm (e : LocalEquiv α β) (a b c d) :
((LocalHomeomorph.mk e a b c d).symm : β → α) = e.symm :=
rfl
#align local_homeomorph.mk_coe_symm LocalHomeomorph.mk_coe_symm
+-/
+#print LocalHomeomorph.toLocalEquiv_injective /-
theorem toLocalEquiv_injective : Injective (toLocalEquiv : LocalHomeomorph α β → LocalEquiv α β)
| ⟨e, h₁, h₂, h₃, h₄⟩, ⟨e', h₁', h₂', h₃', h₄'⟩, rfl => rfl
#align local_homeomorph.to_local_equiv_injective LocalHomeomorph.toLocalEquiv_injective
+-/
+#print LocalHomeomorph.toFun_eq_coe /-
/- Register a few simp lemmas to make sure that `simp` puts the application of a local
homeomorphism in its normal form, i.e., in terms of its coercion to a function. -/
@[simp, mfld_simps]
theorem toFun_eq_coe (e : LocalHomeomorph α β) : e.toFun = e :=
rfl
#align local_homeomorph.to_fun_eq_coe LocalHomeomorph.toFun_eq_coe
+-/
+#print LocalHomeomorph.invFun_eq_coe /-
@[simp, mfld_simps]
theorem invFun_eq_coe (e : LocalHomeomorph α β) : e.invFun = e.symm :=
rfl
#align local_homeomorph.inv_fun_eq_coe LocalHomeomorph.invFun_eq_coe
+-/
+#print LocalHomeomorph.coe_coe /-
@[simp, mfld_simps]
theorem coe_coe : (e.toLocalEquiv : α → β) = e :=
rfl
#align local_homeomorph.coe_coe LocalHomeomorph.coe_coe
+-/
+#print LocalHomeomorph.coe_coe_symm /-
@[simp, mfld_simps]
theorem coe_coe_symm : (e.toLocalEquiv.symm : β → α) = e.symm :=
rfl
#align local_homeomorph.coe_coe_symm LocalHomeomorph.coe_coe_symm
+-/
+#print LocalHomeomorph.map_source /-
@[simp, mfld_simps]
theorem map_source {x : α} (h : x ∈ e.source) : e x ∈ e.target :=
e.map_source' h
#align local_homeomorph.map_source LocalHomeomorph.map_source
+-/
#print LocalHomeomorph.map_target /-
@[simp, mfld_simps]
@@ -168,10 +186,12 @@ theorem map_target {x : β} (h : x ∈ e.target) : e.symm x ∈ e.source :=
#align local_homeomorph.map_target LocalHomeomorph.map_target
-/
+#print LocalHomeomorph.left_inv /-
@[simp, mfld_simps]
theorem left_inv {x : α} (h : x ∈ e.source) : e.symm (e x) = x :=
e.left_inv' h
#align local_homeomorph.left_inv LocalHomeomorph.left_inv
+-/
#print LocalHomeomorph.right_inv /-
@[simp, mfld_simps]
@@ -180,13 +200,17 @@ theorem right_inv {x : β} (h : x ∈ e.target) : e (e.symm x) = x :=
#align local_homeomorph.right_inv LocalHomeomorph.right_inv
-/
+#print LocalHomeomorph.eq_symm_apply /-
theorem eq_symm_apply {x : α} {y : β} (hx : x ∈ e.source) (hy : y ∈ e.target) :
x = e.symm y ↔ e x = y :=
e.toLocalEquiv.eq_symm_apply hx hy
#align local_homeomorph.eq_symm_apply LocalHomeomorph.eq_symm_apply
+-/
+#print LocalHomeomorph.mapsTo /-
protected theorem mapsTo : MapsTo e e.source e.target := fun x => e.map_source
#align local_homeomorph.maps_to LocalHomeomorph.mapsTo
+-/
#print LocalHomeomorph.symm_mapsTo /-
protected theorem symm_mapsTo : MapsTo e.symm e.target e.source :=
@@ -194,27 +218,39 @@ protected theorem symm_mapsTo : MapsTo e.symm e.target e.source :=
#align local_homeomorph.symm_maps_to LocalHomeomorph.symm_mapsTo
-/
+#print LocalHomeomorph.leftInvOn /-
protected theorem leftInvOn : LeftInvOn e.symm e e.source := fun x => e.left_inv
#align local_homeomorph.left_inv_on LocalHomeomorph.leftInvOn
+-/
+#print LocalHomeomorph.rightInvOn /-
protected theorem rightInvOn : RightInvOn e.symm e e.target := fun x => e.right_inv
#align local_homeomorph.right_inv_on LocalHomeomorph.rightInvOn
+-/
+#print LocalHomeomorph.invOn /-
protected theorem invOn : InvOn e.symm e e.source e.target :=
⟨e.LeftInvOn, e.RightInvOn⟩
#align local_homeomorph.inv_on LocalHomeomorph.invOn
+-/
+#print LocalHomeomorph.injOn /-
protected theorem injOn : InjOn e e.source :=
e.LeftInvOn.InjOn
#align local_homeomorph.inj_on LocalHomeomorph.injOn
+-/
+#print LocalHomeomorph.bijOn /-
protected theorem bijOn : BijOn e e.source e.target :=
e.InvOn.BijOn e.MapsTo e.symm_mapsTo
#align local_homeomorph.bij_on LocalHomeomorph.bijOn
+-/
+#print LocalHomeomorph.surjOn /-
protected theorem surjOn : SurjOn e e.source e.target :=
e.BijOn.SurjOn
#align local_homeomorph.surj_on LocalHomeomorph.surjOn
+-/
#print Homeomorph.toLocalHomeomorph /-
/-- A homeomorphism induces a local homeomorphism on the whole space -/
@@ -240,100 +276,141 @@ def replaceEquiv (e : LocalHomeomorph α β) (e' : LocalEquiv α β) (h : e.toLo
#align local_homeomorph.replace_equiv LocalHomeomorph.replaceEquiv
-/
+#print LocalHomeomorph.replaceEquiv_eq_self /-
theorem replaceEquiv_eq_self (e : LocalHomeomorph α β) (e' : LocalEquiv α β)
(h : e.toLocalEquiv = e') : e.replaceEquiv e' h = e := by cases e; subst e'; rfl
#align local_homeomorph.replace_equiv_eq_self LocalHomeomorph.replaceEquiv_eq_self
+-/
+#print LocalHomeomorph.source_preimage_target /-
theorem source_preimage_target : e.source ⊆ e ⁻¹' e.target :=
e.MapsTo
#align local_homeomorph.source_preimage_target LocalHomeomorph.source_preimage_target
+-/
+#print LocalHomeomorph.eq_of_localEquiv_eq /-
theorem eq_of_localEquiv_eq {e e' : LocalHomeomorph α β} (h : e.toLocalEquiv = e'.toLocalEquiv) :
e = e' := by cases e; cases e'; cases h; rfl
#align local_homeomorph.eq_of_local_equiv_eq LocalHomeomorph.eq_of_localEquiv_eq
+-/
+#print LocalHomeomorph.eventually_left_inverse /-
theorem eventually_left_inverse (e : LocalHomeomorph α β) {x} (hx : x ∈ e.source) :
∀ᶠ y in 𝓝 x, e.symm (e y) = y :=
(e.open_source.eventually_mem hx).mono e.left_inv'
#align local_homeomorph.eventually_left_inverse LocalHomeomorph.eventually_left_inverse
+-/
+#print LocalHomeomorph.eventually_left_inverse' /-
theorem eventually_left_inverse' (e : LocalHomeomorph α β) {x} (hx : x ∈ e.target) :
∀ᶠ y in 𝓝 (e.symm x), e.symm (e y) = y :=
e.eventually_left_inverse (e.map_target hx)
#align local_homeomorph.eventually_left_inverse' LocalHomeomorph.eventually_left_inverse'
+-/
+#print LocalHomeomorph.eventually_right_inverse /-
theorem eventually_right_inverse (e : LocalHomeomorph α β) {x} (hx : x ∈ e.target) :
∀ᶠ y in 𝓝 x, e (e.symm y) = y :=
(e.open_target.eventually_mem hx).mono e.right_inv'
#align local_homeomorph.eventually_right_inverse LocalHomeomorph.eventually_right_inverse
+-/
+#print LocalHomeomorph.eventually_right_inverse' /-
theorem eventually_right_inverse' (e : LocalHomeomorph α β) {x} (hx : x ∈ e.source) :
∀ᶠ y in 𝓝 (e x), e (e.symm y) = y :=
e.eventually_right_inverse (e.map_source hx)
#align local_homeomorph.eventually_right_inverse' LocalHomeomorph.eventually_right_inverse'
+-/
+#print LocalHomeomorph.eventually_ne_nhdsWithin /-
theorem eventually_ne_nhdsWithin (e : LocalHomeomorph α β) {x} (hx : x ∈ e.source) :
∀ᶠ x' in 𝓝[≠] x, e x' ≠ e x :=
eventually_nhdsWithin_iff.2 <|
(e.eventually_left_inverse hx).mono fun x' hx' =>
mt fun h => by rw [mem_singleton_iff, ← e.left_inv hx, ← h, hx']
#align local_homeomorph.eventually_ne_nhds_within LocalHomeomorph.eventually_ne_nhdsWithin
+-/
+#print LocalHomeomorph.nhdsWithin_source_inter /-
theorem nhdsWithin_source_inter {x} (hx : x ∈ e.source) (s : Set α) : 𝓝[e.source ∩ s] x = 𝓝[s] x :=
nhdsWithin_inter_of_mem (mem_nhdsWithin_of_mem_nhds <| IsOpen.mem_nhds e.open_source hx)
#align local_homeomorph.nhds_within_source_inter LocalHomeomorph.nhdsWithin_source_inter
+-/
+#print LocalHomeomorph.nhdsWithin_target_inter /-
theorem nhdsWithin_target_inter {x} (hx : x ∈ e.target) (s : Set β) : 𝓝[e.target ∩ s] x = 𝓝[s] x :=
e.symm.nhdsWithin_source_inter hx s
#align local_homeomorph.nhds_within_target_inter LocalHomeomorph.nhdsWithin_target_inter
+-/
+#print LocalHomeomorph.image_eq_target_inter_inv_preimage /-
theorem image_eq_target_inter_inv_preimage {s : Set α} (h : s ⊆ e.source) :
e '' s = e.target ∩ e.symm ⁻¹' s :=
e.toLocalEquiv.image_eq_target_inter_inv_preimage h
#align local_homeomorph.image_eq_target_inter_inv_preimage LocalHomeomorph.image_eq_target_inter_inv_preimage
+-/
+#print LocalHomeomorph.image_source_inter_eq' /-
theorem image_source_inter_eq' (s : Set α) : e '' (e.source ∩ s) = e.target ∩ e.symm ⁻¹' s :=
e.toLocalEquiv.image_source_inter_eq' s
#align local_homeomorph.image_source_inter_eq' LocalHomeomorph.image_source_inter_eq'
+-/
+#print LocalHomeomorph.image_source_inter_eq /-
theorem image_source_inter_eq (s : Set α) :
e '' (e.source ∩ s) = e.target ∩ e.symm ⁻¹' (e.source ∩ s) :=
e.toLocalEquiv.image_source_inter_eq s
#align local_homeomorph.image_source_inter_eq LocalHomeomorph.image_source_inter_eq
+-/
+#print LocalHomeomorph.symm_image_eq_source_inter_preimage /-
theorem symm_image_eq_source_inter_preimage {s : Set β} (h : s ⊆ e.target) :
e.symm '' s = e.source ∩ e ⁻¹' s :=
e.symm.image_eq_target_inter_inv_preimage h
#align local_homeomorph.symm_image_eq_source_inter_preimage LocalHomeomorph.symm_image_eq_source_inter_preimage
+-/
+#print LocalHomeomorph.symm_image_target_inter_eq /-
theorem symm_image_target_inter_eq (s : Set β) :
e.symm '' (e.target ∩ s) = e.source ∩ e ⁻¹' (e.target ∩ s) :=
e.symm.image_source_inter_eq _
#align local_homeomorph.symm_image_target_inter_eq LocalHomeomorph.symm_image_target_inter_eq
+-/
+#print LocalHomeomorph.source_inter_preimage_inv_preimage /-
theorem source_inter_preimage_inv_preimage (s : Set α) :
e.source ∩ e ⁻¹' (e.symm ⁻¹' s) = e.source ∩ s :=
e.toLocalEquiv.source_inter_preimage_inv_preimage s
#align local_homeomorph.source_inter_preimage_inv_preimage LocalHomeomorph.source_inter_preimage_inv_preimage
+-/
+#print LocalHomeomorph.target_inter_inv_preimage_preimage /-
theorem target_inter_inv_preimage_preimage (s : Set β) :
e.target ∩ e.symm ⁻¹' (e ⁻¹' s) = e.target ∩ s :=
e.symm.source_inter_preimage_inv_preimage _
#align local_homeomorph.target_inter_inv_preimage_preimage LocalHomeomorph.target_inter_inv_preimage_preimage
+-/
+#print LocalHomeomorph.source_inter_preimage_target_inter /-
theorem source_inter_preimage_target_inter (s : Set β) :
e.source ∩ e ⁻¹' (e.target ∩ s) = e.source ∩ e ⁻¹' s :=
e.toLocalEquiv.source_inter_preimage_target_inter s
#align local_homeomorph.source_inter_preimage_target_inter LocalHomeomorph.source_inter_preimage_target_inter
+-/
+#print LocalHomeomorph.image_source_eq_target /-
theorem image_source_eq_target (e : LocalHomeomorph α β) : e '' e.source = e.target :=
e.toLocalEquiv.image_source_eq_target
#align local_homeomorph.image_source_eq_target LocalHomeomorph.image_source_eq_target
+-/
+#print LocalHomeomorph.symm_image_target_eq_source /-
theorem symm_image_target_eq_source (e : LocalHomeomorph α β) : e.symm '' e.target = e.source :=
e.symm.image_source_eq_target
#align local_homeomorph.symm_image_target_eq_source LocalHomeomorph.symm_image_target_eq_source
+-/
+#print LocalHomeomorph.ext /-
/-- Two local homeomorphisms are equal when they have equal `to_fun`, `inv_fun` and `source`.
It is not sufficient to have equal `to_fun` and `source`, as this only determines `inv_fun` on
the target. This would only be true for a weaker notion of equality, arguably the right one,
@@ -343,16 +420,21 @@ protected theorem ext (e' : LocalHomeomorph α β) (h : ∀ x, e x = e' x)
(hinv : ∀ x, e.symm x = e'.symm x) (hs : e.source = e'.source) : e = e' :=
eq_of_localEquiv_eq (LocalEquiv.ext h hinv hs)
#align local_homeomorph.ext LocalHomeomorph.ext
+-/
+#print LocalHomeomorph.ext_iff /-
protected theorem ext_iff {e e' : LocalHomeomorph α β} :
e = e' ↔ (∀ x, e x = e' x) ∧ (∀ x, e.symm x = e'.symm x) ∧ e.source = e'.source :=
⟨by rintro rfl; exact ⟨fun x => rfl, fun x => rfl, rfl⟩, fun h => e.ext e' h.1 h.2.1 h.2.2⟩
#align local_homeomorph.ext_iff LocalHomeomorph.ext_iff
+-/
+#print LocalHomeomorph.symm_toLocalEquiv /-
@[simp, mfld_simps]
theorem symm_toLocalEquiv : e.symm.toLocalEquiv = e.toLocalEquiv.symm :=
rfl
#align local_homeomorph.symm_to_local_equiv LocalHomeomorph.symm_toLocalEquiv
+-/
#print LocalHomeomorph.symm_source /-
-- The following lemmas are already simp via local_equiv
@@ -361,19 +443,25 @@ theorem symm_source : e.symm.source = e.target :=
#align local_homeomorph.symm_source LocalHomeomorph.symm_source
-/
+#print LocalHomeomorph.symm_target /-
theorem symm_target : e.symm.target = e.source :=
rfl
#align local_homeomorph.symm_target LocalHomeomorph.symm_target
+-/
+#print LocalHomeomorph.symm_symm /-
@[simp, mfld_simps]
theorem symm_symm : e.symm.symm = e :=
eq_of_localEquiv_eq <| by simp
#align local_homeomorph.symm_symm LocalHomeomorph.symm_symm
+-/
+#print LocalHomeomorph.continuousAt /-
/-- A local homeomorphism is continuous at any point of its source -/
protected theorem continuousAt {x : α} (h : x ∈ e.source) : ContinuousAt e x :=
(e.ContinuousOn x h).ContinuousAt (e.open_source.mem_nhds h)
#align local_homeomorph.continuous_at LocalHomeomorph.continuousAt
+-/
#print LocalHomeomorph.continuousAt_symm /-
/-- A local homeomorphism inverse is continuous at any point of its target -/
@@ -382,23 +470,32 @@ theorem continuousAt_symm {x : β} (h : x ∈ e.target) : ContinuousAt e.symm x
#align local_homeomorph.continuous_at_symm LocalHomeomorph.continuousAt_symm
-/
+#print LocalHomeomorph.tendsto_symm /-
theorem tendsto_symm {x} (hx : x ∈ e.source) : Tendsto e.symm (𝓝 (e x)) (𝓝 x) := by
simpa only [ContinuousAt, e.left_inv hx] using e.continuous_at_symm (e.map_source hx)
#align local_homeomorph.tendsto_symm LocalHomeomorph.tendsto_symm
+-/
+#print LocalHomeomorph.map_nhds_eq /-
theorem map_nhds_eq {x} (hx : x ∈ e.source) : map e (𝓝 x) = 𝓝 (e x) :=
le_antisymm (e.ContinuousAt hx) <|
le_map_of_right_inverse (e.eventually_right_inverse' hx) (e.tendsto_symm hx)
#align local_homeomorph.map_nhds_eq LocalHomeomorph.map_nhds_eq
+-/
+#print LocalHomeomorph.symm_map_nhds_eq /-
theorem symm_map_nhds_eq {x} (hx : x ∈ e.source) : map e.symm (𝓝 (e x)) = 𝓝 x :=
(e.symm.map_nhds_eq <| e.map_source hx).trans <| by rw [e.left_inv hx]
#align local_homeomorph.symm_map_nhds_eq LocalHomeomorph.symm_map_nhds_eq
+-/
+#print LocalHomeomorph.image_mem_nhds /-
theorem image_mem_nhds {x} (hx : x ∈ e.source) {s : Set α} (hs : s ∈ 𝓝 x) : e '' s ∈ 𝓝 (e x) :=
e.map_nhds_eq hx ▸ Filter.image_mem_map hs
#align local_homeomorph.image_mem_nhds LocalHomeomorph.image_mem_nhds
+-/
+#print LocalHomeomorph.map_nhdsWithin_eq /-
theorem map_nhdsWithin_eq (e : LocalHomeomorph α β) {x} (hx : x ∈ e.source) (s : Set α) :
map e (𝓝[s] x) = 𝓝[e '' (e.source ∩ s)] e x :=
calc
@@ -409,18 +506,24 @@ theorem map_nhdsWithin_eq (e : LocalHomeomorph α β) {x} (hx : x ∈ e.source)
(e.continuousAt_symm (e.map_source hx)).ContinuousWithinAt
(e.ContinuousAt hx).ContinuousWithinAt
#align local_homeomorph.map_nhds_within_eq LocalHomeomorph.map_nhdsWithin_eq
+-/
+#print LocalHomeomorph.map_nhdsWithin_preimage_eq /-
theorem map_nhdsWithin_preimage_eq (e : LocalHomeomorph α β) {x} (hx : x ∈ e.source) (s : Set β) :
map e (𝓝[e ⁻¹' s] x) = 𝓝[s] e x := by
rw [e.map_nhds_within_eq hx, e.image_source_inter_eq', e.target_inter_inv_preimage_preimage,
e.nhds_within_target_inter (e.map_source hx)]
#align local_homeomorph.map_nhds_within_preimage_eq LocalHomeomorph.map_nhdsWithin_preimage_eq
+-/
+#print LocalHomeomorph.eventually_nhds /-
theorem eventually_nhds (e : LocalHomeomorph α β) {x : α} (p : β → Prop) (hx : x ∈ e.source) :
(∀ᶠ y in 𝓝 (e x), p y) ↔ ∀ᶠ x in 𝓝 x, p (e x) :=
Iff.trans (by rw [e.map_nhds_eq hx]) eventually_map
#align local_homeomorph.eventually_nhds LocalHomeomorph.eventually_nhds
+-/
+#print LocalHomeomorph.eventually_nhds' /-
theorem eventually_nhds' (e : LocalHomeomorph α β) {x : α} (p : α → Prop) (hx : x ∈ e.source) :
(∀ᶠ y in 𝓝 (e x), p (e.symm y)) ↔ ∀ᶠ x in 𝓝 x, p x :=
by
@@ -428,14 +531,18 @@ theorem eventually_nhds' (e : LocalHomeomorph α β) {x : α} (p : α → Prop)
refine' eventually_congr ((e.eventually_left_inverse hx).mono fun y hy => _)
rw [hy]
#align local_homeomorph.eventually_nhds' LocalHomeomorph.eventually_nhds'
+-/
+#print LocalHomeomorph.eventually_nhdsWithin /-
theorem eventually_nhdsWithin (e : LocalHomeomorph α β) {x : α} (p : β → Prop) {s : Set α}
(hx : x ∈ e.source) : (∀ᶠ y in 𝓝[e.symm ⁻¹' s] e x, p y) ↔ ∀ᶠ x in 𝓝[s] x, p (e x) :=
by
refine' Iff.trans _ eventually_map
rw [e.map_nhds_within_eq hx, e.image_source_inter_eq', e.nhds_within_target_inter (e.maps_to hx)]
#align local_homeomorph.eventually_nhds_within LocalHomeomorph.eventually_nhdsWithin
+-/
+#print LocalHomeomorph.eventually_nhdsWithin' /-
theorem eventually_nhdsWithin' (e : LocalHomeomorph α β) {x : α} (p : α → Prop) {s : Set α}
(hx : x ∈ e.source) : (∀ᶠ y in 𝓝[e.symm ⁻¹' s] e x, p (e.symm y)) ↔ ∀ᶠ x in 𝓝[s] x, p x :=
by
@@ -446,7 +553,9 @@ theorem eventually_nhdsWithin' (e : LocalHomeomorph α β) {x : α} (p : α →
_)
rw [hy]
#align local_homeomorph.eventually_nhds_within' LocalHomeomorph.eventually_nhdsWithin'
+-/
+#print LocalHomeomorph.preimage_eventuallyEq_target_inter_preimage_inter /-
/-- This lemma is useful in the manifold library in the case that `e` is a chart. It states that
locally around `e x` the set `e.symm ⁻¹' s` is the same as the set intersected with the target
of `e` and some other neighborhood of `f x` (which will be the source of a chart on `γ`). -/
@@ -461,10 +570,13 @@ theorem preimage_eventuallyEq_target_inter_preimage_inter {e : LocalHomeomorph
simp_rw [mem_inter_iff, mem_preimage, mem_inter_iff, e.maps_to hy, true_and_iff, iff_self_and,
e.left_inv hy, iff_true_intro hyu]
#align local_homeomorph.preimage_eventually_eq_target_inter_preimage_inter LocalHomeomorph.preimage_eventuallyEq_target_inter_preimage_inter
+-/
+#print LocalHomeomorph.preimage_open_of_open /-
theorem preimage_open_of_open {s : Set β} (hs : IsOpen s) : IsOpen (e.source ∩ e ⁻¹' s) :=
e.ContinuousOn.preimage_open_of_open e.open_source hs
#align local_homeomorph.preimage_open_of_open LocalHomeomorph.preimage_open_of_open
+-/
/-!
### `local_homeomorph.is_image` relation
@@ -499,21 +611,29 @@ namespace IsImage
variable {e} {s : Set α} {t : Set β} {x : α} {y : β}
+#print LocalHomeomorph.IsImage.toLocalEquiv /-
theorem toLocalEquiv (h : e.IsImage s t) : e.toLocalEquiv.IsImage s t :=
h
#align local_homeomorph.is_image.to_local_equiv LocalHomeomorph.IsImage.toLocalEquiv
+-/
+#print LocalHomeomorph.IsImage.apply_mem_iff /-
theorem apply_mem_iff (h : e.IsImage s t) (hx : x ∈ e.source) : e x ∈ t ↔ x ∈ s :=
h hx
#align local_homeomorph.is_image.apply_mem_iff LocalHomeomorph.IsImage.apply_mem_iff
+-/
+#print LocalHomeomorph.IsImage.symm /-
protected theorem symm (h : e.IsImage s t) : e.symm.IsImage t s :=
h.toLocalEquiv.symm
#align local_homeomorph.is_image.symm LocalHomeomorph.IsImage.symm
+-/
+#print LocalHomeomorph.IsImage.symm_apply_mem_iff /-
theorem symm_apply_mem_iff (h : e.IsImage s t) (hy : y ∈ e.target) : e.symm y ∈ s ↔ y ∈ t :=
h.symm hy
#align local_homeomorph.is_image.symm_apply_mem_iff LocalHomeomorph.IsImage.symm_apply_mem_iff
+-/
#print LocalHomeomorph.IsImage.symm_iff /-
@[simp]
@@ -522,118 +642,163 @@ theorem symm_iff : e.symm.IsImage t s ↔ e.IsImage s t :=
#align local_homeomorph.is_image.symm_iff LocalHomeomorph.IsImage.symm_iff
-/
+#print LocalHomeomorph.IsImage.mapsTo /-
protected theorem mapsTo (h : e.IsImage s t) : MapsTo e (e.source ∩ s) (e.target ∩ t) :=
h.toLocalEquiv.MapsTo
#align local_homeomorph.is_image.maps_to LocalHomeomorph.IsImage.mapsTo
+-/
+#print LocalHomeomorph.IsImage.symm_mapsTo /-
theorem symm_mapsTo (h : e.IsImage s t) : MapsTo e.symm (e.target ∩ t) (e.source ∩ s) :=
h.symm.MapsTo
#align local_homeomorph.is_image.symm_maps_to LocalHomeomorph.IsImage.symm_mapsTo
+-/
+#print LocalHomeomorph.IsImage.image_eq /-
theorem image_eq (h : e.IsImage s t) : e '' (e.source ∩ s) = e.target ∩ t :=
h.toLocalEquiv.image_eq
#align local_homeomorph.is_image.image_eq LocalHomeomorph.IsImage.image_eq
+-/
+#print LocalHomeomorph.IsImage.symm_image_eq /-
theorem symm_image_eq (h : e.IsImage s t) : e.symm '' (e.target ∩ t) = e.source ∩ s :=
h.symm.image_eq
#align local_homeomorph.is_image.symm_image_eq LocalHomeomorph.IsImage.symm_image_eq
+-/
+#print LocalHomeomorph.IsImage.iff_preimage_eq /-
theorem iff_preimage_eq : e.IsImage s t ↔ e.source ∩ e ⁻¹' t = e.source ∩ s :=
LocalEquiv.IsImage.iff_preimage_eq
#align local_homeomorph.is_image.iff_preimage_eq LocalHomeomorph.IsImage.iff_preimage_eq
+-/
alias iff_preimage_eq ↔ preimage_eq of_preimage_eq
#align local_homeomorph.is_image.preimage_eq LocalHomeomorph.IsImage.preimage_eq
#align local_homeomorph.is_image.of_preimage_eq LocalHomeomorph.IsImage.of_preimage_eq
+#print LocalHomeomorph.IsImage.iff_symm_preimage_eq /-
theorem iff_symm_preimage_eq : e.IsImage s t ↔ e.target ∩ e.symm ⁻¹' s = e.target ∩ t :=
symm_iff.symm.trans iff_preimage_eq
#align local_homeomorph.is_image.iff_symm_preimage_eq LocalHomeomorph.IsImage.iff_symm_preimage_eq
+-/
alias iff_symm_preimage_eq ↔ symm_preimage_eq of_symm_preimage_eq
#align local_homeomorph.is_image.symm_preimage_eq LocalHomeomorph.IsImage.symm_preimage_eq
#align local_homeomorph.is_image.of_symm_preimage_eq LocalHomeomorph.IsImage.of_symm_preimage_eq
+#print LocalHomeomorph.IsImage.iff_symm_preimage_eq' /-
theorem iff_symm_preimage_eq' :
e.IsImage s t ↔ e.target ∩ e.symm ⁻¹' (e.source ∩ s) = e.target ∩ t := by
rw [iff_symm_preimage_eq, ← image_source_inter_eq, ← image_source_inter_eq']
#align local_homeomorph.is_image.iff_symm_preimage_eq' LocalHomeomorph.IsImage.iff_symm_preimage_eq'
+-/
alias iff_symm_preimage_eq' ↔ symm_preimage_eq' of_symm_preimage_eq'
#align local_homeomorph.is_image.symm_preimage_eq' LocalHomeomorph.IsImage.symm_preimage_eq'
#align local_homeomorph.is_image.of_symm_preimage_eq' LocalHomeomorph.IsImage.of_symm_preimage_eq'
+#print LocalHomeomorph.IsImage.iff_preimage_eq' /-
theorem iff_preimage_eq' : e.IsImage s t ↔ e.source ∩ e ⁻¹' (e.target ∩ t) = e.source ∩ s :=
symm_iff.symm.trans iff_symm_preimage_eq'
#align local_homeomorph.is_image.iff_preimage_eq' LocalHomeomorph.IsImage.iff_preimage_eq'
+-/
alias iff_preimage_eq' ↔ preimage_eq' of_preimage_eq'
#align local_homeomorph.is_image.preimage_eq' LocalHomeomorph.IsImage.preimage_eq'
#align local_homeomorph.is_image.of_preimage_eq' LocalHomeomorph.IsImage.of_preimage_eq'
+#print LocalHomeomorph.IsImage.of_image_eq /-
theorem of_image_eq (h : e '' (e.source ∩ s) = e.target ∩ t) : e.IsImage s t :=
LocalEquiv.IsImage.of_image_eq h
#align local_homeomorph.is_image.of_image_eq LocalHomeomorph.IsImage.of_image_eq
+-/
+#print LocalHomeomorph.IsImage.of_symm_image_eq /-
theorem of_symm_image_eq (h : e.symm '' (e.target ∩ t) = e.source ∩ s) : e.IsImage s t :=
LocalEquiv.IsImage.of_symm_image_eq h
#align local_homeomorph.is_image.of_symm_image_eq LocalHomeomorph.IsImage.of_symm_image_eq
+-/
+#print LocalHomeomorph.IsImage.compl /-
protected theorem compl (h : e.IsImage s t) : e.IsImage (sᶜ) (tᶜ) := fun x hx => not_congr (h hx)
#align local_homeomorph.is_image.compl LocalHomeomorph.IsImage.compl
+-/
+#print LocalHomeomorph.IsImage.inter /-
protected theorem inter {s' t'} (h : e.IsImage s t) (h' : e.IsImage s' t') :
e.IsImage (s ∩ s') (t ∩ t') := fun x hx => and_congr (h hx) (h' hx)
#align local_homeomorph.is_image.inter LocalHomeomorph.IsImage.inter
+-/
+#print LocalHomeomorph.IsImage.union /-
protected theorem union {s' t'} (h : e.IsImage s t) (h' : e.IsImage s' t') :
e.IsImage (s ∪ s') (t ∪ t') := fun x hx => or_congr (h hx) (h' hx)
#align local_homeomorph.is_image.union LocalHomeomorph.IsImage.union
+-/
+#print LocalHomeomorph.IsImage.diff /-
protected theorem diff {s' t'} (h : e.IsImage s t) (h' : e.IsImage s' t') :
e.IsImage (s \ s') (t \ t') :=
h.inter h'.compl
#align local_homeomorph.is_image.diff LocalHomeomorph.IsImage.diff
+-/
+#print LocalHomeomorph.IsImage.leftInvOn_piecewise /-
theorem leftInvOn_piecewise {e' : LocalHomeomorph α β} [∀ i, Decidable (i ∈ s)]
[∀ i, Decidable (i ∈ t)] (h : e.IsImage s t) (h' : e'.IsImage s t) :
LeftInvOn (t.piecewise e.symm e'.symm) (s.piecewise e e') (s.ite e.source e'.source) :=
h.toLocalEquiv.leftInvOn_piecewise h'
#align local_homeomorph.is_image.left_inv_on_piecewise LocalHomeomorph.IsImage.leftInvOn_piecewise
+-/
+#print LocalHomeomorph.IsImage.inter_eq_of_inter_eq_of_eqOn /-
theorem inter_eq_of_inter_eq_of_eqOn {e' : LocalHomeomorph α β} (h : e.IsImage s t)
(h' : e'.IsImage s t) (hs : e.source ∩ s = e'.source ∩ s) (Heq : EqOn e e' (e.source ∩ s)) :
e.target ∩ t = e'.target ∩ t :=
h.toLocalEquiv.inter_eq_of_inter_eq_of_eqOn h' hs Heq
#align local_homeomorph.is_image.inter_eq_of_inter_eq_of_eq_on LocalHomeomorph.IsImage.inter_eq_of_inter_eq_of_eqOn
+-/
+#print LocalHomeomorph.IsImage.symm_eqOn_of_inter_eq_of_eqOn /-
theorem symm_eqOn_of_inter_eq_of_eqOn {e' : LocalHomeomorph α β} (h : e.IsImage s t)
(hs : e.source ∩ s = e'.source ∩ s) (Heq : EqOn e e' (e.source ∩ s)) :
EqOn e.symm e'.symm (e.target ∩ t) :=
h.toLocalEquiv.symm_eq_on_of_inter_eq_of_eqOn hs Heq
#align local_homeomorph.is_image.symm_eq_on_of_inter_eq_of_eq_on LocalHomeomorph.IsImage.symm_eqOn_of_inter_eq_of_eqOn
+-/
+#print LocalHomeomorph.IsImage.map_nhdsWithin_eq /-
theorem map_nhdsWithin_eq (h : e.IsImage s t) (hx : x ∈ e.source) : map e (𝓝[s] x) = 𝓝[t] e x := by
rw [e.map_nhds_within_eq hx, h.image_eq, e.nhds_within_target_inter (e.map_source hx)]
#align local_homeomorph.is_image.map_nhds_within_eq LocalHomeomorph.IsImage.map_nhdsWithin_eq
+-/
+#print LocalHomeomorph.IsImage.closure /-
protected theorem closure (h : e.IsImage s t) : e.IsImage (closure s) (closure t) := fun x hx => by
simp only [mem_closure_iff_nhdsWithin_neBot, ← h.map_nhds_within_eq hx, map_ne_bot_iff]
#align local_homeomorph.is_image.closure LocalHomeomorph.IsImage.closure
+-/
+#print LocalHomeomorph.IsImage.interior /-
protected theorem interior (h : e.IsImage s t) : e.IsImage (interior s) (interior t) := by
simpa only [closure_compl, compl_compl] using h.compl.closure.compl
#align local_homeomorph.is_image.interior LocalHomeomorph.IsImage.interior
+-/
+#print LocalHomeomorph.IsImage.frontier /-
protected theorem frontier (h : e.IsImage s t) : e.IsImage (frontier s) (frontier t) :=
h.closure.diffₓ h.interior
#align local_homeomorph.is_image.frontier LocalHomeomorph.IsImage.frontier
+-/
+#print LocalHomeomorph.IsImage.isOpen_iff /-
theorem isOpen_iff (h : e.IsImage s t) : IsOpen (e.source ∩ s) ↔ IsOpen (e.target ∩ t) :=
⟨fun hs => h.symm_preimage_eq' ▸ e.symm.preimage_open_of_open hs, fun hs =>
h.preimage_eq' ▸ e.preimage_open_of_open hs⟩
#align local_homeomorph.is_image.is_open_iff LocalHomeomorph.IsImage.isOpen_iff
+-/
+#print LocalHomeomorph.IsImage.restr /-
/-- Restrict a `local_homeomorph` to a pair of corresponding open sets. -/
@[simps toLocalEquiv]
def restr (h : e.IsImage s t) (hs : IsOpen (e.source ∩ s)) : LocalHomeomorph α β
@@ -644,39 +809,53 @@ def restr (h : e.IsImage s t) (hs : IsOpen (e.source ∩ s)) : LocalHomeomorph
continuous_toFun := e.ContinuousOn.mono (inter_subset_left _ _)
continuous_invFun := e.symm.ContinuousOn.mono (inter_subset_left _ _)
#align local_homeomorph.is_image.restr LocalHomeomorph.IsImage.restr
+-/
end IsImage
+#print LocalHomeomorph.isImage_source_target /-
theorem isImage_source_target : e.IsImage e.source e.target :=
e.toLocalEquiv.isImage_source_target
#align local_homeomorph.is_image_source_target LocalHomeomorph.isImage_source_target
+-/
+#print LocalHomeomorph.isImage_source_target_of_disjoint /-
theorem isImage_source_target_of_disjoint (e' : LocalHomeomorph α β)
(hs : Disjoint e.source e'.source) (ht : Disjoint e.target e'.target) :
e.IsImage e'.source e'.target :=
e.toLocalEquiv.isImage_source_target_of_disjoint e'.toLocalEquiv hs ht
#align local_homeomorph.is_image_source_target_of_disjoint LocalHomeomorph.isImage_source_target_of_disjoint
+-/
+#print LocalHomeomorph.preimage_interior /-
/-- Preimage of interior or interior of preimage coincide for local homeomorphisms, when restricted
to the source. -/
theorem preimage_interior (s : Set β) :
e.source ∩ e ⁻¹' interior s = e.source ∩ interior (e ⁻¹' s) :=
(IsImage.of_preimage_eq rfl).interior.preimage_eq
#align local_homeomorph.preimage_interior LocalHomeomorph.preimage_interior
+-/
+#print LocalHomeomorph.preimage_closure /-
theorem preimage_closure (s : Set β) : e.source ∩ e ⁻¹' closure s = e.source ∩ closure (e ⁻¹' s) :=
(IsImage.of_preimage_eq rfl).closure.preimage_eq
#align local_homeomorph.preimage_closure LocalHomeomorph.preimage_closure
+-/
+#print LocalHomeomorph.preimage_frontier /-
theorem preimage_frontier (s : Set β) :
e.source ∩ e ⁻¹' frontier s = e.source ∩ frontier (e ⁻¹' s) :=
(IsImage.of_preimage_eq rfl).frontier.preimage_eq
#align local_homeomorph.preimage_frontier LocalHomeomorph.preimage_frontier
+-/
+#print LocalHomeomorph.preimage_open_of_open_symm /-
theorem preimage_open_of_open_symm {s : Set α} (hs : IsOpen s) : IsOpen (e.target ∩ e.symm ⁻¹' s) :=
e.symm.ContinuousOn.preimage_open_of_open e.open_target hs
#align local_homeomorph.preimage_open_of_open_symm LocalHomeomorph.preimage_open_of_open_symm
+-/
+#print LocalHomeomorph.image_open_of_open /-
/-- The image of an open set in the source is open. -/
theorem image_open_of_open {s : Set α} (hs : IsOpen s) (h : s ⊆ e.source) : IsOpen (e '' s) :=
by
@@ -684,11 +863,14 @@ theorem image_open_of_open {s : Set α} (hs : IsOpen s) (h : s ⊆ e.source) : I
rw [this]
exact e.continuous_on_symm.preimage_open_of_open e.open_target hs
#align local_homeomorph.image_open_of_open LocalHomeomorph.image_open_of_open
+-/
+#print LocalHomeomorph.image_open_of_open' /-
/-- The image of the restriction of an open set to the source is open. -/
theorem image_open_of_open' {s : Set α} (hs : IsOpen s) : IsOpen (e '' (e.source ∩ s)) :=
image_open_of_open _ (IsOpen.inter e.open_source hs) (inter_subset_left _ _)
#align local_homeomorph.image_open_of_open' LocalHomeomorph.image_open_of_open'
+-/
#print LocalHomeomorph.ofContinuousOpenRestrict /-
/-- A `local_equiv` with continuous open forward map and an open source is a `local_homeomorph`. -/
@@ -721,16 +903,20 @@ protected def restrOpen (s : Set α) (hs : IsOpen s) : LocalHomeomorph α β :=
#align local_homeomorph.restr_open LocalHomeomorph.restrOpen
-/
+#print LocalHomeomorph.restrOpen_toLocalEquiv /-
@[simp, mfld_simps]
theorem restrOpen_toLocalEquiv (s : Set α) (hs : IsOpen s) :
(e.restrOpen s hs).toLocalEquiv = e.toLocalEquiv.restr s :=
rfl
#align local_homeomorph.restr_open_to_local_equiv LocalHomeomorph.restrOpen_toLocalEquiv
+-/
+#print LocalHomeomorph.restrOpen_source /-
-- Already simp via local_equiv
theorem restrOpen_source (s : Set α) (hs : IsOpen s) : (e.restrOpen s hs).source = e.source ∩ s :=
rfl
#align local_homeomorph.restr_open_source LocalHomeomorph.restrOpen_source
+-/
#print LocalHomeomorph.restr /-
/-- Restricting a local homeomorphism `e` to `e.source ∩ interior s`. We use the interior to make
@@ -743,21 +929,28 @@ protected def restr (s : Set α) : LocalHomeomorph α β :=
#align local_homeomorph.restr LocalHomeomorph.restr
-/
+#print LocalHomeomorph.restr_toLocalEquiv /-
@[simp, mfld_simps]
theorem restr_toLocalEquiv (s : Set α) :
(e.restr s).toLocalEquiv = e.toLocalEquiv.restr (interior s) :=
rfl
#align local_homeomorph.restr_to_local_equiv LocalHomeomorph.restr_toLocalEquiv
+-/
+#print LocalHomeomorph.restr_source' /-
theorem restr_source' (s : Set α) (hs : IsOpen s) : (e.restr s).source = e.source ∩ s := by
rw [e.restr_source, hs.interior_eq]
#align local_homeomorph.restr_source' LocalHomeomorph.restr_source'
+-/
+#print LocalHomeomorph.restr_toLocalEquiv' /-
theorem restr_toLocalEquiv' (s : Set α) (hs : IsOpen s) :
(e.restr s).toLocalEquiv = e.toLocalEquiv.restr s := by
rw [e.restr_to_local_equiv, hs.interior_eq]
#align local_homeomorph.restr_to_local_equiv' LocalHomeomorph.restr_toLocalEquiv'
+-/
+#print LocalHomeomorph.restr_eq_of_source_subset /-
theorem restr_eq_of_source_subset {e : LocalHomeomorph α β} {s : Set α} (h : e.source ⊆ s) :
e.restr s = e := by
apply eq_of_local_equiv_eq
@@ -765,17 +958,22 @@ theorem restr_eq_of_source_subset {e : LocalHomeomorph α β} {s : Set α} (h :
apply LocalEquiv.restr_eq_of_source_subset
exact interior_maximal h e.open_source
#align local_homeomorph.restr_eq_of_source_subset LocalHomeomorph.restr_eq_of_source_subset
+-/
+#print LocalHomeomorph.restr_univ /-
@[simp, mfld_simps]
theorem restr_univ {e : LocalHomeomorph α β} : e.restr univ = e :=
restr_eq_of_source_subset (subset_univ _)
#align local_homeomorph.restr_univ LocalHomeomorph.restr_univ
+-/
+#print LocalHomeomorph.restr_source_inter /-
theorem restr_source_inter (s : Set α) : e.restr (e.source ∩ s) = e.restr s :=
by
refine' LocalHomeomorph.ext _ _ (fun x => rfl) (fun x => rfl) _
simp [e.open_source.interior_eq, ← inter_assoc]
#align local_homeomorph.restr_source_inter LocalHomeomorph.restr_source_inter
+-/
#print LocalHomeomorph.refl /-
/-- The identity on the whole space as a local homeomorphism. -/
@@ -866,76 +1064,108 @@ protected def trans : LocalHomeomorph α γ :=
#align local_homeomorph.trans LocalHomeomorph.trans
-/
+#print LocalHomeomorph.trans_toLocalEquiv /-
@[simp, mfld_simps]
theorem trans_toLocalEquiv : (e.trans e').toLocalEquiv = e.toLocalEquiv.trans e'.toLocalEquiv :=
rfl
#align local_homeomorph.trans_to_local_equiv LocalHomeomorph.trans_toLocalEquiv
+-/
+#print LocalHomeomorph.coe_trans /-
@[simp, mfld_simps]
theorem coe_trans : (e.trans e' : α → γ) = e' ∘ e :=
rfl
#align local_homeomorph.coe_trans LocalHomeomorph.coe_trans
+-/
+#print LocalHomeomorph.coe_trans_symm /-
@[simp, mfld_simps]
theorem coe_trans_symm : ((e.trans e').symm : γ → α) = e.symm ∘ e'.symm :=
rfl
#align local_homeomorph.coe_trans_symm LocalHomeomorph.coe_trans_symm
+-/
+#print LocalHomeomorph.trans_apply /-
theorem trans_apply {x : α} : (e.trans e') x = e' (e x) :=
rfl
#align local_homeomorph.trans_apply LocalHomeomorph.trans_apply
+-/
+#print LocalHomeomorph.trans_symm_eq_symm_trans_symm /-
theorem trans_symm_eq_symm_trans_symm : (e.trans e').symm = e'.symm.trans e.symm := by
cases e <;> cases e' <;> rfl
#align local_homeomorph.trans_symm_eq_symm_trans_symm LocalHomeomorph.trans_symm_eq_symm_trans_symm
+-/
+#print LocalHomeomorph.trans_source /-
/- This could be considered as a simp lemma, but there are many situations where it makes something
simple into something more complicated. -/
theorem trans_source : (e.trans e').source = e.source ∩ e ⁻¹' e'.source :=
LocalEquiv.trans_source e.toLocalEquiv e'.toLocalEquiv
#align local_homeomorph.trans_source LocalHomeomorph.trans_source
+-/
+#print LocalHomeomorph.trans_source' /-
theorem trans_source' : (e.trans e').source = e.source ∩ e ⁻¹' (e.target ∩ e'.source) :=
LocalEquiv.trans_source' e.toLocalEquiv e'.toLocalEquiv
#align local_homeomorph.trans_source' LocalHomeomorph.trans_source'
+-/
+#print LocalHomeomorph.trans_source'' /-
theorem trans_source'' : (e.trans e').source = e.symm '' (e.target ∩ e'.source) :=
LocalEquiv.trans_source'' e.toLocalEquiv e'.toLocalEquiv
#align local_homeomorph.trans_source'' LocalHomeomorph.trans_source''
+-/
+#print LocalHomeomorph.image_trans_source /-
theorem image_trans_source : e '' (e.trans e').source = e.target ∩ e'.source :=
LocalEquiv.image_trans_source e.toLocalEquiv e'.toLocalEquiv
#align local_homeomorph.image_trans_source LocalHomeomorph.image_trans_source
+-/
+#print LocalHomeomorph.trans_target /-
theorem trans_target : (e.trans e').target = e'.target ∩ e'.symm ⁻¹' e.target :=
rfl
#align local_homeomorph.trans_target LocalHomeomorph.trans_target
+-/
+#print LocalHomeomorph.trans_target' /-
theorem trans_target' : (e.trans e').target = e'.target ∩ e'.symm ⁻¹' (e'.source ∩ e.target) :=
trans_source' e'.symm e.symm
#align local_homeomorph.trans_target' LocalHomeomorph.trans_target'
+-/
+#print LocalHomeomorph.trans_target'' /-
theorem trans_target'' : (e.trans e').target = e' '' (e'.source ∩ e.target) :=
trans_source'' e'.symm e.symm
#align local_homeomorph.trans_target'' LocalHomeomorph.trans_target''
+-/
+#print LocalHomeomorph.inv_image_trans_target /-
theorem inv_image_trans_target : e'.symm '' (e.trans e').target = e'.source ∩ e.target :=
image_trans_source e'.symm e.symm
#align local_homeomorph.inv_image_trans_target LocalHomeomorph.inv_image_trans_target
+-/
+#print LocalHomeomorph.trans_assoc /-
theorem trans_assoc (e'' : LocalHomeomorph γ δ) : (e.trans e').trans e'' = e.trans (e'.trans e'') :=
eq_of_localEquiv_eq <| LocalEquiv.trans_assoc e.toLocalEquiv e'.toLocalEquiv e''.toLocalEquiv
#align local_homeomorph.trans_assoc LocalHomeomorph.trans_assoc
+-/
+#print LocalHomeomorph.trans_refl /-
@[simp, mfld_simps]
theorem trans_refl : e.trans (LocalHomeomorph.refl β) = e :=
eq_of_localEquiv_eq <| LocalEquiv.trans_refl e.toLocalEquiv
#align local_homeomorph.trans_refl LocalHomeomorph.trans_refl
+-/
+#print LocalHomeomorph.refl_trans /-
@[simp, mfld_simps]
theorem refl_trans : (LocalHomeomorph.refl α).trans e = e :=
eq_of_localEquiv_eq <| LocalEquiv.refl_trans e.toLocalEquiv
#align local_homeomorph.refl_trans LocalHomeomorph.refl_trans
+-/
#print LocalHomeomorph.trans_ofSet /-
theorem trans_ofSet {s : Set β} (hs : IsOpen s) : e.trans (ofSet s hs) = e.restr (e ⁻¹' s) :=
@@ -944,19 +1174,26 @@ theorem trans_ofSet {s : Set β} (hs : IsOpen s) : e.trans (ofSet s hs) = e.rest
#align local_homeomorph.trans_of_set LocalHomeomorph.trans_ofSet
-/
+#print LocalHomeomorph.trans_of_set' /-
theorem trans_of_set' {s : Set β} (hs : IsOpen s) :
e.trans (ofSet s hs) = e.restr (e.source ∩ e ⁻¹' s) := by rw [trans_of_set, restr_source_inter]
#align local_homeomorph.trans_of_set' LocalHomeomorph.trans_of_set'
+-/
+#print LocalHomeomorph.ofSet_trans /-
theorem ofSet_trans {s : Set α} (hs : IsOpen s) : (ofSet s hs).trans e = e.restr s :=
(LocalHomeomorph.ext _ _ (fun x => rfl) fun x => rfl) <| by
simp [LocalEquiv.trans_source, hs.interior_eq, inter_comm]
#align local_homeomorph.of_set_trans LocalHomeomorph.ofSet_trans
+-/
+#print LocalHomeomorph.ofSet_trans' /-
theorem ofSet_trans' {s : Set α} (hs : IsOpen s) : (ofSet s hs).trans e = e.restr (e.source ∩ s) :=
by rw [of_set_trans, restr_source_inter]
#align local_homeomorph.of_set_trans' LocalHomeomorph.ofSet_trans'
+-/
+#print LocalHomeomorph.ofSet_trans_ofSet /-
@[simp, mfld_simps]
theorem ofSet_trans_ofSet {s : Set α} (hs : IsOpen s) {s' : Set α} (hs' : IsOpen s') :
(ofSet s hs).trans (ofSet s' hs') = ofSet (s ∩ s') (IsOpen.inter hs hs') :=
@@ -964,10 +1201,13 @@ theorem ofSet_trans_ofSet {s : Set α} (hs : IsOpen s) {s' : Set α} (hs' : IsOp
rw [(of_set s hs).trans_ofSet hs']
ext <;> simp [hs'.interior_eq]
#align local_homeomorph.of_set_trans_of_set LocalHomeomorph.ofSet_trans_ofSet
+-/
+#print LocalHomeomorph.restr_trans /-
theorem restr_trans (s : Set α) : (e.restr s).trans e' = (e.trans e').restr s :=
eq_of_localEquiv_eq <| LocalEquiv.restr_trans e.toLocalEquiv e'.toLocalEquiv (interior s)
#align local_homeomorph.restr_trans LocalHomeomorph.restr_trans
+-/
#print LocalHomeomorph.transHomeomorph /-
/-- Postcompose a local homeomorphism with an homeomorphism.
@@ -983,9 +1223,11 @@ def transHomeomorph (e' : β ≃ₜ γ) : LocalHomeomorph α γ
#align local_homeomorph.trans_homeomorph LocalHomeomorph.transHomeomorph
-/
+#print LocalHomeomorph.trans_equiv_eq_trans /-
theorem trans_equiv_eq_trans (e' : β ≃ₜ γ) : e.transHomeomorph e' = e.trans e'.toLocalHomeomorph :=
toLocalEquiv_injective <| LocalEquiv.transEquiv_eq_trans _ _
#align local_homeomorph.trans_equiv_eq_trans LocalHomeomorph.trans_equiv_eq_trans
+-/
#print Homeomorph.transLocalHomeomorph /-
/-- Precompose a local homeomorphism with an homeomorphism.
@@ -1001,10 +1243,12 @@ def Homeomorph.transLocalHomeomorph (e : α ≃ₜ β) : LocalHomeomorph α γ
#align homeomorph.trans_local_homeomorph Homeomorph.transLocalHomeomorph
-/
+#print Homeomorph.transLocalHomeomorph_eq_trans /-
theorem Homeomorph.transLocalHomeomorph_eq_trans (e : α ≃ₜ β) :
e.transLocalHomeomorph e' = e.toLocalHomeomorph.trans e' :=
toLocalEquiv_injective <| Equiv.transLocalEquiv_eq_trans _ _
#align homeomorph.trans_local_homeomorph_eq_trans Homeomorph.transLocalHomeomorph_eq_trans
+-/
#print LocalHomeomorph.EqOnSource /-
/-- `eq_on_source e e'` means that `e` and `e'` have the same source, and coincide there. They
@@ -1014,10 +1258,12 @@ def EqOnSource (e e' : LocalHomeomorph α β) : Prop :=
#align local_homeomorph.eq_on_source LocalHomeomorph.EqOnSource
-/
+#print LocalHomeomorph.eqOnSource_iff /-
theorem eqOnSource_iff (e e' : LocalHomeomorph α β) :
EqOnSource e e' ↔ LocalEquiv.EqOnSource e.toLocalEquiv e'.toLocalEquiv :=
Iff.rfl
#align local_homeomorph.eq_on_source_iff LocalHomeomorph.eqOnSource_iff
+-/
/-- `eq_on_source` is an equivalence relation -/
instance : Setoid (LocalHomeomorph α β)
@@ -1029,48 +1275,65 @@ instance : Setoid (LocalHomeomorph α β)
(@LocalEquiv.eqOnSourceSetoid α β).iseqv.2.2 ((eqOnSource_iff e e').1 h)
((eqOnSource_iff e' e'').1 h')⟩
+#print LocalHomeomorph.eqOnSource_refl /-
theorem eqOnSource_refl : e ≈ e :=
Setoid.refl _
#align local_homeomorph.eq_on_source_refl LocalHomeomorph.eqOnSource_refl
+-/
+#print LocalHomeomorph.EqOnSource.symm' /-
/-- If two local homeomorphisms are equivalent, so are their inverses -/
theorem EqOnSource.symm' {e e' : LocalHomeomorph α β} (h : e ≈ e') : e.symm ≈ e'.symm :=
LocalEquiv.EqOnSource.symm' h
#align local_homeomorph.eq_on_source.symm' LocalHomeomorph.EqOnSource.symm'
+-/
+#print LocalHomeomorph.EqOnSource.source_eq /-
/-- Two equivalent local homeomorphisms have the same source -/
theorem EqOnSource.source_eq {e e' : LocalHomeomorph α β} (h : e ≈ e') : e.source = e'.source :=
h.1
#align local_homeomorph.eq_on_source.source_eq LocalHomeomorph.EqOnSource.source_eq
+-/
+#print LocalHomeomorph.EqOnSource.target_eq /-
/-- Two equivalent local homeomorphisms have the same target -/
theorem EqOnSource.target_eq {e e' : LocalHomeomorph α β} (h : e ≈ e') : e.target = e'.target :=
h.symm'.1
#align local_homeomorph.eq_on_source.target_eq LocalHomeomorph.EqOnSource.target_eq
+-/
+#print LocalHomeomorph.EqOnSource.eqOn /-
/-- Two equivalent local homeomorphisms have coinciding `to_fun` on the source -/
theorem EqOnSource.eqOn {e e' : LocalHomeomorph α β} (h : e ≈ e') : EqOn e e' e.source :=
h.2
#align local_homeomorph.eq_on_source.eq_on LocalHomeomorph.EqOnSource.eqOn
+-/
+#print LocalHomeomorph.EqOnSource.symm_eqOn_target /-
/-- Two equivalent local homeomorphisms have coinciding `inv_fun` on the target -/
theorem EqOnSource.symm_eqOn_target {e e' : LocalHomeomorph α β} (h : e ≈ e') :
EqOn e.symm e'.symm e.target :=
h.symm'.2
#align local_homeomorph.eq_on_source.symm_eq_on_target LocalHomeomorph.EqOnSource.symm_eqOn_target
+-/
+#print LocalHomeomorph.EqOnSource.trans' /-
/-- Composition of local homeomorphisms respects equivalence -/
theorem EqOnSource.trans' {e e' : LocalHomeomorph α β} {f f' : LocalHomeomorph β γ} (he : e ≈ e')
(hf : f ≈ f') : e.trans f ≈ e'.trans f' :=
LocalEquiv.EqOnSource.trans' he hf
#align local_homeomorph.eq_on_source.trans' LocalHomeomorph.EqOnSource.trans'
+-/
+#print LocalHomeomorph.EqOnSource.restr /-
/-- Restriction of local homeomorphisms respects equivalence -/
theorem EqOnSource.restr {e e' : LocalHomeomorph α β} (he : e ≈ e') (s : Set α) :
e.restr s ≈ e'.restr s :=
LocalEquiv.EqOnSource.restr he _
#align local_homeomorph.eq_on_source.restr LocalHomeomorph.EqOnSource.restr
+-/
+#print LocalHomeomorph.Set.EqOn.restr_eqOn_source /-
theorem Set.EqOn.restr_eqOn_source {e e' : LocalHomeomorph α β}
(h : EqOn e e' (e.source ∩ e'.source)) : e.restr e'.source ≈ e'.restr e.source :=
by
@@ -1081,24 +1344,32 @@ theorem Set.EqOn.restr_eqOn_source {e e' : LocalHomeomorph α β}
· rw [e.restr_source' _ e'.open_source]
refine' (eq_on.trans _ h).trans _ <;> simp only [mfld_simps]
#align local_homeomorph.set.eq_on.restr_eq_on_source LocalHomeomorph.Set.EqOn.restr_eqOn_source
+-/
+#print LocalHomeomorph.trans_self_symm /-
/-- Composition of a local homeomorphism and its inverse is equivalent to the restriction of the
identity to the source -/
theorem trans_self_symm : e.trans e.symm ≈ LocalHomeomorph.ofSet e.source e.open_source :=
LocalEquiv.trans_self_symm _
#align local_homeomorph.trans_self_symm LocalHomeomorph.trans_self_symm
+-/
+#print LocalHomeomorph.trans_symm_self /-
theorem trans_symm_self : e.symm.trans e ≈ LocalHomeomorph.ofSet e.target e.open_target :=
e.symm.trans_self_symm
#align local_homeomorph.trans_symm_self LocalHomeomorph.trans_symm_self
+-/
+#print LocalHomeomorph.eq_of_eq_on_source_univ /-
theorem eq_of_eq_on_source_univ {e e' : LocalHomeomorph α β} (h : e ≈ e') (s : e.source = univ)
(t : e.target = univ) : e = e' :=
eq_of_localEquiv_eq <| LocalEquiv.eq_of_eq_on_source_univ _ _ h s t
#align local_homeomorph.eq_of_eq_on_source_univ LocalHomeomorph.eq_of_eq_on_source_univ
+-/
section Prod
+#print LocalHomeomorph.prod /-
/-- The product of two local homeomorphisms, as a local homeomorphism on the product space. -/
@[simps (config := mfld_cfg) toLocalEquiv apply,
simps (config := { attrs := [] }) source target symm_apply]
@@ -1110,19 +1381,25 @@ def prod (e : LocalHomeomorph α β) (e' : LocalHomeomorph γ δ) : LocalHomeomo
continuous_invFun := e.continuousOn_symm.Prod_map e'.continuousOn_symm
toLocalEquiv := e.toLocalEquiv.Prod e'.toLocalEquiv
#align local_homeomorph.prod LocalHomeomorph.prod
+-/
+#print LocalHomeomorph.prod_symm /-
@[simp, mfld_simps]
theorem prod_symm (e : LocalHomeomorph α β) (e' : LocalHomeomorph γ δ) :
(e.Prod e').symm = e.symm.Prod e'.symm :=
rfl
#align local_homeomorph.prod_symm LocalHomeomorph.prod_symm
+-/
+#print LocalHomeomorph.refl_prod_refl /-
@[simp]
theorem refl_prod_refl {α β : Type _} [TopologicalSpace α] [TopologicalSpace β] :
(LocalHomeomorph.refl α).Prod (LocalHomeomorph.refl β) = LocalHomeomorph.refl (α × β) := by
ext1 ⟨x, y⟩; · rfl; · rintro ⟨x, y⟩; rfl; exact univ_prod_univ
#align local_homeomorph.refl_prod_refl LocalHomeomorph.refl_prod_refl
+-/
+#print LocalHomeomorph.prod_trans /-
@[simp, mfld_simps]
theorem prod_trans {η : Type _} {ε : Type _} [TopologicalSpace η] [TopologicalSpace ε]
(e : LocalHomeomorph α β) (f : LocalHomeomorph β γ) (e' : LocalHomeomorph δ η)
@@ -1130,7 +1407,9 @@ theorem prod_trans {η : Type _} {ε : Type _} [TopologicalSpace η] [Topologica
LocalHomeomorph.eq_of_localEquiv_eq <| by
dsimp only [trans_to_local_equiv, prod_to_local_equiv] <;> apply LocalEquiv.prod_trans
#align local_homeomorph.prod_trans LocalHomeomorph.prod_trans
+-/
+#print LocalHomeomorph.prod_eq_prod_of_nonempty /-
theorem prod_eq_prod_of_nonempty {e₁ e₁' : LocalHomeomorph α β} {e₂ e₂' : LocalHomeomorph γ δ}
(h : (e₁.Prod e₂).source.Nonempty) : e₁.Prod e₂ = e₁'.Prod e₂' ↔ e₁ = e₁' ∧ e₂ = e₂' :=
by
@@ -1143,16 +1422,20 @@ theorem prod_eq_prod_of_nonempty {e₁ e₁' : LocalHomeomorph α β} {e₂ e₂
Set.prod_eq_prod_iff_of_nonempty h, forall_and, Prod.forall, forall_const, forall_forall_const,
and_assoc', and_left_comm]
#align local_homeomorph.prod_eq_prod_of_nonempty LocalHomeomorph.prod_eq_prod_of_nonempty
+-/
+#print LocalHomeomorph.prod_eq_prod_of_nonempty' /-
theorem prod_eq_prod_of_nonempty' {e₁ e₁' : LocalHomeomorph α β} {e₂ e₂' : LocalHomeomorph γ δ}
(h : (e₁'.Prod e₂').source.Nonempty) : e₁.Prod e₂ = e₁'.Prod e₂' ↔ e₁ = e₁' ∧ e₂ = e₂' := by
rw [eq_comm, prod_eq_prod_of_nonempty h, eq_comm, @eq_comm _ e₂']
#align local_homeomorph.prod_eq_prod_of_nonempty' LocalHomeomorph.prod_eq_prod_of_nonempty'
+-/
end Prod
section Piecewise
+#print LocalHomeomorph.piecewise /-
/-- Combine two `local_homeomorph`s using `set.piecewise`. The source of the new `local_homeomorph`
is `s.ite e.source e'.source = e.source ∩ s ∪ e'.source \ s`, and similarly for target. The
function sends `e.source ∩ s` to `e.target ∩ t` using `e` and `e'.source \ s` to `e'.target \ t`
@@ -1177,7 +1460,9 @@ def piecewise (e e' : LocalHomeomorph α β) (s : Set α) (t : Set β) [∀ x, D
(H.frontier.inter_eq_of_inter_eq_of_eqOn H'.frontier Hs Heq)
(H.frontier.symm_eq_on_of_inter_eq_of_eqOn Hs Heq)
#align local_homeomorph.piecewise LocalHomeomorph.piecewise
+-/
+#print LocalHomeomorph.symm_piecewise /-
@[simp]
theorem symm_piecewise (e e' : LocalHomeomorph α β) {s : Set α} {t : Set β} [∀ x, Decidable (x ∈ s)]
[∀ y, Decidable (y ∈ t)] (H : e.IsImage s t) (H' : e'.IsImage s t)
@@ -1189,7 +1474,9 @@ theorem symm_piecewise (e e' : LocalHomeomorph α β) {s : Set α} {t : Set β}
(H.frontier.symm_eq_on_of_inter_eq_of_eqOn Hs Heq) :=
rfl
#align local_homeomorph.symm_piecewise LocalHomeomorph.symm_piecewise
+-/
+#print LocalHomeomorph.disjointUnion /-
/-- Combine two `local_homeomorph`s with disjoint sources and disjoint targets. We reuse
`local_homeomorph.piecewise` then override `to_local_equiv` to `local_equiv.disjoint_union`.
This way we have better definitional equalities for `source` and `target`. -/
@@ -1203,6 +1490,7 @@ def disjointUnion (e e' : LocalHomeomorph α β) [∀ x, Decidable (x ∈ e.sour
(e.toLocalEquiv.disjointUnion e'.toLocalEquiv Hs Ht)
(LocalEquiv.disjointUnion_eq_piecewise _ _ _ _).symm
#align local_homeomorph.disjoint_union LocalHomeomorph.disjointUnion
+-/
end Piecewise
@@ -1232,6 +1520,7 @@ end Pi
section Continuity
+#print LocalHomeomorph.continuousWithinAt_iff_continuousWithinAt_comp_right /-
/-- Continuity within a set at a point can be read under right composition with a local
homeomorphism, if the point is in its target -/
theorem continuousWithinAt_iff_continuousWithinAt_comp_right {f : β → γ} {s : Set β} {x : β}
@@ -1240,7 +1529,9 @@ theorem continuousWithinAt_iff_continuousWithinAt_comp_right {f : β → γ} {s
simp_rw [ContinuousWithinAt, ← @tendsto_map'_iff _ _ _ _ e,
e.map_nhds_within_preimage_eq (e.map_target h), (· ∘ ·), e.right_inv h]
#align local_homeomorph.continuous_within_at_iff_continuous_within_at_comp_right LocalHomeomorph.continuousWithinAt_iff_continuousWithinAt_comp_right
+-/
+#print LocalHomeomorph.continuousAt_iff_continuousAt_comp_right /-
/-- Continuity at a point can be read under right composition with a local homeomorphism, if the
point is in its target -/
theorem continuousAt_iff_continuousAt_comp_right {f : β → γ} {x : β} (h : x ∈ e.target) :
@@ -1248,7 +1539,9 @@ theorem continuousAt_iff_continuousAt_comp_right {f : β → γ} {x : β} (h : x
rw [← continuousWithinAt_univ, e.continuous_within_at_iff_continuous_within_at_comp_right h,
preimage_univ, continuousWithinAt_univ]
#align local_homeomorph.continuous_at_iff_continuous_at_comp_right LocalHomeomorph.continuousAt_iff_continuousAt_comp_right
+-/
+#print LocalHomeomorph.continuousOn_iff_continuousOn_comp_right /-
/-- A function is continuous on a set if and only if its composition with a local homeomorphism
on the right is continuous on the corresponding set. -/
theorem continuousOn_iff_continuousOn_comp_right {f : β → γ} {s : Set β} (h : s ⊆ e.target) :
@@ -1260,7 +1553,9 @@ theorem continuousOn_iff_continuousOn_comp_right {f : β → γ} {s : Set β} (h
e.symm_image_eq_source_inter_preimage h, inter_comm, continuousWithinAt_inter]
exact IsOpen.mem_nhds e.open_source (e.map_target (h hx))
#align local_homeomorph.continuous_on_iff_continuous_on_comp_right LocalHomeomorph.continuousOn_iff_continuousOn_comp_right
+-/
+#print LocalHomeomorph.continuousWithinAt_iff_continuousWithinAt_comp_left /-
/-- Continuity within a set at a point can be read under left composition with a local
homeomorphism if a neighborhood of the initial point is sent to the source of the local
homeomorphism-/
@@ -1276,7 +1571,9 @@ theorem continuousWithinAt_iff_continuousWithinAt_comp_left {f : γ → α} {s :
ContinuousWithinAt.comp this fe_cont (subset_univ _)
exact this.congr (fun y hy => by simp [e.left_inv hy.2]) (by simp [e.left_inv hx])
#align local_homeomorph.continuous_within_at_iff_continuous_within_at_comp_left LocalHomeomorph.continuousWithinAt_iff_continuousWithinAt_comp_left
+-/
+#print LocalHomeomorph.continuousAt_iff_continuousAt_comp_left /-
/-- Continuity at a point can be read under left composition with a local homeomorphism if a
neighborhood of the initial point is sent to the source of the local homeomorphism-/
theorem continuousAt_iff_continuousAt_comp_left {f : γ → α} {x : γ} (h : f ⁻¹' e.source ∈ 𝓝 x) :
@@ -1287,7 +1584,9 @@ theorem continuousAt_iff_continuousAt_comp_left {f : γ → α} {x : γ} (h : f
rw [← continuousWithinAt_univ, ← continuousWithinAt_univ,
e.continuous_within_at_iff_continuous_within_at_comp_left hx h']
#align local_homeomorph.continuous_at_iff_continuous_at_comp_left LocalHomeomorph.continuousAt_iff_continuousAt_comp_left
+-/
+#print LocalHomeomorph.continuousOn_iff_continuousOn_comp_left /-
/-- A function is continuous on a set if and only if its composition with a local homeomorphism
on the left is continuous on the corresponding set. -/
theorem continuousOn_iff_continuousOn_comp_left {f : γ → α} {s : Set γ} (h : s ⊆ f ⁻¹' e.source) :
@@ -1296,7 +1595,9 @@ theorem continuousOn_iff_continuousOn_comp_left {f : γ → α} {s : Set γ} (h
e.continuousWithinAt_iff_continuousWithinAt_comp_left (h hx)
(mem_of_superset self_mem_nhdsWithin h)
#align local_homeomorph.continuous_on_iff_continuous_on_comp_left LocalHomeomorph.continuousOn_iff_continuousOn_comp_left
+-/
+#print LocalHomeomorph.continuous_iff_continuous_comp_left /-
/-- A function is continuous if and only if its composition with a local homeomorphism
on the left is continuous and its image is contained in the source. -/
theorem continuous_iff_continuous_comp_left {f : γ → α} (h : f ⁻¹' e.source = univ) :
@@ -1305,6 +1606,7 @@ theorem continuous_iff_continuous_comp_left {f : γ → α} (h : f ⁻¹' e.sour
simp only [continuous_iff_continuousOn_univ]
exact e.continuous_on_iff_continuous_on_comp_left (Eq.symm h).Subset
#align local_homeomorph.continuous_iff_continuous_comp_left LocalHomeomorph.continuous_iff_continuous_comp_left
+-/
end Continuity
@@ -1368,6 +1670,7 @@ def toHomeomorphOfSourceEqUnivTargetEqUniv (h : e.source = (univ : Set α)) (h'
#align local_homeomorph.to_homeomorph_of_source_eq_univ_target_eq_univ LocalHomeomorph.toHomeomorphOfSourceEqUnivTargetEqUniv
-/
+#print LocalHomeomorph.to_openEmbedding /-
/-- A local homeomorphism whose source is all of `α` defines an open embedding of `α` into `β`. The
converse is also true; see `open_embedding.to_local_homeomorph`. -/
theorem to_openEmbedding (h : e.source = Set.univ) : OpenEmbedding e :=
@@ -1382,6 +1685,7 @@ theorem to_openEmbedding (h : e.source = Set.univ) : OpenEmbedding e :=
· intro U hU
simpa only [h, subset_univ, mfld_simps] using e.image_open_of_open hU
#align local_homeomorph.to_open_embedding LocalHomeomorph.to_openEmbedding
+-/
end LocalHomeomorph
@@ -1398,16 +1702,20 @@ theorem refl_toLocalHomeomorph : (Homeomorph.refl α).toLocalHomeomorph = LocalH
#align homeomorph.refl_to_local_homeomorph Homeomorph.refl_toLocalHomeomorph
-/
+#print Homeomorph.symm_toLocalHomeomorph /-
@[simp, mfld_simps]
theorem symm_toLocalHomeomorph : e.symm.toLocalHomeomorph = e.toLocalHomeomorph.symm :=
rfl
#align homeomorph.symm_to_local_homeomorph Homeomorph.symm_toLocalHomeomorph
+-/
+#print Homeomorph.trans_toLocalHomeomorph /-
@[simp, mfld_simps]
theorem trans_toLocalHomeomorph :
(e.trans e').toLocalHomeomorph = e.toLocalHomeomorph.trans e'.toLocalHomeomorph :=
LocalHomeomorph.eq_of_localEquiv_eq <| Equiv.trans_toLocalEquiv _ _
#align homeomorph.trans_to_local_homeomorph Homeomorph.trans_toLocalHomeomorph
+-/
end Homeomorph
@@ -1425,6 +1733,7 @@ noncomputable def toLocalHomeomorph [Nonempty α] : LocalHomeomorph α β :=
#align open_embedding.to_local_homeomorph OpenEmbedding.toLocalHomeomorph
-/
+#print OpenEmbedding.continuousAt_iff /-
theorem continuousAt_iff {f : α → β} {g : β → γ} (hf : OpenEmbedding f) {x : α} :
ContinuousAt (g ∘ f) x ↔ ContinuousAt g (f x) :=
by
@@ -1434,6 +1743,7 @@ theorem continuousAt_iff {f : α → β} {g : β → γ} (hf : OpenEmbedding f)
simp
· simp
#align open_embedding.continuous_at_iff OpenEmbedding.continuousAt_iff
+-/
end OpenEmbedding
@@ -1490,21 +1800,28 @@ noncomputable def subtypeRestr : LocalHomeomorph s β :=
#align local_homeomorph.subtype_restr LocalHomeomorph.subtypeRestr
-/
+#print LocalHomeomorph.subtypeRestr_def /-
theorem subtypeRestr_def : e.subtypeRestr s = s.localHomeomorphSubtypeCoe.trans e :=
rfl
#align local_homeomorph.subtype_restr_def LocalHomeomorph.subtypeRestr_def
+-/
+#print LocalHomeomorph.subtypeRestr_coe /-
@[simp, mfld_simps]
theorem subtypeRestr_coe :
((e.subtypeRestr s : LocalHomeomorph s β) : s → β) = Set.restrict ↑s (e : α → β) :=
rfl
#align local_homeomorph.subtype_restr_coe LocalHomeomorph.subtypeRestr_coe
+-/
+#print LocalHomeomorph.subtypeRestr_source /-
@[simp, mfld_simps]
theorem subtypeRestr_source : (e.subtypeRestr s).source = coe ⁻¹' e.source := by
simp only [subtype_restr_def, mfld_simps]
#align local_homeomorph.subtype_restr_source LocalHomeomorph.subtypeRestr_source
+-/
+#print LocalHomeomorph.subtypeRestr_symm_trans_subtypeRestr /-
/- This lemma characterizes the transition functions of an open subset in terms of the transition
functions of the original space. -/
theorem subtypeRestr_symm_trans_subtypeRestr (f f' : LocalHomeomorph α β) :
@@ -1525,6 +1842,7 @@ theorem subtypeRestr_symm_trans_subtypeRestr (f f' : LocalHomeomorph α β) :
refine' Setoid.trans (trans_symm_self s.local_homeomorph_subtype_coe) _
simp only [mfld_simps]
#align local_homeomorph.subtype_restr_symm_trans_subtype_restr LocalHomeomorph.subtypeRestr_symm_trans_subtypeRestr
+-/
end LocalHomeomorph
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -408,7 +408,6 @@ theorem map_nhdsWithin_eq (e : LocalHomeomorph α β) {x} (hx : x ∈ e.source)
(e.LeftInvOn.mono <| inter_subset_left _ _).map_nhdsWithin_eq (e.left_inv hx)
(e.continuousAt_symm (e.map_source hx)).ContinuousWithinAt
(e.ContinuousAt hx).ContinuousWithinAt
-
#align local_homeomorph.map_nhds_within_eq LocalHomeomorph.map_nhdsWithin_eq
theorem map_nhdsWithin_preimage_eq (e : LocalHomeomorph α β) {x} (hx : x ∈ e.source) (s : Set β) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -1430,7 +1430,7 @@ theorem continuousAt_iff {f : α → β} {g : β → γ} (hf : OpenEmbedding f)
ContinuousAt (g ∘ f) x ↔ ContinuousAt g (f x) :=
by
haveI : Nonempty α := ⟨x⟩
- convert((hf.to_local_homeomorph f).continuousAt_iff_continuousAt_comp_right _).symm
+ convert ((hf.to_local_homeomorph f).continuousAt_iff_continuousAt_comp_right _).symm
· apply (LocalHomeomorph.left_inv _ _).symm
simp
· simp
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -64,7 +64,7 @@ variable {α : Type _} {β : Type _} {γ : Type _} {δ : Type _} [TopologicalSpa
/-- local homeomorphisms, defined on open subsets of the space -/
@[nolint has_nonempty_instance]
structure LocalHomeomorph (α : Type _) (β : Type _) [TopologicalSpace α]
- [TopologicalSpace β] extends LocalEquiv α β where
+ [TopologicalSpace β] extends LocalEquiv α β where
open_source : IsOpen source
open_target : IsOpen target
continuous_toFun : ContinuousOn to_fun source
@@ -1270,7 +1270,7 @@ theorem continuousWithinAt_iff_continuousWithinAt_comp_left {f : γ → α} {s :
ContinuousWithinAt f s x ↔ ContinuousWithinAt (e ∘ f) s x :=
by
refine' ⟨(e.continuous_at hx).comp_continuousWithinAt, fun fe_cont => _⟩
- rw [← continuousWithinAt_inter' h] at fe_cont⊢
+ rw [← continuousWithinAt_inter' h] at fe_cont ⊢
have : ContinuousWithinAt (e.symm ∘ e ∘ f) (s ∩ f ⁻¹' e.source) x :=
haveI : ContinuousWithinAt e.symm univ (e (f x)) :=
(e.continuous_at_symm (e.map_source hx)).ContinuousWithinAt
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -55,7 +55,7 @@ open Function Set Filter
open TopologicalSpace (SecondCountableTopology)
-open Topology
+open scoped Topology
variable {α : Type _} {β : Type _} {γ : Type _} {δ : Type _} [TopologicalSpace α]
[TopologicalSpace β] [TopologicalSpace γ] [TopologicalSpace δ]
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -109,12 +109,6 @@ initialize_simps_projections LocalHomeomorph (to_local_equiv_to_fun → apply,
to_local_equiv_inv_fun → symm_apply, toLocalEquiv_source → source, toLocalEquiv_target → target,
-toLocalEquiv)
-/- warning: local_homeomorph.continuous_on -> LocalHomeomorph.continuousOn is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2), ContinuousOn.{u1, u2} α β _inst_1 _inst_2 (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2), ContinuousOn.{u2, u1} α β _inst_1 _inst_2 (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.continuous_on LocalHomeomorph.continuousOnₓ'. -/
protected theorem continuousOn : ContinuousOn e e.source :=
e.continuous_toFun
#align local_homeomorph.continuous_on LocalHomeomorph.continuousOn
@@ -125,45 +119,21 @@ theorem continuousOn_symm : ContinuousOn e.symm e.target :=
#align local_homeomorph.continuous_on_symm LocalHomeomorph.continuousOn_symm
-/
-/- warning: local_homeomorph.mk_coe -> LocalHomeomorph.mk_coe is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalEquiv.{u1, u2} α β) (a : IsOpen.{u1} α _inst_1 (LocalEquiv.source.{u1, u2} α β e)) (b : IsOpen.{u2} β _inst_2 (LocalEquiv.target.{u1, u2} α β e)) (c : ContinuousOn.{u1, u2} α β _inst_1 _inst_2 (LocalEquiv.toFun.{u1, u2} α β e) (LocalEquiv.source.{u1, u2} α β e)) (d : ContinuousOn.{u2, u1} β α _inst_2 _inst_1 (LocalEquiv.invFun.{u1, u2} α β e) (LocalEquiv.target.{u1, u2} α β e)), Eq.{max (succ u1) (succ u2)} ((fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.mk.{u1, u2} α β _inst_1 _inst_2 e a b c d)) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) (LocalHomeomorph.mk.{u1, u2} α β _inst_1 _inst_2 e a b c d)) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalEquiv.{u1, u2} α β) (fun (_x : LocalEquiv.{u1, u2} α β) => α -> β) (LocalEquiv.hasCoeToFun.{u1, u2} α β) e)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalEquiv.{u2, u1} α β) (a : IsOpen.{u2} α _inst_1 (LocalEquiv.source.{u2, u1} α β e)) (b : IsOpen.{u1} β _inst_2 (LocalEquiv.target.{u2, u1} α β e)) (c : ContinuousOn.{u2, u1} α β _inst_1 _inst_2 (LocalEquiv.toFun.{u2, u1} α β e) (LocalEquiv.source.{u2, u1} α β e)) (d : ContinuousOn.{u1, u2} β α _inst_2 _inst_1 (LocalEquiv.invFun.{u2, u1} α β e) (LocalEquiv.target.{u2, u1} α β e)), Eq.{max (succ u2) (succ u1)} (α -> β) (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 (LocalHomeomorph.mk.{u2, u1} α β _inst_1 _inst_2 e a b c d)) (LocalEquiv.toFun.{u2, u1} α β e)
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.mk_coe LocalHomeomorph.mk_coeₓ'. -/
@[simp, mfld_simps]
theorem mk_coe (e : LocalEquiv α β) (a b c d) : (LocalHomeomorph.mk e a b c d : α → β) = e :=
rfl
#align local_homeomorph.mk_coe LocalHomeomorph.mk_coe
-/- warning: local_homeomorph.mk_coe_symm -> LocalHomeomorph.mk_coe_symm is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalEquiv.{u1, u2} α β) (a : IsOpen.{u1} α _inst_1 (LocalEquiv.source.{u1, u2} α β e)) (b : IsOpen.{u2} β _inst_2 (LocalEquiv.target.{u1, u2} α β e)) (c : ContinuousOn.{u1, u2} α β _inst_1 _inst_2 (LocalEquiv.toFun.{u1, u2} α β e) (LocalEquiv.source.{u1, u2} α β e)) (d : ContinuousOn.{u2, u1} β α _inst_2 _inst_1 (LocalEquiv.invFun.{u1, u2} α β e) (LocalEquiv.target.{u1, u2} α β e)), Eq.{max (succ u2) (succ u1)} ((fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 (LocalHomeomorph.mk.{u1, u2} α β _inst_1 _inst_2 e a b c d))) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 (LocalHomeomorph.mk.{u1, u2} α β _inst_1 _inst_2 e a b c d))) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalEquiv.{u2, u1} β α) (fun (_x : LocalEquiv.{u2, u1} β α) => β -> α) (LocalEquiv.hasCoeToFun.{u2, u1} β α) (LocalEquiv.symm.{u1, u2} α β e))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalEquiv.{u2, u1} α β) (a : IsOpen.{u2} α _inst_1 (LocalEquiv.source.{u2, u1} α β e)) (b : IsOpen.{u1} β _inst_2 (LocalEquiv.target.{u2, u1} α β e)) (c : ContinuousOn.{u2, u1} α β _inst_1 _inst_2 (LocalEquiv.toFun.{u2, u1} α β e) (LocalEquiv.source.{u2, u1} α β e)) (d : ContinuousOn.{u1, u2} β α _inst_2 _inst_1 (LocalEquiv.invFun.{u2, u1} α β e) (LocalEquiv.target.{u2, u1} α β e)), Eq.{max (succ u2) (succ u1)} (β -> α) (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 (LocalHomeomorph.mk.{u2, u1} α β _inst_1 _inst_2 e a b c d))) (LocalEquiv.toFun.{u1, u2} β α (LocalEquiv.symm.{u2, u1} α β e))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.mk_coe_symm LocalHomeomorph.mk_coe_symmₓ'. -/
@[simp, mfld_simps]
theorem mk_coe_symm (e : LocalEquiv α β) (a b c d) :
((LocalHomeomorph.mk e a b c d).symm : β → α) = e.symm :=
rfl
#align local_homeomorph.mk_coe_symm LocalHomeomorph.mk_coe_symm
-/- warning: local_homeomorph.to_local_equiv_injective -> LocalHomeomorph.toLocalEquiv_injective is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β], Function.Injective.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (LocalEquiv.{u1, u2} α β) (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β], Function.Injective.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (LocalEquiv.{u2, u1} α β) (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2)
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.to_local_equiv_injective LocalHomeomorph.toLocalEquiv_injectiveₓ'. -/
theorem toLocalEquiv_injective : Injective (toLocalEquiv : LocalHomeomorph α β → LocalEquiv α β)
| ⟨e, h₁, h₂, h₃, h₄⟩, ⟨e', h₁', h₂', h₃', h₄'⟩, rfl => rfl
#align local_homeomorph.to_local_equiv_injective LocalHomeomorph.toLocalEquiv_injective
-/- warning: local_homeomorph.to_fun_eq_coe -> LocalHomeomorph.toFun_eq_coe is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} (α -> β) (LocalEquiv.toFun.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (α -> β) (LocalEquiv.toFun.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e)
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.to_fun_eq_coe LocalHomeomorph.toFun_eq_coeₓ'. -/
/- Register a few simp lemmas to make sure that `simp` puts the application of a local
homeomorphism in its normal form, i.e., in terms of its coercion to a function. -/
@[simp, mfld_simps]
@@ -171,45 +141,21 @@ theorem toFun_eq_coe (e : LocalHomeomorph α β) : e.toFun = e :=
rfl
#align local_homeomorph.to_fun_eq_coe LocalHomeomorph.toFun_eq_coe
-/- warning: local_homeomorph.inv_fun_eq_coe -> LocalHomeomorph.invFun_eq_coe is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (β -> α) (LocalEquiv.invFun.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (β -> α) (LocalEquiv.invFun.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.inv_fun_eq_coe LocalHomeomorph.invFun_eq_coeₓ'. -/
@[simp, mfld_simps]
theorem invFun_eq_coe (e : LocalHomeomorph α β) : e.invFun = e.symm :=
rfl
#align local_homeomorph.inv_fun_eq_coe LocalHomeomorph.invFun_eq_coe
-/- warning: local_homeomorph.coe_coe -> LocalHomeomorph.coe_coe is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} ((fun (_x : LocalEquiv.{u1, u2} α β) => α -> β) (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalEquiv.{u1, u2} α β) (fun (_x : LocalEquiv.{u1, u2} α β) => α -> β) (LocalEquiv.hasCoeToFun.{u1, u2} α β) (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (α -> β) (LocalEquiv.toFun.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e)
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.coe_coe LocalHomeomorph.coe_coeₓ'. -/
@[simp, mfld_simps]
theorem coe_coe : (e.toLocalEquiv : α → β) = e :=
rfl
#align local_homeomorph.coe_coe LocalHomeomorph.coe_coe
-/- warning: local_homeomorph.coe_coe_symm -> LocalHomeomorph.coe_coe_symm is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} ((fun (_x : LocalEquiv.{u2, u1} β α) => β -> α) (LocalEquiv.symm.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalEquiv.{u2, u1} β α) (fun (_x : LocalEquiv.{u2, u1} β α) => β -> α) (LocalEquiv.hasCoeToFun.{u2, u1} β α) (LocalEquiv.symm.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (β -> α) (LocalEquiv.toFun.{u1, u2} β α (LocalEquiv.symm.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))) (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.coe_coe_symm LocalHomeomorph.coe_coe_symmₓ'. -/
@[simp, mfld_simps]
theorem coe_coe_symm : (e.toLocalEquiv.symm : β → α) = e.symm :=
rfl
#align local_homeomorph.coe_coe_symm LocalHomeomorph.coe_coe_symm
-/- warning: local_homeomorph.map_source -> LocalHomeomorph.map_source is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {x : α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e x) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) {x : α}, (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))) -> (Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e x) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.map_source LocalHomeomorph.map_sourceₓ'. -/
@[simp, mfld_simps]
theorem map_source {x : α} (h : x ∈ e.source) : e x ∈ e.target :=
e.map_source' h
@@ -222,12 +168,6 @@ theorem map_target {x : β} (h : x ∈ e.target) : e.symm x ∈ e.source :=
#align local_homeomorph.map_target LocalHomeomorph.map_target
-/
-/- warning: local_homeomorph.left_inv -> LocalHomeomorph.left_inv is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {x : α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (Eq.{succ u1} α (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e x)) x)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) {x : α}, (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))) -> (Eq.{succ u2} α (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e) (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e x)) x)
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.left_inv LocalHomeomorph.left_invₓ'. -/
@[simp, mfld_simps]
theorem left_inv {x : α} (h : x ∈ e.source) : e.symm (e x) = x :=
e.left_inv' h
@@ -240,23 +180,11 @@ theorem right_inv {x : β} (h : x ∈ e.target) : e (e.symm x) = x :=
#align local_homeomorph.right_inv LocalHomeomorph.right_inv
-/
-/- warning: local_homeomorph.eq_symm_apply -> LocalHomeomorph.eq_symm_apply is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {x : α} {y : β}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) y (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (Iff (Eq.{succ u1} α x (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e) y)) (Eq.{succ u2} β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e x) y))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) {x : α} {y : β}, (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))) -> (Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) y (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))) -> (Iff (Eq.{succ u2} α x (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e) y)) (Eq.{succ u1} β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e x) y))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.eq_symm_apply LocalHomeomorph.eq_symm_applyₓ'. -/
theorem eq_symm_apply {x : α} {y : β} (hx : x ∈ e.source) (hy : y ∈ e.target) :
x = e.symm y ↔ e x = y :=
e.toLocalEquiv.eq_symm_apply hx hy
#align local_homeomorph.eq_symm_apply LocalHomeomorph.eq_symm_apply
-/- warning: local_homeomorph.maps_to -> LocalHomeomorph.mapsTo is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2), Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2), Set.MapsTo.{u2, u1} α β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.maps_to LocalHomeomorph.mapsToₓ'. -/
protected theorem mapsTo : MapsTo e e.source e.target := fun x => e.map_source
#align local_homeomorph.maps_to LocalHomeomorph.mapsTo
@@ -266,60 +194,24 @@ protected theorem symm_mapsTo : MapsTo e.symm e.target e.source :=
#align local_homeomorph.symm_maps_to LocalHomeomorph.symm_mapsTo
-/
-/- warning: local_homeomorph.left_inv_on -> LocalHomeomorph.leftInvOn is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2), Set.LeftInvOn.{u1, u2} α β (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e)) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2), Set.LeftInvOn.{u2, u1} α β (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e)) (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.left_inv_on LocalHomeomorph.leftInvOnₓ'. -/
protected theorem leftInvOn : LeftInvOn e.symm e e.source := fun x => e.left_inv
#align local_homeomorph.left_inv_on LocalHomeomorph.leftInvOn
-/- warning: local_homeomorph.right_inv_on -> LocalHomeomorph.rightInvOn is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2), Set.RightInvOn.{u1, u2} α β (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e)) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2), Set.RightInvOn.{u2, u1} α β (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e)) (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.right_inv_on LocalHomeomorph.rightInvOnₓ'. -/
protected theorem rightInvOn : RightInvOn e.symm e e.target := fun x => e.right_inv
#align local_homeomorph.right_inv_on LocalHomeomorph.rightInvOn
-/- warning: local_homeomorph.inv_on -> LocalHomeomorph.invOn is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2), Set.InvOn.{u1, u2} α β (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e)) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2), Set.InvOn.{u2, u1} α β (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e)) (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.inv_on LocalHomeomorph.invOnₓ'. -/
protected theorem invOn : InvOn e.symm e e.source e.target :=
⟨e.LeftInvOn, e.RightInvOn⟩
#align local_homeomorph.inv_on LocalHomeomorph.invOn
-/- warning: local_homeomorph.inj_on -> LocalHomeomorph.injOn is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2), Set.InjOn.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2), Set.InjOn.{u2, u1} α β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.inj_on LocalHomeomorph.injOnₓ'. -/
protected theorem injOn : InjOn e e.source :=
e.LeftInvOn.InjOn
#align local_homeomorph.inj_on LocalHomeomorph.injOn
-/- warning: local_homeomorph.bij_on -> LocalHomeomorph.bijOn is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2), Set.BijOn.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2), Set.BijOn.{u2, u1} α β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.bij_on LocalHomeomorph.bijOnₓ'. -/
protected theorem bijOn : BijOn e e.source e.target :=
e.InvOn.BijOn e.MapsTo e.symm_mapsTo
#align local_homeomorph.bij_on LocalHomeomorph.bijOn
-/- warning: local_homeomorph.surj_on -> LocalHomeomorph.surjOn is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2), Set.SurjOn.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2), Set.SurjOn.{u2, u1} α β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.surj_on LocalHomeomorph.surjOnₓ'. -/
protected theorem surjOn : SurjOn e e.source e.target :=
e.BijOn.SurjOn
#align local_homeomorph.surj_on LocalHomeomorph.surjOn
@@ -348,86 +240,38 @@ def replaceEquiv (e : LocalHomeomorph α β) (e' : LocalEquiv α β) (h : e.toLo
#align local_homeomorph.replace_equiv LocalHomeomorph.replaceEquiv
-/
-/- warning: local_homeomorph.replace_equiv_eq_self -> LocalHomeomorph.replaceEquiv_eq_self is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (e' : LocalEquiv.{u1, u2} α β) (h : Eq.{max (succ u1) (succ u2)} (LocalEquiv.{u1, u2} α β) (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e) e'), Eq.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (LocalHomeomorph.replaceEquiv.{u1, u2} α β _inst_1 _inst_2 e e' h) e
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (e' : LocalEquiv.{u2, u1} α β) (h : Eq.{max (succ u2) (succ u1)} (LocalEquiv.{u2, u1} α β) (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e) e'), Eq.{max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (LocalHomeomorph.replaceEquiv.{u2, u1} α β _inst_1 _inst_2 e e' h) e
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.replace_equiv_eq_self LocalHomeomorph.replaceEquiv_eq_selfₓ'. -/
theorem replaceEquiv_eq_self (e : LocalHomeomorph α β) (e' : LocalEquiv α β)
(h : e.toLocalEquiv = e') : e.replaceEquiv e' h = e := by cases e; subst e'; rfl
#align local_homeomorph.replace_equiv_eq_self LocalHomeomorph.replaceEquiv_eq_self
-/- warning: local_homeomorph.source_preimage_target -> LocalHomeomorph.source_preimage_target is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2), HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2), HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (Set.preimage.{u2, u1} α β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.source_preimage_target LocalHomeomorph.source_preimage_targetₓ'. -/
theorem source_preimage_target : e.source ⊆ e ⁻¹' e.target :=
e.MapsTo
#align local_homeomorph.source_preimage_target LocalHomeomorph.source_preimage_target
-/- warning: local_homeomorph.eq_of_local_equiv_eq -> LocalHomeomorph.eq_of_localEquiv_eq is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {e' : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2}, (Eq.{max (succ u1) (succ u2)} (LocalEquiv.{u1, u2} α β) (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e) (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e')) -> (Eq.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) e e')
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {e' : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (LocalEquiv.{u2, u1} α β) (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e) (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e')) -> (Eq.{max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) e e')
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.eq_of_local_equiv_eq LocalHomeomorph.eq_of_localEquiv_eqₓ'. -/
theorem eq_of_localEquiv_eq {e e' : LocalHomeomorph α β} (h : e.toLocalEquiv = e'.toLocalEquiv) :
e = e' := by cases e; cases e'; cases h; rfl
#align local_homeomorph.eq_of_local_equiv_eq LocalHomeomorph.eq_of_localEquiv_eq
-/- warning: local_homeomorph.eventually_left_inverse -> LocalHomeomorph.eventually_left_inverse is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {x : α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (Filter.Eventually.{u1} α (fun (y : α) => Eq.{succ u1} α (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e y)) y) (nhds.{u1} α _inst_1 x))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) {x : α}, (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))) -> (Filter.Eventually.{u2} α (fun (y : α) => Eq.{succ u2} α (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e) (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e y)) y) (nhds.{u2} α _inst_1 x))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.eventually_left_inverse LocalHomeomorph.eventually_left_inverseₓ'. -/
theorem eventually_left_inverse (e : LocalHomeomorph α β) {x} (hx : x ∈ e.source) :
∀ᶠ y in 𝓝 x, e.symm (e y) = y :=
(e.open_source.eventually_mem hx).mono e.left_inv'
#align local_homeomorph.eventually_left_inverse LocalHomeomorph.eventually_left_inverse
-/- warning: local_homeomorph.eventually_left_inverse' -> LocalHomeomorph.eventually_left_inverse' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {x : β}, (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) x (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (Filter.Eventually.{u1} α (fun (y : α) => Eq.{succ u1} α (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e y)) y) (nhds.{u1} α _inst_1 (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e) x)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) {x : β}, (Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) x (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))) -> (Filter.Eventually.{u2} α (fun (y : α) => Eq.{succ u2} α (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e) (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e y)) y) (nhds.{u2} α _inst_1 (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e) x)))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.eventually_left_inverse' LocalHomeomorph.eventually_left_inverse'ₓ'. -/
theorem eventually_left_inverse' (e : LocalHomeomorph α β) {x} (hx : x ∈ e.target) :
∀ᶠ y in 𝓝 (e.symm x), e.symm (e y) = y :=
e.eventually_left_inverse (e.map_target hx)
#align local_homeomorph.eventually_left_inverse' LocalHomeomorph.eventually_left_inverse'
-/- warning: local_homeomorph.eventually_right_inverse -> LocalHomeomorph.eventually_right_inverse is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {x : β}, (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) x (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (Filter.Eventually.{u2} β (fun (y : β) => Eq.{succ u2} β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e) y)) y) (nhds.{u2} β _inst_2 x))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) {x : β}, (Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) x (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))) -> (Filter.Eventually.{u1} β (fun (y : β) => Eq.{succ u1} β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e) y)) y) (nhds.{u1} β _inst_2 x))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.eventually_right_inverse LocalHomeomorph.eventually_right_inverseₓ'. -/
theorem eventually_right_inverse (e : LocalHomeomorph α β) {x} (hx : x ∈ e.target) :
∀ᶠ y in 𝓝 x, e (e.symm y) = y :=
(e.open_target.eventually_mem hx).mono e.right_inv'
#align local_homeomorph.eventually_right_inverse LocalHomeomorph.eventually_right_inverse
-/- warning: local_homeomorph.eventually_right_inverse' -> LocalHomeomorph.eventually_right_inverse' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {x : α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (Filter.Eventually.{u2} β (fun (y : β) => Eq.{succ u2} β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e) y)) y) (nhds.{u2} β _inst_2 (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e x)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) {x : α}, (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))) -> (Filter.Eventually.{u1} β (fun (y : β) => Eq.{succ u1} β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e) y)) y) (nhds.{u1} β _inst_2 (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e x)))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.eventually_right_inverse' LocalHomeomorph.eventually_right_inverse'ₓ'. -/
theorem eventually_right_inverse' (e : LocalHomeomorph α β) {x} (hx : x ∈ e.source) :
∀ᶠ y in 𝓝 (e x), e (e.symm y) = y :=
e.eventually_right_inverse (e.map_source hx)
#align local_homeomorph.eventually_right_inverse' LocalHomeomorph.eventually_right_inverse'
-/- warning: local_homeomorph.eventually_ne_nhds_within -> LocalHomeomorph.eventually_ne_nhdsWithin is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {x : α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (Filter.Eventually.{u1} α (fun (x' : α) => Ne.{succ u2} β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e x') (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e x)) (nhdsWithin.{u1} α _inst_1 x (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) (Singleton.singleton.{u1, u1} α (Set.{u1} α) (Set.hasSingleton.{u1} α) x))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) {x : α}, (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))) -> (Filter.Eventually.{u2} α (fun (x' : α) => Ne.{succ u1} β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e x') (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e x)) (nhdsWithin.{u2} α _inst_1 x (HasCompl.compl.{u2} (Set.{u2} α) (BooleanAlgebra.toHasCompl.{u2} (Set.{u2} α) (Set.instBooleanAlgebraSet.{u2} α)) (Singleton.singleton.{u2, u2} α (Set.{u2} α) (Set.instSingletonSet.{u2} α) x))))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.eventually_ne_nhds_within LocalHomeomorph.eventually_ne_nhdsWithinₓ'. -/
theorem eventually_ne_nhdsWithin (e : LocalHomeomorph α β) {x} (hx : x ∈ e.source) :
∀ᶠ x' in 𝓝[≠] x, e x' ≠ e x :=
eventually_nhdsWithin_iff.2 <|
@@ -435,139 +279,61 @@ theorem eventually_ne_nhdsWithin (e : LocalHomeomorph α β) {x} (hx : x ∈ e.s
mt fun h => by rw [mem_singleton_iff, ← e.left_inv hx, ← h, hx']
#align local_homeomorph.eventually_ne_nhds_within LocalHomeomorph.eventually_ne_nhdsWithin
-/- warning: local_homeomorph.nhds_within_source_inter -> LocalHomeomorph.nhdsWithin_source_inter is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {x : α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (forall (s : Set.{u1} α), Eq.{succ u1} (Filter.{u1} α) (nhdsWithin.{u1} α _inst_1 x (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s)) (nhdsWithin.{u1} α _inst_1 x s))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) {x : α}, (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))) -> (forall (s : Set.{u2} α), Eq.{succ u2} (Filter.{u2} α) (nhdsWithin.{u2} α _inst_1 x (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) s)) (nhdsWithin.{u2} α _inst_1 x s))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.nhds_within_source_inter LocalHomeomorph.nhdsWithin_source_interₓ'. -/
theorem nhdsWithin_source_inter {x} (hx : x ∈ e.source) (s : Set α) : 𝓝[e.source ∩ s] x = 𝓝[s] x :=
nhdsWithin_inter_of_mem (mem_nhdsWithin_of_mem_nhds <| IsOpen.mem_nhds e.open_source hx)
#align local_homeomorph.nhds_within_source_inter LocalHomeomorph.nhdsWithin_source_inter
-/- warning: local_homeomorph.nhds_within_target_inter -> LocalHomeomorph.nhdsWithin_target_inter is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {x : β}, (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) x (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (forall (s : Set.{u2} β), Eq.{succ u2} (Filter.{u2} β) (nhdsWithin.{u2} β _inst_2 x (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s)) (nhdsWithin.{u2} β _inst_2 x s))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {x : β}, (Membership.mem.{u2, u2} β (Set.{u2} β) (Set.instMembershipSet.{u2} β) x (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (forall (s : Set.{u2} β), Eq.{succ u2} (Filter.{u2} β) (nhdsWithin.{u2} β _inst_2 x (Inter.inter.{u2} (Set.{u2} β) (Set.instInterSet.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s)) (nhdsWithin.{u2} β _inst_2 x s))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.nhds_within_target_inter LocalHomeomorph.nhdsWithin_target_interₓ'. -/
theorem nhdsWithin_target_inter {x} (hx : x ∈ e.target) (s : Set β) : 𝓝[e.target ∩ s] x = 𝓝[s] x :=
e.symm.nhdsWithin_source_inter hx s
#align local_homeomorph.nhds_within_target_inter LocalHomeomorph.nhdsWithin_target_inter
-/- warning: local_homeomorph.image_eq_target_inter_inv_preimage -> LocalHomeomorph.image_eq_target_inter_inv_preimage is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {s : Set.{u1} α}, (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (Eq.{succ u2} (Set.{u2} β) (Set.image.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) s) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u2, u1} β α (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e)) s)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) {s : Set.{u2} α}, (HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) s (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))) -> (Eq.{succ u1} (Set.{u1} β) (Set.image.{u2, u1} α β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) s) (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} β α (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e)) s)))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.image_eq_target_inter_inv_preimage LocalHomeomorph.image_eq_target_inter_inv_preimageₓ'. -/
theorem image_eq_target_inter_inv_preimage {s : Set α} (h : s ⊆ e.source) :
e '' s = e.target ∩ e.symm ⁻¹' s :=
e.toLocalEquiv.image_eq_target_inter_inv_preimage h
#align local_homeomorph.image_eq_target_inter_inv_preimage LocalHomeomorph.image_eq_target_inter_inv_preimage
-/- warning: local_homeomorph.image_source_inter_eq' -> LocalHomeomorph.image_source_inter_eq' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (s : Set.{u1} α), Eq.{succ u2} (Set.{u2} β) (Set.image.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s)) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u2, u1} β α (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e)) s))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (s : Set.{u2} α), Eq.{succ u1} (Set.{u1} β) (Set.image.{u2, u1} α β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) s)) (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} β α (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e)) s))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.image_source_inter_eq' LocalHomeomorph.image_source_inter_eq'ₓ'. -/
theorem image_source_inter_eq' (s : Set α) : e '' (e.source ∩ s) = e.target ∩ e.symm ⁻¹' s :=
e.toLocalEquiv.image_source_inter_eq' s
#align local_homeomorph.image_source_inter_eq' LocalHomeomorph.image_source_inter_eq'
-/- warning: local_homeomorph.image_source_inter_eq -> LocalHomeomorph.image_source_inter_eq is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (s : Set.{u1} α), Eq.{succ u2} (Set.{u2} β) (Set.image.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s)) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u2, u1} β α (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e)) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (s : Set.{u2} α), Eq.{succ u1} (Set.{u1} β) (Set.image.{u2, u1} α β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) s)) (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} β α (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e)) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) s)))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.image_source_inter_eq LocalHomeomorph.image_source_inter_eqₓ'. -/
theorem image_source_inter_eq (s : Set α) :
e '' (e.source ∩ s) = e.target ∩ e.symm ⁻¹' (e.source ∩ s) :=
e.toLocalEquiv.image_source_inter_eq s
#align local_homeomorph.image_source_inter_eq LocalHomeomorph.image_source_inter_eq
-/- warning: local_homeomorph.symm_image_eq_source_inter_preimage -> LocalHomeomorph.symm_image_eq_source_inter_preimage is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {s : Set.{u2} β}, (HasSubset.Subset.{u2} (Set.{u2} β) (Set.hasSubset.{u2} β) s (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (Eq.{succ u1} (Set.{u1} α) (Set.image.{u2, u1} β α (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e)) s) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) s)))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {s : Set.{u2} β}, (HasSubset.Subset.{u2} (Set.{u2} β) (Set.instHasSubsetSet.{u2} β) s (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (Eq.{succ u1} (Set.{u1} α) (Set.image.{u2, u1} β α (LocalHomeomorph.toFun'.{u2, u1} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e)) s) (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} α β (LocalHomeomorph.toFun'.{u1, u2} α β _inst_1 _inst_2 e) s)))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.symm_image_eq_source_inter_preimage LocalHomeomorph.symm_image_eq_source_inter_preimageₓ'. -/
theorem symm_image_eq_source_inter_preimage {s : Set β} (h : s ⊆ e.target) :
e.symm '' s = e.source ∩ e ⁻¹' s :=
e.symm.image_eq_target_inter_inv_preimage h
#align local_homeomorph.symm_image_eq_source_inter_preimage LocalHomeomorph.symm_image_eq_source_inter_preimage
-/- warning: local_homeomorph.symm_image_target_inter_eq -> LocalHomeomorph.symm_image_target_inter_eq is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (s : Set.{u2} β), Eq.{succ u1} (Set.{u1} α) (Set.image.{u2, u1} β α (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e)) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s)) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s)))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (s : Set.{u2} β), Eq.{succ u1} (Set.{u1} α) (Set.image.{u2, u1} β α (LocalHomeomorph.toFun'.{u2, u1} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e)) (Inter.inter.{u2} (Set.{u2} β) (Set.instInterSet.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s)) (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} α β (LocalHomeomorph.toFun'.{u1, u2} α β _inst_1 _inst_2 e) (Inter.inter.{u2} (Set.{u2} β) (Set.instInterSet.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s)))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.symm_image_target_inter_eq LocalHomeomorph.symm_image_target_inter_eqₓ'. -/
theorem symm_image_target_inter_eq (s : Set β) :
e.symm '' (e.target ∩ s) = e.source ∩ e ⁻¹' (e.target ∩ s) :=
e.symm.image_source_inter_eq _
#align local_homeomorph.symm_image_target_inter_eq LocalHomeomorph.symm_image_target_inter_eq
-/- warning: local_homeomorph.source_inter_preimage_inv_preimage -> LocalHomeomorph.source_inter_preimage_inv_preimage is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (s : Set.{u1} α), Eq.{succ u1} (Set.{u1} α) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (Set.preimage.{u2, u1} β α (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e)) s))) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (s : Set.{u2} α), Eq.{succ u2} (Set.{u2} α) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (Set.preimage.{u2, u1} α β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) (Set.preimage.{u1, u2} β α (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e)) s))) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) s)
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.source_inter_preimage_inv_preimage LocalHomeomorph.source_inter_preimage_inv_preimageₓ'. -/
theorem source_inter_preimage_inv_preimage (s : Set α) :
e.source ∩ e ⁻¹' (e.symm ⁻¹' s) = e.source ∩ s :=
e.toLocalEquiv.source_inter_preimage_inv_preimage s
#align local_homeomorph.source_inter_preimage_inv_preimage LocalHomeomorph.source_inter_preimage_inv_preimage
-/- warning: local_homeomorph.target_inter_inv_preimage_preimage -> LocalHomeomorph.target_inter_inv_preimage_preimage is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (s : Set.{u2} β), Eq.{succ u2} (Set.{u2} β) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u2, u1} β α (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) s))) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s)
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (s : Set.{u2} β), Eq.{succ u2} (Set.{u2} β) (Inter.inter.{u2} (Set.{u2} β) (Set.instInterSet.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u2, u1} β α (LocalHomeomorph.toFun'.{u2, u1} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} α β (LocalHomeomorph.toFun'.{u1, u2} α β _inst_1 _inst_2 e) s))) (Inter.inter.{u2} (Set.{u2} β) (Set.instInterSet.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s)
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.target_inter_inv_preimage_preimage LocalHomeomorph.target_inter_inv_preimage_preimageₓ'. -/
theorem target_inter_inv_preimage_preimage (s : Set β) :
e.target ∩ e.symm ⁻¹' (e ⁻¹' s) = e.target ∩ s :=
e.symm.source_inter_preimage_inv_preimage _
#align local_homeomorph.target_inter_inv_preimage_preimage LocalHomeomorph.target_inter_inv_preimage_preimage
-/- warning: local_homeomorph.source_inter_preimage_target_inter -> LocalHomeomorph.source_inter_preimage_target_inter is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (s : Set.{u2} β), Eq.{succ u1} (Set.{u1} α) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s))) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) s))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (s : Set.{u2} β), Eq.{succ u1} (Set.{u1} α) (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} α β (LocalHomeomorph.toFun'.{u1, u2} α β _inst_1 _inst_2 e) (Inter.inter.{u2} (Set.{u2} β) (Set.instInterSet.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s))) (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} α β (LocalHomeomorph.toFun'.{u1, u2} α β _inst_1 _inst_2 e) s))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.source_inter_preimage_target_inter LocalHomeomorph.source_inter_preimage_target_interₓ'. -/
theorem source_inter_preimage_target_inter (s : Set β) :
e.source ∩ e ⁻¹' (e.target ∩ s) = e.source ∩ e ⁻¹' s :=
e.toLocalEquiv.source_inter_preimage_target_inter s
#align local_homeomorph.source_inter_preimage_target_inter LocalHomeomorph.source_inter_preimage_target_inter
-/- warning: local_homeomorph.image_source_eq_target -> LocalHomeomorph.image_source_eq_target is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2), Eq.{succ u2} (Set.{u2} β) (Set.image.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2), Eq.{succ u1} (Set.{u1} β) (Set.image.{u2, u1} α β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.image_source_eq_target LocalHomeomorph.image_source_eq_targetₓ'. -/
theorem image_source_eq_target (e : LocalHomeomorph α β) : e '' e.source = e.target :=
e.toLocalEquiv.image_source_eq_target
#align local_homeomorph.image_source_eq_target LocalHomeomorph.image_source_eq_target
-/- warning: local_homeomorph.symm_image_target_eq_source -> LocalHomeomorph.symm_image_target_eq_source is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2), Eq.{succ u1} (Set.{u1} α) (Set.image.{u2, u1} β α (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e)) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2), Eq.{succ u2} (Set.{u2} α) (Set.image.{u1, u2} β α (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e)) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.symm_image_target_eq_source LocalHomeomorph.symm_image_target_eq_sourceₓ'. -/
theorem symm_image_target_eq_source (e : LocalHomeomorph α β) : e.symm '' e.target = e.source :=
e.symm.image_source_eq_target
#align local_homeomorph.symm_image_target_eq_source LocalHomeomorph.symm_image_target_eq_source
-/- warning: local_homeomorph.ext -> LocalHomeomorph.ext is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2), (forall (x : α), Eq.{succ u2} β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e x) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e' x)) -> (forall (x : β), Eq.{succ u1} α (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e) x) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e') x)) -> (Eq.{succ u1} (Set.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e'))) -> (Eq.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) e e')
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2), (forall (x : α), Eq.{succ u1} β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e x) (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e' x)) -> (forall (x : β), Eq.{succ u2} α (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e) x) (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e') x)) -> (Eq.{succ u2} (Set.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e'))) -> (Eq.{max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) e e')
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.ext LocalHomeomorph.extₓ'. -/
/-- Two local homeomorphisms are equal when they have equal `to_fun`, `inv_fun` and `source`.
It is not sufficient to have equal `to_fun` and `source`, as this only determines `inv_fun` on
the target. This would only be true for a weaker notion of equality, arguably the right one,
@@ -578,23 +344,11 @@ protected theorem ext (e' : LocalHomeomorph α β) (h : ∀ x, e x = e' x)
eq_of_localEquiv_eq (LocalEquiv.ext h hinv hs)
#align local_homeomorph.ext LocalHomeomorph.ext
-/- warning: local_homeomorph.ext_iff -> LocalHomeomorph.ext_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {e' : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2}, Iff (Eq.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) e e') (And (forall (x : α), Eq.{succ u2} β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e x) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e' x)) (And (forall (x : β), Eq.{succ u1} α (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e) x) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e') x)) (Eq.{succ u1} (Set.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e')))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {e' : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) e e') (And (forall (x : α), Eq.{succ u1} β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e x) (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e' x)) (And (forall (x : β), Eq.{succ u2} α (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e) x) (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e') x)) (Eq.{succ u2} (Set.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e')))))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.ext_iff LocalHomeomorph.ext_iffₓ'. -/
protected theorem ext_iff {e e' : LocalHomeomorph α β} :
e = e' ↔ (∀ x, e x = e' x) ∧ (∀ x, e.symm x = e'.symm x) ∧ e.source = e'.source :=
⟨by rintro rfl; exact ⟨fun x => rfl, fun x => rfl, rfl⟩, fun h => e.ext e' h.1 h.2.1 h.2.2⟩
#align local_homeomorph.ext_iff LocalHomeomorph.ext_iff
-/- warning: local_homeomorph.symm_to_local_equiv -> LocalHomeomorph.symm_toLocalEquiv is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (LocalEquiv.{u2, u1} β α) (LocalHomeomorph.toLocalEquiv.{u2, u1} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e)) (LocalEquiv.symm.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (LocalEquiv.{u1, u2} β α) (LocalHomeomorph.toLocalEquiv.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e)) (LocalEquiv.symm.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.symm_to_local_equiv LocalHomeomorph.symm_toLocalEquivₓ'. -/
@[simp, mfld_simps]
theorem symm_toLocalEquiv : e.symm.toLocalEquiv = e.toLocalEquiv.symm :=
rfl
@@ -607,33 +361,15 @@ theorem symm_source : e.symm.source = e.target :=
#align local_homeomorph.symm_source LocalHomeomorph.symm_source
-/
-/- warning: local_homeomorph.symm_target -> LocalHomeomorph.symm_target is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2), Eq.{succ u1} (Set.{u1} α) (LocalEquiv.target.{u2, u1} β α (LocalHomeomorph.toLocalEquiv.{u2, u1} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e))) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2), Eq.{succ u2} (Set.{u2} α) (LocalEquiv.target.{u1, u2} β α (LocalHomeomorph.toLocalEquiv.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e))) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.symm_target LocalHomeomorph.symm_targetₓ'. -/
theorem symm_target : e.symm.target = e.source :=
rfl
#align local_homeomorph.symm_target LocalHomeomorph.symm_target
-/- warning: local_homeomorph.symm_symm -> LocalHomeomorph.symm_symm is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (LocalHomeomorph.symm.{u2, u1} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e)) e
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (LocalHomeomorph.symm.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e)) e
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.symm_symm LocalHomeomorph.symm_symmₓ'. -/
@[simp, mfld_simps]
theorem symm_symm : e.symm.symm = e :=
eq_of_localEquiv_eq <| by simp
#align local_homeomorph.symm_symm LocalHomeomorph.symm_symm
-/- warning: local_homeomorph.continuous_at -> LocalHomeomorph.continuousAt is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {x : α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (ContinuousAt.{u1, u2} α β _inst_1 _inst_2 (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) x)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) {x : α}, (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))) -> (ContinuousAt.{u2, u1} α β _inst_1 _inst_2 (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) x)
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.continuous_at LocalHomeomorph.continuousAtₓ'. -/
/-- A local homeomorphism is continuous at any point of its source -/
protected theorem continuousAt {x : α} (h : x ∈ e.source) : ContinuousAt e x :=
(e.ContinuousOn x h).ContinuousAt (e.open_source.mem_nhds h)
@@ -646,53 +382,23 @@ theorem continuousAt_symm {x : β} (h : x ∈ e.target) : ContinuousAt e.symm x
#align local_homeomorph.continuous_at_symm LocalHomeomorph.continuousAt_symm
-/
-/- warning: local_homeomorph.tendsto_symm -> LocalHomeomorph.tendsto_symm is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {x : α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (Filter.Tendsto.{u2, u1} β α (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e)) (nhds.{u2} β _inst_2 (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e x)) (nhds.{u1} α _inst_1 x))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) {x : α}, (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))) -> (Filter.Tendsto.{u1, u2} β α (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e)) (nhds.{u1} β _inst_2 (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e x)) (nhds.{u2} α _inst_1 x))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.tendsto_symm LocalHomeomorph.tendsto_symmₓ'. -/
theorem tendsto_symm {x} (hx : x ∈ e.source) : Tendsto e.symm (𝓝 (e x)) (𝓝 x) := by
simpa only [ContinuousAt, e.left_inv hx] using e.continuous_at_symm (e.map_source hx)
#align local_homeomorph.tendsto_symm LocalHomeomorph.tendsto_symm
-/- warning: local_homeomorph.map_nhds_eq -> LocalHomeomorph.map_nhds_eq is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {x : α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (Eq.{succ u2} (Filter.{u2} β) (Filter.map.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (nhds.{u1} α _inst_1 x)) (nhds.{u2} β _inst_2 (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e x)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) {x : α}, (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))) -> (Eq.{succ u1} (Filter.{u1} β) (Filter.map.{u2, u1} α β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) (nhds.{u2} α _inst_1 x)) (nhds.{u1} β _inst_2 (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e x)))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.map_nhds_eq LocalHomeomorph.map_nhds_eqₓ'. -/
theorem map_nhds_eq {x} (hx : x ∈ e.source) : map e (𝓝 x) = 𝓝 (e x) :=
le_antisymm (e.ContinuousAt hx) <|
le_map_of_right_inverse (e.eventually_right_inverse' hx) (e.tendsto_symm hx)
#align local_homeomorph.map_nhds_eq LocalHomeomorph.map_nhds_eq
-/- warning: local_homeomorph.symm_map_nhds_eq -> LocalHomeomorph.symm_map_nhds_eq is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {x : α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (Eq.{succ u1} (Filter.{u1} α) (Filter.map.{u2, u1} β α (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e)) (nhds.{u2} β _inst_2 (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e x))) (nhds.{u1} α _inst_1 x))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) {x : α}, (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))) -> (Eq.{succ u2} (Filter.{u2} α) (Filter.map.{u1, u2} β α (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e)) (nhds.{u1} β _inst_2 (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e x))) (nhds.{u2} α _inst_1 x))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.symm_map_nhds_eq LocalHomeomorph.symm_map_nhds_eqₓ'. -/
theorem symm_map_nhds_eq {x} (hx : x ∈ e.source) : map e.symm (𝓝 (e x)) = 𝓝 x :=
(e.symm.map_nhds_eq <| e.map_source hx).trans <| by rw [e.left_inv hx]
#align local_homeomorph.symm_map_nhds_eq LocalHomeomorph.symm_map_nhds_eq
-/- warning: local_homeomorph.image_mem_nhds -> LocalHomeomorph.image_mem_nhds is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {x : α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (forall {s : Set.{u1} α}, (Membership.Mem.{u1, u1} (Set.{u1} α) (Filter.{u1} α) (Filter.hasMem.{u1} α) s (nhds.{u1} α _inst_1 x)) -> (Membership.Mem.{u2, u2} (Set.{u2} β) (Filter.{u2} β) (Filter.hasMem.{u2} β) (Set.image.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) s) (nhds.{u2} β _inst_2 (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e x))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) {x : α}, (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))) -> (forall {s : Set.{u2} α}, (Membership.mem.{u2, u2} (Set.{u2} α) (Filter.{u2} α) (instMembershipSetFilter.{u2} α) s (nhds.{u2} α _inst_1 x)) -> (Membership.mem.{u1, u1} (Set.{u1} β) (Filter.{u1} β) (instMembershipSetFilter.{u1} β) (Set.image.{u2, u1} α β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) s) (nhds.{u1} β _inst_2 (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e x))))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.image_mem_nhds LocalHomeomorph.image_mem_nhdsₓ'. -/
theorem image_mem_nhds {x} (hx : x ∈ e.source) {s : Set α} (hs : s ∈ 𝓝 x) : e '' s ∈ 𝓝 (e x) :=
e.map_nhds_eq hx ▸ Filter.image_mem_map hs
#align local_homeomorph.image_mem_nhds LocalHomeomorph.image_mem_nhds
-/- warning: local_homeomorph.map_nhds_within_eq -> LocalHomeomorph.map_nhdsWithin_eq is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {x : α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (forall (s : Set.{u1} α), Eq.{succ u2} (Filter.{u2} β) (Filter.map.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (nhdsWithin.{u1} α _inst_1 x s)) (nhdsWithin.{u2} β _inst_2 (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e x) (Set.image.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) {x : α}, (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))) -> (forall (s : Set.{u2} α), Eq.{succ u1} (Filter.{u1} β) (Filter.map.{u2, u1} α β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) (nhdsWithin.{u2} α _inst_1 x s)) (nhdsWithin.{u1} β _inst_2 (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e x) (Set.image.{u2, u1} α β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) s))))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.map_nhds_within_eq LocalHomeomorph.map_nhdsWithin_eqₓ'. -/
theorem map_nhdsWithin_eq (e : LocalHomeomorph α β) {x} (hx : x ∈ e.source) (s : Set α) :
map e (𝓝[s] x) = 𝓝[e '' (e.source ∩ s)] e x :=
calc
@@ -705,35 +411,17 @@ theorem map_nhdsWithin_eq (e : LocalHomeomorph α β) {x} (hx : x ∈ e.source)
#align local_homeomorph.map_nhds_within_eq LocalHomeomorph.map_nhdsWithin_eq
-/- warning: local_homeomorph.map_nhds_within_preimage_eq -> LocalHomeomorph.map_nhdsWithin_preimage_eq is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {x : α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (forall (s : Set.{u2} β), Eq.{succ u2} (Filter.{u2} β) (Filter.map.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (nhdsWithin.{u1} α _inst_1 x (Set.preimage.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) s))) (nhdsWithin.{u2} β _inst_2 (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e x) s))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) {x : α}, (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))) -> (forall (s : Set.{u1} β), Eq.{succ u1} (Filter.{u1} β) (Filter.map.{u2, u1} α β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) (nhdsWithin.{u2} α _inst_1 x (Set.preimage.{u2, u1} α β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) s))) (nhdsWithin.{u1} β _inst_2 (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e x) s))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.map_nhds_within_preimage_eq LocalHomeomorph.map_nhdsWithin_preimage_eqₓ'. -/
theorem map_nhdsWithin_preimage_eq (e : LocalHomeomorph α β) {x} (hx : x ∈ e.source) (s : Set β) :
map e (𝓝[e ⁻¹' s] x) = 𝓝[s] e x := by
rw [e.map_nhds_within_eq hx, e.image_source_inter_eq', e.target_inter_inv_preimage_preimage,
e.nhds_within_target_inter (e.map_source hx)]
#align local_homeomorph.map_nhds_within_preimage_eq LocalHomeomorph.map_nhdsWithin_preimage_eq
-/- warning: local_homeomorph.eventually_nhds -> LocalHomeomorph.eventually_nhds is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {x : α} (p : β -> Prop), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (Iff (Filter.Eventually.{u2} β (fun (y : β) => p y) (nhds.{u2} β _inst_2 (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e x))) (Filter.Eventually.{u1} α (fun (x : α) => p (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e x)) (nhds.{u1} α _inst_1 x)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) {x : α} (p : β -> Prop), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))) -> (Iff (Filter.Eventually.{u1} β (fun (y : β) => p y) (nhds.{u1} β _inst_2 (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e x))) (Filter.Eventually.{u2} α (fun (x : α) => p (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e x)) (nhds.{u2} α _inst_1 x)))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.eventually_nhds LocalHomeomorph.eventually_nhdsₓ'. -/
theorem eventually_nhds (e : LocalHomeomorph α β) {x : α} (p : β → Prop) (hx : x ∈ e.source) :
(∀ᶠ y in 𝓝 (e x), p y) ↔ ∀ᶠ x in 𝓝 x, p (e x) :=
Iff.trans (by rw [e.map_nhds_eq hx]) eventually_map
#align local_homeomorph.eventually_nhds LocalHomeomorph.eventually_nhds
-/- warning: local_homeomorph.eventually_nhds' -> LocalHomeomorph.eventually_nhds' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {x : α} (p : α -> Prop), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (Iff (Filter.Eventually.{u2} β (fun (y : β) => p (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e) y)) (nhds.{u2} β _inst_2 (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e x))) (Filter.Eventually.{u1} α (fun (x : α) => p x) (nhds.{u1} α _inst_1 x)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) {x : α} (p : α -> Prop), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))) -> (Iff (Filter.Eventually.{u1} β (fun (y : β) => p (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e) y)) (nhds.{u1} β _inst_2 (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e x))) (Filter.Eventually.{u2} α (fun (x : α) => p x) (nhds.{u2} α _inst_1 x)))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.eventually_nhds' LocalHomeomorph.eventually_nhds'ₓ'. -/
theorem eventually_nhds' (e : LocalHomeomorph α β) {x : α} (p : α → Prop) (hx : x ∈ e.source) :
(∀ᶠ y in 𝓝 (e x), p (e.symm y)) ↔ ∀ᶠ x in 𝓝 x, p x :=
by
@@ -742,12 +430,6 @@ theorem eventually_nhds' (e : LocalHomeomorph α β) {x : α} (p : α → Prop)
rw [hy]
#align local_homeomorph.eventually_nhds' LocalHomeomorph.eventually_nhds'
-/- warning: local_homeomorph.eventually_nhds_within -> LocalHomeomorph.eventually_nhdsWithin is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {x : α} (p : β -> Prop) {s : Set.{u1} α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (Iff (Filter.Eventually.{u2} β (fun (y : β) => p y) (nhdsWithin.{u2} β _inst_2 (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e x) (Set.preimage.{u2, u1} β α (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e)) s))) (Filter.Eventually.{u1} α (fun (x : α) => p (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e x)) (nhdsWithin.{u1} α _inst_1 x s)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) {x : α} (p : β -> Prop) {s : Set.{u2} α}, (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))) -> (Iff (Filter.Eventually.{u1} β (fun (y : β) => p y) (nhdsWithin.{u1} β _inst_2 (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e x) (Set.preimage.{u1, u2} β α (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e)) s))) (Filter.Eventually.{u2} α (fun (x : α) => p (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e x)) (nhdsWithin.{u2} α _inst_1 x s)))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.eventually_nhds_within LocalHomeomorph.eventually_nhdsWithinₓ'. -/
theorem eventually_nhdsWithin (e : LocalHomeomorph α β) {x : α} (p : β → Prop) {s : Set α}
(hx : x ∈ e.source) : (∀ᶠ y in 𝓝[e.symm ⁻¹' s] e x, p y) ↔ ∀ᶠ x in 𝓝[s] x, p (e x) :=
by
@@ -755,12 +437,6 @@ theorem eventually_nhdsWithin (e : LocalHomeomorph α β) {x : α} (p : β → P
rw [e.map_nhds_within_eq hx, e.image_source_inter_eq', e.nhds_within_target_inter (e.maps_to hx)]
#align local_homeomorph.eventually_nhds_within LocalHomeomorph.eventually_nhdsWithin
-/- warning: local_homeomorph.eventually_nhds_within' -> LocalHomeomorph.eventually_nhdsWithin' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {x : α} (p : α -> Prop) {s : Set.{u1} α}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (Iff (Filter.Eventually.{u2} β (fun (y : β) => p (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e) y)) (nhdsWithin.{u2} β _inst_2 (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e x) (Set.preimage.{u2, u1} β α (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e)) s))) (Filter.Eventually.{u1} α (fun (x : α) => p x) (nhdsWithin.{u1} α _inst_1 x s)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) {x : α} (p : α -> Prop) {s : Set.{u2} α}, (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))) -> (Iff (Filter.Eventually.{u1} β (fun (y : β) => p (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e) y)) (nhdsWithin.{u1} β _inst_2 (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e x) (Set.preimage.{u1, u2} β α (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e)) s))) (Filter.Eventually.{u2} α (fun (x : α) => p x) (nhdsWithin.{u2} α _inst_1 x s)))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.eventually_nhds_within' LocalHomeomorph.eventually_nhdsWithin'ₓ'. -/
theorem eventually_nhdsWithin' (e : LocalHomeomorph α β) {x : α} (p : α → Prop) {s : Set α}
(hx : x ∈ e.source) : (∀ᶠ y in 𝓝[e.symm ⁻¹' s] e x, p (e.symm y)) ↔ ∀ᶠ x in 𝓝[s] x, p x :=
by
@@ -772,12 +448,6 @@ theorem eventually_nhdsWithin' (e : LocalHomeomorph α β) {x : α} (p : α →
rw [hy]
#align local_homeomorph.eventually_nhds_within' LocalHomeomorph.eventually_nhdsWithin'
-/- warning: local_homeomorph.preimage_eventually_eq_target_inter_preimage_inter -> LocalHomeomorph.preimage_eventuallyEq_target_inter_preimage_inter is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {s : Set.{u1} α} {t : Set.{u3} γ} {x : α} {f : α -> γ}, (ContinuousWithinAt.{u1, u3} α γ _inst_1 _inst_3 f s x) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (Membership.Mem.{u3, u3} (Set.{u3} γ) (Filter.{u3} γ) (Filter.hasMem.{u3} γ) t (nhds.{u3} γ _inst_3 (f x))) -> (Filter.EventuallyEq.{u2, 0} β Prop (nhds.{u2} β _inst_2 (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e x)) (Set.preimage.{u2, u1} β α (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e)) s) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u2, u1} β α (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e)) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s (Set.preimage.{u1, u3} α γ f t)))))
-but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u2}} {γ : Type.{u1}} [_inst_1 : TopologicalSpace.{u3} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u1} γ] {e : LocalHomeomorph.{u3, u2} α β _inst_1 _inst_2} {s : Set.{u3} α} {t : Set.{u1} γ} {x : α} {f : α -> γ}, (ContinuousWithinAt.{u3, u1} α γ _inst_1 _inst_3 f s x) -> (Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) x (LocalEquiv.source.{u3, u2} α β (LocalHomeomorph.toLocalEquiv.{u3, u2} α β _inst_1 _inst_2 e))) -> (Membership.mem.{u1, u1} (Set.{u1} γ) (Filter.{u1} γ) (instMembershipSetFilter.{u1} γ) t (nhds.{u1} γ _inst_3 (f x))) -> (Filter.EventuallyEq.{u2, 0} β Prop (nhds.{u2} β _inst_2 (LocalHomeomorph.toFun'.{u3, u2} α β _inst_1 _inst_2 e x)) (Set.preimage.{u2, u3} β α (LocalHomeomorph.toFun'.{u2, u3} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u3, u2} α β _inst_1 _inst_2 e)) s) (Inter.inter.{u2} (Set.{u2} β) (Set.instInterSet.{u2} β) (LocalEquiv.target.{u3, u2} α β (LocalHomeomorph.toLocalEquiv.{u3, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u2, u3} β α (LocalHomeomorph.toFun'.{u2, u3} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u3, u2} α β _inst_1 _inst_2 e)) (Inter.inter.{u3} (Set.{u3} α) (Set.instInterSet.{u3} α) s (Set.preimage.{u3, u1} α γ f t)))))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.preimage_eventually_eq_target_inter_preimage_inter LocalHomeomorph.preimage_eventuallyEq_target_inter_preimage_interₓ'. -/
/-- This lemma is useful in the manifold library in the case that `e` is a chart. It states that
locally around `e x` the set `e.symm ⁻¹' s` is the same as the set intersected with the target
of `e` and some other neighborhood of `f x` (which will be the source of a chart on `γ`). -/
@@ -793,12 +463,6 @@ theorem preimage_eventuallyEq_target_inter_preimage_inter {e : LocalHomeomorph
e.left_inv hy, iff_true_intro hyu]
#align local_homeomorph.preimage_eventually_eq_target_inter_preimage_inter LocalHomeomorph.preimage_eventuallyEq_target_inter_preimage_inter
-/- warning: local_homeomorph.preimage_open_of_open -> LocalHomeomorph.preimage_open_of_open is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {s : Set.{u2} β}, (IsOpen.{u2} β _inst_2 s) -> (IsOpen.{u1} α _inst_1 (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) s)))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {s : Set.{u2} β}, (IsOpen.{u2} β _inst_2 s) -> (IsOpen.{u1} α _inst_1 (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} α β (LocalHomeomorph.toFun'.{u1, u2} α β _inst_1 _inst_2 e) s)))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.preimage_open_of_open LocalHomeomorph.preimage_open_of_openₓ'. -/
theorem preimage_open_of_open {s : Set β} (hs : IsOpen s) : IsOpen (e.source ∩ e ⁻¹' s) :=
e.ContinuousOn.preimage_open_of_open e.open_source hs
#align local_homeomorph.preimage_open_of_open LocalHomeomorph.preimage_open_of_open
@@ -836,42 +500,18 @@ namespace IsImage
variable {e} {s : Set α} {t : Set β} {x : α} {y : β}
-/- warning: local_homeomorph.is_image.to_local_equiv -> LocalHomeomorph.IsImage.toLocalEquiv is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {s : Set.{u1} α} {t : Set.{u2} β}, (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t) -> (LocalEquiv.IsImage.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e) s t)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {s : Set.{u2} α} {t : Set.{u1} β}, (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e s t) -> (LocalEquiv.IsImage.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e) s t)
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_image.to_local_equiv LocalHomeomorph.IsImage.toLocalEquivₓ'. -/
theorem toLocalEquiv (h : e.IsImage s t) : e.toLocalEquiv.IsImage s t :=
h
#align local_homeomorph.is_image.to_local_equiv LocalHomeomorph.IsImage.toLocalEquiv
-/- warning: local_homeomorph.is_image.apply_mem_iff -> LocalHomeomorph.IsImage.apply_mem_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {s : Set.{u1} α} {t : Set.{u2} β} {x : α}, (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (Iff (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e x) t) (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {s : Set.{u2} α} {t : Set.{u1} β} {x : α}, (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e s t) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))) -> (Iff (Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e x) t) (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_image.apply_mem_iff LocalHomeomorph.IsImage.apply_mem_iffₓ'. -/
theorem apply_mem_iff (h : e.IsImage s t) (hx : x ∈ e.source) : e x ∈ t ↔ x ∈ s :=
h hx
#align local_homeomorph.is_image.apply_mem_iff LocalHomeomorph.IsImage.apply_mem_iff
-/- warning: local_homeomorph.is_image.symm -> LocalHomeomorph.IsImage.symm is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {s : Set.{u1} α} {t : Set.{u2} β}, (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t) -> (LocalHomeomorph.IsImage.{u2, u1} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e) t s)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {s : Set.{u2} α} {t : Set.{u1} β}, (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e s t) -> (LocalHomeomorph.IsImage.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e) t s)
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_image.symm LocalHomeomorph.IsImage.symmₓ'. -/
protected theorem symm (h : e.IsImage s t) : e.symm.IsImage t s :=
h.toLocalEquiv.symm
#align local_homeomorph.is_image.symm LocalHomeomorph.IsImage.symm
-/- warning: local_homeomorph.is_image.symm_apply_mem_iff -> LocalHomeomorph.IsImage.symm_apply_mem_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {s : Set.{u1} α} {t : Set.{u2} β} {y : β}, (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t) -> (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) y (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (Iff (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e) y) s) (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) y t))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {s : Set.{u2} α} {t : Set.{u1} β} {y : β}, (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e s t) -> (Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) y (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))) -> (Iff (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e) y) s) (Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) y t))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_image.symm_apply_mem_iff LocalHomeomorph.IsImage.symm_apply_mem_iffₓ'. -/
theorem symm_apply_mem_iff (h : e.IsImage s t) (hy : y ∈ e.target) : e.symm y ∈ s ↔ y ∈ t :=
h.symm hy
#align local_homeomorph.is_image.symm_apply_mem_iff LocalHomeomorph.IsImage.symm_apply_mem_iff
@@ -883,304 +523,118 @@ theorem symm_iff : e.symm.IsImage t s ↔ e.IsImage s t :=
#align local_homeomorph.is_image.symm_iff LocalHomeomorph.IsImage.symm_iff
-/
-/- warning: local_homeomorph.is_image.maps_to -> LocalHomeomorph.IsImage.mapsTo is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {s : Set.{u1} α} {t : Set.{u2} β}, (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t) -> (Set.MapsTo.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) t))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {s : Set.{u2} α} {t : Set.{u1} β}, (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e s t) -> (Set.MapsTo.{u2, u1} α β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) s) (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) t))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_image.maps_to LocalHomeomorph.IsImage.mapsToₓ'. -/
protected theorem mapsTo (h : e.IsImage s t) : MapsTo e (e.source ∩ s) (e.target ∩ t) :=
h.toLocalEquiv.MapsTo
#align local_homeomorph.is_image.maps_to LocalHomeomorph.IsImage.mapsTo
-/- warning: local_homeomorph.is_image.symm_maps_to -> LocalHomeomorph.IsImage.symm_mapsTo is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {s : Set.{u1} α} {t : Set.{u2} β}, (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t) -> (Set.MapsTo.{u2, u1} β α (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e)) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) t) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {s : Set.{u2} α} {t : Set.{u1} β}, (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e s t) -> (Set.MapsTo.{u1, u2} β α (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e)) (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) t) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) s))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_image.symm_maps_to LocalHomeomorph.IsImage.symm_mapsToₓ'. -/
theorem symm_mapsTo (h : e.IsImage s t) : MapsTo e.symm (e.target ∩ t) (e.source ∩ s) :=
h.symm.MapsTo
#align local_homeomorph.is_image.symm_maps_to LocalHomeomorph.IsImage.symm_mapsTo
-/- warning: local_homeomorph.is_image.image_eq -> LocalHomeomorph.IsImage.image_eq is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {s : Set.{u1} α} {t : Set.{u2} β}, (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t) -> (Eq.{succ u2} (Set.{u2} β) (Set.image.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s)) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) t))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {s : Set.{u2} α} {t : Set.{u1} β}, (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e s t) -> (Eq.{succ u1} (Set.{u1} β) (Set.image.{u2, u1} α β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) s)) (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) t))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_image.image_eq LocalHomeomorph.IsImage.image_eqₓ'. -/
theorem image_eq (h : e.IsImage s t) : e '' (e.source ∩ s) = e.target ∩ t :=
h.toLocalEquiv.image_eq
#align local_homeomorph.is_image.image_eq LocalHomeomorph.IsImage.image_eq
-/- warning: local_homeomorph.is_image.symm_image_eq -> LocalHomeomorph.IsImage.symm_image_eq is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {s : Set.{u1} α} {t : Set.{u2} β}, (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t) -> (Eq.{succ u1} (Set.{u1} α) (Set.image.{u2, u1} β α (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e)) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) t)) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {s : Set.{u2} α} {t : Set.{u1} β}, (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e s t) -> (Eq.{succ u2} (Set.{u2} α) (Set.image.{u1, u2} β α (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e)) (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) t)) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) s))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_image.symm_image_eq LocalHomeomorph.IsImage.symm_image_eqₓ'. -/
theorem symm_image_eq (h : e.IsImage s t) : e.symm '' (e.target ∩ t) = e.source ∩ s :=
h.symm.image_eq
#align local_homeomorph.is_image.symm_image_eq LocalHomeomorph.IsImage.symm_image_eq
-/- warning: local_homeomorph.is_image.iff_preimage_eq -> LocalHomeomorph.IsImage.iff_preimage_eq is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {s : Set.{u1} α} {t : Set.{u2} β}, Iff (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t) (Eq.{succ u1} (Set.{u1} α) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) t)) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {s : Set.{u2} α} {t : Set.{u1} β}, Iff (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e s t) (Eq.{succ u2} (Set.{u2} α) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (Set.preimage.{u2, u1} α β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) t)) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) s))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_image.iff_preimage_eq LocalHomeomorph.IsImage.iff_preimage_eqₓ'. -/
theorem iff_preimage_eq : e.IsImage s t ↔ e.source ∩ e ⁻¹' t = e.source ∩ s :=
LocalEquiv.IsImage.iff_preimage_eq
#align local_homeomorph.is_image.iff_preimage_eq LocalHomeomorph.IsImage.iff_preimage_eq
-/- warning: local_homeomorph.is_image.preimage_eq -> LocalHomeomorph.IsImage.preimage_eq is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {s : Set.{u1} α} {t : Set.{u2} β}, (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t) -> (Eq.{succ u1} (Set.{u1} α) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) t)) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {s : Set.{u2} α} {t : Set.{u1} β}, (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e s t) -> (Eq.{succ u2} (Set.{u2} α) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (Set.preimage.{u2, u1} α β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) t)) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) s))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_image.preimage_eq LocalHomeomorph.IsImage.preimage_eqₓ'. -/
-/- warning: local_homeomorph.is_image.of_preimage_eq -> LocalHomeomorph.IsImage.of_preimage_eq is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {s : Set.{u1} α} {t : Set.{u2} β}, (Eq.{succ u1} (Set.{u1} α) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) t)) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s)) -> (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {s : Set.{u2} α} {t : Set.{u1} β}, (Eq.{succ u2} (Set.{u2} α) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (Set.preimage.{u2, u1} α β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) t)) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) s)) -> (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e s t)
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_image.of_preimage_eq LocalHomeomorph.IsImage.of_preimage_eqₓ'. -/
alias iff_preimage_eq ↔ preimage_eq of_preimage_eq
#align local_homeomorph.is_image.preimage_eq LocalHomeomorph.IsImage.preimage_eq
#align local_homeomorph.is_image.of_preimage_eq LocalHomeomorph.IsImage.of_preimage_eq
-/- warning: local_homeomorph.is_image.iff_symm_preimage_eq -> LocalHomeomorph.IsImage.iff_symm_preimage_eq is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {s : Set.{u1} α} {t : Set.{u2} β}, Iff (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t) (Eq.{succ u2} (Set.{u2} β) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u2, u1} β α (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e)) s)) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) t))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {s : Set.{u2} α} {t : Set.{u1} β}, Iff (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e s t) (Eq.{succ u1} (Set.{u1} β) (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} β α (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e)) s)) (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) t))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_image.iff_symm_preimage_eq LocalHomeomorph.IsImage.iff_symm_preimage_eqₓ'. -/
theorem iff_symm_preimage_eq : e.IsImage s t ↔ e.target ∩ e.symm ⁻¹' s = e.target ∩ t :=
symm_iff.symm.trans iff_preimage_eq
#align local_homeomorph.is_image.iff_symm_preimage_eq LocalHomeomorph.IsImage.iff_symm_preimage_eq
-/- warning: local_homeomorph.is_image.symm_preimage_eq -> LocalHomeomorph.IsImage.symm_preimage_eq is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {s : Set.{u1} α} {t : Set.{u2} β}, (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t) -> (Eq.{succ u2} (Set.{u2} β) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u2, u1} β α (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e)) s)) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) t))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {s : Set.{u2} α} {t : Set.{u1} β}, (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e s t) -> (Eq.{succ u1} (Set.{u1} β) (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} β α (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e)) s)) (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) t))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_image.symm_preimage_eq LocalHomeomorph.IsImage.symm_preimage_eqₓ'. -/
-/- warning: local_homeomorph.is_image.of_symm_preimage_eq -> LocalHomeomorph.IsImage.of_symm_preimage_eq is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {s : Set.{u1} α} {t : Set.{u2} β}, (Eq.{succ u2} (Set.{u2} β) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u2, u1} β α (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e)) s)) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) t)) -> (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {s : Set.{u2} α} {t : Set.{u1} β}, (Eq.{succ u1} (Set.{u1} β) (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} β α (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e)) s)) (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) t)) -> (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e s t)
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_image.of_symm_preimage_eq LocalHomeomorph.IsImage.of_symm_preimage_eqₓ'. -/
alias iff_symm_preimage_eq ↔ symm_preimage_eq of_symm_preimage_eq
#align local_homeomorph.is_image.symm_preimage_eq LocalHomeomorph.IsImage.symm_preimage_eq
#align local_homeomorph.is_image.of_symm_preimage_eq LocalHomeomorph.IsImage.of_symm_preimage_eq
-/- warning: local_homeomorph.is_image.iff_symm_preimage_eq' -> LocalHomeomorph.IsImage.iff_symm_preimage_eq' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {s : Set.{u1} α} {t : Set.{u2} β}, Iff (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t) (Eq.{succ u2} (Set.{u2} β) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u2, u1} β α (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e)) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s))) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) t))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {s : Set.{u2} α} {t : Set.{u1} β}, Iff (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e s t) (Eq.{succ u1} (Set.{u1} β) (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} β α (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e)) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) s))) (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) t))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_image.iff_symm_preimage_eq' LocalHomeomorph.IsImage.iff_symm_preimage_eq'ₓ'. -/
theorem iff_symm_preimage_eq' :
e.IsImage s t ↔ e.target ∩ e.symm ⁻¹' (e.source ∩ s) = e.target ∩ t := by
rw [iff_symm_preimage_eq, ← image_source_inter_eq, ← image_source_inter_eq']
#align local_homeomorph.is_image.iff_symm_preimage_eq' LocalHomeomorph.IsImage.iff_symm_preimage_eq'
-/- warning: local_homeomorph.is_image.symm_preimage_eq' -> LocalHomeomorph.IsImage.symm_preimage_eq' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {s : Set.{u1} α} {t : Set.{u2} β}, (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t) -> (Eq.{succ u2} (Set.{u2} β) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u2, u1} β α (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e)) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s))) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) t))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {s : Set.{u2} α} {t : Set.{u1} β}, (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e s t) -> (Eq.{succ u1} (Set.{u1} β) (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} β α (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e)) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) s))) (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) t))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_image.symm_preimage_eq' LocalHomeomorph.IsImage.symm_preimage_eq'ₓ'. -/
-/- warning: local_homeomorph.is_image.of_symm_preimage_eq' -> LocalHomeomorph.IsImage.of_symm_preimage_eq' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {s : Set.{u1} α} {t : Set.{u2} β}, (Eq.{succ u2} (Set.{u2} β) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u2, u1} β α (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e)) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s))) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) t)) -> (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {s : Set.{u2} α} {t : Set.{u1} β}, (Eq.{succ u1} (Set.{u1} β) (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} β α (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e)) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) s))) (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) t)) -> (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e s t)
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_image.of_symm_preimage_eq' LocalHomeomorph.IsImage.of_symm_preimage_eq'ₓ'. -/
alias iff_symm_preimage_eq' ↔ symm_preimage_eq' of_symm_preimage_eq'
#align local_homeomorph.is_image.symm_preimage_eq' LocalHomeomorph.IsImage.symm_preimage_eq'
#align local_homeomorph.is_image.of_symm_preimage_eq' LocalHomeomorph.IsImage.of_symm_preimage_eq'
-/- warning: local_homeomorph.is_image.iff_preimage_eq' -> LocalHomeomorph.IsImage.iff_preimage_eq' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {s : Set.{u1} α} {t : Set.{u2} β}, Iff (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t) (Eq.{succ u1} (Set.{u1} α) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) t))) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {s : Set.{u2} α} {t : Set.{u1} β}, Iff (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e s t) (Eq.{succ u2} (Set.{u2} α) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (Set.preimage.{u2, u1} α β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) t))) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) s))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_image.iff_preimage_eq' LocalHomeomorph.IsImage.iff_preimage_eq'ₓ'. -/
theorem iff_preimage_eq' : e.IsImage s t ↔ e.source ∩ e ⁻¹' (e.target ∩ t) = e.source ∩ s :=
symm_iff.symm.trans iff_symm_preimage_eq'
#align local_homeomorph.is_image.iff_preimage_eq' LocalHomeomorph.IsImage.iff_preimage_eq'
-/- warning: local_homeomorph.is_image.preimage_eq' -> LocalHomeomorph.IsImage.preimage_eq' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {s : Set.{u1} α} {t : Set.{u2} β}, (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t) -> (Eq.{succ u1} (Set.{u1} α) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) t))) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {s : Set.{u2} α} {t : Set.{u1} β}, (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e s t) -> (Eq.{succ u2} (Set.{u2} α) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (Set.preimage.{u2, u1} α β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) t))) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) s))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_image.preimage_eq' LocalHomeomorph.IsImage.preimage_eq'ₓ'. -/
-/- warning: local_homeomorph.is_image.of_preimage_eq' -> LocalHomeomorph.IsImage.of_preimage_eq' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {s : Set.{u1} α} {t : Set.{u2} β}, (Eq.{succ u1} (Set.{u1} α) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) t))) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s)) -> (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {s : Set.{u2} α} {t : Set.{u1} β}, (Eq.{succ u2} (Set.{u2} α) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (Set.preimage.{u2, u1} α β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) t))) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) s)) -> (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e s t)
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_image.of_preimage_eq' LocalHomeomorph.IsImage.of_preimage_eq'ₓ'. -/
alias iff_preimage_eq' ↔ preimage_eq' of_preimage_eq'
#align local_homeomorph.is_image.preimage_eq' LocalHomeomorph.IsImage.preimage_eq'
#align local_homeomorph.is_image.of_preimage_eq' LocalHomeomorph.IsImage.of_preimage_eq'
-/- warning: local_homeomorph.is_image.of_image_eq -> LocalHomeomorph.IsImage.of_image_eq is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {s : Set.{u1} α} {t : Set.{u2} β}, (Eq.{succ u2} (Set.{u2} β) (Set.image.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s)) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) t)) -> (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t)
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {s : Set.{u1} α} {t : Set.{u2} β}, (Eq.{succ u2} (Set.{u2} β) (Set.image.{u1, u2} α β (LocalHomeomorph.toFun'.{u1, u2} α β _inst_1 _inst_2 e) (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s)) (Inter.inter.{u2} (Set.{u2} β) (Set.instInterSet.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) t)) -> (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t)
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_image.of_image_eq LocalHomeomorph.IsImage.of_image_eqₓ'. -/
theorem of_image_eq (h : e '' (e.source ∩ s) = e.target ∩ t) : e.IsImage s t :=
LocalEquiv.IsImage.of_image_eq h
#align local_homeomorph.is_image.of_image_eq LocalHomeomorph.IsImage.of_image_eq
-/- warning: local_homeomorph.is_image.of_symm_image_eq -> LocalHomeomorph.IsImage.of_symm_image_eq is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {s : Set.{u1} α} {t : Set.{u2} β}, (Eq.{succ u1} (Set.{u1} α) (Set.image.{u2, u1} β α (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e)) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) t)) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s)) -> (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {s : Set.{u2} α} {t : Set.{u1} β}, (Eq.{succ u2} (Set.{u2} α) (Set.image.{u1, u2} β α (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e)) (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) t)) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) s)) -> (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e s t)
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_image.of_symm_image_eq LocalHomeomorph.IsImage.of_symm_image_eqₓ'. -/
theorem of_symm_image_eq (h : e.symm '' (e.target ∩ t) = e.source ∩ s) : e.IsImage s t :=
LocalEquiv.IsImage.of_symm_image_eq h
#align local_homeomorph.is_image.of_symm_image_eq LocalHomeomorph.IsImage.of_symm_image_eq
-/- warning: local_homeomorph.is_image.compl -> LocalHomeomorph.IsImage.compl is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {s : Set.{u1} α} {t : Set.{u2} β}, (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t) -> (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e (HasCompl.compl.{u1} (Set.{u1} α) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s) (HasCompl.compl.{u2} (Set.{u2} β) (BooleanAlgebra.toHasCompl.{u2} (Set.{u2} β) (Set.booleanAlgebra.{u2} β)) t))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {s : Set.{u2} α} {t : Set.{u1} β}, (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e s t) -> (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e (HasCompl.compl.{u2} (Set.{u2} α) (BooleanAlgebra.toHasCompl.{u2} (Set.{u2} α) (Set.instBooleanAlgebraSet.{u2} α)) s) (HasCompl.compl.{u1} (Set.{u1} β) (BooleanAlgebra.toHasCompl.{u1} (Set.{u1} β) (Set.instBooleanAlgebraSet.{u1} β)) t))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_image.compl LocalHomeomorph.IsImage.complₓ'. -/
protected theorem compl (h : e.IsImage s t) : e.IsImage (sᶜ) (tᶜ) := fun x hx => not_congr (h hx)
#align local_homeomorph.is_image.compl LocalHomeomorph.IsImage.compl
-/- warning: local_homeomorph.is_image.inter -> LocalHomeomorph.IsImage.inter is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {s : Set.{u1} α} {t : Set.{u2} β} {s' : Set.{u1} α} {t' : Set.{u2} β}, (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t) -> (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s' t') -> (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s s') (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) t t'))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {s : Set.{u2} α} {t : Set.{u1} β} {s' : Set.{u2} α} {t' : Set.{u1} β}, (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e s t) -> (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e s' t') -> (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) s s') (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) t t'))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_image.inter LocalHomeomorph.IsImage.interₓ'. -/
protected theorem inter {s' t'} (h : e.IsImage s t) (h' : e.IsImage s' t') :
e.IsImage (s ∩ s') (t ∩ t') := fun x hx => and_congr (h hx) (h' hx)
#align local_homeomorph.is_image.inter LocalHomeomorph.IsImage.inter
-/- warning: local_homeomorph.is_image.union -> LocalHomeomorph.IsImage.union is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {s : Set.{u1} α} {t : Set.{u2} β} {s' : Set.{u1} α} {t' : Set.{u2} β}, (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t) -> (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s' t') -> (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e (Union.union.{u1} (Set.{u1} α) (Set.hasUnion.{u1} α) s s') (Union.union.{u2} (Set.{u2} β) (Set.hasUnion.{u2} β) t t'))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {s : Set.{u2} α} {t : Set.{u1} β} {s' : Set.{u2} α} {t' : Set.{u1} β}, (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e s t) -> (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e s' t') -> (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e (Union.union.{u2} (Set.{u2} α) (Set.instUnionSet.{u2} α) s s') (Union.union.{u1} (Set.{u1} β) (Set.instUnionSet.{u1} β) t t'))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_image.union LocalHomeomorph.IsImage.unionₓ'. -/
protected theorem union {s' t'} (h : e.IsImage s t) (h' : e.IsImage s' t') :
e.IsImage (s ∪ s') (t ∪ t') := fun x hx => or_congr (h hx) (h' hx)
#align local_homeomorph.is_image.union LocalHomeomorph.IsImage.union
-/- warning: local_homeomorph.is_image.diff -> LocalHomeomorph.IsImage.diff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {s : Set.{u1} α} {t : Set.{u2} β} {s' : Set.{u1} α} {t' : Set.{u2} β}, (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t) -> (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s' t') -> (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e (SDiff.sdiff.{u1} (Set.{u1} α) (BooleanAlgebra.toHasSdiff.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α)) s s') (SDiff.sdiff.{u2} (Set.{u2} β) (BooleanAlgebra.toHasSdiff.{u2} (Set.{u2} β) (Set.booleanAlgebra.{u2} β)) t t'))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {s : Set.{u2} α} {t : Set.{u1} β} {s' : Set.{u2} α} {t' : Set.{u1} β}, (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e s t) -> (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e s' t') -> (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e (SDiff.sdiff.{u2} (Set.{u2} α) (Set.instSDiffSet.{u2} α) s s') (SDiff.sdiff.{u1} (Set.{u1} β) (Set.instSDiffSet.{u1} β) t t'))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_image.diff LocalHomeomorph.IsImage.diffₓ'. -/
protected theorem diff {s' t'} (h : e.IsImage s t) (h' : e.IsImage s' t') :
e.IsImage (s \ s') (t \ t') :=
h.inter h'.compl
#align local_homeomorph.is_image.diff LocalHomeomorph.IsImage.diff
-/- warning: local_homeomorph.is_image.left_inv_on_piecewise -> LocalHomeomorph.IsImage.leftInvOn_piecewise is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {s : Set.{u1} α} {t : Set.{u2} β} {e' : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} [_inst_5 : forall (i : α), Decidable (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) i s)] [_inst_6 : forall (i : β), Decidable (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) i t)], (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t) -> (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e' s t) -> (Set.LeftInvOn.{u1, u2} α β (Set.piecewise.{u2, succ u1} β (fun (ᾰ : β) => α) t (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e)) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e')) (fun (j : β) => _inst_6 j)) (Set.piecewise.{u1, succ u2} α (fun (ᾰ : α) => β) s (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e') (fun (j : α) => _inst_5 j)) (Set.ite.{u1} α s (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e'))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {s : Set.{u2} α} {t : Set.{u1} β} {e' : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} [_inst_5 : forall (i : α), Decidable (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) i s)] [_inst_6 : forall (i : β), Decidable (Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) i t)], (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e s t) -> (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e' s t) -> (Set.LeftInvOn.{u2, u1} α β (Set.piecewise.{u1, succ u2} β (fun (ᾰ : β) => α) t (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e)) (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e')) (fun (j : β) => _inst_6 j)) (Set.piecewise.{u2, succ u1} α (fun (ᾰ : α) => β) s (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e') (fun (j : α) => _inst_5 j)) (Set.ite.{u2} α s (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e'))))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_image.left_inv_on_piecewise LocalHomeomorph.IsImage.leftInvOn_piecewiseₓ'. -/
theorem leftInvOn_piecewise {e' : LocalHomeomorph α β} [∀ i, Decidable (i ∈ s)]
[∀ i, Decidable (i ∈ t)] (h : e.IsImage s t) (h' : e'.IsImage s t) :
LeftInvOn (t.piecewise e.symm e'.symm) (s.piecewise e e') (s.ite e.source e'.source) :=
h.toLocalEquiv.leftInvOn_piecewise h'
#align local_homeomorph.is_image.left_inv_on_piecewise LocalHomeomorph.IsImage.leftInvOn_piecewise
-/- warning: local_homeomorph.is_image.inter_eq_of_inter_eq_of_eq_on -> LocalHomeomorph.IsImage.inter_eq_of_inter_eq_of_eqOn is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {s : Set.{u1} α} {t : Set.{u2} β} {e' : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2}, (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t) -> (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e' s t) -> (Eq.{succ u1} (Set.{u1} α) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e')) s)) -> (Set.EqOn.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e') (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s)) -> (Eq.{succ u2} (Set.{u2} β) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) t) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e')) t))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {s : Set.{u2} α} {t : Set.{u1} β} {e' : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2}, (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e s t) -> (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e' s t) -> (Eq.{succ u2} (Set.{u2} α) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) s) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e')) s)) -> (Set.EqOn.{u2, u1} α β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e') (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) s)) -> (Eq.{succ u1} (Set.{u1} β) (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) t) (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e')) t))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_image.inter_eq_of_inter_eq_of_eq_on LocalHomeomorph.IsImage.inter_eq_of_inter_eq_of_eqOnₓ'. -/
theorem inter_eq_of_inter_eq_of_eqOn {e' : LocalHomeomorph α β} (h : e.IsImage s t)
(h' : e'.IsImage s t) (hs : e.source ∩ s = e'.source ∩ s) (Heq : EqOn e e' (e.source ∩ s)) :
e.target ∩ t = e'.target ∩ t :=
h.toLocalEquiv.inter_eq_of_inter_eq_of_eqOn h' hs Heq
#align local_homeomorph.is_image.inter_eq_of_inter_eq_of_eq_on LocalHomeomorph.IsImage.inter_eq_of_inter_eq_of_eqOn
-/- warning: local_homeomorph.is_image.symm_eq_on_of_inter_eq_of_eq_on -> LocalHomeomorph.IsImage.symm_eqOn_of_inter_eq_of_eqOn is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {s : Set.{u1} α} {t : Set.{u2} β} {e' : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2}, (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t) -> (Eq.{succ u1} (Set.{u1} α) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e')) s)) -> (Set.EqOn.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e') (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s)) -> (Set.EqOn.{u2, u1} β α (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e)) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e')) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) t))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {s : Set.{u2} α} {t : Set.{u1} β} {e' : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2}, (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e s t) -> (Eq.{succ u2} (Set.{u2} α) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) s) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e')) s)) -> (Set.EqOn.{u2, u1} α β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e') (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) s)) -> (Set.EqOn.{u1, u2} β α (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e)) (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e')) (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) t))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_image.symm_eq_on_of_inter_eq_of_eq_on LocalHomeomorph.IsImage.symm_eqOn_of_inter_eq_of_eqOnₓ'. -/
theorem symm_eqOn_of_inter_eq_of_eqOn {e' : LocalHomeomorph α β} (h : e.IsImage s t)
(hs : e.source ∩ s = e'.source ∩ s) (Heq : EqOn e e' (e.source ∩ s)) :
EqOn e.symm e'.symm (e.target ∩ t) :=
h.toLocalEquiv.symm_eq_on_of_inter_eq_of_eqOn hs Heq
#align local_homeomorph.is_image.symm_eq_on_of_inter_eq_of_eq_on LocalHomeomorph.IsImage.symm_eqOn_of_inter_eq_of_eqOn
-/- warning: local_homeomorph.is_image.map_nhds_within_eq -> LocalHomeomorph.IsImage.map_nhdsWithin_eq is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {s : Set.{u1} α} {t : Set.{u2} β} {x : α}, (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t) -> (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (Eq.{succ u2} (Filter.{u2} β) (Filter.map.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (nhdsWithin.{u1} α _inst_1 x s)) (nhdsWithin.{u2} β _inst_2 (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e x) t))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {s : Set.{u2} α} {t : Set.{u1} β} {x : α}, (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e s t) -> (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))) -> (Eq.{succ u1} (Filter.{u1} β) (Filter.map.{u2, u1} α β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) (nhdsWithin.{u2} α _inst_1 x s)) (nhdsWithin.{u1} β _inst_2 (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e x) t))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_image.map_nhds_within_eq LocalHomeomorph.IsImage.map_nhdsWithin_eqₓ'. -/
theorem map_nhdsWithin_eq (h : e.IsImage s t) (hx : x ∈ e.source) : map e (𝓝[s] x) = 𝓝[t] e x := by
rw [e.map_nhds_within_eq hx, h.image_eq, e.nhds_within_target_inter (e.map_source hx)]
#align local_homeomorph.is_image.map_nhds_within_eq LocalHomeomorph.IsImage.map_nhdsWithin_eq
-/- warning: local_homeomorph.is_image.closure -> LocalHomeomorph.IsImage.closure is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {s : Set.{u1} α} {t : Set.{u2} β}, (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t) -> (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e (closure.{u1} α _inst_1 s) (closure.{u2} β _inst_2 t))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {s : Set.{u2} α} {t : Set.{u1} β}, (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e s t) -> (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e (closure.{u2} α _inst_1 s) (closure.{u1} β _inst_2 t))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_image.closure LocalHomeomorph.IsImage.closureₓ'. -/
protected theorem closure (h : e.IsImage s t) : e.IsImage (closure s) (closure t) := fun x hx => by
simp only [mem_closure_iff_nhdsWithin_neBot, ← h.map_nhds_within_eq hx, map_ne_bot_iff]
#align local_homeomorph.is_image.closure LocalHomeomorph.IsImage.closure
-/- warning: local_homeomorph.is_image.interior -> LocalHomeomorph.IsImage.interior is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {s : Set.{u1} α} {t : Set.{u2} β}, (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t) -> (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e (interior.{u1} α _inst_1 s) (interior.{u2} β _inst_2 t))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {s : Set.{u2} α} {t : Set.{u1} β}, (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e s t) -> (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e (interior.{u2} α _inst_1 s) (interior.{u1} β _inst_2 t))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_image.interior LocalHomeomorph.IsImage.interiorₓ'. -/
protected theorem interior (h : e.IsImage s t) : e.IsImage (interior s) (interior t) := by
simpa only [closure_compl, compl_compl] using h.compl.closure.compl
#align local_homeomorph.is_image.interior LocalHomeomorph.IsImage.interior
-/- warning: local_homeomorph.is_image.frontier -> LocalHomeomorph.IsImage.frontier is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {s : Set.{u1} α} {t : Set.{u2} β}, (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t) -> (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e (frontier.{u1} α _inst_1 s) (frontier.{u2} β _inst_2 t))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {s : Set.{u2} α} {t : Set.{u1} β}, (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e s t) -> (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e (frontier.{u2} α _inst_1 s) (frontier.{u1} β _inst_2 t))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_image.frontier LocalHomeomorph.IsImage.frontierₓ'. -/
protected theorem frontier (h : e.IsImage s t) : e.IsImage (frontier s) (frontier t) :=
h.closure.diffₓ h.interior
#align local_homeomorph.is_image.frontier LocalHomeomorph.IsImage.frontier
-/- warning: local_homeomorph.is_image.is_open_iff -> LocalHomeomorph.IsImage.isOpen_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {s : Set.{u1} α} {t : Set.{u2} β}, (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t) -> (Iff (IsOpen.{u1} α _inst_1 (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s)) (IsOpen.{u2} β _inst_2 (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) t)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {s : Set.{u2} α} {t : Set.{u1} β}, (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e s t) -> (Iff (IsOpen.{u2} α _inst_1 (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) s)) (IsOpen.{u1} β _inst_2 (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) t)))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_image.is_open_iff LocalHomeomorph.IsImage.isOpen_iffₓ'. -/
theorem isOpen_iff (h : e.IsImage s t) : IsOpen (e.source ∩ s) ↔ IsOpen (e.target ∩ t) :=
⟨fun hs => h.symm_preimage_eq' ▸ e.symm.preimage_open_of_open hs, fun hs =>
h.preimage_eq' ▸ e.preimage_open_of_open hs⟩
#align local_homeomorph.is_image.is_open_iff LocalHomeomorph.IsImage.isOpen_iff
-/- warning: local_homeomorph.is_image.restr -> LocalHomeomorph.IsImage.restr is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {s : Set.{u1} α} {t : Set.{u2} β}, (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t) -> (IsOpen.{u1} α _inst_1 (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s)) -> (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2)
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {s : Set.{u1} α} {t : Set.{u2} β}, (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t) -> (IsOpen.{u1} α _inst_1 (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s)) -> (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2)
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_image.restr LocalHomeomorph.IsImage.restrₓ'. -/
/-- Restrict a `local_homeomorph` to a pair of corresponding open sets. -/
@[simps toLocalEquiv]
def restr (h : e.IsImage s t) (hs : IsOpen (e.source ∩ s)) : LocalHomeomorph α β
@@ -1194,34 +648,16 @@ def restr (h : e.IsImage s t) (hs : IsOpen (e.source ∩ s)) : LocalHomeomorph
end IsImage
-/- warning: local_homeomorph.is_image_source_target -> LocalHomeomorph.isImage_source_target is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2), LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2), LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_image_source_target LocalHomeomorph.isImage_source_targetₓ'. -/
theorem isImage_source_target : e.IsImage e.source e.target :=
e.toLocalEquiv.isImage_source_target
#align local_homeomorph.is_image_source_target LocalHomeomorph.isImage_source_target
-/- warning: local_homeomorph.is_image_source_target_of_disjoint -> LocalHomeomorph.isImage_source_target_of_disjoint is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2), (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e'))) -> (Disjoint.{u2} (Set.{u2} β) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} β) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} β) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} β) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} β) (Set.completeBooleanAlgebra.{u2} β)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u2} (Set.{u2} β) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u2} (Set.{u2} β) (Set.booleanAlgebra.{u2} β))) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e'))) -> (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e')) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e')))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2), (Disjoint.{u2} (Set.{u2} α) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} α) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))) (BoundedOrder.toOrderBot.{u2} (Set.{u2} α) (Preorder.toLE.{u2} (Set.{u2} α) (PartialOrder.toPreorder.{u2} (Set.{u2} α) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} α) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))))) (CompleteLattice.toBoundedOrder.{u2} (Set.{u2} α) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} α) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} α) (Set.instCompleteBooleanAlgebraSet.{u2} α)))))) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e'))) -> (Disjoint.{u1} (Set.{u1} β) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} β) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} β) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} β) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} β) (Set.instCompleteBooleanAlgebraSet.{u1} β)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} β) (Preorder.toLE.{u1} (Set.{u1} β) (PartialOrder.toPreorder.{u1} (Set.{u1} β) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} β) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} β) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} β) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} β) (Set.instCompleteBooleanAlgebraSet.{u1} β)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} β) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} β) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} β) (Set.instCompleteBooleanAlgebraSet.{u1} β)))))) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e'))) -> (LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e')) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e')))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_image_source_target_of_disjoint LocalHomeomorph.isImage_source_target_of_disjointₓ'. -/
theorem isImage_source_target_of_disjoint (e' : LocalHomeomorph α β)
(hs : Disjoint e.source e'.source) (ht : Disjoint e.target e'.target) :
e.IsImage e'.source e'.target :=
e.toLocalEquiv.isImage_source_target_of_disjoint e'.toLocalEquiv hs ht
#align local_homeomorph.is_image_source_target_of_disjoint LocalHomeomorph.isImage_source_target_of_disjoint
-/- warning: local_homeomorph.preimage_interior -> LocalHomeomorph.preimage_interior is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (s : Set.{u2} β), Eq.{succ u1} (Set.{u1} α) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (interior.{u2} β _inst_2 s))) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (interior.{u1} α _inst_1 (Set.preimage.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) s)))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (s : Set.{u2} β), Eq.{succ u1} (Set.{u1} α) (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} α β (LocalHomeomorph.toFun'.{u1, u2} α β _inst_1 _inst_2 e) (interior.{u2} β _inst_2 s))) (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (interior.{u1} α _inst_1 (Set.preimage.{u1, u2} α β (LocalHomeomorph.toFun'.{u1, u2} α β _inst_1 _inst_2 e) s)))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.preimage_interior LocalHomeomorph.preimage_interiorₓ'. -/
/-- Preimage of interior or interior of preimage coincide for local homeomorphisms, when restricted
to the source. -/
theorem preimage_interior (s : Set β) :
@@ -1229,43 +665,19 @@ theorem preimage_interior (s : Set β) :
(IsImage.of_preimage_eq rfl).interior.preimage_eq
#align local_homeomorph.preimage_interior LocalHomeomorph.preimage_interior
-/- warning: local_homeomorph.preimage_closure -> LocalHomeomorph.preimage_closure is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (s : Set.{u2} β), Eq.{succ u1} (Set.{u1} α) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (closure.{u2} β _inst_2 s))) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (closure.{u1} α _inst_1 (Set.preimage.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) s)))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (s : Set.{u2} β), Eq.{succ u1} (Set.{u1} α) (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} α β (LocalHomeomorph.toFun'.{u1, u2} α β _inst_1 _inst_2 e) (closure.{u2} β _inst_2 s))) (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (closure.{u1} α _inst_1 (Set.preimage.{u1, u2} α β (LocalHomeomorph.toFun'.{u1, u2} α β _inst_1 _inst_2 e) s)))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.preimage_closure LocalHomeomorph.preimage_closureₓ'. -/
theorem preimage_closure (s : Set β) : e.source ∩ e ⁻¹' closure s = e.source ∩ closure (e ⁻¹' s) :=
(IsImage.of_preimage_eq rfl).closure.preimage_eq
#align local_homeomorph.preimage_closure LocalHomeomorph.preimage_closure
-/- warning: local_homeomorph.preimage_frontier -> LocalHomeomorph.preimage_frontier is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (s : Set.{u2} β), Eq.{succ u1} (Set.{u1} α) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (frontier.{u2} β _inst_2 s))) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (frontier.{u1} α _inst_1 (Set.preimage.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) s)))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (s : Set.{u2} β), Eq.{succ u1} (Set.{u1} α) (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} α β (LocalHomeomorph.toFun'.{u1, u2} α β _inst_1 _inst_2 e) (frontier.{u2} β _inst_2 s))) (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (frontier.{u1} α _inst_1 (Set.preimage.{u1, u2} α β (LocalHomeomorph.toFun'.{u1, u2} α β _inst_1 _inst_2 e) s)))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.preimage_frontier LocalHomeomorph.preimage_frontierₓ'. -/
theorem preimage_frontier (s : Set β) :
e.source ∩ e ⁻¹' frontier s = e.source ∩ frontier (e ⁻¹' s) :=
(IsImage.of_preimage_eq rfl).frontier.preimage_eq
#align local_homeomorph.preimage_frontier LocalHomeomorph.preimage_frontier
-/- warning: local_homeomorph.preimage_open_of_open_symm -> LocalHomeomorph.preimage_open_of_open_symm is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {s : Set.{u1} α}, (IsOpen.{u1} α _inst_1 s) -> (IsOpen.{u2} β _inst_2 (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u2, u1} β α (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e)) s)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) {s : Set.{u2} α}, (IsOpen.{u2} α _inst_1 s) -> (IsOpen.{u1} β _inst_2 (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} β α (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e)) s)))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.preimage_open_of_open_symm LocalHomeomorph.preimage_open_of_open_symmₓ'. -/
theorem preimage_open_of_open_symm {s : Set α} (hs : IsOpen s) : IsOpen (e.target ∩ e.symm ⁻¹' s) :=
e.symm.ContinuousOn.preimage_open_of_open e.open_target hs
#align local_homeomorph.preimage_open_of_open_symm LocalHomeomorph.preimage_open_of_open_symm
-/- warning: local_homeomorph.image_open_of_open -> LocalHomeomorph.image_open_of_open is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {s : Set.{u1} α}, (IsOpen.{u1} α _inst_1 s) -> (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) s (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (IsOpen.{u2} β _inst_2 (Set.image.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) s))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) {s : Set.{u2} α}, (IsOpen.{u2} α _inst_1 s) -> (HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) s (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))) -> (IsOpen.{u1} β _inst_2 (Set.image.{u2, u1} α β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) s))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.image_open_of_open LocalHomeomorph.image_open_of_openₓ'. -/
/-- The image of an open set in the source is open. -/
theorem image_open_of_open {s : Set α} (hs : IsOpen s) (h : s ⊆ e.source) : IsOpen (e '' s) :=
by
@@ -1274,12 +686,6 @@ theorem image_open_of_open {s : Set α} (hs : IsOpen s) (h : s ⊆ e.source) : I
exact e.continuous_on_symm.preimage_open_of_open e.open_target hs
#align local_homeomorph.image_open_of_open LocalHomeomorph.image_open_of_open
-/- warning: local_homeomorph.image_open_of_open' -> LocalHomeomorph.image_open_of_open' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {s : Set.{u1} α}, (IsOpen.{u1} α _inst_1 s) -> (IsOpen.{u2} β _inst_2 (Set.image.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) {s : Set.{u2} α}, (IsOpen.{u2} α _inst_1 s) -> (IsOpen.{u1} β _inst_2 (Set.image.{u2, u1} α β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) s)))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.image_open_of_open' LocalHomeomorph.image_open_of_open'ₓ'. -/
/-- The image of the restriction of an open set to the source is open. -/
theorem image_open_of_open' {s : Set α} (hs : IsOpen s) : IsOpen (e '' (e.source ∩ s)) :=
image_open_of_open _ (IsOpen.inter e.open_source hs) (inter_subset_left _ _)
@@ -1316,24 +722,12 @@ protected def restrOpen (s : Set α) (hs : IsOpen s) : LocalHomeomorph α β :=
#align local_homeomorph.restr_open LocalHomeomorph.restrOpen
-/
-/- warning: local_homeomorph.restr_open_to_local_equiv -> LocalHomeomorph.restrOpen_toLocalEquiv is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (s : Set.{u1} α) (hs : IsOpen.{u1} α _inst_1 s), Eq.{max (succ u1) (succ u2)} (LocalEquiv.{u1, u2} α β) (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 (LocalHomeomorph.restrOpen.{u1, u2} α β _inst_1 _inst_2 e s hs)) (LocalEquiv.restr.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e) s)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (s : Set.{u2} α) (hs : IsOpen.{u2} α _inst_1 s), Eq.{max (succ u2) (succ u1)} (LocalEquiv.{u2, u1} α β) (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 (LocalHomeomorph.restrOpen.{u2, u1} α β _inst_1 _inst_2 e s hs)) (LocalEquiv.restr.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e) s)
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.restr_open_to_local_equiv LocalHomeomorph.restrOpen_toLocalEquivₓ'. -/
@[simp, mfld_simps]
theorem restrOpen_toLocalEquiv (s : Set α) (hs : IsOpen s) :
(e.restrOpen s hs).toLocalEquiv = e.toLocalEquiv.restr s :=
rfl
#align local_homeomorph.restr_open_to_local_equiv LocalHomeomorph.restrOpen_toLocalEquiv
-/- warning: local_homeomorph.restr_open_source -> LocalHomeomorph.restrOpen_source is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (s : Set.{u1} α) (hs : IsOpen.{u1} α _inst_1 s), Eq.{succ u1} (Set.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 (LocalHomeomorph.restrOpen.{u1, u2} α β _inst_1 _inst_2 e s hs))) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (s : Set.{u2} α) (hs : IsOpen.{u2} α _inst_1 s), Eq.{succ u2} (Set.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 (LocalHomeomorph.restrOpen.{u2, u1} α β _inst_1 _inst_2 e s hs))) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) s)
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.restr_open_source LocalHomeomorph.restrOpen_sourceₓ'. -/
-- Already simp via local_equiv
theorem restrOpen_source (s : Set α) (hs : IsOpen s) : (e.restrOpen s hs).source = e.source ∩ s :=
rfl
@@ -1350,45 +744,21 @@ protected def restr (s : Set α) : LocalHomeomorph α β :=
#align local_homeomorph.restr LocalHomeomorph.restr
-/
-/- warning: local_homeomorph.restr_to_local_equiv -> LocalHomeomorph.restr_toLocalEquiv is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (s : Set.{u1} α), Eq.{max (succ u1) (succ u2)} (LocalEquiv.{u1, u2} α β) (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 (LocalHomeomorph.restr.{u1, u2} α β _inst_1 _inst_2 e s)) (LocalEquiv.restr.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e) (interior.{u1} α _inst_1 s))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (s : Set.{u2} α), Eq.{max (succ u2) (succ u1)} (LocalEquiv.{u2, u1} α β) (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 (LocalHomeomorph.restr.{u2, u1} α β _inst_1 _inst_2 e s)) (LocalEquiv.restr.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e) (interior.{u2} α _inst_1 s))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.restr_to_local_equiv LocalHomeomorph.restr_toLocalEquivₓ'. -/
@[simp, mfld_simps]
theorem restr_toLocalEquiv (s : Set α) :
(e.restr s).toLocalEquiv = e.toLocalEquiv.restr (interior s) :=
rfl
#align local_homeomorph.restr_to_local_equiv LocalHomeomorph.restr_toLocalEquiv
-/- warning: local_homeomorph.restr_source' -> LocalHomeomorph.restr_source' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (s : Set.{u1} α), (IsOpen.{u1} α _inst_1 s) -> (Eq.{succ u1} (Set.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 (LocalHomeomorph.restr.{u1, u2} α β _inst_1 _inst_2 e s))) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (s : Set.{u2} α), (IsOpen.{u2} α _inst_1 s) -> (Eq.{succ u2} (Set.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 (LocalHomeomorph.restr.{u2, u1} α β _inst_1 _inst_2 e s))) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) s))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.restr_source' LocalHomeomorph.restr_source'ₓ'. -/
theorem restr_source' (s : Set α) (hs : IsOpen s) : (e.restr s).source = e.source ∩ s := by
rw [e.restr_source, hs.interior_eq]
#align local_homeomorph.restr_source' LocalHomeomorph.restr_source'
-/- warning: local_homeomorph.restr_to_local_equiv' -> LocalHomeomorph.restr_toLocalEquiv' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (s : Set.{u1} α), (IsOpen.{u1} α _inst_1 s) -> (Eq.{max (succ u1) (succ u2)} (LocalEquiv.{u1, u2} α β) (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 (LocalHomeomorph.restr.{u1, u2} α β _inst_1 _inst_2 e s)) (LocalEquiv.restr.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e) s))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (s : Set.{u2} α), (IsOpen.{u2} α _inst_1 s) -> (Eq.{max (succ u2) (succ u1)} (LocalEquiv.{u2, u1} α β) (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 (LocalHomeomorph.restr.{u2, u1} α β _inst_1 _inst_2 e s)) (LocalEquiv.restr.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e) s))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.restr_to_local_equiv' LocalHomeomorph.restr_toLocalEquiv'ₓ'. -/
theorem restr_toLocalEquiv' (s : Set α) (hs : IsOpen s) :
(e.restr s).toLocalEquiv = e.toLocalEquiv.restr s := by
rw [e.restr_to_local_equiv, hs.interior_eq]
#align local_homeomorph.restr_to_local_equiv' LocalHomeomorph.restr_toLocalEquiv'
-/- warning: local_homeomorph.restr_eq_of_source_subset -> LocalHomeomorph.restr_eq_of_source_subset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {s : Set.{u1} α}, (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s) -> (Eq.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (LocalHomeomorph.restr.{u1, u2} α β _inst_1 _inst_2 e s) e)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {s : Set.{u2} α}, (HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) s) -> (Eq.{max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (LocalHomeomorph.restr.{u2, u1} α β _inst_1 _inst_2 e s) e)
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.restr_eq_of_source_subset LocalHomeomorph.restr_eq_of_source_subsetₓ'. -/
theorem restr_eq_of_source_subset {e : LocalHomeomorph α β} {s : Set α} (h : e.source ⊆ s) :
e.restr s = e := by
apply eq_of_local_equiv_eq
@@ -1397,23 +767,11 @@ theorem restr_eq_of_source_subset {e : LocalHomeomorph α β} {s : Set α} (h :
exact interior_maximal h e.open_source
#align local_homeomorph.restr_eq_of_source_subset LocalHomeomorph.restr_eq_of_source_subset
-/- warning: local_homeomorph.restr_univ -> LocalHomeomorph.restr_univ is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2}, Eq.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (LocalHomeomorph.restr.{u1, u2} α β _inst_1 _inst_2 e (Set.univ.{u1} α)) e
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2}, Eq.{max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (LocalHomeomorph.restr.{u2, u1} α β _inst_1 _inst_2 e (Set.univ.{u2} α)) e
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.restr_univ LocalHomeomorph.restr_univₓ'. -/
@[simp, mfld_simps]
theorem restr_univ {e : LocalHomeomorph α β} : e.restr univ = e :=
restr_eq_of_source_subset (subset_univ _)
#align local_homeomorph.restr_univ LocalHomeomorph.restr_univ
-/- warning: local_homeomorph.restr_source_inter -> LocalHomeomorph.restr_source_inter is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (s : Set.{u1} α), Eq.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (LocalHomeomorph.restr.{u1, u2} α β _inst_1 _inst_2 e (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s)) (LocalHomeomorph.restr.{u1, u2} α β _inst_1 _inst_2 e s)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (s : Set.{u2} α), Eq.{max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (LocalHomeomorph.restr.{u2, u1} α β _inst_1 _inst_2 e (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) s)) (LocalHomeomorph.restr.{u2, u1} α β _inst_1 _inst_2 e s)
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.restr_source_inter LocalHomeomorph.restr_source_interₓ'. -/
theorem restr_source_inter (s : Set α) : e.restr (e.source ∩ s) = e.restr s :=
by
refine' LocalHomeomorph.ext _ _ (fun x => rfl) (fun x => rfl) _
@@ -1509,168 +867,72 @@ protected def trans : LocalHomeomorph α γ :=
#align local_homeomorph.trans LocalHomeomorph.trans
-/
-/- warning: local_homeomorph.trans_to_local_equiv -> LocalHomeomorph.trans_toLocalEquiv is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u2, u3} β γ _inst_2 _inst_3), Eq.{max (succ u1) (succ u3)} (LocalEquiv.{u1, u3} α γ) (LocalHomeomorph.toLocalEquiv.{u1, u3} α γ _inst_1 _inst_3 (LocalHomeomorph.trans.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 e e')) (LocalEquiv.trans.{u1, u2, u3} α β γ (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e) (LocalHomeomorph.toLocalEquiv.{u2, u3} β γ _inst_2 _inst_3 e'))
-but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u1}} {γ : Type.{u2}} [_inst_1 : TopologicalSpace.{u3} α] [_inst_2 : TopologicalSpace.{u1} β] [_inst_3 : TopologicalSpace.{u2} γ] (e : LocalHomeomorph.{u3, u1} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u1, u2} β γ _inst_2 _inst_3), Eq.{max (succ u3) (succ u2)} (LocalEquiv.{u3, u2} α γ) (LocalHomeomorph.toLocalEquiv.{u3, u2} α γ _inst_1 _inst_3 (LocalHomeomorph.trans.{u3, u1, u2} α β γ _inst_1 _inst_2 _inst_3 e e')) (LocalEquiv.trans.{u3, u1, u2} α β γ (LocalHomeomorph.toLocalEquiv.{u3, u1} α β _inst_1 _inst_2 e) (LocalHomeomorph.toLocalEquiv.{u1, u2} β γ _inst_2 _inst_3 e'))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.trans_to_local_equiv LocalHomeomorph.trans_toLocalEquivₓ'. -/
@[simp, mfld_simps]
theorem trans_toLocalEquiv : (e.trans e').toLocalEquiv = e.toLocalEquiv.trans e'.toLocalEquiv :=
rfl
#align local_homeomorph.trans_to_local_equiv LocalHomeomorph.trans_toLocalEquiv
-/- warning: local_homeomorph.coe_trans -> LocalHomeomorph.coe_trans is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u2, u3} β γ _inst_2 _inst_3), Eq.{max (succ u1) (succ u3)} ((fun (_x : LocalHomeomorph.{u1, u3} α γ _inst_1 _inst_3) => α -> γ) (LocalHomeomorph.trans.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 e e')) (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (LocalHomeomorph.{u1, u3} α γ _inst_1 _inst_3) (fun (_x : LocalHomeomorph.{u1, u3} α γ _inst_1 _inst_3) => α -> γ) (LocalHomeomorph.hasCoeToFun.{u1, u3} α γ _inst_1 _inst_3) (LocalHomeomorph.trans.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 e e')) (Function.comp.{succ u1, succ u2, succ u3} α β γ (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (LocalHomeomorph.{u2, u3} β γ _inst_2 _inst_3) (fun (_x : LocalHomeomorph.{u2, u3} β γ _inst_2 _inst_3) => β -> γ) (LocalHomeomorph.hasCoeToFun.{u2, u3} β γ _inst_2 _inst_3) e') (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e))
-but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u1}} {γ : Type.{u2}} [_inst_1 : TopologicalSpace.{u3} α] [_inst_2 : TopologicalSpace.{u1} β] [_inst_3 : TopologicalSpace.{u2} γ] (e : LocalHomeomorph.{u3, u1} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u1, u2} β γ _inst_2 _inst_3), Eq.{max (succ u3) (succ u2)} (α -> γ) (LocalHomeomorph.toFun'.{u3, u2} α γ _inst_1 _inst_3 (LocalHomeomorph.trans.{u3, u1, u2} α β γ _inst_1 _inst_2 _inst_3 e e')) (Function.comp.{succ u3, succ u1, succ u2} α β γ (LocalHomeomorph.toFun'.{u1, u2} β γ _inst_2 _inst_3 e') (LocalHomeomorph.toFun'.{u3, u1} α β _inst_1 _inst_2 e))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.coe_trans LocalHomeomorph.coe_transₓ'. -/
@[simp, mfld_simps]
theorem coe_trans : (e.trans e' : α → γ) = e' ∘ e :=
rfl
#align local_homeomorph.coe_trans LocalHomeomorph.coe_trans
-/- warning: local_homeomorph.coe_trans_symm -> LocalHomeomorph.coe_trans_symm is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u2, u3} β γ _inst_2 _inst_3), Eq.{max (succ u3) (succ u1)} ((fun (_x : LocalHomeomorph.{u3, u1} γ α _inst_3 _inst_1) => γ -> α) (LocalHomeomorph.symm.{u1, u3} α γ _inst_1 _inst_3 (LocalHomeomorph.trans.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 e e'))) (coeFn.{max (succ u3) (succ u1), max (succ u3) (succ u1)} (LocalHomeomorph.{u3, u1} γ α _inst_3 _inst_1) (fun (_x : LocalHomeomorph.{u3, u1} γ α _inst_3 _inst_1) => γ -> α) (LocalHomeomorph.hasCoeToFun.{u3, u1} γ α _inst_3 _inst_1) (LocalHomeomorph.symm.{u1, u3} α γ _inst_1 _inst_3 (LocalHomeomorph.trans.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 e e'))) (Function.comp.{succ u3, succ u2, succ u1} γ β α (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e)) (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (LocalHomeomorph.{u3, u2} γ β _inst_3 _inst_2) (fun (_x : LocalHomeomorph.{u3, u2} γ β _inst_3 _inst_2) => γ -> β) (LocalHomeomorph.hasCoeToFun.{u3, u2} γ β _inst_3 _inst_2) (LocalHomeomorph.symm.{u2, u3} β γ _inst_2 _inst_3 e')))
-but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u1}} {γ : Type.{u2}} [_inst_1 : TopologicalSpace.{u3} α] [_inst_2 : TopologicalSpace.{u1} β] [_inst_3 : TopologicalSpace.{u2} γ] (e : LocalHomeomorph.{u3, u1} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u1, u2} β γ _inst_2 _inst_3), Eq.{max (succ u3) (succ u2)} (γ -> α) (LocalHomeomorph.toFun'.{u2, u3} γ α _inst_3 _inst_1 (LocalHomeomorph.symm.{u3, u2} α γ _inst_1 _inst_3 (LocalHomeomorph.trans.{u3, u1, u2} α β γ _inst_1 _inst_2 _inst_3 e e'))) (Function.comp.{succ u2, succ u1, succ u3} γ β α (LocalHomeomorph.toFun'.{u1, u3} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u3, u1} α β _inst_1 _inst_2 e)) (LocalHomeomorph.toFun'.{u2, u1} γ β _inst_3 _inst_2 (LocalHomeomorph.symm.{u1, u2} β γ _inst_2 _inst_3 e')))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.coe_trans_symm LocalHomeomorph.coe_trans_symmₓ'. -/
@[simp, mfld_simps]
theorem coe_trans_symm : ((e.trans e').symm : γ → α) = e.symm ∘ e'.symm :=
rfl
#align local_homeomorph.coe_trans_symm LocalHomeomorph.coe_trans_symm
-/- warning: local_homeomorph.trans_apply -> LocalHomeomorph.trans_apply is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u2, u3} β γ _inst_2 _inst_3) {x : α}, Eq.{succ u3} γ (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (LocalHomeomorph.{u1, u3} α γ _inst_1 _inst_3) (fun (_x : LocalHomeomorph.{u1, u3} α γ _inst_1 _inst_3) => α -> γ) (LocalHomeomorph.hasCoeToFun.{u1, u3} α γ _inst_1 _inst_3) (LocalHomeomorph.trans.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 e e') x) (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (LocalHomeomorph.{u2, u3} β γ _inst_2 _inst_3) (fun (_x : LocalHomeomorph.{u2, u3} β γ _inst_2 _inst_3) => β -> γ) (LocalHomeomorph.hasCoeToFun.{u2, u3} β γ _inst_2 _inst_3) e' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e x))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] [_inst_3 : TopologicalSpace.{u3} γ] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u1, u3} β γ _inst_2 _inst_3) {x : α}, Eq.{succ u3} γ (LocalHomeomorph.toFun'.{u2, u3} α γ _inst_1 _inst_3 (LocalHomeomorph.trans.{u2, u1, u3} α β γ _inst_1 _inst_2 _inst_3 e e') x) (LocalHomeomorph.toFun'.{u1, u3} β γ _inst_2 _inst_3 e' (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e x))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.trans_apply LocalHomeomorph.trans_applyₓ'. -/
theorem trans_apply {x : α} : (e.trans e') x = e' (e x) :=
rfl
#align local_homeomorph.trans_apply LocalHomeomorph.trans_apply
-/- warning: local_homeomorph.trans_symm_eq_symm_trans_symm -> LocalHomeomorph.trans_symm_eq_symm_trans_symm is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u2, u3} β γ _inst_2 _inst_3), Eq.{max (succ u3) (succ u1)} (LocalHomeomorph.{u3, u1} γ α _inst_3 _inst_1) (LocalHomeomorph.symm.{u1, u3} α γ _inst_1 _inst_3 (LocalHomeomorph.trans.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 e e')) (LocalHomeomorph.trans.{u3, u2, u1} γ β α _inst_3 _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u3} β γ _inst_2 _inst_3 e') (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e))
-but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u1}} {γ : Type.{u2}} [_inst_1 : TopologicalSpace.{u3} α] [_inst_2 : TopologicalSpace.{u1} β] [_inst_3 : TopologicalSpace.{u2} γ] (e : LocalHomeomorph.{u3, u1} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u1, u2} β γ _inst_2 _inst_3), Eq.{max (succ u3) (succ u2)} (LocalHomeomorph.{u2, u3} γ α _inst_3 _inst_1) (LocalHomeomorph.symm.{u3, u2} α γ _inst_1 _inst_3 (LocalHomeomorph.trans.{u3, u1, u2} α β γ _inst_1 _inst_2 _inst_3 e e')) (LocalHomeomorph.trans.{u2, u1, u3} γ β α _inst_3 _inst_2 _inst_1 (LocalHomeomorph.symm.{u1, u2} β γ _inst_2 _inst_3 e') (LocalHomeomorph.symm.{u3, u1} α β _inst_1 _inst_2 e))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.trans_symm_eq_symm_trans_symm LocalHomeomorph.trans_symm_eq_symm_trans_symmₓ'. -/
theorem trans_symm_eq_symm_trans_symm : (e.trans e').symm = e'.symm.trans e.symm := by
cases e <;> cases e' <;> rfl
#align local_homeomorph.trans_symm_eq_symm_trans_symm LocalHomeomorph.trans_symm_eq_symm_trans_symm
-/- warning: local_homeomorph.trans_source -> LocalHomeomorph.trans_source is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u2, u3} β γ _inst_2 _inst_3), Eq.{succ u1} (Set.{u1} α) (LocalEquiv.source.{u1, u3} α γ (LocalHomeomorph.toLocalEquiv.{u1, u3} α γ _inst_1 _inst_3 (LocalHomeomorph.trans.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 e e'))) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (LocalEquiv.source.{u2, u3} β γ (LocalHomeomorph.toLocalEquiv.{u2, u3} β γ _inst_2 _inst_3 e'))))
-but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u1}} {γ : Type.{u2}} [_inst_1 : TopologicalSpace.{u3} α] [_inst_2 : TopologicalSpace.{u1} β] [_inst_3 : TopologicalSpace.{u2} γ] (e : LocalHomeomorph.{u3, u1} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u1, u2} β γ _inst_2 _inst_3), Eq.{succ u3} (Set.{u3} α) (LocalEquiv.source.{u3, u2} α γ (LocalHomeomorph.toLocalEquiv.{u3, u2} α γ _inst_1 _inst_3 (LocalHomeomorph.trans.{u3, u1, u2} α β γ _inst_1 _inst_2 _inst_3 e e'))) (Inter.inter.{u3} (Set.{u3} α) (Set.instInterSet.{u3} α) (LocalEquiv.source.{u3, u1} α β (LocalHomeomorph.toLocalEquiv.{u3, u1} α β _inst_1 _inst_2 e)) (Set.preimage.{u3, u1} α β (LocalHomeomorph.toFun'.{u3, u1} α β _inst_1 _inst_2 e) (LocalEquiv.source.{u1, u2} β γ (LocalHomeomorph.toLocalEquiv.{u1, u2} β γ _inst_2 _inst_3 e'))))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.trans_source LocalHomeomorph.trans_sourceₓ'. -/
/- This could be considered as a simp lemma, but there are many situations where it makes something
simple into something more complicated. -/
theorem trans_source : (e.trans e').source = e.source ∩ e ⁻¹' e'.source :=
LocalEquiv.trans_source e.toLocalEquiv e'.toLocalEquiv
#align local_homeomorph.trans_source LocalHomeomorph.trans_source
-/- warning: local_homeomorph.trans_source' -> LocalHomeomorph.trans_source' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u2, u3} β γ _inst_2 _inst_3), Eq.{succ u1} (Set.{u1} α) (LocalEquiv.source.{u1, u3} α γ (LocalHomeomorph.toLocalEquiv.{u1, u3} α γ _inst_1 _inst_3 (LocalHomeomorph.trans.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 e e'))) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (LocalEquiv.source.{u2, u3} β γ (LocalHomeomorph.toLocalEquiv.{u2, u3} β γ _inst_2 _inst_3 e')))))
-but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u1}} {γ : Type.{u2}} [_inst_1 : TopologicalSpace.{u3} α] [_inst_2 : TopologicalSpace.{u1} β] [_inst_3 : TopologicalSpace.{u2} γ] (e : LocalHomeomorph.{u3, u1} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u1, u2} β γ _inst_2 _inst_3), Eq.{succ u3} (Set.{u3} α) (LocalEquiv.source.{u3, u2} α γ (LocalHomeomorph.toLocalEquiv.{u3, u2} α γ _inst_1 _inst_3 (LocalHomeomorph.trans.{u3, u1, u2} α β γ _inst_1 _inst_2 _inst_3 e e'))) (Inter.inter.{u3} (Set.{u3} α) (Set.instInterSet.{u3} α) (LocalEquiv.source.{u3, u1} α β (LocalHomeomorph.toLocalEquiv.{u3, u1} α β _inst_1 _inst_2 e)) (Set.preimage.{u3, u1} α β (LocalHomeomorph.toFun'.{u3, u1} α β _inst_1 _inst_2 e) (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) (LocalEquiv.target.{u3, u1} α β (LocalHomeomorph.toLocalEquiv.{u3, u1} α β _inst_1 _inst_2 e)) (LocalEquiv.source.{u1, u2} β γ (LocalHomeomorph.toLocalEquiv.{u1, u2} β γ _inst_2 _inst_3 e')))))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.trans_source' LocalHomeomorph.trans_source'ₓ'. -/
theorem trans_source' : (e.trans e').source = e.source ∩ e ⁻¹' (e.target ∩ e'.source) :=
LocalEquiv.trans_source' e.toLocalEquiv e'.toLocalEquiv
#align local_homeomorph.trans_source' LocalHomeomorph.trans_source'
-/- warning: local_homeomorph.trans_source'' -> LocalHomeomorph.trans_source'' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u2, u3} β γ _inst_2 _inst_3), Eq.{succ u1} (Set.{u1} α) (LocalEquiv.source.{u1, u3} α γ (LocalHomeomorph.toLocalEquiv.{u1, u3} α γ _inst_1 _inst_3 (LocalHomeomorph.trans.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 e e'))) (Set.image.{u2, u1} β α (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e)) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (LocalEquiv.source.{u2, u3} β γ (LocalHomeomorph.toLocalEquiv.{u2, u3} β γ _inst_2 _inst_3 e'))))
-but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u1}} {γ : Type.{u2}} [_inst_1 : TopologicalSpace.{u3} α] [_inst_2 : TopologicalSpace.{u1} β] [_inst_3 : TopologicalSpace.{u2} γ] (e : LocalHomeomorph.{u3, u1} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u1, u2} β γ _inst_2 _inst_3), Eq.{succ u3} (Set.{u3} α) (LocalEquiv.source.{u3, u2} α γ (LocalHomeomorph.toLocalEquiv.{u3, u2} α γ _inst_1 _inst_3 (LocalHomeomorph.trans.{u3, u1, u2} α β γ _inst_1 _inst_2 _inst_3 e e'))) (Set.image.{u1, u3} β α (LocalHomeomorph.toFun'.{u1, u3} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u3, u1} α β _inst_1 _inst_2 e)) (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) (LocalEquiv.target.{u3, u1} α β (LocalHomeomorph.toLocalEquiv.{u3, u1} α β _inst_1 _inst_2 e)) (LocalEquiv.source.{u1, u2} β γ (LocalHomeomorph.toLocalEquiv.{u1, u2} β γ _inst_2 _inst_3 e'))))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.trans_source'' LocalHomeomorph.trans_source''ₓ'. -/
theorem trans_source'' : (e.trans e').source = e.symm '' (e.target ∩ e'.source) :=
LocalEquiv.trans_source'' e.toLocalEquiv e'.toLocalEquiv
#align local_homeomorph.trans_source'' LocalHomeomorph.trans_source''
-/- warning: local_homeomorph.image_trans_source -> LocalHomeomorph.image_trans_source is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u2, u3} β γ _inst_2 _inst_3), Eq.{succ u2} (Set.{u2} β) (Set.image.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (LocalEquiv.source.{u1, u3} α γ (LocalHomeomorph.toLocalEquiv.{u1, u3} α γ _inst_1 _inst_3 (LocalHomeomorph.trans.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 e e')))) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (LocalEquiv.source.{u2, u3} β γ (LocalHomeomorph.toLocalEquiv.{u2, u3} β γ _inst_2 _inst_3 e')))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u3}} {γ : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u3} β] [_inst_3 : TopologicalSpace.{u1} γ] (e : LocalHomeomorph.{u2, u3} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u3, u1} β γ _inst_2 _inst_3), Eq.{succ u3} (Set.{u3} β) (Set.image.{u2, u3} α β (LocalHomeomorph.toFun'.{u2, u3} α β _inst_1 _inst_2 e) (LocalEquiv.source.{u2, u1} α γ (LocalHomeomorph.toLocalEquiv.{u2, u1} α γ _inst_1 _inst_3 (LocalHomeomorph.trans.{u2, u3, u1} α β γ _inst_1 _inst_2 _inst_3 e e')))) (Inter.inter.{u3} (Set.{u3} β) (Set.instInterSet.{u3} β) (LocalEquiv.target.{u2, u3} α β (LocalHomeomorph.toLocalEquiv.{u2, u3} α β _inst_1 _inst_2 e)) (LocalEquiv.source.{u3, u1} β γ (LocalHomeomorph.toLocalEquiv.{u3, u1} β γ _inst_2 _inst_3 e')))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.image_trans_source LocalHomeomorph.image_trans_sourceₓ'. -/
theorem image_trans_source : e '' (e.trans e').source = e.target ∩ e'.source :=
LocalEquiv.image_trans_source e.toLocalEquiv e'.toLocalEquiv
#align local_homeomorph.image_trans_source LocalHomeomorph.image_trans_source
-/- warning: local_homeomorph.trans_target -> LocalHomeomorph.trans_target is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u2, u3} β γ _inst_2 _inst_3), Eq.{succ u3} (Set.{u3} γ) (LocalEquiv.target.{u1, u3} α γ (LocalHomeomorph.toLocalEquiv.{u1, u3} α γ _inst_1 _inst_3 (LocalHomeomorph.trans.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 e e'))) (Inter.inter.{u3} (Set.{u3} γ) (Set.hasInter.{u3} γ) (LocalEquiv.target.{u2, u3} β γ (LocalHomeomorph.toLocalEquiv.{u2, u3} β γ _inst_2 _inst_3 e')) (Set.preimage.{u3, u2} γ β (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (LocalHomeomorph.{u3, u2} γ β _inst_3 _inst_2) (fun (_x : LocalHomeomorph.{u3, u2} γ β _inst_3 _inst_2) => γ -> β) (LocalHomeomorph.hasCoeToFun.{u3, u2} γ β _inst_3 _inst_2) (LocalHomeomorph.symm.{u2, u3} β γ _inst_2 _inst_3 e')) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] [_inst_3 : TopologicalSpace.{u3} γ] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u1, u3} β γ _inst_2 _inst_3), Eq.{succ u3} (Set.{u3} γ) (LocalEquiv.target.{u2, u3} α γ (LocalHomeomorph.toLocalEquiv.{u2, u3} α γ _inst_1 _inst_3 (LocalHomeomorph.trans.{u2, u1, u3} α β γ _inst_1 _inst_2 _inst_3 e e'))) (Inter.inter.{u3} (Set.{u3} γ) (Set.instInterSet.{u3} γ) (LocalEquiv.target.{u1, u3} β γ (LocalHomeomorph.toLocalEquiv.{u1, u3} β γ _inst_2 _inst_3 e')) (Set.preimage.{u3, u1} γ β (LocalHomeomorph.toFun'.{u3, u1} γ β _inst_3 _inst_2 (LocalHomeomorph.symm.{u1, u3} β γ _inst_2 _inst_3 e')) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.trans_target LocalHomeomorph.trans_targetₓ'. -/
theorem trans_target : (e.trans e').target = e'.target ∩ e'.symm ⁻¹' e.target :=
rfl
#align local_homeomorph.trans_target LocalHomeomorph.trans_target
-/- warning: local_homeomorph.trans_target' -> LocalHomeomorph.trans_target' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u2, u3} β γ _inst_2 _inst_3), Eq.{succ u3} (Set.{u3} γ) (LocalEquiv.target.{u1, u3} α γ (LocalHomeomorph.toLocalEquiv.{u1, u3} α γ _inst_1 _inst_3 (LocalHomeomorph.trans.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 e e'))) (Inter.inter.{u3} (Set.{u3} γ) (Set.hasInter.{u3} γ) (LocalEquiv.target.{u2, u3} β γ (LocalHomeomorph.toLocalEquiv.{u2, u3} β γ _inst_2 _inst_3 e')) (Set.preimage.{u3, u2} γ β (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (LocalHomeomorph.{u3, u2} γ β _inst_3 _inst_2) (fun (_x : LocalHomeomorph.{u3, u2} γ β _inst_3 _inst_2) => γ -> β) (LocalHomeomorph.hasCoeToFun.{u3, u2} γ β _inst_3 _inst_2) (LocalHomeomorph.symm.{u2, u3} β γ _inst_2 _inst_3 e')) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.source.{u2, u3} β γ (LocalHomeomorph.toLocalEquiv.{u2, u3} β γ _inst_2 _inst_3 e')) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] [_inst_3 : TopologicalSpace.{u3} γ] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u1, u3} β γ _inst_2 _inst_3), Eq.{succ u3} (Set.{u3} γ) (LocalEquiv.target.{u2, u3} α γ (LocalHomeomorph.toLocalEquiv.{u2, u3} α γ _inst_1 _inst_3 (LocalHomeomorph.trans.{u2, u1, u3} α β γ _inst_1 _inst_2 _inst_3 e e'))) (Inter.inter.{u3} (Set.{u3} γ) (Set.instInterSet.{u3} γ) (LocalEquiv.target.{u1, u3} β γ (LocalHomeomorph.toLocalEquiv.{u1, u3} β γ _inst_2 _inst_3 e')) (Set.preimage.{u3, u1} γ β (LocalHomeomorph.toFun'.{u3, u1} γ β _inst_3 _inst_2 (LocalHomeomorph.symm.{u1, u3} β γ _inst_2 _inst_3 e')) (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) (LocalEquiv.source.{u1, u3} β γ (LocalHomeomorph.toLocalEquiv.{u1, u3} β γ _inst_2 _inst_3 e')) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)))))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.trans_target' LocalHomeomorph.trans_target'ₓ'. -/
theorem trans_target' : (e.trans e').target = e'.target ∩ e'.symm ⁻¹' (e'.source ∩ e.target) :=
trans_source' e'.symm e.symm
#align local_homeomorph.trans_target' LocalHomeomorph.trans_target'
-/- warning: local_homeomorph.trans_target'' -> LocalHomeomorph.trans_target'' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u2, u3} β γ _inst_2 _inst_3), Eq.{succ u3} (Set.{u3} γ) (LocalEquiv.target.{u1, u3} α γ (LocalHomeomorph.toLocalEquiv.{u1, u3} α γ _inst_1 _inst_3 (LocalHomeomorph.trans.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 e e'))) (Set.image.{u2, u3} β γ (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (LocalHomeomorph.{u2, u3} β γ _inst_2 _inst_3) (fun (_x : LocalHomeomorph.{u2, u3} β γ _inst_2 _inst_3) => β -> γ) (LocalHomeomorph.hasCoeToFun.{u2, u3} β γ _inst_2 _inst_3) e') (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.source.{u2, u3} β γ (LocalHomeomorph.toLocalEquiv.{u2, u3} β γ _inst_2 _inst_3 e')) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] [_inst_3 : TopologicalSpace.{u3} γ] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u1, u3} β γ _inst_2 _inst_3), Eq.{succ u3} (Set.{u3} γ) (LocalEquiv.target.{u2, u3} α γ (LocalHomeomorph.toLocalEquiv.{u2, u3} α γ _inst_1 _inst_3 (LocalHomeomorph.trans.{u2, u1, u3} α β γ _inst_1 _inst_2 _inst_3 e e'))) (Set.image.{u1, u3} β γ (LocalHomeomorph.toFun'.{u1, u3} β γ _inst_2 _inst_3 e') (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) (LocalEquiv.source.{u1, u3} β γ (LocalHomeomorph.toLocalEquiv.{u1, u3} β γ _inst_2 _inst_3 e')) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.trans_target'' LocalHomeomorph.trans_target''ₓ'. -/
theorem trans_target'' : (e.trans e').target = e' '' (e'.source ∩ e.target) :=
trans_source'' e'.symm e.symm
#align local_homeomorph.trans_target'' LocalHomeomorph.trans_target''
-/- warning: local_homeomorph.inv_image_trans_target -> LocalHomeomorph.inv_image_trans_target is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u2, u3} β γ _inst_2 _inst_3), Eq.{succ u2} (Set.{u2} β) (Set.image.{u3, u2} γ β (coeFn.{max (succ u3) (succ u2), max (succ u3) (succ u2)} (LocalHomeomorph.{u3, u2} γ β _inst_3 _inst_2) (fun (_x : LocalHomeomorph.{u3, u2} γ β _inst_3 _inst_2) => γ -> β) (LocalHomeomorph.hasCoeToFun.{u3, u2} γ β _inst_3 _inst_2) (LocalHomeomorph.symm.{u2, u3} β γ _inst_2 _inst_3 e')) (LocalEquiv.target.{u1, u3} α γ (LocalHomeomorph.toLocalEquiv.{u1, u3} α γ _inst_1 _inst_3 (LocalHomeomorph.trans.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 e e')))) (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.source.{u2, u3} β γ (LocalHomeomorph.toLocalEquiv.{u2, u3} β γ _inst_2 _inst_3 e')) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u3} β] [_inst_3 : TopologicalSpace.{u2} γ] (e : LocalHomeomorph.{u1, u3} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u3, u2} β γ _inst_2 _inst_3), Eq.{succ u3} (Set.{u3} β) (Set.image.{u2, u3} γ β (LocalHomeomorph.toFun'.{u2, u3} γ β _inst_3 _inst_2 (LocalHomeomorph.symm.{u3, u2} β γ _inst_2 _inst_3 e')) (LocalEquiv.target.{u1, u2} α γ (LocalHomeomorph.toLocalEquiv.{u1, u2} α γ _inst_1 _inst_3 (LocalHomeomorph.trans.{u1, u3, u2} α β γ _inst_1 _inst_2 _inst_3 e e')))) (Inter.inter.{u3} (Set.{u3} β) (Set.instInterSet.{u3} β) (LocalEquiv.source.{u3, u2} β γ (LocalHomeomorph.toLocalEquiv.{u3, u2} β γ _inst_2 _inst_3 e')) (LocalEquiv.target.{u1, u3} α β (LocalHomeomorph.toLocalEquiv.{u1, u3} α β _inst_1 _inst_2 e)))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.inv_image_trans_target LocalHomeomorph.inv_image_trans_targetₓ'. -/
theorem inv_image_trans_target : e'.symm '' (e.trans e').target = e'.source ∩ e.target :=
image_trans_source e'.symm e.symm
#align local_homeomorph.inv_image_trans_target LocalHomeomorph.inv_image_trans_target
-/- warning: local_homeomorph.trans_assoc -> LocalHomeomorph.trans_assoc is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} {δ : Type.{u4}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] [_inst_4 : TopologicalSpace.{u4} δ] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u2, u3} β γ _inst_2 _inst_3) (e'' : LocalHomeomorph.{u3, u4} γ δ _inst_3 _inst_4), Eq.{max (succ u1) (succ u4)} (LocalHomeomorph.{u1, u4} α δ _inst_1 _inst_4) (LocalHomeomorph.trans.{u1, u3, u4} α γ δ _inst_1 _inst_3 _inst_4 (LocalHomeomorph.trans.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 e e') e'') (LocalHomeomorph.trans.{u1, u2, u4} α β δ _inst_1 _inst_2 _inst_4 e (LocalHomeomorph.trans.{u2, u3, u4} β γ δ _inst_2 _inst_3 _inst_4 e' e''))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} {γ : Type.{u4}} {δ : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] [_inst_3 : TopologicalSpace.{u4} γ] [_inst_4 : TopologicalSpace.{u3} δ] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u1, u4} β γ _inst_2 _inst_3) (e'' : LocalHomeomorph.{u4, u3} γ δ _inst_3 _inst_4), Eq.{max (succ u2) (succ u3)} (LocalHomeomorph.{u2, u3} α δ _inst_1 _inst_4) (LocalHomeomorph.trans.{u2, u4, u3} α γ δ _inst_1 _inst_3 _inst_4 (LocalHomeomorph.trans.{u2, u1, u4} α β γ _inst_1 _inst_2 _inst_3 e e') e'') (LocalHomeomorph.trans.{u2, u1, u3} α β δ _inst_1 _inst_2 _inst_4 e (LocalHomeomorph.trans.{u1, u4, u3} β γ δ _inst_2 _inst_3 _inst_4 e' e''))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.trans_assoc LocalHomeomorph.trans_assocₓ'. -/
theorem trans_assoc (e'' : LocalHomeomorph γ δ) : (e.trans e').trans e'' = e.trans (e'.trans e'') :=
eq_of_localEquiv_eq <| LocalEquiv.trans_assoc e.toLocalEquiv e'.toLocalEquiv e''.toLocalEquiv
#align local_homeomorph.trans_assoc LocalHomeomorph.trans_assoc
-/- warning: local_homeomorph.trans_refl -> LocalHomeomorph.trans_refl is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (LocalHomeomorph.trans.{u1, u2, u2} α β β _inst_1 _inst_2 _inst_2 e (LocalHomeomorph.refl.{u2} β _inst_2)) e
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (LocalHomeomorph.trans.{u2, u1, u1} α β β _inst_1 _inst_2 _inst_2 e (LocalHomeomorph.refl.{u1} β _inst_2)) e
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.trans_refl LocalHomeomorph.trans_reflₓ'. -/
@[simp, mfld_simps]
theorem trans_refl : e.trans (LocalHomeomorph.refl β) = e :=
eq_of_localEquiv_eq <| LocalEquiv.trans_refl e.toLocalEquiv
#align local_homeomorph.trans_refl LocalHomeomorph.trans_refl
-/- warning: local_homeomorph.refl_trans -> LocalHomeomorph.refl_trans is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (LocalHomeomorph.trans.{u1, u1, u2} α α β _inst_1 _inst_1 _inst_2 (LocalHomeomorph.refl.{u1} α _inst_1) e) e
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (LocalHomeomorph.trans.{u2, u2, u1} α α β _inst_1 _inst_1 _inst_2 (LocalHomeomorph.refl.{u2} α _inst_1) e) e
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.refl_trans LocalHomeomorph.refl_transₓ'. -/
@[simp, mfld_simps]
theorem refl_trans : (LocalHomeomorph.refl α).trans e = e :=
eq_of_localEquiv_eq <| LocalEquiv.refl_trans e.toLocalEquiv
@@ -1683,43 +945,19 @@ theorem trans_ofSet {s : Set β} (hs : IsOpen s) : e.trans (ofSet s hs) = e.rest
#align local_homeomorph.trans_of_set LocalHomeomorph.trans_ofSet
-/
-/- warning: local_homeomorph.trans_of_set' -> LocalHomeomorph.trans_of_set' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {s : Set.{u2} β} (hs : IsOpen.{u2} β _inst_2 s), Eq.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (LocalHomeomorph.trans.{u1, u2, u2} α β β _inst_1 _inst_2 _inst_2 e (LocalHomeomorph.ofSet.{u2} β _inst_2 s hs)) (LocalHomeomorph.restr.{u1, u2} α β _inst_1 _inst_2 e (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) s)))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {s : Set.{u2} β} (hs : IsOpen.{u2} β _inst_2 s), Eq.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (LocalHomeomorph.trans.{u1, u2, u2} α β β _inst_1 _inst_2 _inst_2 e (LocalHomeomorph.ofSet.{u2} β _inst_2 s hs)) (LocalHomeomorph.restr.{u1, u2} α β _inst_1 _inst_2 e (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} α β (LocalHomeomorph.toFun'.{u1, u2} α β _inst_1 _inst_2 e) s)))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.trans_of_set' LocalHomeomorph.trans_of_set'ₓ'. -/
theorem trans_of_set' {s : Set β} (hs : IsOpen s) :
e.trans (ofSet s hs) = e.restr (e.source ∩ e ⁻¹' s) := by rw [trans_of_set, restr_source_inter]
#align local_homeomorph.trans_of_set' LocalHomeomorph.trans_of_set'
-/- warning: local_homeomorph.of_set_trans -> LocalHomeomorph.ofSet_trans is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {s : Set.{u1} α} (hs : IsOpen.{u1} α _inst_1 s), Eq.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (LocalHomeomorph.trans.{u1, u1, u2} α α β _inst_1 _inst_1 _inst_2 (LocalHomeomorph.ofSet.{u1} α _inst_1 s hs) e) (LocalHomeomorph.restr.{u1, u2} α β _inst_1 _inst_2 e s)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) {s : Set.{u2} α} (hs : IsOpen.{u2} α _inst_1 s), Eq.{max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (LocalHomeomorph.trans.{u2, u2, u1} α α β _inst_1 _inst_1 _inst_2 (LocalHomeomorph.ofSet.{u2} α _inst_1 s hs) e) (LocalHomeomorph.restr.{u2, u1} α β _inst_1 _inst_2 e s)
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.of_set_trans LocalHomeomorph.ofSet_transₓ'. -/
theorem ofSet_trans {s : Set α} (hs : IsOpen s) : (ofSet s hs).trans e = e.restr s :=
(LocalHomeomorph.ext _ _ (fun x => rfl) fun x => rfl) <| by
simp [LocalEquiv.trans_source, hs.interior_eq, inter_comm]
#align local_homeomorph.of_set_trans LocalHomeomorph.ofSet_trans
-/- warning: local_homeomorph.of_set_trans' -> LocalHomeomorph.ofSet_trans' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {s : Set.{u1} α} (hs : IsOpen.{u1} α _inst_1 s), Eq.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (LocalHomeomorph.trans.{u1, u1, u2} α α β _inst_1 _inst_1 _inst_2 (LocalHomeomorph.ofSet.{u1} α _inst_1 s hs) e) (LocalHomeomorph.restr.{u1, u2} α β _inst_1 _inst_2 e (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) s))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) {s : Set.{u2} α} (hs : IsOpen.{u2} α _inst_1 s), Eq.{max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (LocalHomeomorph.trans.{u2, u2, u1} α α β _inst_1 _inst_1 _inst_2 (LocalHomeomorph.ofSet.{u2} α _inst_1 s hs) e) (LocalHomeomorph.restr.{u2, u1} α β _inst_1 _inst_2 e (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) s))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.of_set_trans' LocalHomeomorph.ofSet_trans'ₓ'. -/
theorem ofSet_trans' {s : Set α} (hs : IsOpen s) : (ofSet s hs).trans e = e.restr (e.source ∩ s) :=
by rw [of_set_trans, restr_source_inter]
#align local_homeomorph.of_set_trans' LocalHomeomorph.ofSet_trans'
-/- warning: local_homeomorph.of_set_trans_of_set -> LocalHomeomorph.ofSet_trans_ofSet is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α} (hs : IsOpen.{u1} α _inst_1 s) {s' : Set.{u1} α} (hs' : IsOpen.{u1} α _inst_1 s'), Eq.{succ u1} (LocalHomeomorph.{u1, u1} α α _inst_1 _inst_1) (LocalHomeomorph.trans.{u1, u1, u1} α α α _inst_1 _inst_1 _inst_1 (LocalHomeomorph.ofSet.{u1} α _inst_1 s hs) (LocalHomeomorph.ofSet.{u1} α _inst_1 s' hs')) (LocalHomeomorph.ofSet.{u1} α _inst_1 (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) s s') (IsOpen.inter.{u1} α s s' _inst_1 hs hs'))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] {s : Set.{u1} α} (hs : IsOpen.{u1} α _inst_1 s) {s' : Set.{u1} α} (hs' : IsOpen.{u1} α _inst_1 s'), Eq.{succ u1} (LocalHomeomorph.{u1, u1} α α _inst_1 _inst_1) (LocalHomeomorph.trans.{u1, u1, u1} α α α _inst_1 _inst_1 _inst_1 (LocalHomeomorph.ofSet.{u1} α _inst_1 s hs) (LocalHomeomorph.ofSet.{u1} α _inst_1 s' hs')) (LocalHomeomorph.ofSet.{u1} α _inst_1 (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) s s') (IsOpen.inter.{u1} α s s' _inst_1 hs hs'))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.of_set_trans_of_set LocalHomeomorph.ofSet_trans_ofSetₓ'. -/
@[simp, mfld_simps]
theorem ofSet_trans_ofSet {s : Set α} (hs : IsOpen s) {s' : Set α} (hs' : IsOpen s') :
(ofSet s hs).trans (ofSet s' hs') = ofSet (s ∩ s') (IsOpen.inter hs hs') :=
@@ -1728,12 +966,6 @@ theorem ofSet_trans_ofSet {s : Set α} (hs : IsOpen s) {s' : Set α} (hs' : IsOp
ext <;> simp [hs'.interior_eq]
#align local_homeomorph.of_set_trans_of_set LocalHomeomorph.ofSet_trans_ofSet
-/- warning: local_homeomorph.restr_trans -> LocalHomeomorph.restr_trans is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u2, u3} β γ _inst_2 _inst_3) (s : Set.{u1} α), Eq.{max (succ u1) (succ u3)} (LocalHomeomorph.{u1, u3} α γ _inst_1 _inst_3) (LocalHomeomorph.trans.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 (LocalHomeomorph.restr.{u1, u2} α β _inst_1 _inst_2 e s) e') (LocalHomeomorph.restr.{u1, u3} α γ _inst_1 _inst_3 (LocalHomeomorph.trans.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 e e') s)
-but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u1}} {γ : Type.{u2}} [_inst_1 : TopologicalSpace.{u3} α] [_inst_2 : TopologicalSpace.{u1} β] [_inst_3 : TopologicalSpace.{u2} γ] (e : LocalHomeomorph.{u3, u1} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u1, u2} β γ _inst_2 _inst_3) (s : Set.{u3} α), Eq.{max (succ u3) (succ u2)} (LocalHomeomorph.{u3, u2} α γ _inst_1 _inst_3) (LocalHomeomorph.trans.{u3, u1, u2} α β γ _inst_1 _inst_2 _inst_3 (LocalHomeomorph.restr.{u3, u1} α β _inst_1 _inst_2 e s) e') (LocalHomeomorph.restr.{u3, u2} α γ _inst_1 _inst_3 (LocalHomeomorph.trans.{u3, u1, u2} α β γ _inst_1 _inst_2 _inst_3 e e') s)
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.restr_trans LocalHomeomorph.restr_transₓ'. -/
theorem restr_trans (s : Set α) : (e.restr s).trans e' = (e.trans e').restr s :=
eq_of_localEquiv_eq <| LocalEquiv.restr_trans e.toLocalEquiv e'.toLocalEquiv (interior s)
#align local_homeomorph.restr_trans LocalHomeomorph.restr_trans
@@ -1752,12 +984,6 @@ def transHomeomorph (e' : β ≃ₜ γ) : LocalHomeomorph α γ
#align local_homeomorph.trans_homeomorph LocalHomeomorph.transHomeomorph
-/
-/- warning: local_homeomorph.trans_equiv_eq_trans -> LocalHomeomorph.trans_equiv_eq_trans is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (e' : Homeomorph.{u2, u3} β γ _inst_2 _inst_3), Eq.{max (succ u1) (succ u3)} (LocalHomeomorph.{u1, u3} α γ _inst_1 _inst_3) (LocalHomeomorph.transHomeomorph.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 e e') (LocalHomeomorph.trans.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 e (Homeomorph.toLocalHomeomorph.{u2, u3} β γ _inst_2 _inst_3 e'))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u3} β] [_inst_3 : TopologicalSpace.{u2} γ] (e : LocalHomeomorph.{u1, u3} α β _inst_1 _inst_2) (e' : Homeomorph.{u3, u2} β γ _inst_2 _inst_3), Eq.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α γ _inst_1 _inst_3) (LocalHomeomorph.transHomeomorph.{u1, u3, u2} α β γ _inst_1 _inst_2 _inst_3 e e') (LocalHomeomorph.trans.{u1, u3, u2} α β γ _inst_1 _inst_2 _inst_3 e (Homeomorph.toLocalHomeomorph.{u3, u2} β γ _inst_2 _inst_3 e'))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.trans_equiv_eq_trans LocalHomeomorph.trans_equiv_eq_transₓ'. -/
theorem trans_equiv_eq_trans (e' : β ≃ₜ γ) : e.transHomeomorph e' = e.trans e'.toLocalHomeomorph :=
toLocalEquiv_injective <| LocalEquiv.transEquiv_eq_trans _ _
#align local_homeomorph.trans_equiv_eq_trans LocalHomeomorph.trans_equiv_eq_trans
@@ -1776,12 +1002,6 @@ def Homeomorph.transLocalHomeomorph (e : α ≃ₜ β) : LocalHomeomorph α γ
#align homeomorph.trans_local_homeomorph Homeomorph.transLocalHomeomorph
-/
-/- warning: homeomorph.trans_local_homeomorph_eq_trans -> Homeomorph.transLocalHomeomorph_eq_trans is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] (e' : LocalHomeomorph.{u2, u3} β γ _inst_2 _inst_3) (e : Homeomorph.{u1, u2} α β _inst_1 _inst_2), Eq.{max (succ u1) (succ u3)} (LocalHomeomorph.{u1, u3} α γ _inst_1 _inst_3) (Homeomorph.transLocalHomeomorph.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 e' e) (LocalHomeomorph.trans.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 (Homeomorph.toLocalHomeomorph.{u1, u2} α β _inst_1 _inst_2 e) e')
-but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u2}} {γ : Type.{u1}} [_inst_1 : TopologicalSpace.{u3} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u1} γ] (e' : LocalHomeomorph.{u2, u1} β γ _inst_2 _inst_3) (e : Homeomorph.{u3, u2} α β _inst_1 _inst_2), Eq.{max (succ u3) (succ u1)} (LocalHomeomorph.{u3, u1} α γ _inst_1 _inst_3) (Homeomorph.transLocalHomeomorph.{u3, u2, u1} α β γ _inst_1 _inst_2 _inst_3 e' e) (LocalHomeomorph.trans.{u3, u2, u1} α β γ _inst_1 _inst_2 _inst_3 (Homeomorph.toLocalHomeomorph.{u3, u2} α β _inst_1 _inst_2 e) e')
-Case conversion may be inaccurate. Consider using '#align homeomorph.trans_local_homeomorph_eq_trans Homeomorph.transLocalHomeomorph_eq_transₓ'. -/
theorem Homeomorph.transLocalHomeomorph_eq_trans (e : α ≃ₜ β) :
e.transLocalHomeomorph e' = e.toLocalHomeomorph.trans e' :=
toLocalEquiv_injective <| Equiv.transLocalEquiv_eq_trans _ _
@@ -1795,12 +1015,6 @@ def EqOnSource (e e' : LocalHomeomorph α β) : Prop :=
#align local_homeomorph.eq_on_source LocalHomeomorph.EqOnSource
-/
-/- warning: local_homeomorph.eq_on_source_iff -> LocalHomeomorph.eqOnSource_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2), Iff (LocalHomeomorph.EqOnSource.{u1, u2} α β _inst_1 _inst_2 e e') (LocalEquiv.EqOnSource.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e) (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e'))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2), Iff (LocalHomeomorph.EqOnSource.{u2, u1} α β _inst_1 _inst_2 e e') (LocalEquiv.EqOnSource.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e) (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e'))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.eq_on_source_iff LocalHomeomorph.eqOnSource_iffₓ'. -/
theorem eqOnSource_iff (e e' : LocalHomeomorph α β) :
EqOnSource e e' ↔ LocalEquiv.EqOnSource e.toLocalEquiv e'.toLocalEquiv :=
Iff.rfl
@@ -1816,102 +1030,48 @@ instance : Setoid (LocalHomeomorph α β)
(@LocalEquiv.eqOnSourceSetoid α β).iseqv.2.2 ((eqOnSource_iff e e').1 h)
((eqOnSource_iff e' e'').1 h')⟩
-/- warning: local_homeomorph.eq_on_source_refl -> LocalHomeomorph.eqOnSource_refl is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2), HasEquivₓ.Equiv.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (setoidHasEquiv.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (LocalHomeomorph.setoid.{u1, u2} α β _inst_1 _inst_2)) e e
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2), HasEquiv.Equiv.{max (succ u2) (succ u1), 0} (LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (instHasEquiv.{max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (LocalHomeomorph.eqOnSourceSetoid.{u2, u1} α β _inst_1 _inst_2)) e e
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.eq_on_source_refl LocalHomeomorph.eqOnSource_reflₓ'. -/
theorem eqOnSource_refl : e ≈ e :=
Setoid.refl _
#align local_homeomorph.eq_on_source_refl LocalHomeomorph.eqOnSource_refl
-/- warning: local_homeomorph.eq_on_source.symm' -> LocalHomeomorph.EqOnSource.symm' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {e' : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2}, (HasEquivₓ.Equiv.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (setoidHasEquiv.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (LocalHomeomorph.setoid.{u1, u2} α β _inst_1 _inst_2)) e e') -> (HasEquivₓ.Equiv.{max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (setoidHasEquiv.{max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.setoid.{u2, u1} β α _inst_2 _inst_1)) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e'))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {e' : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2}, (HasEquiv.Equiv.{max (succ u2) (succ u1), 0} (LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (instHasEquiv.{max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (LocalHomeomorph.eqOnSourceSetoid.{u2, u1} α β _inst_1 _inst_2)) e e') -> (HasEquiv.Equiv.{max (succ u2) (succ u1), 0} (LocalHomeomorph.{u1, u2} β α _inst_2 _inst_1) (instHasEquiv.{max (succ u2) (succ u1)} (LocalHomeomorph.{u1, u2} β α _inst_2 _inst_1) (LocalHomeomorph.eqOnSourceSetoid.{u1, u2} β α _inst_2 _inst_1)) (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e) (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e'))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.eq_on_source.symm' LocalHomeomorph.EqOnSource.symm'ₓ'. -/
/-- If two local homeomorphisms are equivalent, so are their inverses -/
theorem EqOnSource.symm' {e e' : LocalHomeomorph α β} (h : e ≈ e') : e.symm ≈ e'.symm :=
LocalEquiv.EqOnSource.symm' h
#align local_homeomorph.eq_on_source.symm' LocalHomeomorph.EqOnSource.symm'
-/- warning: local_homeomorph.eq_on_source.source_eq -> LocalHomeomorph.EqOnSource.source_eq is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {e' : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2}, (HasEquivₓ.Equiv.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (setoidHasEquiv.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (LocalHomeomorph.setoid.{u1, u2} α β _inst_1 _inst_2)) e e') -> (Eq.{succ u1} (Set.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e')))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {e' : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2}, (HasEquiv.Equiv.{max (succ u2) (succ u1), 0} (LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (instHasEquiv.{max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (LocalHomeomorph.eqOnSourceSetoid.{u2, u1} α β _inst_1 _inst_2)) e e') -> (Eq.{succ u2} (Set.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e')))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.eq_on_source.source_eq LocalHomeomorph.EqOnSource.source_eqₓ'. -/
/-- Two equivalent local homeomorphisms have the same source -/
theorem EqOnSource.source_eq {e e' : LocalHomeomorph α β} (h : e ≈ e') : e.source = e'.source :=
h.1
#align local_homeomorph.eq_on_source.source_eq LocalHomeomorph.EqOnSource.source_eq
-/- warning: local_homeomorph.eq_on_source.target_eq -> LocalHomeomorph.EqOnSource.target_eq is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {e' : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2}, (HasEquivₓ.Equiv.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (setoidHasEquiv.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (LocalHomeomorph.setoid.{u1, u2} α β _inst_1 _inst_2)) e e') -> (Eq.{succ u2} (Set.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e')))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {e' : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2}, (HasEquiv.Equiv.{max (succ u2) (succ u1), 0} (LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (instHasEquiv.{max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (LocalHomeomorph.eqOnSourceSetoid.{u2, u1} α β _inst_1 _inst_2)) e e') -> (Eq.{succ u1} (Set.{u1} β) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e')))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.eq_on_source.target_eq LocalHomeomorph.EqOnSource.target_eqₓ'. -/
/-- Two equivalent local homeomorphisms have the same target -/
theorem EqOnSource.target_eq {e e' : LocalHomeomorph α β} (h : e ≈ e') : e.target = e'.target :=
h.symm'.1
#align local_homeomorph.eq_on_source.target_eq LocalHomeomorph.EqOnSource.target_eq
-/- warning: local_homeomorph.eq_on_source.eq_on -> LocalHomeomorph.EqOnSource.eqOn is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {e' : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2}, (HasEquivₓ.Equiv.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (setoidHasEquiv.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (LocalHomeomorph.setoid.{u1, u2} α β _inst_1 _inst_2)) e e') -> (Set.EqOn.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e') (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {e' : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2}, (HasEquiv.Equiv.{max (succ u2) (succ u1), 0} (LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (instHasEquiv.{max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (LocalHomeomorph.eqOnSourceSetoid.{u2, u1} α β _inst_1 _inst_2)) e e') -> (Set.EqOn.{u2, u1} α β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e') (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.eq_on_source.eq_on LocalHomeomorph.EqOnSource.eqOnₓ'. -/
/-- Two equivalent local homeomorphisms have coinciding `to_fun` on the source -/
theorem EqOnSource.eqOn {e e' : LocalHomeomorph α β} (h : e ≈ e') : EqOn e e' e.source :=
h.2
#align local_homeomorph.eq_on_source.eq_on LocalHomeomorph.EqOnSource.eqOn
-/- warning: local_homeomorph.eq_on_source.symm_eq_on_target -> LocalHomeomorph.EqOnSource.symm_eqOn_target is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {e' : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2}, (HasEquivₓ.Equiv.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (setoidHasEquiv.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (LocalHomeomorph.setoid.{u1, u2} α β _inst_1 _inst_2)) e e') -> (Set.EqOn.{u2, u1} β α (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e)) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e')) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {e' : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2}, (HasEquiv.Equiv.{max (succ u2) (succ u1), 0} (LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (instHasEquiv.{max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (LocalHomeomorph.eqOnSourceSetoid.{u2, u1} α β _inst_1 _inst_2)) e e') -> (Set.EqOn.{u1, u2} β α (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e)) (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e')) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.eq_on_source.symm_eq_on_target LocalHomeomorph.EqOnSource.symm_eqOn_targetₓ'. -/
/-- Two equivalent local homeomorphisms have coinciding `inv_fun` on the target -/
theorem EqOnSource.symm_eqOn_target {e e' : LocalHomeomorph α β} (h : e ≈ e') :
EqOn e.symm e'.symm e.target :=
h.symm'.2
#align local_homeomorph.eq_on_source.symm_eq_on_target LocalHomeomorph.EqOnSource.symm_eqOn_target
-/- warning: local_homeomorph.eq_on_source.trans' -> LocalHomeomorph.EqOnSource.trans' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {e' : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {f : LocalHomeomorph.{u2, u3} β γ _inst_2 _inst_3} {f' : LocalHomeomorph.{u2, u3} β γ _inst_2 _inst_3}, (HasEquivₓ.Equiv.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (setoidHasEquiv.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (LocalHomeomorph.setoid.{u1, u2} α β _inst_1 _inst_2)) e e') -> (HasEquivₓ.Equiv.{max (succ u2) (succ u3)} (LocalHomeomorph.{u2, u3} β γ _inst_2 _inst_3) (setoidHasEquiv.{max (succ u2) (succ u3)} (LocalHomeomorph.{u2, u3} β γ _inst_2 _inst_3) (LocalHomeomorph.setoid.{u2, u3} β γ _inst_2 _inst_3)) f f') -> (HasEquivₓ.Equiv.{max (succ u1) (succ u3)} (LocalHomeomorph.{u1, u3} α γ _inst_1 _inst_3) (setoidHasEquiv.{max (succ u1) (succ u3)} (LocalHomeomorph.{u1, u3} α γ _inst_1 _inst_3) (LocalHomeomorph.setoid.{u1, u3} α γ _inst_1 _inst_3)) (LocalHomeomorph.trans.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 e f) (LocalHomeomorph.trans.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 e' f'))
-but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u2}} {γ : Type.{u1}} [_inst_1 : TopologicalSpace.{u3} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u1} γ] {e : LocalHomeomorph.{u3, u2} α β _inst_1 _inst_2} {e' : LocalHomeomorph.{u3, u2} α β _inst_1 _inst_2} {f : LocalHomeomorph.{u2, u1} β γ _inst_2 _inst_3} {f' : LocalHomeomorph.{u2, u1} β γ _inst_2 _inst_3}, (HasEquiv.Equiv.{max (succ u3) (succ u2), 0} (LocalHomeomorph.{u3, u2} α β _inst_1 _inst_2) (instHasEquiv.{max (succ u3) (succ u2)} (LocalHomeomorph.{u3, u2} α β _inst_1 _inst_2) (LocalHomeomorph.eqOnSourceSetoid.{u3, u2} α β _inst_1 _inst_2)) e e') -> (HasEquiv.Equiv.{max (succ u2) (succ u1), 0} (LocalHomeomorph.{u2, u1} β γ _inst_2 _inst_3) (instHasEquiv.{max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β γ _inst_2 _inst_3) (LocalHomeomorph.eqOnSourceSetoid.{u2, u1} β γ _inst_2 _inst_3)) f f') -> (HasEquiv.Equiv.{max (succ u3) (succ u1), 0} (LocalHomeomorph.{u3, u1} α γ _inst_1 _inst_3) (instHasEquiv.{max (succ u3) (succ u1)} (LocalHomeomorph.{u3, u1} α γ _inst_1 _inst_3) (LocalHomeomorph.eqOnSourceSetoid.{u3, u1} α γ _inst_1 _inst_3)) (LocalHomeomorph.trans.{u3, u2, u1} α β γ _inst_1 _inst_2 _inst_3 e f) (LocalHomeomorph.trans.{u3, u2, u1} α β γ _inst_1 _inst_2 _inst_3 e' f'))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.eq_on_source.trans' LocalHomeomorph.EqOnSource.trans'ₓ'. -/
/-- Composition of local homeomorphisms respects equivalence -/
theorem EqOnSource.trans' {e e' : LocalHomeomorph α β} {f f' : LocalHomeomorph β γ} (he : e ≈ e')
(hf : f ≈ f') : e.trans f ≈ e'.trans f' :=
LocalEquiv.EqOnSource.trans' he hf
#align local_homeomorph.eq_on_source.trans' LocalHomeomorph.EqOnSource.trans'
-/- warning: local_homeomorph.eq_on_source.restr -> LocalHomeomorph.EqOnSource.restr is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {e' : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2}, (HasEquivₓ.Equiv.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (setoidHasEquiv.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (LocalHomeomorph.setoid.{u1, u2} α β _inst_1 _inst_2)) e e') -> (forall (s : Set.{u1} α), HasEquivₓ.Equiv.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (setoidHasEquiv.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (LocalHomeomorph.setoid.{u1, u2} α β _inst_1 _inst_2)) (LocalHomeomorph.restr.{u1, u2} α β _inst_1 _inst_2 e s) (LocalHomeomorph.restr.{u1, u2} α β _inst_1 _inst_2 e' s))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {e' : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2}, (HasEquiv.Equiv.{max (succ u2) (succ u1), 0} (LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (instHasEquiv.{max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (LocalHomeomorph.eqOnSourceSetoid.{u2, u1} α β _inst_1 _inst_2)) e e') -> (forall (s : Set.{u2} α), HasEquiv.Equiv.{max (succ u2) (succ u1), 0} (LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (instHasEquiv.{max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (LocalHomeomorph.eqOnSourceSetoid.{u2, u1} α β _inst_1 _inst_2)) (LocalHomeomorph.restr.{u2, u1} α β _inst_1 _inst_2 e s) (LocalHomeomorph.restr.{u2, u1} α β _inst_1 _inst_2 e' s))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.eq_on_source.restr LocalHomeomorph.EqOnSource.restrₓ'. -/
/-- Restriction of local homeomorphisms respects equivalence -/
theorem EqOnSource.restr {e e' : LocalHomeomorph α β} (he : e ≈ e') (s : Set α) :
e.restr s ≈ e'.restr s :=
LocalEquiv.EqOnSource.restr he _
#align local_homeomorph.eq_on_source.restr LocalHomeomorph.EqOnSource.restr
-/- warning: local_homeomorph.set.eq_on.restr_eq_on_source -> LocalHomeomorph.Set.EqOn.restr_eqOn_source is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {e' : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2}, (Set.EqOn.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e') (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e')))) -> (HasEquivₓ.Equiv.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (setoidHasEquiv.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (LocalHomeomorph.setoid.{u1, u2} α β _inst_1 _inst_2)) (LocalHomeomorph.restr.{u1, u2} α β _inst_1 _inst_2 e (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e'))) (LocalHomeomorph.restr.{u1, u2} α β _inst_1 _inst_2 e' (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {e' : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2}, (Set.EqOn.{u2, u1} α β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e') (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e')))) -> (HasEquiv.Equiv.{max (succ u2) (succ u1), 0} (LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (instHasEquiv.{max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (LocalHomeomorph.eqOnSourceSetoid.{u2, u1} α β _inst_1 _inst_2)) (LocalHomeomorph.restr.{u2, u1} α β _inst_1 _inst_2 e (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e'))) (LocalHomeomorph.restr.{u2, u1} α β _inst_1 _inst_2 e' (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.set.eq_on.restr_eq_on_source LocalHomeomorph.Set.EqOn.restr_eqOn_sourceₓ'. -/
theorem Set.EqOn.restr_eqOn_source {e e' : LocalHomeomorph α β}
(h : EqOn e e' (e.source ∩ e'.source)) : e.restr e'.source ≈ e'.restr e.source :=
by
@@ -1923,34 +1083,16 @@ theorem Set.EqOn.restr_eqOn_source {e e' : LocalHomeomorph α β}
refine' (eq_on.trans _ h).trans _ <;> simp only [mfld_simps]
#align local_homeomorph.set.eq_on.restr_eq_on_source LocalHomeomorph.Set.EqOn.restr_eqOn_source
-/- warning: local_homeomorph.trans_self_symm -> LocalHomeomorph.trans_self_symm is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2), HasEquivₓ.Equiv.{succ u1} (LocalHomeomorph.{u1, u1} α α _inst_1 _inst_1) (setoidHasEquiv.{succ u1} (LocalHomeomorph.{u1, u1} α α _inst_1 _inst_1) (LocalHomeomorph.setoid.{u1, u1} α α _inst_1 _inst_1)) (LocalHomeomorph.trans.{u1, u2, u1} α β α _inst_1 _inst_2 _inst_1 e (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e)) (LocalHomeomorph.ofSet.{u1} α _inst_1 (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (LocalHomeomorph.open_source.{u1, u2} α β _inst_1 _inst_2 e))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2), HasEquiv.Equiv.{succ u2, 0} (LocalHomeomorph.{u2, u2} α α _inst_1 _inst_1) (instHasEquiv.{succ u2} (LocalHomeomorph.{u2, u2} α α _inst_1 _inst_1) (LocalHomeomorph.eqOnSourceSetoid.{u2, u2} α α _inst_1 _inst_1)) (LocalHomeomorph.trans.{u2, u1, u2} α β α _inst_1 _inst_2 _inst_1 e (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e)) (LocalHomeomorph.ofSet.{u2} α _inst_1 (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (LocalHomeomorph.open_source.{u2, u1} α β _inst_1 _inst_2 e))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.trans_self_symm LocalHomeomorph.trans_self_symmₓ'. -/
/-- Composition of a local homeomorphism and its inverse is equivalent to the restriction of the
identity to the source -/
theorem trans_self_symm : e.trans e.symm ≈ LocalHomeomorph.ofSet e.source e.open_source :=
LocalEquiv.trans_self_symm _
#align local_homeomorph.trans_self_symm LocalHomeomorph.trans_self_symm
-/- warning: local_homeomorph.trans_symm_self -> LocalHomeomorph.trans_symm_self is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2), HasEquivₓ.Equiv.{succ u2} (LocalHomeomorph.{u2, u2} β β _inst_2 _inst_2) (setoidHasEquiv.{succ u2} (LocalHomeomorph.{u2, u2} β β _inst_2 _inst_2) (LocalHomeomorph.setoid.{u2, u2} β β _inst_2 _inst_2)) (LocalHomeomorph.trans.{u2, u1, u2} β α β _inst_2 _inst_1 _inst_2 (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e) e) (LocalHomeomorph.ofSet.{u2} β _inst_2 (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (LocalHomeomorph.open_target.{u1, u2} α β _inst_1 _inst_2 e))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2), HasEquiv.Equiv.{succ u2, 0} (LocalHomeomorph.{u2, u2} β β _inst_2 _inst_2) (instHasEquiv.{succ u2} (LocalHomeomorph.{u2, u2} β β _inst_2 _inst_2) (LocalHomeomorph.eqOnSourceSetoid.{u2, u2} β β _inst_2 _inst_2)) (LocalHomeomorph.trans.{u2, u1, u2} β α β _inst_2 _inst_1 _inst_2 (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e) e) (LocalHomeomorph.ofSet.{u2} β _inst_2 (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (LocalHomeomorph.open_target.{u1, u2} α β _inst_1 _inst_2 e))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.trans_symm_self LocalHomeomorph.trans_symm_selfₓ'. -/
theorem trans_symm_self : e.symm.trans e ≈ LocalHomeomorph.ofSet e.target e.open_target :=
e.symm.trans_self_symm
#align local_homeomorph.trans_symm_self LocalHomeomorph.trans_symm_self
-/- warning: local_homeomorph.eq_of_eq_on_source_univ -> LocalHomeomorph.eq_of_eq_on_source_univ is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {e' : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2}, (HasEquivₓ.Equiv.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (setoidHasEquiv.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (LocalHomeomorph.setoid.{u1, u2} α β _inst_1 _inst_2)) e e') -> (Eq.{succ u1} (Set.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.univ.{u1} α)) -> (Eq.{succ u2} (Set.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.univ.{u2} β)) -> (Eq.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) e e')
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {e' : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2}, (HasEquiv.Equiv.{max (succ u2) (succ u1), 0} (LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (instHasEquiv.{max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (LocalHomeomorph.eqOnSourceSetoid.{u2, u1} α β _inst_1 _inst_2)) e e') -> (Eq.{succ u2} (Set.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (Set.univ.{u2} α)) -> (Eq.{succ u1} (Set.{u1} β) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (Set.univ.{u1} β)) -> (Eq.{max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) e e')
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.eq_of_eq_on_source_univ LocalHomeomorph.eq_of_eq_on_source_univₓ'. -/
theorem eq_of_eq_on_source_univ {e e' : LocalHomeomorph α β} (h : e ≈ e') (s : e.source = univ)
(t : e.target = univ) : e = e' :=
eq_of_localEquiv_eq <| LocalEquiv.eq_of_eq_on_source_univ _ _ h s t
@@ -1958,12 +1100,6 @@ theorem eq_of_eq_on_source_univ {e e' : LocalHomeomorph α β} (h : e ≈ e') (s
section Prod
-/- warning: local_homeomorph.prod -> LocalHomeomorph.prod is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} {δ : Type.{u4}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] [_inst_4 : TopologicalSpace.{u4} δ], (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) -> (LocalHomeomorph.{u3, u4} γ δ _inst_3 _inst_4) -> (LocalHomeomorph.{max u1 u3, max u2 u4} (Prod.{u1, u3} α γ) (Prod.{u2, u4} β δ) (Prod.topologicalSpace.{u1, u3} α γ _inst_1 _inst_3) (Prod.topologicalSpace.{u2, u4} β δ _inst_2 _inst_4))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} {δ : Type.{u4}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] [_inst_4 : TopologicalSpace.{u4} δ], (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) -> (LocalHomeomorph.{u3, u4} γ δ _inst_3 _inst_4) -> (LocalHomeomorph.{max u3 u1, max u4 u2} (Prod.{u1, u3} α γ) (Prod.{u2, u4} β δ) (instTopologicalSpaceProd.{u1, u3} α γ _inst_1 _inst_3) (instTopologicalSpaceProd.{u2, u4} β δ _inst_2 _inst_4))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.prod LocalHomeomorph.prodₓ'. -/
/-- The product of two local homeomorphisms, as a local homeomorphism on the product space. -/
@[simps (config := mfld_cfg) toLocalEquiv apply,
simps (config := { attrs := [] }) source target symm_apply]
@@ -1976,36 +1112,18 @@ def prod (e : LocalHomeomorph α β) (e' : LocalHomeomorph γ δ) : LocalHomeomo
toLocalEquiv := e.toLocalEquiv.Prod e'.toLocalEquiv
#align local_homeomorph.prod LocalHomeomorph.prod
-/- warning: local_homeomorph.prod_symm -> LocalHomeomorph.prod_symm is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} {δ : Type.{u4}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] [_inst_4 : TopologicalSpace.{u4} δ] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u3, u4} γ δ _inst_3 _inst_4), Eq.{max (succ (max u2 u4)) (succ (max u1 u3))} (LocalHomeomorph.{max u2 u4, max u1 u3} (Prod.{u2, u4} β δ) (Prod.{u1, u3} α γ) (Prod.topologicalSpace.{u2, u4} β δ _inst_2 _inst_4) (Prod.topologicalSpace.{u1, u3} α γ _inst_1 _inst_3)) (LocalHomeomorph.symm.{max u1 u3, max u2 u4} (Prod.{u1, u3} α γ) (Prod.{u2, u4} β δ) (Prod.topologicalSpace.{u1, u3} α γ _inst_1 _inst_3) (Prod.topologicalSpace.{u2, u4} β δ _inst_2 _inst_4) (LocalHomeomorph.prod.{u1, u2, u3, u4} α β γ δ _inst_1 _inst_2 _inst_3 _inst_4 e e')) (LocalHomeomorph.prod.{u2, u1, u4, u3} β α δ γ _inst_2 _inst_1 _inst_4 _inst_3 (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e) (LocalHomeomorph.symm.{u3, u4} γ δ _inst_3 _inst_4 e'))
-but is expected to have type
- forall {α : Type.{u4}} {β : Type.{u3}} {γ : Type.{u2}} {δ : Type.{u1}} [_inst_1 : TopologicalSpace.{u4} α] [_inst_2 : TopologicalSpace.{u3} β] [_inst_3 : TopologicalSpace.{u2} γ] [_inst_4 : TopologicalSpace.{u1} δ] (e : LocalHomeomorph.{u4, u3} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u2, u1} γ δ _inst_3 _inst_4), Eq.{max (max (max (succ u4) (succ u3)) (succ u2)) (succ u1)} (LocalHomeomorph.{max u3 u1, max u4 u2} (Prod.{u3, u1} β δ) (Prod.{u4, u2} α γ) (instTopologicalSpaceProd.{u3, u1} β δ _inst_2 _inst_4) (instTopologicalSpaceProd.{u4, u2} α γ _inst_1 _inst_3)) (LocalHomeomorph.symm.{max u4 u2, max u3 u1} (Prod.{u4, u2} α γ) (Prod.{u3, u1} β δ) (instTopologicalSpaceProd.{u4, u2} α γ _inst_1 _inst_3) (instTopologicalSpaceProd.{u3, u1} β δ _inst_2 _inst_4) (LocalHomeomorph.prod.{u4, u3, u2, u1} α β γ δ _inst_1 _inst_2 _inst_3 _inst_4 e e')) (LocalHomeomorph.prod.{u3, u4, u1, u2} β α δ γ _inst_2 _inst_1 _inst_4 _inst_3 (LocalHomeomorph.symm.{u4, u3} α β _inst_1 _inst_2 e) (LocalHomeomorph.symm.{u2, u1} γ δ _inst_3 _inst_4 e'))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.prod_symm LocalHomeomorph.prod_symmₓ'. -/
@[simp, mfld_simps]
theorem prod_symm (e : LocalHomeomorph α β) (e' : LocalHomeomorph γ δ) :
(e.Prod e').symm = e.symm.Prod e'.symm :=
rfl
#align local_homeomorph.prod_symm LocalHomeomorph.prod_symm
-/- warning: local_homeomorph.refl_prod_refl -> LocalHomeomorph.refl_prod_refl is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_5 : TopologicalSpace.{u1} α] [_inst_6 : TopologicalSpace.{u2} β], Eq.{succ (max u1 u2)} (LocalHomeomorph.{max u1 u2, max u1 u2} (Prod.{u1, u2} α β) (Prod.{u1, u2} α β) (Prod.topologicalSpace.{u1, u2} α β _inst_5 _inst_6) (Prod.topologicalSpace.{u1, u2} α β _inst_5 _inst_6)) (LocalHomeomorph.prod.{u1, u1, u2, u2} α α β β _inst_5 _inst_5 _inst_6 _inst_6 (LocalHomeomorph.refl.{u1} α _inst_5) (LocalHomeomorph.refl.{u2} β _inst_6)) (LocalHomeomorph.refl.{max u1 u2} (Prod.{u1, u2} α β) (Prod.topologicalSpace.{u1, u2} α β _inst_5 _inst_6))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_5 : TopologicalSpace.{u2} α] [_inst_6 : TopologicalSpace.{u1} β], Eq.{max (succ u2) (succ u1)} (LocalHomeomorph.{max u1 u2, max u1 u2} (Prod.{u2, u1} α β) (Prod.{u2, u1} α β) (instTopologicalSpaceProd.{u2, u1} α β _inst_5 _inst_6) (instTopologicalSpaceProd.{u2, u1} α β _inst_5 _inst_6)) (LocalHomeomorph.prod.{u2, u2, u1, u1} α α β β _inst_5 _inst_5 _inst_6 _inst_6 (LocalHomeomorph.refl.{u2} α _inst_5) (LocalHomeomorph.refl.{u1} β _inst_6)) (LocalHomeomorph.refl.{max u1 u2} (Prod.{u2, u1} α β) (instTopologicalSpaceProd.{u2, u1} α β _inst_5 _inst_6))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.refl_prod_refl LocalHomeomorph.refl_prod_reflₓ'. -/
@[simp]
theorem refl_prod_refl {α β : Type _} [TopologicalSpace α] [TopologicalSpace β] :
(LocalHomeomorph.refl α).Prod (LocalHomeomorph.refl β) = LocalHomeomorph.refl (α × β) := by
ext1 ⟨x, y⟩; · rfl; · rintro ⟨x, y⟩; rfl; exact univ_prod_univ
#align local_homeomorph.refl_prod_refl LocalHomeomorph.refl_prod_refl
-/- warning: local_homeomorph.prod_trans -> LocalHomeomorph.prod_trans is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} {δ : Type.{u4}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] [_inst_4 : TopologicalSpace.{u4} δ] {η : Type.{u5}} {ε : Type.{u6}} [_inst_5 : TopologicalSpace.{u5} η] [_inst_6 : TopologicalSpace.{u6} ε] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (f : LocalHomeomorph.{u2, u3} β γ _inst_2 _inst_3) (e' : LocalHomeomorph.{u4, u5} δ η _inst_4 _inst_5) (f' : LocalHomeomorph.{u5, u6} η ε _inst_5 _inst_6), Eq.{max (succ (max u1 u4)) (succ (max u3 u6))} (LocalHomeomorph.{max u1 u4, max u3 u6} (Prod.{u1, u4} α δ) (Prod.{u3, u6} γ ε) (Prod.topologicalSpace.{u1, u4} α δ _inst_1 _inst_4) (Prod.topologicalSpace.{u3, u6} γ ε _inst_3 _inst_6)) (LocalHomeomorph.trans.{max u1 u4, max u2 u5, max u3 u6} (Prod.{u1, u4} α δ) (Prod.{u2, u5} β η) (Prod.{u3, u6} γ ε) (Prod.topologicalSpace.{u1, u4} α δ _inst_1 _inst_4) (Prod.topologicalSpace.{u2, u5} β η _inst_2 _inst_5) (Prod.topologicalSpace.{u3, u6} γ ε _inst_3 _inst_6) (LocalHomeomorph.prod.{u1, u2, u4, u5} α β δ η _inst_1 _inst_2 _inst_4 _inst_5 e e') (LocalHomeomorph.prod.{u2, u3, u5, u6} β γ η ε _inst_2 _inst_3 _inst_5 _inst_6 f f')) (LocalHomeomorph.prod.{u1, u3, u4, u6} α γ δ ε _inst_1 _inst_3 _inst_4 _inst_6 (LocalHomeomorph.trans.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 e f) (LocalHomeomorph.trans.{u4, u5, u6} δ η ε _inst_4 _inst_5 _inst_6 e' f'))
-but is expected to have type
- forall {α : Type.{u4}} {β : Type.{u3}} {γ : Type.{u2}} {δ : Type.{u1}} [_inst_1 : TopologicalSpace.{u4} α] [_inst_2 : TopologicalSpace.{u3} β] [_inst_3 : TopologicalSpace.{u2} γ] [_inst_4 : TopologicalSpace.{u1} δ] {η : Type.{u6}} {ε : Type.{u5}} [_inst_5 : TopologicalSpace.{u6} η] [_inst_6 : TopologicalSpace.{u5} ε] (e : LocalHomeomorph.{u4, u3} α β _inst_1 _inst_2) (f : LocalHomeomorph.{u3, u2} β γ _inst_2 _inst_3) (e' : LocalHomeomorph.{u1, u6} δ η _inst_4 _inst_5) (f' : LocalHomeomorph.{u6, u5} η ε _inst_5 _inst_6), Eq.{max (max (max (succ u4) (succ u2)) (succ u1)) (succ u5)} (LocalHomeomorph.{max u4 u1, max u2 u5} (Prod.{u4, u1} α δ) (Prod.{u2, u5} γ ε) (instTopologicalSpaceProd.{u4, u1} α δ _inst_1 _inst_4) (instTopologicalSpaceProd.{u2, u5} γ ε _inst_3 _inst_6)) (LocalHomeomorph.trans.{max u4 u1, max u3 u6, max u2 u5} (Prod.{u4, u1} α δ) (Prod.{u3, u6} β η) (Prod.{u2, u5} γ ε) (instTopologicalSpaceProd.{u4, u1} α δ _inst_1 _inst_4) (instTopologicalSpaceProd.{u3, u6} β η _inst_2 _inst_5) (instTopologicalSpaceProd.{u2, u5} γ ε _inst_3 _inst_6) (LocalHomeomorph.prod.{u4, u3, u1, u6} α β δ η _inst_1 _inst_2 _inst_4 _inst_5 e e') (LocalHomeomorph.prod.{u3, u2, u6, u5} β γ η ε _inst_2 _inst_3 _inst_5 _inst_6 f f')) (LocalHomeomorph.prod.{u4, u2, u1, u5} α γ δ ε _inst_1 _inst_3 _inst_4 _inst_6 (LocalHomeomorph.trans.{u4, u3, u2} α β γ _inst_1 _inst_2 _inst_3 e f) (LocalHomeomorph.trans.{u1, u6, u5} δ η ε _inst_4 _inst_5 _inst_6 e' f'))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.prod_trans LocalHomeomorph.prod_transₓ'. -/
@[simp, mfld_simps]
theorem prod_trans {η : Type _} {ε : Type _} [TopologicalSpace η] [TopologicalSpace ε]
(e : LocalHomeomorph α β) (f : LocalHomeomorph β γ) (e' : LocalHomeomorph δ η)
@@ -2014,12 +1132,6 @@ theorem prod_trans {η : Type _} {ε : Type _} [TopologicalSpace η] [Topologica
dsimp only [trans_to_local_equiv, prod_to_local_equiv] <;> apply LocalEquiv.prod_trans
#align local_homeomorph.prod_trans LocalHomeomorph.prod_trans
-/- warning: local_homeomorph.prod_eq_prod_of_nonempty -> LocalHomeomorph.prod_eq_prod_of_nonempty is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} {δ : Type.{u4}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] [_inst_4 : TopologicalSpace.{u4} δ] {e₁ : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {e₁' : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {e₂ : LocalHomeomorph.{u3, u4} γ δ _inst_3 _inst_4} {e₂' : LocalHomeomorph.{u3, u4} γ δ _inst_3 _inst_4}, (Set.Nonempty.{max u1 u3} (Prod.{u1, u3} α γ) (LocalEquiv.source.{max u1 u3, max u2 u4} (Prod.{u1, u3} α γ) (Prod.{u2, u4} β δ) (LocalHomeomorph.toLocalEquiv.{max u1 u3, max u2 u4} (Prod.{u1, u3} α γ) (Prod.{u2, u4} β δ) (Prod.topologicalSpace.{u1, u3} α γ _inst_1 _inst_3) (Prod.topologicalSpace.{u2, u4} β δ _inst_2 _inst_4) (LocalHomeomorph.prod.{u1, u2, u3, u4} α β γ δ _inst_1 _inst_2 _inst_3 _inst_4 e₁ e₂)))) -> (Iff (Eq.{max (succ (max u1 u3)) (succ (max u2 u4))} (LocalHomeomorph.{max u1 u3, max u2 u4} (Prod.{u1, u3} α γ) (Prod.{u2, u4} β δ) (Prod.topologicalSpace.{u1, u3} α γ _inst_1 _inst_3) (Prod.topologicalSpace.{u2, u4} β δ _inst_2 _inst_4)) (LocalHomeomorph.prod.{u1, u2, u3, u4} α β γ δ _inst_1 _inst_2 _inst_3 _inst_4 e₁ e₂) (LocalHomeomorph.prod.{u1, u2, u3, u4} α β γ δ _inst_1 _inst_2 _inst_3 _inst_4 e₁' e₂')) (And (Eq.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) e₁ e₁') (Eq.{max (succ u3) (succ u4)} (LocalHomeomorph.{u3, u4} γ δ _inst_3 _inst_4) e₂ e₂')))
-but is expected to have type
- forall {α : Type.{u4}} {β : Type.{u3}} {γ : Type.{u2}} {δ : Type.{u1}} [_inst_1 : TopologicalSpace.{u4} α] [_inst_2 : TopologicalSpace.{u3} β] [_inst_3 : TopologicalSpace.{u2} γ] [_inst_4 : TopologicalSpace.{u1} δ] {e₁ : LocalHomeomorph.{u4, u3} α β _inst_1 _inst_2} {e₁' : LocalHomeomorph.{u4, u3} α β _inst_1 _inst_2} {e₂ : LocalHomeomorph.{u2, u1} γ δ _inst_3 _inst_4} {e₂' : LocalHomeomorph.{u2, u1} γ δ _inst_3 _inst_4}, (Set.Nonempty.{max u4 u2} (Prod.{u4, u2} α γ) (LocalEquiv.source.{max u4 u2, max u3 u1} (Prod.{u4, u2} α γ) (Prod.{u3, u1} β δ) (LocalHomeomorph.toLocalEquiv.{max u4 u2, max u3 u1} (Prod.{u4, u2} α γ) (Prod.{u3, u1} β δ) (instTopologicalSpaceProd.{u4, u2} α γ _inst_1 _inst_3) (instTopologicalSpaceProd.{u3, u1} β δ _inst_2 _inst_4) (LocalHomeomorph.prod.{u4, u3, u2, u1} α β γ δ _inst_1 _inst_2 _inst_3 _inst_4 e₁ e₂)))) -> (Iff (Eq.{max (max (max (succ u4) (succ u3)) (succ u2)) (succ u1)} (LocalHomeomorph.{max u2 u4, max u1 u3} (Prod.{u4, u2} α γ) (Prod.{u3, u1} β δ) (instTopologicalSpaceProd.{u4, u2} α γ _inst_1 _inst_3) (instTopologicalSpaceProd.{u3, u1} β δ _inst_2 _inst_4)) (LocalHomeomorph.prod.{u4, u3, u2, u1} α β γ δ _inst_1 _inst_2 _inst_3 _inst_4 e₁ e₂) (LocalHomeomorph.prod.{u4, u3, u2, u1} α β γ δ _inst_1 _inst_2 _inst_3 _inst_4 e₁' e₂')) (And (Eq.{max (succ u4) (succ u3)} (LocalHomeomorph.{u4, u3} α β _inst_1 _inst_2) e₁ e₁') (Eq.{max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} γ δ _inst_3 _inst_4) e₂ e₂')))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.prod_eq_prod_of_nonempty LocalHomeomorph.prod_eq_prod_of_nonemptyₓ'. -/
theorem prod_eq_prod_of_nonempty {e₁ e₁' : LocalHomeomorph α β} {e₂ e₂' : LocalHomeomorph γ δ}
(h : (e₁.Prod e₂).source.Nonempty) : e₁.Prod e₂ = e₁'.Prod e₂' ↔ e₁ = e₁' ∧ e₂ = e₂' :=
by
@@ -2033,12 +1145,6 @@ theorem prod_eq_prod_of_nonempty {e₁ e₁' : LocalHomeomorph α β} {e₂ e₂
and_assoc', and_left_comm]
#align local_homeomorph.prod_eq_prod_of_nonempty LocalHomeomorph.prod_eq_prod_of_nonempty
-/- warning: local_homeomorph.prod_eq_prod_of_nonempty' -> LocalHomeomorph.prod_eq_prod_of_nonempty' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} {δ : Type.{u4}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] [_inst_4 : TopologicalSpace.{u4} δ] {e₁ : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {e₁' : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2} {e₂ : LocalHomeomorph.{u3, u4} γ δ _inst_3 _inst_4} {e₂' : LocalHomeomorph.{u3, u4} γ δ _inst_3 _inst_4}, (Set.Nonempty.{max u1 u3} (Prod.{u1, u3} α γ) (LocalEquiv.source.{max u1 u3, max u2 u4} (Prod.{u1, u3} α γ) (Prod.{u2, u4} β δ) (LocalHomeomorph.toLocalEquiv.{max u1 u3, max u2 u4} (Prod.{u1, u3} α γ) (Prod.{u2, u4} β δ) (Prod.topologicalSpace.{u1, u3} α γ _inst_1 _inst_3) (Prod.topologicalSpace.{u2, u4} β δ _inst_2 _inst_4) (LocalHomeomorph.prod.{u1, u2, u3, u4} α β γ δ _inst_1 _inst_2 _inst_3 _inst_4 e₁' e₂')))) -> (Iff (Eq.{max (succ (max u1 u3)) (succ (max u2 u4))} (LocalHomeomorph.{max u1 u3, max u2 u4} (Prod.{u1, u3} α γ) (Prod.{u2, u4} β δ) (Prod.topologicalSpace.{u1, u3} α γ _inst_1 _inst_3) (Prod.topologicalSpace.{u2, u4} β δ _inst_2 _inst_4)) (LocalHomeomorph.prod.{u1, u2, u3, u4} α β γ δ _inst_1 _inst_2 _inst_3 _inst_4 e₁ e₂) (LocalHomeomorph.prod.{u1, u2, u3, u4} α β γ δ _inst_1 _inst_2 _inst_3 _inst_4 e₁' e₂')) (And (Eq.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) e₁ e₁') (Eq.{max (succ u3) (succ u4)} (LocalHomeomorph.{u3, u4} γ δ _inst_3 _inst_4) e₂ e₂')))
-but is expected to have type
- forall {α : Type.{u4}} {β : Type.{u3}} {γ : Type.{u2}} {δ : Type.{u1}} [_inst_1 : TopologicalSpace.{u4} α] [_inst_2 : TopologicalSpace.{u3} β] [_inst_3 : TopologicalSpace.{u2} γ] [_inst_4 : TopologicalSpace.{u1} δ] {e₁ : LocalHomeomorph.{u4, u3} α β _inst_1 _inst_2} {e₁' : LocalHomeomorph.{u4, u3} α β _inst_1 _inst_2} {e₂ : LocalHomeomorph.{u2, u1} γ δ _inst_3 _inst_4} {e₂' : LocalHomeomorph.{u2, u1} γ δ _inst_3 _inst_4}, (Set.Nonempty.{max u4 u2} (Prod.{u4, u2} α γ) (LocalEquiv.source.{max u4 u2, max u3 u1} (Prod.{u4, u2} α γ) (Prod.{u3, u1} β δ) (LocalHomeomorph.toLocalEquiv.{max u4 u2, max u3 u1} (Prod.{u4, u2} α γ) (Prod.{u3, u1} β δ) (instTopologicalSpaceProd.{u4, u2} α γ _inst_1 _inst_3) (instTopologicalSpaceProd.{u3, u1} β δ _inst_2 _inst_4) (LocalHomeomorph.prod.{u4, u3, u2, u1} α β γ δ _inst_1 _inst_2 _inst_3 _inst_4 e₁' e₂')))) -> (Iff (Eq.{max (max (max (succ u4) (succ u3)) (succ u2)) (succ u1)} (LocalHomeomorph.{max u2 u4, max u1 u3} (Prod.{u4, u2} α γ) (Prod.{u3, u1} β δ) (instTopologicalSpaceProd.{u4, u2} α γ _inst_1 _inst_3) (instTopologicalSpaceProd.{u3, u1} β δ _inst_2 _inst_4)) (LocalHomeomorph.prod.{u4, u3, u2, u1} α β γ δ _inst_1 _inst_2 _inst_3 _inst_4 e₁ e₂) (LocalHomeomorph.prod.{u4, u3, u2, u1} α β γ δ _inst_1 _inst_2 _inst_3 _inst_4 e₁' e₂')) (And (Eq.{max (succ u4) (succ u3)} (LocalHomeomorph.{u4, u3} α β _inst_1 _inst_2) e₁ e₁') (Eq.{max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} γ δ _inst_3 _inst_4) e₂ e₂')))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.prod_eq_prod_of_nonempty' LocalHomeomorph.prod_eq_prod_of_nonempty'ₓ'. -/
theorem prod_eq_prod_of_nonempty' {e₁ e₁' : LocalHomeomorph α β} {e₂ e₂' : LocalHomeomorph γ δ}
(h : (e₁'.Prod e₂').source.Nonempty) : e₁.Prod e₂ = e₁'.Prod e₂' ↔ e₁ = e₁' ∧ e₂ = e₂' := by
rw [eq_comm, prod_eq_prod_of_nonempty h, eq_comm, @eq_comm _ e₂']
@@ -2048,12 +1154,6 @@ end Prod
section Piecewise
-/- warning: local_homeomorph.piecewise -> LocalHomeomorph.piecewise is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (s : Set.{u1} α) (t : Set.{u2} β) [_inst_5 : forall (x : α), Decidable (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s)] [_inst_6 : forall (y : β), Decidable (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) y t)], (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t) -> (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e' s t) -> (Eq.{succ u1} (Set.{u1} α) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (frontier.{u1} α _inst_1 s)) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e')) (frontier.{u1} α _inst_1 s))) -> (Set.EqOn.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e') (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (frontier.{u1} α _inst_1 s))) -> (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2)
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (s : Set.{u1} α) (t : Set.{u2} β) [_inst_5 : forall (x : α), Decidable (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x s)] [_inst_6 : forall (y : β), Decidable (Membership.mem.{u2, u2} β (Set.{u2} β) (Set.instMembershipSet.{u2} β) y t)], (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t) -> (LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e' s t) -> (Eq.{succ u1} (Set.{u1} α) (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (frontier.{u1} α _inst_1 s)) (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e')) (frontier.{u1} α _inst_1 s))) -> (Set.EqOn.{u1, u2} α β (LocalHomeomorph.toFun'.{u1, u2} α β _inst_1 _inst_2 e) (LocalHomeomorph.toFun'.{u1, u2} α β _inst_1 _inst_2 e') (Inter.inter.{u1} (Set.{u1} α) (Set.instInterSet.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (frontier.{u1} α _inst_1 s))) -> (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2)
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.piecewise LocalHomeomorph.piecewiseₓ'. -/
/-- Combine two `local_homeomorph`s using `set.piecewise`. The source of the new `local_homeomorph`
is `s.ite e.source e'.source = e.source ∩ s ∪ e'.source \ s`, and similarly for target. The
function sends `e.source ∩ s` to `e.target ∩ t` using `e` and `e'.source \ s` to `e'.target \ t`
@@ -2079,9 +1179,6 @@ def piecewise (e e' : LocalHomeomorph α β) (s : Set α) (t : Set β) [∀ x, D
(H.frontier.symm_eq_on_of_inter_eq_of_eqOn Hs Heq)
#align local_homeomorph.piecewise LocalHomeomorph.piecewise
-/- warning: local_homeomorph.symm_piecewise -> LocalHomeomorph.symm_piecewise is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.symm_piecewise LocalHomeomorph.symm_piecewiseₓ'. -/
@[simp]
theorem symm_piecewise (e e' : LocalHomeomorph α β) {s : Set α} {t : Set β} [∀ x, Decidable (x ∈ s)]
[∀ y, Decidable (y ∈ t)] (H : e.IsImage s t) (H' : e'.IsImage s t)
@@ -2094,12 +1191,6 @@ theorem symm_piecewise (e e' : LocalHomeomorph α β) {s : Set α} {t : Set β}
rfl
#align local_homeomorph.symm_piecewise LocalHomeomorph.symm_piecewise
-/- warning: local_homeomorph.disjoint_union -> LocalHomeomorph.disjointUnion is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) [_inst_5 : forall (x : α), Decidable (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)))] [_inst_6 : forall (y : β), Decidable (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) y (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)))], (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.completeBooleanAlgebra.{u1} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u1} (Set.{u1} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u1} (Set.{u1} α) (Set.booleanAlgebra.{u1} α))) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e'))) -> (Disjoint.{u2} (Set.{u2} β) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} β) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} β) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} β) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} β) (Set.completeBooleanAlgebra.{u2} β)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u2} (Set.{u2} β) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u2} (Set.{u2} β) (Set.booleanAlgebra.{u2} β))) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e'))) -> (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2)
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) [_inst_5 : forall (x : α), Decidable (Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) x (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)))] [_inst_6 : forall (y : β), Decidable (Membership.mem.{u2, u2} β (Set.{u2} β) (Set.instMembershipSet.{u2} β) y (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)))], (Disjoint.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (BoundedOrder.toOrderBot.{u1} (Set.{u1} α) (Preorder.toLE.{u1} (Set.{u1} α) (PartialOrder.toPreorder.{u1} (Set.{u1} α) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} α) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))))) (CompleteLattice.toBoundedOrder.{u1} (Set.{u1} α) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} α) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} α) (Set.instCompleteBooleanAlgebraSet.{u1} α)))))) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e'))) -> (Disjoint.{u2} (Set.{u2} β) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} β) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} β) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} β) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} β) (Set.instCompleteBooleanAlgebraSet.{u2} β)))))) (BoundedOrder.toOrderBot.{u2} (Set.{u2} β) (Preorder.toLE.{u2} (Set.{u2} β) (PartialOrder.toPreorder.{u2} (Set.{u2} β) (CompleteSemilatticeInf.toPartialOrder.{u2} (Set.{u2} β) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Set.{u2} β) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} β) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} β) (Set.instCompleteBooleanAlgebraSet.{u2} β)))))))) (CompleteLattice.toBoundedOrder.{u2} (Set.{u2} β) (Order.Coframe.toCompleteLattice.{u2} (Set.{u2} β) (CompleteDistribLattice.toCoframe.{u2} (Set.{u2} β) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u2} (Set.{u2} β) (Set.instCompleteBooleanAlgebraSet.{u2} β)))))) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e'))) -> (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2)
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.disjoint_union LocalHomeomorph.disjointUnionₓ'. -/
/-- Combine two `local_homeomorph`s with disjoint sources and disjoint targets. We reuse
`local_homeomorph.piecewise` then override `to_local_equiv` to `local_equiv.disjoint_union`.
This way we have better definitional equalities for `source` and `target`. -/
@@ -2142,12 +1233,6 @@ end Pi
section Continuity
-/- warning: local_homeomorph.continuous_within_at_iff_continuous_within_at_comp_right -> LocalHomeomorph.continuousWithinAt_iff_continuousWithinAt_comp_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {f : β -> γ} {s : Set.{u2} β} {x : β}, (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) x (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (Iff (ContinuousWithinAt.{u2, u3} β γ _inst_2 _inst_3 f s x) (ContinuousWithinAt.{u1, u3} α γ _inst_1 _inst_3 (Function.comp.{succ u1, succ u2, succ u3} α β γ f (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e)) (Set.preimage.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) s) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e) x)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u3}} {γ : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u3} β] [_inst_3 : TopologicalSpace.{u1} γ] (e : LocalHomeomorph.{u2, u3} α β _inst_1 _inst_2) {f : β -> γ} {s : Set.{u3} β} {x : β}, (Membership.mem.{u3, u3} β (Set.{u3} β) (Set.instMembershipSet.{u3} β) x (LocalEquiv.target.{u2, u3} α β (LocalHomeomorph.toLocalEquiv.{u2, u3} α β _inst_1 _inst_2 e))) -> (Iff (ContinuousWithinAt.{u3, u1} β γ _inst_2 _inst_3 f s x) (ContinuousWithinAt.{u2, u1} α γ _inst_1 _inst_3 (Function.comp.{succ u2, succ u3, succ u1} α β γ f (LocalHomeomorph.toFun'.{u2, u3} α β _inst_1 _inst_2 e)) (Set.preimage.{u2, u3} α β (LocalHomeomorph.toFun'.{u2, u3} α β _inst_1 _inst_2 e) s) (LocalHomeomorph.toFun'.{u3, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u3} α β _inst_1 _inst_2 e) x)))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.continuous_within_at_iff_continuous_within_at_comp_right LocalHomeomorph.continuousWithinAt_iff_continuousWithinAt_comp_rightₓ'. -/
/-- Continuity within a set at a point can be read under right composition with a local
homeomorphism, if the point is in its target -/
theorem continuousWithinAt_iff_continuousWithinAt_comp_right {f : β → γ} {s : Set β} {x : β}
@@ -2157,12 +1242,6 @@ theorem continuousWithinAt_iff_continuousWithinAt_comp_right {f : β → γ} {s
e.map_nhds_within_preimage_eq (e.map_target h), (· ∘ ·), e.right_inv h]
#align local_homeomorph.continuous_within_at_iff_continuous_within_at_comp_right LocalHomeomorph.continuousWithinAt_iff_continuousWithinAt_comp_right
-/- warning: local_homeomorph.continuous_at_iff_continuous_at_comp_right -> LocalHomeomorph.continuousAt_iff_continuousAt_comp_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {f : β -> γ} {x : β}, (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) x (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (Iff (ContinuousAt.{u2, u3} β γ _inst_2 _inst_3 f x) (ContinuousAt.{u1, u3} α γ _inst_1 _inst_3 (Function.comp.{succ u1, succ u2, succ u3} α β γ f (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e)) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e) x)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u3}} {γ : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u3} β] [_inst_3 : TopologicalSpace.{u1} γ] (e : LocalHomeomorph.{u2, u3} α β _inst_1 _inst_2) {f : β -> γ} {x : β}, (Membership.mem.{u3, u3} β (Set.{u3} β) (Set.instMembershipSet.{u3} β) x (LocalEquiv.target.{u2, u3} α β (LocalHomeomorph.toLocalEquiv.{u2, u3} α β _inst_1 _inst_2 e))) -> (Iff (ContinuousAt.{u3, u1} β γ _inst_2 _inst_3 f x) (ContinuousAt.{u2, u1} α γ _inst_1 _inst_3 (Function.comp.{succ u2, succ u3, succ u1} α β γ f (LocalHomeomorph.toFun'.{u2, u3} α β _inst_1 _inst_2 e)) (LocalHomeomorph.toFun'.{u3, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u3} α β _inst_1 _inst_2 e) x)))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.continuous_at_iff_continuous_at_comp_right LocalHomeomorph.continuousAt_iff_continuousAt_comp_rightₓ'. -/
/-- Continuity at a point can be read under right composition with a local homeomorphism, if the
point is in its target -/
theorem continuousAt_iff_continuousAt_comp_right {f : β → γ} {x : β} (h : x ∈ e.target) :
@@ -2171,12 +1250,6 @@ theorem continuousAt_iff_continuousAt_comp_right {f : β → γ} {x : β} (h : x
preimage_univ, continuousWithinAt_univ]
#align local_homeomorph.continuous_at_iff_continuous_at_comp_right LocalHomeomorph.continuousAt_iff_continuousAt_comp_right
-/- warning: local_homeomorph.continuous_on_iff_continuous_on_comp_right -> LocalHomeomorph.continuousOn_iff_continuousOn_comp_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {f : β -> γ} {s : Set.{u2} β}, (HasSubset.Subset.{u2} (Set.{u2} β) (Set.hasSubset.{u2} β) s (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (Iff (ContinuousOn.{u2, u3} β γ _inst_2 _inst_3 f s) (ContinuousOn.{u1, u3} α γ _inst_1 _inst_3 (Function.comp.{succ u1, succ u2, succ u3} α β γ f (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e)) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.preimage.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) s))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u3}} {γ : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u3} β] [_inst_3 : TopologicalSpace.{u1} γ] (e : LocalHomeomorph.{u2, u3} α β _inst_1 _inst_2) {f : β -> γ} {s : Set.{u3} β}, (HasSubset.Subset.{u3} (Set.{u3} β) (Set.instHasSubsetSet.{u3} β) s (LocalEquiv.target.{u2, u3} α β (LocalHomeomorph.toLocalEquiv.{u2, u3} α β _inst_1 _inst_2 e))) -> (Iff (ContinuousOn.{u3, u1} β γ _inst_2 _inst_3 f s) (ContinuousOn.{u2, u1} α γ _inst_1 _inst_3 (Function.comp.{succ u2, succ u3, succ u1} α β γ f (LocalHomeomorph.toFun'.{u2, u3} α β _inst_1 _inst_2 e)) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u3} α β (LocalHomeomorph.toLocalEquiv.{u2, u3} α β _inst_1 _inst_2 e)) (Set.preimage.{u2, u3} α β (LocalHomeomorph.toFun'.{u2, u3} α β _inst_1 _inst_2 e) s))))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.continuous_on_iff_continuous_on_comp_right LocalHomeomorph.continuousOn_iff_continuousOn_comp_rightₓ'. -/
/-- A function is continuous on a set if and only if its composition with a local homeomorphism
on the right is continuous on the corresponding set. -/
theorem continuousOn_iff_continuousOn_comp_right {f : β → γ} {s : Set β} (h : s ⊆ e.target) :
@@ -2189,12 +1262,6 @@ theorem continuousOn_iff_continuousOn_comp_right {f : β → γ} {s : Set β} (h
exact IsOpen.mem_nhds e.open_source (e.map_target (h hx))
#align local_homeomorph.continuous_on_iff_continuous_on_comp_right LocalHomeomorph.continuousOn_iff_continuousOn_comp_right
-/- warning: local_homeomorph.continuous_within_at_iff_continuous_within_at_comp_left -> LocalHomeomorph.continuousWithinAt_iff_continuousWithinAt_comp_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {f : γ -> α} {s : Set.{u3} γ} {x : γ}, (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) (f x) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (Membership.Mem.{u3, u3} (Set.{u3} γ) (Filter.{u3} γ) (Filter.hasMem.{u3} γ) (Set.preimage.{u3, u1} γ α f (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) (nhdsWithin.{u3} γ _inst_3 x s)) -> (Iff (ContinuousWithinAt.{u3, u1} γ α _inst_3 _inst_1 f s x) (ContinuousWithinAt.{u3, u2} γ β _inst_3 _inst_2 (Function.comp.{succ u3, succ u1, succ u2} γ α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) f) s x))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] [_inst_3 : TopologicalSpace.{u3} γ] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) {f : γ -> α} {s : Set.{u3} γ} {x : γ}, (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) (f x) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))) -> (Membership.mem.{u3, u3} (Set.{u3} γ) (Filter.{u3} γ) (instMembershipSetFilter.{u3} γ) (Set.preimage.{u3, u2} γ α f (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))) (nhdsWithin.{u3} γ _inst_3 x s)) -> (Iff (ContinuousWithinAt.{u3, u2} γ α _inst_3 _inst_1 f s x) (ContinuousWithinAt.{u3, u1} γ β _inst_3 _inst_2 (Function.comp.{succ u3, succ u2, succ u1} γ α β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) f) s x))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.continuous_within_at_iff_continuous_within_at_comp_left LocalHomeomorph.continuousWithinAt_iff_continuousWithinAt_comp_leftₓ'. -/
/-- Continuity within a set at a point can be read under left composition with a local
homeomorphism if a neighborhood of the initial point is sent to the source of the local
homeomorphism-/
@@ -2211,12 +1278,6 @@ theorem continuousWithinAt_iff_continuousWithinAt_comp_left {f : γ → α} {s :
exact this.congr (fun y hy => by simp [e.left_inv hy.2]) (by simp [e.left_inv hx])
#align local_homeomorph.continuous_within_at_iff_continuous_within_at_comp_left LocalHomeomorph.continuousWithinAt_iff_continuousWithinAt_comp_left
-/- warning: local_homeomorph.continuous_at_iff_continuous_at_comp_left -> LocalHomeomorph.continuousAt_iff_continuousAt_comp_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {f : γ -> α} {x : γ}, (Membership.Mem.{u3, u3} (Set.{u3} γ) (Filter.{u3} γ) (Filter.hasMem.{u3} γ) (Set.preimage.{u3, u1} γ α f (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) (nhds.{u3} γ _inst_3 x)) -> (Iff (ContinuousAt.{u3, u1} γ α _inst_3 _inst_1 f x) (ContinuousAt.{u3, u2} γ β _inst_3 _inst_2 (Function.comp.{succ u3, succ u1, succ u2} γ α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) f) x))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] [_inst_3 : TopologicalSpace.{u3} γ] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) {f : γ -> α} {x : γ}, (Membership.mem.{u3, u3} (Set.{u3} γ) (Filter.{u3} γ) (instMembershipSetFilter.{u3} γ) (Set.preimage.{u3, u2} γ α f (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))) (nhds.{u3} γ _inst_3 x)) -> (Iff (ContinuousAt.{u3, u2} γ α _inst_3 _inst_1 f x) (ContinuousAt.{u3, u1} γ β _inst_3 _inst_2 (Function.comp.{succ u3, succ u2, succ u1} γ α β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) f) x))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.continuous_at_iff_continuous_at_comp_left LocalHomeomorph.continuousAt_iff_continuousAt_comp_leftₓ'. -/
/-- Continuity at a point can be read under left composition with a local homeomorphism if a
neighborhood of the initial point is sent to the source of the local homeomorphism-/
theorem continuousAt_iff_continuousAt_comp_left {f : γ → α} {x : γ} (h : f ⁻¹' e.source ∈ 𝓝 x) :
@@ -2228,12 +1289,6 @@ theorem continuousAt_iff_continuousAt_comp_left {f : γ → α} {x : γ} (h : f
e.continuous_within_at_iff_continuous_within_at_comp_left hx h']
#align local_homeomorph.continuous_at_iff_continuous_at_comp_left LocalHomeomorph.continuousAt_iff_continuousAt_comp_left
-/- warning: local_homeomorph.continuous_on_iff_continuous_on_comp_left -> LocalHomeomorph.continuousOn_iff_continuousOn_comp_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {f : γ -> α} {s : Set.{u3} γ}, (HasSubset.Subset.{u3} (Set.{u3} γ) (Set.hasSubset.{u3} γ) s (Set.preimage.{u3, u1} γ α f (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)))) -> (Iff (ContinuousOn.{u3, u1} γ α _inst_3 _inst_1 f s) (ContinuousOn.{u3, u2} γ β _inst_3 _inst_2 (Function.comp.{succ u3, succ u1, succ u2} γ α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) f) s))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] [_inst_3 : TopologicalSpace.{u3} γ] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) {f : γ -> α} {s : Set.{u3} γ}, (HasSubset.Subset.{u3} (Set.{u3} γ) (Set.instHasSubsetSet.{u3} γ) s (Set.preimage.{u3, u2} γ α f (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)))) -> (Iff (ContinuousOn.{u3, u2} γ α _inst_3 _inst_1 f s) (ContinuousOn.{u3, u1} γ β _inst_3 _inst_2 (Function.comp.{succ u3, succ u2, succ u1} γ α β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) f) s))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.continuous_on_iff_continuous_on_comp_left LocalHomeomorph.continuousOn_iff_continuousOn_comp_leftₓ'. -/
/-- A function is continuous on a set if and only if its composition with a local homeomorphism
on the left is continuous on the corresponding set. -/
theorem continuousOn_iff_continuousOn_comp_left {f : γ → α} {s : Set γ} (h : s ⊆ f ⁻¹' e.source) :
@@ -2243,12 +1298,6 @@ theorem continuousOn_iff_continuousOn_comp_left {f : γ → α} {s : Set γ} (h
(mem_of_superset self_mem_nhdsWithin h)
#align local_homeomorph.continuous_on_iff_continuous_on_comp_left LocalHomeomorph.continuousOn_iff_continuousOn_comp_left
-/- warning: local_homeomorph.continuous_iff_continuous_comp_left -> LocalHomeomorph.continuous_iff_continuous_comp_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {f : γ -> α}, (Eq.{succ u3} (Set.{u3} γ) (Set.preimage.{u3, u1} γ α f (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) (Set.univ.{u3} γ)) -> (Iff (Continuous.{u3, u1} γ α _inst_3 _inst_1 f) (Continuous.{u3, u2} γ β _inst_3 _inst_2 (Function.comp.{succ u3, succ u1, succ u2} γ α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) f)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] [_inst_3 : TopologicalSpace.{u3} γ] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) {f : γ -> α}, (Eq.{succ u3} (Set.{u3} γ) (Set.preimage.{u3, u2} γ α f (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e))) (Set.univ.{u3} γ)) -> (Iff (Continuous.{u3, u2} γ α _inst_3 _inst_1 f) (Continuous.{u3, u1} γ β _inst_3 _inst_2 (Function.comp.{succ u3, succ u2, succ u1} γ α β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) f)))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.continuous_iff_continuous_comp_left LocalHomeomorph.continuous_iff_continuous_comp_leftₓ'. -/
/-- A function is continuous if and only if its composition with a local homeomorphism
on the left is continuous and its image is contained in the source. -/
theorem continuous_iff_continuous_comp_left {f : γ → α} (h : f ⁻¹' e.source = univ) :
@@ -2320,12 +1369,6 @@ def toHomeomorphOfSourceEqUnivTargetEqUniv (h : e.source = (univ : Set α)) (h'
#align local_homeomorph.to_homeomorph_of_source_eq_univ_target_eq_univ LocalHomeomorph.toHomeomorphOfSourceEqUnivTargetEqUniv
-/
-/- warning: local_homeomorph.to_open_embedding -> LocalHomeomorph.to_openEmbedding is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2), (Eq.{succ u1} (Set.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (Set.univ.{u1} α)) -> (OpenEmbedding.{u1, u2} α β _inst_1 _inst_2 (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2), (Eq.{succ u2} (Set.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (Set.univ.{u2} α)) -> (OpenEmbedding.{u2, u1} α β _inst_1 _inst_2 (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.to_open_embedding LocalHomeomorph.to_openEmbeddingₓ'. -/
/-- A local homeomorphism whose source is all of `α` defines an open embedding of `α` into `β`. The
converse is also true; see `open_embedding.to_local_homeomorph`. -/
theorem to_openEmbedding (h : e.source = Set.univ) : OpenEmbedding e :=
@@ -2356,23 +1399,11 @@ theorem refl_toLocalHomeomorph : (Homeomorph.refl α).toLocalHomeomorph = LocalH
#align homeomorph.refl_to_local_homeomorph Homeomorph.refl_toLocalHomeomorph
-/
-/- warning: homeomorph.symm_to_local_homeomorph -> Homeomorph.symm_toLocalHomeomorph is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : Homeomorph.{u1, u2} α β _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (Homeomorph.toLocalHomeomorph.{u2, u1} β α _inst_2 _inst_1 (Homeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e)) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 (Homeomorph.toLocalHomeomorph.{u1, u2} α β _inst_1 _inst_2 e))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : Homeomorph.{u2, u1} α β _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (LocalHomeomorph.{u1, u2} β α _inst_2 _inst_1) (Homeomorph.toLocalHomeomorph.{u1, u2} β α _inst_2 _inst_1 (Homeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e)) (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 (Homeomorph.toLocalHomeomorph.{u2, u1} α β _inst_1 _inst_2 e))
-Case conversion may be inaccurate. Consider using '#align homeomorph.symm_to_local_homeomorph Homeomorph.symm_toLocalHomeomorphₓ'. -/
@[simp, mfld_simps]
theorem symm_toLocalHomeomorph : e.symm.toLocalHomeomorph = e.toLocalHomeomorph.symm :=
rfl
#align homeomorph.symm_to_local_homeomorph Homeomorph.symm_toLocalHomeomorph
-/- warning: homeomorph.trans_to_local_homeomorph -> Homeomorph.trans_toLocalHomeomorph is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] (e : Homeomorph.{u1, u2} α β _inst_1 _inst_2) (e' : Homeomorph.{u2, u3} β γ _inst_2 _inst_3), Eq.{max (succ u1) (succ u3)} (LocalHomeomorph.{u1, u3} α γ _inst_1 _inst_3) (Homeomorph.toLocalHomeomorph.{u1, u3} α γ _inst_1 _inst_3 (Homeomorph.trans.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 e e')) (LocalHomeomorph.trans.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 (Homeomorph.toLocalHomeomorph.{u1, u2} α β _inst_1 _inst_2 e) (Homeomorph.toLocalHomeomorph.{u2, u3} β γ _inst_2 _inst_3 e'))
-but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u1}} {γ : Type.{u2}} [_inst_1 : TopologicalSpace.{u3} α] [_inst_2 : TopologicalSpace.{u1} β] [_inst_3 : TopologicalSpace.{u2} γ] (e : Homeomorph.{u3, u1} α β _inst_1 _inst_2) (e' : Homeomorph.{u1, u2} β γ _inst_2 _inst_3), Eq.{max (succ u3) (succ u2)} (LocalHomeomorph.{u3, u2} α γ _inst_1 _inst_3) (Homeomorph.toLocalHomeomorph.{u3, u2} α γ _inst_1 _inst_3 (Homeomorph.trans.{u3, u1, u2} α β γ _inst_1 _inst_2 _inst_3 e e')) (LocalHomeomorph.trans.{u3, u1, u2} α β γ _inst_1 _inst_2 _inst_3 (Homeomorph.toLocalHomeomorph.{u3, u1} α β _inst_1 _inst_2 e) (Homeomorph.toLocalHomeomorph.{u1, u2} β γ _inst_2 _inst_3 e'))
-Case conversion may be inaccurate. Consider using '#align homeomorph.trans_to_local_homeomorph Homeomorph.trans_toLocalHomeomorphₓ'. -/
@[simp, mfld_simps]
theorem trans_toLocalHomeomorph :
(e.trans e').toLocalHomeomorph = e.toLocalHomeomorph.trans e'.toLocalHomeomorph :=
@@ -2395,12 +1426,6 @@ noncomputable def toLocalHomeomorph [Nonempty α] : LocalHomeomorph α β :=
#align open_embedding.to_local_homeomorph OpenEmbedding.toLocalHomeomorph
-/
-/- warning: open_embedding.continuous_at_iff -> OpenEmbedding.continuousAt_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] {f : α -> β} {g : β -> γ}, (OpenEmbedding.{u1, u2} α β _inst_1 _inst_2 f) -> (forall {x : α}, Iff (ContinuousAt.{u1, u3} α γ _inst_1 _inst_3 (Function.comp.{succ u1, succ u2, succ u3} α β γ g f) x) (ContinuousAt.{u2, u3} β γ _inst_2 _inst_3 g (f x)))
-but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u2}} {γ : Type.{u1}} [_inst_1 : TopologicalSpace.{u3} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u1} γ] {f : α -> β} {g : β -> γ}, (OpenEmbedding.{u3, u2} α β _inst_1 _inst_2 f) -> (forall {x : α}, Iff (ContinuousAt.{u3, u1} α γ _inst_1 _inst_3 (Function.comp.{succ u3, succ u2, succ u1} α β γ g f) x) (ContinuousAt.{u2, u1} β γ _inst_2 _inst_3 g (f x)))
-Case conversion may be inaccurate. Consider using '#align open_embedding.continuous_at_iff OpenEmbedding.continuousAt_iffₓ'. -/
theorem continuousAt_iff {f : α → β} {g : β → γ} (hf : OpenEmbedding f) {x : α} :
ContinuousAt (g ∘ f) x ↔ ContinuousAt g (f x) :=
by
@@ -2466,45 +1491,21 @@ noncomputable def subtypeRestr : LocalHomeomorph s β :=
#align local_homeomorph.subtype_restr LocalHomeomorph.subtypeRestr
-/
-/- warning: local_homeomorph.subtype_restr_def -> LocalHomeomorph.subtypeRestr_def is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (s : TopologicalSpace.Opens.{u1} α _inst_1) [_inst_5 : Nonempty.{succ u1} (coeSort.{succ u1, succ (succ u1)} (TopologicalSpace.Opens.{u1} α _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (TopologicalSpace.Opens.{u1} α _inst_1) α (TopologicalSpace.Opens.setLike.{u1} α _inst_1)) s)], Eq.{max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (TopologicalSpace.Opens.{u1} α _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (TopologicalSpace.Opens.{u1} α _inst_1) α (TopologicalSpace.Opens.setLike.{u1} α _inst_1)) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (TopologicalSpace.Opens.{u1} α _inst_1) (SetLike.hasMem.{u1, u1} (TopologicalSpace.Opens.{u1} α _inst_1) α (TopologicalSpace.Opens.setLike.{u1} α _inst_1)) x s) _inst_1) _inst_2) (LocalHomeomorph.subtypeRestr.{u1, u2} α β _inst_1 _inst_2 e s _inst_5) (LocalHomeomorph.trans.{u1, u1, u2} (coeSort.{succ u1, succ (succ u1)} (TopologicalSpace.Opens.{u1} α _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (TopologicalSpace.Opens.{u1} α _inst_1) α (TopologicalSpace.Opens.setLike.{u1} α _inst_1)) s) α β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (TopologicalSpace.Opens.{u1} α _inst_1) (SetLike.hasMem.{u1, u1} (TopologicalSpace.Opens.{u1} α _inst_1) α (TopologicalSpace.Opens.setLike.{u1} α _inst_1)) x s) _inst_1) _inst_1 _inst_2 (TopologicalSpace.Opens.localHomeomorphSubtypeCoe.{u1} α _inst_1 s _inst_5) e)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (s : TopologicalSpace.Opens.{u2} α _inst_1) [_inst_5 : Nonempty.{succ u2} (Subtype.{succ u2} α (fun (x : α) => Membership.mem.{u2, u2} α (TopologicalSpace.Opens.{u2} α _inst_1) (SetLike.instMembership.{u2, u2} (TopologicalSpace.Opens.{u2} α _inst_1) α (TopologicalSpace.Opens.instSetLikeOpens.{u2} α _inst_1)) x s))], Eq.{max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} (Subtype.{succ u2} α (fun (x : α) => Membership.mem.{u2, u2} α (TopologicalSpace.Opens.{u2} α _inst_1) (SetLike.instMembership.{u2, u2} (TopologicalSpace.Opens.{u2} α _inst_1) α (TopologicalSpace.Opens.instSetLikeOpens.{u2} α _inst_1)) x s)) β (instTopologicalSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (TopologicalSpace.Opens.{u2} α _inst_1) (SetLike.instMembership.{u2, u2} (TopologicalSpace.Opens.{u2} α _inst_1) α (TopologicalSpace.Opens.instSetLikeOpens.{u2} α _inst_1)) x s) _inst_1) _inst_2) (LocalHomeomorph.subtypeRestr.{u2, u1} α β _inst_1 _inst_2 e s _inst_5) (LocalHomeomorph.trans.{u2, u2, u1} (Subtype.{succ u2} α (fun (x : α) => Membership.mem.{u2, u2} α (TopologicalSpace.Opens.{u2} α _inst_1) (SetLike.instMembership.{u2, u2} (TopologicalSpace.Opens.{u2} α _inst_1) α (TopologicalSpace.Opens.instSetLikeOpens.{u2} α _inst_1)) x s)) α β (instTopologicalSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (TopologicalSpace.Opens.{u2} α _inst_1) (SetLike.instMembership.{u2, u2} (TopologicalSpace.Opens.{u2} α _inst_1) α (TopologicalSpace.Opens.instSetLikeOpens.{u2} α _inst_1)) x s) _inst_1) _inst_1 _inst_2 (TopologicalSpace.Opens.localHomeomorphSubtypeCoe.{u2} α _inst_1 s _inst_5) e)
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.subtype_restr_def LocalHomeomorph.subtypeRestr_defₓ'. -/
theorem subtypeRestr_def : e.subtypeRestr s = s.localHomeomorphSubtypeCoe.trans e :=
rfl
#align local_homeomorph.subtype_restr_def LocalHomeomorph.subtypeRestr_def
-/- warning: local_homeomorph.subtype_restr_coe -> LocalHomeomorph.subtypeRestr_coe is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (s : TopologicalSpace.Opens.{u1} α _inst_1) [_inst_5 : Nonempty.{succ u1} (coeSort.{succ u1, succ (succ u1)} (TopologicalSpace.Opens.{u1} α _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (TopologicalSpace.Opens.{u1} α _inst_1) α (TopologicalSpace.Opens.setLike.{u1} α _inst_1)) s)], Eq.{max (succ u1) (succ u2)} ((fun (_x : LocalHomeomorph.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (TopologicalSpace.Opens.{u1} α _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (TopologicalSpace.Opens.{u1} α _inst_1) α (TopologicalSpace.Opens.setLike.{u1} α _inst_1)) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (TopologicalSpace.Opens.{u1} α _inst_1) (SetLike.hasMem.{u1, u1} (TopologicalSpace.Opens.{u1} α _inst_1) α (TopologicalSpace.Opens.setLike.{u1} α _inst_1)) x s) _inst_1) _inst_2) => (coeSort.{succ u1, succ (succ u1)} (TopologicalSpace.Opens.{u1} α _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (TopologicalSpace.Opens.{u1} α _inst_1) α (TopologicalSpace.Opens.setLike.{u1} α _inst_1)) s) -> β) (LocalHomeomorph.subtypeRestr.{u1, u2} α β _inst_1 _inst_2 e s _inst_5)) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (TopologicalSpace.Opens.{u1} α _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (TopologicalSpace.Opens.{u1} α _inst_1) α (TopologicalSpace.Opens.setLike.{u1} α _inst_1)) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (TopologicalSpace.Opens.{u1} α _inst_1) (SetLike.hasMem.{u1, u1} (TopologicalSpace.Opens.{u1} α _inst_1) α (TopologicalSpace.Opens.setLike.{u1} α _inst_1)) x s) _inst_1) _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (TopologicalSpace.Opens.{u1} α _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (TopologicalSpace.Opens.{u1} α _inst_1) α (TopologicalSpace.Opens.setLike.{u1} α _inst_1)) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (TopologicalSpace.Opens.{u1} α _inst_1) (SetLike.hasMem.{u1, u1} (TopologicalSpace.Opens.{u1} α _inst_1) α (TopologicalSpace.Opens.setLike.{u1} α _inst_1)) x s) _inst_1) _inst_2) => (coeSort.{succ u1, succ (succ u1)} (TopologicalSpace.Opens.{u1} α _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (TopologicalSpace.Opens.{u1} α _inst_1) α (TopologicalSpace.Opens.setLike.{u1} α _inst_1)) s) -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (TopologicalSpace.Opens.{u1} α _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (TopologicalSpace.Opens.{u1} α _inst_1) α (TopologicalSpace.Opens.setLike.{u1} α _inst_1)) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (TopologicalSpace.Opens.{u1} α _inst_1) (SetLike.hasMem.{u1, u1} (TopologicalSpace.Opens.{u1} α _inst_1) α (TopologicalSpace.Opens.setLike.{u1} α _inst_1)) x s) _inst_1) _inst_2) (LocalHomeomorph.subtypeRestr.{u1, u2} α β _inst_1 _inst_2 e s _inst_5)) (Set.restrict.{u1, u2} α (fun (ᾰ : α) => β) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (TopologicalSpace.Opens.{u1} α _inst_1) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (TopologicalSpace.Opens.{u1} α _inst_1) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (TopologicalSpace.Opens.{u1} α _inst_1) (Set.{u1} α) (SetLike.Set.hasCoeT.{u1, u1} (TopologicalSpace.Opens.{u1} α _inst_1) α (TopologicalSpace.Opens.setLike.{u1} α _inst_1)))) s) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (s : TopologicalSpace.Opens.{u2} α _inst_1) [_inst_5 : Nonempty.{succ u2} (Subtype.{succ u2} α (fun (x : α) => Membership.mem.{u2, u2} α (TopologicalSpace.Opens.{u2} α _inst_1) (SetLike.instMembership.{u2, u2} (TopologicalSpace.Opens.{u2} α _inst_1) α (TopologicalSpace.Opens.instSetLikeOpens.{u2} α _inst_1)) x s))], Eq.{max (succ u2) (succ u1)} ((Subtype.{succ u2} α (fun (x : α) => Membership.mem.{u2, u2} α (TopologicalSpace.Opens.{u2} α _inst_1) (SetLike.instMembership.{u2, u2} (TopologicalSpace.Opens.{u2} α _inst_1) α (TopologicalSpace.Opens.instSetLikeOpens.{u2} α _inst_1)) x s)) -> β) (LocalHomeomorph.toFun'.{u2, u1} (Subtype.{succ u2} α (fun (x : α) => Membership.mem.{u2, u2} α (TopologicalSpace.Opens.{u2} α _inst_1) (SetLike.instMembership.{u2, u2} (TopologicalSpace.Opens.{u2} α _inst_1) α (TopologicalSpace.Opens.instSetLikeOpens.{u2} α _inst_1)) x s)) β (instTopologicalSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (TopologicalSpace.Opens.{u2} α _inst_1) (SetLike.instMembership.{u2, u2} (TopologicalSpace.Opens.{u2} α _inst_1) α (TopologicalSpace.Opens.instSetLikeOpens.{u2} α _inst_1)) x s) _inst_1) _inst_2 (LocalHomeomorph.subtypeRestr.{u2, u1} α β _inst_1 _inst_2 e s _inst_5)) (Set.restrict.{u2, u1} α (fun (ᾰ : α) => β) (SetLike.coe.{u2, u2} (TopologicalSpace.Opens.{u2} α _inst_1) α (TopologicalSpace.Opens.instSetLikeOpens.{u2} α _inst_1) s) (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.subtype_restr_coe LocalHomeomorph.subtypeRestr_coeₓ'. -/
@[simp, mfld_simps]
theorem subtypeRestr_coe :
((e.subtypeRestr s : LocalHomeomorph s β) : s → β) = Set.restrict ↑s (e : α → β) :=
rfl
#align local_homeomorph.subtype_restr_coe LocalHomeomorph.subtypeRestr_coe
-/- warning: local_homeomorph.subtype_restr_source -> LocalHomeomorph.subtypeRestr_source is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (s : TopologicalSpace.Opens.{u1} α _inst_1) [_inst_5 : Nonempty.{succ u1} (coeSort.{succ u1, succ (succ u1)} (TopologicalSpace.Opens.{u1} α _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (TopologicalSpace.Opens.{u1} α _inst_1) α (TopologicalSpace.Opens.setLike.{u1} α _inst_1)) s)], Eq.{succ u1} (Set.{u1} (coeSort.{succ u1, succ (succ u1)} (TopologicalSpace.Opens.{u1} α _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (TopologicalSpace.Opens.{u1} α _inst_1) α (TopologicalSpace.Opens.setLike.{u1} α _inst_1)) s)) (LocalEquiv.source.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (TopologicalSpace.Opens.{u1} α _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (TopologicalSpace.Opens.{u1} α _inst_1) α (TopologicalSpace.Opens.setLike.{u1} α _inst_1)) s) β (LocalHomeomorph.toLocalEquiv.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (TopologicalSpace.Opens.{u1} α _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (TopologicalSpace.Opens.{u1} α _inst_1) α (TopologicalSpace.Opens.setLike.{u1} α _inst_1)) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (TopologicalSpace.Opens.{u1} α _inst_1) (SetLike.hasMem.{u1, u1} (TopologicalSpace.Opens.{u1} α _inst_1) α (TopologicalSpace.Opens.setLike.{u1} α _inst_1)) x s) _inst_1) _inst_2 (LocalHomeomorph.subtypeRestr.{u1, u2} α β _inst_1 _inst_2 e s _inst_5))) (Set.preimage.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (TopologicalSpace.Opens.{u1} α _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (TopologicalSpace.Opens.{u1} α _inst_1) α (TopologicalSpace.Opens.setLike.{u1} α _inst_1)) s) α ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (TopologicalSpace.Opens.{u1} α _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (TopologicalSpace.Opens.{u1} α _inst_1) α (TopologicalSpace.Opens.setLike.{u1} α _inst_1)) s) α (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (TopologicalSpace.Opens.{u1} α _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (TopologicalSpace.Opens.{u1} α _inst_1) α (TopologicalSpace.Opens.setLike.{u1} α _inst_1)) s) α (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (TopologicalSpace.Opens.{u1} α _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (TopologicalSpace.Opens.{u1} α _inst_1) α (TopologicalSpace.Opens.setLike.{u1} α _inst_1)) s) α (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (TopologicalSpace.Opens.{u1} α _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (TopologicalSpace.Opens.{u1} α _inst_1) α (TopologicalSpace.Opens.setLike.{u1} α _inst_1)) s) α (coeSubtype.{succ u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (TopologicalSpace.Opens.{u1} α _inst_1) (SetLike.hasMem.{u1, u1} (TopologicalSpace.Opens.{u1} α _inst_1) α (TopologicalSpace.Opens.setLike.{u1} α _inst_1)) x s)))))) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (s : TopologicalSpace.Opens.{u2} α _inst_1) [_inst_5 : Nonempty.{succ u2} (Subtype.{succ u2} α (fun (x : α) => Membership.mem.{u2, u2} α (TopologicalSpace.Opens.{u2} α _inst_1) (SetLike.instMembership.{u2, u2} (TopologicalSpace.Opens.{u2} α _inst_1) α (TopologicalSpace.Opens.instSetLikeOpens.{u2} α _inst_1)) x s))], Eq.{succ u2} (Set.{u2} (Subtype.{succ u2} α (fun (x : α) => Membership.mem.{u2, u2} α (TopologicalSpace.Opens.{u2} α _inst_1) (SetLike.instMembership.{u2, u2} (TopologicalSpace.Opens.{u2} α _inst_1) α (TopologicalSpace.Opens.instSetLikeOpens.{u2} α _inst_1)) x s))) (LocalEquiv.source.{u2, u1} (Subtype.{succ u2} α (fun (x : α) => Membership.mem.{u2, u2} α (TopologicalSpace.Opens.{u2} α _inst_1) (SetLike.instMembership.{u2, u2} (TopologicalSpace.Opens.{u2} α _inst_1) α (TopologicalSpace.Opens.instSetLikeOpens.{u2} α _inst_1)) x s)) β (LocalHomeomorph.toLocalEquiv.{u2, u1} (Subtype.{succ u2} α (fun (x : α) => Membership.mem.{u2, u2} α (TopologicalSpace.Opens.{u2} α _inst_1) (SetLike.instMembership.{u2, u2} (TopologicalSpace.Opens.{u2} α _inst_1) α (TopologicalSpace.Opens.instSetLikeOpens.{u2} α _inst_1)) x s)) β (instTopologicalSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (TopologicalSpace.Opens.{u2} α _inst_1) (SetLike.instMembership.{u2, u2} (TopologicalSpace.Opens.{u2} α _inst_1) α (TopologicalSpace.Opens.instSetLikeOpens.{u2} α _inst_1)) x s) _inst_1) _inst_2 (LocalHomeomorph.subtypeRestr.{u2, u1} α β _inst_1 _inst_2 e s _inst_5))) (Set.preimage.{u2, u2} (Subtype.{succ u2} α (fun (x : α) => Membership.mem.{u2, u2} α (TopologicalSpace.Opens.{u2} α _inst_1) (SetLike.instMembership.{u2, u2} (TopologicalSpace.Opens.{u2} α _inst_1) α (TopologicalSpace.Opens.instSetLikeOpens.{u2} α _inst_1)) x s)) α (Subtype.val.{succ u2} α (fun (x : α) => Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x (SetLike.coe.{u2, u2} (TopologicalSpace.Opens.{u2} α _inst_1) α (TopologicalSpace.Opens.instSetLikeOpens.{u2} α _inst_1) s))) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.subtype_restr_source LocalHomeomorph.subtypeRestr_sourceₓ'. -/
@[simp, mfld_simps]
theorem subtypeRestr_source : (e.subtypeRestr s).source = coe ⁻¹' e.source := by
simp only [subtype_restr_def, mfld_simps]
#align local_homeomorph.subtype_restr_source LocalHomeomorph.subtypeRestr_source
-/- warning: local_homeomorph.subtype_restr_symm_trans_subtype_restr -> LocalHomeomorph.subtypeRestr_symm_trans_subtypeRestr is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (s : TopologicalSpace.Opens.{u1} α _inst_1) [_inst_5 : Nonempty.{succ u1} (coeSort.{succ u1, succ (succ u1)} (TopologicalSpace.Opens.{u1} α _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (TopologicalSpace.Opens.{u1} α _inst_1) α (TopologicalSpace.Opens.setLike.{u1} α _inst_1)) s)] (f : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (f' : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2), HasEquivₓ.Equiv.{succ u2} (LocalHomeomorph.{u2, u2} β β _inst_2 _inst_2) (setoidHasEquiv.{succ u2} (LocalHomeomorph.{u2, u2} β β _inst_2 _inst_2) (LocalHomeomorph.setoid.{u2, u2} β β _inst_2 _inst_2)) (LocalHomeomorph.trans.{u2, u1, u2} β (coeSort.{succ u1, succ (succ u1)} (TopologicalSpace.Opens.{u1} α _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (TopologicalSpace.Opens.{u1} α _inst_1) α (TopologicalSpace.Opens.setLike.{u1} α _inst_1)) s) β _inst_2 (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (TopologicalSpace.Opens.{u1} α _inst_1) (SetLike.hasMem.{u1, u1} (TopologicalSpace.Opens.{u1} α _inst_1) α (TopologicalSpace.Opens.setLike.{u1} α _inst_1)) x s) _inst_1) _inst_2 (LocalHomeomorph.symm.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (TopologicalSpace.Opens.{u1} α _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (TopologicalSpace.Opens.{u1} α _inst_1) α (TopologicalSpace.Opens.setLike.{u1} α _inst_1)) s) β (Subtype.topologicalSpace.{u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (TopologicalSpace.Opens.{u1} α _inst_1) (SetLike.hasMem.{u1, u1} (TopologicalSpace.Opens.{u1} α _inst_1) α (TopologicalSpace.Opens.setLike.{u1} α _inst_1)) x s) _inst_1) _inst_2 (LocalHomeomorph.subtypeRestr.{u1, u2} α β _inst_1 _inst_2 f s _inst_5)) (LocalHomeomorph.subtypeRestr.{u1, u2} α β _inst_1 _inst_2 f' s _inst_5)) (LocalHomeomorph.restr.{u2, u2} β β _inst_2 _inst_2 (LocalHomeomorph.trans.{u2, u1, u2} β α β _inst_2 _inst_1 _inst_2 (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 f) f') (Inter.inter.{u2} (Set.{u2} β) (Set.hasInter.{u2} β) (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 f)) (Set.preimage.{u2, u1} β α (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 f)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (TopologicalSpace.Opens.{u1} α _inst_1) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (TopologicalSpace.Opens.{u1} α _inst_1) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (TopologicalSpace.Opens.{u1} α _inst_1) (Set.{u1} α) (SetLike.Set.hasCoeT.{u1, u1} (TopologicalSpace.Opens.{u1} α _inst_1) α (TopologicalSpace.Opens.setLike.{u1} α _inst_1)))) s))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (s : TopologicalSpace.Opens.{u2} α _inst_1) [_inst_5 : Nonempty.{succ u2} (Subtype.{succ u2} α (fun (x : α) => Membership.mem.{u2, u2} α (TopologicalSpace.Opens.{u2} α _inst_1) (SetLike.instMembership.{u2, u2} (TopologicalSpace.Opens.{u2} α _inst_1) α (TopologicalSpace.Opens.instSetLikeOpens.{u2} α _inst_1)) x s))] (f : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (f' : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2), HasEquiv.Equiv.{succ u1, 0} (LocalHomeomorph.{u1, u1} β β _inst_2 _inst_2) (instHasEquiv.{succ u1} (LocalHomeomorph.{u1, u1} β β _inst_2 _inst_2) (LocalHomeomorph.eqOnSourceSetoid.{u1, u1} β β _inst_2 _inst_2)) (LocalHomeomorph.trans.{u1, u2, u1} β (Subtype.{succ u2} α (fun (x : α) => Membership.mem.{u2, u2} α (TopologicalSpace.Opens.{u2} α _inst_1) (SetLike.instMembership.{u2, u2} (TopologicalSpace.Opens.{u2} α _inst_1) α (TopologicalSpace.Opens.instSetLikeOpens.{u2} α _inst_1)) x s)) β _inst_2 (instTopologicalSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (TopologicalSpace.Opens.{u2} α _inst_1) (SetLike.instMembership.{u2, u2} (TopologicalSpace.Opens.{u2} α _inst_1) α (TopologicalSpace.Opens.instSetLikeOpens.{u2} α _inst_1)) x s) _inst_1) _inst_2 (LocalHomeomorph.symm.{u2, u1} (Subtype.{succ u2} α (fun (x : α) => Membership.mem.{u2, u2} α (TopologicalSpace.Opens.{u2} α _inst_1) (SetLike.instMembership.{u2, u2} (TopologicalSpace.Opens.{u2} α _inst_1) α (TopologicalSpace.Opens.instSetLikeOpens.{u2} α _inst_1)) x s)) β (instTopologicalSpaceSubtype.{u2} α (fun (x : α) => Membership.mem.{u2, u2} α (TopologicalSpace.Opens.{u2} α _inst_1) (SetLike.instMembership.{u2, u2} (TopologicalSpace.Opens.{u2} α _inst_1) α (TopologicalSpace.Opens.instSetLikeOpens.{u2} α _inst_1)) x s) _inst_1) _inst_2 (LocalHomeomorph.subtypeRestr.{u2, u1} α β _inst_1 _inst_2 f s _inst_5)) (LocalHomeomorph.subtypeRestr.{u2, u1} α β _inst_1 _inst_2 f' s _inst_5)) (LocalHomeomorph.restr.{u1, u1} β β _inst_2 _inst_2 (LocalHomeomorph.trans.{u1, u2, u1} β α β _inst_2 _inst_1 _inst_2 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 f) f') (Inter.inter.{u1} (Set.{u1} β) (Set.instInterSet.{u1} β) (LocalEquiv.target.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 f)) (Set.preimage.{u1, u2} β α (LocalHomeomorph.toFun'.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 f)) (SetLike.coe.{u2, u2} (TopologicalSpace.Opens.{u2} α _inst_1) α (TopologicalSpace.Opens.instSetLikeOpens.{u2} α _inst_1) s))))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.subtype_restr_symm_trans_subtype_restr LocalHomeomorph.subtypeRestr_symm_trans_subtypeRestrₓ'. -/
/- This lemma characterizes the transition functions of an open subset in terms of the transition
functions of the original space. -/
theorem subtypeRestr_symm_trans_subtypeRestr (f f' : LocalHomeomorph α β) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -331,12 +331,8 @@ def Homeomorph.toLocalHomeomorph (e : α ≃ₜ β) : LocalHomeomorph α β :=
{ e.toEquiv.toLocalEquiv with
open_source := isOpen_univ
open_target := isOpen_univ
- continuous_toFun := by
- erw [← continuous_iff_continuousOn_univ]
- exact e.continuous_to_fun
- continuous_invFun := by
- erw [← continuous_iff_continuousOn_univ]
- exact e.continuous_inv_fun }
+ continuous_toFun := by erw [← continuous_iff_continuousOn_univ]; exact e.continuous_to_fun
+ continuous_invFun := by erw [← continuous_iff_continuousOn_univ]; exact e.continuous_inv_fun }
#align homeomorph.to_local_homeomorph Homeomorph.toLocalHomeomorph
-/
@@ -359,11 +355,7 @@ but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (e' : LocalEquiv.{u2, u1} α β) (h : Eq.{max (succ u2) (succ u1)} (LocalEquiv.{u2, u1} α β) (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e) e'), Eq.{max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (LocalHomeomorph.replaceEquiv.{u2, u1} α β _inst_1 _inst_2 e e' h) e
Case conversion may be inaccurate. Consider using '#align local_homeomorph.replace_equiv_eq_self LocalHomeomorph.replaceEquiv_eq_selfₓ'. -/
theorem replaceEquiv_eq_self (e : LocalHomeomorph α β) (e' : LocalEquiv α β)
- (h : e.toLocalEquiv = e') : e.replaceEquiv e' h = e :=
- by
- cases e
- subst e'
- rfl
+ (h : e.toLocalEquiv = e') : e.replaceEquiv e' h = e := by cases e; subst e'; rfl
#align local_homeomorph.replace_equiv_eq_self LocalHomeomorph.replaceEquiv_eq_self
/- warning: local_homeomorph.source_preimage_target -> LocalHomeomorph.source_preimage_target is a dubious translation:
@@ -383,11 +375,7 @@ but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2} {e' : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (LocalEquiv.{u2, u1} α β) (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e) (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e')) -> (Eq.{max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) e e')
Case conversion may be inaccurate. Consider using '#align local_homeomorph.eq_of_local_equiv_eq LocalHomeomorph.eq_of_localEquiv_eqₓ'. -/
theorem eq_of_localEquiv_eq {e e' : LocalHomeomorph α β} (h : e.toLocalEquiv = e'.toLocalEquiv) :
- e = e' := by
- cases e
- cases e'
- cases h
- rfl
+ e = e' := by cases e; cases e'; cases h; rfl
#align local_homeomorph.eq_of_local_equiv_eq LocalHomeomorph.eq_of_localEquiv_eq
/- warning: local_homeomorph.eventually_left_inverse -> LocalHomeomorph.eventually_left_inverse is a dubious translation:
@@ -598,9 +586,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align local_homeomorph.ext_iff LocalHomeomorph.ext_iffₓ'. -/
protected theorem ext_iff {e e' : LocalHomeomorph α β} :
e = e' ↔ (∀ x, e x = e' x) ∧ (∀ x, e.symm x = e'.symm x) ∧ e.source = e'.source :=
- ⟨by
- rintro rfl
- exact ⟨fun x => rfl, fun x => rfl, rfl⟩, fun h => e.ext e' h.1 h.2.1 h.2.2⟩
+ ⟨by rintro rfl; exact ⟨fun x => rfl, fun x => rfl, rfl⟩, fun h => e.ext e' h.1 h.2.1 h.2.2⟩
#align local_homeomorph.ext_iff LocalHomeomorph.ext_iff
/- warning: local_homeomorph.symm_to_local_equiv -> LocalHomeomorph.symm_toLocalEquiv is a dubious translation:
@@ -2010,13 +1996,8 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align local_homeomorph.refl_prod_refl LocalHomeomorph.refl_prod_reflₓ'. -/
@[simp]
theorem refl_prod_refl {α β : Type _} [TopologicalSpace α] [TopologicalSpace β] :
- (LocalHomeomorph.refl α).Prod (LocalHomeomorph.refl β) = LocalHomeomorph.refl (α × β) :=
- by
- ext1 ⟨x, y⟩
- · rfl
- · rintro ⟨x, y⟩
- rfl
- exact univ_prod_univ
+ (LocalHomeomorph.refl α).Prod (LocalHomeomorph.refl β) = LocalHomeomorph.refl (α × β) := by
+ ext1 ⟨x, y⟩; · rfl; · rintro ⟨x, y⟩; rfl; exact univ_prod_univ
#align local_homeomorph.refl_prod_refl LocalHomeomorph.refl_prod_refl
/- warning: local_homeomorph.prod_trans -> LocalHomeomorph.prod_trans is a dubious translation:
@@ -2128,9 +2109,7 @@ def disjointUnion (e e' : LocalHomeomorph α β) [∀ x, Decidable (x ∈ e.sour
(e.piecewise e' e.source e.target e.isImage_source_target
(e'.isImage_source_target_of_disjoint e Hs.symm Ht.symm)
(by rw [e.open_source.inter_frontier_eq, (Hs.symm.frontier_right e'.open_source).inter_eq])
- (by
- rw [e.open_source.inter_frontier_eq]
- exact eq_on_empty _ _)).replaceEquiv
+ (by rw [e.open_source.inter_frontier_eq]; exact eq_on_empty _ _)).replaceEquiv
(e.toLocalEquiv.disjointUnion e'.toLocalEquiv Hs Ht)
(LocalEquiv.disjointUnion_eq_piecewise _ _ _ _).symm
#align local_homeomorph.disjoint_union LocalHomeomorph.disjointUnion
@@ -2328,14 +2307,8 @@ def toHomeomorphOfSourceEqUnivTargetEqUniv (h : e.source = (univ : Set α)) (h'
α ≃ₜ β where
toFun := e
invFun := e.symm
- left_inv x :=
- e.left_inv <| by
- rw [h]
- exact mem_univ _
- right_inv x :=
- e.right_inv <| by
- rw [h']
- exact mem_univ _
+ left_inv x := e.left_inv <| by rw [h]; exact mem_univ _
+ right_inv x := e.right_inv <| by rw [h']; exact mem_univ _
continuous_toFun := by
rw [continuous_iff_continuousOn_univ]
convert e.continuous_to_fun
@@ -2470,10 +2443,8 @@ theorem localHomeomorphSubtypeCoe_source : s.localHomeomorphSubtypeCoe.source =
#print TopologicalSpace.Opens.localHomeomorphSubtypeCoe_target /-
@[simp, mfld_simps]
-theorem localHomeomorphSubtypeCoe_target : s.localHomeomorphSubtypeCoe.target = s :=
- by
- simp only [local_homeomorph_subtype_coe, Subtype.range_coe_subtype, mfld_simps]
- rfl
+theorem localHomeomorphSubtypeCoe_target : s.localHomeomorphSubtypeCoe.target = s := by
+ simp only [local_homeomorph_subtype_coe, Subtype.range_coe_subtype, mfld_simps]; rfl
#align topological_space.opens.local_homeomorph_subtype_coe_target TopologicalSpace.Opens.localHomeomorphSubtypeCoe_target
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -2099,10 +2099,7 @@ def piecewise (e e' : LocalHomeomorph α β) (s : Set α) (t : Set β) [∀ x, D
#align local_homeomorph.piecewise LocalHomeomorph.piecewise
/- warning: local_homeomorph.symm_piecewise -> LocalHomeomorph.symm_piecewise is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {s : Set.{u1} α} {t : Set.{u2} β} [_inst_5 : forall (x : α), Decidable (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s)] [_inst_6 : forall (y : β), Decidable (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) y t)] (H : LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e s t) (H' : LocalHomeomorph.IsImage.{u1, u2} α β _inst_1 _inst_2 e' s t) (Hs : Eq.{succ u1} (Set.{u1} α) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (frontier.{u1} α _inst_1 s)) (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e')) (frontier.{u1} α _inst_1 s))) (Heq : Set.EqOn.{u1, u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e') (Inter.inter.{u1} (Set.{u1} α) (Set.hasInter.{u1} α) (LocalEquiv.source.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e)) (frontier.{u1} α _inst_1 s))), Eq.{max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 (LocalHomeomorph.piecewise.{u1, u2} α β _inst_1 _inst_2 e e' s t (fun (y : α) => _inst_5 y) (fun (x : β) => _inst_6 x) H H' Hs Heq)) (LocalHomeomorph.piecewise.{u2, u1} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e') t s (fun (x : β) => _inst_6 x) (fun (y : α) => _inst_5 y) (LocalHomeomorph.IsImage.symm.{u1, u2} α β _inst_1 _inst_2 e s t H) (LocalHomeomorph.IsImage.symm.{u1, u2} α β _inst_1 _inst_2 e' s t H') (LocalHomeomorph.IsImage.inter_eq_of_inter_eq_of_eqOn.{u1, u2} α β _inst_1 _inst_2 e (frontier.{u1} α _inst_1 s) (frontier.{u2} β _inst_2 t) e' (LocalHomeomorph.IsImage.frontier.{u1, u2} α β _inst_1 _inst_2 e s t H) (LocalHomeomorph.IsImage.frontier.{u1, u2} α β _inst_1 _inst_2 e' s t H') Hs Heq) (LocalHomeomorph.IsImage.symm_eqOn_of_inter_eq_of_eqOn.{u1, u2} α β _inst_1 _inst_2 e (frontier.{u1} α _inst_1 s) (frontier.{u2} β _inst_2 t) e' (LocalHomeomorph.IsImage.frontier.{u1, u2} α β _inst_1 _inst_2 e s t H) Hs Heq))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (e : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) (e' : LocalHomeomorph.{u2, u1} α β _inst_1 _inst_2) {s : Set.{u2} α} {t : Set.{u1} β} [_inst_5 : forall (x : α), Decidable (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s)] [_inst_6 : forall (y : β), Decidable (Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) y t)] (H : LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e s t) (H' : LocalHomeomorph.IsImage.{u2, u1} α β _inst_1 _inst_2 e' s t) (Hs : Eq.{succ u2} (Set.{u2} α) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (frontier.{u2} α _inst_1 s)) (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e')) (frontier.{u2} α _inst_1 s))) (Heq : Set.EqOn.{u2, u1} α β (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e) (LocalHomeomorph.toFun'.{u2, u1} α β _inst_1 _inst_2 e') (Inter.inter.{u2} (Set.{u2} α) (Set.instInterSet.{u2} α) (LocalEquiv.source.{u2, u1} α β (LocalHomeomorph.toLocalEquiv.{u2, u1} α β _inst_1 _inst_2 e)) (frontier.{u2} α _inst_1 s))), Eq.{max (succ u2) (succ u1)} (LocalHomeomorph.{u1, u2} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 (LocalHomeomorph.piecewise.{u2, u1} α β _inst_1 _inst_2 e e' s t (fun (y : α) => _inst_5 y) (fun (x : β) => _inst_6 x) H H' Hs Heq)) (LocalHomeomorph.piecewise.{u1, u2} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e) (LocalHomeomorph.symm.{u2, u1} α β _inst_1 _inst_2 e') t s (fun (x : β) => _inst_6 x) (fun (y : α) => _inst_5 y) (LocalHomeomorph.IsImage.symm.{u1, u2} α β _inst_1 _inst_2 e s t H) (LocalHomeomorph.IsImage.symm.{u1, u2} α β _inst_1 _inst_2 e' s t H') (LocalHomeomorph.IsImage.inter_eq_of_inter_eq_of_eqOn.{u1, u2} α β _inst_1 _inst_2 e (frontier.{u2} α _inst_1 s) (frontier.{u1} β _inst_2 t) e' (LocalHomeomorph.IsImage.frontier.{u1, u2} α β _inst_1 _inst_2 e s t H) (LocalHomeomorph.IsImage.frontier.{u1, u2} α β _inst_1 _inst_2 e' s t H') Hs Heq) (LocalHomeomorph.IsImage.symm_eqOn_of_inter_eq_of_eqOn.{u1, u2} α β _inst_1 _inst_2 e (frontier.{u2} α _inst_1 s) (frontier.{u1} β _inst_2 t) e' (LocalHomeomorph.IsImage.frontier.{u1, u2} α β _inst_1 _inst_2 e s t H) Hs Heq))
+<too large>
Case conversion may be inaccurate. Consider using '#align local_homeomorph.symm_piecewise LocalHomeomorph.symm_piecewiseₓ'. -/
@[simp]
theorem symm_piecewise (e e' : LocalHomeomorph α β) {s : Set α} {t : Set β} [∀ x, Decidable (x ∈ s)]
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce7e9d53d4bbc38065db3b595cd5bd73c323bc1d
@@ -2435,7 +2435,7 @@ theorem continuousAt_iff {f : α → β} {g : β → γ} (hf : OpenEmbedding f)
ContinuousAt (g ∘ f) x ↔ ContinuousAt g (f x) :=
by
haveI : Nonempty α := ⟨x⟩
- convert ((hf.to_local_homeomorph f).continuousAt_iff_continuousAt_comp_right _).symm
+ convert((hf.to_local_homeomorph f).continuousAt_iff_continuousAt_comp_right _).symm
· apply (LocalHomeomorph.left_inv _ _).symm
simp
· simp
mathlib commit https://github.com/leanprover-community/mathlib/commit/3ade05ac9447ae31a22d2ea5423435e054131240
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
! This file was ported from Lean 3 source module topology.local_homeomorph
-! leanprover-community/mathlib commit f2ce6086713c78a7f880485f7917ea547a215982
+! leanprover-community/mathlib commit 23aa88e32dcc9d2a24cca7bc23268567ed4cd7d6
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -14,6 +14,9 @@ import Mathbin.Topology.Sets.Opens
/-!
# Local homeomorphisms
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
This file defines homeomorphisms between open subsets of topological spaces. An element `e` of
`local_homeomorph α β` is an extension of `local_equiv α β`, i.e., it is a pair of functions
`e.to_fun` and `e.inv_fun`, inverse of each other on the sets `e.source` and `e.target`.
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -51,7 +51,7 @@ variable {X X' : Type*} {Y Y' : Type*} {Z Z' : Type*}
[TopologicalSpace Z] [TopologicalSpace Z']
/-- Partial homeomorphisms, defined on open subsets of the space -/
--- Porting note: commented @[nolint has_nonempty_instance]
+-- Porting note(#5171): this linter isn't ported yet. @[nolint has_nonempty_instance]
structure PartialHomeomorph (X : Type*) (Y : Type*) [TopologicalSpace X]
[TopologicalSpace Y] extends PartialEquiv X Y where
open_source : IsOpen source
All of these changes appear to be oversights to me.
@@ -64,7 +64,7 @@ namespace PartialHomeomorph
variable (e : PartialHomeomorph X Y)
-/- Basic properties; inverse (symm instance) -/
+/-! Basic properties; inverse (symm instance) -/
section Basic
/-- Coercion of a partial homeomorphisms to a function. We don't use `e.toFun` because it is
actually `e.toPartialEquiv.toFun`, so `simp` will apply lemmas about `toPartialEquiv`.
@@ -789,7 +789,7 @@ theorem refl_symm : (PartialHomeomorph.refl X).symm = PartialHomeomorph.refl X :
rfl
#align local_homeomorph.refl_symm PartialHomeomorph.refl_symm
-/- ofSet: the identity on a set `s` -/
+/-! ofSet: the identity on a set `s` -/
section ofSet
variable {s : Set X} (hs : IsOpen s)
@@ -820,7 +820,7 @@ theorem ofSet_univ_eq_refl : ofSet univ isOpen_univ = PartialHomeomorph.refl X :
end ofSet
-/- `trans`: composition of two partial homeomorphisms -/
+/-! `trans`: composition of two partial homeomorphisms -/
section trans
variable (e' : PartialHomeomorph Y Z)
@@ -948,7 +948,7 @@ theorem restr_trans (s : Set X) : (e.restr s).trans e' = (e.trans e').restr s :=
end trans
-/- `EqOnSource`: equivalence on their source -/
+/-! `EqOnSource`: equivalence on their source -/
section EqOnSource
/-- `EqOnSource e e'` means that `e` and `e'` have the same source, and coincide there. They
@@ -1007,7 +1007,7 @@ theorem EqOnSource.restr {e e' : PartialHomeomorph X Y} (he : e ≈ e') (s : Set
PartialEquiv.EqOnSource.restr he _
#align local_homeomorph.eq_on_source.restr PartialHomeomorph.EqOnSource.restr
-/- Two equivalent partial homeomorphisms are equal when the source and target are `univ`. -/
+/-- Two equivalent partial homeomorphisms are equal when the source and target are `univ`. -/
theorem Set.EqOn.restr_eqOn_source {e e' : PartialHomeomorph X Y}
(h : EqOn e e' (e.source ∩ e'.source)) : e.restr e'.source ≈ e'.restr e.source := by
constructor
@@ -1035,7 +1035,7 @@ theorem eq_of_eqOnSource_univ {e e' : PartialHomeomorph X Y} (h : e ≈ e') (s :
end EqOnSource
-/- product of two partial homeomorphisms -/
+/-! product of two partial homeomorphisms -/
section Prod
/-- The product of two partial homeomorphisms, as a partial homeomorphism on the product space. -/
@@ -1089,7 +1089,7 @@ theorem prod_eq_prod_of_nonempty'
end Prod
-/- finite product of partial homeomorphisms -/
+/-! finite product of partial homeomorphisms -/
section Pi
variable {ι : Type*} [Finite ι] {X Y : ι → Type*} [∀ i, TopologicalSpace (X i)]
@@ -1109,7 +1109,7 @@ def pi : PartialHomeomorph (∀ i, X i) (∀ i, Y i) where
end Pi
-/- combining two partial homeomorphisms using `Set.piecewise` -/
+/-! combining two partial homeomorphisms using `Set.piecewise` -/
section Piecewise
/-- Combine two `PartialHomeomorph`s using `Set.piecewise`. The source of the new
@@ -1392,7 +1392,7 @@ lemma toPartialHomeomorph_right_inv {x : Y} (hx : x ∈ Set.range f) :
end OpenEmbedding
-/- inclusion of an open set in a topological space -/
+/-! inclusion of an open set in a topological space -/
namespace TopologicalSpace.Opens
/- `Nonempty s` is not a type class argument because `s`, being a subset, rarely comes with a type
@@ -1458,7 +1458,7 @@ theorem trans_transHomeomorph (e : PartialHomeomorph X Y) (e' : PartialHomeomorp
end transHomeomorph
-/- `subtypeRestr`: restriction to a subtype -/
+/-! `subtypeRestr`: restriction to a subtype -/
section subtypeRestr
open TopologicalSpace
@@ -1494,7 +1494,7 @@ theorem map_subtype_source {x : s} (hxe : (x : X) ∈ e.source) :
exact x.prop
#align local_homeomorph.map_subtype_source PartialHomeomorph.map_subtype_source
-/- This lemma characterizes the transition functions of an open subset in terms of the transition
+/-- This lemma characterizes the transition functions of an open subset in terms of the transition
functions of the original space. -/
theorem subtypeRestr_symm_trans_subtypeRestr (f f' : PartialHomeomorph X Y) :
(f.subtypeRestr hs).symm.trans (f'.subtypeRestr hs) ≈
Empty lines were removed by executing the following Python script twice
import os
import re
# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
for filename in files:
if filename.endswith('.lean'):
file_path = os.path.join(dir_path, filename)
# Open the file and read its contents
with open(file_path, 'r') as file:
content = file.read()
# Use a regular expression to replace sequences of "variable" lines separated by empty lines
# with sequences without empty lines
modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)
# Write the modified content back to the file
with open(file_path, 'w') as file:
file.write(modified_content)
@@ -1464,7 +1464,6 @@ section subtypeRestr
open TopologicalSpace
variable (e : PartialHomeomorph X Y)
-
variable {s : Opens X} (hs : Nonempty s)
/-- The restriction of a partial homeomorphism `e` to an open subset `s` of the domain type
@@ -1276,7 +1276,8 @@ theorem nhds_eq_comap_inf_principal {x} (hx : x ∈ e.source) :
/-- If a partial homeomorphism has source and target equal to univ, then it induces a homeomorphism
between the whole spaces, expressed in this definition. -/
-@[simps (config := mfld_cfg) apply symm_apply] -- Porting note: todo: add a `PartialEquiv` version
+@[simps (config := mfld_cfg) apply symm_apply]
+-- Porting note (#11215): TODO: add a `PartialEquiv` version
def toHomeomorphOfSourceEqUnivTargetEqUniv (h : e.source = (univ : Set X)) (h' : e.target = univ) :
X ≃ₜ Y where
toFun := e
ball
and bex
from lemma names (#10816)
ball
for "bounded forall" and bex
for "bounded exists" are from experience very confusing abbreviations. This PR renames them to forall_mem
and exists_mem
in the few Set
lemma names that mention them.
Also deprecate ball_image_of_ball
, mem_image_elim
, mem_image_elim_on
since those lemmas are duplicates of the renamed lemmas (apart from argument order and implicitness, which I am also fixing by making the binder in the RHS of forall_mem_image
semi-implicit), have obscure names and are completely unused.
@@ -1189,7 +1189,7 @@ theorem continuousAt_iff_continuousAt_comp_right {f : Y → Z} {x : Y} (h : x
on the right is continuous on the corresponding set. -/
theorem continuousOn_iff_continuousOn_comp_right {f : Y → Z} {s : Set Y} (h : s ⊆ e.target) :
ContinuousOn f s ↔ ContinuousOn (f ∘ e) (e.source ∩ e ⁻¹' s) := by
- simp only [← e.symm_image_eq_source_inter_preimage h, ContinuousOn, ball_image_iff]
+ simp only [← e.symm_image_eq_source_inter_preimage h, ContinuousOn, forall_mem_image]
refine' forall₂_congr fun x hx => _
rw [e.continuousWithinAt_iff_continuousWithinAt_comp_right (h hx),
e.symm_image_eq_source_inter_preimage h, inter_comm, continuousWithinAt_inter]
@@ -1246,7 +1246,7 @@ def homeomorphOfImageSubsetSource {s : Set X} {t : Set Y} (hs : s ⊆ e.source)
s ≃ₜ t :=
have h₁ : MapsTo e s t := mapsTo'.2 ht.subset
have h₂ : t ⊆ e.target := ht ▸ e.image_source_eq_target ▸ image_subset e hs
- have h₃ : MapsTo e.symm t s := ht ▸ ball_image_iff.2 fun _x hx =>
+ have h₃ : MapsTo e.symm t s := ht ▸ forall_mem_image.2 fun _x hx =>
(e.left_inv (hs hx)).symm ▸ hx
{ toFun := MapsTo.restrict e s t h₁
invFun := MapsTo.restrict e.symm t s h₃
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -51,7 +51,7 @@ variable {X X' : Type*} {Y Y' : Type*} {Z Z' : Type*}
[TopologicalSpace Z] [TopologicalSpace Z']
/-- Partial homeomorphisms, defined on open subsets of the space -/
--- porting note: commented @[nolint has_nonempty_instance]
+-- Porting note: commented @[nolint has_nonempty_instance]
structure PartialHomeomorph (X : Type*) (Y : Type*) [TopologicalSpace X]
[TopologicalSpace Y] extends PartialEquiv X Y where
open_source : IsOpen source
@@ -1257,7 +1257,7 @@ def homeomorphOfImageSubsetSource {s : Set X} {t : Set Y} (hs : s ⊆ e.source)
#align local_homeomorph.homeomorph_of_image_subset_source PartialHomeomorph.homeomorphOfImageSubsetSource
/-- A partial homeomorphism defines a homeomorphism between its source and target. -/
-@[simps!] -- porting note: new `simps`
+@[simps!] -- Porting note: new `simps`
def toHomeomorphSourceTarget : e.source ≃ₜ e.target :=
e.homeomorphOfImageSubsetSource subset_rfl e.image_source_eq_target
#align local_homeomorph.to_homeomorph_source_target PartialHomeomorph.toHomeomorphSourceTarget
@@ -1276,7 +1276,7 @@ theorem nhds_eq_comap_inf_principal {x} (hx : x ∈ e.source) :
/-- If a partial homeomorphism has source and target equal to univ, then it induces a homeomorphism
between the whole spaces, expressed in this definition. -/
-@[simps (config := mfld_cfg) apply symm_apply] -- porting note: todo: add a `PartialEquiv` version
+@[simps (config := mfld_cfg) apply symm_apply] -- Porting note: todo: add a `PartialEquiv` version
def toHomeomorphOfSourceEqUnivTargetEqUniv (h : e.source = (univ : Set X)) (h' : e.target = univ) :
X ≃ₜ Y where
toFun := e
It is always used in conjunction with a hypothesis hs
about s
.
In Lean 3, these arguments were kept explicit on purpose: given a definition myDef {x : α} (hx : MyProp x)
,
if the proof of hx
was nontrivial (not a variable), Lean would pretty-print it as myDef _
.
In Lean 4, setting pp.proofs.withType
or pp.proofs
to true makes such terms pretty-print as myDef (x : MyProp)
.
Hence, this workaround is no longer necessary.
Follow-up to #9894.
@@ -1464,7 +1464,7 @@ open TopologicalSpace
variable (e : PartialHomeomorph X Y)
-variable (s : Opens X) (hs : Nonempty s)
+variable {s : Opens X} (hs : Nonempty s)
/-- The restriction of a partial homeomorphism `e` to an open subset `s` of the domain type
produces a partial homeomorphism whose domain is the subtype `s`. -/
@@ -1472,24 +1472,23 @@ noncomputable def subtypeRestr : PartialHomeomorph s Y :=
(s.partialHomeomorphSubtypeCoe hs).trans e
#align local_homeomorph.subtype_restr PartialHomeomorph.subtypeRestr
-theorem subtypeRestr_def : e.subtypeRestr s hs = (s.partialHomeomorphSubtypeCoe hs).trans e :=
+theorem subtypeRestr_def : e.subtypeRestr hs = (s.partialHomeomorphSubtypeCoe hs).trans e :=
rfl
#align local_homeomorph.subtype_restr_def PartialHomeomorph.subtypeRestr_def
@[simp, mfld_simps]
theorem subtypeRestr_coe :
- ((e.subtypeRestr s hs : PartialHomeomorph s Y) : s → Y) = Set.restrict ↑s (e : X → Y) :=
+ ((e.subtypeRestr hs : PartialHomeomorph s Y) : s → Y) = Set.restrict ↑s (e : X → Y) :=
rfl
#align local_homeomorph.subtype_restr_coe PartialHomeomorph.subtypeRestr_coe
@[simp, mfld_simps]
-theorem subtypeRestr_source : (e.subtypeRestr s hs).source = (↑) ⁻¹' e.source := by
+theorem subtypeRestr_source : (e.subtypeRestr hs).source = (↑) ⁻¹' e.source := by
simp only [subtypeRestr_def, mfld_simps]
#align local_homeomorph.subtype_restr_source PartialHomeomorph.subtypeRestr_source
-variable {s} in
theorem map_subtype_source {x : s} (hxe : (x : X) ∈ e.source) :
- e x ∈ (e.subtypeRestr s hs).target := by
+ e x ∈ (e.subtypeRestr hs).target := by
refine' ⟨e.map_source hxe, _⟩
rw [s.partialHomeomorphSubtypeCoe_target, mem_preimage, e.leftInvOn hxe]
exact x.prop
@@ -1498,7 +1497,7 @@ theorem map_subtype_source {x : s} (hxe : (x : X) ∈ e.source) :
/- This lemma characterizes the transition functions of an open subset in terms of the transition
functions of the original space. -/
theorem subtypeRestr_symm_trans_subtypeRestr (f f' : PartialHomeomorph X Y) :
- (f.subtypeRestr s hs).symm.trans (f'.subtypeRestr s hs) ≈
+ (f.subtypeRestr hs).symm.trans (f'.subtypeRestr hs) ≈
(f.symm.trans f').restr (f.target ∩ f.symm ⁻¹' s) := by
simp only [subtypeRestr_def, trans_symm_eq_symm_trans_symm]
have openness₁ : IsOpen (f.target ∩ f.symm ⁻¹' s) := f.isOpen_inter_preimage_symm s.2
@@ -1515,17 +1514,17 @@ theorem subtypeRestr_symm_trans_subtypeRestr (f f' : PartialHomeomorph X Y) :
simp only [mfld_simps, Setoid.refl]
#align local_homeomorph.subtype_restr_symm_trans_subtype_restr PartialHomeomorph.subtypeRestr_symm_trans_subtypeRestr
-theorem subtypeRestr_symm_eqOn (U : Opens X) (hU : Nonempty U) :
- EqOn e.symm (Subtype.val ∘ (e.subtypeRestr U hU).symm) (e.subtypeRestr U hU).target := by
+theorem subtypeRestr_symm_eqOn {U : Opens X} (hU : Nonempty U) :
+ EqOn e.symm (Subtype.val ∘ (e.subtypeRestr hU).symm) (e.subtypeRestr hU).target := by
intro y hy
rw [eq_comm, eq_symm_apply _ _ hy.1]
· change restrict _ e _ = _
- rw [← subtypeRestr_coe, (e.subtypeRestr U hU).right_inv hy]
+ rw [← subtypeRestr_coe, (e.subtypeRestr hU).right_inv hy]
· have := map_target _ hy; rwa [subtypeRestr_source] at this
theorem subtypeRestr_symm_eqOn_of_le {U V : Opens X} (hU : Nonempty U) (hV : Nonempty V)
- (hUV : U ≤ V) : EqOn (e.subtypeRestr V hV).symm (Set.inclusion hUV ∘ (e.subtypeRestr U hU).symm)
- (e.subtypeRestr U hU).target := by
+ (hUV : U ≤ V) : EqOn (e.subtypeRestr hV).symm (Set.inclusion hUV ∘ (e.subtypeRestr hU).symm)
+ (e.subtypeRestr hU).target := by
set i := Set.inclusion hUV
intro y hy
dsimp [PartialHomeomorph.subtypeRestr_def] at hy ⊢
@@ -1092,7 +1092,7 @@ end Prod
/- finite product of partial homeomorphisms -/
section Pi
-variable {ι : Type*} [Fintype ι] {X Y : ι → Type*} [∀ i, TopologicalSpace (X i)]
+variable {ι : Type*} [Finite ι] {X Y : ι → Type*} [∀ i, TopologicalSpace (X i)]
[∀ i, TopologicalSpace (Y i)] (ei : ∀ i, PartialHomeomorph (X i) (Y i))
/-- The product of a finite family of `PartialHomeomorph`s. -/
Greek letters are dead, long live X, Y and Z. Same procedure as in previous renames.
@@ -12,7 +12,7 @@ import Mathlib.Topology.Sets.Opens
# Partial homeomorphisms
This file defines homeomorphisms between open subsets of topological spaces. An element `e` of
-`PartialHomeomorph α β` is an extension of `PartialEquiv α β`, i.e., it is a pair of functions
+`PartialHomeomorph X Y` is an extension of `PartialEquiv X Y`, i.e., it is a pair of functions
`e.toFun` and `e.invFun`, inverse of each other on the sets `e.source` and `e.target`.
Additionally, we require that these sets are open, and that the functions are continuous on them.
Equivalently, they are homeomorphisms there.
@@ -46,13 +46,14 @@ then it should use `e.source ∩ s` or `e.target ∩ t`, not `s ∩ e.source` or
open Function Set Filter Topology
-variable {α : Type*} {β : Type*} {γ : Type*} {δ : Type*} [TopologicalSpace α]
- [TopologicalSpace β] [TopologicalSpace γ] [TopologicalSpace δ]
+variable {X X' : Type*} {Y Y' : Type*} {Z Z' : Type*}
+ [TopologicalSpace X] [TopologicalSpace X'] [TopologicalSpace Y] [TopologicalSpace Y']
+ [TopologicalSpace Z] [TopologicalSpace Z']
/-- Partial homeomorphisms, defined on open subsets of the space -/
-- porting note: commented @[nolint has_nonempty_instance]
-structure PartialHomeomorph (α : Type*) (β : Type*) [TopologicalSpace α]
- [TopologicalSpace β] extends PartialEquiv α β where
+structure PartialHomeomorph (X : Type*) (Y : Type*) [TopologicalSpace X]
+ [TopologicalSpace Y] extends PartialEquiv X Y where
open_source : IsOpen source
open_target : IsOpen target
continuousOn_toFun : ContinuousOn toFun source
@@ -61,24 +62,23 @@ structure PartialHomeomorph (α : Type*) (β : Type*) [TopologicalSpace α]
namespace PartialHomeomorph
-variable (e : PartialHomeomorph α β)
+variable (e : PartialHomeomorph X Y)
/- Basic properties; inverse (symm instance) -/
section Basic
-
/-- Coercion of a partial homeomorphisms to a function. We don't use `e.toFun` because it is
actually `e.toPartialEquiv.toFun`, so `simp` will apply lemmas about `toPartialEquiv`.
While we may want to switch to this behavior later, doing it mid-port will break a lot of proofs. -/
-@[coe] def toFun' : α → β := e.toFun
+@[coe] def toFun' : X → Y := e.toFun
/-- Coercion of a `PartialHomeomorph` to function.
Note that a `PartialHomeomorph` is not `DFunLike`. -/
-instance : CoeFun (PartialHomeomorph α β) fun _ => α → β :=
+instance : CoeFun (PartialHomeomorph X Y) fun _ => X → Y :=
⟨fun e => e.toFun'⟩
/-- The inverse of a partial homeomorphism -/
@[symm]
-protected def symm : PartialHomeomorph β α where
+protected def symm : PartialHomeomorph Y X where
toPartialEquiv := e.toPartialEquiv.symm
open_source := e.open_target
open_target := e.open_source
@@ -88,11 +88,11 @@ protected def symm : PartialHomeomorph β α where
/-- See Note [custom simps projection]. We need to specify this projection explicitly in this case,
because it is a composition of multiple projections. -/
-def Simps.apply (e : PartialHomeomorph α β) : α → β := e
+def Simps.apply (e : PartialHomeomorph X Y) : X → Y := e
#align local_homeomorph.simps.apply PartialHomeomorph.Simps.apply
/-- See Note [custom simps projection] -/
-def Simps.symm_apply (e : PartialHomeomorph α β) : β → α := e.symm
+def Simps.symm_apply (e : PartialHomeomorph X Y) : Y → X := e.symm
#align local_homeomorph.simps.symm_apply PartialHomeomorph.Simps.symm_apply
initialize_simps_projections PartialHomeomorph (toFun → apply, invFun → symm_apply)
@@ -106,45 +106,45 @@ theorem continuousOn_symm : ContinuousOn e.symm e.target :=
#align local_homeomorph.continuous_on_symm PartialHomeomorph.continuousOn_symm
@[simp, mfld_simps]
-theorem mk_coe (e : PartialEquiv α β) (a b c d) : (PartialHomeomorph.mk e a b c d : α → β) = e :=
+theorem mk_coe (e : PartialEquiv X Y) (a b c d) : (PartialHomeomorph.mk e a b c d : X → Y) = e :=
rfl
#align local_homeomorph.mk_coe PartialHomeomorph.mk_coe
@[simp, mfld_simps]
-theorem mk_coe_symm (e : PartialEquiv α β) (a b c d) :
- ((PartialHomeomorph.mk e a b c d).symm : β → α) = e.symm :=
+theorem mk_coe_symm (e : PartialEquiv X Y) (a b c d) :
+ ((PartialHomeomorph.mk e a b c d).symm : Y → X) = e.symm :=
rfl
#align local_homeomorph.mk_coe_symm PartialHomeomorph.mk_coe_symm
theorem toPartialEquiv_injective :
- Injective (toPartialEquiv : PartialHomeomorph α β → PartialEquiv α β)
+ Injective (toPartialEquiv : PartialHomeomorph X Y → PartialEquiv X Y)
| ⟨_, _, _, _, _⟩, ⟨_, _, _, _, _⟩, rfl => rfl
#align local_homeomorph.to_local_equiv_injective PartialHomeomorph.toPartialEquiv_injective
/- Register a few simp lemmas to make sure that `simp` puts the application of a local
homeomorphism in its normal form, i.e., in terms of its coercion to a function. -/
@[simp, mfld_simps]
-theorem toFun_eq_coe (e : PartialHomeomorph α β) : e.toFun = e :=
+theorem toFun_eq_coe (e : PartialHomeomorph X Y) : e.toFun = e :=
rfl
#align local_homeomorph.to_fun_eq_coe PartialHomeomorph.toFun_eq_coe
@[simp, mfld_simps]
-theorem invFun_eq_coe (e : PartialHomeomorph α β) : e.invFun = e.symm :=
+theorem invFun_eq_coe (e : PartialHomeomorph X Y) : e.invFun = e.symm :=
rfl
#align local_homeomorph.inv_fun_eq_coe PartialHomeomorph.invFun_eq_coe
@[simp, mfld_simps]
-theorem coe_coe : (e.toPartialEquiv : α → β) = e :=
+theorem coe_coe : (e.toPartialEquiv : X → Y) = e :=
rfl
#align local_homeomorph.coe_coe PartialHomeomorph.coe_coe
@[simp, mfld_simps]
-theorem coe_coe_symm : (e.toPartialEquiv.symm : β → α) = e.symm :=
+theorem coe_coe_symm : (e.toPartialEquiv.symm : Y → X) = e.symm :=
rfl
#align local_homeomorph.coe_coe_symm PartialHomeomorph.coe_coe_symm
@[simp, mfld_simps]
-theorem map_source {x : α} (h : x ∈ e.source) : e x ∈ e.target :=
+theorem map_source {x : X} (h : x ∈ e.source) : e x ∈ e.target :=
e.map_source' h
#align local_homeomorph.map_source PartialHomeomorph.map_source
@@ -153,21 +153,21 @@ lemma map_source'' : e '' e.source ⊆ e.target :=
fun _ ⟨_, hx, hex⟩ ↦ mem_of_eq_of_mem (id hex.symm) (e.map_source' hx)
@[simp, mfld_simps]
-theorem map_target {x : β} (h : x ∈ e.target) : e.symm x ∈ e.source :=
+theorem map_target {x : Y} (h : x ∈ e.target) : e.symm x ∈ e.source :=
e.map_target' h
#align local_homeomorph.map_target PartialHomeomorph.map_target
@[simp, mfld_simps]
-theorem left_inv {x : α} (h : x ∈ e.source) : e.symm (e x) = x :=
+theorem left_inv {x : X} (h : x ∈ e.source) : e.symm (e x) = x :=
e.left_inv' h
#align local_homeomorph.left_inv PartialHomeomorph.left_inv
@[simp, mfld_simps]
-theorem right_inv {x : β} (h : x ∈ e.target) : e (e.symm x) = x :=
+theorem right_inv {x : Y} (h : x ∈ e.target) : e (e.symm x) = x :=
e.right_inv' h
#align local_homeomorph.right_inv PartialHomeomorph.right_inv
-theorem eq_symm_apply {x : α} {y : β} (hx : x ∈ e.source) (hy : y ∈ e.target) :
+theorem eq_symm_apply {x : X} {y : Y} (hx : x ∈ e.source) (hy : y ∈ e.target) :
x = e.symm y ↔ e x = y :=
e.toPartialEquiv.eq_symm_apply hx hy
#align local_homeomorph.eq_symm_apply PartialHomeomorph.eq_symm_apply
@@ -207,8 +207,8 @@ end Basic
to an open set `s` in the domain and to `t` in the codomain. -/
@[simps! (config := .asFn) apply symm_apply toPartialEquiv,
simps! (config := .lemmasOnly) source target]
-def _root_.Homeomorph.toPartialHomeomorphOfImageEq (e : α ≃ₜ β) (s : Set α) (hs : IsOpen s)
- (t : Set β) (h : e '' s = t) : PartialHomeomorph α β where
+def _root_.Homeomorph.toPartialHomeomorphOfImageEq (e : X ≃ₜ Y) (s : Set X) (hs : IsOpen s)
+ (t : Set Y) (h : e '' s = t) : PartialHomeomorph X Y where
toPartialEquiv := e.toPartialEquivOfImageEq s t h
open_source := hs
open_target := by simpa [← h]
@@ -217,13 +217,13 @@ def _root_.Homeomorph.toPartialHomeomorphOfImageEq (e : α ≃ₜ β) (s : Set
/-- A homeomorphism induces a partial homeomorphism on the whole space -/
@[simps! (config := mfld_cfg)]
-def _root_.Homeomorph.toPartialHomeomorph (e : α ≃ₜ β) : PartialHomeomorph α β :=
+def _root_.Homeomorph.toPartialHomeomorph (e : X ≃ₜ Y) : PartialHomeomorph X Y :=
e.toPartialHomeomorphOfImageEq univ isOpen_univ univ <| by rw [image_univ, e.surjective.range_eq]
#align homeomorph.to_local_homeomorph Homeomorph.toPartialHomeomorph
/-- Replace `toPartialEquiv` field to provide better definitional equalities. -/
-def replaceEquiv (e : PartialHomeomorph α β) (e' : PartialEquiv α β) (h : e.toPartialEquiv = e') :
- PartialHomeomorph α β where
+def replaceEquiv (e : PartialHomeomorph X Y) (e' : PartialEquiv X Y) (h : e.toPartialEquiv = e') :
+ PartialHomeomorph X Y where
toPartialEquiv := e'
open_source := h ▸ e.open_source
open_target := h ▸ e.open_target
@@ -231,7 +231,7 @@ def replaceEquiv (e : PartialHomeomorph α β) (e' : PartialEquiv α β) (h : e.
continuousOn_invFun := h ▸ e.continuousOn_invFun
#align local_homeomorph.replace_equiv PartialHomeomorph.replaceEquiv
-theorem replaceEquiv_eq_self (e' : PartialEquiv α β)
+theorem replaceEquiv_eq_self (e' : PartialEquiv X Y)
(h : e.toPartialEquiv = e') : e.replaceEquiv e' h = e := by
cases e
subst e'
@@ -243,7 +243,7 @@ theorem source_preimage_target : e.source ⊆ e ⁻¹' e.target :=
#align local_homeomorph.source_preimage_target PartialHomeomorph.source_preimage_target
@[deprecated toPartialEquiv_injective]
-theorem eq_of_partialEquiv_eq {e e' : PartialHomeomorph α β}
+theorem eq_of_partialEquiv_eq {e e' : PartialHomeomorph X Y}
(h : e.toPartialEquiv = e'.toPartialEquiv) : e = e' :=
toPartialEquiv_injective h
#align local_homeomorph.eq_of_local_equiv_eq PartialHomeomorph.eq_of_partialEquiv_eq
@@ -275,49 +275,49 @@ theorem eventually_ne_nhdsWithin {x} (hx : x ∈ e.source) :
mt fun h => by rw [mem_singleton_iff, ← e.left_inv hx, ← h, hx']
#align local_homeomorph.eventually_ne_nhds_within PartialHomeomorph.eventually_ne_nhdsWithin
-theorem nhdsWithin_source_inter {x} (hx : x ∈ e.source) (s : Set α) : 𝓝[e.source ∩ s] x = 𝓝[s] x :=
+theorem nhdsWithin_source_inter {x} (hx : x ∈ e.source) (s : Set X) : 𝓝[e.source ∩ s] x = 𝓝[s] x :=
nhdsWithin_inter_of_mem (mem_nhdsWithin_of_mem_nhds <| IsOpen.mem_nhds e.open_source hx)
#align local_homeomorph.nhds_within_source_inter PartialHomeomorph.nhdsWithin_source_inter
-theorem nhdsWithin_target_inter {x} (hx : x ∈ e.target) (s : Set β) : 𝓝[e.target ∩ s] x = 𝓝[s] x :=
+theorem nhdsWithin_target_inter {x} (hx : x ∈ e.target) (s : Set Y) : 𝓝[e.target ∩ s] x = 𝓝[s] x :=
e.symm.nhdsWithin_source_inter hx s
#align local_homeomorph.nhds_within_target_inter PartialHomeomorph.nhdsWithin_target_inter
-theorem image_eq_target_inter_inv_preimage {s : Set α} (h : s ⊆ e.source) :
+theorem image_eq_target_inter_inv_preimage {s : Set X} (h : s ⊆ e.source) :
e '' s = e.target ∩ e.symm ⁻¹' s :=
e.toPartialEquiv.image_eq_target_inter_inv_preimage h
#align local_homeomorph.image_eq_target_inter_inv_preimage PartialHomeomorph.image_eq_target_inter_inv_preimage
-theorem image_source_inter_eq' (s : Set α) : e '' (e.source ∩ s) = e.target ∩ e.symm ⁻¹' s :=
+theorem image_source_inter_eq' (s : Set X) : e '' (e.source ∩ s) = e.target ∩ e.symm ⁻¹' s :=
e.toPartialEquiv.image_source_inter_eq' s
#align local_homeomorph.image_source_inter_eq' PartialHomeomorph.image_source_inter_eq'
-theorem image_source_inter_eq (s : Set α) :
+theorem image_source_inter_eq (s : Set X) :
e '' (e.source ∩ s) = e.target ∩ e.symm ⁻¹' (e.source ∩ s) :=
e.toPartialEquiv.image_source_inter_eq s
#align local_homeomorph.image_source_inter_eq PartialHomeomorph.image_source_inter_eq
-theorem symm_image_eq_source_inter_preimage {s : Set β} (h : s ⊆ e.target) :
+theorem symm_image_eq_source_inter_preimage {s : Set Y} (h : s ⊆ e.target) :
e.symm '' s = e.source ∩ e ⁻¹' s :=
e.symm.image_eq_target_inter_inv_preimage h
#align local_homeomorph.symm_image_eq_source_inter_preimage PartialHomeomorph.symm_image_eq_source_inter_preimage
-theorem symm_image_target_inter_eq (s : Set β) :
+theorem symm_image_target_inter_eq (s : Set Y) :
e.symm '' (e.target ∩ s) = e.source ∩ e ⁻¹' (e.target ∩ s) :=
e.symm.image_source_inter_eq _
#align local_homeomorph.symm_image_target_inter_eq PartialHomeomorph.symm_image_target_inter_eq
-theorem source_inter_preimage_inv_preimage (s : Set α) :
+theorem source_inter_preimage_inv_preimage (s : Set X) :
e.source ∩ e ⁻¹' (e.symm ⁻¹' s) = e.source ∩ s :=
e.toPartialEquiv.source_inter_preimage_inv_preimage s
#align local_homeomorph.source_inter_preimage_inv_preimage PartialHomeomorph.source_inter_preimage_inv_preimage
-theorem target_inter_inv_preimage_preimage (s : Set β) :
+theorem target_inter_inv_preimage_preimage (s : Set Y) :
e.target ∩ e.symm ⁻¹' (e ⁻¹' s) = e.target ∩ s :=
e.symm.source_inter_preimage_inv_preimage _
#align local_homeomorph.target_inter_inv_preimage_preimage PartialHomeomorph.target_inter_inv_preimage_preimage
-theorem source_inter_preimage_target_inter (s : Set β) :
+theorem source_inter_preimage_target_inter (s : Set Y) :
e.source ∩ e ⁻¹' (e.target ∩ s) = e.source ∩ e ⁻¹' s :=
e.toPartialEquiv.source_inter_preimage_target_inter s
#align local_homeomorph.source_inter_preimage_target_inter PartialHomeomorph.source_inter_preimage_target_inter
@@ -335,12 +335,12 @@ It is not sufficient to have equal `toFun` and `source`, as this only determines
the target. This would only be true for a weaker notion of equality, arguably the right one,
called `EqOnSource`. -/
@[ext]
-protected theorem ext (e' : PartialHomeomorph α β) (h : ∀ x, e x = e' x)
+protected theorem ext (e' : PartialHomeomorph X Y) (h : ∀ x, e x = e' x)
(hinv : ∀ x, e.symm x = e'.symm x) (hs : e.source = e'.source) : e = e' :=
toPartialEquiv_injective (PartialEquiv.ext h hinv hs)
#align local_homeomorph.ext PartialHomeomorph.ext
-protected theorem ext_iff {e e' : PartialHomeomorph α β} :
+protected theorem ext_iff {e e' : PartialHomeomorph X Y} :
e = e' ↔ (∀ x, e x = e' x) ∧ (∀ x, e.symm x = e'.symm x) ∧ e.source = e'.source :=
⟨by
rintro rfl
@@ -365,16 +365,16 @@ theorem symm_target : e.symm.target = e.source :=
#align local_homeomorph.symm_symm PartialHomeomorph.symm_symm
theorem symm_bijective : Function.Bijective
- (PartialHomeomorph.symm : PartialHomeomorph α β → PartialHomeomorph β α) :=
+ (PartialHomeomorph.symm : PartialHomeomorph X Y → PartialHomeomorph Y X) :=
Function.bijective_iff_has_inverse.mpr ⟨_, symm_symm, symm_symm⟩
/-- A partial homeomorphism is continuous at any point of its source -/
-protected theorem continuousAt {x : α} (h : x ∈ e.source) : ContinuousAt e x :=
+protected theorem continuousAt {x : X} (h : x ∈ e.source) : ContinuousAt e x :=
(e.continuousOn x h).continuousAt (e.open_source.mem_nhds h)
#align local_homeomorph.continuous_at PartialHomeomorph.continuousAt
/-- A partial homeomorphism inverse is continuous at any point of its target -/
-theorem continuousAt_symm {x : β} (h : x ∈ e.target) : ContinuousAt e.symm x :=
+theorem continuousAt_symm {x : Y} (h : x ∈ e.target) : ContinuousAt e.symm x :=
e.symm.continuousAt h
#align local_homeomorph.continuous_at_symm PartialHomeomorph.continuousAt_symm
@@ -391,11 +391,11 @@ theorem symm_map_nhds_eq {x} (hx : x ∈ e.source) : map e.symm (𝓝 (e x)) =
(e.symm.map_nhds_eq <| e.map_source hx).trans <| by rw [e.left_inv hx]
#align local_homeomorph.symm_map_nhds_eq PartialHomeomorph.symm_map_nhds_eq
-theorem image_mem_nhds {x} (hx : x ∈ e.source) {s : Set α} (hs : s ∈ 𝓝 x) : e '' s ∈ 𝓝 (e x) :=
+theorem image_mem_nhds {x} (hx : x ∈ e.source) {s : Set X} (hs : s ∈ 𝓝 x) : e '' s ∈ 𝓝 (e x) :=
e.map_nhds_eq hx ▸ Filter.image_mem_map hs
#align local_homeomorph.image_mem_nhds PartialHomeomorph.image_mem_nhds
-theorem map_nhdsWithin_eq {x} (hx : x ∈ e.source) (s : Set α) :
+theorem map_nhdsWithin_eq {x} (hx : x ∈ e.source) (s : Set X) :
map e (𝓝[s] x) = 𝓝[e '' (e.source ∩ s)] e x :=
calc
map e (𝓝[s] x) = map e (𝓝[e.source ∩ s] x) :=
@@ -406,31 +406,31 @@ theorem map_nhdsWithin_eq {x} (hx : x ∈ e.source) (s : Set α) :
(e.continuousAt hx).continuousWithinAt
#align local_homeomorph.map_nhds_within_eq PartialHomeomorph.map_nhdsWithin_eq
-theorem map_nhdsWithin_preimage_eq {x} (hx : x ∈ e.source) (s : Set β) :
+theorem map_nhdsWithin_preimage_eq {x} (hx : x ∈ e.source) (s : Set Y) :
map e (𝓝[e ⁻¹' s] x) = 𝓝[s] e x := by
rw [e.map_nhdsWithin_eq hx, e.image_source_inter_eq', e.target_inter_inv_preimage_preimage,
e.nhdsWithin_target_inter (e.map_source hx)]
#align local_homeomorph.map_nhds_within_preimage_eq PartialHomeomorph.map_nhdsWithin_preimage_eq
-theorem eventually_nhds {x : α} (p : β → Prop) (hx : x ∈ e.source) :
+theorem eventually_nhds {x : X} (p : Y → Prop) (hx : x ∈ e.source) :
(∀ᶠ y in 𝓝 (e x), p y) ↔ ∀ᶠ x in 𝓝 x, p (e x) :=
Iff.trans (by rw [e.map_nhds_eq hx]) eventually_map
#align local_homeomorph.eventually_nhds PartialHomeomorph.eventually_nhds
-theorem eventually_nhds' {x : α} (p : α → Prop) (hx : x ∈ e.source) :
+theorem eventually_nhds' {x : X} (p : X → Prop) (hx : x ∈ e.source) :
(∀ᶠ y in 𝓝 (e x), p (e.symm y)) ↔ ∀ᶠ x in 𝓝 x, p x := by
rw [e.eventually_nhds _ hx]
refine' eventually_congr ((e.eventually_left_inverse hx).mono fun y hy => _)
rw [hy]
#align local_homeomorph.eventually_nhds' PartialHomeomorph.eventually_nhds'
-theorem eventually_nhdsWithin {x : α} (p : β → Prop) {s : Set α}
+theorem eventually_nhdsWithin {x : X} (p : Y → Prop) {s : Set X}
(hx : x ∈ e.source) : (∀ᶠ y in 𝓝[e.symm ⁻¹' s] e x, p y) ↔ ∀ᶠ x in 𝓝[s] x, p (e x) := by
refine' Iff.trans _ eventually_map
rw [e.map_nhdsWithin_eq hx, e.image_source_inter_eq', e.nhdsWithin_target_inter (e.mapsTo hx)]
#align local_homeomorph.eventually_nhds_within PartialHomeomorph.eventually_nhdsWithin
-theorem eventually_nhdsWithin' {x : α} (p : α → Prop) {s : Set α}
+theorem eventually_nhdsWithin' {x : X} (p : X → Prop) {s : Set X}
(hx : x ∈ e.source) : (∀ᶠ y in 𝓝[e.symm ⁻¹' s] e x, p (e.symm y)) ↔ ∀ᶠ x in 𝓝[s] x, p x := by
rw [e.eventually_nhdsWithin _ hx]
refine eventually_congr <|
@@ -440,11 +440,11 @@ theorem eventually_nhdsWithin' {x : α} (p : α → Prop) {s : Set α}
/-- This lemma is useful in the manifold library in the case that `e` is a chart. It states that
locally around `e x` the set `e.symm ⁻¹' s` is the same as the set intersected with the target
- of `e` and some other neighborhood of `f x` (which will be the source of a chart on `γ`). -/
-theorem preimage_eventuallyEq_target_inter_preimage_inter {e : PartialHomeomorph α β} {s : Set α}
- {t : Set γ} {x : α} {f : α → γ} (hf : ContinuousWithinAt f s x) (hxe : x ∈ e.source)
+ of `e` and some other neighborhood of `f x` (which will be the source of a chart on `Z`). -/
+theorem preimage_eventuallyEq_target_inter_preimage_inter {e : PartialHomeomorph X Y} {s : Set X}
+ {t : Set Z} {x : X} {f : X → Z} (hf : ContinuousWithinAt f s x) (hxe : x ∈ e.source)
(ht : t ∈ 𝓝 (f x)) :
- e.symm ⁻¹' s =ᶠ[𝓝 (e x)] (e.target ∩ e.symm ⁻¹' (s ∩ f ⁻¹' t) : Set β) := by
+ e.symm ⁻¹' s =ᶠ[𝓝 (e x)] (e.target ∩ e.symm ⁻¹' (s ∩ f ⁻¹' t) : Set Y) := by
rw [eventuallyEq_set, e.eventually_nhds _ hxe]
filter_upwards [e.open_source.mem_nhds hxe,
mem_nhdsWithin_iff_eventually.mp (hf.preimage_mem_nhdsWithin ht)]
@@ -453,34 +453,34 @@ theorem preimage_eventuallyEq_target_inter_preimage_inter {e : PartialHomeomorph
e.left_inv hy, iff_true_intro hyu]
#align local_homeomorph.preimage_eventually_eq_target_inter_preimage_inter PartialHomeomorph.preimage_eventuallyEq_target_inter_preimage_inter
-theorem isOpen_inter_preimage {s : Set β} (hs : IsOpen s) : IsOpen (e.source ∩ e ⁻¹' s) :=
+theorem isOpen_inter_preimage {s : Set Y} (hs : IsOpen s) : IsOpen (e.source ∩ e ⁻¹' s) :=
e.continuousOn.isOpen_inter_preimage e.open_source hs
#align local_homeomorph.preimage_open_of_open PartialHomeomorph.isOpen_inter_preimage
-theorem isOpen_inter_preimage_symm {s : Set α} (hs : IsOpen s) : IsOpen (e.target ∩ e.symm ⁻¹' s) :=
+theorem isOpen_inter_preimage_symm {s : Set X} (hs : IsOpen s) : IsOpen (e.target ∩ e.symm ⁻¹' s) :=
e.symm.continuousOn.isOpen_inter_preimage e.open_target hs
#align local_homeomorph.preimage_open_of_open_symm PartialHomeomorph.isOpen_inter_preimage_symm
/-- A partial homeomorphism is an open map on its source:
the image of an open subset of the source is open. -/
-lemma isOpen_image_of_subset_source {s : Set α} (hs : IsOpen s) (hse : s ⊆ e.source) :
+lemma isOpen_image_of_subset_source {s : Set X} (hs : IsOpen s) (hse : s ⊆ e.source) :
IsOpen (e '' s) := by
rw [(image_eq_target_inter_inv_preimage (e := e) hse)]
exact e.continuousOn_invFun.isOpen_inter_preimage e.open_target hs
#align local_homeomorph.image_open_of_open PartialHomeomorph.isOpen_image_of_subset_source
/-- The image of the restriction of an open set to the source is open. -/
-theorem isOpen_image_source_inter {s : Set α} (hs : IsOpen s) :
+theorem isOpen_image_source_inter {s : Set X} (hs : IsOpen s) :
IsOpen (e '' (e.source ∩ s)) :=
e.isOpen_image_of_subset_source (e.open_source.inter hs) (inter_subset_left _ _)
#align local_homeomorph.image_open_of_open' PartialHomeomorph.isOpen_image_source_inter
/-- The inverse of a partial homeomorphism `e` is an open map on `e.target`. -/
-lemma isOpen_image_symm_of_subset_target {t : Set β} (ht : IsOpen t) (hte : t ⊆ e.target) :
+lemma isOpen_image_symm_of_subset_target {t : Set Y} (ht : IsOpen t) (hte : t ⊆ e.target) :
IsOpen (e.symm '' t) :=
isOpen_image_of_subset_source e.symm ht (e.symm_source ▸ hte)
-lemma isOpen_symm_image_iff_of_subset_target {t : Set β} (hs : t ⊆ e.target) :
+lemma isOpen_symm_image_iff_of_subset_target {t : Set Y} (hs : t ⊆ e.target) :
IsOpen (e.symm '' t) ↔ IsOpen t := by
refine ⟨fun h ↦ ?_, fun h ↦ e.symm.isOpen_image_of_subset_source h hs⟩
have hs' : e.symm '' t ⊆ e.source := by
@@ -489,7 +489,7 @@ lemma isOpen_symm_image_iff_of_subset_target {t : Set β} (hs : t ⊆ e.target)
rw [← e.image_symm_image_of_subset_target hs]
exact e.isOpen_image_of_subset_source h hs'
-theorem isOpen_image_iff_of_subset_source {s : Set α} (hs : s ⊆ e.source) :
+theorem isOpen_image_iff_of_subset_source {s : Set X} (hs : s ⊆ e.source) :
IsOpen (e '' s) ↔ IsOpen s := by
rw [← e.symm.isOpen_symm_image_iff_of_subset_target hs, e.symm_symm]
@@ -498,7 +498,7 @@ section IsImage
/-!
### `PartialHomeomorph.IsImage` relation
-We say that `t : Set β` is an image of `s : Set α` under a partial homeomorphism `e` if any of the
+We say that `t : Set Y` is an image of `s : Set X` under a partial homeomorphism `e` if any of the
following equivalent conditions hold:
* `e '' (e.source ∩ s) = e.target ∩ t`;
@@ -510,20 +510,20 @@ In this section we transfer API about `PartialEquiv.IsImage` to partial homeomor
add a few `PartialHomeomorph`-specific lemmas like `PartialHomeomorph.IsImage.closure`.
-/
-/-- We say that `t : Set β` is an image of `s : Set α` under a partial homeomorphism `e`
+/-- We say that `t : Set Y` is an image of `s : Set X` under a partial homeomorphism `e`
if any of the following equivalent conditions hold:
* `e '' (e.source ∩ s) = e.target ∩ t`;
* `e.source ∩ e ⁻¹ t = e.source ∩ s`;
* `∀ x ∈ e.source, e x ∈ t ↔ x ∈ s` (this one is used in the definition).
-/
-def IsImage (s : Set α) (t : Set β) : Prop :=
+def IsImage (s : Set X) (t : Set Y) : Prop :=
∀ ⦃x⦄, x ∈ e.source → (e x ∈ t ↔ x ∈ s)
#align local_homeomorph.is_image PartialHomeomorph.IsImage
namespace IsImage
-variable {e} {s : Set α} {t : Set β} {x : α} {y : β}
+variable {e} {s : Set X} {t : Set Y} {x : X} {y : Y}
theorem toPartialEquiv (h : e.IsImage s t) : e.toPartialEquiv.IsImage s t :=
h
@@ -619,19 +619,19 @@ protected theorem diff {s' t'} (h : e.IsImage s t) (h' : e.IsImage s' t') :
h.inter h'.compl
#align local_homeomorph.is_image.diff PartialHomeomorph.IsImage.diff
-theorem leftInvOn_piecewise {e' : PartialHomeomorph α β} [∀ i, Decidable (i ∈ s)]
+theorem leftInvOn_piecewise {e' : PartialHomeomorph X Y} [∀ i, Decidable (i ∈ s)]
[∀ i, Decidable (i ∈ t)] (h : e.IsImage s t) (h' : e'.IsImage s t) :
LeftInvOn (t.piecewise e.symm e'.symm) (s.piecewise e e') (s.ite e.source e'.source) :=
h.toPartialEquiv.leftInvOn_piecewise h'
#align local_homeomorph.is_image.left_inv_on_piecewise PartialHomeomorph.IsImage.leftInvOn_piecewise
-theorem inter_eq_of_inter_eq_of_eqOn {e' : PartialHomeomorph α β} (h : e.IsImage s t)
+theorem inter_eq_of_inter_eq_of_eqOn {e' : PartialHomeomorph X Y} (h : e.IsImage s t)
(h' : e'.IsImage s t) (hs : e.source ∩ s = e'.source ∩ s) (Heq : EqOn e e' (e.source ∩ s)) :
e.target ∩ t = e'.target ∩ t :=
h.toPartialEquiv.inter_eq_of_inter_eq_of_eqOn h' hs Heq
#align local_homeomorph.is_image.inter_eq_of_inter_eq_of_eq_on PartialHomeomorph.IsImage.inter_eq_of_inter_eq_of_eqOn
-theorem symm_eqOn_of_inter_eq_of_eqOn {e' : PartialHomeomorph α β} (h : e.IsImage s t)
+theorem symm_eqOn_of_inter_eq_of_eqOn {e' : PartialHomeomorph X Y} (h : e.IsImage s t)
(hs : e.source ∩ s = e'.source ∩ s) (Heq : EqOn e e' (e.source ∩ s)) :
EqOn e.symm e'.symm (e.target ∩ t) :=
h.toPartialEquiv.symm_eq_on_of_inter_eq_of_eqOn hs Heq
@@ -660,7 +660,7 @@ theorem isOpen_iff (h : e.IsImage s t) : IsOpen (e.source ∩ s) ↔ IsOpen (e.t
/-- Restrict a `PartialHomeomorph` to a pair of corresponding open sets. -/
@[simps toPartialEquiv]
-def restr (h : e.IsImage s t) (hs : IsOpen (e.source ∩ s)) : PartialHomeomorph α β where
+def restr (h : e.IsImage s t) (hs : IsOpen (e.source ∩ s)) : PartialHomeomorph X Y where
toPartialEquiv := h.toPartialEquiv.restr
open_source := hs
open_target := h.isOpen_iff.1 hs
@@ -674,7 +674,7 @@ theorem isImage_source_target : e.IsImage e.source e.target :=
e.toPartialEquiv.isImage_source_target
#align local_homeomorph.is_image_source_target PartialHomeomorph.isImage_source_target
-theorem isImage_source_target_of_disjoint (e' : PartialHomeomorph α β)
+theorem isImage_source_target_of_disjoint (e' : PartialHomeomorph X Y)
(hs : Disjoint e.source e'.source) (ht : Disjoint e.target e'.target) :
e.IsImage e'.source e'.target :=
e.toPartialEquiv.isImage_source_target_of_disjoint e'.toPartialEquiv hs ht
@@ -682,16 +682,16 @@ theorem isImage_source_target_of_disjoint (e' : PartialHomeomorph α β)
/-- Preimage of interior or interior of preimage coincide for partial homeomorphisms,
when restricted to the source. -/
-theorem preimage_interior (s : Set β) :
+theorem preimage_interior (s : Set Y) :
e.source ∩ e ⁻¹' interior s = e.source ∩ interior (e ⁻¹' s) :=
(IsImage.of_preimage_eq rfl).interior.preimage_eq
#align local_homeomorph.preimage_interior PartialHomeomorph.preimage_interior
-theorem preimage_closure (s : Set β) : e.source ∩ e ⁻¹' closure s = e.source ∩ closure (e ⁻¹' s) :=
+theorem preimage_closure (s : Set Y) : e.source ∩ e ⁻¹' closure s = e.source ∩ closure (e ⁻¹' s) :=
(IsImage.of_preimage_eq rfl).closure.preimage_eq
#align local_homeomorph.preimage_closure PartialHomeomorph.preimage_closure
-theorem preimage_frontier (s : Set β) :
+theorem preimage_frontier (s : Set Y) :
e.source ∩ e ⁻¹' frontier s = e.source ∩ frontier (e ⁻¹' s) :=
(IsImage.of_preimage_eq rfl).frontier.preimage_eq
#align local_homeomorph.preimage_frontier PartialHomeomorph.preimage_frontier
@@ -699,8 +699,8 @@ theorem preimage_frontier (s : Set β) :
end IsImage
/-- A `PartialEquiv` with continuous open forward map and open source is a `PartialHomeomorph`. -/
-def ofContinuousOpenRestrict (e : PartialEquiv α β) (hc : ContinuousOn e e.source)
- (ho : IsOpenMap (e.source.restrict e)) (hs : IsOpen e.source) : PartialHomeomorph α β where
+def ofContinuousOpenRestrict (e : PartialEquiv X Y) (hc : ContinuousOn e e.source)
+ (ho : IsOpenMap (e.source.restrict e)) (hs : IsOpen e.source) : PartialHomeomorph X Y where
toPartialEquiv := e
open_source := hs
open_target := by simpa only [range_restrict, e.image_source_eq_target] using ho.isOpen_range
@@ -709,27 +709,27 @@ def ofContinuousOpenRestrict (e : PartialEquiv α β) (hc : ContinuousOn e e.sou
#align local_homeomorph.of_continuous_open_restrict PartialHomeomorph.ofContinuousOpenRestrict
/-- A `PartialEquiv` with continuous open forward map and open source is a `PartialHomeomorph`. -/
-def ofContinuousOpen (e : PartialEquiv α β) (hc : ContinuousOn e e.source) (ho : IsOpenMap e)
- (hs : IsOpen e.source) : PartialHomeomorph α β :=
+def ofContinuousOpen (e : PartialEquiv X Y) (hc : ContinuousOn e e.source) (ho : IsOpenMap e)
+ (hs : IsOpen e.source) : PartialHomeomorph X Y :=
ofContinuousOpenRestrict e hc (ho.restrict hs) hs
#align local_homeomorph.of_continuous_open PartialHomeomorph.ofContinuousOpen
/-- Restricting a partial homeomorphism `e` to `e.source ∩ s` when `s` is open.
This is sometimes hard to use because of the openness assumption, but it has the advantage that
when it can be used then its `PartialEquiv` is defeq to `PartialEquiv.restr`. -/
-protected def restrOpen (s : Set α) (hs : IsOpen s) : PartialHomeomorph α β :=
- (@IsImage.of_symm_preimage_eq α β _ _ e s (e.symm ⁻¹' s) rfl).restr
+protected def restrOpen (s : Set X) (hs : IsOpen s) : PartialHomeomorph X Y :=
+ (@IsImage.of_symm_preimage_eq X Y _ _ e s (e.symm ⁻¹' s) rfl).restr
(IsOpen.inter e.open_source hs)
#align local_homeomorph.restr_open PartialHomeomorph.restrOpen
@[simp, mfld_simps]
-theorem restrOpen_toPartialEquiv (s : Set α) (hs : IsOpen s) :
+theorem restrOpen_toPartialEquiv (s : Set X) (hs : IsOpen s) :
(e.restrOpen s hs).toPartialEquiv = e.toPartialEquiv.restr s :=
rfl
#align local_homeomorph.restr_open_to_local_equiv PartialHomeomorph.restrOpen_toPartialEquiv
-- Already simp via `PartialEquiv`
-theorem restrOpen_source (s : Set α) (hs : IsOpen s) : (e.restrOpen s hs).source = e.source ∩ s :=
+theorem restrOpen_source (s : Set X) (hs : IsOpen s) : (e.restrOpen s hs).source = e.source ∩ s :=
rfl
#align local_homeomorph.restr_open_source PartialHomeomorph.restrOpen_source
@@ -738,65 +738,65 @@ sure that the restriction is well defined whatever the set s, since partial home
definition defined on open sets. In applications where `s` is open, this coincides with the
restriction of partial equivalences -/
@[simps! (config := mfld_cfg) apply symm_apply, simps! (config := .lemmasOnly) source target]
-protected def restr (s : Set α) : PartialHomeomorph α β :=
+protected def restr (s : Set X) : PartialHomeomorph X Y :=
e.restrOpen (interior s) isOpen_interior
#align local_homeomorph.restr PartialHomeomorph.restr
@[simp, mfld_simps]
-theorem restr_toPartialEquiv (s : Set α) :
+theorem restr_toPartialEquiv (s : Set X) :
(e.restr s).toPartialEquiv = e.toPartialEquiv.restr (interior s) :=
rfl
#align local_homeomorph.restr_to_local_equiv PartialHomeomorph.restr_toPartialEquiv
-theorem restr_source' (s : Set α) (hs : IsOpen s) : (e.restr s).source = e.source ∩ s := by
+theorem restr_source' (s : Set X) (hs : IsOpen s) : (e.restr s).source = e.source ∩ s := by
rw [e.restr_source, hs.interior_eq]
#align local_homeomorph.restr_source' PartialHomeomorph.restr_source'
-theorem restr_toPartialEquiv' (s : Set α) (hs : IsOpen s) :
+theorem restr_toPartialEquiv' (s : Set X) (hs : IsOpen s) :
(e.restr s).toPartialEquiv = e.toPartialEquiv.restr s := by
rw [e.restr_toPartialEquiv, hs.interior_eq]
#align local_homeomorph.restr_to_local_equiv' PartialHomeomorph.restr_toPartialEquiv'
-theorem restr_eq_of_source_subset {e : PartialHomeomorph α β} {s : Set α} (h : e.source ⊆ s) :
+theorem restr_eq_of_source_subset {e : PartialHomeomorph X Y} {s : Set X} (h : e.source ⊆ s) :
e.restr s = e :=
toPartialEquiv_injective <| PartialEquiv.restr_eq_of_source_subset <|
interior_maximal h e.open_source
#align local_homeomorph.restr_eq_of_source_subset PartialHomeomorph.restr_eq_of_source_subset
@[simp, mfld_simps]
-theorem restr_univ {e : PartialHomeomorph α β} : e.restr univ = e :=
+theorem restr_univ {e : PartialHomeomorph X Y} : e.restr univ = e :=
restr_eq_of_source_subset (subset_univ _)
#align local_homeomorph.restr_univ PartialHomeomorph.restr_univ
-theorem restr_source_inter (s : Set α) : e.restr (e.source ∩ s) = e.restr s := by
+theorem restr_source_inter (s : Set X) : e.restr (e.source ∩ s) = e.restr s := by
refine' PartialHomeomorph.ext _ _ (fun x => rfl) (fun x => rfl) _
simp [e.open_source.interior_eq, ← inter_assoc]
#align local_homeomorph.restr_source_inter PartialHomeomorph.restr_source_inter
/-- The identity on the whole space as a partial homeomorphism. -/
@[simps! (config := mfld_cfg) apply, simps! (config := .lemmasOnly) source target]
-protected def refl (α : Type*) [TopologicalSpace α] : PartialHomeomorph α α :=
- (Homeomorph.refl α).toPartialHomeomorph
+protected def refl (X : Type*) [TopologicalSpace X] : PartialHomeomorph X X :=
+ (Homeomorph.refl X).toPartialHomeomorph
#align local_homeomorph.refl PartialHomeomorph.refl
@[simp, mfld_simps]
-theorem refl_partialEquiv : (PartialHomeomorph.refl α).toPartialEquiv = PartialEquiv.refl α :=
+theorem refl_partialEquiv : (PartialHomeomorph.refl X).toPartialEquiv = PartialEquiv.refl X :=
rfl
#align local_homeomorph.refl_local_equiv PartialHomeomorph.refl_partialEquiv
@[simp, mfld_simps]
-theorem refl_symm : (PartialHomeomorph.refl α).symm = PartialHomeomorph.refl α :=
+theorem refl_symm : (PartialHomeomorph.refl X).symm = PartialHomeomorph.refl X :=
rfl
#align local_homeomorph.refl_symm PartialHomeomorph.refl_symm
/- ofSet: the identity on a set `s` -/
section ofSet
-variable {s : Set α} (hs : IsOpen s)
+variable {s : Set X} (hs : IsOpen s)
/-- The identity partial equivalence on a set `s` -/
@[simps! (config := mfld_cfg) apply, simps! (config := .lemmasOnly) source target]
-def ofSet (s : Set α) (hs : IsOpen s) : PartialHomeomorph α α where
+def ofSet (s : Set X) (hs : IsOpen s) : PartialHomeomorph X X where
toPartialEquiv := PartialEquiv.ofSet s
open_source := hs
open_target := hs
@@ -815,7 +815,7 @@ theorem ofSet_symm : (ofSet s hs).symm = ofSet s hs :=
#align local_homeomorph.of_set_symm PartialHomeomorph.ofSet_symm
@[simp, mfld_simps]
-theorem ofSet_univ_eq_refl : ofSet univ isOpen_univ = PartialHomeomorph.refl α := by ext <;> simp
+theorem ofSet_univ_eq_refl : ofSet univ isOpen_univ = PartialHomeomorph.refl X := by ext <;> simp
#align local_homeomorph.of_set_univ_eq_refl PartialHomeomorph.ofSet_univ_eq_refl
end ofSet
@@ -823,12 +823,12 @@ end ofSet
/- `trans`: composition of two partial homeomorphisms -/
section trans
-variable (e' : PartialHomeomorph β γ)
+variable (e' : PartialHomeomorph Y Z)
/-- Composition of two partial homeomorphisms when the target of the first and the source of
the second coincide. -/
@[simps! apply symm_apply toPartialEquiv, simps! (config := .lemmasOnly) source target]
-protected def trans' (h : e.target = e'.source) : PartialHomeomorph α γ where
+protected def trans' (h : e.target = e'.source) : PartialHomeomorph X Z where
toPartialEquiv := PartialEquiv.trans' e.toPartialEquiv e'.toPartialEquiv h
open_source := e.open_source
open_target := e'.open_target
@@ -839,7 +839,7 @@ protected def trans' (h : e.target = e'.source) : PartialHomeomorph α γ where
/-- Composing two partial homeomorphisms, by restricting to the maximal domain where their
composition is well defined. -/
@[trans]
-protected def trans : PartialHomeomorph α γ :=
+protected def trans : PartialHomeomorph X Z :=
PartialHomeomorph.trans' (e.symm.restrOpen e'.source e'.open_source).symm
(e'.restrOpen e.target e.open_target) (by simp [inter_comm])
#align local_homeomorph.trans PartialHomeomorph.trans
@@ -851,16 +851,16 @@ theorem trans_toPartialEquiv :
#align local_homeomorph.trans_to_local_equiv PartialHomeomorph.trans_toPartialEquiv
@[simp, mfld_simps]
-theorem coe_trans : (e.trans e' : α → γ) = e' ∘ e :=
+theorem coe_trans : (e.trans e' : X → Z) = e' ∘ e :=
rfl
#align local_homeomorph.coe_trans PartialHomeomorph.coe_trans
@[simp, mfld_simps]
-theorem coe_trans_symm : ((e.trans e').symm : γ → α) = e.symm ∘ e'.symm :=
+theorem coe_trans_symm : ((e.trans e').symm : Z → X) = e.symm ∘ e'.symm :=
rfl
#align local_homeomorph.coe_trans_symm PartialHomeomorph.coe_trans_symm
-theorem trans_apply {x : α} : (e.trans e') x = e' (e x) :=
+theorem trans_apply {x : X} : (e.trans e') x = e' (e x) :=
rfl
#align local_homeomorph.trans_apply PartialHomeomorph.trans_apply
@@ -901,47 +901,47 @@ theorem inv_image_trans_target : e'.symm '' (e.trans e').target = e'.source ∩
image_trans_source e'.symm e.symm
#align local_homeomorph.inv_image_trans_target PartialHomeomorph.inv_image_trans_target
-theorem trans_assoc (e'' : PartialHomeomorph γ δ) :
+theorem trans_assoc (e'' : PartialHomeomorph Z Z') :
(e.trans e').trans e'' = e.trans (e'.trans e'') :=
toPartialEquiv_injective <| e.1.trans_assoc _ _
#align local_homeomorph.trans_assoc PartialHomeomorph.trans_assoc
@[simp, mfld_simps]
-theorem trans_refl : e.trans (PartialHomeomorph.refl β) = e :=
+theorem trans_refl : e.trans (PartialHomeomorph.refl Y) = e :=
toPartialEquiv_injective e.1.trans_refl
#align local_homeomorph.trans_refl PartialHomeomorph.trans_refl
@[simp, mfld_simps]
-theorem refl_trans : (PartialHomeomorph.refl α).trans e = e :=
+theorem refl_trans : (PartialHomeomorph.refl X).trans e = e :=
toPartialEquiv_injective e.1.refl_trans
#align local_homeomorph.refl_trans PartialHomeomorph.refl_trans
-theorem trans_ofSet {s : Set β} (hs : IsOpen s) : e.trans (ofSet s hs) = e.restr (e ⁻¹' s) :=
+theorem trans_ofSet {s : Set Y} (hs : IsOpen s) : e.trans (ofSet s hs) = e.restr (e ⁻¹' s) :=
PartialHomeomorph.ext _ _ (fun _ => rfl) (fun _ => rfl) <| by
rw [trans_source, restr_source, ofSet_source, ← preimage_interior, hs.interior_eq]
#align local_homeomorph.trans_of_set PartialHomeomorph.trans_ofSet
-theorem trans_of_set' {s : Set β} (hs : IsOpen s) :
+theorem trans_of_set' {s : Set Y} (hs : IsOpen s) :
e.trans (ofSet s hs) = e.restr (e.source ∩ e ⁻¹' s) := by rw [trans_ofSet, restr_source_inter]
#align local_homeomorph.trans_of_set' PartialHomeomorph.trans_of_set'
-theorem ofSet_trans {s : Set α} (hs : IsOpen s) : (ofSet s hs).trans e = e.restr s :=
+theorem ofSet_trans {s : Set X} (hs : IsOpen s) : (ofSet s hs).trans e = e.restr s :=
PartialHomeomorph.ext _ _ (fun x => rfl) (fun x => rfl) <| by simp [hs.interior_eq, inter_comm]
#align local_homeomorph.of_set_trans PartialHomeomorph.ofSet_trans
-theorem ofSet_trans' {s : Set α} (hs : IsOpen s) :
+theorem ofSet_trans' {s : Set X} (hs : IsOpen s) :
(ofSet s hs).trans e = e.restr (e.source ∩ s) := by
rw [ofSet_trans, restr_source_inter]
#align local_homeomorph.of_set_trans' PartialHomeomorph.ofSet_trans'
@[simp, mfld_simps]
-theorem ofSet_trans_ofSet {s : Set α} (hs : IsOpen s) {s' : Set α} (hs' : IsOpen s') :
+theorem ofSet_trans_ofSet {s : Set X} (hs : IsOpen s) {s' : Set X} (hs' : IsOpen s') :
(ofSet s hs).trans (ofSet s' hs') = ofSet (s ∩ s') (IsOpen.inter hs hs') := by
rw [(ofSet s hs).trans_ofSet hs']
ext <;> simp [hs'.interior_eq]
#align local_homeomorph.of_set_trans_of_set PartialHomeomorph.ofSet_trans_ofSet
-theorem restr_trans (s : Set α) : (e.restr s).trans e' = (e.trans e').restr s :=
+theorem restr_trans (s : Set X) : (e.restr s).trans e' = (e.trans e').restr s :=
toPartialEquiv_injective <|
PartialEquiv.restr_trans e.toPartialEquiv e'.toPartialEquiv (interior s)
#align local_homeomorph.restr_trans PartialHomeomorph.restr_trans
@@ -953,62 +953,62 @@ section EqOnSource
/-- `EqOnSource e e'` means that `e` and `e'` have the same source, and coincide there. They
should really be considered the same partial equivalence. -/
-def EqOnSource (e e' : PartialHomeomorph α β) : Prop :=
+def EqOnSource (e e' : PartialHomeomorph X Y) : Prop :=
e.source = e'.source ∧ EqOn e e' e.source
#align local_homeomorph.eq_on_source PartialHomeomorph.EqOnSource
-theorem eqOnSource_iff (e e' : PartialHomeomorph α β) :
+theorem eqOnSource_iff (e e' : PartialHomeomorph X Y) :
EqOnSource e e' ↔ PartialEquiv.EqOnSource e.toPartialEquiv e'.toPartialEquiv :=
Iff.rfl
#align local_homeomorph.eq_on_source_iff PartialHomeomorph.eqOnSource_iff
/-- `EqOnSource` is an equivalence relation. -/
-instance eqOnSourceSetoid : Setoid (PartialHomeomorph α β) :=
+instance eqOnSourceSetoid : Setoid (PartialHomeomorph X Y) :=
{ PartialEquiv.eqOnSourceSetoid.comap toPartialEquiv with r := EqOnSource }
theorem eqOnSource_refl : e ≈ e := Setoid.refl _
#align local_homeomorph.eq_on_source_refl PartialHomeomorph.eqOnSource_refl
/-- If two partial homeomorphisms are equivalent, so are their inverses. -/
-theorem EqOnSource.symm' {e e' : PartialHomeomorph α β} (h : e ≈ e') : e.symm ≈ e'.symm :=
+theorem EqOnSource.symm' {e e' : PartialHomeomorph X Y} (h : e ≈ e') : e.symm ≈ e'.symm :=
PartialEquiv.EqOnSource.symm' h
#align local_homeomorph.eq_on_source.symm' PartialHomeomorph.EqOnSource.symm'
/-- Two equivalent partial homeomorphisms have the same source. -/
-theorem EqOnSource.source_eq {e e' : PartialHomeomorph α β} (h : e ≈ e') : e.source = e'.source :=
+theorem EqOnSource.source_eq {e e' : PartialHomeomorph X Y} (h : e ≈ e') : e.source = e'.source :=
h.1
#align local_homeomorph.eq_on_source.source_eq PartialHomeomorph.EqOnSource.source_eq
/-- Two equivalent partial homeomorphisms have the same target. -/
-theorem EqOnSource.target_eq {e e' : PartialHomeomorph α β} (h : e ≈ e') : e.target = e'.target :=
+theorem EqOnSource.target_eq {e e' : PartialHomeomorph X Y} (h : e ≈ e') : e.target = e'.target :=
h.symm'.1
#align local_homeomorph.eq_on_source.target_eq PartialHomeomorph.EqOnSource.target_eq
/-- Two equivalent partial homeomorphisms have coinciding `toFun` on the source -/
-theorem EqOnSource.eqOn {e e' : PartialHomeomorph α β} (h : e ≈ e') : EqOn e e' e.source :=
+theorem EqOnSource.eqOn {e e' : PartialHomeomorph X Y} (h : e ≈ e') : EqOn e e' e.source :=
h.2
#align local_homeomorph.eq_on_source.eq_on PartialHomeomorph.EqOnSource.eqOn
/-- Two equivalent partial homeomorphisms have coinciding `invFun` on the target -/
-theorem EqOnSource.symm_eqOn_target {e e' : PartialHomeomorph α β} (h : e ≈ e') :
+theorem EqOnSource.symm_eqOn_target {e e' : PartialHomeomorph X Y} (h : e ≈ e') :
EqOn e.symm e'.symm e.target :=
h.symm'.2
#align local_homeomorph.eq_on_source.symm_eq_on_target PartialHomeomorph.EqOnSource.symm_eqOn_target
/-- Composition of partial homeomorphisms respects equivalence. -/
-theorem EqOnSource.trans' {e e' : PartialHomeomorph α β} {f f' : PartialHomeomorph β γ}
+theorem EqOnSource.trans' {e e' : PartialHomeomorph X Y} {f f' : PartialHomeomorph Y Z}
(he : e ≈ e') (hf : f ≈ f') : e.trans f ≈ e'.trans f' :=
PartialEquiv.EqOnSource.trans' he hf
#align local_homeomorph.eq_on_source.trans' PartialHomeomorph.EqOnSource.trans'
/-- Restriction of partial homeomorphisms respects equivalence -/
-theorem EqOnSource.restr {e e' : PartialHomeomorph α β} (he : e ≈ e') (s : Set α) :
+theorem EqOnSource.restr {e e' : PartialHomeomorph X Y} (he : e ≈ e') (s : Set X) :
e.restr s ≈ e'.restr s :=
PartialEquiv.EqOnSource.restr he _
#align local_homeomorph.eq_on_source.restr PartialHomeomorph.EqOnSource.restr
/- Two equivalent partial homeomorphisms are equal when the source and target are `univ`. -/
-theorem Set.EqOn.restr_eqOn_source {e e' : PartialHomeomorph α β}
+theorem Set.EqOn.restr_eqOn_source {e e' : PartialHomeomorph X Y}
(h : EqOn e e' (e.source ∩ e'.source)) : e.restr e'.source ≈ e'.restr e.source := by
constructor
· rw [e'.restr_source' _ e.open_source]
@@ -1028,7 +1028,7 @@ theorem symm_trans_self : e.symm.trans e ≈ PartialHomeomorph.ofSet e.target e.
e.symm.self_trans_symm
#align local_homeomorph.symm_trans_self PartialHomeomorph.symm_trans_self
-theorem eq_of_eqOnSource_univ {e e' : PartialHomeomorph α β} (h : e ≈ e') (s : e.source = univ)
+theorem eq_of_eqOnSource_univ {e e' : PartialHomeomorph X Y} (h : e ≈ e') (s : e.source = univ)
(t : e.target = univ) : e = e' :=
toPartialEquiv_injective <| PartialEquiv.eq_of_eqOnSource_univ _ _ h s t
#align local_homeomorph.eq_of_eq_on_source_univ PartialHomeomorph.eq_of_eqOnSource_univ
@@ -1041,49 +1041,50 @@ section Prod
/-- The product of two partial homeomorphisms, as a partial homeomorphism on the product space. -/
@[simps! (config := mfld_cfg) toPartialEquiv apply,
simps! (config := .lemmasOnly) source target symm_apply]
-def prod (e : PartialHomeomorph α β) (e' : PartialHomeomorph γ δ) :
- PartialHomeomorph (α × γ) (β × δ) where
- open_source := e.open_source.prod e'.open_source
- open_target := e.open_target.prod e'.open_target
- continuousOn_toFun := e.continuousOn.prod_map e'.continuousOn
- continuousOn_invFun := e.continuousOn_symm.prod_map e'.continuousOn_symm
- toPartialEquiv := e.toPartialEquiv.prod e'.toPartialEquiv
+def prod (eX : PartialHomeomorph X X') (eY : PartialHomeomorph Y Y') :
+ PartialHomeomorph (X × Y) (X' × Y') where
+ open_source := eX.open_source.prod eY.open_source
+ open_target := eX.open_target.prod eY.open_target
+ continuousOn_toFun := eX.continuousOn.prod_map eY.continuousOn
+ continuousOn_invFun := eX.continuousOn_symm.prod_map eY.continuousOn_symm
+ toPartialEquiv := eX.toPartialEquiv.prod eY.toPartialEquiv
#align local_homeomorph.prod PartialHomeomorph.prod
@[simp, mfld_simps]
-theorem prod_symm (e : PartialHomeomorph α β) (e' : PartialHomeomorph γ δ) :
- (e.prod e').symm = e.symm.prod e'.symm :=
+theorem prod_symm (eX : PartialHomeomorph X X') (eY : PartialHomeomorph Y Y') :
+ (eX.prod eY).symm = eX.symm.prod eY.symm :=
rfl
#align local_homeomorph.prod_symm PartialHomeomorph.prod_symm
@[simp]
-theorem refl_prod_refl {α β : Type*} [TopologicalSpace α] [TopologicalSpace β] :
- (PartialHomeomorph.refl α).prod (PartialHomeomorph.refl β) = PartialHomeomorph.refl (α × β) :=
+theorem refl_prod_refl :
+ (PartialHomeomorph.refl X).prod (PartialHomeomorph.refl Y) = PartialHomeomorph.refl (X × Y) :=
PartialHomeomorph.ext _ _ (fun _ => rfl) (fun _ => rfl) univ_prod_univ
#align local_homeomorph.refl_prod_refl PartialHomeomorph.refl_prod_refl
@[simp, mfld_simps]
-theorem prod_trans {η : Type*} {ε : Type*} [TopologicalSpace η] [TopologicalSpace ε]
- (e : PartialHomeomorph α β) (f : PartialHomeomorph β γ) (e' : PartialHomeomorph δ η)
- (f' : PartialHomeomorph η ε) : (e.prod e').trans (f.prod f') = (e.trans f).prod (e'.trans f') :=
+theorem prod_trans (e : PartialHomeomorph X Y) (f : PartialHomeomorph Y Z)
+ (e' : PartialHomeomorph X' Y') (f' : PartialHomeomorph Y' Z') :
+ (e.prod e').trans (f.prod f') = (e.trans f).prod (e'.trans f') :=
toPartialEquiv_injective <| e.1.prod_trans ..
#align local_homeomorph.prod_trans PartialHomeomorph.prod_trans
-theorem prod_eq_prod_of_nonempty {e₁ e₁' : PartialHomeomorph α β} {e₂ e₂' : PartialHomeomorph γ δ}
- (h : (e₁.prod e₂).source.Nonempty) : e₁.prod e₂ = e₁'.prod e₂' ↔ e₁ = e₁' ∧ e₂ = e₂' := by
+theorem prod_eq_prod_of_nonempty {eX eX' : PartialHomeomorph X X'} {eY eY' : PartialHomeomorph Y Y'}
+ (h : (eX.prod eY).source.Nonempty) : eX.prod eY = eX'.prod eY' ↔ eX = eX' ∧ eY = eY' := by
obtain ⟨⟨x, y⟩, -⟩ := id h
- haveI : Nonempty α := ⟨x⟩
- haveI : Nonempty β := ⟨e₁ x⟩
- haveI : Nonempty γ := ⟨y⟩
- haveI : Nonempty δ := ⟨e₂ y⟩
+ haveI : Nonempty X := ⟨x⟩
+ haveI : Nonempty X' := ⟨eX x⟩
+ haveI : Nonempty Y := ⟨y⟩
+ haveI : Nonempty Y' := ⟨eY y⟩
simp_rw [PartialHomeomorph.ext_iff, prod_apply, prod_symm_apply, prod_source, Prod.ext_iff,
Set.prod_eq_prod_iff_of_nonempty h, forall_and, Prod.forall, forall_const,
and_assoc, and_left_comm]
#align local_homeomorph.prod_eq_prod_of_nonempty PartialHomeomorph.prod_eq_prod_of_nonempty
-theorem prod_eq_prod_of_nonempty' {e₁ e₁' : PartialHomeomorph α β} {e₂ e₂' : PartialHomeomorph γ δ}
- (h : (e₁'.prod e₂').source.Nonempty) : e₁.prod e₂ = e₁'.prod e₂' ↔ e₁ = e₁' ∧ e₂ = e₂' := by
- rw [eq_comm, prod_eq_prod_of_nonempty h, eq_comm, @eq_comm _ e₂']
+theorem prod_eq_prod_of_nonempty'
+ {eX eX' : PartialHomeomorph X X'} {eY eY' : PartialHomeomorph Y Y'}
+ (h : (eX'.prod eY').source.Nonempty) : eX.prod eY = eX'.prod eY' ↔ eX = eX' ∧ eY = eY' := by
+ rw [eq_comm, prod_eq_prod_of_nonempty h, eq_comm, @eq_comm _ eY']
#align local_homeomorph.prod_eq_prod_of_nonempty' PartialHomeomorph.prod_eq_prod_of_nonempty'
end Prod
@@ -1091,12 +1092,12 @@ end Prod
/- finite product of partial homeomorphisms -/
section Pi
-variable {ι : Type*} [Fintype ι] {Xi Yi : ι → Type*} [∀ i, TopologicalSpace (Xi i)]
- [∀ i, TopologicalSpace (Yi i)] (ei : ∀ i, PartialHomeomorph (Xi i) (Yi i))
+variable {ι : Type*} [Fintype ι] {X Y : ι → Type*} [∀ i, TopologicalSpace (X i)]
+ [∀ i, TopologicalSpace (Y i)] (ei : ∀ i, PartialHomeomorph (X i) (Y i))
/-- The product of a finite family of `PartialHomeomorph`s. -/
@[simps toPartialEquiv]
-def pi : PartialHomeomorph (∀ i, Xi i) (∀ i, Yi i) where
+def pi : PartialHomeomorph (∀ i, X i) (∀ i, Y i) where
toPartialEquiv := PartialEquiv.pi fun i => (ei i).toPartialEquiv
open_source := isOpen_set_pi finite_univ fun i _ => (ei i).open_source
open_target := isOpen_set_pi finite_univ fun i _ => (ei i).open_target
@@ -1120,10 +1121,10 @@ the definition assumes that the sets `s` and `t` are related both by `e.is_image
To ensure that the new maps are continuous on `source`/`target`, it also assumes that `e.source` and
`e'.source` meet `frontier s` on the same set and `e x = e' x` on this intersection. -/
@[simps! (config := .asFn) toPartialEquiv apply]
-def piecewise (e e' : PartialHomeomorph α β) (s : Set α) (t : Set β) [∀ x, Decidable (x ∈ s)]
+def piecewise (e e' : PartialHomeomorph X Y) (s : Set X) (t : Set Y) [∀ x, Decidable (x ∈ s)]
[∀ y, Decidable (y ∈ t)] (H : e.IsImage s t) (H' : e'.IsImage s t)
(Hs : e.source ∩ frontier s = e'.source ∩ frontier s)
- (Heq : EqOn e e' (e.source ∩ frontier s)) : PartialHomeomorph α β where
+ (Heq : EqOn e e' (e.source ∩ frontier s)) : PartialHomeomorph X Y where
toPartialEquiv := e.toPartialEquiv.piecewise e'.toPartialEquiv s t H H'
open_source := e.open_source.ite e'.open_source Hs
open_target :=
@@ -1136,7 +1137,7 @@ def piecewise (e e' : PartialHomeomorph α β) (s : Set α) (t : Set β) [∀ x,
#align local_homeomorph.piecewise PartialHomeomorph.piecewise
@[simp]
-theorem symm_piecewise (e e' : PartialHomeomorph α β) {s : Set α} {t : Set β}
+theorem symm_piecewise (e e' : PartialHomeomorph X Y) {s : Set X} {t : Set Y}
[∀ x, Decidable (x ∈ s)] [∀ y, Decidable (y ∈ t)] (H : e.IsImage s t) (H' : e'.IsImage s t)
(Hs : e.source ∩ frontier s = e'.source ∩ frontier s)
(Heq : EqOn e e' (e.source ∩ frontier s)) :
@@ -1150,9 +1151,9 @@ theorem symm_piecewise (e e' : PartialHomeomorph α β) {s : Set α} {t : Set β
/-- Combine two `PartialHomeomorph`s with disjoint sources and disjoint targets. We reuse
`PartialHomeomorph.piecewise` then override `toPartialEquiv` to `PartialEquiv.disjointUnion`.
This way we have better definitional equalities for `source` and `target`. -/
-def disjointUnion (e e' : PartialHomeomorph α β) [∀ x, Decidable (x ∈ e.source)]
+def disjointUnion (e e' : PartialHomeomorph X Y) [∀ x, Decidable (x ∈ e.source)]
[∀ y, Decidable (y ∈ e.target)] (Hs : Disjoint e.source e'.source)
- (Ht : Disjoint e.target e'.target) : PartialHomeomorph α β :=
+ (Ht : Disjoint e.target e'.target) : PartialHomeomorph X Y :=
(e.piecewise e' e.source e.target e.isImage_source_target
(e'.isImage_source_target_of_disjoint e Hs.symm Ht.symm)
(by rw [e.open_source.inter_frontier_eq, (Hs.symm.frontier_right e'.open_source).inter_eq])
@@ -1169,7 +1170,7 @@ section Continuity
/-- Continuity within a set at a point can be read under right composition with a local
homeomorphism, if the point is in its target -/
-theorem continuousWithinAt_iff_continuousWithinAt_comp_right {f : β → γ} {s : Set β} {x : β}
+theorem continuousWithinAt_iff_continuousWithinAt_comp_right {f : Y → Z} {s : Set Y} {x : Y}
(h : x ∈ e.target) :
ContinuousWithinAt f s x ↔ ContinuousWithinAt (f ∘ e) (e ⁻¹' s) (e.symm x) := by
simp_rw [ContinuousWithinAt, ← @tendsto_map'_iff _ _ _ _ e,
@@ -1178,7 +1179,7 @@ theorem continuousWithinAt_iff_continuousWithinAt_comp_right {f : β → γ} {s
/-- Continuity at a point can be read under right composition with a partial homeomorphism, if the
point is in its target -/
-theorem continuousAt_iff_continuousAt_comp_right {f : β → γ} {x : β} (h : x ∈ e.target) :
+theorem continuousAt_iff_continuousAt_comp_right {f : Y → Z} {x : Y} (h : x ∈ e.target) :
ContinuousAt f x ↔ ContinuousAt (f ∘ e) (e.symm x) := by
rw [← continuousWithinAt_univ, e.continuousWithinAt_iff_continuousWithinAt_comp_right h,
preimage_univ, continuousWithinAt_univ]
@@ -1186,7 +1187,7 @@ theorem continuousAt_iff_continuousAt_comp_right {f : β → γ} {x : β} (h : x
/-- A function is continuous on a set if and only if its composition with a partial homeomorphism
on the right is continuous on the corresponding set. -/
-theorem continuousOn_iff_continuousOn_comp_right {f : β → γ} {s : Set β} (h : s ⊆ e.target) :
+theorem continuousOn_iff_continuousOn_comp_right {f : Y → Z} {s : Set Y} (h : s ⊆ e.target) :
ContinuousOn f s ↔ ContinuousOn (f ∘ e) (e.source ∩ e ⁻¹' s) := by
simp only [← e.symm_image_eq_source_inter_preimage h, ContinuousOn, ball_image_iff]
refine' forall₂_congr fun x hx => _
@@ -1198,7 +1199,7 @@ theorem continuousOn_iff_continuousOn_comp_right {f : β → γ} {s : Set β} (h
/-- Continuity within a set at a point can be read under left composition with a local
homeomorphism if a neighborhood of the initial point is sent to the source of the local
homeomorphism-/
-theorem continuousWithinAt_iff_continuousWithinAt_comp_left {f : γ → α} {s : Set γ} {x : γ}
+theorem continuousWithinAt_iff_continuousWithinAt_comp_left {f : Z → X} {s : Set Z} {x : Z}
(hx : f x ∈ e.source) (h : f ⁻¹' e.source ∈ 𝓝[s] x) :
ContinuousWithinAt f s x ↔ ContinuousWithinAt (e ∘ f) s x := by
refine' ⟨(e.continuousAt hx).comp_continuousWithinAt, fun fe_cont => _⟩
@@ -1212,7 +1213,7 @@ theorem continuousWithinAt_iff_continuousWithinAt_comp_left {f : γ → α} {s :
/-- Continuity at a point can be read under left composition with a partial homeomorphism if a
neighborhood of the initial point is sent to the source of the partial homeomorphism-/
-theorem continuousAt_iff_continuousAt_comp_left {f : γ → α} {x : γ} (h : f ⁻¹' e.source ∈ 𝓝 x) :
+theorem continuousAt_iff_continuousAt_comp_left {f : Z → X} {x : Z} (h : f ⁻¹' e.source ∈ 𝓝 x) :
ContinuousAt f x ↔ ContinuousAt (e ∘ f) x := by
have hx : f x ∈ e.source := (mem_of_mem_nhds h : _)
have h' : f ⁻¹' e.source ∈ 𝓝[univ] x := by rwa [nhdsWithin_univ]
@@ -1222,7 +1223,7 @@ theorem continuousAt_iff_continuousAt_comp_left {f : γ → α} {x : γ} (h : f
/-- A function is continuous on a set if and only if its composition with a partial homeomorphism
on the left is continuous on the corresponding set. -/
-theorem continuousOn_iff_continuousOn_comp_left {f : γ → α} {s : Set γ} (h : s ⊆ f ⁻¹' e.source) :
+theorem continuousOn_iff_continuousOn_comp_left {f : Z → X} {s : Set Z} (h : s ⊆ f ⁻¹' e.source) :
ContinuousOn f s ↔ ContinuousOn (e ∘ f) s :=
forall₂_congr fun _x hx =>
e.continuousWithinAt_iff_continuousWithinAt_comp_left (h hx)
@@ -1231,7 +1232,7 @@ theorem continuousOn_iff_continuousOn_comp_left {f : γ → α} {s : Set γ} (h
/-- A function is continuous if and only if its composition with a partial homeomorphism
on the left is continuous and its image is contained in the source. -/
-theorem continuous_iff_continuous_comp_left {f : γ → α} (h : f ⁻¹' e.source = univ) :
+theorem continuous_iff_continuous_comp_left {f : Z → X} (h : f ⁻¹' e.source = univ) :
Continuous f ↔ Continuous (e ∘ f) := by
simp only [continuous_iff_continuousOn_univ]
exact e.continuousOn_iff_continuousOn_comp_left (Eq.symm h).subset
@@ -1241,7 +1242,7 @@ end Continuity
/-- The homeomorphism obtained by restricting a `PartialHomeomorph` to a subset of the source. -/
@[simps]
-def homeomorphOfImageSubsetSource {s : Set α} {t : Set β} (hs : s ⊆ e.source) (ht : e '' s = t) :
+def homeomorphOfImageSubsetSource {s : Set X} {t : Set Y} (hs : s ⊆ e.source) (ht : e '' s = t) :
s ≃ₜ t :=
have h₁ : MapsTo e s t := mapsTo'.2 ht.subset
have h₂ : t ⊆ e.target := ht ▸ e.image_source_eq_target ▸ image_subset e hs
@@ -1261,7 +1262,7 @@ def toHomeomorphSourceTarget : e.source ≃ₜ e.target :=
e.homeomorphOfImageSubsetSource subset_rfl e.image_source_eq_target
#align local_homeomorph.to_homeomorph_source_target PartialHomeomorph.toHomeomorphSourceTarget
-theorem secondCountableTopology_source [SecondCountableTopology β] :
+theorem secondCountableTopology_source [SecondCountableTopology Y] :
SecondCountableTopology e.source :=
e.toHomeomorphSourceTarget.secondCountableTopology
#align local_homeomorph.second_countable_topology_source PartialHomeomorph.secondCountableTopology_source
@@ -1276,8 +1277,8 @@ theorem nhds_eq_comap_inf_principal {x} (hx : x ∈ e.source) :
/-- If a partial homeomorphism has source and target equal to univ, then it induces a homeomorphism
between the whole spaces, expressed in this definition. -/
@[simps (config := mfld_cfg) apply symm_apply] -- porting note: todo: add a `PartialEquiv` version
-def toHomeomorphOfSourceEqUnivTargetEqUniv (h : e.source = (univ : Set α)) (h' : e.target = univ) :
- α ≃ₜ β where
+def toHomeomorphOfSourceEqUnivTargetEqUniv (h : e.source = (univ : Set X)) (h' : e.target = univ) :
+ X ≃ₜ Y where
toFun := e
invFun := e.symm
left_inv x :=
@@ -1301,11 +1302,11 @@ theorem openEmbedding_restrict : OpenEmbedding (e.source.restrict e) := by
exact e.isOpen_image_of_subset_source (e.open_source.isOpenMap_subtype_val V hV)
fun _ ⟨x, _, h⟩ ↦ h ▸ x.2
-/-- A partial homeomorphism whose source is all of `α` defines an open embedding of `α` into `β`.
+/-- A partial homeomorphism whose source is all of `X` defines an open embedding of `X` into `Y`.
The converse is also true; see `OpenEmbedding.toPartialHomeomorph`. -/
theorem to_openEmbedding (h : e.source = Set.univ) : OpenEmbedding e :=
e.openEmbedding_restrict.comp
- ((Homeomorph.setCongr h).trans <| Homeomorph.Set.univ α).symm.openEmbedding
+ ((Homeomorph.setCongr h).trans <| Homeomorph.Set.univ X).symm.openEmbedding
#align local_homeomorph.to_open_embedding PartialHomeomorph.to_openEmbedding
@@ -1313,13 +1314,13 @@ end PartialHomeomorph
namespace Homeomorph
-variable (e : α ≃ₜ β) (e' : β ≃ₜ γ)
+variable (e : X ≃ₜ Y) (e' : Y ≃ₜ Z)
/- Register as simp lemmas that the fields of a partial homeomorphism built from a homeomorphism
correspond to the fields of the original homeomorphism. -/
@[simp, mfld_simps]
theorem refl_toPartialHomeomorph :
- (Homeomorph.refl α).toPartialHomeomorph = PartialHomeomorph.refl α :=
+ (Homeomorph.refl X).toPartialHomeomorph = PartialHomeomorph.refl X :=
rfl
#align homeomorph.refl_to_local_homeomorph Homeomorph.refl_toPartialHomeomorph
@@ -1337,7 +1338,7 @@ theorem trans_toPartialHomeomorph :
/-- Precompose a partial homeomorphism with a homeomorphism.
We modify the source and target to have better definitional behavior. -/
@[simps! (config := .asFn)]
-def transPartialHomeomorph (e : α ≃ₜ β) (f' : PartialHomeomorph β γ) : PartialHomeomorph α γ where
+def transPartialHomeomorph (e : X ≃ₜ Y) (f' : PartialHomeomorph Y Z) : PartialHomeomorph X Z where
toPartialEquiv := e.toEquiv.transPartialEquiv f'.toPartialEquiv
open_source := f'.open_source.preimage e.continuous
open_target := f'.open_target
@@ -1345,19 +1346,19 @@ def transPartialHomeomorph (e : α ≃ₜ β) (f' : PartialHomeomorph β γ) : P
continuousOn_invFun := e.symm.continuous.comp_continuousOn f'.symm.continuousOn
#align homeomorph.trans_local_homeomorph Homeomorph.transPartialHomeomorph
-theorem transPartialHomeomorph_eq_trans (e : α ≃ₜ β) (f' : PartialHomeomorph β γ) :
+theorem transPartialHomeomorph_eq_trans (e : X ≃ₜ Y) (f' : PartialHomeomorph Y Z) :
e.transPartialHomeomorph f' = e.toPartialHomeomorph.trans f' :=
PartialHomeomorph.toPartialEquiv_injective <| Equiv.transPartialEquiv_eq_trans _ _
#align homeomorph.trans_local_homeomorph_eq_trans Homeomorph.transPartialHomeomorph_eq_trans
@[simp, mfld_simps]
-theorem transPartialHomeomorph_trans (e : α ≃ₜ β) (f : PartialHomeomorph β γ)
- (f' : PartialHomeomorph γ δ) :
+theorem transPartialHomeomorph_trans (e : X ≃ₜ Y) (f : PartialHomeomorph Y Z)
+ (f' : PartialHomeomorph Z Z') :
(e.transPartialHomeomorph f).trans f' = e.transPartialHomeomorph (f.trans f') := by
simp only [transPartialHomeomorph_eq_trans, PartialHomeomorph.trans_assoc]
@[simp, mfld_simps]
-theorem trans_transPartialHomeomorph (e : α ≃ₜ β) (e' : β ≃ₜ γ) (f'' : PartialHomeomorph γ δ) :
+theorem trans_transPartialHomeomorph (e : X ≃ₜ Y) (e' : Y ≃ₜ Z) (f'' : PartialHomeomorph Z Z') :
(e.trans e').transPartialHomeomorph f'' =
e.transPartialHomeomorph (e'.transPartialHomeomorph f'') := by
simp only [transPartialHomeomorph_eq_trans, PartialHomeomorph.trans_assoc,
@@ -1367,23 +1368,23 @@ end Homeomorph
namespace OpenEmbedding
-variable (f : α → β) (h : OpenEmbedding f)
+variable (f : X → Y) (h : OpenEmbedding f)
-/-- An open embedding of `α` into `β`, with `α` nonempty, defines a partial homeomorphism
-whose source is all of `α`. The converse is also true; see `PartialHomeomorph.to_openEmbedding`. -/
+/-- An open embedding of `X` into `Y`, with `X` nonempty, defines a partial homeomorphism
+whose source is all of `X`. The converse is also true; see `PartialHomeomorph.to_openEmbedding`. -/
@[simps! (config := mfld_cfg) apply source target]
-noncomputable def toPartialHomeomorph [Nonempty α] : PartialHomeomorph α β :=
+noncomputable def toPartialHomeomorph [Nonempty X] : PartialHomeomorph X Y :=
PartialHomeomorph.ofContinuousOpen ((h.toEmbedding.inj.injOn univ).toPartialEquiv _ _)
h.continuous.continuousOn h.isOpenMap isOpen_univ
#align open_embedding.to_local_homeomorph OpenEmbedding.toPartialHomeomorph
-variable [Nonempty α]
+variable [Nonempty X]
-lemma toPartialHomeomorph_left_inv {x : α} : (h.toPartialHomeomorph f).symm (f x) = x := by
+lemma toPartialHomeomorph_left_inv {x : X} : (h.toPartialHomeomorph f).symm (f x) = x := by
rw [← congr_fun (h.toPartialHomeomorph_apply f), PartialHomeomorph.left_inv]
exact Set.mem_univ _
-lemma toPartialHomeomorph_right_inv {x : β} (hx : x ∈ Set.range f) :
+lemma toPartialHomeomorph_right_inv {x : Y} (hx : x ∈ Set.range f) :
f ((h.toPartialHomeomorph f).symm x) = x := by
rw [← congr_fun (h.toPartialHomeomorph_apply f), PartialHomeomorph.right_inv]
rwa [toPartialHomeomorph_target]
@@ -1396,16 +1397,16 @@ namespace TopologicalSpace.Opens
/- `Nonempty s` is not a type class argument because `s`, being a subset, rarely comes with a type
class instance. Then we'd have to manually provide the instance every time we use the following
lemmas, tediously using `haveI := ...` or `@foobar _ _ _ ...`. -/
-variable (s : Opens α) (hs : Nonempty s)
+variable (s : Opens X) (hs : Nonempty s)
-/-- The inclusion of an open subset `s` of a space `α` into `α` is a partial homeomorphism from the
-subtype `s` to `α`. -/
-noncomputable def partialHomeomorphSubtypeCoe : PartialHomeomorph s α :=
+/-- The inclusion of an open subset `s` of a space `X` into `X` is a partial homeomorphism from the
+subtype `s` to `X`. -/
+noncomputable def partialHomeomorphSubtypeCoe : PartialHomeomorph s X :=
OpenEmbedding.toPartialHomeomorph _ s.2.openEmbedding_subtype_val
#align topological_space.opens.local_homeomorph_subtype_coe TopologicalSpace.Opens.partialHomeomorphSubtypeCoe
@[simp, mfld_simps]
-theorem partialHomeomorphSubtypeCoe_coe : (s.partialHomeomorphSubtypeCoe hs : s → α) = (↑) :=
+theorem partialHomeomorphSubtypeCoe_coe : (s.partialHomeomorphSubtypeCoe hs : s → X) = (↑) :=
rfl
#align topological_space.opens.local_homeomorph_subtype_coe_coe TopologicalSpace.Opens.partialHomeomorphSubtypeCoe_coe
@@ -1430,7 +1431,7 @@ section transHomeomorph
/-- Postcompose a partial homeomorphism with a homeomorphism.
We modify the source and target to have better definitional behavior. -/
@[simps! (config := .asFn)]
-def transHomeomorph (e : PartialHomeomorph α β) (f' : β ≃ₜ γ) : PartialHomeomorph α γ where
+def transHomeomorph (e : PartialHomeomorph X Y) (f' : Y ≃ₜ Z) : PartialHomeomorph X Z where
toPartialEquiv := e.toPartialEquiv.transEquiv f'.toEquiv
open_source := e.open_source
open_target := e.open_target.preimage f'.symm.continuous
@@ -1438,19 +1439,19 @@ def transHomeomorph (e : PartialHomeomorph α β) (f' : β ≃ₜ γ) : PartialH
continuousOn_invFun := e.symm.continuousOn.comp f'.symm.continuous.continuousOn fun _ => id
#align local_homeomorph.trans_homeomorph PartialHomeomorph.transHomeomorph
-theorem transHomeomorph_eq_trans (e : PartialHomeomorph α β) (f' : β ≃ₜ γ) :
+theorem transHomeomorph_eq_trans (e : PartialHomeomorph X Y) (f' : Y ≃ₜ Z) :
e.transHomeomorph f' = e.trans f'.toPartialHomeomorph :=
toPartialEquiv_injective <| PartialEquiv.transEquiv_eq_trans _ _
#align local_homeomorph.trans_equiv_eq_trans PartialHomeomorph.transHomeomorph_eq_trans
@[simp, mfld_simps]
-theorem transHomeomorph_transHomeomorph (e : PartialHomeomorph α β) (f' : β ≃ₜ γ) (f'' : γ ≃ₜ δ) :
+theorem transHomeomorph_transHomeomorph (e : PartialHomeomorph X Y) (f' : Y ≃ₜ Z) (f'' : Z ≃ₜ Z') :
(e.transHomeomorph f').transHomeomorph f'' = e.transHomeomorph (f'.trans f'') := by
simp only [transHomeomorph_eq_trans, trans_assoc, Homeomorph.trans_toPartialHomeomorph]
@[simp, mfld_simps]
-theorem trans_transHomeomorph (e : PartialHomeomorph α β) (e' : PartialHomeomorph β γ)
- (f'' : γ ≃ₜ δ) :
+theorem trans_transHomeomorph (e : PartialHomeomorph X Y) (e' : PartialHomeomorph Y Z)
+ (f'' : Z ≃ₜ Z') :
(e.trans e').transHomeomorph f'' = e.trans (e'.transHomeomorph f'') := by
simp only [transHomeomorph_eq_trans, trans_assoc, Homeomorph.trans_toPartialHomeomorph]
@@ -1458,15 +1459,16 @@ end transHomeomorph
/- `subtypeRestr`: restriction to a subtype -/
section subtypeRestr
+
open TopologicalSpace
-variable (e : PartialHomeomorph α β)
+variable (e : PartialHomeomorph X Y)
-variable (s : Opens α) (hs : Nonempty s)
+variable (s : Opens X) (hs : Nonempty s)
/-- The restriction of a partial homeomorphism `e` to an open subset `s` of the domain type
produces a partial homeomorphism whose domain is the subtype `s`. -/
-noncomputable def subtypeRestr : PartialHomeomorph s β :=
+noncomputable def subtypeRestr : PartialHomeomorph s Y :=
(s.partialHomeomorphSubtypeCoe hs).trans e
#align local_homeomorph.subtype_restr PartialHomeomorph.subtypeRestr
@@ -1476,7 +1478,7 @@ theorem subtypeRestr_def : e.subtypeRestr s hs = (s.partialHomeomorphSubtypeCoe
@[simp, mfld_simps]
theorem subtypeRestr_coe :
- ((e.subtypeRestr s hs : PartialHomeomorph s β) : s → β) = Set.restrict ↑s (e : α → β) :=
+ ((e.subtypeRestr s hs : PartialHomeomorph s Y) : s → Y) = Set.restrict ↑s (e : X → Y) :=
rfl
#align local_homeomorph.subtype_restr_coe PartialHomeomorph.subtypeRestr_coe
@@ -1486,7 +1488,7 @@ theorem subtypeRestr_source : (e.subtypeRestr s hs).source = (↑) ⁻¹' e.sour
#align local_homeomorph.subtype_restr_source PartialHomeomorph.subtypeRestr_source
variable {s} in
-theorem map_subtype_source {x : s} (hxe : (x : α) ∈ e.source) :
+theorem map_subtype_source {x : s} (hxe : (x : X) ∈ e.source) :
e x ∈ (e.subtypeRestr s hs).target := by
refine' ⟨e.map_source hxe, _⟩
rw [s.partialHomeomorphSubtypeCoe_target, mem_preimage, e.leftInvOn hxe]
@@ -1495,7 +1497,7 @@ theorem map_subtype_source {x : s} (hxe : (x : α) ∈ e.source) :
/- This lemma characterizes the transition functions of an open subset in terms of the transition
functions of the original space. -/
-theorem subtypeRestr_symm_trans_subtypeRestr (f f' : PartialHomeomorph α β) :
+theorem subtypeRestr_symm_trans_subtypeRestr (f f' : PartialHomeomorph X Y) :
(f.subtypeRestr s hs).symm.trans (f'.subtypeRestr s hs) ≈
(f.symm.trans f').restr (f.target ∩ f.symm ⁻¹' s) := by
simp only [subtypeRestr_def, trans_symm_eq_symm_trans_symm]
@@ -1505,7 +1507,7 @@ theorem subtypeRestr_symm_trans_subtypeRestr (f f' : PartialHomeomorph α β) :
-- f' has been eliminated !!!
have sets_identity : f.symm.source ∩ (f.target ∩ f.symm ⁻¹' s) = f.symm.source ∩ f.symm ⁻¹' s :=
by mfld_set_tac
- have openness₂ : IsOpen (s : Set α) := s.2
+ have openness₂ : IsOpen (s : Set X) := s.2
rw [ofSet_trans', sets_identity, ← trans_of_set' _ openness₂, trans_assoc]
refine' EqOnSource.trans' (eqOnSource_refl _) _
-- f has been eliminated !!!
@@ -1513,7 +1515,7 @@ theorem subtypeRestr_symm_trans_subtypeRestr (f f' : PartialHomeomorph α β) :
simp only [mfld_simps, Setoid.refl]
#align local_homeomorph.subtype_restr_symm_trans_subtype_restr PartialHomeomorph.subtypeRestr_symm_trans_subtypeRestr
-theorem subtypeRestr_symm_eqOn (U : Opens α) (hU : Nonempty U) :
+theorem subtypeRestr_symm_eqOn (U : Opens X) (hU : Nonempty U) :
EqOn e.symm (Subtype.val ∘ (e.subtypeRestr U hU).symm) (e.subtypeRestr U hU).target := by
intro y hy
rw [eq_comm, eq_symm_apply _ _ hy.1]
@@ -1521,7 +1523,7 @@ theorem subtypeRestr_symm_eqOn (U : Opens α) (hU : Nonempty U) :
rw [← subtypeRestr_coe, (e.subtypeRestr U hU).right_inv hy]
· have := map_target _ hy; rwa [subtypeRestr_source] at this
-theorem subtypeRestr_symm_eqOn_of_le {U V : Opens α} (hU : Nonempty U) (hV : Nonempty V)
+theorem subtypeRestr_symm_eqOn_of_le {U V : Opens X} (hU : Nonempty U) (hV : Nonempty V)
(hUV : U ≤ V) : EqOn (e.subtypeRestr V hV).symm (Set.inclusion hUV ∘ (e.subtypeRestr U hU).symm)
(e.subtypeRestr U hU).target := by
set i := Set.inclusion hUV
[Nonempty s]
explicit (#9894)
Subsets aren't going to have Nonempty
instances on them, typically, so one would have to manually construct a term of [Nonempty s]
whenever PartialHomeomorph.subtypeRestr
is used. Turning this instance argument explicit, (hs : Nonempty s)
would help us avoid [@PartialHomeomorph](https://github.com/PartialHomeomorph).subtypeRestr _ _ _ _
constructions or haveI : Nonempty ...
.
Its only downstream effect currently is in ChartedSpace.lean
.
@@ -1393,7 +1393,10 @@ end OpenEmbedding
/- inclusion of an open set in a topological space -/
namespace TopologicalSpace.Opens
-variable (s : Opens α) [Nonempty s]
+/- `Nonempty s` is not a type class argument because `s`, being a subset, rarely comes with a type
+class instance. Then we'd have to manually provide the instance every time we use the following
+lemmas, tediously using `haveI := ...` or `@foobar _ _ _ ...`. -/
+variable (s : Opens α) (hs : Nonempty s)
/-- The inclusion of an open subset `s` of a space `α` into `α` is a partial homeomorphism from the
subtype `s` to `α`. -/
@@ -1402,17 +1405,17 @@ noncomputable def partialHomeomorphSubtypeCoe : PartialHomeomorph s α :=
#align topological_space.opens.local_homeomorph_subtype_coe TopologicalSpace.Opens.partialHomeomorphSubtypeCoe
@[simp, mfld_simps]
-theorem partialHomeomorphSubtypeCoe_coe : (s.partialHomeomorphSubtypeCoe : s → α) = (↑) :=
+theorem partialHomeomorphSubtypeCoe_coe : (s.partialHomeomorphSubtypeCoe hs : s → α) = (↑) :=
rfl
#align topological_space.opens.local_homeomorph_subtype_coe_coe TopologicalSpace.Opens.partialHomeomorphSubtypeCoe_coe
@[simp, mfld_simps]
-theorem partialHomeomorphSubtypeCoe_source : s.partialHomeomorphSubtypeCoe.source = Set.univ :=
+theorem partialHomeomorphSubtypeCoe_source : (s.partialHomeomorphSubtypeCoe hs).source = Set.univ :=
rfl
#align topological_space.opens.local_homeomorph_subtype_coe_source TopologicalSpace.Opens.partialHomeomorphSubtypeCoe_source
@[simp, mfld_simps]
-theorem partialHomeomorphSubtypeCoe_target : s.partialHomeomorphSubtypeCoe.target = s := by
+theorem partialHomeomorphSubtypeCoe_target : (s.partialHomeomorphSubtypeCoe hs).target = s := by
simp only [partialHomeomorphSubtypeCoe, Subtype.range_coe_subtype, mfld_simps]
rfl
#align topological_space.opens.local_homeomorph_subtype_coe_target TopologicalSpace.Opens.partialHomeomorphSubtypeCoe_target
@@ -1459,31 +1462,32 @@ open TopologicalSpace
variable (e : PartialHomeomorph α β)
-variable (s : Opens α) [Nonempty s]
+variable (s : Opens α) (hs : Nonempty s)
/-- The restriction of a partial homeomorphism `e` to an open subset `s` of the domain type
produces a partial homeomorphism whose domain is the subtype `s`. -/
noncomputable def subtypeRestr : PartialHomeomorph s β :=
- s.partialHomeomorphSubtypeCoe.trans e
+ (s.partialHomeomorphSubtypeCoe hs).trans e
#align local_homeomorph.subtype_restr PartialHomeomorph.subtypeRestr
-theorem subtypeRestr_def : e.subtypeRestr s = s.partialHomeomorphSubtypeCoe.trans e :=
+theorem subtypeRestr_def : e.subtypeRestr s hs = (s.partialHomeomorphSubtypeCoe hs).trans e :=
rfl
#align local_homeomorph.subtype_restr_def PartialHomeomorph.subtypeRestr_def
@[simp, mfld_simps]
theorem subtypeRestr_coe :
- ((e.subtypeRestr s : PartialHomeomorph s β) : s → β) = Set.restrict ↑s (e : α → β) :=
+ ((e.subtypeRestr s hs : PartialHomeomorph s β) : s → β) = Set.restrict ↑s (e : α → β) :=
rfl
#align local_homeomorph.subtype_restr_coe PartialHomeomorph.subtypeRestr_coe
@[simp, mfld_simps]
-theorem subtypeRestr_source : (e.subtypeRestr s).source = (↑) ⁻¹' e.source := by
+theorem subtypeRestr_source : (e.subtypeRestr s hs).source = (↑) ⁻¹' e.source := by
simp only [subtypeRestr_def, mfld_simps]
#align local_homeomorph.subtype_restr_source PartialHomeomorph.subtypeRestr_source
variable {s} in
-theorem map_subtype_source {x : s} (hxe : (x : α) ∈ e.source): e x ∈ (e.subtypeRestr s).target := by
+theorem map_subtype_source {x : s} (hxe : (x : α) ∈ e.source) :
+ e x ∈ (e.subtypeRestr s hs).target := by
refine' ⟨e.map_source hxe, _⟩
rw [s.partialHomeomorphSubtypeCoe_target, mem_preimage, e.leftInvOn hxe]
exact x.prop
@@ -1492,7 +1496,7 @@ theorem map_subtype_source {x : s} (hxe : (x : α) ∈ e.source): e x ∈ (e.sub
/- This lemma characterizes the transition functions of an open subset in terms of the transition
functions of the original space. -/
theorem subtypeRestr_symm_trans_subtypeRestr (f f' : PartialHomeomorph α β) :
- (f.subtypeRestr s).symm.trans (f'.subtypeRestr s) ≈
+ (f.subtypeRestr s hs).symm.trans (f'.subtypeRestr s hs) ≈
(f.symm.trans f').restr (f.target ∩ f.symm ⁻¹' s) := by
simp only [subtypeRestr_def, trans_symm_eq_symm_trans_symm]
have openness₁ : IsOpen (f.target ∩ f.symm ⁻¹' s) := f.isOpen_inter_preimage_symm s.2
@@ -1505,35 +1509,35 @@ theorem subtypeRestr_symm_trans_subtypeRestr (f f' : PartialHomeomorph α β) :
rw [ofSet_trans', sets_identity, ← trans_of_set' _ openness₂, trans_assoc]
refine' EqOnSource.trans' (eqOnSource_refl _) _
-- f has been eliminated !!!
- refine' Setoid.trans (symm_trans_self s.partialHomeomorphSubtypeCoe) _
+ refine' Setoid.trans (symm_trans_self (s.partialHomeomorphSubtypeCoe hs)) _
simp only [mfld_simps, Setoid.refl]
#align local_homeomorph.subtype_restr_symm_trans_subtype_restr PartialHomeomorph.subtypeRestr_symm_trans_subtypeRestr
-theorem subtypeRestr_symm_eqOn (U : Opens α) [Nonempty U] :
- EqOn e.symm (Subtype.val ∘ (e.subtypeRestr U).symm) (e.subtypeRestr U).target := by
+theorem subtypeRestr_symm_eqOn (U : Opens α) (hU : Nonempty U) :
+ EqOn e.symm (Subtype.val ∘ (e.subtypeRestr U hU).symm) (e.subtypeRestr U hU).target := by
intro y hy
rw [eq_comm, eq_symm_apply _ _ hy.1]
· change restrict _ e _ = _
- rw [← subtypeRestr_coe, (e.subtypeRestr U).right_inv hy]
+ rw [← subtypeRestr_coe, (e.subtypeRestr U hU).right_inv hy]
· have := map_target _ hy; rwa [subtypeRestr_source] at this
-theorem subtypeRestr_symm_eqOn_of_le {U V : Opens α} [Nonempty U] [Nonempty V] (hUV : U ≤ V) :
- EqOn (e.subtypeRestr V).symm (Set.inclusion hUV ∘ (e.subtypeRestr U).symm)
- (e.subtypeRestr U).target := by
+theorem subtypeRestr_symm_eqOn_of_le {U V : Opens α} (hU : Nonempty U) (hV : Nonempty V)
+ (hUV : U ≤ V) : EqOn (e.subtypeRestr V hV).symm (Set.inclusion hUV ∘ (e.subtypeRestr U hU).symm)
+ (e.subtypeRestr U hU).target := by
set i := Set.inclusion hUV
intro y hy
dsimp [PartialHomeomorph.subtypeRestr_def] at hy ⊢
- have hyV : e.symm y ∈ V.partialHomeomorphSubtypeCoe.target := by
+ have hyV : e.symm y ∈ (V.partialHomeomorphSubtypeCoe hV).target := by
rw [Opens.partialHomeomorphSubtypeCoe_target] at hy ⊢
exact hUV hy.2
- refine' V.partialHomeomorphSubtypeCoe.injOn _ trivial _
+ refine' (V.partialHomeomorphSubtypeCoe hV).injOn _ trivial _
· rw [← PartialHomeomorph.symm_target]
apply PartialHomeomorph.map_source
rw [PartialHomeomorph.symm_source]
exact hyV
- · rw [V.partialHomeomorphSubtypeCoe.right_inv hyV]
- show _ = U.partialHomeomorphSubtypeCoe _
- rw [U.partialHomeomorphSubtypeCoe.right_inv hy.2]
+ · rw [(V.partialHomeomorphSubtypeCoe hV).right_inv hyV]
+ show _ = U.partialHomeomorphSubtypeCoe hU _
+ rw [(U.partialHomeomorphSubtypeCoe hU).right_inv hy.2]
#align local_homeomorph.subtype_restr_symm_eq_on_of_le PartialHomeomorph.subtypeRestr_symm_eqOn_of_le
end subtypeRestr
@@ -10,7 +10,6 @@ import Mathlib.Topology.Sets.Opens
/-!
# Partial homeomorphisms
-# Partial homeomorphisms
This file defines homeomorphisms between open subsets of topological spaces. An element `e` of
`PartialHomeomorph α β` is an extension of `PartialEquiv α β`, i.e., it is a pair of functions
@@ -45,7 +44,6 @@ If a lemma deals with the intersection of a set with either source or target of
then it should use `e.source ∩ s` or `e.target ∩ t`, not `s ∩ e.source` or `t ∩ e.target`.
-/
-
open Function Set Filter Topology
variable {α : Type*} {β : Type*} {γ : Type*} {δ : Type*} [TopologicalSpace α]
@@ -63,7 +61,10 @@ structure PartialHomeomorph (α : Type*) (β : Type*) [TopologicalSpace α]
namespace PartialHomeomorph
-variable (e : PartialHomeomorph α β) (e' : PartialHomeomorph β γ)
+variable (e : PartialHomeomorph α β)
+
+/- Basic properties; inverse (symm instance) -/
+section Basic
/-- Coercion of a partial homeomorphisms to a function. We don't use `e.toFun` because it is
actually `e.toPartialEquiv.toFun`, so `simp` will apply lemmas about `toPartialEquiv`.
@@ -200,6 +201,8 @@ protected theorem surjOn : SurjOn e e.source e.target :=
e.bijOn.surjOn
#align local_homeomorph.surj_on PartialHomeomorph.surjOn
+end Basic
+
/-- Interpret a `Homeomorph` as a `PartialHomeomorph` by restricting it
to an open set `s` in the domain and to `t` in the codomain. -/
@[simps! (config := .asFn) apply symm_apply toPartialEquiv,
@@ -490,6 +493,8 @@ theorem isOpen_image_iff_of_subset_source {s : Set α} (hs : s ⊆ e.source) :
IsOpen (e '' s) ↔ IsOpen s := by
rw [← e.symm.isOpen_symm_image_iff_of_subset_target hs, e.symm_symm]
+section IsImage
+
/-!
### `PartialHomeomorph.IsImage` relation
@@ -691,6 +696,8 @@ theorem preimage_frontier (s : Set β) :
(IsImage.of_preimage_eq rfl).frontier.preimage_eq
#align local_homeomorph.preimage_frontier PartialHomeomorph.preimage_frontier
+end IsImage
+
/-- A `PartialEquiv` with continuous open forward map and open source is a `PartialHomeomorph`. -/
def ofContinuousOpenRestrict (e : PartialEquiv α β) (hc : ContinuousOn e e.source)
(ho : IsOpenMap (e.source.restrict e)) (hs : IsOpen e.source) : PartialHomeomorph α β where
@@ -782,7 +789,8 @@ theorem refl_symm : (PartialHomeomorph.refl α).symm = PartialHomeomorph.refl α
rfl
#align local_homeomorph.refl_symm PartialHomeomorph.refl_symm
-section
+/- ofSet: the identity on a set `s` -/
+section ofSet
variable {s : Set α} (hs : IsOpen s)
@@ -810,7 +818,12 @@ theorem ofSet_symm : (ofSet s hs).symm = ofSet s hs :=
theorem ofSet_univ_eq_refl : ofSet univ isOpen_univ = PartialHomeomorph.refl α := by ext <;> simp
#align local_homeomorph.of_set_univ_eq_refl PartialHomeomorph.ofSet_univ_eq_refl
-end
+end ofSet
+
+/- `trans`: composition of two partial homeomorphisms -/
+section trans
+
+variable (e' : PartialHomeomorph β γ)
/-- Composition of two partial homeomorphisms when the target of the first and the source of
the second coincide. -/
@@ -933,6 +946,11 @@ theorem restr_trans (s : Set α) : (e.restr s).trans e' = (e.trans e').restr s :
PartialEquiv.restr_trans e.toPartialEquiv e'.toPartialEquiv (interior s)
#align local_homeomorph.restr_trans PartialHomeomorph.restr_trans
+end trans
+
+/- `EqOnSource`: equivalence on their source -/
+section EqOnSource
+
/-- `EqOnSource e e'` means that `e` and `e'` have the same source, and coincide there. They
should really be considered the same partial equivalence. -/
def EqOnSource (e e' : PartialHomeomorph α β) : Prop :=
@@ -1015,6 +1033,9 @@ theorem eq_of_eqOnSource_univ {e e' : PartialHomeomorph α β} (h : e ≈ e') (s
toPartialEquiv_injective <| PartialEquiv.eq_of_eqOnSource_univ _ _ h s t
#align local_homeomorph.eq_of_eq_on_source_univ PartialHomeomorph.eq_of_eqOnSource_univ
+end EqOnSource
+
+/- product of two partial homeomorphisms -/
section Prod
/-- The product of two partial homeomorphisms, as a partial homeomorphism on the product space. -/
@@ -1067,6 +1088,27 @@ theorem prod_eq_prod_of_nonempty' {e₁ e₁' : PartialHomeomorph α β} {e₂ e
end Prod
+/- finite product of partial homeomorphisms -/
+section Pi
+
+variable {ι : Type*} [Fintype ι] {Xi Yi : ι → Type*} [∀ i, TopologicalSpace (Xi i)]
+ [∀ i, TopologicalSpace (Yi i)] (ei : ∀ i, PartialHomeomorph (Xi i) (Yi i))
+
+/-- The product of a finite family of `PartialHomeomorph`s. -/
+@[simps toPartialEquiv]
+def pi : PartialHomeomorph (∀ i, Xi i) (∀ i, Yi i) where
+ toPartialEquiv := PartialEquiv.pi fun i => (ei i).toPartialEquiv
+ open_source := isOpen_set_pi finite_univ fun i _ => (ei i).open_source
+ open_target := isOpen_set_pi finite_univ fun i _ => (ei i).open_target
+ continuousOn_toFun := continuousOn_pi.2 fun i =>
+ (ei i).continuousOn.comp (continuous_apply _).continuousOn fun _f hf => hf i trivial
+ continuousOn_invFun := continuousOn_pi.2 fun i =>
+ (ei i).continuousOn_symm.comp (continuous_apply _).continuousOn fun _f hf => hf i trivial
+#align local_homeomorph.pi PartialHomeomorph.pi
+
+end Pi
+
+/- combining two partial homeomorphisms using `Set.piecewise` -/
section Piecewise
/-- Combine two `PartialHomeomorph`s using `Set.piecewise`. The source of the new
@@ -1123,25 +1165,6 @@ def disjointUnion (e e' : PartialHomeomorph α β) [∀ x, Decidable (x ∈ e.so
end Piecewise
-section Pi
-
-variable {ι : Type*} [Fintype ι] {Xi Yi : ι → Type*} [∀ i, TopologicalSpace (Xi i)]
- [∀ i, TopologicalSpace (Yi i)] (ei : ∀ i, PartialHomeomorph (Xi i) (Yi i))
-
-/-- The product of a finite family of `PartialHomeomorph`s. -/
-@[simps toPartialEquiv]
-def pi : PartialHomeomorph (∀ i, Xi i) (∀ i, Yi i) where
- toPartialEquiv := PartialEquiv.pi fun i => (ei i).toPartialEquiv
- open_source := isOpen_set_pi finite_univ fun i _ => (ei i).open_source
- open_target := isOpen_set_pi finite_univ fun i _ => (ei i).open_target
- continuousOn_toFun := continuousOn_pi.2 fun i =>
- (ei i).continuousOn.comp (continuous_apply _).continuousOn fun _f hf => hf i trivial
- continuousOn_invFun := continuousOn_pi.2 fun i =>
- (ei i).continuousOn_symm.comp (continuous_apply _).continuousOn fun _f hf => hf i trivial
-#align local_homeomorph.pi PartialHomeomorph.pi
-
-end Pi
-
section Continuity
/-- Continuity within a set at a point can be read under right composition with a local
@@ -1367,10 +1390,9 @@ lemma toPartialHomeomorph_right_inv {x : β} (hx : x ∈ Set.range f) :
end OpenEmbedding
+/- inclusion of an open set in a topological space -/
namespace TopologicalSpace.Opens
-open TopologicalSpace
-
variable (s : Opens α) [Nonempty s]
/-- The inclusion of an open subset `s` of a space `α` into `α` is a partial homeomorphism from the
@@ -1399,6 +1421,9 @@ end TopologicalSpace.Opens
namespace PartialHomeomorph
+/- post-compose with a partial homeomorphism -/
+section transHomeomorph
+
/-- Postcompose a partial homeomorphism with a homeomorphism.
We modify the source and target to have better definitional behavior. -/
@[simps! (config := .asFn)]
@@ -1426,6 +1451,10 @@ theorem trans_transHomeomorph (e : PartialHomeomorph α β) (e' : PartialHomeomo
(e.trans e').transHomeomorph f'' = e.trans (e'.transHomeomorph f'') := by
simp only [transHomeomorph_eq_trans, trans_assoc, Homeomorph.trans_toPartialHomeomorph]
+end transHomeomorph
+
+/- `subtypeRestr`: restriction to a subtype -/
+section subtypeRestr
open TopologicalSpace
variable (e : PartialHomeomorph α β)
@@ -1453,16 +1482,13 @@ theorem subtypeRestr_source : (e.subtypeRestr s).source = (↑) ⁻¹' e.source
simp only [subtypeRestr_def, mfld_simps]
#align local_homeomorph.subtype_restr_source PartialHomeomorph.subtypeRestr_source
-variable {s}
-
+variable {s} in
theorem map_subtype_source {x : s} (hxe : (x : α) ∈ e.source): e x ∈ (e.subtypeRestr s).target := by
refine' ⟨e.map_source hxe, _⟩
rw [s.partialHomeomorphSubtypeCoe_target, mem_preimage, e.leftInvOn hxe]
exact x.prop
#align local_homeomorph.map_subtype_source PartialHomeomorph.map_subtype_source
-variable (s)
-
/- This lemma characterizes the transition functions of an open subset in terms of the transition
functions of the original space. -/
theorem subtypeRestr_symm_trans_subtypeRestr (f f' : PartialHomeomorph α β) :
@@ -1510,4 +1536,6 @@ theorem subtypeRestr_symm_eqOn_of_le {U V : Opens α} [Nonempty U] [Nonempty V]
rw [U.partialHomeomorphSubtypeCoe.right_inv hy.2]
#align local_homeomorph.subtype_restr_symm_eq_on_of_le PartialHomeomorph.subtypeRestr_symm_eqOn_of_le
+end subtypeRestr
+
end PartialHomeomorph
FunLike
to DFunLike
(#9785)
This prepares for the introduction of a non-dependent synonym of FunLike, which helps a lot with keeping #8386 readable.
This is entirely search-and-replace in 680197f combined with manual fixes in 4145626, e900597 and b8428f8. The commands that generated this change:
sed -i 's/\bFunLike\b/DFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\btoFunLike\b/toDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/import Mathlib.Data.DFunLike/import Mathlib.Data.FunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\bHom_FunLike\b/Hom_DFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\binstFunLike\b/instDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\bfunLike\b/instDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\btoo many metavariables to apply `fun_like.has_coe_to_fun`/too many metavariables to apply `DFunLike.hasCoeToFun`/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
Co-authored-by: Anne Baanen <Vierkantor@users.noreply.github.com>
@@ -71,7 +71,7 @@ While we may want to switch to this behavior later, doing it mid-port will break
@[coe] def toFun' : α → β := e.toFun
/-- Coercion of a `PartialHomeomorph` to function.
-Note that a `PartialHomeomorph` is not `FunLike`. -/
+Note that a `PartialHomeomorph` is not `DFunLike`. -/
instance : CoeFun (PartialHomeomorph α β) fun _ => α → β :=
⟨fun e => e.toFun'⟩
@@ -240,10 +240,10 @@ theorem source_preimage_target : e.source ⊆ e ⁻¹' e.target :=
#align local_homeomorph.source_preimage_target PartialHomeomorph.source_preimage_target
@[deprecated toPartialEquiv_injective]
-theorem eq_of_localEquiv_eq {e e' : PartialHomeomorph α β}
+theorem eq_of_partialEquiv_eq {e e' : PartialHomeomorph α β}
(h : e.toPartialEquiv = e'.toPartialEquiv) : e = e' :=
toPartialEquiv_injective h
-#align local_homeomorph.eq_of_local_equiv_eq PartialHomeomorph.eq_of_localEquiv_eq
+#align local_homeomorph.eq_of_local_equiv_eq PartialHomeomorph.eq_of_partialEquiv_eq
theorem eventually_left_inverse {x} (hx : x ∈ e.source) :
∀ᶠ y in 𝓝 x, e.symm (e y) = y :=
@@ -773,9 +773,9 @@ protected def refl (α : Type*) [TopologicalSpace α] : PartialHomeomorph α α
#align local_homeomorph.refl PartialHomeomorph.refl
@[simp, mfld_simps]
-theorem refl_localEquiv : (PartialHomeomorph.refl α).toPartialEquiv = PartialEquiv.refl α :=
+theorem refl_partialEquiv : (PartialHomeomorph.refl α).toPartialEquiv = PartialEquiv.refl α :=
rfl
-#align local_homeomorph.refl_local_equiv PartialHomeomorph.refl_localEquiv
+#align local_homeomorph.refl_local_equiv PartialHomeomorph.refl_partialEquiv
@[simp, mfld_simps]
theorem refl_symm : (PartialHomeomorph.refl α).symm = PartialHomeomorph.refl α :=
@@ -819,7 +819,7 @@ protected def trans' (h : e.target = e'.source) : PartialHomeomorph α γ where
toPartialEquiv := PartialEquiv.trans' e.toPartialEquiv e'.toPartialEquiv h
open_source := e.open_source
open_target := e'.open_target
- continuousOn_toFun := e'.continuousOn.comp e.continuousOn <| h ▸ e.mapsTo
+ continuousOn_toFun := e'.continuousOn.comp e.continuousOn <| h ▸ e.mapsTo
continuousOn_invFun := e.continuousOn_symm.comp e'.continuousOn_symm <| h.symm ▸ e'.symm_mapsTo
#align local_homeomorph.trans' PartialHomeomorph.trans'
General housekeeping; this also makes re-naming the types to Greek letters easier.
@@ -228,7 +228,7 @@ def replaceEquiv (e : PartialHomeomorph α β) (e' : PartialEquiv α β) (h : e.
continuousOn_invFun := h ▸ e.continuousOn_invFun
#align local_homeomorph.replace_equiv PartialHomeomorph.replaceEquiv
-theorem replaceEquiv_eq_self (e : PartialHomeomorph α β) (e' : PartialEquiv α β)
+theorem replaceEquiv_eq_self (e' : PartialEquiv α β)
(h : e.toPartialEquiv = e') : e.replaceEquiv e' h = e := by
cases e
subst e'
@@ -245,27 +245,27 @@ theorem eq_of_localEquiv_eq {e e' : PartialHomeomorph α β}
toPartialEquiv_injective h
#align local_homeomorph.eq_of_local_equiv_eq PartialHomeomorph.eq_of_localEquiv_eq
-theorem eventually_left_inverse (e : PartialHomeomorph α β) {x} (hx : x ∈ e.source) :
+theorem eventually_left_inverse {x} (hx : x ∈ e.source) :
∀ᶠ y in 𝓝 x, e.symm (e y) = y :=
(e.open_source.eventually_mem hx).mono e.left_inv'
#align local_homeomorph.eventually_left_inverse PartialHomeomorph.eventually_left_inverse
-theorem eventually_left_inverse' (e : PartialHomeomorph α β) {x} (hx : x ∈ e.target) :
+theorem eventually_left_inverse' {x} (hx : x ∈ e.target) :
∀ᶠ y in 𝓝 (e.symm x), e.symm (e y) = y :=
e.eventually_left_inverse (e.map_target hx)
#align local_homeomorph.eventually_left_inverse' PartialHomeomorph.eventually_left_inverse'
-theorem eventually_right_inverse (e : PartialHomeomorph α β) {x} (hx : x ∈ e.target) :
+theorem eventually_right_inverse {x} (hx : x ∈ e.target) :
∀ᶠ y in 𝓝 x, e (e.symm y) = y :=
(e.open_target.eventually_mem hx).mono e.right_inv'
#align local_homeomorph.eventually_right_inverse PartialHomeomorph.eventually_right_inverse
-theorem eventually_right_inverse' (e : PartialHomeomorph α β) {x} (hx : x ∈ e.source) :
+theorem eventually_right_inverse' {x} (hx : x ∈ e.source) :
∀ᶠ y in 𝓝 (e x), e (e.symm y) = y :=
e.eventually_right_inverse (e.map_source hx)
#align local_homeomorph.eventually_right_inverse' PartialHomeomorph.eventually_right_inverse'
-theorem eventually_ne_nhdsWithin (e : PartialHomeomorph α β) {x} (hx : x ∈ e.source) :
+theorem eventually_ne_nhdsWithin {x} (hx : x ∈ e.source) :
∀ᶠ x' in 𝓝[≠] x, e x' ≠ e x :=
eventually_nhdsWithin_iff.2 <|
(e.eventually_left_inverse hx).mono fun x' hx' =>
@@ -319,11 +319,11 @@ theorem source_inter_preimage_target_inter (s : Set β) :
e.toPartialEquiv.source_inter_preimage_target_inter s
#align local_homeomorph.source_inter_preimage_target_inter PartialHomeomorph.source_inter_preimage_target_inter
-theorem image_source_eq_target (e : PartialHomeomorph α β) : e '' e.source = e.target :=
+theorem image_source_eq_target : e '' e.source = e.target :=
e.toPartialEquiv.image_source_eq_target
#align local_homeomorph.image_source_eq_target PartialHomeomorph.image_source_eq_target
-theorem symm_image_target_eq_source (e : PartialHomeomorph α β) : e.symm '' e.target = e.source :=
+theorem symm_image_target_eq_source : e.symm '' e.target = e.source :=
e.symm.image_source_eq_target
#align local_homeomorph.symm_image_target_eq_source PartialHomeomorph.symm_image_target_eq_source
@@ -392,7 +392,7 @@ theorem image_mem_nhds {x} (hx : x ∈ e.source) {s : Set α} (hs : s ∈ 𝓝 x
e.map_nhds_eq hx ▸ Filter.image_mem_map hs
#align local_homeomorph.image_mem_nhds PartialHomeomorph.image_mem_nhds
-theorem map_nhdsWithin_eq (e : PartialHomeomorph α β) {x} (hx : x ∈ e.source) (s : Set α) :
+theorem map_nhdsWithin_eq {x} (hx : x ∈ e.source) (s : Set α) :
map e (𝓝[s] x) = 𝓝[e '' (e.source ∩ s)] e x :=
calc
map e (𝓝[s] x) = map e (𝓝[e.source ∩ s] x) :=
@@ -403,31 +403,31 @@ theorem map_nhdsWithin_eq (e : PartialHomeomorph α β) {x} (hx : x ∈ e.source
(e.continuousAt hx).continuousWithinAt
#align local_homeomorph.map_nhds_within_eq PartialHomeomorph.map_nhdsWithin_eq
-theorem map_nhdsWithin_preimage_eq (e : PartialHomeomorph α β) {x} (hx : x ∈ e.source) (s : Set β) :
+theorem map_nhdsWithin_preimage_eq {x} (hx : x ∈ e.source) (s : Set β) :
map e (𝓝[e ⁻¹' s] x) = 𝓝[s] e x := by
rw [e.map_nhdsWithin_eq hx, e.image_source_inter_eq', e.target_inter_inv_preimage_preimage,
e.nhdsWithin_target_inter (e.map_source hx)]
#align local_homeomorph.map_nhds_within_preimage_eq PartialHomeomorph.map_nhdsWithin_preimage_eq
-theorem eventually_nhds (e : PartialHomeomorph α β) {x : α} (p : β → Prop) (hx : x ∈ e.source) :
+theorem eventually_nhds {x : α} (p : β → Prop) (hx : x ∈ e.source) :
(∀ᶠ y in 𝓝 (e x), p y) ↔ ∀ᶠ x in 𝓝 x, p (e x) :=
Iff.trans (by rw [e.map_nhds_eq hx]) eventually_map
#align local_homeomorph.eventually_nhds PartialHomeomorph.eventually_nhds
-theorem eventually_nhds' (e : PartialHomeomorph α β) {x : α} (p : α → Prop) (hx : x ∈ e.source) :
+theorem eventually_nhds' {x : α} (p : α → Prop) (hx : x ∈ e.source) :
(∀ᶠ y in 𝓝 (e x), p (e.symm y)) ↔ ∀ᶠ x in 𝓝 x, p x := by
rw [e.eventually_nhds _ hx]
refine' eventually_congr ((e.eventually_left_inverse hx).mono fun y hy => _)
rw [hy]
#align local_homeomorph.eventually_nhds' PartialHomeomorph.eventually_nhds'
-theorem eventually_nhdsWithin (e : PartialHomeomorph α β) {x : α} (p : β → Prop) {s : Set α}
+theorem eventually_nhdsWithin {x : α} (p : β → Prop) {s : Set α}
(hx : x ∈ e.source) : (∀ᶠ y in 𝓝[e.symm ⁻¹' s] e x, p y) ↔ ∀ᶠ x in 𝓝[s] x, p (e x) := by
refine' Iff.trans _ eventually_map
rw [e.map_nhdsWithin_eq hx, e.image_source_inter_eq', e.nhdsWithin_target_inter (e.mapsTo hx)]
#align local_homeomorph.eventually_nhds_within PartialHomeomorph.eventually_nhdsWithin
-theorem eventually_nhdsWithin' (e : PartialHomeomorph α β) {x : α} (p : α → Prop) {s : Set α}
+theorem eventually_nhdsWithin' {x : α} (p : α → Prop) {s : Set α}
(hx : x ∈ e.source) : (∀ᶠ y in 𝓝[e.symm ⁻¹' s] e x, p (e.symm y)) ↔ ∀ᶠ x in 𝓝[s] x, p x := by
rw [e.eventually_nhdsWithin _ hx]
refine eventually_congr <|
@@ -1238,7 +1238,7 @@ def toHomeomorphSourceTarget : e.source ≃ₜ e.target :=
e.homeomorphOfImageSubsetSource subset_rfl e.image_source_eq_target
#align local_homeomorph.to_homeomorph_source_target PartialHomeomorph.toHomeomorphSourceTarget
-theorem secondCountableTopology_source [SecondCountableTopology β] (e : PartialHomeomorph α β) :
+theorem secondCountableTopology_source [SecondCountableTopology β] :
SecondCountableTopology e.source :=
e.toHomeomorphSourceTarget.secondCountableTopology
#align local_homeomorph.second_countable_topology_source PartialHomeomorph.secondCountableTopology_source
From sphere-eversion. While I'm in the area,
image_isOpen_of_isOpen
, which is an exact duplicate of isOpen_image_of_subset_source
image_isOpen_of_isOpen'
to isOpen_image_source_inter_of_isOpen
(which matches the naming convention)isOpen_inter_preimage_symm
next to its adjacent lemmas@@ -454,17 +454,42 @@ theorem isOpen_inter_preimage {s : Set β} (hs : IsOpen s) : IsOpen (e.source
e.continuousOn.isOpen_inter_preimage e.open_source hs
#align local_homeomorph.preimage_open_of_open PartialHomeomorph.isOpen_inter_preimage
-/-- A partial homeomorphism is an open map on its source. -/
+theorem isOpen_inter_preimage_symm {s : Set α} (hs : IsOpen s) : IsOpen (e.target ∩ e.symm ⁻¹' s) :=
+ e.symm.continuousOn.isOpen_inter_preimage e.open_target hs
+#align local_homeomorph.preimage_open_of_open_symm PartialHomeomorph.isOpen_inter_preimage_symm
+
+/-- A partial homeomorphism is an open map on its source:
+ the image of an open subset of the source is open. -/
lemma isOpen_image_of_subset_source {s : Set α} (hs : IsOpen s) (hse : s ⊆ e.source) :
IsOpen (e '' s) := by
rw [(image_eq_target_inter_inv_preimage (e := e) hse)]
exact e.continuousOn_invFun.isOpen_inter_preimage e.open_target hs
+#align local_homeomorph.image_open_of_open PartialHomeomorph.isOpen_image_of_subset_source
+
+/-- The image of the restriction of an open set to the source is open. -/
+theorem isOpen_image_source_inter {s : Set α} (hs : IsOpen s) :
+ IsOpen (e '' (e.source ∩ s)) :=
+ e.isOpen_image_of_subset_source (e.open_source.inter hs) (inter_subset_left _ _)
+#align local_homeomorph.image_open_of_open' PartialHomeomorph.isOpen_image_source_inter
/-- The inverse of a partial homeomorphism `e` is an open map on `e.target`. -/
lemma isOpen_image_symm_of_subset_target {t : Set β} (ht : IsOpen t) (hte : t ⊆ e.target) :
IsOpen (e.symm '' t) :=
isOpen_image_of_subset_source e.symm ht (e.symm_source ▸ hte)
+lemma isOpen_symm_image_iff_of_subset_target {t : Set β} (hs : t ⊆ e.target) :
+ IsOpen (e.symm '' t) ↔ IsOpen t := by
+ refine ⟨fun h ↦ ?_, fun h ↦ e.symm.isOpen_image_of_subset_source h hs⟩
+ have hs' : e.symm '' t ⊆ e.source := by
+ rw [e.symm_image_eq_source_inter_preimage hs]
+ apply Set.inter_subset_left
+ rw [← e.image_symm_image_of_subset_target hs]
+ exact e.isOpen_image_of_subset_source h hs'
+
+theorem isOpen_image_iff_of_subset_source {s : Set α} (hs : s ⊆ e.source) :
+ IsOpen (e '' s) ↔ IsOpen s := by
+ rw [← e.symm.isOpen_symm_image_iff_of_subset_target hs, e.symm_symm]
+
/-!
### `PartialHomeomorph.IsImage` relation
@@ -666,23 +691,6 @@ theorem preimage_frontier (s : Set β) :
(IsImage.of_preimage_eq rfl).frontier.preimage_eq
#align local_homeomorph.preimage_frontier PartialHomeomorph.preimage_frontier
-theorem isOpen_inter_preimage_symm {s : Set α} (hs : IsOpen s) : IsOpen (e.target ∩ e.symm ⁻¹' s) :=
- e.symm.continuousOn.isOpen_inter_preimage e.open_target hs
-#align local_homeomorph.preimage_open_of_open_symm PartialHomeomorph.isOpen_inter_preimage_symm
-
-/-- The image of an open set in the source is open. -/
-theorem image_isOpen_of_isOpen {s : Set α} (hs : IsOpen s) (h : s ⊆ e.source) :
- IsOpen (e '' s) := by
- have : e '' s = e.target ∩ e.symm ⁻¹' s := e.toPartialEquiv.image_eq_target_inter_inv_preimage h
- rw [this]
- exact e.continuousOn_symm.isOpen_inter_preimage e.open_target hs
-#align local_homeomorph.image_open_of_open PartialHomeomorph.image_isOpen_of_isOpen
-
-/-- The image of the restriction of an open set to the source is open. -/
-theorem image_isOpen_of_isOpen' {s : Set α} (hs : IsOpen s) : IsOpen (e '' (e.source ∩ s)) :=
- image_isOpen_of_isOpen _ (IsOpen.inter e.open_source hs) (inter_subset_left _ _)
-#align local_homeomorph.image_open_of_open' PartialHomeomorph.image_isOpen_of_isOpen'
-
/-- A `PartialEquiv` with continuous open forward map and open source is a `PartialHomeomorph`. -/
def ofContinuousOpenRestrict (e : PartialEquiv α β) (hc : ContinuousOn e e.source)
(ho : IsOpenMap (e.source.restrict e)) (hs : IsOpen e.source) : PartialHomeomorph α β where
@@ -1267,7 +1275,7 @@ theorem openEmbedding_restrict : OpenEmbedding (e.source.restrict e) := by
refine openEmbedding_of_continuous_injective_open (e.continuousOn.comp_continuous
continuous_subtype_val Subtype.prop) e.injOn.injective fun V hV ↦ ?_
rw [Set.restrict_eq, Set.image_comp]
- exact e.image_isOpen_of_isOpen (e.open_source.isOpenMap_subtype_val V hV)
+ exact e.isOpen_image_of_subset_source (e.open_source.isOpenMap_subtype_val V hV)
fun _ ⟨x, _, h⟩ ↦ h ▸ x.2
/-- A partial homeomorphism whose source is all of `α` defines an open embedding of `α` into `β`.
@@ -1367,25 +1367,25 @@ variable (s : Opens α) [Nonempty s]
/-- The inclusion of an open subset `s` of a space `α` into `α` is a partial homeomorphism from the
subtype `s` to `α`. -/
-noncomputable def localHomeomorphSubtypeCoe : PartialHomeomorph s α :=
+noncomputable def partialHomeomorphSubtypeCoe : PartialHomeomorph s α :=
OpenEmbedding.toPartialHomeomorph _ s.2.openEmbedding_subtype_val
-#align topological_space.opens.local_homeomorph_subtype_coe TopologicalSpace.Opens.localHomeomorphSubtypeCoe
+#align topological_space.opens.local_homeomorph_subtype_coe TopologicalSpace.Opens.partialHomeomorphSubtypeCoe
@[simp, mfld_simps]
-theorem localHomeomorphSubtypeCoe_coe : (s.localHomeomorphSubtypeCoe : s → α) = (↑) :=
+theorem partialHomeomorphSubtypeCoe_coe : (s.partialHomeomorphSubtypeCoe : s → α) = (↑) :=
rfl
-#align topological_space.opens.local_homeomorph_subtype_coe_coe TopologicalSpace.Opens.localHomeomorphSubtypeCoe_coe
+#align topological_space.opens.local_homeomorph_subtype_coe_coe TopologicalSpace.Opens.partialHomeomorphSubtypeCoe_coe
@[simp, mfld_simps]
-theorem localHomeomorphSubtypeCoe_source : s.localHomeomorphSubtypeCoe.source = Set.univ :=
+theorem partialHomeomorphSubtypeCoe_source : s.partialHomeomorphSubtypeCoe.source = Set.univ :=
rfl
-#align topological_space.opens.local_homeomorph_subtype_coe_source TopologicalSpace.Opens.localHomeomorphSubtypeCoe_source
+#align topological_space.opens.local_homeomorph_subtype_coe_source TopologicalSpace.Opens.partialHomeomorphSubtypeCoe_source
@[simp, mfld_simps]
-theorem localHomeomorphSubtypeCoe_target : s.localHomeomorphSubtypeCoe.target = s := by
- simp only [localHomeomorphSubtypeCoe, Subtype.range_coe_subtype, mfld_simps]
+theorem partialHomeomorphSubtypeCoe_target : s.partialHomeomorphSubtypeCoe.target = s := by
+ simp only [partialHomeomorphSubtypeCoe, Subtype.range_coe_subtype, mfld_simps]
rfl
-#align topological_space.opens.local_homeomorph_subtype_coe_target TopologicalSpace.Opens.localHomeomorphSubtypeCoe_target
+#align topological_space.opens.local_homeomorph_subtype_coe_target TopologicalSpace.Opens.partialHomeomorphSubtypeCoe_target
end TopologicalSpace.Opens
@@ -1427,10 +1427,10 @@ variable (s : Opens α) [Nonempty s]
/-- The restriction of a partial homeomorphism `e` to an open subset `s` of the domain type
produces a partial homeomorphism whose domain is the subtype `s`. -/
noncomputable def subtypeRestr : PartialHomeomorph s β :=
- s.localHomeomorphSubtypeCoe.trans e
+ s.partialHomeomorphSubtypeCoe.trans e
#align local_homeomorph.subtype_restr PartialHomeomorph.subtypeRestr
-theorem subtypeRestr_def : e.subtypeRestr s = s.localHomeomorphSubtypeCoe.trans e :=
+theorem subtypeRestr_def : e.subtypeRestr s = s.partialHomeomorphSubtypeCoe.trans e :=
rfl
#align local_homeomorph.subtype_restr_def PartialHomeomorph.subtypeRestr_def
@@ -1449,7 +1449,7 @@ variable {s}
theorem map_subtype_source {x : s} (hxe : (x : α) ∈ e.source): e x ∈ (e.subtypeRestr s).target := by
refine' ⟨e.map_source hxe, _⟩
- rw [s.localHomeomorphSubtypeCoe_target, mem_preimage, e.leftInvOn hxe]
+ rw [s.partialHomeomorphSubtypeCoe_target, mem_preimage, e.leftInvOn hxe]
exact x.prop
#align local_homeomorph.map_subtype_source PartialHomeomorph.map_subtype_source
@@ -1471,7 +1471,7 @@ theorem subtypeRestr_symm_trans_subtypeRestr (f f' : PartialHomeomorph α β) :
rw [ofSet_trans', sets_identity, ← trans_of_set' _ openness₂, trans_assoc]
refine' EqOnSource.trans' (eqOnSource_refl _) _
-- f has been eliminated !!!
- refine' Setoid.trans (symm_trans_self s.localHomeomorphSubtypeCoe) _
+ refine' Setoid.trans (symm_trans_self s.partialHomeomorphSubtypeCoe) _
simp only [mfld_simps, Setoid.refl]
#align local_homeomorph.subtype_restr_symm_trans_subtype_restr PartialHomeomorph.subtypeRestr_symm_trans_subtypeRestr
@@ -1489,17 +1489,17 @@ theorem subtypeRestr_symm_eqOn_of_le {U V : Opens α} [Nonempty U] [Nonempty V]
set i := Set.inclusion hUV
intro y hy
dsimp [PartialHomeomorph.subtypeRestr_def] at hy ⊢
- have hyV : e.symm y ∈ V.localHomeomorphSubtypeCoe.target := by
- rw [Opens.localHomeomorphSubtypeCoe_target] at hy ⊢
+ have hyV : e.symm y ∈ V.partialHomeomorphSubtypeCoe.target := by
+ rw [Opens.partialHomeomorphSubtypeCoe_target] at hy ⊢
exact hUV hy.2
- refine' V.localHomeomorphSubtypeCoe.injOn _ trivial _
+ refine' V.partialHomeomorphSubtypeCoe.injOn _ trivial _
· rw [← PartialHomeomorph.symm_target]
apply PartialHomeomorph.map_source
rw [PartialHomeomorph.symm_source]
exact hyV
- · rw [V.localHomeomorphSubtypeCoe.right_inv hyV]
- show _ = U.localHomeomorphSubtypeCoe _
- rw [U.localHomeomorphSubtypeCoe.right_inv hy.2]
+ · rw [V.partialHomeomorphSubtypeCoe.right_inv hyV]
+ show _ = U.partialHomeomorphSubtypeCoe _
+ rw [U.partialHomeomorphSubtypeCoe.right_inv hy.2]
#align local_homeomorph.subtype_restr_symm_eq_on_of_le PartialHomeomorph.subtypeRestr_symm_eqOn_of_le
end PartialHomeomorph
(Partial)Equiv
and (Partial)Homeomorph
(#9506)
Let e
s denote Equiv
s and f
s denote PartialEquiv
s. Let >
denote Equiv.trans
, PartialEquiv.trans
, Equiv.transPartialEquiv
, or PartialEquiv.transEquiv
. We want to simplify expressions like e1 > e2 > f3 > f4 > e5 > e6
to (e1 > e2) > (f3 > f4) > (e5 > e6)
, so that simp lemmas about Equiv.trans
and PartialEquiv.trans
may apply. This means adding four lemmas:
e1 > e2 > f3 = (e1 > e2) > f3
(e1 > f2) > f3 = e1 > (f2 > f3)
e
and f
flippede
and f
flippedThe definitions Equiv.transPartialEquiv
and PartialEquiv.transEquiv
are moved to later in the document, so that they stay together with these lemmas. The argument order of these two definitions has also been reversed so as to match Equiv.trans
and PartialEquiv.trans
.
The same is done for Homeomorph
/PartialHomeomorph
.
@@ -925,38 +925,6 @@ theorem restr_trans (s : Set α) : (e.restr s).trans e' = (e.trans e').restr s :
PartialEquiv.restr_trans e.toPartialEquiv e'.toPartialEquiv (interior s)
#align local_homeomorph.restr_trans PartialHomeomorph.restr_trans
-/-- Postcompose a partial homeomorphism with a homeomorphism.
-We modify the source and target to have better definitional behavior. -/
-@[simps! (config := .asFn)]
-def transHomeomorph (e' : β ≃ₜ γ) : PartialHomeomorph α γ where
- toPartialEquiv := e.toPartialEquiv.transEquiv e'.toEquiv
- open_source := e.open_source
- open_target := e.open_target.preimage e'.symm.continuous
- continuousOn_toFun := e'.continuous.comp_continuousOn e.continuousOn
- continuousOn_invFun := e.symm.continuousOn.comp e'.symm.continuous.continuousOn fun _ => id
-#align local_homeomorph.trans_homeomorph PartialHomeomorph.transHomeomorph
-
-theorem transHomeomorph_eq_trans (e' : β ≃ₜ γ) :
- e.transHomeomorph e' = e.trans e'.toPartialHomeomorph :=
- toPartialEquiv_injective <| PartialEquiv.transEquiv_eq_trans _ _
-#align local_homeomorph.trans_equiv_eq_trans PartialHomeomorph.transHomeomorph_eq_trans
-
-/-- Precompose a partial homeomorphism with a homeomorphism.
-We modify the source and target to have better definitional behavior. -/
-@[simps! (config := .asFn)]
-def _root_.Homeomorph.transPartialHomeomorph (e : α ≃ₜ β) : PartialHomeomorph α γ where
- toPartialEquiv := e.toEquiv.transPartialEquiv e'.toPartialEquiv
- open_source := e'.open_source.preimage e.continuous
- open_target := e'.open_target
- continuousOn_toFun := e'.continuousOn.comp e.continuous.continuousOn fun _ => id
- continuousOn_invFun := e.symm.continuous.comp_continuousOn e'.symm.continuousOn
-#align homeomorph.trans_local_homeomorph Homeomorph.transPartialHomeomorph
-
-theorem _root_.Homeomorph.transPartialHomeomorph_eq_trans (e : α ≃ₜ β) :
- e.transPartialHomeomorph e' = e.toPartialHomeomorph.trans e' :=
- toPartialEquiv_injective <| Equiv.transPartialEquiv_eq_trans _ _
-#align homeomorph.trans_local_homeomorph_eq_trans Homeomorph.transPartialHomeomorph_eq_trans
-
/-- `EqOnSource e e'` means that `e` and `e'` have the same source, and coincide there. They
should really be considered the same partial equivalence. -/
def EqOnSource (e e' : PartialHomeomorph α β) : Prop :=
@@ -1335,6 +1303,35 @@ theorem trans_toPartialHomeomorph :
PartialHomeomorph.toPartialEquiv_injective <| Equiv.trans_toPartialEquiv _ _
#align homeomorph.trans_to_local_homeomorph Homeomorph.trans_toPartialHomeomorph
+/-- Precompose a partial homeomorphism with a homeomorphism.
+We modify the source and target to have better definitional behavior. -/
+@[simps! (config := .asFn)]
+def transPartialHomeomorph (e : α ≃ₜ β) (f' : PartialHomeomorph β γ) : PartialHomeomorph α γ where
+ toPartialEquiv := e.toEquiv.transPartialEquiv f'.toPartialEquiv
+ open_source := f'.open_source.preimage e.continuous
+ open_target := f'.open_target
+ continuousOn_toFun := f'.continuousOn.comp e.continuous.continuousOn fun _ => id
+ continuousOn_invFun := e.symm.continuous.comp_continuousOn f'.symm.continuousOn
+#align homeomorph.trans_local_homeomorph Homeomorph.transPartialHomeomorph
+
+theorem transPartialHomeomorph_eq_trans (e : α ≃ₜ β) (f' : PartialHomeomorph β γ) :
+ e.transPartialHomeomorph f' = e.toPartialHomeomorph.trans f' :=
+ PartialHomeomorph.toPartialEquiv_injective <| Equiv.transPartialEquiv_eq_trans _ _
+#align homeomorph.trans_local_homeomorph_eq_trans Homeomorph.transPartialHomeomorph_eq_trans
+
+@[simp, mfld_simps]
+theorem transPartialHomeomorph_trans (e : α ≃ₜ β) (f : PartialHomeomorph β γ)
+ (f' : PartialHomeomorph γ δ) :
+ (e.transPartialHomeomorph f).trans f' = e.transPartialHomeomorph (f.trans f') := by
+ simp only [transPartialHomeomorph_eq_trans, PartialHomeomorph.trans_assoc]
+
+@[simp, mfld_simps]
+theorem trans_transPartialHomeomorph (e : α ≃ₜ β) (e' : β ≃ₜ γ) (f'' : PartialHomeomorph γ δ) :
+ (e.trans e').transPartialHomeomorph f'' =
+ e.transPartialHomeomorph (e'.transPartialHomeomorph f'') := by
+ simp only [transPartialHomeomorph_eq_trans, PartialHomeomorph.trans_assoc,
+ trans_toPartialHomeomorph]
+
end Homeomorph
namespace OpenEmbedding
@@ -1394,6 +1391,33 @@ end TopologicalSpace.Opens
namespace PartialHomeomorph
+/-- Postcompose a partial homeomorphism with a homeomorphism.
+We modify the source and target to have better definitional behavior. -/
+@[simps! (config := .asFn)]
+def transHomeomorph (e : PartialHomeomorph α β) (f' : β ≃ₜ γ) : PartialHomeomorph α γ where
+ toPartialEquiv := e.toPartialEquiv.transEquiv f'.toEquiv
+ open_source := e.open_source
+ open_target := e.open_target.preimage f'.symm.continuous
+ continuousOn_toFun := f'.continuous.comp_continuousOn e.continuousOn
+ continuousOn_invFun := e.symm.continuousOn.comp f'.symm.continuous.continuousOn fun _ => id
+#align local_homeomorph.trans_homeomorph PartialHomeomorph.transHomeomorph
+
+theorem transHomeomorph_eq_trans (e : PartialHomeomorph α β) (f' : β ≃ₜ γ) :
+ e.transHomeomorph f' = e.trans f'.toPartialHomeomorph :=
+ toPartialEquiv_injective <| PartialEquiv.transEquiv_eq_trans _ _
+#align local_homeomorph.trans_equiv_eq_trans PartialHomeomorph.transHomeomorph_eq_trans
+
+@[simp, mfld_simps]
+theorem transHomeomorph_transHomeomorph (e : PartialHomeomorph α β) (f' : β ≃ₜ γ) (f'' : γ ≃ₜ δ) :
+ (e.transHomeomorph f').transHomeomorph f'' = e.transHomeomorph (f'.trans f'') := by
+ simp only [transHomeomorph_eq_trans, trans_assoc, Homeomorph.trans_toPartialHomeomorph]
+
+@[simp, mfld_simps]
+theorem trans_transHomeomorph (e : PartialHomeomorph α β) (e' : PartialHomeomorph β γ)
+ (f'' : γ ≃ₜ δ) :
+ (e.trans e').transHomeomorph f'' = e.trans (e'.transHomeomorph f'') := by
+ simp only [transHomeomorph_eq_trans, trans_assoc, Homeomorph.trans_toPartialHomeomorph]
+
open TopologicalSpace
variable (e : PartialHomeomorph α β)
PartialEquiv
, Homeomorph
, PartialHomeomorph
(#9430)
Items 4-5 in reference Zulip
Also added symm
and trans
definitions for PartialEquiv
, Homeomorph
, and PartialHomeomorph
.
@@ -76,6 +76,7 @@ instance : CoeFun (PartialHomeomorph α β) fun _ => α → β :=
⟨fun e => e.toFun'⟩
/-- The inverse of a partial homeomorphism -/
+@[symm]
protected def symm : PartialHomeomorph β α where
toPartialEquiv := e.toPartialEquiv.symm
open_source := e.open_target
@@ -816,6 +817,7 @@ protected def trans' (h : e.target = e'.source) : PartialHomeomorph α γ where
/-- Composing two partial homeomorphisms, by restricting to the maximal domain where their
composition is well defined. -/
+@[trans]
protected def trans : PartialHomeomorph α γ :=
PartialHomeomorph.trans' (e.symm.restrOpen e'.source e'.open_source).symm
(e'.restrOpen e.target e.open_target) (by simp [inter_comm])
@@ -1024,13 +1026,13 @@ theorem Set.EqOn.restr_eqOn_source {e e' : PartialHomeomorph α β}
/-- Composition of a partial homeomorphism and its inverse is equivalent to the restriction of the
identity to the source -/
-theorem trans_self_symm : e.trans e.symm ≈ PartialHomeomorph.ofSet e.source e.open_source :=
- PartialEquiv.trans_self_symm _
-#align local_homeomorph.trans_self_symm PartialHomeomorph.trans_self_symm
+theorem self_trans_symm : e.trans e.symm ≈ PartialHomeomorph.ofSet e.source e.open_source :=
+ PartialEquiv.self_trans_symm _
+#align local_homeomorph.self_trans_symm PartialHomeomorph.self_trans_symm
-theorem trans_symm_self : e.symm.trans e ≈ PartialHomeomorph.ofSet e.target e.open_target :=
- e.symm.trans_self_symm
-#align local_homeomorph.trans_symm_self PartialHomeomorph.trans_symm_self
+theorem symm_trans_self : e.symm.trans e ≈ PartialHomeomorph.ofSet e.target e.open_target :=
+ e.symm.self_trans_symm
+#align local_homeomorph.symm_trans_self PartialHomeomorph.symm_trans_self
theorem eq_of_eqOnSource_univ {e e' : PartialHomeomorph α β} (h : e ≈ e') (s : e.source = univ)
(t : e.target = univ) : e = e' :=
@@ -1445,7 +1447,7 @@ theorem subtypeRestr_symm_trans_subtypeRestr (f f' : PartialHomeomorph α β) :
rw [ofSet_trans', sets_identity, ← trans_of_set' _ openness₂, trans_assoc]
refine' EqOnSource.trans' (eqOnSource_refl _) _
-- f has been eliminated !!!
- refine' Setoid.trans (trans_symm_self s.localHomeomorphSubtypeCoe) _
+ refine' Setoid.trans (symm_trans_self s.localHomeomorphSubtypeCoe) _
simp only [mfld_simps, Setoid.refl]
#align local_homeomorph.subtype_restr_symm_trans_subtype_restr PartialHomeomorph.subtypeRestr_symm_trans_subtypeRestr
@@ -1244,7 +1244,7 @@ def homeomorphOfImageSubsetSource {s : Set α} {t : Set β} (hs : s ⊆ e.source
s ≃ₜ t :=
have h₁ : MapsTo e s t := mapsTo'.2 ht.subset
have h₂ : t ⊆ e.target := ht ▸ e.image_source_eq_target ▸ image_subset e hs
- have h₃ : MapsTo e.symm t s := ht ▸ ball_image_iff.2 <| fun _x hx =>
+ have h₃ : MapsTo e.symm t s := ht ▸ ball_image_iff.2 fun _x hx =>
(e.left_inv (hs hx)).symm ▸ hx
{ toFun := MapsTo.restrict e s t h₁
invFun := MapsTo.restrict e.symm t s h₃
The current name is misleading: there's no open set involved; it's just an equivalence between subsets of domain and target. zulip discussion
PEquiv
is similarly named: this is fine, as they're different designs for the same concept.
Co-authored-by: Michael Rothgang <rothgami@math.hu-berlin.de>
@@ -3,16 +3,17 @@ Copyright (c) 2019 Sébastien Gouëzel. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
-/
-import Mathlib.Logic.Equiv.LocalEquiv
+import Mathlib.Logic.Equiv.PartialEquiv
import Mathlib.Topology.Sets.Opens
#align_import topology.local_homeomorph from "leanprover-community/mathlib"@"431589bce478b2229eba14b14a283250428217db"
/-!
# Partial homeomorphisms
+# Partial homeomorphisms
This file defines homeomorphisms between open subsets of topological spaces. An element `e` of
-`PartialHomeomorph α β` is an extension of `LocalEquiv α β`, i.e., it is a pair of functions
+`PartialHomeomorph α β` is an extension of `PartialEquiv α β`, i.e., it is a pair of functions
`e.toFun` and `e.invFun`, inverse of each other on the sets `e.source` and `e.target`.
Additionally, we require that these sets are open, and that the functions are continuous on them.
Equivalently, they are homeomorphisms there.
@@ -33,14 +34,14 @@ instead of `e.toFun x` and `e.invFun x`.
## Implementation notes
-Most statements are copied from their `LocalEquiv` versions, although some care is required
+Most statements are copied from their `PartialEquiv` versions, although some care is required
especially when restricting to subsets, as these should be open subsets.
-For design notes, see `LocalEquiv.lean`.
+For design notes, see `PartialEquiv.lean`.
### Local coding conventions
-If a lemma deals with the intersection of a set with either source or target of a `LocalEquiv`,
+If a lemma deals with the intersection of a set with either source or target of a `PartialEquiv`,
then it should use `e.source ∩ s` or `e.target ∩ t`, not `s ∩ e.source` or `t ∩ e.target`.
-/
@@ -50,10 +51,10 @@ open Function Set Filter Topology
variable {α : Type*} {β : Type*} {γ : Type*} {δ : Type*} [TopologicalSpace α]
[TopologicalSpace β] [TopologicalSpace γ] [TopologicalSpace δ]
-/-- partial homeomorphisms, defined on open subsets of the space -/
+/-- Partial homeomorphisms, defined on open subsets of the space -/
-- porting note: commented @[nolint has_nonempty_instance]
structure PartialHomeomorph (α : Type*) (β : Type*) [TopologicalSpace α]
- [TopologicalSpace β] extends LocalEquiv α β where
+ [TopologicalSpace β] extends PartialEquiv α β where
open_source : IsOpen source
open_target : IsOpen target
continuousOn_toFun : ContinuousOn toFun source
@@ -65,7 +66,7 @@ namespace PartialHomeomorph
variable (e : PartialHomeomorph α β) (e' : PartialHomeomorph β γ)
/-- Coercion of a partial homeomorphisms to a function. We don't use `e.toFun` because it is
-actually `e.toLocalEquiv.toFun`, so `simp` will apply lemmas about `toLocalEquiv`.
+actually `e.toPartialEquiv.toFun`, so `simp` will apply lemmas about `toPartialEquiv`.
While we may want to switch to this behavior later, doing it mid-port will break a lot of proofs. -/
@[coe] def toFun' : α → β := e.toFun
@@ -76,7 +77,7 @@ instance : CoeFun (PartialHomeomorph α β) fun _ => α → β :=
/-- The inverse of a partial homeomorphism -/
protected def symm : PartialHomeomorph β α where
- toLocalEquiv := e.toLocalEquiv.symm
+ toPartialEquiv := e.toPartialEquiv.symm
open_source := e.open_target
open_target := e.open_source
continuousOn_toFun := e.continuousOn_invFun
@@ -103,19 +104,20 @@ theorem continuousOn_symm : ContinuousOn e.symm e.target :=
#align local_homeomorph.continuous_on_symm PartialHomeomorph.continuousOn_symm
@[simp, mfld_simps]
-theorem mk_coe (e : LocalEquiv α β) (a b c d) : (PartialHomeomorph.mk e a b c d : α → β) = e :=
+theorem mk_coe (e : PartialEquiv α β) (a b c d) : (PartialHomeomorph.mk e a b c d : α → β) = e :=
rfl
#align local_homeomorph.mk_coe PartialHomeomorph.mk_coe
@[simp, mfld_simps]
-theorem mk_coe_symm (e : LocalEquiv α β) (a b c d) :
+theorem mk_coe_symm (e : PartialEquiv α β) (a b c d) :
((PartialHomeomorph.mk e a b c d).symm : β → α) = e.symm :=
rfl
#align local_homeomorph.mk_coe_symm PartialHomeomorph.mk_coe_symm
-theorem toLocalEquiv_injective : Injective (toLocalEquiv : PartialHomeomorph α β → LocalEquiv α β)
+theorem toPartialEquiv_injective :
+ Injective (toPartialEquiv : PartialHomeomorph α β → PartialEquiv α β)
| ⟨_, _, _, _, _⟩, ⟨_, _, _, _, _⟩, rfl => rfl
-#align local_homeomorph.to_local_equiv_injective PartialHomeomorph.toLocalEquiv_injective
+#align local_homeomorph.to_local_equiv_injective PartialHomeomorph.toPartialEquiv_injective
/- Register a few simp lemmas to make sure that `simp` puts the application of a local
homeomorphism in its normal form, i.e., in terms of its coercion to a function. -/
@@ -130,12 +132,12 @@ theorem invFun_eq_coe (e : PartialHomeomorph α β) : e.invFun = e.symm :=
#align local_homeomorph.inv_fun_eq_coe PartialHomeomorph.invFun_eq_coe
@[simp, mfld_simps]
-theorem coe_coe : (e.toLocalEquiv : α → β) = e :=
+theorem coe_coe : (e.toPartialEquiv : α → β) = e :=
rfl
#align local_homeomorph.coe_coe PartialHomeomorph.coe_coe
@[simp, mfld_simps]
-theorem coe_coe_symm : (e.toLocalEquiv.symm : β → α) = e.symm :=
+theorem coe_coe_symm : (e.toPartialEquiv.symm : β → α) = e.symm :=
rfl
#align local_homeomorph.coe_coe_symm PartialHomeomorph.coe_coe_symm
@@ -165,7 +167,7 @@ theorem right_inv {x : β} (h : x ∈ e.target) : e (e.symm x) = x :=
theorem eq_symm_apply {x : α} {y : β} (hx : x ∈ e.source) (hy : y ∈ e.target) :
x = e.symm y ↔ e x = y :=
- e.toLocalEquiv.eq_symm_apply hx hy
+ e.toPartialEquiv.eq_symm_apply hx hy
#align local_homeomorph.eq_symm_apply PartialHomeomorph.eq_symm_apply
protected theorem mapsTo : MapsTo e e.source e.target := fun _ => e.map_source
@@ -199,11 +201,11 @@ protected theorem surjOn : SurjOn e e.source e.target :=
/-- Interpret a `Homeomorph` as a `PartialHomeomorph` by restricting it
to an open set `s` in the domain and to `t` in the codomain. -/
-@[simps! (config := .asFn) apply symm_apply toLocalEquiv,
+@[simps! (config := .asFn) apply symm_apply toPartialEquiv,
simps! (config := .lemmasOnly) source target]
def _root_.Homeomorph.toPartialHomeomorphOfImageEq (e : α ≃ₜ β) (s : Set α) (hs : IsOpen s)
(t : Set β) (h : e '' s = t) : PartialHomeomorph α β where
- toLocalEquiv := e.toLocalEquivOfImageEq s t h
+ toPartialEquiv := e.toPartialEquivOfImageEq s t h
open_source := hs
open_target := by simpa [← h]
continuousOn_toFun := e.continuous.continuousOn
@@ -215,18 +217,18 @@ def _root_.Homeomorph.toPartialHomeomorph (e : α ≃ₜ β) : PartialHomeomorph
e.toPartialHomeomorphOfImageEq univ isOpen_univ univ <| by rw [image_univ, e.surjective.range_eq]
#align homeomorph.to_local_homeomorph Homeomorph.toPartialHomeomorph
-/-- Replace `toLocalEquiv` field to provide better definitional equalities. -/
-def replaceEquiv (e : PartialHomeomorph α β) (e' : LocalEquiv α β) (h : e.toLocalEquiv = e') :
+/-- Replace `toPartialEquiv` field to provide better definitional equalities. -/
+def replaceEquiv (e : PartialHomeomorph α β) (e' : PartialEquiv α β) (h : e.toPartialEquiv = e') :
PartialHomeomorph α β where
- toLocalEquiv := e'
+ toPartialEquiv := e'
open_source := h ▸ e.open_source
open_target := h ▸ e.open_target
continuousOn_toFun := h ▸ e.continuousOn_toFun
continuousOn_invFun := h ▸ e.continuousOn_invFun
#align local_homeomorph.replace_equiv PartialHomeomorph.replaceEquiv
-theorem replaceEquiv_eq_self (e : PartialHomeomorph α β) (e' : LocalEquiv α β)
- (h : e.toLocalEquiv = e') : e.replaceEquiv e' h = e := by
+theorem replaceEquiv_eq_self (e : PartialHomeomorph α β) (e' : PartialEquiv α β)
+ (h : e.toPartialEquiv = e') : e.replaceEquiv e' h = e := by
cases e
subst e'
rfl
@@ -236,9 +238,10 @@ theorem source_preimage_target : e.source ⊆ e ⁻¹' e.target :=
e.mapsTo
#align local_homeomorph.source_preimage_target PartialHomeomorph.source_preimage_target
-@[deprecated toLocalEquiv_injective]
-theorem eq_of_localEquiv_eq {e e' : PartialHomeomorph α β} (h : e.toLocalEquiv = e'.toLocalEquiv) :
- e = e' := toLocalEquiv_injective h
+@[deprecated toPartialEquiv_injective]
+theorem eq_of_localEquiv_eq {e e' : PartialHomeomorph α β}
+ (h : e.toPartialEquiv = e'.toPartialEquiv) : e = e' :=
+ toPartialEquiv_injective h
#align local_homeomorph.eq_of_local_equiv_eq PartialHomeomorph.eq_of_localEquiv_eq
theorem eventually_left_inverse (e : PartialHomeomorph α β) {x} (hx : x ∈ e.source) :
@@ -278,16 +281,16 @@ theorem nhdsWithin_target_inter {x} (hx : x ∈ e.target) (s : Set β) : 𝓝[e.
theorem image_eq_target_inter_inv_preimage {s : Set α} (h : s ⊆ e.source) :
e '' s = e.target ∩ e.symm ⁻¹' s :=
- e.toLocalEquiv.image_eq_target_inter_inv_preimage h
+ e.toPartialEquiv.image_eq_target_inter_inv_preimage h
#align local_homeomorph.image_eq_target_inter_inv_preimage PartialHomeomorph.image_eq_target_inter_inv_preimage
theorem image_source_inter_eq' (s : Set α) : e '' (e.source ∩ s) = e.target ∩ e.symm ⁻¹' s :=
- e.toLocalEquiv.image_source_inter_eq' s
+ e.toPartialEquiv.image_source_inter_eq' s
#align local_homeomorph.image_source_inter_eq' PartialHomeomorph.image_source_inter_eq'
theorem image_source_inter_eq (s : Set α) :
e '' (e.source ∩ s) = e.target ∩ e.symm ⁻¹' (e.source ∩ s) :=
- e.toLocalEquiv.image_source_inter_eq s
+ e.toPartialEquiv.image_source_inter_eq s
#align local_homeomorph.image_source_inter_eq PartialHomeomorph.image_source_inter_eq
theorem symm_image_eq_source_inter_preimage {s : Set β} (h : s ⊆ e.target) :
@@ -302,7 +305,7 @@ theorem symm_image_target_inter_eq (s : Set β) :
theorem source_inter_preimage_inv_preimage (s : Set α) :
e.source ∩ e ⁻¹' (e.symm ⁻¹' s) = e.source ∩ s :=
- e.toLocalEquiv.source_inter_preimage_inv_preimage s
+ e.toPartialEquiv.source_inter_preimage_inv_preimage s
#align local_homeomorph.source_inter_preimage_inv_preimage PartialHomeomorph.source_inter_preimage_inv_preimage
theorem target_inter_inv_preimage_preimage (s : Set β) :
@@ -312,11 +315,11 @@ theorem target_inter_inv_preimage_preimage (s : Set β) :
theorem source_inter_preimage_target_inter (s : Set β) :
e.source ∩ e ⁻¹' (e.target ∩ s) = e.source ∩ e ⁻¹' s :=
- e.toLocalEquiv.source_inter_preimage_target_inter s
+ e.toPartialEquiv.source_inter_preimage_target_inter s
#align local_homeomorph.source_inter_preimage_target_inter PartialHomeomorph.source_inter_preimage_target_inter
theorem image_source_eq_target (e : PartialHomeomorph α β) : e '' e.source = e.target :=
- e.toLocalEquiv.image_source_eq_target
+ e.toPartialEquiv.image_source_eq_target
#align local_homeomorph.image_source_eq_target PartialHomeomorph.image_source_eq_target
theorem symm_image_target_eq_source (e : PartialHomeomorph α β) : e.symm '' e.target = e.source :=
@@ -330,7 +333,7 @@ called `EqOnSource`. -/
@[ext]
protected theorem ext (e' : PartialHomeomorph α β) (h : ∀ x, e x = e' x)
(hinv : ∀ x, e.symm x = e'.symm x) (hs : e.source = e'.source) : e = e' :=
- toLocalEquiv_injective (LocalEquiv.ext h hinv hs)
+ toPartialEquiv_injective (PartialEquiv.ext h hinv hs)
#align local_homeomorph.ext PartialHomeomorph.ext
protected theorem ext_iff {e e' : PartialHomeomorph α β} :
@@ -341,11 +344,11 @@ protected theorem ext_iff {e e' : PartialHomeomorph α β} :
#align local_homeomorph.ext_iff PartialHomeomorph.ext_iff
@[simp, mfld_simps]
-theorem symm_toLocalEquiv : e.symm.toLocalEquiv = e.toLocalEquiv.symm :=
+theorem symm_toPartialEquiv : e.symm.toPartialEquiv = e.toPartialEquiv.symm :=
rfl
-#align local_homeomorph.symm_to_local_equiv PartialHomeomorph.symm_toLocalEquiv
+#align local_homeomorph.symm_to_local_equiv PartialHomeomorph.symm_toPartialEquiv
--- The following lemmas are already simp via `LocalEquiv`
+-- The following lemmas are already simp via `PartialEquiv`
theorem symm_source : e.symm.source = e.target :=
rfl
#align local_homeomorph.symm_source PartialHomeomorph.symm_source
@@ -471,9 +474,9 @@ following equivalent conditions hold:
* `e.source ∩ e ⁻¹ t = e.source ∩ s`;
* `∀ x ∈ e.source, e x ∈ t ↔ x ∈ s` (this one is used in the definition).
-This definition is a restatement of `LocalEquiv.IsImage` for partial homeomorphisms. In this section
-we transfer API about `LocalEquiv.IsImage` to partial homeomorphisms and add a few
-`PartialHomeomorph`-specific lemmas like `PartialHomeomorph.IsImage.closure`.
+This definition is a restatement of `PartialEquiv.IsImage` for partial homeomorphisms.
+In this section we transfer API about `PartialEquiv.IsImage` to partial homeomorphisms and
+add a few `PartialHomeomorph`-specific lemmas like `PartialHomeomorph.IsImage.closure`.
-/
/-- We say that `t : Set β` is an image of `s : Set α` under a partial homeomorphism `e`
@@ -491,16 +494,16 @@ namespace IsImage
variable {e} {s : Set α} {t : Set β} {x : α} {y : β}
-theorem toLocalEquiv (h : e.IsImage s t) : e.toLocalEquiv.IsImage s t :=
+theorem toPartialEquiv (h : e.IsImage s t) : e.toPartialEquiv.IsImage s t :=
h
-#align local_homeomorph.is_image.to_local_equiv PartialHomeomorph.IsImage.toLocalEquiv
+#align local_homeomorph.is_image.to_local_equiv PartialHomeomorph.IsImage.toPartialEquiv
theorem apply_mem_iff (h : e.IsImage s t) (hx : x ∈ e.source) : e x ∈ t ↔ x ∈ s :=
h hx
#align local_homeomorph.is_image.apply_mem_iff PartialHomeomorph.IsImage.apply_mem_iff
protected theorem symm (h : e.IsImage s t) : e.symm.IsImage t s :=
- h.toLocalEquiv.symm
+ h.toPartialEquiv.symm
#align local_homeomorph.is_image.symm PartialHomeomorph.IsImage.symm
theorem symm_apply_mem_iff (h : e.IsImage s t) (hy : y ∈ e.target) : e.symm y ∈ s ↔ y ∈ t :=
@@ -513,7 +516,7 @@ theorem symm_iff : e.symm.IsImage t s ↔ e.IsImage s t :=
#align local_homeomorph.is_image.symm_iff PartialHomeomorph.IsImage.symm_iff
protected theorem mapsTo (h : e.IsImage s t) : MapsTo e (e.source ∩ s) (e.target ∩ t) :=
- h.toLocalEquiv.mapsTo
+ h.toPartialEquiv.mapsTo
#align local_homeomorph.is_image.maps_to PartialHomeomorph.IsImage.mapsTo
theorem symm_mapsTo (h : e.IsImage s t) : MapsTo e.symm (e.target ∩ t) (e.source ∩ s) :=
@@ -521,7 +524,7 @@ theorem symm_mapsTo (h : e.IsImage s t) : MapsTo e.symm (e.target ∩ t) (e.sour
#align local_homeomorph.is_image.symm_maps_to PartialHomeomorph.IsImage.symm_mapsTo
theorem image_eq (h : e.IsImage s t) : e '' (e.source ∩ s) = e.target ∩ t :=
- h.toLocalEquiv.image_eq
+ h.toPartialEquiv.image_eq
#align local_homeomorph.is_image.image_eq PartialHomeomorph.IsImage.image_eq
theorem symm_image_eq (h : e.IsImage s t) : e.symm '' (e.target ∩ t) = e.source ∩ s :=
@@ -529,7 +532,7 @@ theorem symm_image_eq (h : e.IsImage s t) : e.symm '' (e.target ∩ t) = e.sourc
#align local_homeomorph.is_image.symm_image_eq PartialHomeomorph.IsImage.symm_image_eq
theorem iff_preimage_eq : e.IsImage s t ↔ e.source ∩ e ⁻¹' t = e.source ∩ s :=
- LocalEquiv.IsImage.iff_preimage_eq
+ PartialEquiv.IsImage.iff_preimage_eq
#align local_homeomorph.is_image.iff_preimage_eq PartialHomeomorph.IsImage.iff_preimage_eq
alias ⟨preimage_eq, of_preimage_eq⟩ := iff_preimage_eq
@@ -562,11 +565,11 @@ alias ⟨preimage_eq', of_preimage_eq'⟩ := iff_preimage_eq'
#align local_homeomorph.is_image.of_preimage_eq' PartialHomeomorph.IsImage.of_preimage_eq'
theorem of_image_eq (h : e '' (e.source ∩ s) = e.target ∩ t) : e.IsImage s t :=
- LocalEquiv.IsImage.of_image_eq h
+ PartialEquiv.IsImage.of_image_eq h
#align local_homeomorph.is_image.of_image_eq PartialHomeomorph.IsImage.of_image_eq
theorem of_symm_image_eq (h : e.symm '' (e.target ∩ t) = e.source ∩ s) : e.IsImage s t :=
- LocalEquiv.IsImage.of_symm_image_eq h
+ PartialEquiv.IsImage.of_symm_image_eq h
#align local_homeomorph.is_image.of_symm_image_eq PartialHomeomorph.IsImage.of_symm_image_eq
protected theorem compl (h : e.IsImage s t) : e.IsImage sᶜ tᶜ := fun _ hx => (h hx).not
@@ -588,19 +591,19 @@ protected theorem diff {s' t'} (h : e.IsImage s t) (h' : e.IsImage s' t') :
theorem leftInvOn_piecewise {e' : PartialHomeomorph α β} [∀ i, Decidable (i ∈ s)]
[∀ i, Decidable (i ∈ t)] (h : e.IsImage s t) (h' : e'.IsImage s t) :
LeftInvOn (t.piecewise e.symm e'.symm) (s.piecewise e e') (s.ite e.source e'.source) :=
- h.toLocalEquiv.leftInvOn_piecewise h'
+ h.toPartialEquiv.leftInvOn_piecewise h'
#align local_homeomorph.is_image.left_inv_on_piecewise PartialHomeomorph.IsImage.leftInvOn_piecewise
theorem inter_eq_of_inter_eq_of_eqOn {e' : PartialHomeomorph α β} (h : e.IsImage s t)
(h' : e'.IsImage s t) (hs : e.source ∩ s = e'.source ∩ s) (Heq : EqOn e e' (e.source ∩ s)) :
e.target ∩ t = e'.target ∩ t :=
- h.toLocalEquiv.inter_eq_of_inter_eq_of_eqOn h' hs Heq
+ h.toPartialEquiv.inter_eq_of_inter_eq_of_eqOn h' hs Heq
#align local_homeomorph.is_image.inter_eq_of_inter_eq_of_eq_on PartialHomeomorph.IsImage.inter_eq_of_inter_eq_of_eqOn
theorem symm_eqOn_of_inter_eq_of_eqOn {e' : PartialHomeomorph α β} (h : e.IsImage s t)
(hs : e.source ∩ s = e'.source ∩ s) (Heq : EqOn e e' (e.source ∩ s)) :
EqOn e.symm e'.symm (e.target ∩ t) :=
- h.toLocalEquiv.symm_eq_on_of_inter_eq_of_eqOn hs Heq
+ h.toPartialEquiv.symm_eq_on_of_inter_eq_of_eqOn hs Heq
#align local_homeomorph.is_image.symm_eq_on_of_inter_eq_of_eq_on PartialHomeomorph.IsImage.symm_eqOn_of_inter_eq_of_eqOn
theorem map_nhdsWithin_eq (h : e.IsImage s t) (hx : x ∈ e.source) : map e (𝓝[s] x) = 𝓝[t] e x := by
@@ -625,9 +628,9 @@ theorem isOpen_iff (h : e.IsImage s t) : IsOpen (e.source ∩ s) ↔ IsOpen (e.t
#align local_homeomorph.is_image.is_open_iff PartialHomeomorph.IsImage.isOpen_iff
/-- Restrict a `PartialHomeomorph` to a pair of corresponding open sets. -/
-@[simps toLocalEquiv]
+@[simps toPartialEquiv]
def restr (h : e.IsImage s t) (hs : IsOpen (e.source ∩ s)) : PartialHomeomorph α β where
- toLocalEquiv := h.toLocalEquiv.restr
+ toPartialEquiv := h.toPartialEquiv.restr
open_source := hs
open_target := h.isOpen_iff.1 hs
continuousOn_toFun := e.continuousOn.mono (inter_subset_left _ _)
@@ -637,13 +640,13 @@ def restr (h : e.IsImage s t) (hs : IsOpen (e.source ∩ s)) : PartialHomeomorph
end IsImage
theorem isImage_source_target : e.IsImage e.source e.target :=
- e.toLocalEquiv.isImage_source_target
+ e.toPartialEquiv.isImage_source_target
#align local_homeomorph.is_image_source_target PartialHomeomorph.isImage_source_target
theorem isImage_source_target_of_disjoint (e' : PartialHomeomorph α β)
(hs : Disjoint e.source e'.source) (ht : Disjoint e.target e'.target) :
e.IsImage e'.source e'.target :=
- e.toLocalEquiv.isImage_source_target_of_disjoint e'.toLocalEquiv hs ht
+ e.toPartialEquiv.isImage_source_target_of_disjoint e'.toPartialEquiv hs ht
#align local_homeomorph.is_image_source_target_of_disjoint PartialHomeomorph.isImage_source_target_of_disjoint
/-- Preimage of interior or interior of preimage coincide for partial homeomorphisms,
@@ -669,7 +672,7 @@ theorem isOpen_inter_preimage_symm {s : Set α} (hs : IsOpen s) : IsOpen (e.targ
/-- The image of an open set in the source is open. -/
theorem image_isOpen_of_isOpen {s : Set α} (hs : IsOpen s) (h : s ⊆ e.source) :
IsOpen (e '' s) := by
- have : e '' s = e.target ∩ e.symm ⁻¹' s := e.toLocalEquiv.image_eq_target_inter_inv_preimage h
+ have : e '' s = e.target ∩ e.symm ⁻¹' s := e.toPartialEquiv.image_eq_target_inter_inv_preimage h
rw [this]
exact e.continuousOn_symm.isOpen_inter_preimage e.open_target hs
#align local_homeomorph.image_open_of_open PartialHomeomorph.image_isOpen_of_isOpen
@@ -679,37 +682,37 @@ theorem image_isOpen_of_isOpen' {s : Set α} (hs : IsOpen s) : IsOpen (e '' (e.s
image_isOpen_of_isOpen _ (IsOpen.inter e.open_source hs) (inter_subset_left _ _)
#align local_homeomorph.image_open_of_open' PartialHomeomorph.image_isOpen_of_isOpen'
-/-- A `LocalEquiv` with continuous open forward map and an open source is a `PartialHomeomorph`. -/
-def ofContinuousOpenRestrict (e : LocalEquiv α β) (hc : ContinuousOn e e.source)
+/-- A `PartialEquiv` with continuous open forward map and open source is a `PartialHomeomorph`. -/
+def ofContinuousOpenRestrict (e : PartialEquiv α β) (hc : ContinuousOn e e.source)
(ho : IsOpenMap (e.source.restrict e)) (hs : IsOpen e.source) : PartialHomeomorph α β where
- toLocalEquiv := e
+ toPartialEquiv := e
open_source := hs
open_target := by simpa only [range_restrict, e.image_source_eq_target] using ho.isOpen_range
continuousOn_toFun := hc
continuousOn_invFun := e.image_source_eq_target ▸ ho.continuousOn_image_of_leftInvOn e.leftInvOn
#align local_homeomorph.of_continuous_open_restrict PartialHomeomorph.ofContinuousOpenRestrict
-/-- A `LocalEquiv` with continuous open forward map and an open source is a `PartialHomeomorph`. -/
-def ofContinuousOpen (e : LocalEquiv α β) (hc : ContinuousOn e e.source) (ho : IsOpenMap e)
+/-- A `PartialEquiv` with continuous open forward map and open source is a `PartialHomeomorph`. -/
+def ofContinuousOpen (e : PartialEquiv α β) (hc : ContinuousOn e e.source) (ho : IsOpenMap e)
(hs : IsOpen e.source) : PartialHomeomorph α β :=
ofContinuousOpenRestrict e hc (ho.restrict hs) hs
#align local_homeomorph.of_continuous_open PartialHomeomorph.ofContinuousOpen
/-- Restricting a partial homeomorphism `e` to `e.source ∩ s` when `s` is open.
This is sometimes hard to use because of the openness assumption, but it has the advantage that
-when it can be used then its `LocalEquiv` is defeq to `LocalEquiv.restr`. -/
+when it can be used then its `PartialEquiv` is defeq to `PartialEquiv.restr`. -/
protected def restrOpen (s : Set α) (hs : IsOpen s) : PartialHomeomorph α β :=
(@IsImage.of_symm_preimage_eq α β _ _ e s (e.symm ⁻¹' s) rfl).restr
(IsOpen.inter e.open_source hs)
#align local_homeomorph.restr_open PartialHomeomorph.restrOpen
@[simp, mfld_simps]
-theorem restrOpen_toLocalEquiv (s : Set α) (hs : IsOpen s) :
- (e.restrOpen s hs).toLocalEquiv = e.toLocalEquiv.restr s :=
+theorem restrOpen_toPartialEquiv (s : Set α) (hs : IsOpen s) :
+ (e.restrOpen s hs).toPartialEquiv = e.toPartialEquiv.restr s :=
rfl
-#align local_homeomorph.restr_open_to_local_equiv PartialHomeomorph.restrOpen_toLocalEquiv
+#align local_homeomorph.restr_open_to_local_equiv PartialHomeomorph.restrOpen_toPartialEquiv
--- Already simp via `LocalEquiv`
+-- Already simp via `PartialEquiv`
theorem restrOpen_source (s : Set α) (hs : IsOpen s) : (e.restrOpen s hs).source = e.source ∩ s :=
rfl
#align local_homeomorph.restr_open_source PartialHomeomorph.restrOpen_source
@@ -717,30 +720,31 @@ theorem restrOpen_source (s : Set α) (hs : IsOpen s) : (e.restrOpen s hs).sourc
/-- Restricting a partial homeomorphism `e` to `e.source ∩ interior s`. We use the interior to make
sure that the restriction is well defined whatever the set s, since partial homeomorphisms are by
definition defined on open sets. In applications where `s` is open, this coincides with the
-restriction of local equivalences -/
+restriction of partial equivalences -/
@[simps! (config := mfld_cfg) apply symm_apply, simps! (config := .lemmasOnly) source target]
protected def restr (s : Set α) : PartialHomeomorph α β :=
e.restrOpen (interior s) isOpen_interior
#align local_homeomorph.restr PartialHomeomorph.restr
@[simp, mfld_simps]
-theorem restr_toLocalEquiv (s : Set α) :
- (e.restr s).toLocalEquiv = e.toLocalEquiv.restr (interior s) :=
+theorem restr_toPartialEquiv (s : Set α) :
+ (e.restr s).toPartialEquiv = e.toPartialEquiv.restr (interior s) :=
rfl
-#align local_homeomorph.restr_to_local_equiv PartialHomeomorph.restr_toLocalEquiv
+#align local_homeomorph.restr_to_local_equiv PartialHomeomorph.restr_toPartialEquiv
theorem restr_source' (s : Set α) (hs : IsOpen s) : (e.restr s).source = e.source ∩ s := by
rw [e.restr_source, hs.interior_eq]
#align local_homeomorph.restr_source' PartialHomeomorph.restr_source'
-theorem restr_toLocalEquiv' (s : Set α) (hs : IsOpen s) :
- (e.restr s).toLocalEquiv = e.toLocalEquiv.restr s := by
- rw [e.restr_toLocalEquiv, hs.interior_eq]
-#align local_homeomorph.restr_to_local_equiv' PartialHomeomorph.restr_toLocalEquiv'
+theorem restr_toPartialEquiv' (s : Set α) (hs : IsOpen s) :
+ (e.restr s).toPartialEquiv = e.toPartialEquiv.restr s := by
+ rw [e.restr_toPartialEquiv, hs.interior_eq]
+#align local_homeomorph.restr_to_local_equiv' PartialHomeomorph.restr_toPartialEquiv'
theorem restr_eq_of_source_subset {e : PartialHomeomorph α β} {s : Set α} (h : e.source ⊆ s) :
e.restr s = e :=
- toLocalEquiv_injective <| LocalEquiv.restr_eq_of_source_subset <| interior_maximal h e.open_source
+ toPartialEquiv_injective <| PartialEquiv.restr_eq_of_source_subset <|
+ interior_maximal h e.open_source
#align local_homeomorph.restr_eq_of_source_subset PartialHomeomorph.restr_eq_of_source_subset
@[simp, mfld_simps]
@@ -760,7 +764,7 @@ protected def refl (α : Type*) [TopologicalSpace α] : PartialHomeomorph α α
#align local_homeomorph.refl PartialHomeomorph.refl
@[simp, mfld_simps]
-theorem refl_localEquiv : (PartialHomeomorph.refl α).toLocalEquiv = LocalEquiv.refl α :=
+theorem refl_localEquiv : (PartialHomeomorph.refl α).toPartialEquiv = PartialEquiv.refl α :=
rfl
#align local_homeomorph.refl_local_equiv PartialHomeomorph.refl_localEquiv
@@ -773,10 +777,10 @@ section
variable {s : Set α} (hs : IsOpen s)
-/-- The identity local equiv on a set `s` -/
+/-- The identity partial equivalence on a set `s` -/
@[simps! (config := mfld_cfg) apply, simps! (config := .lemmasOnly) source target]
def ofSet (s : Set α) (hs : IsOpen s) : PartialHomeomorph α α where
- toLocalEquiv := LocalEquiv.ofSet s
+ toPartialEquiv := PartialEquiv.ofSet s
open_source := hs
open_target := hs
continuousOn_toFun := continuous_id.continuousOn
@@ -784,9 +788,9 @@ def ofSet (s : Set α) (hs : IsOpen s) : PartialHomeomorph α α where
#align local_homeomorph.of_set PartialHomeomorph.ofSet
@[simp, mfld_simps]
-theorem ofSet_toLocalEquiv : (ofSet s hs).toLocalEquiv = LocalEquiv.ofSet s :=
+theorem ofSet_toPartialEquiv : (ofSet s hs).toPartialEquiv = PartialEquiv.ofSet s :=
rfl
-#align local_homeomorph.of_set_to_local_equiv PartialHomeomorph.ofSet_toLocalEquiv
+#align local_homeomorph.of_set_to_local_equiv PartialHomeomorph.ofSet_toPartialEquiv
@[simp, mfld_simps]
theorem ofSet_symm : (ofSet s hs).symm = ofSet s hs :=
@@ -801,9 +805,9 @@ end
/-- Composition of two partial homeomorphisms when the target of the first and the source of
the second coincide. -/
-@[simps! apply symm_apply toLocalEquiv, simps! (config := .lemmasOnly) source target]
+@[simps! apply symm_apply toPartialEquiv, simps! (config := .lemmasOnly) source target]
protected def trans' (h : e.target = e'.source) : PartialHomeomorph α γ where
- toLocalEquiv := LocalEquiv.trans' e.toLocalEquiv e'.toLocalEquiv h
+ toPartialEquiv := PartialEquiv.trans' e.toPartialEquiv e'.toPartialEquiv h
open_source := e.open_source
open_target := e'.open_target
continuousOn_toFun := e'.continuousOn.comp e.continuousOn <| h ▸ e.mapsTo
@@ -818,9 +822,10 @@ protected def trans : PartialHomeomorph α γ :=
#align local_homeomorph.trans PartialHomeomorph.trans
@[simp, mfld_simps]
-theorem trans_toLocalEquiv : (e.trans e').toLocalEquiv = e.toLocalEquiv.trans e'.toLocalEquiv :=
+theorem trans_toPartialEquiv :
+ (e.trans e').toPartialEquiv = e.toPartialEquiv.trans e'.toPartialEquiv :=
rfl
-#align local_homeomorph.trans_to_local_equiv PartialHomeomorph.trans_toLocalEquiv
+#align local_homeomorph.trans_to_local_equiv PartialHomeomorph.trans_toPartialEquiv
@[simp, mfld_simps]
theorem coe_trans : (e.trans e' : α → γ) = e' ∘ e :=
@@ -842,19 +847,19 @@ theorem trans_symm_eq_symm_trans_symm : (e.trans e').symm = e'.symm.trans e.symm
/- This could be considered as a simp lemma, but there are many situations where it makes something
simple into something more complicated. -/
theorem trans_source : (e.trans e').source = e.source ∩ e ⁻¹' e'.source :=
- LocalEquiv.trans_source e.toLocalEquiv e'.toLocalEquiv
+ PartialEquiv.trans_source e.toPartialEquiv e'.toPartialEquiv
#align local_homeomorph.trans_source PartialHomeomorph.trans_source
theorem trans_source' : (e.trans e').source = e.source ∩ e ⁻¹' (e.target ∩ e'.source) :=
- LocalEquiv.trans_source' e.toLocalEquiv e'.toLocalEquiv
+ PartialEquiv.trans_source' e.toPartialEquiv e'.toPartialEquiv
#align local_homeomorph.trans_source' PartialHomeomorph.trans_source'
theorem trans_source'' : (e.trans e').source = e.symm '' (e.target ∩ e'.source) :=
- LocalEquiv.trans_source'' e.toLocalEquiv e'.toLocalEquiv
+ PartialEquiv.trans_source'' e.toPartialEquiv e'.toPartialEquiv
#align local_homeomorph.trans_source'' PartialHomeomorph.trans_source''
theorem image_trans_source : e '' (e.trans e').source = e.target ∩ e'.source :=
- LocalEquiv.image_trans_source e.toLocalEquiv e'.toLocalEquiv
+ PartialEquiv.image_trans_source e.toPartialEquiv e'.toPartialEquiv
#align local_homeomorph.image_trans_source PartialHomeomorph.image_trans_source
theorem trans_target : (e.trans e').target = e'.target ∩ e'.symm ⁻¹' e.target :=
@@ -875,17 +880,17 @@ theorem inv_image_trans_target : e'.symm '' (e.trans e').target = e'.source ∩
theorem trans_assoc (e'' : PartialHomeomorph γ δ) :
(e.trans e').trans e'' = e.trans (e'.trans e'') :=
- toLocalEquiv_injective <| e.1.trans_assoc _ _
+ toPartialEquiv_injective <| e.1.trans_assoc _ _
#align local_homeomorph.trans_assoc PartialHomeomorph.trans_assoc
@[simp, mfld_simps]
theorem trans_refl : e.trans (PartialHomeomorph.refl β) = e :=
- toLocalEquiv_injective e.1.trans_refl
+ toPartialEquiv_injective e.1.trans_refl
#align local_homeomorph.trans_refl PartialHomeomorph.trans_refl
@[simp, mfld_simps]
theorem refl_trans : (PartialHomeomorph.refl α).trans e = e :=
- toLocalEquiv_injective e.1.refl_trans
+ toPartialEquiv_injective e.1.refl_trans
#align local_homeomorph.refl_trans PartialHomeomorph.refl_trans
theorem trans_ofSet {s : Set β} (hs : IsOpen s) : e.trans (ofSet s hs) = e.restr (e ⁻¹' s) :=
@@ -914,14 +919,15 @@ theorem ofSet_trans_ofSet {s : Set α} (hs : IsOpen s) {s' : Set α} (hs' : IsOp
#align local_homeomorph.of_set_trans_of_set PartialHomeomorph.ofSet_trans_ofSet
theorem restr_trans (s : Set α) : (e.restr s).trans e' = (e.trans e').restr s :=
- toLocalEquiv_injective <| LocalEquiv.restr_trans e.toLocalEquiv e'.toLocalEquiv (interior s)
+ toPartialEquiv_injective <|
+ PartialEquiv.restr_trans e.toPartialEquiv e'.toPartialEquiv (interior s)
#align local_homeomorph.restr_trans PartialHomeomorph.restr_trans
/-- Postcompose a partial homeomorphism with a homeomorphism.
We modify the source and target to have better definitional behavior. -/
@[simps! (config := .asFn)]
def transHomeomorph (e' : β ≃ₜ γ) : PartialHomeomorph α γ where
- toLocalEquiv := e.toLocalEquiv.transEquiv e'.toEquiv
+ toPartialEquiv := e.toPartialEquiv.transEquiv e'.toEquiv
open_source := e.open_source
open_target := e.open_target.preimage e'.symm.continuous
continuousOn_toFun := e'.continuous.comp_continuousOn e.continuousOn
@@ -930,14 +936,14 @@ def transHomeomorph (e' : β ≃ₜ γ) : PartialHomeomorph α γ where
theorem transHomeomorph_eq_trans (e' : β ≃ₜ γ) :
e.transHomeomorph e' = e.trans e'.toPartialHomeomorph :=
- toLocalEquiv_injective <| LocalEquiv.transEquiv_eq_trans _ _
+ toPartialEquiv_injective <| PartialEquiv.transEquiv_eq_trans _ _
#align local_homeomorph.trans_equiv_eq_trans PartialHomeomorph.transHomeomorph_eq_trans
/-- Precompose a partial homeomorphism with a homeomorphism.
We modify the source and target to have better definitional behavior. -/
@[simps! (config := .asFn)]
def _root_.Homeomorph.transPartialHomeomorph (e : α ≃ₜ β) : PartialHomeomorph α γ where
- toLocalEquiv := e.toEquiv.transLocalEquiv e'.toLocalEquiv
+ toPartialEquiv := e.toEquiv.transPartialEquiv e'.toPartialEquiv
open_source := e'.open_source.preimage e.continuous
open_target := e'.open_target
continuousOn_toFun := e'.continuousOn.comp e.continuous.continuousOn fun _ => id
@@ -946,30 +952,30 @@ def _root_.Homeomorph.transPartialHomeomorph (e : α ≃ₜ β) : PartialHomeomo
theorem _root_.Homeomorph.transPartialHomeomorph_eq_trans (e : α ≃ₜ β) :
e.transPartialHomeomorph e' = e.toPartialHomeomorph.trans e' :=
- toLocalEquiv_injective <| Equiv.transLocalEquiv_eq_trans _ _
+ toPartialEquiv_injective <| Equiv.transPartialEquiv_eq_trans _ _
#align homeomorph.trans_local_homeomorph_eq_trans Homeomorph.transPartialHomeomorph_eq_trans
/-- `EqOnSource e e'` means that `e` and `e'` have the same source, and coincide there. They
-should really be considered the same local equivalence. -/
+should really be considered the same partial equivalence. -/
def EqOnSource (e e' : PartialHomeomorph α β) : Prop :=
e.source = e'.source ∧ EqOn e e' e.source
#align local_homeomorph.eq_on_source PartialHomeomorph.EqOnSource
theorem eqOnSource_iff (e e' : PartialHomeomorph α β) :
- EqOnSource e e' ↔ LocalEquiv.EqOnSource e.toLocalEquiv e'.toLocalEquiv :=
+ EqOnSource e e' ↔ PartialEquiv.EqOnSource e.toPartialEquiv e'.toPartialEquiv :=
Iff.rfl
#align local_homeomorph.eq_on_source_iff PartialHomeomorph.eqOnSource_iff
/-- `EqOnSource` is an equivalence relation. -/
instance eqOnSourceSetoid : Setoid (PartialHomeomorph α β) :=
- { LocalEquiv.eqOnSourceSetoid.comap toLocalEquiv with r := EqOnSource }
+ { PartialEquiv.eqOnSourceSetoid.comap toPartialEquiv with r := EqOnSource }
theorem eqOnSource_refl : e ≈ e := Setoid.refl _
#align local_homeomorph.eq_on_source_refl PartialHomeomorph.eqOnSource_refl
/-- If two partial homeomorphisms are equivalent, so are their inverses. -/
theorem EqOnSource.symm' {e e' : PartialHomeomorph α β} (h : e ≈ e') : e.symm ≈ e'.symm :=
- LocalEquiv.EqOnSource.symm' h
+ PartialEquiv.EqOnSource.symm' h
#align local_homeomorph.eq_on_source.symm' PartialHomeomorph.EqOnSource.symm'
/-- Two equivalent partial homeomorphisms have the same source. -/
@@ -996,13 +1002,13 @@ theorem EqOnSource.symm_eqOn_target {e e' : PartialHomeomorph α β} (h : e ≈
/-- Composition of partial homeomorphisms respects equivalence. -/
theorem EqOnSource.trans' {e e' : PartialHomeomorph α β} {f f' : PartialHomeomorph β γ}
(he : e ≈ e') (hf : f ≈ f') : e.trans f ≈ e'.trans f' :=
- LocalEquiv.EqOnSource.trans' he hf
+ PartialEquiv.EqOnSource.trans' he hf
#align local_homeomorph.eq_on_source.trans' PartialHomeomorph.EqOnSource.trans'
/-- Restriction of partial homeomorphisms respects equivalence -/
theorem EqOnSource.restr {e e' : PartialHomeomorph α β} (he : e ≈ e') (s : Set α) :
e.restr s ≈ e'.restr s :=
- LocalEquiv.EqOnSource.restr he _
+ PartialEquiv.EqOnSource.restr he _
#align local_homeomorph.eq_on_source.restr PartialHomeomorph.EqOnSource.restr
/- Two equivalent partial homeomorphisms are equal when the source and target are `univ`. -/
@@ -1019,7 +1025,7 @@ theorem Set.EqOn.restr_eqOn_source {e e' : PartialHomeomorph α β}
/-- Composition of a partial homeomorphism and its inverse is equivalent to the restriction of the
identity to the source -/
theorem trans_self_symm : e.trans e.symm ≈ PartialHomeomorph.ofSet e.source e.open_source :=
- LocalEquiv.trans_self_symm _
+ PartialEquiv.trans_self_symm _
#align local_homeomorph.trans_self_symm PartialHomeomorph.trans_self_symm
theorem trans_symm_self : e.symm.trans e ≈ PartialHomeomorph.ofSet e.target e.open_target :=
@@ -1028,13 +1034,13 @@ theorem trans_symm_self : e.symm.trans e ≈ PartialHomeomorph.ofSet e.target e.
theorem eq_of_eqOnSource_univ {e e' : PartialHomeomorph α β} (h : e ≈ e') (s : e.source = univ)
(t : e.target = univ) : e = e' :=
- toLocalEquiv_injective <| LocalEquiv.eq_of_eqOnSource_univ _ _ h s t
+ toPartialEquiv_injective <| PartialEquiv.eq_of_eqOnSource_univ _ _ h s t
#align local_homeomorph.eq_of_eq_on_source_univ PartialHomeomorph.eq_of_eqOnSource_univ
section Prod
/-- The product of two partial homeomorphisms, as a partial homeomorphism on the product space. -/
-@[simps! (config := mfld_cfg) toLocalEquiv apply,
+@[simps! (config := mfld_cfg) toPartialEquiv apply,
simps! (config := .lemmasOnly) source target symm_apply]
def prod (e : PartialHomeomorph α β) (e' : PartialHomeomorph γ δ) :
PartialHomeomorph (α × γ) (β × δ) where
@@ -1042,7 +1048,7 @@ def prod (e : PartialHomeomorph α β) (e' : PartialHomeomorph γ δ) :
open_target := e.open_target.prod e'.open_target
continuousOn_toFun := e.continuousOn.prod_map e'.continuousOn
continuousOn_invFun := e.continuousOn_symm.prod_map e'.continuousOn_symm
- toLocalEquiv := e.toLocalEquiv.prod e'.toLocalEquiv
+ toPartialEquiv := e.toPartialEquiv.prod e'.toPartialEquiv
#align local_homeomorph.prod PartialHomeomorph.prod
@[simp, mfld_simps]
@@ -1061,7 +1067,7 @@ theorem refl_prod_refl {α β : Type*} [TopologicalSpace α] [TopologicalSpace
theorem prod_trans {η : Type*} {ε : Type*} [TopologicalSpace η] [TopologicalSpace ε]
(e : PartialHomeomorph α β) (f : PartialHomeomorph β γ) (e' : PartialHomeomorph δ η)
(f' : PartialHomeomorph η ε) : (e.prod e').trans (f.prod f') = (e.trans f).prod (e'.trans f') :=
- toLocalEquiv_injective <| e.1.prod_trans ..
+ toPartialEquiv_injective <| e.1.prod_trans ..
#align local_homeomorph.prod_trans PartialHomeomorph.prod_trans
theorem prod_eq_prod_of_nonempty {e₁ e₁' : PartialHomeomorph α β} {e₂ e₂' : PartialHomeomorph γ δ}
@@ -1093,12 +1099,12 @@ To ensure the maps `toFun` and `invFun` are inverse of each other on the new `so
the definition assumes that the sets `s` and `t` are related both by `e.is_image` and `e'.is_image`.
To ensure that the new maps are continuous on `source`/`target`, it also assumes that `e.source` and
`e'.source` meet `frontier s` on the same set and `e x = e' x` on this intersection. -/
-@[simps! (config := .asFn) toLocalEquiv apply]
+@[simps! (config := .asFn) toPartialEquiv apply]
def piecewise (e e' : PartialHomeomorph α β) (s : Set α) (t : Set β) [∀ x, Decidable (x ∈ s)]
[∀ y, Decidable (y ∈ t)] (H : e.IsImage s t) (H' : e'.IsImage s t)
(Hs : e.source ∩ frontier s = e'.source ∩ frontier s)
(Heq : EqOn e e' (e.source ∩ frontier s)) : PartialHomeomorph α β where
- toLocalEquiv := e.toLocalEquiv.piecewise e'.toLocalEquiv s t H H'
+ toPartialEquiv := e.toPartialEquiv.piecewise e'.toPartialEquiv s t H H'
open_source := e.open_source.ite e'.open_source Hs
open_target :=
e.open_target.ite e'.open_target <| H.frontier.inter_eq_of_inter_eq_of_eqOn H'.frontier Hs Heq
@@ -1122,7 +1128,7 @@ theorem symm_piecewise (e e' : PartialHomeomorph α β) {s : Set α} {t : Set β
#align local_homeomorph.symm_piecewise PartialHomeomorph.symm_piecewise
/-- Combine two `PartialHomeomorph`s with disjoint sources and disjoint targets. We reuse
-`PartialHomeomorph.piecewise` then override `toLocalEquiv` to `LocalEquiv.disjointUnion`.
+`PartialHomeomorph.piecewise` then override `toPartialEquiv` to `PartialEquiv.disjointUnion`.
This way we have better definitional equalities for `source` and `target`. -/
def disjointUnion (e e' : PartialHomeomorph α β) [∀ x, Decidable (x ∈ e.source)]
[∀ y, Decidable (y ∈ e.target)] (Hs : Disjoint e.source e'.source)
@@ -1133,8 +1139,8 @@ def disjointUnion (e e' : PartialHomeomorph α β) [∀ x, Decidable (x ∈ e.so
(by
rw [e.open_source.inter_frontier_eq]
exact eqOn_empty _ _)).replaceEquiv
- (e.toLocalEquiv.disjointUnion e'.toLocalEquiv Hs Ht)
- (LocalEquiv.disjointUnion_eq_piecewise _ _ _ _).symm
+ (e.toPartialEquiv.disjointUnion e'.toPartialEquiv Hs Ht)
+ (PartialEquiv.disjointUnion_eq_piecewise _ _ _ _).symm
#align local_homeomorph.disjoint_union PartialHomeomorph.disjointUnion
end Piecewise
@@ -1145,9 +1151,9 @@ variable {ι : Type*} [Fintype ι] {Xi Yi : ι → Type*} [∀ i, TopologicalSpa
[∀ i, TopologicalSpace (Yi i)] (ei : ∀ i, PartialHomeomorph (Xi i) (Yi i))
/-- The product of a finite family of `PartialHomeomorph`s. -/
-@[simps toLocalEquiv]
+@[simps toPartialEquiv]
def pi : PartialHomeomorph (∀ i, Xi i) (∀ i, Yi i) where
- toLocalEquiv := LocalEquiv.pi fun i => (ei i).toLocalEquiv
+ toPartialEquiv := PartialEquiv.pi fun i => (ei i).toPartialEquiv
open_source := isOpen_set_pi finite_univ fun i _ => (ei i).open_source
open_target := isOpen_set_pi finite_univ fun i _ => (ei i).open_target
continuousOn_toFun := continuousOn_pi.2 fun i =>
@@ -1268,7 +1274,7 @@ theorem nhds_eq_comap_inf_principal {x} (hx : x ∈ e.source) :
/-- If a partial homeomorphism has source and target equal to univ, then it induces a homeomorphism
between the whole spaces, expressed in this definition. -/
-@[simps (config := mfld_cfg) apply symm_apply] -- porting note: todo: add a `LocalEquiv` version
+@[simps (config := mfld_cfg) apply symm_apply] -- porting note: todo: add a `PartialEquiv` version
def toHomeomorphOfSourceEqUnivTargetEqUniv (h : e.source = (univ : Set α)) (h' : e.target = univ) :
α ≃ₜ β where
toFun := e
@@ -1324,7 +1330,7 @@ theorem symm_toPartialHomeomorph : e.symm.toPartialHomeomorph = e.toPartialHomeo
@[simp, mfld_simps]
theorem trans_toPartialHomeomorph :
(e.trans e').toPartialHomeomorph = e.toPartialHomeomorph.trans e'.toPartialHomeomorph :=
- PartialHomeomorph.toLocalEquiv_injective <| Equiv.trans_toLocalEquiv _ _
+ PartialHomeomorph.toPartialEquiv_injective <| Equiv.trans_toPartialEquiv _ _
#align homeomorph.trans_to_local_homeomorph Homeomorph.trans_toPartialHomeomorph
end Homeomorph
@@ -1337,7 +1343,7 @@ variable (f : α → β) (h : OpenEmbedding f)
whose source is all of `α`. The converse is also true; see `PartialHomeomorph.to_openEmbedding`. -/
@[simps! (config := mfld_cfg) apply source target]
noncomputable def toPartialHomeomorph [Nonempty α] : PartialHomeomorph α β :=
- PartialHomeomorph.ofContinuousOpen ((h.toEmbedding.inj.injOn univ).toLocalEquiv _ _)
+ PartialHomeomorph.ofContinuousOpen ((h.toEmbedding.inj.injOn univ).toPartialEquiv _ _)
h.continuous.continuousOn h.isOpenMap isOpen_univ
#align open_embedding.to_local_homeomorph OpenEmbedding.toPartialHomeomorph
Port of [mathlib#15763](https://github.com/leanprover-community/mathlib/pull/15763)
We complete the construction of the Lie group of units of a complete normed ring.
To show that multiplication and inversion are smooth, we add some more lemmas:
M
whose chart structure is induced by an open embedding from M
to H
, the open embedding itself is a smooth manifold map.f : M → M'
whose target space M'
has a chart structure induced by an open embedding e' : M' → H'
, if e' ∘ f
is smooth, then f
is smooth.Lemmas previously not ported are now ported:
open_embedding.to_local_homeomorph_left_inv
open_embedding.to_local_homeomorph_right_inv
Co-authored-by: Michael Rothgang <rothgami@math.hu-berlin.de>
@@ -1341,6 +1341,17 @@ noncomputable def toPartialHomeomorph [Nonempty α] : PartialHomeomorph α β :=
h.continuous.continuousOn h.isOpenMap isOpen_univ
#align open_embedding.to_local_homeomorph OpenEmbedding.toPartialHomeomorph
+variable [Nonempty α]
+
+lemma toPartialHomeomorph_left_inv {x : α} : (h.toPartialHomeomorph f).symm (f x) = x := by
+ rw [← congr_fun (h.toPartialHomeomorph_apply f), PartialHomeomorph.left_inv]
+ exact Set.mem_univ _
+
+lemma toPartialHomeomorph_right_inv {x : β} (hx : x ∈ Set.range f) :
+ f ((h.toPartialHomeomorph f).symm x) = x := by
+ rw [← congr_fun (h.toPartialHomeomorph_apply f), PartialHomeomorph.right_inv]
+ rwa [toPartialHomeomorph_target]
+
end OpenEmbedding
namespace TopologicalSpace.Opens
LocalHomeomorph
evokes a "local homeomorphism": this is not what this means.
Instead, this is a homeomorphism on an open set of the domain (extended to the whole space, by the junk value pattern). Hence, partial homeomorphism is more appropriate, and avoids confusion with IsLocallyHomeomorph
.
A future PR will rename LocalEquiv
to PartialEquiv
.
@@ -9,10 +9,10 @@ import Mathlib.Topology.Sets.Opens
#align_import topology.local_homeomorph from "leanprover-community/mathlib"@"431589bce478b2229eba14b14a283250428217db"
/-!
-# Local homeomorphisms
+# Partial homeomorphisms
This file defines homeomorphisms between open subsets of topological spaces. An element `e` of
-`LocalHomeomorph α β` is an extension of `LocalEquiv α β`, i.e., it is a pair of functions
+`PartialHomeomorph α β` is an extension of `LocalEquiv α β`, i.e., it is a pair of functions
`e.toFun` and `e.invFun`, inverse of each other on the sets `e.source` and `e.target`.
Additionally, we require that these sets are open, and that the functions are continuous on them.
Equivalently, they are homeomorphisms there.
@@ -22,14 +22,14 @@ instead of `e.toFun x` and `e.invFun x`.
## Main definitions
-* `Homeomorph.toLocalHomeomorph`: associating a local homeomorphism to a homeomorphism, with
+* `Homeomorph.toPartialHomeomorph`: associating a partial homeomorphism to a homeomorphism, with
`source = target = Set.univ`;
-* `LocalHomeomorph.symm`: the inverse of a local homeomorphism
-* `LocalHomeomorph.trans`: the composition of two local homeomorphisms
-* `LocalHomeomorph.refl`: the identity local homeomorphism
-* `LocalHomeomorph.ofSet`: the identity on a set `s`
-* `LocalHomeomorph.EqOnSource`: equivalence relation describing the "right" notion of equality
- for local homeomorphisms
+* `PartialHomeomorph.symm`: the inverse of a partial homeomorphism
+* `PartialHomeomorph.trans`: the composition of two partial homeomorphisms
+* `PartialHomeomorph.refl`: the identity partial homeomorphism
+* `PartialHomeomorph.ofSet`: the identity on a set `s`
+* `PartialHomeomorph.EqOnSource`: equivalence relation describing the "right" notion of equality
+ for partial homeomorphisms
## Implementation notes
@@ -50,98 +50,99 @@ open Function Set Filter Topology
variable {α : Type*} {β : Type*} {γ : Type*} {δ : Type*} [TopologicalSpace α]
[TopologicalSpace β] [TopologicalSpace γ] [TopologicalSpace δ]
-/-- local homeomorphisms, defined on open subsets of the space -/
+/-- partial homeomorphisms, defined on open subsets of the space -/
-- porting note: commented @[nolint has_nonempty_instance]
-structure LocalHomeomorph (α : Type*) (β : Type*) [TopologicalSpace α]
+structure PartialHomeomorph (α : Type*) (β : Type*) [TopologicalSpace α]
[TopologicalSpace β] extends LocalEquiv α β where
open_source : IsOpen source
open_target : IsOpen target
continuousOn_toFun : ContinuousOn toFun source
continuousOn_invFun : ContinuousOn invFun target
-#align local_homeomorph LocalHomeomorph
+#align local_homeomorph PartialHomeomorph
-namespace LocalHomeomorph
+namespace PartialHomeomorph
-variable (e : LocalHomeomorph α β) (e' : LocalHomeomorph β γ)
+variable (e : PartialHomeomorph α β) (e' : PartialHomeomorph β γ)
-/-- Coercion of a local homeomorphisms to a function. We don't use `e.toFun` because it is actually
-`e.toLocalEquiv.toFun`, so `simp` will apply lemmas about `toLocalEquiv`. While we may want to
-switch to this behavior later, doing it mid-port will break a lot of proofs. -/
+/-- Coercion of a partial homeomorphisms to a function. We don't use `e.toFun` because it is
+actually `e.toLocalEquiv.toFun`, so `simp` will apply lemmas about `toLocalEquiv`.
+While we may want to switch to this behavior later, doing it mid-port will break a lot of proofs. -/
@[coe] def toFun' : α → β := e.toFun
-/-- Coercion of a `LocalHomeomorph` to function. Note that a `LocalHomeomorph` is not `FunLike`. -/
-instance : CoeFun (LocalHomeomorph α β) fun _ => α → β :=
+/-- Coercion of a `PartialHomeomorph` to function.
+Note that a `PartialHomeomorph` is not `FunLike`. -/
+instance : CoeFun (PartialHomeomorph α β) fun _ => α → β :=
⟨fun e => e.toFun'⟩
-/-- The inverse of a local homeomorphism -/
-protected def symm : LocalHomeomorph β α where
+/-- The inverse of a partial homeomorphism -/
+protected def symm : PartialHomeomorph β α where
toLocalEquiv := e.toLocalEquiv.symm
open_source := e.open_target
open_target := e.open_source
continuousOn_toFun := e.continuousOn_invFun
continuousOn_invFun := e.continuousOn_toFun
-#align local_homeomorph.symm LocalHomeomorph.symm
+#align local_homeomorph.symm PartialHomeomorph.symm
/-- See Note [custom simps projection]. We need to specify this projection explicitly in this case,
because it is a composition of multiple projections. -/
-def Simps.apply (e : LocalHomeomorph α β) : α → β := e
-#align local_homeomorph.simps.apply LocalHomeomorph.Simps.apply
+def Simps.apply (e : PartialHomeomorph α β) : α → β := e
+#align local_homeomorph.simps.apply PartialHomeomorph.Simps.apply
/-- See Note [custom simps projection] -/
-def Simps.symm_apply (e : LocalHomeomorph α β) : β → α := e.symm
-#align local_homeomorph.simps.symm_apply LocalHomeomorph.Simps.symm_apply
+def Simps.symm_apply (e : PartialHomeomorph α β) : β → α := e.symm
+#align local_homeomorph.simps.symm_apply PartialHomeomorph.Simps.symm_apply
-initialize_simps_projections LocalHomeomorph (toFun → apply, invFun → symm_apply)
+initialize_simps_projections PartialHomeomorph (toFun → apply, invFun → symm_apply)
protected theorem continuousOn : ContinuousOn e e.source :=
e.continuousOn_toFun
-#align local_homeomorph.continuous_on LocalHomeomorph.continuousOn
+#align local_homeomorph.continuous_on PartialHomeomorph.continuousOn
theorem continuousOn_symm : ContinuousOn e.symm e.target :=
e.continuousOn_invFun
-#align local_homeomorph.continuous_on_symm LocalHomeomorph.continuousOn_symm
+#align local_homeomorph.continuous_on_symm PartialHomeomorph.continuousOn_symm
@[simp, mfld_simps]
-theorem mk_coe (e : LocalEquiv α β) (a b c d) : (LocalHomeomorph.mk e a b c d : α → β) = e :=
+theorem mk_coe (e : LocalEquiv α β) (a b c d) : (PartialHomeomorph.mk e a b c d : α → β) = e :=
rfl
-#align local_homeomorph.mk_coe LocalHomeomorph.mk_coe
+#align local_homeomorph.mk_coe PartialHomeomorph.mk_coe
@[simp, mfld_simps]
theorem mk_coe_symm (e : LocalEquiv α β) (a b c d) :
- ((LocalHomeomorph.mk e a b c d).symm : β → α) = e.symm :=
+ ((PartialHomeomorph.mk e a b c d).symm : β → α) = e.symm :=
rfl
-#align local_homeomorph.mk_coe_symm LocalHomeomorph.mk_coe_symm
+#align local_homeomorph.mk_coe_symm PartialHomeomorph.mk_coe_symm
-theorem toLocalEquiv_injective : Injective (toLocalEquiv : LocalHomeomorph α β → LocalEquiv α β)
+theorem toLocalEquiv_injective : Injective (toLocalEquiv : PartialHomeomorph α β → LocalEquiv α β)
| ⟨_, _, _, _, _⟩, ⟨_, _, _, _, _⟩, rfl => rfl
-#align local_homeomorph.to_local_equiv_injective LocalHomeomorph.toLocalEquiv_injective
+#align local_homeomorph.to_local_equiv_injective PartialHomeomorph.toLocalEquiv_injective
/- Register a few simp lemmas to make sure that `simp` puts the application of a local
homeomorphism in its normal form, i.e., in terms of its coercion to a function. -/
@[simp, mfld_simps]
-theorem toFun_eq_coe (e : LocalHomeomorph α β) : e.toFun = e :=
+theorem toFun_eq_coe (e : PartialHomeomorph α β) : e.toFun = e :=
rfl
-#align local_homeomorph.to_fun_eq_coe LocalHomeomorph.toFun_eq_coe
+#align local_homeomorph.to_fun_eq_coe PartialHomeomorph.toFun_eq_coe
@[simp, mfld_simps]
-theorem invFun_eq_coe (e : LocalHomeomorph α β) : e.invFun = e.symm :=
+theorem invFun_eq_coe (e : PartialHomeomorph α β) : e.invFun = e.symm :=
rfl
-#align local_homeomorph.inv_fun_eq_coe LocalHomeomorph.invFun_eq_coe
+#align local_homeomorph.inv_fun_eq_coe PartialHomeomorph.invFun_eq_coe
@[simp, mfld_simps]
theorem coe_coe : (e.toLocalEquiv : α → β) = e :=
rfl
-#align local_homeomorph.coe_coe LocalHomeomorph.coe_coe
+#align local_homeomorph.coe_coe PartialHomeomorph.coe_coe
@[simp, mfld_simps]
theorem coe_coe_symm : (e.toLocalEquiv.symm : β → α) = e.symm :=
rfl
-#align local_homeomorph.coe_coe_symm LocalHomeomorph.coe_coe_symm
+#align local_homeomorph.coe_coe_symm PartialHomeomorph.coe_coe_symm
@[simp, mfld_simps]
theorem map_source {x : α} (h : x ∈ e.source) : e x ∈ e.target :=
e.map_source' h
-#align local_homeomorph.map_source LocalHomeomorph.map_source
+#align local_homeomorph.map_source PartialHomeomorph.map_source
/-- Variant of `map_source`, stated for images of subsets of `source`. -/
lemma map_source'' : e '' e.source ⊆ e.target :=
@@ -150,244 +151,244 @@ lemma map_source'' : e '' e.source ⊆ e.target :=
@[simp, mfld_simps]
theorem map_target {x : β} (h : x ∈ e.target) : e.symm x ∈ e.source :=
e.map_target' h
-#align local_homeomorph.map_target LocalHomeomorph.map_target
+#align local_homeomorph.map_target PartialHomeomorph.map_target
@[simp, mfld_simps]
theorem left_inv {x : α} (h : x ∈ e.source) : e.symm (e x) = x :=
e.left_inv' h
-#align local_homeomorph.left_inv LocalHomeomorph.left_inv
+#align local_homeomorph.left_inv PartialHomeomorph.left_inv
@[simp, mfld_simps]
theorem right_inv {x : β} (h : x ∈ e.target) : e (e.symm x) = x :=
e.right_inv' h
-#align local_homeomorph.right_inv LocalHomeomorph.right_inv
+#align local_homeomorph.right_inv PartialHomeomorph.right_inv
theorem eq_symm_apply {x : α} {y : β} (hx : x ∈ e.source) (hy : y ∈ e.target) :
x = e.symm y ↔ e x = y :=
e.toLocalEquiv.eq_symm_apply hx hy
-#align local_homeomorph.eq_symm_apply LocalHomeomorph.eq_symm_apply
+#align local_homeomorph.eq_symm_apply PartialHomeomorph.eq_symm_apply
protected theorem mapsTo : MapsTo e e.source e.target := fun _ => e.map_source
-#align local_homeomorph.maps_to LocalHomeomorph.mapsTo
+#align local_homeomorph.maps_to PartialHomeomorph.mapsTo
protected theorem symm_mapsTo : MapsTo e.symm e.target e.source :=
e.symm.mapsTo
-#align local_homeomorph.symm_maps_to LocalHomeomorph.symm_mapsTo
+#align local_homeomorph.symm_maps_to PartialHomeomorph.symm_mapsTo
protected theorem leftInvOn : LeftInvOn e.symm e e.source := fun _ => e.left_inv
-#align local_homeomorph.left_inv_on LocalHomeomorph.leftInvOn
+#align local_homeomorph.left_inv_on PartialHomeomorph.leftInvOn
protected theorem rightInvOn : RightInvOn e.symm e e.target := fun _ => e.right_inv
-#align local_homeomorph.right_inv_on LocalHomeomorph.rightInvOn
+#align local_homeomorph.right_inv_on PartialHomeomorph.rightInvOn
protected theorem invOn : InvOn e.symm e e.source e.target :=
⟨e.leftInvOn, e.rightInvOn⟩
-#align local_homeomorph.inv_on LocalHomeomorph.invOn
+#align local_homeomorph.inv_on PartialHomeomorph.invOn
protected theorem injOn : InjOn e e.source :=
e.leftInvOn.injOn
-#align local_homeomorph.inj_on LocalHomeomorph.injOn
+#align local_homeomorph.inj_on PartialHomeomorph.injOn
protected theorem bijOn : BijOn e e.source e.target :=
e.invOn.bijOn e.mapsTo e.symm_mapsTo
-#align local_homeomorph.bij_on LocalHomeomorph.bijOn
+#align local_homeomorph.bij_on PartialHomeomorph.bijOn
protected theorem surjOn : SurjOn e e.source e.target :=
e.bijOn.surjOn
-#align local_homeomorph.surj_on LocalHomeomorph.surjOn
+#align local_homeomorph.surj_on PartialHomeomorph.surjOn
-/-- Interpret a `Homeomorph` as a `LocalHomeomorph` by restricting it
+/-- Interpret a `Homeomorph` as a `PartialHomeomorph` by restricting it
to an open set `s` in the domain and to `t` in the codomain. -/
@[simps! (config := .asFn) apply symm_apply toLocalEquiv,
simps! (config := .lemmasOnly) source target]
-def _root_.Homeomorph.toLocalHomeomorphOfImageEq (e : α ≃ₜ β) (s : Set α) (hs : IsOpen s)
- (t : Set β) (h : e '' s = t) : LocalHomeomorph α β where
+def _root_.Homeomorph.toPartialHomeomorphOfImageEq (e : α ≃ₜ β) (s : Set α) (hs : IsOpen s)
+ (t : Set β) (h : e '' s = t) : PartialHomeomorph α β where
toLocalEquiv := e.toLocalEquivOfImageEq s t h
open_source := hs
open_target := by simpa [← h]
continuousOn_toFun := e.continuous.continuousOn
continuousOn_invFun := e.symm.continuous.continuousOn
-/-- A homeomorphism induces a local homeomorphism on the whole space -/
+/-- A homeomorphism induces a partial homeomorphism on the whole space -/
@[simps! (config := mfld_cfg)]
-def _root_.Homeomorph.toLocalHomeomorph (e : α ≃ₜ β) : LocalHomeomorph α β :=
- e.toLocalHomeomorphOfImageEq univ isOpen_univ univ <| by rw [image_univ, e.surjective.range_eq]
-#align homeomorph.to_local_homeomorph Homeomorph.toLocalHomeomorph
+def _root_.Homeomorph.toPartialHomeomorph (e : α ≃ₜ β) : PartialHomeomorph α β :=
+ e.toPartialHomeomorphOfImageEq univ isOpen_univ univ <| by rw [image_univ, e.surjective.range_eq]
+#align homeomorph.to_local_homeomorph Homeomorph.toPartialHomeomorph
/-- Replace `toLocalEquiv` field to provide better definitional equalities. -/
-def replaceEquiv (e : LocalHomeomorph α β) (e' : LocalEquiv α β) (h : e.toLocalEquiv = e') :
- LocalHomeomorph α β where
+def replaceEquiv (e : PartialHomeomorph α β) (e' : LocalEquiv α β) (h : e.toLocalEquiv = e') :
+ PartialHomeomorph α β where
toLocalEquiv := e'
open_source := h ▸ e.open_source
open_target := h ▸ e.open_target
continuousOn_toFun := h ▸ e.continuousOn_toFun
continuousOn_invFun := h ▸ e.continuousOn_invFun
-#align local_homeomorph.replace_equiv LocalHomeomorph.replaceEquiv
+#align local_homeomorph.replace_equiv PartialHomeomorph.replaceEquiv
-theorem replaceEquiv_eq_self (e : LocalHomeomorph α β) (e' : LocalEquiv α β)
+theorem replaceEquiv_eq_self (e : PartialHomeomorph α β) (e' : LocalEquiv α β)
(h : e.toLocalEquiv = e') : e.replaceEquiv e' h = e := by
cases e
subst e'
rfl
-#align local_homeomorph.replace_equiv_eq_self LocalHomeomorph.replaceEquiv_eq_self
+#align local_homeomorph.replace_equiv_eq_self PartialHomeomorph.replaceEquiv_eq_self
theorem source_preimage_target : e.source ⊆ e ⁻¹' e.target :=
e.mapsTo
-#align local_homeomorph.source_preimage_target LocalHomeomorph.source_preimage_target
+#align local_homeomorph.source_preimage_target PartialHomeomorph.source_preimage_target
@[deprecated toLocalEquiv_injective]
-theorem eq_of_localEquiv_eq {e e' : LocalHomeomorph α β} (h : e.toLocalEquiv = e'.toLocalEquiv) :
+theorem eq_of_localEquiv_eq {e e' : PartialHomeomorph α β} (h : e.toLocalEquiv = e'.toLocalEquiv) :
e = e' := toLocalEquiv_injective h
-#align local_homeomorph.eq_of_local_equiv_eq LocalHomeomorph.eq_of_localEquiv_eq
+#align local_homeomorph.eq_of_local_equiv_eq PartialHomeomorph.eq_of_localEquiv_eq
-theorem eventually_left_inverse (e : LocalHomeomorph α β) {x} (hx : x ∈ e.source) :
+theorem eventually_left_inverse (e : PartialHomeomorph α β) {x} (hx : x ∈ e.source) :
∀ᶠ y in 𝓝 x, e.symm (e y) = y :=
(e.open_source.eventually_mem hx).mono e.left_inv'
-#align local_homeomorph.eventually_left_inverse LocalHomeomorph.eventually_left_inverse
+#align local_homeomorph.eventually_left_inverse PartialHomeomorph.eventually_left_inverse
-theorem eventually_left_inverse' (e : LocalHomeomorph α β) {x} (hx : x ∈ e.target) :
+theorem eventually_left_inverse' (e : PartialHomeomorph α β) {x} (hx : x ∈ e.target) :
∀ᶠ y in 𝓝 (e.symm x), e.symm (e y) = y :=
e.eventually_left_inverse (e.map_target hx)
-#align local_homeomorph.eventually_left_inverse' LocalHomeomorph.eventually_left_inverse'
+#align local_homeomorph.eventually_left_inverse' PartialHomeomorph.eventually_left_inverse'
-theorem eventually_right_inverse (e : LocalHomeomorph α β) {x} (hx : x ∈ e.target) :
+theorem eventually_right_inverse (e : PartialHomeomorph α β) {x} (hx : x ∈ e.target) :
∀ᶠ y in 𝓝 x, e (e.symm y) = y :=
(e.open_target.eventually_mem hx).mono e.right_inv'
-#align local_homeomorph.eventually_right_inverse LocalHomeomorph.eventually_right_inverse
+#align local_homeomorph.eventually_right_inverse PartialHomeomorph.eventually_right_inverse
-theorem eventually_right_inverse' (e : LocalHomeomorph α β) {x} (hx : x ∈ e.source) :
+theorem eventually_right_inverse' (e : PartialHomeomorph α β) {x} (hx : x ∈ e.source) :
∀ᶠ y in 𝓝 (e x), e (e.symm y) = y :=
e.eventually_right_inverse (e.map_source hx)
-#align local_homeomorph.eventually_right_inverse' LocalHomeomorph.eventually_right_inverse'
+#align local_homeomorph.eventually_right_inverse' PartialHomeomorph.eventually_right_inverse'
-theorem eventually_ne_nhdsWithin (e : LocalHomeomorph α β) {x} (hx : x ∈ e.source) :
+theorem eventually_ne_nhdsWithin (e : PartialHomeomorph α β) {x} (hx : x ∈ e.source) :
∀ᶠ x' in 𝓝[≠] x, e x' ≠ e x :=
eventually_nhdsWithin_iff.2 <|
(e.eventually_left_inverse hx).mono fun x' hx' =>
mt fun h => by rw [mem_singleton_iff, ← e.left_inv hx, ← h, hx']
-#align local_homeomorph.eventually_ne_nhds_within LocalHomeomorph.eventually_ne_nhdsWithin
+#align local_homeomorph.eventually_ne_nhds_within PartialHomeomorph.eventually_ne_nhdsWithin
theorem nhdsWithin_source_inter {x} (hx : x ∈ e.source) (s : Set α) : 𝓝[e.source ∩ s] x = 𝓝[s] x :=
nhdsWithin_inter_of_mem (mem_nhdsWithin_of_mem_nhds <| IsOpen.mem_nhds e.open_source hx)
-#align local_homeomorph.nhds_within_source_inter LocalHomeomorph.nhdsWithin_source_inter
+#align local_homeomorph.nhds_within_source_inter PartialHomeomorph.nhdsWithin_source_inter
theorem nhdsWithin_target_inter {x} (hx : x ∈ e.target) (s : Set β) : 𝓝[e.target ∩ s] x = 𝓝[s] x :=
e.symm.nhdsWithin_source_inter hx s
-#align local_homeomorph.nhds_within_target_inter LocalHomeomorph.nhdsWithin_target_inter
+#align local_homeomorph.nhds_within_target_inter PartialHomeomorph.nhdsWithin_target_inter
theorem image_eq_target_inter_inv_preimage {s : Set α} (h : s ⊆ e.source) :
e '' s = e.target ∩ e.symm ⁻¹' s :=
e.toLocalEquiv.image_eq_target_inter_inv_preimage h
-#align local_homeomorph.image_eq_target_inter_inv_preimage LocalHomeomorph.image_eq_target_inter_inv_preimage
+#align local_homeomorph.image_eq_target_inter_inv_preimage PartialHomeomorph.image_eq_target_inter_inv_preimage
theorem image_source_inter_eq' (s : Set α) : e '' (e.source ∩ s) = e.target ∩ e.symm ⁻¹' s :=
e.toLocalEquiv.image_source_inter_eq' s
-#align local_homeomorph.image_source_inter_eq' LocalHomeomorph.image_source_inter_eq'
+#align local_homeomorph.image_source_inter_eq' PartialHomeomorph.image_source_inter_eq'
theorem image_source_inter_eq (s : Set α) :
e '' (e.source ∩ s) = e.target ∩ e.symm ⁻¹' (e.source ∩ s) :=
e.toLocalEquiv.image_source_inter_eq s
-#align local_homeomorph.image_source_inter_eq LocalHomeomorph.image_source_inter_eq
+#align local_homeomorph.image_source_inter_eq PartialHomeomorph.image_source_inter_eq
theorem symm_image_eq_source_inter_preimage {s : Set β} (h : s ⊆ e.target) :
e.symm '' s = e.source ∩ e ⁻¹' s :=
e.symm.image_eq_target_inter_inv_preimage h
-#align local_homeomorph.symm_image_eq_source_inter_preimage LocalHomeomorph.symm_image_eq_source_inter_preimage
+#align local_homeomorph.symm_image_eq_source_inter_preimage PartialHomeomorph.symm_image_eq_source_inter_preimage
theorem symm_image_target_inter_eq (s : Set β) :
e.symm '' (e.target ∩ s) = e.source ∩ e ⁻¹' (e.target ∩ s) :=
e.symm.image_source_inter_eq _
-#align local_homeomorph.symm_image_target_inter_eq LocalHomeomorph.symm_image_target_inter_eq
+#align local_homeomorph.symm_image_target_inter_eq PartialHomeomorph.symm_image_target_inter_eq
theorem source_inter_preimage_inv_preimage (s : Set α) :
e.source ∩ e ⁻¹' (e.symm ⁻¹' s) = e.source ∩ s :=
e.toLocalEquiv.source_inter_preimage_inv_preimage s
-#align local_homeomorph.source_inter_preimage_inv_preimage LocalHomeomorph.source_inter_preimage_inv_preimage
+#align local_homeomorph.source_inter_preimage_inv_preimage PartialHomeomorph.source_inter_preimage_inv_preimage
theorem target_inter_inv_preimage_preimage (s : Set β) :
e.target ∩ e.symm ⁻¹' (e ⁻¹' s) = e.target ∩ s :=
e.symm.source_inter_preimage_inv_preimage _
-#align local_homeomorph.target_inter_inv_preimage_preimage LocalHomeomorph.target_inter_inv_preimage_preimage
+#align local_homeomorph.target_inter_inv_preimage_preimage PartialHomeomorph.target_inter_inv_preimage_preimage
theorem source_inter_preimage_target_inter (s : Set β) :
e.source ∩ e ⁻¹' (e.target ∩ s) = e.source ∩ e ⁻¹' s :=
e.toLocalEquiv.source_inter_preimage_target_inter s
-#align local_homeomorph.source_inter_preimage_target_inter LocalHomeomorph.source_inter_preimage_target_inter
+#align local_homeomorph.source_inter_preimage_target_inter PartialHomeomorph.source_inter_preimage_target_inter
-theorem image_source_eq_target (e : LocalHomeomorph α β) : e '' e.source = e.target :=
+theorem image_source_eq_target (e : PartialHomeomorph α β) : e '' e.source = e.target :=
e.toLocalEquiv.image_source_eq_target
-#align local_homeomorph.image_source_eq_target LocalHomeomorph.image_source_eq_target
+#align local_homeomorph.image_source_eq_target PartialHomeomorph.image_source_eq_target
-theorem symm_image_target_eq_source (e : LocalHomeomorph α β) : e.symm '' e.target = e.source :=
+theorem symm_image_target_eq_source (e : PartialHomeomorph α β) : e.symm '' e.target = e.source :=
e.symm.image_source_eq_target
-#align local_homeomorph.symm_image_target_eq_source LocalHomeomorph.symm_image_target_eq_source
+#align local_homeomorph.symm_image_target_eq_source PartialHomeomorph.symm_image_target_eq_source
-/-- Two local homeomorphisms are equal when they have equal `toFun`, `invFun` and `source`.
+/-- Two partial homeomorphisms are equal when they have equal `toFun`, `invFun` and `source`.
It is not sufficient to have equal `toFun` and `source`, as this only determines `invFun` on
the target. This would only be true for a weaker notion of equality, arguably the right one,
called `EqOnSource`. -/
@[ext]
-protected theorem ext (e' : LocalHomeomorph α β) (h : ∀ x, e x = e' x)
+protected theorem ext (e' : PartialHomeomorph α β) (h : ∀ x, e x = e' x)
(hinv : ∀ x, e.symm x = e'.symm x) (hs : e.source = e'.source) : e = e' :=
toLocalEquiv_injective (LocalEquiv.ext h hinv hs)
-#align local_homeomorph.ext LocalHomeomorph.ext
+#align local_homeomorph.ext PartialHomeomorph.ext
-protected theorem ext_iff {e e' : LocalHomeomorph α β} :
+protected theorem ext_iff {e e' : PartialHomeomorph α β} :
e = e' ↔ (∀ x, e x = e' x) ∧ (∀ x, e.symm x = e'.symm x) ∧ e.source = e'.source :=
⟨by
rintro rfl
exact ⟨fun x => rfl, fun x => rfl, rfl⟩, fun h => e.ext e' h.1 h.2.1 h.2.2⟩
-#align local_homeomorph.ext_iff LocalHomeomorph.ext_iff
+#align local_homeomorph.ext_iff PartialHomeomorph.ext_iff
@[simp, mfld_simps]
theorem symm_toLocalEquiv : e.symm.toLocalEquiv = e.toLocalEquiv.symm :=
rfl
-#align local_homeomorph.symm_to_local_equiv LocalHomeomorph.symm_toLocalEquiv
+#align local_homeomorph.symm_to_local_equiv PartialHomeomorph.symm_toLocalEquiv
-- The following lemmas are already simp via `LocalEquiv`
theorem symm_source : e.symm.source = e.target :=
rfl
-#align local_homeomorph.symm_source LocalHomeomorph.symm_source
+#align local_homeomorph.symm_source PartialHomeomorph.symm_source
theorem symm_target : e.symm.target = e.source :=
rfl
-#align local_homeomorph.symm_target LocalHomeomorph.symm_target
+#align local_homeomorph.symm_target PartialHomeomorph.symm_target
@[simp, mfld_simps] theorem symm_symm : e.symm.symm = e := rfl
-#align local_homeomorph.symm_symm LocalHomeomorph.symm_symm
+#align local_homeomorph.symm_symm PartialHomeomorph.symm_symm
theorem symm_bijective : Function.Bijective
- (LocalHomeomorph.symm : LocalHomeomorph α β → LocalHomeomorph β α) :=
+ (PartialHomeomorph.symm : PartialHomeomorph α β → PartialHomeomorph β α) :=
Function.bijective_iff_has_inverse.mpr ⟨_, symm_symm, symm_symm⟩
-/-- A local homeomorphism is continuous at any point of its source -/
+/-- A partial homeomorphism is continuous at any point of its source -/
protected theorem continuousAt {x : α} (h : x ∈ e.source) : ContinuousAt e x :=
(e.continuousOn x h).continuousAt (e.open_source.mem_nhds h)
-#align local_homeomorph.continuous_at LocalHomeomorph.continuousAt
+#align local_homeomorph.continuous_at PartialHomeomorph.continuousAt
-/-- A local homeomorphism inverse is continuous at any point of its target -/
+/-- A partial homeomorphism inverse is continuous at any point of its target -/
theorem continuousAt_symm {x : β} (h : x ∈ e.target) : ContinuousAt e.symm x :=
e.symm.continuousAt h
-#align local_homeomorph.continuous_at_symm LocalHomeomorph.continuousAt_symm
+#align local_homeomorph.continuous_at_symm PartialHomeomorph.continuousAt_symm
theorem tendsto_symm {x} (hx : x ∈ e.source) : Tendsto e.symm (𝓝 (e x)) (𝓝 x) := by
simpa only [ContinuousAt, e.left_inv hx] using e.continuousAt_symm (e.map_source hx)
-#align local_homeomorph.tendsto_symm LocalHomeomorph.tendsto_symm
+#align local_homeomorph.tendsto_symm PartialHomeomorph.tendsto_symm
theorem map_nhds_eq {x} (hx : x ∈ e.source) : map e (𝓝 x) = 𝓝 (e x) :=
le_antisymm (e.continuousAt hx) <|
le_map_of_right_inverse (e.eventually_right_inverse' hx) (e.tendsto_symm hx)
-#align local_homeomorph.map_nhds_eq LocalHomeomorph.map_nhds_eq
+#align local_homeomorph.map_nhds_eq PartialHomeomorph.map_nhds_eq
theorem symm_map_nhds_eq {x} (hx : x ∈ e.source) : map e.symm (𝓝 (e x)) = 𝓝 x :=
(e.symm.map_nhds_eq <| e.map_source hx).trans <| by rw [e.left_inv hx]
-#align local_homeomorph.symm_map_nhds_eq LocalHomeomorph.symm_map_nhds_eq
+#align local_homeomorph.symm_map_nhds_eq PartialHomeomorph.symm_map_nhds_eq
theorem image_mem_nhds {x} (hx : x ∈ e.source) {s : Set α} (hs : s ∈ 𝓝 x) : e '' s ∈ 𝓝 (e x) :=
e.map_nhds_eq hx ▸ Filter.image_mem_map hs
-#align local_homeomorph.image_mem_nhds LocalHomeomorph.image_mem_nhds
+#align local_homeomorph.image_mem_nhds PartialHomeomorph.image_mem_nhds
-theorem map_nhdsWithin_eq (e : LocalHomeomorph α β) {x} (hx : x ∈ e.source) (s : Set α) :
+theorem map_nhdsWithin_eq (e : PartialHomeomorph α β) {x} (hx : x ∈ e.source) (s : Set α) :
map e (𝓝[s] x) = 𝓝[e '' (e.source ∩ s)] e x :=
calc
map e (𝓝[s] x) = map e (𝓝[e.source ∩ s] x) :=
@@ -396,44 +397,44 @@ theorem map_nhdsWithin_eq (e : LocalHomeomorph α β) {x} (hx : x ∈ e.source)
(e.leftInvOn.mono <| inter_subset_left _ _).map_nhdsWithin_eq (e.left_inv hx)
(e.continuousAt_symm (e.map_source hx)).continuousWithinAt
(e.continuousAt hx).continuousWithinAt
-#align local_homeomorph.map_nhds_within_eq LocalHomeomorph.map_nhdsWithin_eq
+#align local_homeomorph.map_nhds_within_eq PartialHomeomorph.map_nhdsWithin_eq
-theorem map_nhdsWithin_preimage_eq (e : LocalHomeomorph α β) {x} (hx : x ∈ e.source) (s : Set β) :
+theorem map_nhdsWithin_preimage_eq (e : PartialHomeomorph α β) {x} (hx : x ∈ e.source) (s : Set β) :
map e (𝓝[e ⁻¹' s] x) = 𝓝[s] e x := by
rw [e.map_nhdsWithin_eq hx, e.image_source_inter_eq', e.target_inter_inv_preimage_preimage,
e.nhdsWithin_target_inter (e.map_source hx)]
-#align local_homeomorph.map_nhds_within_preimage_eq LocalHomeomorph.map_nhdsWithin_preimage_eq
+#align local_homeomorph.map_nhds_within_preimage_eq PartialHomeomorph.map_nhdsWithin_preimage_eq
-theorem eventually_nhds (e : LocalHomeomorph α β) {x : α} (p : β → Prop) (hx : x ∈ e.source) :
+theorem eventually_nhds (e : PartialHomeomorph α β) {x : α} (p : β → Prop) (hx : x ∈ e.source) :
(∀ᶠ y in 𝓝 (e x), p y) ↔ ∀ᶠ x in 𝓝 x, p (e x) :=
Iff.trans (by rw [e.map_nhds_eq hx]) eventually_map
-#align local_homeomorph.eventually_nhds LocalHomeomorph.eventually_nhds
+#align local_homeomorph.eventually_nhds PartialHomeomorph.eventually_nhds
-theorem eventually_nhds' (e : LocalHomeomorph α β) {x : α} (p : α → Prop) (hx : x ∈ e.source) :
+theorem eventually_nhds' (e : PartialHomeomorph α β) {x : α} (p : α → Prop) (hx : x ∈ e.source) :
(∀ᶠ y in 𝓝 (e x), p (e.symm y)) ↔ ∀ᶠ x in 𝓝 x, p x := by
rw [e.eventually_nhds _ hx]
refine' eventually_congr ((e.eventually_left_inverse hx).mono fun y hy => _)
rw [hy]
-#align local_homeomorph.eventually_nhds' LocalHomeomorph.eventually_nhds'
+#align local_homeomorph.eventually_nhds' PartialHomeomorph.eventually_nhds'
-theorem eventually_nhdsWithin (e : LocalHomeomorph α β) {x : α} (p : β → Prop) {s : Set α}
+theorem eventually_nhdsWithin (e : PartialHomeomorph α β) {x : α} (p : β → Prop) {s : Set α}
(hx : x ∈ e.source) : (∀ᶠ y in 𝓝[e.symm ⁻¹' s] e x, p y) ↔ ∀ᶠ x in 𝓝[s] x, p (e x) := by
refine' Iff.trans _ eventually_map
rw [e.map_nhdsWithin_eq hx, e.image_source_inter_eq', e.nhdsWithin_target_inter (e.mapsTo hx)]
-#align local_homeomorph.eventually_nhds_within LocalHomeomorph.eventually_nhdsWithin
+#align local_homeomorph.eventually_nhds_within PartialHomeomorph.eventually_nhdsWithin
-theorem eventually_nhdsWithin' (e : LocalHomeomorph α β) {x : α} (p : α → Prop) {s : Set α}
+theorem eventually_nhdsWithin' (e : PartialHomeomorph α β) {x : α} (p : α → Prop) {s : Set α}
(hx : x ∈ e.source) : (∀ᶠ y in 𝓝[e.symm ⁻¹' s] e x, p (e.symm y)) ↔ ∀ᶠ x in 𝓝[s] x, p x := by
rw [e.eventually_nhdsWithin _ hx]
refine eventually_congr <|
(eventually_nhdsWithin_of_eventually_nhds <| e.eventually_left_inverse hx).mono fun y hy => ?_
rw [hy]
-#align local_homeomorph.eventually_nhds_within' LocalHomeomorph.eventually_nhdsWithin'
+#align local_homeomorph.eventually_nhds_within' PartialHomeomorph.eventually_nhdsWithin'
/-- This lemma is useful in the manifold library in the case that `e` is a chart. It states that
locally around `e x` the set `e.symm ⁻¹' s` is the same as the set intersected with the target
of `e` and some other neighborhood of `f x` (which will be the source of a chart on `γ`). -/
-theorem preimage_eventuallyEq_target_inter_preimage_inter {e : LocalHomeomorph α β} {s : Set α}
+theorem preimage_eventuallyEq_target_inter_preimage_inter {e : PartialHomeomorph α β} {s : Set α}
{t : Set γ} {x : α} {f : α → γ} (hf : ContinuousWithinAt f s x) (hxe : x ∈ e.source)
(ht : t ∈ 𝓝 (f x)) :
e.symm ⁻¹' s =ᶠ[𝓝 (e x)] (e.target ∩ e.symm ⁻¹' (s ∩ f ⁻¹' t) : Set β) := by
@@ -443,40 +444,40 @@ theorem preimage_eventuallyEq_target_inter_preimage_inter {e : LocalHomeomorph
intro y hy hyu
simp_rw [mem_inter_iff, mem_preimage, mem_inter_iff, e.mapsTo hy, true_and_iff, iff_self_and,
e.left_inv hy, iff_true_intro hyu]
-#align local_homeomorph.preimage_eventually_eq_target_inter_preimage_inter LocalHomeomorph.preimage_eventuallyEq_target_inter_preimage_inter
+#align local_homeomorph.preimage_eventually_eq_target_inter_preimage_inter PartialHomeomorph.preimage_eventuallyEq_target_inter_preimage_inter
theorem isOpen_inter_preimage {s : Set β} (hs : IsOpen s) : IsOpen (e.source ∩ e ⁻¹' s) :=
e.continuousOn.isOpen_inter_preimage e.open_source hs
-#align local_homeomorph.preimage_open_of_open LocalHomeomorph.isOpen_inter_preimage
+#align local_homeomorph.preimage_open_of_open PartialHomeomorph.isOpen_inter_preimage
-/-- A local homeomorphism is an open map on its source. -/
+/-- A partial homeomorphism is an open map on its source. -/
lemma isOpen_image_of_subset_source {s : Set α} (hs : IsOpen s) (hse : s ⊆ e.source) :
IsOpen (e '' s) := by
rw [(image_eq_target_inter_inv_preimage (e := e) hse)]
exact e.continuousOn_invFun.isOpen_inter_preimage e.open_target hs
-/-- The inverse of a local homeomorphism `e` is an open map on `e.target`. -/
+/-- The inverse of a partial homeomorphism `e` is an open map on `e.target`. -/
lemma isOpen_image_symm_of_subset_target {t : Set β} (ht : IsOpen t) (hte : t ⊆ e.target) :
IsOpen (e.symm '' t) :=
isOpen_image_of_subset_source e.symm ht (e.symm_source ▸ hte)
/-!
-### `LocalHomeomorph.IsImage` relation
+### `PartialHomeomorph.IsImage` relation
-We say that `t : Set β` is an image of `s : Set α` under a local homeomorphism `e` if any of the
+We say that `t : Set β` is an image of `s : Set α` under a partial homeomorphism `e` if any of the
following equivalent conditions hold:
* `e '' (e.source ∩ s) = e.target ∩ t`;
* `e.source ∩ e ⁻¹ t = e.source ∩ s`;
* `∀ x ∈ e.source, e x ∈ t ↔ x ∈ s` (this one is used in the definition).
-This definition is a restatement of `LocalEquiv.IsImage` for local homeomorphisms. In this section
-we transfer API about `LocalEquiv.IsImage` to local homeomorphisms and add a few
-`LocalHomeomorph`-specific lemmas like `LocalHomeomorph.IsImage.closure`.
+This definition is a restatement of `LocalEquiv.IsImage` for partial homeomorphisms. In this section
+we transfer API about `LocalEquiv.IsImage` to partial homeomorphisms and add a few
+`PartialHomeomorph`-specific lemmas like `PartialHomeomorph.IsImage.closure`.
-/
-/-- We say that `t : Set β` is an image of `s : Set α` under a local homeomorphism `e` if any of the
-following equivalent conditions hold:
+/-- We say that `t : Set β` is an image of `s : Set α` under a partial homeomorphism `e`
+if any of the following equivalent conditions hold:
* `e '' (e.source ∩ s) = e.target ∩ t`;
* `e.source ∩ e ⁻¹ t = e.source ∩ s`;
@@ -484,7 +485,7 @@ following equivalent conditions hold:
-/
def IsImage (s : Set α) (t : Set β) : Prop :=
∀ ⦃x⦄, x ∈ e.source → (e x ∈ t ↔ x ∈ s)
-#align local_homeomorph.is_image LocalHomeomorph.IsImage
+#align local_homeomorph.is_image PartialHomeomorph.IsImage
namespace IsImage
@@ -492,178 +493,178 @@ variable {e} {s : Set α} {t : Set β} {x : α} {y : β}
theorem toLocalEquiv (h : e.IsImage s t) : e.toLocalEquiv.IsImage s t :=
h
-#align local_homeomorph.is_image.to_local_equiv LocalHomeomorph.IsImage.toLocalEquiv
+#align local_homeomorph.is_image.to_local_equiv PartialHomeomorph.IsImage.toLocalEquiv
theorem apply_mem_iff (h : e.IsImage s t) (hx : x ∈ e.source) : e x ∈ t ↔ x ∈ s :=
h hx
-#align local_homeomorph.is_image.apply_mem_iff LocalHomeomorph.IsImage.apply_mem_iff
+#align local_homeomorph.is_image.apply_mem_iff PartialHomeomorph.IsImage.apply_mem_iff
protected theorem symm (h : e.IsImage s t) : e.symm.IsImage t s :=
h.toLocalEquiv.symm
-#align local_homeomorph.is_image.symm LocalHomeomorph.IsImage.symm
+#align local_homeomorph.is_image.symm PartialHomeomorph.IsImage.symm
theorem symm_apply_mem_iff (h : e.IsImage s t) (hy : y ∈ e.target) : e.symm y ∈ s ↔ y ∈ t :=
h.symm hy
-#align local_homeomorph.is_image.symm_apply_mem_iff LocalHomeomorph.IsImage.symm_apply_mem_iff
+#align local_homeomorph.is_image.symm_apply_mem_iff PartialHomeomorph.IsImage.symm_apply_mem_iff
@[simp]
theorem symm_iff : e.symm.IsImage t s ↔ e.IsImage s t :=
⟨fun h => h.symm, fun h => h.symm⟩
-#align local_homeomorph.is_image.symm_iff LocalHomeomorph.IsImage.symm_iff
+#align local_homeomorph.is_image.symm_iff PartialHomeomorph.IsImage.symm_iff
protected theorem mapsTo (h : e.IsImage s t) : MapsTo e (e.source ∩ s) (e.target ∩ t) :=
h.toLocalEquiv.mapsTo
-#align local_homeomorph.is_image.maps_to LocalHomeomorph.IsImage.mapsTo
+#align local_homeomorph.is_image.maps_to PartialHomeomorph.IsImage.mapsTo
theorem symm_mapsTo (h : e.IsImage s t) : MapsTo e.symm (e.target ∩ t) (e.source ∩ s) :=
h.symm.mapsTo
-#align local_homeomorph.is_image.symm_maps_to LocalHomeomorph.IsImage.symm_mapsTo
+#align local_homeomorph.is_image.symm_maps_to PartialHomeomorph.IsImage.symm_mapsTo
theorem image_eq (h : e.IsImage s t) : e '' (e.source ∩ s) = e.target ∩ t :=
h.toLocalEquiv.image_eq
-#align local_homeomorph.is_image.image_eq LocalHomeomorph.IsImage.image_eq
+#align local_homeomorph.is_image.image_eq PartialHomeomorph.IsImage.image_eq
theorem symm_image_eq (h : e.IsImage s t) : e.symm '' (e.target ∩ t) = e.source ∩ s :=
h.symm.image_eq
-#align local_homeomorph.is_image.symm_image_eq LocalHomeomorph.IsImage.symm_image_eq
+#align local_homeomorph.is_image.symm_image_eq PartialHomeomorph.IsImage.symm_image_eq
theorem iff_preimage_eq : e.IsImage s t ↔ e.source ∩ e ⁻¹' t = e.source ∩ s :=
LocalEquiv.IsImage.iff_preimage_eq
-#align local_homeomorph.is_image.iff_preimage_eq LocalHomeomorph.IsImage.iff_preimage_eq
+#align local_homeomorph.is_image.iff_preimage_eq PartialHomeomorph.IsImage.iff_preimage_eq
alias ⟨preimage_eq, of_preimage_eq⟩ := iff_preimage_eq
-#align local_homeomorph.is_image.preimage_eq LocalHomeomorph.IsImage.preimage_eq
-#align local_homeomorph.is_image.of_preimage_eq LocalHomeomorph.IsImage.of_preimage_eq
+#align local_homeomorph.is_image.preimage_eq PartialHomeomorph.IsImage.preimage_eq
+#align local_homeomorph.is_image.of_preimage_eq PartialHomeomorph.IsImage.of_preimage_eq
theorem iff_symm_preimage_eq : e.IsImage s t ↔ e.target ∩ e.symm ⁻¹' s = e.target ∩ t :=
symm_iff.symm.trans iff_preimage_eq
-#align local_homeomorph.is_image.iff_symm_preimage_eq LocalHomeomorph.IsImage.iff_symm_preimage_eq
+#align local_homeomorph.is_image.iff_symm_preimage_eq PartialHomeomorph.IsImage.iff_symm_preimage_eq
alias ⟨symm_preimage_eq, of_symm_preimage_eq⟩ := iff_symm_preimage_eq
-#align local_homeomorph.is_image.symm_preimage_eq LocalHomeomorph.IsImage.symm_preimage_eq
-#align local_homeomorph.is_image.of_symm_preimage_eq LocalHomeomorph.IsImage.of_symm_preimage_eq
+#align local_homeomorph.is_image.symm_preimage_eq PartialHomeomorph.IsImage.symm_preimage_eq
+#align local_homeomorph.is_image.of_symm_preimage_eq PartialHomeomorph.IsImage.of_symm_preimage_eq
theorem iff_symm_preimage_eq' :
e.IsImage s t ↔ e.target ∩ e.symm ⁻¹' (e.source ∩ s) = e.target ∩ t := by
rw [iff_symm_preimage_eq, ← image_source_inter_eq, ← image_source_inter_eq']
-#align local_homeomorph.is_image.iff_symm_preimage_eq' LocalHomeomorph.IsImage.iff_symm_preimage_eq'
+#align local_homeomorph.is_image.iff_symm_preimage_eq' PartialHomeomorph.IsImage.iff_symm_preimage_eq'
alias ⟨symm_preimage_eq', of_symm_preimage_eq'⟩ := iff_symm_preimage_eq'
-#align local_homeomorph.is_image.symm_preimage_eq' LocalHomeomorph.IsImage.symm_preimage_eq'
-#align local_homeomorph.is_image.of_symm_preimage_eq' LocalHomeomorph.IsImage.of_symm_preimage_eq'
+#align local_homeomorph.is_image.symm_preimage_eq' PartialHomeomorph.IsImage.symm_preimage_eq'
+#align local_homeomorph.is_image.of_symm_preimage_eq' PartialHomeomorph.IsImage.of_symm_preimage_eq'
theorem iff_preimage_eq' : e.IsImage s t ↔ e.source ∩ e ⁻¹' (e.target ∩ t) = e.source ∩ s :=
symm_iff.symm.trans iff_symm_preimage_eq'
-#align local_homeomorph.is_image.iff_preimage_eq' LocalHomeomorph.IsImage.iff_preimage_eq'
+#align local_homeomorph.is_image.iff_preimage_eq' PartialHomeomorph.IsImage.iff_preimage_eq'
alias ⟨preimage_eq', of_preimage_eq'⟩ := iff_preimage_eq'
-#align local_homeomorph.is_image.preimage_eq' LocalHomeomorph.IsImage.preimage_eq'
-#align local_homeomorph.is_image.of_preimage_eq' LocalHomeomorph.IsImage.of_preimage_eq'
+#align local_homeomorph.is_image.preimage_eq' PartialHomeomorph.IsImage.preimage_eq'
+#align local_homeomorph.is_image.of_preimage_eq' PartialHomeomorph.IsImage.of_preimage_eq'
theorem of_image_eq (h : e '' (e.source ∩ s) = e.target ∩ t) : e.IsImage s t :=
LocalEquiv.IsImage.of_image_eq h
-#align local_homeomorph.is_image.of_image_eq LocalHomeomorph.IsImage.of_image_eq
+#align local_homeomorph.is_image.of_image_eq PartialHomeomorph.IsImage.of_image_eq
theorem of_symm_image_eq (h : e.symm '' (e.target ∩ t) = e.source ∩ s) : e.IsImage s t :=
LocalEquiv.IsImage.of_symm_image_eq h
-#align local_homeomorph.is_image.of_symm_image_eq LocalHomeomorph.IsImage.of_symm_image_eq
+#align local_homeomorph.is_image.of_symm_image_eq PartialHomeomorph.IsImage.of_symm_image_eq
protected theorem compl (h : e.IsImage s t) : e.IsImage sᶜ tᶜ := fun _ hx => (h hx).not
-#align local_homeomorph.is_image.compl LocalHomeomorph.IsImage.compl
+#align local_homeomorph.is_image.compl PartialHomeomorph.IsImage.compl
protected theorem inter {s' t'} (h : e.IsImage s t) (h' : e.IsImage s' t') :
e.IsImage (s ∩ s') (t ∩ t') := fun _ hx => (h hx).and (h' hx)
-#align local_homeomorph.is_image.inter LocalHomeomorph.IsImage.inter
+#align local_homeomorph.is_image.inter PartialHomeomorph.IsImage.inter
protected theorem union {s' t'} (h : e.IsImage s t) (h' : e.IsImage s' t') :
e.IsImage (s ∪ s') (t ∪ t') := fun _ hx => (h hx).or (h' hx)
-#align local_homeomorph.is_image.union LocalHomeomorph.IsImage.union
+#align local_homeomorph.is_image.union PartialHomeomorph.IsImage.union
protected theorem diff {s' t'} (h : e.IsImage s t) (h' : e.IsImage s' t') :
e.IsImage (s \ s') (t \ t') :=
h.inter h'.compl
-#align local_homeomorph.is_image.diff LocalHomeomorph.IsImage.diff
+#align local_homeomorph.is_image.diff PartialHomeomorph.IsImage.diff
-theorem leftInvOn_piecewise {e' : LocalHomeomorph α β} [∀ i, Decidable (i ∈ s)]
+theorem leftInvOn_piecewise {e' : PartialHomeomorph α β} [∀ i, Decidable (i ∈ s)]
[∀ i, Decidable (i ∈ t)] (h : e.IsImage s t) (h' : e'.IsImage s t) :
LeftInvOn (t.piecewise e.symm e'.symm) (s.piecewise e e') (s.ite e.source e'.source) :=
h.toLocalEquiv.leftInvOn_piecewise h'
-#align local_homeomorph.is_image.left_inv_on_piecewise LocalHomeomorph.IsImage.leftInvOn_piecewise
+#align local_homeomorph.is_image.left_inv_on_piecewise PartialHomeomorph.IsImage.leftInvOn_piecewise
-theorem inter_eq_of_inter_eq_of_eqOn {e' : LocalHomeomorph α β} (h : e.IsImage s t)
+theorem inter_eq_of_inter_eq_of_eqOn {e' : PartialHomeomorph α β} (h : e.IsImage s t)
(h' : e'.IsImage s t) (hs : e.source ∩ s = e'.source ∩ s) (Heq : EqOn e e' (e.source ∩ s)) :
e.target ∩ t = e'.target ∩ t :=
h.toLocalEquiv.inter_eq_of_inter_eq_of_eqOn h' hs Heq
-#align local_homeomorph.is_image.inter_eq_of_inter_eq_of_eq_on LocalHomeomorph.IsImage.inter_eq_of_inter_eq_of_eqOn
+#align local_homeomorph.is_image.inter_eq_of_inter_eq_of_eq_on PartialHomeomorph.IsImage.inter_eq_of_inter_eq_of_eqOn
-theorem symm_eqOn_of_inter_eq_of_eqOn {e' : LocalHomeomorph α β} (h : e.IsImage s t)
+theorem symm_eqOn_of_inter_eq_of_eqOn {e' : PartialHomeomorph α β} (h : e.IsImage s t)
(hs : e.source ∩ s = e'.source ∩ s) (Heq : EqOn e e' (e.source ∩ s)) :
EqOn e.symm e'.symm (e.target ∩ t) :=
h.toLocalEquiv.symm_eq_on_of_inter_eq_of_eqOn hs Heq
-#align local_homeomorph.is_image.symm_eq_on_of_inter_eq_of_eq_on LocalHomeomorph.IsImage.symm_eqOn_of_inter_eq_of_eqOn
+#align local_homeomorph.is_image.symm_eq_on_of_inter_eq_of_eq_on PartialHomeomorph.IsImage.symm_eqOn_of_inter_eq_of_eqOn
theorem map_nhdsWithin_eq (h : e.IsImage s t) (hx : x ∈ e.source) : map e (𝓝[s] x) = 𝓝[t] e x := by
rw [e.map_nhdsWithin_eq hx, h.image_eq, e.nhdsWithin_target_inter (e.map_source hx)]
-#align local_homeomorph.is_image.map_nhds_within_eq LocalHomeomorph.IsImage.map_nhdsWithin_eq
+#align local_homeomorph.is_image.map_nhds_within_eq PartialHomeomorph.IsImage.map_nhdsWithin_eq
protected theorem closure (h : e.IsImage s t) : e.IsImage (closure s) (closure t) := fun x hx => by
simp only [mem_closure_iff_nhdsWithin_neBot, ← h.map_nhdsWithin_eq hx, map_neBot_iff]
-#align local_homeomorph.is_image.closure LocalHomeomorph.IsImage.closure
+#align local_homeomorph.is_image.closure PartialHomeomorph.IsImage.closure
protected theorem interior (h : e.IsImage s t) : e.IsImage (interior s) (interior t) := by
simpa only [closure_compl, compl_compl] using h.compl.closure.compl
-#align local_homeomorph.is_image.interior LocalHomeomorph.IsImage.interior
+#align local_homeomorph.is_image.interior PartialHomeomorph.IsImage.interior
protected theorem frontier (h : e.IsImage s t) : e.IsImage (frontier s) (frontier t) :=
h.closure.diff h.interior
-#align local_homeomorph.is_image.frontier LocalHomeomorph.IsImage.frontier
+#align local_homeomorph.is_image.frontier PartialHomeomorph.IsImage.frontier
theorem isOpen_iff (h : e.IsImage s t) : IsOpen (e.source ∩ s) ↔ IsOpen (e.target ∩ t) :=
⟨fun hs => h.symm_preimage_eq' ▸ e.symm.isOpen_inter_preimage hs, fun hs =>
h.preimage_eq' ▸ e.isOpen_inter_preimage hs⟩
-#align local_homeomorph.is_image.is_open_iff LocalHomeomorph.IsImage.isOpen_iff
+#align local_homeomorph.is_image.is_open_iff PartialHomeomorph.IsImage.isOpen_iff
-/-- Restrict a `LocalHomeomorph` to a pair of corresponding open sets. -/
+/-- Restrict a `PartialHomeomorph` to a pair of corresponding open sets. -/
@[simps toLocalEquiv]
-def restr (h : e.IsImage s t) (hs : IsOpen (e.source ∩ s)) : LocalHomeomorph α β where
+def restr (h : e.IsImage s t) (hs : IsOpen (e.source ∩ s)) : PartialHomeomorph α β where
toLocalEquiv := h.toLocalEquiv.restr
open_source := hs
open_target := h.isOpen_iff.1 hs
continuousOn_toFun := e.continuousOn.mono (inter_subset_left _ _)
continuousOn_invFun := e.symm.continuousOn.mono (inter_subset_left _ _)
-#align local_homeomorph.is_image.restr LocalHomeomorph.IsImage.restr
+#align local_homeomorph.is_image.restr PartialHomeomorph.IsImage.restr
end IsImage
theorem isImage_source_target : e.IsImage e.source e.target :=
e.toLocalEquiv.isImage_source_target
-#align local_homeomorph.is_image_source_target LocalHomeomorph.isImage_source_target
+#align local_homeomorph.is_image_source_target PartialHomeomorph.isImage_source_target
-theorem isImage_source_target_of_disjoint (e' : LocalHomeomorph α β)
+theorem isImage_source_target_of_disjoint (e' : PartialHomeomorph α β)
(hs : Disjoint e.source e'.source) (ht : Disjoint e.target e'.target) :
e.IsImage e'.source e'.target :=
e.toLocalEquiv.isImage_source_target_of_disjoint e'.toLocalEquiv hs ht
-#align local_homeomorph.is_image_source_target_of_disjoint LocalHomeomorph.isImage_source_target_of_disjoint
+#align local_homeomorph.is_image_source_target_of_disjoint PartialHomeomorph.isImage_source_target_of_disjoint
-/-- Preimage of interior or interior of preimage coincide for local homeomorphisms, when restricted
-to the source. -/
+/-- Preimage of interior or interior of preimage coincide for partial homeomorphisms,
+when restricted to the source. -/
theorem preimage_interior (s : Set β) :
e.source ∩ e ⁻¹' interior s = e.source ∩ interior (e ⁻¹' s) :=
(IsImage.of_preimage_eq rfl).interior.preimage_eq
-#align local_homeomorph.preimage_interior LocalHomeomorph.preimage_interior
+#align local_homeomorph.preimage_interior PartialHomeomorph.preimage_interior
theorem preimage_closure (s : Set β) : e.source ∩ e ⁻¹' closure s = e.source ∩ closure (e ⁻¹' s) :=
(IsImage.of_preimage_eq rfl).closure.preimage_eq
-#align local_homeomorph.preimage_closure LocalHomeomorph.preimage_closure
+#align local_homeomorph.preimage_closure PartialHomeomorph.preimage_closure
theorem preimage_frontier (s : Set β) :
e.source ∩ e ⁻¹' frontier s = e.source ∩ frontier (e ⁻¹' s) :=
(IsImage.of_preimage_eq rfl).frontier.preimage_eq
-#align local_homeomorph.preimage_frontier LocalHomeomorph.preimage_frontier
+#align local_homeomorph.preimage_frontier PartialHomeomorph.preimage_frontier
theorem isOpen_inter_preimage_symm {s : Set α} (hs : IsOpen s) : IsOpen (e.target ∩ e.symm ⁻¹' s) :=
e.symm.continuousOn.isOpen_inter_preimage e.open_target hs
-#align local_homeomorph.preimage_open_of_open_symm LocalHomeomorph.isOpen_inter_preimage_symm
+#align local_homeomorph.preimage_open_of_open_symm PartialHomeomorph.isOpen_inter_preimage_symm
/-- The image of an open set in the source is open. -/
theorem image_isOpen_of_isOpen {s : Set α} (hs : IsOpen s) (h : s ⊆ e.source) :
@@ -671,102 +672,102 @@ theorem image_isOpen_of_isOpen {s : Set α} (hs : IsOpen s) (h : s ⊆ e.source)
have : e '' s = e.target ∩ e.symm ⁻¹' s := e.toLocalEquiv.image_eq_target_inter_inv_preimage h
rw [this]
exact e.continuousOn_symm.isOpen_inter_preimage e.open_target hs
-#align local_homeomorph.image_open_of_open LocalHomeomorph.image_isOpen_of_isOpen
+#align local_homeomorph.image_open_of_open PartialHomeomorph.image_isOpen_of_isOpen
/-- The image of the restriction of an open set to the source is open. -/
theorem image_isOpen_of_isOpen' {s : Set α} (hs : IsOpen s) : IsOpen (e '' (e.source ∩ s)) :=
image_isOpen_of_isOpen _ (IsOpen.inter e.open_source hs) (inter_subset_left _ _)
-#align local_homeomorph.image_open_of_open' LocalHomeomorph.image_isOpen_of_isOpen'
+#align local_homeomorph.image_open_of_open' PartialHomeomorph.image_isOpen_of_isOpen'
-/-- A `LocalEquiv` with continuous open forward map and an open source is a `LocalHomeomorph`. -/
+/-- A `LocalEquiv` with continuous open forward map and an open source is a `PartialHomeomorph`. -/
def ofContinuousOpenRestrict (e : LocalEquiv α β) (hc : ContinuousOn e e.source)
- (ho : IsOpenMap (e.source.restrict e)) (hs : IsOpen e.source) : LocalHomeomorph α β where
+ (ho : IsOpenMap (e.source.restrict e)) (hs : IsOpen e.source) : PartialHomeomorph α β where
toLocalEquiv := e
open_source := hs
open_target := by simpa only [range_restrict, e.image_source_eq_target] using ho.isOpen_range
continuousOn_toFun := hc
continuousOn_invFun := e.image_source_eq_target ▸ ho.continuousOn_image_of_leftInvOn e.leftInvOn
-#align local_homeomorph.of_continuous_open_restrict LocalHomeomorph.ofContinuousOpenRestrict
+#align local_homeomorph.of_continuous_open_restrict PartialHomeomorph.ofContinuousOpenRestrict
-/-- A `LocalEquiv` with continuous open forward map and an open source is a `LocalHomeomorph`. -/
+/-- A `LocalEquiv` with continuous open forward map and an open source is a `PartialHomeomorph`. -/
def ofContinuousOpen (e : LocalEquiv α β) (hc : ContinuousOn e e.source) (ho : IsOpenMap e)
- (hs : IsOpen e.source) : LocalHomeomorph α β :=
+ (hs : IsOpen e.source) : PartialHomeomorph α β :=
ofContinuousOpenRestrict e hc (ho.restrict hs) hs
-#align local_homeomorph.of_continuous_open LocalHomeomorph.ofContinuousOpen
+#align local_homeomorph.of_continuous_open PartialHomeomorph.ofContinuousOpen
-/-- Restricting a local homeomorphism `e` to `e.source ∩ s` when `s` is open. This is sometimes hard
-to use because of the openness assumption, but it has the advantage that when it can
-be used then its local_equiv is defeq to local_equiv.restr -/
-protected def restrOpen (s : Set α) (hs : IsOpen s) : LocalHomeomorph α β :=
+/-- Restricting a partial homeomorphism `e` to `e.source ∩ s` when `s` is open.
+This is sometimes hard to use because of the openness assumption, but it has the advantage that
+when it can be used then its `LocalEquiv` is defeq to `LocalEquiv.restr`. -/
+protected def restrOpen (s : Set α) (hs : IsOpen s) : PartialHomeomorph α β :=
(@IsImage.of_symm_preimage_eq α β _ _ e s (e.symm ⁻¹' s) rfl).restr
(IsOpen.inter e.open_source hs)
-#align local_homeomorph.restr_open LocalHomeomorph.restrOpen
+#align local_homeomorph.restr_open PartialHomeomorph.restrOpen
@[simp, mfld_simps]
theorem restrOpen_toLocalEquiv (s : Set α) (hs : IsOpen s) :
(e.restrOpen s hs).toLocalEquiv = e.toLocalEquiv.restr s :=
rfl
-#align local_homeomorph.restr_open_to_local_equiv LocalHomeomorph.restrOpen_toLocalEquiv
+#align local_homeomorph.restr_open_to_local_equiv PartialHomeomorph.restrOpen_toLocalEquiv
-- Already simp via `LocalEquiv`
theorem restrOpen_source (s : Set α) (hs : IsOpen s) : (e.restrOpen s hs).source = e.source ∩ s :=
rfl
-#align local_homeomorph.restr_open_source LocalHomeomorph.restrOpen_source
+#align local_homeomorph.restr_open_source PartialHomeomorph.restrOpen_source
-/-- Restricting a local homeomorphism `e` to `e.source ∩ interior s`. We use the interior to make
-sure that the restriction is well defined whatever the set s, since local homeomorphisms are by
+/-- Restricting a partial homeomorphism `e` to `e.source ∩ interior s`. We use the interior to make
+sure that the restriction is well defined whatever the set s, since partial homeomorphisms are by
definition defined on open sets. In applications where `s` is open, this coincides with the
restriction of local equivalences -/
@[simps! (config := mfld_cfg) apply symm_apply, simps! (config := .lemmasOnly) source target]
-protected def restr (s : Set α) : LocalHomeomorph α β :=
+protected def restr (s : Set α) : PartialHomeomorph α β :=
e.restrOpen (interior s) isOpen_interior
-#align local_homeomorph.restr LocalHomeomorph.restr
+#align local_homeomorph.restr PartialHomeomorph.restr
@[simp, mfld_simps]
theorem restr_toLocalEquiv (s : Set α) :
(e.restr s).toLocalEquiv = e.toLocalEquiv.restr (interior s) :=
rfl
-#align local_homeomorph.restr_to_local_equiv LocalHomeomorph.restr_toLocalEquiv
+#align local_homeomorph.restr_to_local_equiv PartialHomeomorph.restr_toLocalEquiv
theorem restr_source' (s : Set α) (hs : IsOpen s) : (e.restr s).source = e.source ∩ s := by
rw [e.restr_source, hs.interior_eq]
-#align local_homeomorph.restr_source' LocalHomeomorph.restr_source'
+#align local_homeomorph.restr_source' PartialHomeomorph.restr_source'
theorem restr_toLocalEquiv' (s : Set α) (hs : IsOpen s) :
(e.restr s).toLocalEquiv = e.toLocalEquiv.restr s := by
rw [e.restr_toLocalEquiv, hs.interior_eq]
-#align local_homeomorph.restr_to_local_equiv' LocalHomeomorph.restr_toLocalEquiv'
+#align local_homeomorph.restr_to_local_equiv' PartialHomeomorph.restr_toLocalEquiv'
-theorem restr_eq_of_source_subset {e : LocalHomeomorph α β} {s : Set α} (h : e.source ⊆ s) :
+theorem restr_eq_of_source_subset {e : PartialHomeomorph α β} {s : Set α} (h : e.source ⊆ s) :
e.restr s = e :=
toLocalEquiv_injective <| LocalEquiv.restr_eq_of_source_subset <| interior_maximal h e.open_source
-#align local_homeomorph.restr_eq_of_source_subset LocalHomeomorph.restr_eq_of_source_subset
+#align local_homeomorph.restr_eq_of_source_subset PartialHomeomorph.restr_eq_of_source_subset
@[simp, mfld_simps]
-theorem restr_univ {e : LocalHomeomorph α β} : e.restr univ = e :=
+theorem restr_univ {e : PartialHomeomorph α β} : e.restr univ = e :=
restr_eq_of_source_subset (subset_univ _)
-#align local_homeomorph.restr_univ LocalHomeomorph.restr_univ
+#align local_homeomorph.restr_univ PartialHomeomorph.restr_univ
theorem restr_source_inter (s : Set α) : e.restr (e.source ∩ s) = e.restr s := by
- refine' LocalHomeomorph.ext _ _ (fun x => rfl) (fun x => rfl) _
+ refine' PartialHomeomorph.ext _ _ (fun x => rfl) (fun x => rfl) _
simp [e.open_source.interior_eq, ← inter_assoc]
-#align local_homeomorph.restr_source_inter LocalHomeomorph.restr_source_inter
+#align local_homeomorph.restr_source_inter PartialHomeomorph.restr_source_inter
-/-- The identity on the whole space as a local homeomorphism. -/
+/-- The identity on the whole space as a partial homeomorphism. -/
@[simps! (config := mfld_cfg) apply, simps! (config := .lemmasOnly) source target]
-protected def refl (α : Type*) [TopologicalSpace α] : LocalHomeomorph α α :=
- (Homeomorph.refl α).toLocalHomeomorph
-#align local_homeomorph.refl LocalHomeomorph.refl
+protected def refl (α : Type*) [TopologicalSpace α] : PartialHomeomorph α α :=
+ (Homeomorph.refl α).toPartialHomeomorph
+#align local_homeomorph.refl PartialHomeomorph.refl
@[simp, mfld_simps]
-theorem refl_localEquiv : (LocalHomeomorph.refl α).toLocalEquiv = LocalEquiv.refl α :=
+theorem refl_localEquiv : (PartialHomeomorph.refl α).toLocalEquiv = LocalEquiv.refl α :=
rfl
-#align local_homeomorph.refl_local_equiv LocalHomeomorph.refl_localEquiv
+#align local_homeomorph.refl_local_equiv PartialHomeomorph.refl_localEquiv
@[simp, mfld_simps]
-theorem refl_symm : (LocalHomeomorph.refl α).symm = LocalHomeomorph.refl α :=
+theorem refl_symm : (PartialHomeomorph.refl α).symm = PartialHomeomorph.refl α :=
rfl
-#align local_homeomorph.refl_symm LocalHomeomorph.refl_symm
+#align local_homeomorph.refl_symm PartialHomeomorph.refl_symm
section
@@ -774,238 +775,238 @@ variable {s : Set α} (hs : IsOpen s)
/-- The identity local equiv on a set `s` -/
@[simps! (config := mfld_cfg) apply, simps! (config := .lemmasOnly) source target]
-def ofSet (s : Set α) (hs : IsOpen s) : LocalHomeomorph α α where
+def ofSet (s : Set α) (hs : IsOpen s) : PartialHomeomorph α α where
toLocalEquiv := LocalEquiv.ofSet s
open_source := hs
open_target := hs
continuousOn_toFun := continuous_id.continuousOn
continuousOn_invFun := continuous_id.continuousOn
-#align local_homeomorph.of_set LocalHomeomorph.ofSet
+#align local_homeomorph.of_set PartialHomeomorph.ofSet
@[simp, mfld_simps]
theorem ofSet_toLocalEquiv : (ofSet s hs).toLocalEquiv = LocalEquiv.ofSet s :=
rfl
-#align local_homeomorph.of_set_to_local_equiv LocalHomeomorph.ofSet_toLocalEquiv
+#align local_homeomorph.of_set_to_local_equiv PartialHomeomorph.ofSet_toLocalEquiv
@[simp, mfld_simps]
theorem ofSet_symm : (ofSet s hs).symm = ofSet s hs :=
rfl
-#align local_homeomorph.of_set_symm LocalHomeomorph.ofSet_symm
+#align local_homeomorph.of_set_symm PartialHomeomorph.ofSet_symm
@[simp, mfld_simps]
-theorem ofSet_univ_eq_refl : ofSet univ isOpen_univ = LocalHomeomorph.refl α := by ext <;> simp
-#align local_homeomorph.of_set_univ_eq_refl LocalHomeomorph.ofSet_univ_eq_refl
+theorem ofSet_univ_eq_refl : ofSet univ isOpen_univ = PartialHomeomorph.refl α := by ext <;> simp
+#align local_homeomorph.of_set_univ_eq_refl PartialHomeomorph.ofSet_univ_eq_refl
end
-/-- Composition of two local homeomorphisms when the target of the first and the source of
+/-- Composition of two partial homeomorphisms when the target of the first and the source of
the second coincide. -/
@[simps! apply symm_apply toLocalEquiv, simps! (config := .lemmasOnly) source target]
-protected def trans' (h : e.target = e'.source) : LocalHomeomorph α γ where
+protected def trans' (h : e.target = e'.source) : PartialHomeomorph α γ where
toLocalEquiv := LocalEquiv.trans' e.toLocalEquiv e'.toLocalEquiv h
open_source := e.open_source
open_target := e'.open_target
continuousOn_toFun := e'.continuousOn.comp e.continuousOn <| h ▸ e.mapsTo
continuousOn_invFun := e.continuousOn_symm.comp e'.continuousOn_symm <| h.symm ▸ e'.symm_mapsTo
-#align local_homeomorph.trans' LocalHomeomorph.trans'
+#align local_homeomorph.trans' PartialHomeomorph.trans'
-/-- Composing two local homeomorphisms, by restricting to the maximal domain where their
+/-- Composing two partial homeomorphisms, by restricting to the maximal domain where their
composition is well defined. -/
-protected def trans : LocalHomeomorph α γ :=
- LocalHomeomorph.trans' (e.symm.restrOpen e'.source e'.open_source).symm
+protected def trans : PartialHomeomorph α γ :=
+ PartialHomeomorph.trans' (e.symm.restrOpen e'.source e'.open_source).symm
(e'.restrOpen e.target e.open_target) (by simp [inter_comm])
-#align local_homeomorph.trans LocalHomeomorph.trans
+#align local_homeomorph.trans PartialHomeomorph.trans
@[simp, mfld_simps]
theorem trans_toLocalEquiv : (e.trans e').toLocalEquiv = e.toLocalEquiv.trans e'.toLocalEquiv :=
rfl
-#align local_homeomorph.trans_to_local_equiv LocalHomeomorph.trans_toLocalEquiv
+#align local_homeomorph.trans_to_local_equiv PartialHomeomorph.trans_toLocalEquiv
@[simp, mfld_simps]
theorem coe_trans : (e.trans e' : α → γ) = e' ∘ e :=
rfl
-#align local_homeomorph.coe_trans LocalHomeomorph.coe_trans
+#align local_homeomorph.coe_trans PartialHomeomorph.coe_trans
@[simp, mfld_simps]
theorem coe_trans_symm : ((e.trans e').symm : γ → α) = e.symm ∘ e'.symm :=
rfl
-#align local_homeomorph.coe_trans_symm LocalHomeomorph.coe_trans_symm
+#align local_homeomorph.coe_trans_symm PartialHomeomorph.coe_trans_symm
theorem trans_apply {x : α} : (e.trans e') x = e' (e x) :=
rfl
-#align local_homeomorph.trans_apply LocalHomeomorph.trans_apply
+#align local_homeomorph.trans_apply PartialHomeomorph.trans_apply
theorem trans_symm_eq_symm_trans_symm : (e.trans e').symm = e'.symm.trans e.symm := rfl
-#align local_homeomorph.trans_symm_eq_symm_trans_symm LocalHomeomorph.trans_symm_eq_symm_trans_symm
+#align local_homeomorph.trans_symm_eq_symm_trans_symm PartialHomeomorph.trans_symm_eq_symm_trans_symm
/- This could be considered as a simp lemma, but there are many situations where it makes something
simple into something more complicated. -/
theorem trans_source : (e.trans e').source = e.source ∩ e ⁻¹' e'.source :=
LocalEquiv.trans_source e.toLocalEquiv e'.toLocalEquiv
-#align local_homeomorph.trans_source LocalHomeomorph.trans_source
+#align local_homeomorph.trans_source PartialHomeomorph.trans_source
theorem trans_source' : (e.trans e').source = e.source ∩ e ⁻¹' (e.target ∩ e'.source) :=
LocalEquiv.trans_source' e.toLocalEquiv e'.toLocalEquiv
-#align local_homeomorph.trans_source' LocalHomeomorph.trans_source'
+#align local_homeomorph.trans_source' PartialHomeomorph.trans_source'
theorem trans_source'' : (e.trans e').source = e.symm '' (e.target ∩ e'.source) :=
LocalEquiv.trans_source'' e.toLocalEquiv e'.toLocalEquiv
-#align local_homeomorph.trans_source'' LocalHomeomorph.trans_source''
+#align local_homeomorph.trans_source'' PartialHomeomorph.trans_source''
theorem image_trans_source : e '' (e.trans e').source = e.target ∩ e'.source :=
LocalEquiv.image_trans_source e.toLocalEquiv e'.toLocalEquiv
-#align local_homeomorph.image_trans_source LocalHomeomorph.image_trans_source
+#align local_homeomorph.image_trans_source PartialHomeomorph.image_trans_source
theorem trans_target : (e.trans e').target = e'.target ∩ e'.symm ⁻¹' e.target :=
rfl
-#align local_homeomorph.trans_target LocalHomeomorph.trans_target
+#align local_homeomorph.trans_target PartialHomeomorph.trans_target
theorem trans_target' : (e.trans e').target = e'.target ∩ e'.symm ⁻¹' (e'.source ∩ e.target) :=
trans_source' e'.symm e.symm
-#align local_homeomorph.trans_target' LocalHomeomorph.trans_target'
+#align local_homeomorph.trans_target' PartialHomeomorph.trans_target'
theorem trans_target'' : (e.trans e').target = e' '' (e'.source ∩ e.target) :=
trans_source'' e'.symm e.symm
-#align local_homeomorph.trans_target'' LocalHomeomorph.trans_target''
+#align local_homeomorph.trans_target'' PartialHomeomorph.trans_target''
theorem inv_image_trans_target : e'.symm '' (e.trans e').target = e'.source ∩ e.target :=
image_trans_source e'.symm e.symm
-#align local_homeomorph.inv_image_trans_target LocalHomeomorph.inv_image_trans_target
+#align local_homeomorph.inv_image_trans_target PartialHomeomorph.inv_image_trans_target
-theorem trans_assoc (e'' : LocalHomeomorph γ δ) :
+theorem trans_assoc (e'' : PartialHomeomorph γ δ) :
(e.trans e').trans e'' = e.trans (e'.trans e'') :=
toLocalEquiv_injective <| e.1.trans_assoc _ _
-#align local_homeomorph.trans_assoc LocalHomeomorph.trans_assoc
+#align local_homeomorph.trans_assoc PartialHomeomorph.trans_assoc
@[simp, mfld_simps]
-theorem trans_refl : e.trans (LocalHomeomorph.refl β) = e :=
+theorem trans_refl : e.trans (PartialHomeomorph.refl β) = e :=
toLocalEquiv_injective e.1.trans_refl
-#align local_homeomorph.trans_refl LocalHomeomorph.trans_refl
+#align local_homeomorph.trans_refl PartialHomeomorph.trans_refl
@[simp, mfld_simps]
-theorem refl_trans : (LocalHomeomorph.refl α).trans e = e :=
+theorem refl_trans : (PartialHomeomorph.refl α).trans e = e :=
toLocalEquiv_injective e.1.refl_trans
-#align local_homeomorph.refl_trans LocalHomeomorph.refl_trans
+#align local_homeomorph.refl_trans PartialHomeomorph.refl_trans
theorem trans_ofSet {s : Set β} (hs : IsOpen s) : e.trans (ofSet s hs) = e.restr (e ⁻¹' s) :=
- LocalHomeomorph.ext _ _ (fun _ => rfl) (fun _ => rfl) <| by
+ PartialHomeomorph.ext _ _ (fun _ => rfl) (fun _ => rfl) <| by
rw [trans_source, restr_source, ofSet_source, ← preimage_interior, hs.interior_eq]
-#align local_homeomorph.trans_of_set LocalHomeomorph.trans_ofSet
+#align local_homeomorph.trans_of_set PartialHomeomorph.trans_ofSet
theorem trans_of_set' {s : Set β} (hs : IsOpen s) :
e.trans (ofSet s hs) = e.restr (e.source ∩ e ⁻¹' s) := by rw [trans_ofSet, restr_source_inter]
-#align local_homeomorph.trans_of_set' LocalHomeomorph.trans_of_set'
+#align local_homeomorph.trans_of_set' PartialHomeomorph.trans_of_set'
theorem ofSet_trans {s : Set α} (hs : IsOpen s) : (ofSet s hs).trans e = e.restr s :=
- LocalHomeomorph.ext _ _ (fun x => rfl) (fun x => rfl) <| by simp [hs.interior_eq, inter_comm]
-#align local_homeomorph.of_set_trans LocalHomeomorph.ofSet_trans
+ PartialHomeomorph.ext _ _ (fun x => rfl) (fun x => rfl) <| by simp [hs.interior_eq, inter_comm]
+#align local_homeomorph.of_set_trans PartialHomeomorph.ofSet_trans
theorem ofSet_trans' {s : Set α} (hs : IsOpen s) :
(ofSet s hs).trans e = e.restr (e.source ∩ s) := by
rw [ofSet_trans, restr_source_inter]
-#align local_homeomorph.of_set_trans' LocalHomeomorph.ofSet_trans'
+#align local_homeomorph.of_set_trans' PartialHomeomorph.ofSet_trans'
@[simp, mfld_simps]
theorem ofSet_trans_ofSet {s : Set α} (hs : IsOpen s) {s' : Set α} (hs' : IsOpen s') :
(ofSet s hs).trans (ofSet s' hs') = ofSet (s ∩ s') (IsOpen.inter hs hs') := by
rw [(ofSet s hs).trans_ofSet hs']
ext <;> simp [hs'.interior_eq]
-#align local_homeomorph.of_set_trans_of_set LocalHomeomorph.ofSet_trans_ofSet
+#align local_homeomorph.of_set_trans_of_set PartialHomeomorph.ofSet_trans_ofSet
theorem restr_trans (s : Set α) : (e.restr s).trans e' = (e.trans e').restr s :=
toLocalEquiv_injective <| LocalEquiv.restr_trans e.toLocalEquiv e'.toLocalEquiv (interior s)
-#align local_homeomorph.restr_trans LocalHomeomorph.restr_trans
+#align local_homeomorph.restr_trans PartialHomeomorph.restr_trans
-/-- Postcompose a local homeomorphism with a homeomorphism.
+/-- Postcompose a partial homeomorphism with a homeomorphism.
We modify the source and target to have better definitional behavior. -/
@[simps! (config := .asFn)]
-def transHomeomorph (e' : β ≃ₜ γ) : LocalHomeomorph α γ where
+def transHomeomorph (e' : β ≃ₜ γ) : PartialHomeomorph α γ where
toLocalEquiv := e.toLocalEquiv.transEquiv e'.toEquiv
open_source := e.open_source
open_target := e.open_target.preimage e'.symm.continuous
continuousOn_toFun := e'.continuous.comp_continuousOn e.continuousOn
continuousOn_invFun := e.symm.continuousOn.comp e'.symm.continuous.continuousOn fun _ => id
-#align local_homeomorph.trans_homeomorph LocalHomeomorph.transHomeomorph
+#align local_homeomorph.trans_homeomorph PartialHomeomorph.transHomeomorph
theorem transHomeomorph_eq_trans (e' : β ≃ₜ γ) :
- e.transHomeomorph e' = e.trans e'.toLocalHomeomorph :=
+ e.transHomeomorph e' = e.trans e'.toPartialHomeomorph :=
toLocalEquiv_injective <| LocalEquiv.transEquiv_eq_trans _ _
-#align local_homeomorph.trans_equiv_eq_trans LocalHomeomorph.transHomeomorph_eq_trans
+#align local_homeomorph.trans_equiv_eq_trans PartialHomeomorph.transHomeomorph_eq_trans
-/-- Precompose a local homeomorphism with a homeomorphism.
+/-- Precompose a partial homeomorphism with a homeomorphism.
We modify the source and target to have better definitional behavior. -/
@[simps! (config := .asFn)]
-def _root_.Homeomorph.transLocalHomeomorph (e : α ≃ₜ β) : LocalHomeomorph α γ where
+def _root_.Homeomorph.transPartialHomeomorph (e : α ≃ₜ β) : PartialHomeomorph α γ where
toLocalEquiv := e.toEquiv.transLocalEquiv e'.toLocalEquiv
open_source := e'.open_source.preimage e.continuous
open_target := e'.open_target
continuousOn_toFun := e'.continuousOn.comp e.continuous.continuousOn fun _ => id
continuousOn_invFun := e.symm.continuous.comp_continuousOn e'.symm.continuousOn
-#align homeomorph.trans_local_homeomorph Homeomorph.transLocalHomeomorph
+#align homeomorph.trans_local_homeomorph Homeomorph.transPartialHomeomorph
-theorem _root_.Homeomorph.transLocalHomeomorph_eq_trans (e : α ≃ₜ β) :
- e.transLocalHomeomorph e' = e.toLocalHomeomorph.trans e' :=
+theorem _root_.Homeomorph.transPartialHomeomorph_eq_trans (e : α ≃ₜ β) :
+ e.transPartialHomeomorph e' = e.toPartialHomeomorph.trans e' :=
toLocalEquiv_injective <| Equiv.transLocalEquiv_eq_trans _ _
-#align homeomorph.trans_local_homeomorph_eq_trans Homeomorph.transLocalHomeomorph_eq_trans
+#align homeomorph.trans_local_homeomorph_eq_trans Homeomorph.transPartialHomeomorph_eq_trans
/-- `EqOnSource e e'` means that `e` and `e'` have the same source, and coincide there. They
-should really be considered the same local equiv. -/
-def EqOnSource (e e' : LocalHomeomorph α β) : Prop :=
+should really be considered the same local equivalence. -/
+def EqOnSource (e e' : PartialHomeomorph α β) : Prop :=
e.source = e'.source ∧ EqOn e e' e.source
-#align local_homeomorph.eq_on_source LocalHomeomorph.EqOnSource
+#align local_homeomorph.eq_on_source PartialHomeomorph.EqOnSource
-theorem eqOnSource_iff (e e' : LocalHomeomorph α β) :
+theorem eqOnSource_iff (e e' : PartialHomeomorph α β) :
EqOnSource e e' ↔ LocalEquiv.EqOnSource e.toLocalEquiv e'.toLocalEquiv :=
Iff.rfl
-#align local_homeomorph.eq_on_source_iff LocalHomeomorph.eqOnSource_iff
+#align local_homeomorph.eq_on_source_iff PartialHomeomorph.eqOnSource_iff
/-- `EqOnSource` is an equivalence relation. -/
-instance eqOnSourceSetoid : Setoid (LocalHomeomorph α β) :=
+instance eqOnSourceSetoid : Setoid (PartialHomeomorph α β) :=
{ LocalEquiv.eqOnSourceSetoid.comap toLocalEquiv with r := EqOnSource }
theorem eqOnSource_refl : e ≈ e := Setoid.refl _
-#align local_homeomorph.eq_on_source_refl LocalHomeomorph.eqOnSource_refl
+#align local_homeomorph.eq_on_source_refl PartialHomeomorph.eqOnSource_refl
-/-- If two local homeomorphisms are equivalent, so are their inverses. -/
-theorem EqOnSource.symm' {e e' : LocalHomeomorph α β} (h : e ≈ e') : e.symm ≈ e'.symm :=
+/-- If two partial homeomorphisms are equivalent, so are their inverses. -/
+theorem EqOnSource.symm' {e e' : PartialHomeomorph α β} (h : e ≈ e') : e.symm ≈ e'.symm :=
LocalEquiv.EqOnSource.symm' h
-#align local_homeomorph.eq_on_source.symm' LocalHomeomorph.EqOnSource.symm'
+#align local_homeomorph.eq_on_source.symm' PartialHomeomorph.EqOnSource.symm'
-/-- Two equivalent local homeomorphisms have the same source. -/
-theorem EqOnSource.source_eq {e e' : LocalHomeomorph α β} (h : e ≈ e') : e.source = e'.source :=
+/-- Two equivalent partial homeomorphisms have the same source. -/
+theorem EqOnSource.source_eq {e e' : PartialHomeomorph α β} (h : e ≈ e') : e.source = e'.source :=
h.1
-#align local_homeomorph.eq_on_source.source_eq LocalHomeomorph.EqOnSource.source_eq
+#align local_homeomorph.eq_on_source.source_eq PartialHomeomorph.EqOnSource.source_eq
-/-- Two equivalent local homeomorphisms have the same target. -/
-theorem EqOnSource.target_eq {e e' : LocalHomeomorph α β} (h : e ≈ e') : e.target = e'.target :=
+/-- Two equivalent partial homeomorphisms have the same target. -/
+theorem EqOnSource.target_eq {e e' : PartialHomeomorph α β} (h : e ≈ e') : e.target = e'.target :=
h.symm'.1
-#align local_homeomorph.eq_on_source.target_eq LocalHomeomorph.EqOnSource.target_eq
+#align local_homeomorph.eq_on_source.target_eq PartialHomeomorph.EqOnSource.target_eq
-/-- Two equivalent local homeomorphisms have coinciding `toFun` on the source -/
-theorem EqOnSource.eqOn {e e' : LocalHomeomorph α β} (h : e ≈ e') : EqOn e e' e.source :=
+/-- Two equivalent partial homeomorphisms have coinciding `toFun` on the source -/
+theorem EqOnSource.eqOn {e e' : PartialHomeomorph α β} (h : e ≈ e') : EqOn e e' e.source :=
h.2
-#align local_homeomorph.eq_on_source.eq_on LocalHomeomorph.EqOnSource.eqOn
+#align local_homeomorph.eq_on_source.eq_on PartialHomeomorph.EqOnSource.eqOn
-/-- Two equivalent local homeomorphisms have coinciding `invFun` on the target -/
-theorem EqOnSource.symm_eqOn_target {e e' : LocalHomeomorph α β} (h : e ≈ e') :
+/-- Two equivalent partial homeomorphisms have coinciding `invFun` on the target -/
+theorem EqOnSource.symm_eqOn_target {e e' : PartialHomeomorph α β} (h : e ≈ e') :
EqOn e.symm e'.symm e.target :=
h.symm'.2
-#align local_homeomorph.eq_on_source.symm_eq_on_target LocalHomeomorph.EqOnSource.symm_eqOn_target
+#align local_homeomorph.eq_on_source.symm_eq_on_target PartialHomeomorph.EqOnSource.symm_eqOn_target
-/-- Composition of local homeomorphisms respects equivalence -/
-theorem EqOnSource.trans' {e e' : LocalHomeomorph α β} {f f' : LocalHomeomorph β γ} (he : e ≈ e')
- (hf : f ≈ f') : e.trans f ≈ e'.trans f' :=
+/-- Composition of partial homeomorphisms respects equivalence. -/
+theorem EqOnSource.trans' {e e' : PartialHomeomorph α β} {f f' : PartialHomeomorph β γ}
+ (he : e ≈ e') (hf : f ≈ f') : e.trans f ≈ e'.trans f' :=
LocalEquiv.EqOnSource.trans' he hf
-#align local_homeomorph.eq_on_source.trans' LocalHomeomorph.EqOnSource.trans'
+#align local_homeomorph.eq_on_source.trans' PartialHomeomorph.EqOnSource.trans'
-/-- Restriction of local homeomorphisms respects equivalence -/
-theorem EqOnSource.restr {e e' : LocalHomeomorph α β} (he : e ≈ e') (s : Set α) :
+/-- Restriction of partial homeomorphisms respects equivalence -/
+theorem EqOnSource.restr {e e' : PartialHomeomorph α β} (he : e ≈ e') (s : Set α) :
e.restr s ≈ e'.restr s :=
LocalEquiv.EqOnSource.restr he _
-#align local_homeomorph.eq_on_source.restr LocalHomeomorph.EqOnSource.restr
+#align local_homeomorph.eq_on_source.restr PartialHomeomorph.EqOnSource.restr
-/- Two equivalent local homeomorphisms are equal when the source and target are `univ`. -/
-theorem Set.EqOn.restr_eqOn_source {e e' : LocalHomeomorph α β}
+/- Two equivalent partial homeomorphisms are equal when the source and target are `univ`. -/
+theorem Set.EqOn.restr_eqOn_source {e e' : PartialHomeomorph α β}
(h : EqOn e e' (e.source ∩ e'.source)) : e.restr e'.source ≈ e'.restr e.source := by
constructor
· rw [e'.restr_source' _ e.open_source]
@@ -1013,90 +1014,90 @@ theorem Set.EqOn.restr_eqOn_source {e e' : LocalHomeomorph α β}
exact Set.inter_comm _ _
· rw [e.restr_source' _ e'.open_source]
refine' (EqOn.trans _ h).trans _ <;> simp only [mfld_simps, eqOn_refl]
-#align local_homeomorph.set.eq_on.restr_eq_on_source LocalHomeomorph.Set.EqOn.restr_eqOn_source
+#align local_homeomorph.set.eq_on.restr_eq_on_source PartialHomeomorph.Set.EqOn.restr_eqOn_source
-/-- Composition of a local homeomorphism and its inverse is equivalent to the restriction of the
+/-- Composition of a partial homeomorphism and its inverse is equivalent to the restriction of the
identity to the source -/
-theorem trans_self_symm : e.trans e.symm ≈ LocalHomeomorph.ofSet e.source e.open_source :=
+theorem trans_self_symm : e.trans e.symm ≈ PartialHomeomorph.ofSet e.source e.open_source :=
LocalEquiv.trans_self_symm _
-#align local_homeomorph.trans_self_symm LocalHomeomorph.trans_self_symm
+#align local_homeomorph.trans_self_symm PartialHomeomorph.trans_self_symm
-theorem trans_symm_self : e.symm.trans e ≈ LocalHomeomorph.ofSet e.target e.open_target :=
+theorem trans_symm_self : e.symm.trans e ≈ PartialHomeomorph.ofSet e.target e.open_target :=
e.symm.trans_self_symm
-#align local_homeomorph.trans_symm_self LocalHomeomorph.trans_symm_self
+#align local_homeomorph.trans_symm_self PartialHomeomorph.trans_symm_self
-theorem eq_of_eqOnSource_univ {e e' : LocalHomeomorph α β} (h : e ≈ e') (s : e.source = univ)
+theorem eq_of_eqOnSource_univ {e e' : PartialHomeomorph α β} (h : e ≈ e') (s : e.source = univ)
(t : e.target = univ) : e = e' :=
toLocalEquiv_injective <| LocalEquiv.eq_of_eqOnSource_univ _ _ h s t
-#align local_homeomorph.eq_of_eq_on_source_univ LocalHomeomorph.eq_of_eqOnSource_univ
+#align local_homeomorph.eq_of_eq_on_source_univ PartialHomeomorph.eq_of_eqOnSource_univ
section Prod
-/-- The product of two local homeomorphisms, as a local homeomorphism on the product space. -/
+/-- The product of two partial homeomorphisms, as a partial homeomorphism on the product space. -/
@[simps! (config := mfld_cfg) toLocalEquiv apply,
simps! (config := .lemmasOnly) source target symm_apply]
-def prod (e : LocalHomeomorph α β) (e' : LocalHomeomorph γ δ) :
- LocalHomeomorph (α × γ) (β × δ) where
+def prod (e : PartialHomeomorph α β) (e' : PartialHomeomorph γ δ) :
+ PartialHomeomorph (α × γ) (β × δ) where
open_source := e.open_source.prod e'.open_source
open_target := e.open_target.prod e'.open_target
continuousOn_toFun := e.continuousOn.prod_map e'.continuousOn
continuousOn_invFun := e.continuousOn_symm.prod_map e'.continuousOn_symm
toLocalEquiv := e.toLocalEquiv.prod e'.toLocalEquiv
-#align local_homeomorph.prod LocalHomeomorph.prod
+#align local_homeomorph.prod PartialHomeomorph.prod
@[simp, mfld_simps]
-theorem prod_symm (e : LocalHomeomorph α β) (e' : LocalHomeomorph γ δ) :
+theorem prod_symm (e : PartialHomeomorph α β) (e' : PartialHomeomorph γ δ) :
(e.prod e').symm = e.symm.prod e'.symm :=
rfl
-#align local_homeomorph.prod_symm LocalHomeomorph.prod_symm
+#align local_homeomorph.prod_symm PartialHomeomorph.prod_symm
@[simp]
theorem refl_prod_refl {α β : Type*} [TopologicalSpace α] [TopologicalSpace β] :
- (LocalHomeomorph.refl α).prod (LocalHomeomorph.refl β) = LocalHomeomorph.refl (α × β) :=
- LocalHomeomorph.ext _ _ (fun _ => rfl) (fun _ => rfl) univ_prod_univ
-#align local_homeomorph.refl_prod_refl LocalHomeomorph.refl_prod_refl
+ (PartialHomeomorph.refl α).prod (PartialHomeomorph.refl β) = PartialHomeomorph.refl (α × β) :=
+ PartialHomeomorph.ext _ _ (fun _ => rfl) (fun _ => rfl) univ_prod_univ
+#align local_homeomorph.refl_prod_refl PartialHomeomorph.refl_prod_refl
@[simp, mfld_simps]
theorem prod_trans {η : Type*} {ε : Type*} [TopologicalSpace η] [TopologicalSpace ε]
- (e : LocalHomeomorph α β) (f : LocalHomeomorph β γ) (e' : LocalHomeomorph δ η)
- (f' : LocalHomeomorph η ε) : (e.prod e').trans (f.prod f') = (e.trans f).prod (e'.trans f') :=
+ (e : PartialHomeomorph α β) (f : PartialHomeomorph β γ) (e' : PartialHomeomorph δ η)
+ (f' : PartialHomeomorph η ε) : (e.prod e').trans (f.prod f') = (e.trans f).prod (e'.trans f') :=
toLocalEquiv_injective <| e.1.prod_trans ..
-#align local_homeomorph.prod_trans LocalHomeomorph.prod_trans
+#align local_homeomorph.prod_trans PartialHomeomorph.prod_trans
-theorem prod_eq_prod_of_nonempty {e₁ e₁' : LocalHomeomorph α β} {e₂ e₂' : LocalHomeomorph γ δ}
+theorem prod_eq_prod_of_nonempty {e₁ e₁' : PartialHomeomorph α β} {e₂ e₂' : PartialHomeomorph γ δ}
(h : (e₁.prod e₂).source.Nonempty) : e₁.prod e₂ = e₁'.prod e₂' ↔ e₁ = e₁' ∧ e₂ = e₂' := by
obtain ⟨⟨x, y⟩, -⟩ := id h
haveI : Nonempty α := ⟨x⟩
haveI : Nonempty β := ⟨e₁ x⟩
haveI : Nonempty γ := ⟨y⟩
haveI : Nonempty δ := ⟨e₂ y⟩
- simp_rw [LocalHomeomorph.ext_iff, prod_apply, prod_symm_apply, prod_source, Prod.ext_iff,
+ simp_rw [PartialHomeomorph.ext_iff, prod_apply, prod_symm_apply, prod_source, Prod.ext_iff,
Set.prod_eq_prod_iff_of_nonempty h, forall_and, Prod.forall, forall_const,
and_assoc, and_left_comm]
-#align local_homeomorph.prod_eq_prod_of_nonempty LocalHomeomorph.prod_eq_prod_of_nonempty
+#align local_homeomorph.prod_eq_prod_of_nonempty PartialHomeomorph.prod_eq_prod_of_nonempty
-theorem prod_eq_prod_of_nonempty' {e₁ e₁' : LocalHomeomorph α β} {e₂ e₂' : LocalHomeomorph γ δ}
+theorem prod_eq_prod_of_nonempty' {e₁ e₁' : PartialHomeomorph α β} {e₂ e₂' : PartialHomeomorph γ δ}
(h : (e₁'.prod e₂').source.Nonempty) : e₁.prod e₂ = e₁'.prod e₂' ↔ e₁ = e₁' ∧ e₂ = e₂' := by
rw [eq_comm, prod_eq_prod_of_nonempty h, eq_comm, @eq_comm _ e₂']
-#align local_homeomorph.prod_eq_prod_of_nonempty' LocalHomeomorph.prod_eq_prod_of_nonempty'
+#align local_homeomorph.prod_eq_prod_of_nonempty' PartialHomeomorph.prod_eq_prod_of_nonempty'
end Prod
section Piecewise
-/-- Combine two `LocalHomeomorph`s using `Set.piecewise`. The source of the new `LocalHomeomorph`
-is `s.ite e.source e'.source = e.source ∩ s ∪ e'.source \ s`, and similarly for target. The
-function sends `e.source ∩ s` to `e.target ∩ t` using `e` and `e'.source \ s` to `e'.target \ t`
-using `e'`, and similarly for the inverse function. To ensure that the maps `toFun` and `invFun`
-are inverse of each other on the new `source` and `target`, the definition assumes that the sets `s`
-and `t` are related both by `e.is_image` and `e'.is_image`. To ensure that the new maps are
-continuous on `source`/`target`, it also assumes that `e.source` and `e'.source` meet `frontier s`
-on the same set and `e x = e' x` on this intersection. -/
+/-- Combine two `PartialHomeomorph`s using `Set.piecewise`. The source of the new
+`PartialHomeomorph` is `s.ite e.source e'.source = e.source ∩ s ∪ e'.source \ s`, and similarly for
+target. The function sends `e.source ∩ s` to `e.target ∩ t` using `e` and
+`e'.source \ s` to `e'.target \ t` using `e'`, and similarly for the inverse function.
+To ensure the maps `toFun` and `invFun` are inverse of each other on the new `source` and `target`,
+the definition assumes that the sets `s` and `t` are related both by `e.is_image` and `e'.is_image`.
+To ensure that the new maps are continuous on `source`/`target`, it also assumes that `e.source` and
+`e'.source` meet `frontier s` on the same set and `e x = e' x` on this intersection. -/
@[simps! (config := .asFn) toLocalEquiv apply]
-def piecewise (e e' : LocalHomeomorph α β) (s : Set α) (t : Set β) [∀ x, Decidable (x ∈ s)]
+def piecewise (e e' : PartialHomeomorph α β) (s : Set α) (t : Set β) [∀ x, Decidable (x ∈ s)]
[∀ y, Decidable (y ∈ t)] (H : e.IsImage s t) (H' : e'.IsImage s t)
(Hs : e.source ∩ frontier s = e'.source ∩ frontier s)
- (Heq : EqOn e e' (e.source ∩ frontier s)) : LocalHomeomorph α β where
+ (Heq : EqOn e e' (e.source ∩ frontier s)) : PartialHomeomorph α β where
toLocalEquiv := e.toLocalEquiv.piecewise e'.toLocalEquiv s t H H'
open_source := e.open_source.ite e'.open_source Hs
open_target :=
@@ -1106,11 +1107,11 @@ def piecewise (e e' : LocalHomeomorph α β) (s : Set α) (t : Set β) [∀ x, D
continuousOn_piecewise_ite e.continuousOn_symm e'.continuousOn_symm
(H.frontier.inter_eq_of_inter_eq_of_eqOn H'.frontier Hs Heq)
(H.frontier.symm_eqOn_of_inter_eq_of_eqOn Hs Heq)
-#align local_homeomorph.piecewise LocalHomeomorph.piecewise
+#align local_homeomorph.piecewise PartialHomeomorph.piecewise
@[simp]
-theorem symm_piecewise (e e' : LocalHomeomorph α β) {s : Set α} {t : Set β} [∀ x, Decidable (x ∈ s)]
- [∀ y, Decidable (y ∈ t)] (H : e.IsImage s t) (H' : e'.IsImage s t)
+theorem symm_piecewise (e e' : PartialHomeomorph α β) {s : Set α} {t : Set β}
+ [∀ x, Decidable (x ∈ s)] [∀ y, Decidable (y ∈ t)] (H : e.IsImage s t) (H' : e'.IsImage s t)
(Hs : e.source ∩ frontier s = e'.source ∩ frontier s)
(Heq : EqOn e e' (e.source ∩ frontier s)) :
(e.piecewise e' s t H H' Hs Heq).symm =
@@ -1118,14 +1119,14 @@ theorem symm_piecewise (e e' : LocalHomeomorph α β) {s : Set α} {t : Set β}
(H.frontier.inter_eq_of_inter_eq_of_eqOn H'.frontier Hs Heq)
(H.frontier.symm_eqOn_of_inter_eq_of_eqOn Hs Heq) :=
rfl
-#align local_homeomorph.symm_piecewise LocalHomeomorph.symm_piecewise
+#align local_homeomorph.symm_piecewise PartialHomeomorph.symm_piecewise
-/-- Combine two `LocalHomeomorph`s with disjoint sources and disjoint targets. We reuse
-`LocalHomeomorph.piecewise` then override `toLocalEquiv` to `LocalEquiv.disjointUnion`.
+/-- Combine two `PartialHomeomorph`s with disjoint sources and disjoint targets. We reuse
+`PartialHomeomorph.piecewise` then override `toLocalEquiv` to `LocalEquiv.disjointUnion`.
This way we have better definitional equalities for `source` and `target`. -/
-def disjointUnion (e e' : LocalHomeomorph α β) [∀ x, Decidable (x ∈ e.source)]
+def disjointUnion (e e' : PartialHomeomorph α β) [∀ x, Decidable (x ∈ e.source)]
[∀ y, Decidable (y ∈ e.target)] (Hs : Disjoint e.source e'.source)
- (Ht : Disjoint e.target e'.target) : LocalHomeomorph α β :=
+ (Ht : Disjoint e.target e'.target) : PartialHomeomorph α β :=
(e.piecewise e' e.source e.target e.isImage_source_target
(e'.isImage_source_target_of_disjoint e Hs.symm Ht.symm)
(by rw [e.open_source.inter_frontier_eq, (Hs.symm.frontier_right e'.open_source).inter_eq])
@@ -1134,18 +1135,18 @@ def disjointUnion (e e' : LocalHomeomorph α β) [∀ x, Decidable (x ∈ e.sour
exact eqOn_empty _ _)).replaceEquiv
(e.toLocalEquiv.disjointUnion e'.toLocalEquiv Hs Ht)
(LocalEquiv.disjointUnion_eq_piecewise _ _ _ _).symm
-#align local_homeomorph.disjoint_union LocalHomeomorph.disjointUnion
+#align local_homeomorph.disjoint_union PartialHomeomorph.disjointUnion
end Piecewise
section Pi
variable {ι : Type*} [Fintype ι] {Xi Yi : ι → Type*} [∀ i, TopologicalSpace (Xi i)]
- [∀ i, TopologicalSpace (Yi i)] (ei : ∀ i, LocalHomeomorph (Xi i) (Yi i))
+ [∀ i, TopologicalSpace (Yi i)] (ei : ∀ i, PartialHomeomorph (Xi i) (Yi i))
-/-- The product of a finite family of `LocalHomeomorph`s. -/
+/-- The product of a finite family of `PartialHomeomorph`s. -/
@[simps toLocalEquiv]
-def pi : LocalHomeomorph (∀ i, Xi i) (∀ i, Yi i) where
+def pi : PartialHomeomorph (∀ i, Xi i) (∀ i, Yi i) where
toLocalEquiv := LocalEquiv.pi fun i => (ei i).toLocalEquiv
open_source := isOpen_set_pi finite_univ fun i _ => (ei i).open_source
open_target := isOpen_set_pi finite_univ fun i _ => (ei i).open_target
@@ -1153,7 +1154,7 @@ def pi : LocalHomeomorph (∀ i, Xi i) (∀ i, Yi i) where
(ei i).continuousOn.comp (continuous_apply _).continuousOn fun _f hf => hf i trivial
continuousOn_invFun := continuousOn_pi.2 fun i =>
(ei i).continuousOn_symm.comp (continuous_apply _).continuousOn fun _f hf => hf i trivial
-#align local_homeomorph.pi LocalHomeomorph.pi
+#align local_homeomorph.pi PartialHomeomorph.pi
end Pi
@@ -1166,17 +1167,17 @@ theorem continuousWithinAt_iff_continuousWithinAt_comp_right {f : β → γ} {s
ContinuousWithinAt f s x ↔ ContinuousWithinAt (f ∘ e) (e ⁻¹' s) (e.symm x) := by
simp_rw [ContinuousWithinAt, ← @tendsto_map'_iff _ _ _ _ e,
e.map_nhdsWithin_preimage_eq (e.map_target h), (· ∘ ·), e.right_inv h]
-#align local_homeomorph.continuous_within_at_iff_continuous_within_at_comp_right LocalHomeomorph.continuousWithinAt_iff_continuousWithinAt_comp_right
+#align local_homeomorph.continuous_within_at_iff_continuous_within_at_comp_right PartialHomeomorph.continuousWithinAt_iff_continuousWithinAt_comp_right
-/-- Continuity at a point can be read under right composition with a local homeomorphism, if the
+/-- Continuity at a point can be read under right composition with a partial homeomorphism, if the
point is in its target -/
theorem continuousAt_iff_continuousAt_comp_right {f : β → γ} {x : β} (h : x ∈ e.target) :
ContinuousAt f x ↔ ContinuousAt (f ∘ e) (e.symm x) := by
rw [← continuousWithinAt_univ, e.continuousWithinAt_iff_continuousWithinAt_comp_right h,
preimage_univ, continuousWithinAt_univ]
-#align local_homeomorph.continuous_at_iff_continuous_at_comp_right LocalHomeomorph.continuousAt_iff_continuousAt_comp_right
+#align local_homeomorph.continuous_at_iff_continuous_at_comp_right PartialHomeomorph.continuousAt_iff_continuousAt_comp_right
-/-- A function is continuous on a set if and only if its composition with a local homeomorphism
+/-- A function is continuous on a set if and only if its composition with a partial homeomorphism
on the right is continuous on the corresponding set. -/
theorem continuousOn_iff_continuousOn_comp_right {f : β → γ} {s : Set β} (h : s ⊆ e.target) :
ContinuousOn f s ↔ ContinuousOn (f ∘ e) (e.source ∩ e ⁻¹' s) := by
@@ -1185,7 +1186,7 @@ theorem continuousOn_iff_continuousOn_comp_right {f : β → γ} {s : Set β} (h
rw [e.continuousWithinAt_iff_continuousWithinAt_comp_right (h hx),
e.symm_image_eq_source_inter_preimage h, inter_comm, continuousWithinAt_inter]
exact IsOpen.mem_nhds e.open_source (e.map_target (h hx))
-#align local_homeomorph.continuous_on_iff_continuous_on_comp_right LocalHomeomorph.continuousOn_iff_continuousOn_comp_right
+#align local_homeomorph.continuous_on_iff_continuous_on_comp_right PartialHomeomorph.continuousOn_iff_continuousOn_comp_right
/-- Continuity within a set at a point can be read under left composition with a local
homeomorphism if a neighborhood of the initial point is sent to the source of the local
@@ -1200,38 +1201,38 @@ theorem continuousWithinAt_iff_continuousWithinAt_comp_left {f : γ → α} {s :
(e.continuousAt_symm (e.map_source hx)).continuousWithinAt
ContinuousWithinAt.comp this fe_cont (subset_univ _)
exact this.congr (fun y hy => by simp [e.left_inv hy.2]) (by simp [e.left_inv hx])
-#align local_homeomorph.continuous_within_at_iff_continuous_within_at_comp_left LocalHomeomorph.continuousWithinAt_iff_continuousWithinAt_comp_left
+#align local_homeomorph.continuous_within_at_iff_continuous_within_at_comp_left PartialHomeomorph.continuousWithinAt_iff_continuousWithinAt_comp_left
-/-- Continuity at a point can be read under left composition with a local homeomorphism if a
-neighborhood of the initial point is sent to the source of the local homeomorphism-/
+/-- Continuity at a point can be read under left composition with a partial homeomorphism if a
+neighborhood of the initial point is sent to the source of the partial homeomorphism-/
theorem continuousAt_iff_continuousAt_comp_left {f : γ → α} {x : γ} (h : f ⁻¹' e.source ∈ 𝓝 x) :
ContinuousAt f x ↔ ContinuousAt (e ∘ f) x := by
have hx : f x ∈ e.source := (mem_of_mem_nhds h : _)
have h' : f ⁻¹' e.source ∈ 𝓝[univ] x := by rwa [nhdsWithin_univ]
rw [← continuousWithinAt_univ, ← continuousWithinAt_univ,
e.continuousWithinAt_iff_continuousWithinAt_comp_left hx h']
-#align local_homeomorph.continuous_at_iff_continuous_at_comp_left LocalHomeomorph.continuousAt_iff_continuousAt_comp_left
+#align local_homeomorph.continuous_at_iff_continuous_at_comp_left PartialHomeomorph.continuousAt_iff_continuousAt_comp_left
-/-- A function is continuous on a set if and only if its composition with a local homeomorphism
+/-- A function is continuous on a set if and only if its composition with a partial homeomorphism
on the left is continuous on the corresponding set. -/
theorem continuousOn_iff_continuousOn_comp_left {f : γ → α} {s : Set γ} (h : s ⊆ f ⁻¹' e.source) :
ContinuousOn f s ↔ ContinuousOn (e ∘ f) s :=
forall₂_congr fun _x hx =>
e.continuousWithinAt_iff_continuousWithinAt_comp_left (h hx)
(mem_of_superset self_mem_nhdsWithin h)
-#align local_homeomorph.continuous_on_iff_continuous_on_comp_left LocalHomeomorph.continuousOn_iff_continuousOn_comp_left
+#align local_homeomorph.continuous_on_iff_continuous_on_comp_left PartialHomeomorph.continuousOn_iff_continuousOn_comp_left
-/-- A function is continuous if and only if its composition with a local homeomorphism
+/-- A function is continuous if and only if its composition with a partial homeomorphism
on the left is continuous and its image is contained in the source. -/
theorem continuous_iff_continuous_comp_left {f : γ → α} (h : f ⁻¹' e.source = univ) :
Continuous f ↔ Continuous (e ∘ f) := by
simp only [continuous_iff_continuousOn_univ]
exact e.continuousOn_iff_continuousOn_comp_left (Eq.symm h).subset
-#align local_homeomorph.continuous_iff_continuous_comp_left LocalHomeomorph.continuous_iff_continuous_comp_left
+#align local_homeomorph.continuous_iff_continuous_comp_left PartialHomeomorph.continuous_iff_continuous_comp_left
end Continuity
-/-- The homeomorphism obtained by restricting a `LocalHomeomorph` to a subset of the source. -/
+/-- The homeomorphism obtained by restricting a `PartialHomeomorph` to a subset of the source. -/
@[simps]
def homeomorphOfImageSubsetSource {s : Set α} {t : Set β} (hs : s ⊆ e.source) (ht : e '' s = t) :
s ≃ₜ t :=
@@ -1245,18 +1246,18 @@ def homeomorphOfImageSubsetSource {s : Set α} {t : Set β} (hs : s ⊆ e.source
right_inv := fun b => Subtype.eq <| e.right_inv (h₂ b.2)
continuous_toFun := (e.continuousOn.mono hs).restrict_mapsTo h₁
continuous_invFun := (e.continuousOn_symm.mono h₂).restrict_mapsTo h₃ }
-#align local_homeomorph.homeomorph_of_image_subset_source LocalHomeomorph.homeomorphOfImageSubsetSource
+#align local_homeomorph.homeomorph_of_image_subset_source PartialHomeomorph.homeomorphOfImageSubsetSource
-/-- A local homeomorphism defines a homeomorphism between its source and target. -/
+/-- A partial homeomorphism defines a homeomorphism between its source and target. -/
@[simps!] -- porting note: new `simps`
def toHomeomorphSourceTarget : e.source ≃ₜ e.target :=
e.homeomorphOfImageSubsetSource subset_rfl e.image_source_eq_target
-#align local_homeomorph.to_homeomorph_source_target LocalHomeomorph.toHomeomorphSourceTarget
+#align local_homeomorph.to_homeomorph_source_target PartialHomeomorph.toHomeomorphSourceTarget
-theorem secondCountableTopology_source [SecondCountableTopology β] (e : LocalHomeomorph α β) :
+theorem secondCountableTopology_source [SecondCountableTopology β] (e : PartialHomeomorph α β) :
SecondCountableTopology e.source :=
e.toHomeomorphSourceTarget.secondCountableTopology
-#align local_homeomorph.second_countable_topology_source LocalHomeomorph.secondCountableTopology_source
+#align local_homeomorph.second_countable_topology_source PartialHomeomorph.secondCountableTopology_source
theorem nhds_eq_comap_inf_principal {x} (hx : x ∈ e.source) :
𝓝 x = comap e (𝓝 (e x)) ⊓ 𝓟 e.source := by
@@ -1265,7 +1266,7 @@ theorem nhds_eq_comap_inf_principal {x} (hx : x ∈ e.source) :
e.toHomeomorphSourceTarget.nhds_eq_comap, nhds_subtype_eq_comap]
simp only [(· ∘ ·), toHomeomorphSourceTarget_apply_coe, comap_comap]
-/-- If a local homeomorphism has source and target equal to univ, then it induces a homeomorphism
+/-- If a partial homeomorphism has source and target equal to univ, then it induces a homeomorphism
between the whole spaces, expressed in this definition. -/
@[simps (config := mfld_cfg) apply symm_apply] -- porting note: todo: add a `LocalEquiv` version
def toHomeomorphOfSourceEqUnivTargetEqUniv (h : e.source = (univ : Set α)) (h' : e.target = univ) :
@@ -1284,7 +1285,7 @@ def toHomeomorphOfSourceEqUnivTargetEqUniv (h : e.source = (univ : Set α)) (h'
simpa only [continuous_iff_continuousOn_univ, h] using e.continuousOn
continuous_invFun := by
simpa only [continuous_iff_continuousOn_univ, h'] using e.continuousOn_symm
-#align local_homeomorph.to_homeomorph_of_source_eq_univ_target_eq_univ LocalHomeomorph.toHomeomorphOfSourceEqUnivTargetEqUniv
+#align local_homeomorph.to_homeomorph_of_source_eq_univ_target_eq_univ PartialHomeomorph.toHomeomorphOfSourceEqUnivTargetEqUniv
theorem openEmbedding_restrict : OpenEmbedding (e.source.restrict e) := by
refine openEmbedding_of_continuous_injective_open (e.continuousOn.comp_continuous
@@ -1293,37 +1294,38 @@ theorem openEmbedding_restrict : OpenEmbedding (e.source.restrict e) := by
exact e.image_isOpen_of_isOpen (e.open_source.isOpenMap_subtype_val V hV)
fun _ ⟨x, _, h⟩ ↦ h ▸ x.2
-/-- A local homeomorphism whose source is all of `α` defines an open embedding of `α` into `β`. The
-converse is also true; see `OpenEmbedding.toLocalHomeomorph`. -/
+/-- A partial homeomorphism whose source is all of `α` defines an open embedding of `α` into `β`.
+The converse is also true; see `OpenEmbedding.toPartialHomeomorph`. -/
theorem to_openEmbedding (h : e.source = Set.univ) : OpenEmbedding e :=
e.openEmbedding_restrict.comp
((Homeomorph.setCongr h).trans <| Homeomorph.Set.univ α).symm.openEmbedding
-#align local_homeomorph.to_open_embedding LocalHomeomorph.to_openEmbedding
+#align local_homeomorph.to_open_embedding PartialHomeomorph.to_openEmbedding
-end LocalHomeomorph
+end PartialHomeomorph
namespace Homeomorph
variable (e : α ≃ₜ β) (e' : β ≃ₜ γ)
-/- Register as simp lemmas that the fields of a local homeomorphism built from a homeomorphism
+/- Register as simp lemmas that the fields of a partial homeomorphism built from a homeomorphism
correspond to the fields of the original homeomorphism. -/
@[simp, mfld_simps]
-theorem refl_toLocalHomeomorph : (Homeomorph.refl α).toLocalHomeomorph = LocalHomeomorph.refl α :=
+theorem refl_toPartialHomeomorph :
+ (Homeomorph.refl α).toPartialHomeomorph = PartialHomeomorph.refl α :=
rfl
-#align homeomorph.refl_to_local_homeomorph Homeomorph.refl_toLocalHomeomorph
+#align homeomorph.refl_to_local_homeomorph Homeomorph.refl_toPartialHomeomorph
@[simp, mfld_simps]
-theorem symm_toLocalHomeomorph : e.symm.toLocalHomeomorph = e.toLocalHomeomorph.symm :=
+theorem symm_toPartialHomeomorph : e.symm.toPartialHomeomorph = e.toPartialHomeomorph.symm :=
rfl
-#align homeomorph.symm_to_local_homeomorph Homeomorph.symm_toLocalHomeomorph
+#align homeomorph.symm_to_local_homeomorph Homeomorph.symm_toPartialHomeomorph
@[simp, mfld_simps]
-theorem trans_toLocalHomeomorph :
- (e.trans e').toLocalHomeomorph = e.toLocalHomeomorph.trans e'.toLocalHomeomorph :=
- LocalHomeomorph.toLocalEquiv_injective <| Equiv.trans_toLocalEquiv _ _
-#align homeomorph.trans_to_local_homeomorph Homeomorph.trans_toLocalHomeomorph
+theorem trans_toPartialHomeomorph :
+ (e.trans e').toPartialHomeomorph = e.toPartialHomeomorph.trans e'.toPartialHomeomorph :=
+ PartialHomeomorph.toLocalEquiv_injective <| Equiv.trans_toLocalEquiv _ _
+#align homeomorph.trans_to_local_homeomorph Homeomorph.trans_toPartialHomeomorph
end Homeomorph
@@ -1331,13 +1333,13 @@ namespace OpenEmbedding
variable (f : α → β) (h : OpenEmbedding f)
-/-- An open embedding of `α` into `β`, with `α` nonempty, defines a local homeomorphism whose source
-is all of `α`. The converse is also true; see `LocalHomeomorph.to_openEmbedding`. -/
+/-- An open embedding of `α` into `β`, with `α` nonempty, defines a partial homeomorphism
+whose source is all of `α`. The converse is also true; see `PartialHomeomorph.to_openEmbedding`. -/
@[simps! (config := mfld_cfg) apply source target]
-noncomputable def toLocalHomeomorph [Nonempty α] : LocalHomeomorph α β :=
- LocalHomeomorph.ofContinuousOpen ((h.toEmbedding.inj.injOn univ).toLocalEquiv _ _)
+noncomputable def toPartialHomeomorph [Nonempty α] : PartialHomeomorph α β :=
+ PartialHomeomorph.ofContinuousOpen ((h.toEmbedding.inj.injOn univ).toLocalEquiv _ _)
h.continuous.continuousOn h.isOpenMap isOpen_univ
-#align open_embedding.to_local_homeomorph OpenEmbedding.toLocalHomeomorph
+#align open_embedding.to_local_homeomorph OpenEmbedding.toPartialHomeomorph
end OpenEmbedding
@@ -1347,10 +1349,10 @@ open TopologicalSpace
variable (s : Opens α) [Nonempty s]
-/-- The inclusion of an open subset `s` of a space `α` into `α` is a local homeomorphism from the
+/-- The inclusion of an open subset `s` of a space `α` into `α` is a partial homeomorphism from the
subtype `s` to `α`. -/
-noncomputable def localHomeomorphSubtypeCoe : LocalHomeomorph s α :=
- OpenEmbedding.toLocalHomeomorph _ s.2.openEmbedding_subtype_val
+noncomputable def localHomeomorphSubtypeCoe : PartialHomeomorph s α :=
+ OpenEmbedding.toPartialHomeomorph _ s.2.openEmbedding_subtype_val
#align topological_space.opens.local_homeomorph_subtype_coe TopologicalSpace.Opens.localHomeomorphSubtypeCoe
@[simp, mfld_simps]
@@ -1371,34 +1373,34 @@ theorem localHomeomorphSubtypeCoe_target : s.localHomeomorphSubtypeCoe.target =
end TopologicalSpace.Opens
-namespace LocalHomeomorph
+namespace PartialHomeomorph
open TopologicalSpace
-variable (e : LocalHomeomorph α β)
+variable (e : PartialHomeomorph α β)
variable (s : Opens α) [Nonempty s]
-/-- The restriction of a local homeomorphism `e` to an open subset `s` of the domain type produces a
-local homeomorphism whose domain is the subtype `s`.-/
-noncomputable def subtypeRestr : LocalHomeomorph s β :=
+/-- The restriction of a partial homeomorphism `e` to an open subset `s` of the domain type
+produces a partial homeomorphism whose domain is the subtype `s`. -/
+noncomputable def subtypeRestr : PartialHomeomorph s β :=
s.localHomeomorphSubtypeCoe.trans e
-#align local_homeomorph.subtype_restr LocalHomeomorph.subtypeRestr
+#align local_homeomorph.subtype_restr PartialHomeomorph.subtypeRestr
theorem subtypeRestr_def : e.subtypeRestr s = s.localHomeomorphSubtypeCoe.trans e :=
rfl
-#align local_homeomorph.subtype_restr_def LocalHomeomorph.subtypeRestr_def
+#align local_homeomorph.subtype_restr_def PartialHomeomorph.subtypeRestr_def
@[simp, mfld_simps]
theorem subtypeRestr_coe :
- ((e.subtypeRestr s : LocalHomeomorph s β) : s → β) = Set.restrict ↑s (e : α → β) :=
+ ((e.subtypeRestr s : PartialHomeomorph s β) : s → β) = Set.restrict ↑s (e : α → β) :=
rfl
-#align local_homeomorph.subtype_restr_coe LocalHomeomorph.subtypeRestr_coe
+#align local_homeomorph.subtype_restr_coe PartialHomeomorph.subtypeRestr_coe
@[simp, mfld_simps]
theorem subtypeRestr_source : (e.subtypeRestr s).source = (↑) ⁻¹' e.source := by
simp only [subtypeRestr_def, mfld_simps]
-#align local_homeomorph.subtype_restr_source LocalHomeomorph.subtypeRestr_source
+#align local_homeomorph.subtype_restr_source PartialHomeomorph.subtypeRestr_source
variable {s}
@@ -1406,13 +1408,13 @@ theorem map_subtype_source {x : s} (hxe : (x : α) ∈ e.source): e x ∈ (e.sub
refine' ⟨e.map_source hxe, _⟩
rw [s.localHomeomorphSubtypeCoe_target, mem_preimage, e.leftInvOn hxe]
exact x.prop
-#align local_homeomorph.map_subtype_source LocalHomeomorph.map_subtype_source
+#align local_homeomorph.map_subtype_source PartialHomeomorph.map_subtype_source
variable (s)
/- This lemma characterizes the transition functions of an open subset in terms of the transition
functions of the original space. -/
-theorem subtypeRestr_symm_trans_subtypeRestr (f f' : LocalHomeomorph α β) :
+theorem subtypeRestr_symm_trans_subtypeRestr (f f' : PartialHomeomorph α β) :
(f.subtypeRestr s).symm.trans (f'.subtypeRestr s) ≈
(f.symm.trans f').restr (f.target ∩ f.symm ⁻¹' s) := by
simp only [subtypeRestr_def, trans_symm_eq_symm_trans_symm]
@@ -1428,7 +1430,7 @@ theorem subtypeRestr_symm_trans_subtypeRestr (f f' : LocalHomeomorph α β) :
-- f has been eliminated !!!
refine' Setoid.trans (trans_symm_self s.localHomeomorphSubtypeCoe) _
simp only [mfld_simps, Setoid.refl]
-#align local_homeomorph.subtype_restr_symm_trans_subtype_restr LocalHomeomorph.subtypeRestr_symm_trans_subtypeRestr
+#align local_homeomorph.subtype_restr_symm_trans_subtype_restr PartialHomeomorph.subtypeRestr_symm_trans_subtypeRestr
theorem subtypeRestr_symm_eqOn (U : Opens α) [Nonempty U] :
EqOn e.symm (Subtype.val ∘ (e.subtypeRestr U).symm) (e.subtypeRestr U).target := by
@@ -1443,18 +1445,18 @@ theorem subtypeRestr_symm_eqOn_of_le {U V : Opens α} [Nonempty U] [Nonempty V]
(e.subtypeRestr U).target := by
set i := Set.inclusion hUV
intro y hy
- dsimp [LocalHomeomorph.subtypeRestr_def] at hy ⊢
+ dsimp [PartialHomeomorph.subtypeRestr_def] at hy ⊢
have hyV : e.symm y ∈ V.localHomeomorphSubtypeCoe.target := by
rw [Opens.localHomeomorphSubtypeCoe_target] at hy ⊢
exact hUV hy.2
refine' V.localHomeomorphSubtypeCoe.injOn _ trivial _
- · rw [← LocalHomeomorph.symm_target]
- apply LocalHomeomorph.map_source
- rw [LocalHomeomorph.symm_source]
+ · rw [← PartialHomeomorph.symm_target]
+ apply PartialHomeomorph.map_source
+ rw [PartialHomeomorph.symm_source]
exact hyV
· rw [V.localHomeomorphSubtypeCoe.right_inv hyV]
show _ = U.localHomeomorphSubtypeCoe _
rw [U.localHomeomorphSubtypeCoe.right_inv hy.2]
-#align local_homeomorph.subtype_restr_symm_eq_on_of_le LocalHomeomorph.subtypeRestr_symm_eqOn_of_le
+#align local_homeomorph.subtype_restr_symm_eq_on_of_le PartialHomeomorph.subtypeRestr_symm_eqOn_of_le
-end LocalHomeomorph
+end PartialHomeomorph
A stronger version of #8800, the differences are:
assume either IsSigmaCompact U
or SigmaCompactSpace M
;
only need test functions satisfying tsupport g ⊆ U
rather than support g ⊆ U
;
requires LocallyIntegrableOn
U rather than LocallyIntegrable
on the whole space.
Also fills in some missing APIs around the manifold and measure theory libraries.
Co-authored-by: sgouezel <sebastien.gouezel@univ-rennes1.fr> Co-authored-by: Junyan Xu <junyanxu.math@gmail.com>
@@ -1339,11 +1339,6 @@ noncomputable def toLocalHomeomorph [Nonempty α] : LocalHomeomorph α β :=
h.continuous.continuousOn h.isOpenMap isOpen_univ
#align open_embedding.to_local_homeomorph OpenEmbedding.toLocalHomeomorph
-theorem continuousAt_iff {f : α → β} {g : β → γ} (hf : OpenEmbedding f) {x : α} :
- ContinuousAt (g ∘ f) x ↔ ContinuousAt g (f x) :=
- hf.tendsto_nhds_iff'
-#align open_embedding.continuous_at_iff OpenEmbedding.continuousAt_iff
-
end OpenEmbedding
namespace TopologicalSpace.Opens
@@ -1435,6 +1430,14 @@ theorem subtypeRestr_symm_trans_subtypeRestr (f f' : LocalHomeomorph α β) :
simp only [mfld_simps, Setoid.refl]
#align local_homeomorph.subtype_restr_symm_trans_subtype_restr LocalHomeomorph.subtypeRestr_symm_trans_subtypeRestr
+theorem subtypeRestr_symm_eqOn (U : Opens α) [Nonempty U] :
+ EqOn e.symm (Subtype.val ∘ (e.subtypeRestr U).symm) (e.subtypeRestr U).target := by
+ intro y hy
+ rw [eq_comm, eq_symm_apply _ _ hy.1]
+ · change restrict _ e _ = _
+ rw [← subtypeRestr_coe, (e.subtypeRestr U).right_inv hy]
+ · have := map_target _ hy; rwa [subtypeRestr_source] at this
+
theorem subtypeRestr_symm_eqOn_of_le {U V : Opens α} [Nonempty U] [Nonempty V] (hUV : U ≤ V) :
EqOn (e.subtypeRestr V).symm (Set.inclusion hUV ∘ (e.subtypeRestr U).symm)
(e.subtypeRestr U).target := by
They have type ContinuousOn ..., hence should be named accordingly. Suggested by @fpvandoorn in #8736.
@@ -56,8 +56,8 @@ structure LocalHomeomorph (α : Type*) (β : Type*) [TopologicalSpace α]
[TopologicalSpace β] extends LocalEquiv α β where
open_source : IsOpen source
open_target : IsOpen target
- continuous_toFun : ContinuousOn toFun source
- continuous_invFun : ContinuousOn invFun target
+ continuousOn_toFun : ContinuousOn toFun source
+ continuousOn_invFun : ContinuousOn invFun target
#align local_homeomorph LocalHomeomorph
namespace LocalHomeomorph
@@ -78,8 +78,8 @@ protected def symm : LocalHomeomorph β α where
toLocalEquiv := e.toLocalEquiv.symm
open_source := e.open_target
open_target := e.open_source
- continuous_toFun := e.continuous_invFun
- continuous_invFun := e.continuous_toFun
+ continuousOn_toFun := e.continuousOn_invFun
+ continuousOn_invFun := e.continuousOn_toFun
#align local_homeomorph.symm LocalHomeomorph.symm
/-- See Note [custom simps projection]. We need to specify this projection explicitly in this case,
@@ -94,11 +94,11 @@ def Simps.symm_apply (e : LocalHomeomorph α β) : β → α := e.symm
initialize_simps_projections LocalHomeomorph (toFun → apply, invFun → symm_apply)
protected theorem continuousOn : ContinuousOn e e.source :=
- e.continuous_toFun
+ e.continuousOn_toFun
#align local_homeomorph.continuous_on LocalHomeomorph.continuousOn
theorem continuousOn_symm : ContinuousOn e.symm e.target :=
- e.continuous_invFun
+ e.continuousOn_invFun
#align local_homeomorph.continuous_on_symm LocalHomeomorph.continuousOn_symm
@[simp, mfld_simps]
@@ -205,8 +205,8 @@ def _root_.Homeomorph.toLocalHomeomorphOfImageEq (e : α ≃ₜ β) (s : Set α)
toLocalEquiv := e.toLocalEquivOfImageEq s t h
open_source := hs
open_target := by simpa [← h]
- continuous_toFun := e.continuous.continuousOn
- continuous_invFun := e.symm.continuous.continuousOn
+ continuousOn_toFun := e.continuous.continuousOn
+ continuousOn_invFun := e.symm.continuous.continuousOn
/-- A homeomorphism induces a local homeomorphism on the whole space -/
@[simps! (config := mfld_cfg)]
@@ -220,8 +220,8 @@ def replaceEquiv (e : LocalHomeomorph α β) (e' : LocalEquiv α β) (h : e.toLo
toLocalEquiv := e'
open_source := h ▸ e.open_source
open_target := h ▸ e.open_target
- continuous_toFun := h ▸ e.continuous_toFun
- continuous_invFun := h ▸ e.continuous_invFun
+ continuousOn_toFun := h ▸ e.continuousOn_toFun
+ continuousOn_invFun := h ▸ e.continuousOn_invFun
#align local_homeomorph.replace_equiv LocalHomeomorph.replaceEquiv
theorem replaceEquiv_eq_self (e : LocalHomeomorph α β) (e' : LocalEquiv α β)
@@ -453,7 +453,7 @@ theorem isOpen_inter_preimage {s : Set β} (hs : IsOpen s) : IsOpen (e.source
lemma isOpen_image_of_subset_source {s : Set α} (hs : IsOpen s) (hse : s ⊆ e.source) :
IsOpen (e '' s) := by
rw [(image_eq_target_inter_inv_preimage (e := e) hse)]
- exact e.continuous_invFun.isOpen_inter_preimage e.open_target hs
+ exact e.continuousOn_invFun.isOpen_inter_preimage e.open_target hs
/-- The inverse of a local homeomorphism `e` is an open map on `e.target`. -/
lemma isOpen_image_symm_of_subset_target {t : Set β} (ht : IsOpen t) (hte : t ⊆ e.target) :
@@ -629,8 +629,8 @@ def restr (h : e.IsImage s t) (hs : IsOpen (e.source ∩ s)) : LocalHomeomorph
toLocalEquiv := h.toLocalEquiv.restr
open_source := hs
open_target := h.isOpen_iff.1 hs
- continuous_toFun := e.continuousOn.mono (inter_subset_left _ _)
- continuous_invFun := e.symm.continuousOn.mono (inter_subset_left _ _)
+ continuousOn_toFun := e.continuousOn.mono (inter_subset_left _ _)
+ continuousOn_invFun := e.symm.continuousOn.mono (inter_subset_left _ _)
#align local_homeomorph.is_image.restr LocalHomeomorph.IsImage.restr
end IsImage
@@ -684,8 +684,8 @@ def ofContinuousOpenRestrict (e : LocalEquiv α β) (hc : ContinuousOn e e.sourc
toLocalEquiv := e
open_source := hs
open_target := by simpa only [range_restrict, e.image_source_eq_target] using ho.isOpen_range
- continuous_toFun := hc
- continuous_invFun := e.image_source_eq_target ▸ ho.continuousOn_image_of_leftInvOn e.leftInvOn
+ continuousOn_toFun := hc
+ continuousOn_invFun := e.image_source_eq_target ▸ ho.continuousOn_image_of_leftInvOn e.leftInvOn
#align local_homeomorph.of_continuous_open_restrict LocalHomeomorph.ofContinuousOpenRestrict
/-- A `LocalEquiv` with continuous open forward map and an open source is a `LocalHomeomorph`. -/
@@ -778,8 +778,8 @@ def ofSet (s : Set α) (hs : IsOpen s) : LocalHomeomorph α α where
toLocalEquiv := LocalEquiv.ofSet s
open_source := hs
open_target := hs
- continuous_toFun := continuous_id.continuousOn
- continuous_invFun := continuous_id.continuousOn
+ continuousOn_toFun := continuous_id.continuousOn
+ continuousOn_invFun := continuous_id.continuousOn
#align local_homeomorph.of_set LocalHomeomorph.ofSet
@[simp, mfld_simps]
@@ -805,8 +805,8 @@ protected def trans' (h : e.target = e'.source) : LocalHomeomorph α γ where
toLocalEquiv := LocalEquiv.trans' e.toLocalEquiv e'.toLocalEquiv h
open_source := e.open_source
open_target := e'.open_target
- continuous_toFun := e'.continuousOn.comp e.continuousOn <| h ▸ e.mapsTo
- continuous_invFun := e.continuousOn_symm.comp e'.continuousOn_symm <| h.symm ▸ e'.symm_mapsTo
+ continuousOn_toFun := e'.continuousOn.comp e.continuousOn <| h ▸ e.mapsTo
+ continuousOn_invFun := e.continuousOn_symm.comp e'.continuousOn_symm <| h.symm ▸ e'.symm_mapsTo
#align local_homeomorph.trans' LocalHomeomorph.trans'
/-- Composing two local homeomorphisms, by restricting to the maximal domain where their
@@ -923,8 +923,8 @@ def transHomeomorph (e' : β ≃ₜ γ) : LocalHomeomorph α γ where
toLocalEquiv := e.toLocalEquiv.transEquiv e'.toEquiv
open_source := e.open_source
open_target := e.open_target.preimage e'.symm.continuous
- continuous_toFun := e'.continuous.comp_continuousOn e.continuousOn
- continuous_invFun := e.symm.continuousOn.comp e'.symm.continuous.continuousOn fun _ => id
+ continuousOn_toFun := e'.continuous.comp_continuousOn e.continuousOn
+ continuousOn_invFun := e.symm.continuousOn.comp e'.symm.continuous.continuousOn fun _ => id
#align local_homeomorph.trans_homeomorph LocalHomeomorph.transHomeomorph
theorem transHomeomorph_eq_trans (e' : β ≃ₜ γ) :
@@ -939,8 +939,8 @@ def _root_.Homeomorph.transLocalHomeomorph (e : α ≃ₜ β) : LocalHomeomorph
toLocalEquiv := e.toEquiv.transLocalEquiv e'.toLocalEquiv
open_source := e'.open_source.preimage e.continuous
open_target := e'.open_target
- continuous_toFun := e'.continuousOn.comp e.continuous.continuousOn fun _ => id
- continuous_invFun := e.symm.continuous.comp_continuousOn e'.symm.continuousOn
+ continuousOn_toFun := e'.continuousOn.comp e.continuous.continuousOn fun _ => id
+ continuousOn_invFun := e.symm.continuous.comp_continuousOn e'.symm.continuousOn
#align homeomorph.trans_local_homeomorph Homeomorph.transLocalHomeomorph
theorem _root_.Homeomorph.transLocalHomeomorph_eq_trans (e : α ≃ₜ β) :
@@ -1039,8 +1039,8 @@ def prod (e : LocalHomeomorph α β) (e' : LocalHomeomorph γ δ) :
LocalHomeomorph (α × γ) (β × δ) where
open_source := e.open_source.prod e'.open_source
open_target := e.open_target.prod e'.open_target
- continuous_toFun := e.continuousOn.prod_map e'.continuousOn
- continuous_invFun := e.continuousOn_symm.prod_map e'.continuousOn_symm
+ continuousOn_toFun := e.continuousOn.prod_map e'.continuousOn
+ continuousOn_invFun := e.continuousOn_symm.prod_map e'.continuousOn_symm
toLocalEquiv := e.toLocalEquiv.prod e'.toLocalEquiv
#align local_homeomorph.prod LocalHomeomorph.prod
@@ -1101,8 +1101,8 @@ def piecewise (e e' : LocalHomeomorph α β) (s : Set α) (t : Set β) [∀ x, D
open_source := e.open_source.ite e'.open_source Hs
open_target :=
e.open_target.ite e'.open_target <| H.frontier.inter_eq_of_inter_eq_of_eqOn H'.frontier Hs Heq
- continuous_toFun := continuousOn_piecewise_ite e.continuousOn e'.continuousOn Hs Heq
- continuous_invFun :=
+ continuousOn_toFun := continuousOn_piecewise_ite e.continuousOn e'.continuousOn Hs Heq
+ continuousOn_invFun :=
continuousOn_piecewise_ite e.continuousOn_symm e'.continuousOn_symm
(H.frontier.inter_eq_of_inter_eq_of_eqOn H'.frontier Hs Heq)
(H.frontier.symm_eqOn_of_inter_eq_of_eqOn Hs Heq)
@@ -1149,9 +1149,9 @@ def pi : LocalHomeomorph (∀ i, Xi i) (∀ i, Yi i) where
toLocalEquiv := LocalEquiv.pi fun i => (ei i).toLocalEquiv
open_source := isOpen_set_pi finite_univ fun i _ => (ei i).open_source
open_target := isOpen_set_pi finite_univ fun i _ => (ei i).open_target
- continuous_toFun := continuousOn_pi.2 fun i =>
+ continuousOn_toFun := continuousOn_pi.2 fun i =>
(ei i).continuousOn.comp (continuous_apply _).continuousOn fun _f hf => hf i trivial
- continuous_invFun := continuousOn_pi.2 fun i =>
+ continuousOn_invFun := continuousOn_pi.2 fun i =>
(ei i).continuousOn_symm.comp (continuous_apply _).continuousOn fun _f hf => hf i trivial
#align local_homeomorph.pi LocalHomeomorph.pi
Mostly, this means replacing "of_open" by "of_isOpen". A few lemmas names were misleading and are corrected differently. Zulip discussion.
@@ -445,15 +445,15 @@ theorem preimage_eventuallyEq_target_inter_preimage_inter {e : LocalHomeomorph
e.left_inv hy, iff_true_intro hyu]
#align local_homeomorph.preimage_eventually_eq_target_inter_preimage_inter LocalHomeomorph.preimage_eventuallyEq_target_inter_preimage_inter
-theorem preimage_open_of_open {s : Set β} (hs : IsOpen s) : IsOpen (e.source ∩ e ⁻¹' s) :=
- e.continuousOn.preimage_open_of_open e.open_source hs
-#align local_homeomorph.preimage_open_of_open LocalHomeomorph.preimage_open_of_open
+theorem isOpen_inter_preimage {s : Set β} (hs : IsOpen s) : IsOpen (e.source ∩ e ⁻¹' s) :=
+ e.continuousOn.isOpen_inter_preimage e.open_source hs
+#align local_homeomorph.preimage_open_of_open LocalHomeomorph.isOpen_inter_preimage
/-- A local homeomorphism is an open map on its source. -/
lemma isOpen_image_of_subset_source {s : Set α} (hs : IsOpen s) (hse : s ⊆ e.source) :
IsOpen (e '' s) := by
rw [(image_eq_target_inter_inv_preimage (e := e) hse)]
- exact e.continuous_invFun.preimage_open_of_open e.open_target hs
+ exact e.continuous_invFun.isOpen_inter_preimage e.open_target hs
/-- The inverse of a local homeomorphism `e` is an open map on `e.target`. -/
lemma isOpen_image_symm_of_subset_target {t : Set β} (ht : IsOpen t) (hte : t ⊆ e.target) :
@@ -619,8 +619,8 @@ protected theorem frontier (h : e.IsImage s t) : e.IsImage (frontier s) (frontie
#align local_homeomorph.is_image.frontier LocalHomeomorph.IsImage.frontier
theorem isOpen_iff (h : e.IsImage s t) : IsOpen (e.source ∩ s) ↔ IsOpen (e.target ∩ t) :=
- ⟨fun hs => h.symm_preimage_eq' ▸ e.symm.preimage_open_of_open hs, fun hs =>
- h.preimage_eq' ▸ e.preimage_open_of_open hs⟩
+ ⟨fun hs => h.symm_preimage_eq' ▸ e.symm.isOpen_inter_preimage hs, fun hs =>
+ h.preimage_eq' ▸ e.isOpen_inter_preimage hs⟩
#align local_homeomorph.is_image.is_open_iff LocalHomeomorph.IsImage.isOpen_iff
/-- Restrict a `LocalHomeomorph` to a pair of corresponding open sets. -/
@@ -661,21 +661,22 @@ theorem preimage_frontier (s : Set β) :
(IsImage.of_preimage_eq rfl).frontier.preimage_eq
#align local_homeomorph.preimage_frontier LocalHomeomorph.preimage_frontier
-theorem preimage_open_of_open_symm {s : Set α} (hs : IsOpen s) : IsOpen (e.target ∩ e.symm ⁻¹' s) :=
- e.symm.continuousOn.preimage_open_of_open e.open_target hs
-#align local_homeomorph.preimage_open_of_open_symm LocalHomeomorph.preimage_open_of_open_symm
+theorem isOpen_inter_preimage_symm {s : Set α} (hs : IsOpen s) : IsOpen (e.target ∩ e.symm ⁻¹' s) :=
+ e.symm.continuousOn.isOpen_inter_preimage e.open_target hs
+#align local_homeomorph.preimage_open_of_open_symm LocalHomeomorph.isOpen_inter_preimage_symm
/-- The image of an open set in the source is open. -/
-theorem image_open_of_open {s : Set α} (hs : IsOpen s) (h : s ⊆ e.source) : IsOpen (e '' s) := by
+theorem image_isOpen_of_isOpen {s : Set α} (hs : IsOpen s) (h : s ⊆ e.source) :
+ IsOpen (e '' s) := by
have : e '' s = e.target ∩ e.symm ⁻¹' s := e.toLocalEquiv.image_eq_target_inter_inv_preimage h
rw [this]
- exact e.continuousOn_symm.preimage_open_of_open e.open_target hs
-#align local_homeomorph.image_open_of_open LocalHomeomorph.image_open_of_open
+ exact e.continuousOn_symm.isOpen_inter_preimage e.open_target hs
+#align local_homeomorph.image_open_of_open LocalHomeomorph.image_isOpen_of_isOpen
/-- The image of the restriction of an open set to the source is open. -/
-theorem image_open_of_open' {s : Set α} (hs : IsOpen s) : IsOpen (e '' (e.source ∩ s)) :=
- image_open_of_open _ (IsOpen.inter e.open_source hs) (inter_subset_left _ _)
-#align local_homeomorph.image_open_of_open' LocalHomeomorph.image_open_of_open'
+theorem image_isOpen_of_isOpen' {s : Set α} (hs : IsOpen s) : IsOpen (e '' (e.source ∩ s)) :=
+ image_isOpen_of_isOpen _ (IsOpen.inter e.open_source hs) (inter_subset_left _ _)
+#align local_homeomorph.image_open_of_open' LocalHomeomorph.image_isOpen_of_isOpen'
/-- A `LocalEquiv` with continuous open forward map and an open source is a `LocalHomeomorph`. -/
def ofContinuousOpenRestrict (e : LocalEquiv α β) (hc : ContinuousOn e e.source)
@@ -1289,7 +1290,8 @@ theorem openEmbedding_restrict : OpenEmbedding (e.source.restrict e) := by
refine openEmbedding_of_continuous_injective_open (e.continuousOn.comp_continuous
continuous_subtype_val Subtype.prop) e.injOn.injective fun V hV ↦ ?_
rw [Set.restrict_eq, Set.image_comp]
- exact e.image_open_of_open (e.open_source.isOpenMap_subtype_val V hV) fun _ ⟨x, _, h⟩ ↦ h ▸ x.2
+ exact e.image_isOpen_of_isOpen (e.open_source.isOpenMap_subtype_val V hV)
+ fun _ ⟨x, _, h⟩ ↦ h ▸ x.2
/-- A local homeomorphism whose source is all of `α` defines an open embedding of `α` into `β`. The
converse is also true; see `OpenEmbedding.toLocalHomeomorph`. -/
@@ -1419,7 +1421,7 @@ theorem subtypeRestr_symm_trans_subtypeRestr (f f' : LocalHomeomorph α β) :
(f.subtypeRestr s).symm.trans (f'.subtypeRestr s) ≈
(f.symm.trans f').restr (f.target ∩ f.symm ⁻¹' s) := by
simp only [subtypeRestr_def, trans_symm_eq_symm_trans_symm]
- have openness₁ : IsOpen (f.target ∩ f.symm ⁻¹' s) := f.preimage_open_of_open_symm s.2
+ have openness₁ : IsOpen (f.target ∩ f.symm ⁻¹' s) := f.isOpen_inter_preimage_symm s.2
rw [← ofSet_trans _ openness₁, ← trans_assoc, ← trans_assoc]
refine' EqOnSource.trans' _ (eqOnSource_refl _)
-- f' has been eliminated !!!
@@ -356,6 +356,10 @@ theorem symm_target : e.symm.target = e.source :=
@[simp, mfld_simps] theorem symm_symm : e.symm.symm = e := rfl
#align local_homeomorph.symm_symm LocalHomeomorph.symm_symm
+theorem symm_bijective : Function.Bijective
+ (LocalHomeomorph.symm : LocalHomeomorph α β → LocalHomeomorph β α) :=
+ Function.bijective_iff_has_inverse.mpr ⟨_, symm_symm, symm_symm⟩
+
/-- A local homeomorphism is continuous at any point of its source -/
protected theorem continuousAt {x : α} (h : x ∈ e.source) : ContinuousAt e x :=
(e.continuousOn x h).continuousAt (e.open_source.mem_nhds h)
@@ -895,8 +895,9 @@ theorem ofSet_trans {s : Set α} (hs : IsOpen s) : (ofSet s hs).trans e = e.rest
LocalHomeomorph.ext _ _ (fun x => rfl) (fun x => rfl) <| by simp [hs.interior_eq, inter_comm]
#align local_homeomorph.of_set_trans LocalHomeomorph.ofSet_trans
-theorem ofSet_trans' {s : Set α} (hs : IsOpen s) : (ofSet s hs).trans e = e.restr (e.source ∩ s) :=
- by rw [ofSet_trans, restr_source_inter]
+theorem ofSet_trans' {s : Set α} (hs : IsOpen s) :
+ (ofSet s hs).trans e = e.restr (e.source ∩ s) := by
+ rw [ofSet_trans, restr_source_inter]
#align local_homeomorph.of_set_trans' LocalHomeomorph.ofSet_trans'
@[simp, mfld_simps]
Use .asFn
and .lemmasOnly
as simps
configuration options.
For reference, these are defined here:
@@ -912,7 +912,7 @@ theorem restr_trans (s : Set α) : (e.restr s).trans e' = (e.trans e').restr s :
/-- Postcompose a local homeomorphism with a homeomorphism.
We modify the source and target to have better definitional behavior. -/
-@[simps! (config := { fullyApplied := false })]
+@[simps! (config := .asFn)]
def transHomeomorph (e' : β ≃ₜ γ) : LocalHomeomorph α γ where
toLocalEquiv := e.toLocalEquiv.transEquiv e'.toEquiv
open_source := e.open_source
@@ -928,7 +928,7 @@ theorem transHomeomorph_eq_trans (e' : β ≃ₜ γ) :
/-- Precompose a local homeomorphism with a homeomorphism.
We modify the source and target to have better definitional behavior. -/
-@[simps! (config := { fullyApplied := false })]
+@[simps! (config := .asFn)]
def _root_.Homeomorph.transLocalHomeomorph (e : α ≃ₜ β) : LocalHomeomorph α γ where
toLocalEquiv := e.toEquiv.transLocalEquiv e'.toLocalEquiv
open_source := e'.open_source.preimage e.continuous
@@ -1086,7 +1086,7 @@ are inverse of each other on the new `source` and `target`, the definition assum
and `t` are related both by `e.is_image` and `e'.is_image`. To ensure that the new maps are
continuous on `source`/`target`, it also assumes that `e.source` and `e'.source` meet `frontier s`
on the same set and `e x = e' x` on this intersection. -/
-@[simps! (config := { fullyApplied := false }) toLocalEquiv apply]
+@[simps! (config := .asFn) toLocalEquiv apply]
def piecewise (e e' : LocalHomeomorph α β) (s : Set α) (t : Set β) [∀ x, Decidable (x ∈ s)]
[∀ y, Decidable (y ∈ t)] (H : e.IsImage s t) (H' : e'.IsImage s t)
(Hs : e.source ∩ frontier s = e'.source ∩ frontier s)
All the other properties of topological spaces like T0Space or RegularSpace are in the root namespace. Many files were opening TopologicalSpace
just for the sake of shortening TopologicalSpace.SecondCountableTopology
...
@@ -47,8 +47,6 @@ then it should use `e.source ∩ s` or `e.target ∩ t`, not `s ∩ e.source` or
open Function Set Filter Topology
-open TopologicalSpace (SecondCountableTopology)
-
variable {α : Type*} {β : Type*} {γ : Type*} {δ : Type*} [TopologicalSpace α]
[TopologicalSpace β] [TopologicalSpace γ] [TopologicalSpace δ]
Co-authored-by: Michael Rothgang <rothgami@math.hu-berlin.de>
@@ -145,6 +145,10 @@ theorem map_source {x : α} (h : x ∈ e.source) : e x ∈ e.target :=
e.map_source' h
#align local_homeomorph.map_source LocalHomeomorph.map_source
+/-- Variant of `map_source`, stated for images of subsets of `source`. -/
+lemma map_source'' : e '' e.source ⊆ e.target :=
+ fun _ ⟨_, hx, hex⟩ ↦ mem_of_eq_of_mem (id hex.symm) (e.map_source' hx)
+
@[simp, mfld_simps]
theorem map_target {x : β} (h : x ∈ e.target) : e.symm x ∈ e.source :=
e.map_target' h
@@ -443,6 +447,17 @@ theorem preimage_open_of_open {s : Set β} (hs : IsOpen s) : IsOpen (e.source
e.continuousOn.preimage_open_of_open e.open_source hs
#align local_homeomorph.preimage_open_of_open LocalHomeomorph.preimage_open_of_open
+/-- A local homeomorphism is an open map on its source. -/
+lemma isOpen_image_of_subset_source {s : Set α} (hs : IsOpen s) (hse : s ⊆ e.source) :
+ IsOpen (e '' s) := by
+ rw [(image_eq_target_inter_inv_preimage (e := e) hse)]
+ exact e.continuous_invFun.preimage_open_of_open e.open_target hs
+
+/-- The inverse of a local homeomorphism `e` is an open map on `e.target`. -/
+lemma isOpen_image_symm_of_subset_target {t : Set β} (ht : IsOpen t) (hte : t ⊆ e.target) :
+ IsOpen (e.symm '' t) :=
+ isOpen_image_of_subset_source e.symm ht (e.symm_source ▸ hte)
+
/-!
### `LocalHomeomorph.IsImage` relation
@@ -22,14 +22,14 @@ instead of `e.toFun x` and `e.invFun x`.
## Main definitions
-`Homeomorph.toLocalHomeomorph` : associating a local homeomorphism to a homeomorphism, with
- `source = target = Set.univ`;
-`LocalHomeomorph.symm` : the inverse of a local homeomorphism
-`LocalHomeomorph.trans` : the composition of two local homeomorphisms
-`LocalHomeomorph.refl` : the identity local homeomorphism
-`LocalHomeomorph.ofSet` : the identity on a set `s`
-`LocalHomeomorph.EqOnSource` : equivalence relation describing the "right" notion of equality
- for local homeomorphisms
+* `Homeomorph.toLocalHomeomorph`: associating a local homeomorphism to a homeomorphism, with
+ `source = target = Set.univ`;
+* `LocalHomeomorph.symm`: the inverse of a local homeomorphism
+* `LocalHomeomorph.trans`: the composition of two local homeomorphisms
+* `LocalHomeomorph.refl`: the identity local homeomorphism
+* `LocalHomeomorph.ofSet`: the identity on a set `s`
+* `LocalHomeomorph.EqOnSource`: equivalence relation describing the "right" notion of equality
+ for local homeomorphisms
## Implementation notes
Matches the naming convention, zulip discussion.
This is probably a left-over from the port; in mathlib3, the hypothesis and the lemma were named using "eq_on_source".
In passing, we also
@@ -323,7 +323,7 @@ theorem symm_image_target_eq_source (e : LocalHomeomorph α β) : e.symm '' e.ta
/-- Two local homeomorphisms are equal when they have equal `toFun`, `invFun` and `source`.
It is not sufficient to have equal `toFun` and `source`, as this only determines `invFun` on
the target. This would only be true for a weaker notion of equality, arguably the right one,
-called `eq_on_source`. -/
+called `EqOnSource`. -/
@[ext]
protected theorem ext (e' : LocalHomeomorph α β) (h : ∀ x, e x = e' x)
(hinv : ∀ x, e.symm x = e'.symm x) (hs : e.source = e'.source) : e = e' :=
@@ -940,24 +940,24 @@ theorem eqOnSource_iff (e e' : LocalHomeomorph α β) :
Iff.rfl
#align local_homeomorph.eq_on_source_iff LocalHomeomorph.eqOnSource_iff
-/-- `EqOnSource` is an equivalence relation -/
+/-- `EqOnSource` is an equivalence relation. -/
instance eqOnSourceSetoid : Setoid (LocalHomeomorph α β) :=
{ LocalEquiv.eqOnSourceSetoid.comap toLocalEquiv with r := EqOnSource }
theorem eqOnSource_refl : e ≈ e := Setoid.refl _
#align local_homeomorph.eq_on_source_refl LocalHomeomorph.eqOnSource_refl
-/-- If two local homeomorphisms are equivalent, so are their inverses -/
+/-- If two local homeomorphisms are equivalent, so are their inverses. -/
theorem EqOnSource.symm' {e e' : LocalHomeomorph α β} (h : e ≈ e') : e.symm ≈ e'.symm :=
LocalEquiv.EqOnSource.symm' h
#align local_homeomorph.eq_on_source.symm' LocalHomeomorph.EqOnSource.symm'
-/-- Two equivalent local homeomorphisms have the same source -/
+/-- Two equivalent local homeomorphisms have the same source. -/
theorem EqOnSource.source_eq {e e' : LocalHomeomorph α β} (h : e ≈ e') : e.source = e'.source :=
h.1
#align local_homeomorph.eq_on_source.source_eq LocalHomeomorph.EqOnSource.source_eq
-/-- Two equivalent local homeomorphisms have the same target -/
+/-- Two equivalent local homeomorphisms have the same target. -/
theorem EqOnSource.target_eq {e e' : LocalHomeomorph α β} (h : e ≈ e') : e.target = e'.target :=
h.symm'.1
#align local_homeomorph.eq_on_source.target_eq LocalHomeomorph.EqOnSource.target_eq
@@ -985,6 +985,7 @@ theorem EqOnSource.restr {e e' : LocalHomeomorph α β} (he : e ≈ e') (s : Set
LocalEquiv.EqOnSource.restr he _
#align local_homeomorph.eq_on_source.restr LocalHomeomorph.EqOnSource.restr
+/- Two equivalent local homeomorphisms are equal when the source and target are `univ`. -/
theorem Set.EqOn.restr_eqOn_source {e e' : LocalHomeomorph α β}
(h : EqOn e e' (e.source ∩ e'.source)) : e.restr e'.source ≈ e'.restr e.source := by
constructor
@@ -1005,10 +1006,10 @@ theorem trans_symm_self : e.symm.trans e ≈ LocalHomeomorph.ofSet e.target e.op
e.symm.trans_self_symm
#align local_homeomorph.trans_symm_self LocalHomeomorph.trans_symm_self
-theorem eq_of_eq_on_source_univ {e e' : LocalHomeomorph α β} (h : e ≈ e') (s : e.source = univ)
+theorem eq_of_eqOnSource_univ {e e' : LocalHomeomorph α β} (h : e ≈ e') (s : e.source = univ)
(t : e.target = univ) : e = e' :=
- toLocalEquiv_injective <| LocalEquiv.eq_of_eq_on_source_univ _ _ h s t
-#align local_homeomorph.eq_of_eq_on_source_univ LocalHomeomorph.eq_of_eq_on_source_univ
+ toLocalEquiv_injective <| LocalEquiv.eq_of_eqOnSource_univ _ _ h s t
+#align local_homeomorph.eq_of_eq_on_source_univ LocalHomeomorph.eq_of_eqOnSource_univ
section Prod
@@ -1266,18 +1266,18 @@ def toHomeomorphOfSourceEqUnivTargetEqUniv (h : e.source = (univ : Set α)) (h'
simpa only [continuous_iff_continuousOn_univ, h'] using e.continuousOn_symm
#align local_homeomorph.to_homeomorph_of_source_eq_univ_target_eq_univ LocalHomeomorph.toHomeomorphOfSourceEqUnivTargetEqUniv
+theorem openEmbedding_restrict : OpenEmbedding (e.source.restrict e) := by
+ refine openEmbedding_of_continuous_injective_open (e.continuousOn.comp_continuous
+ continuous_subtype_val Subtype.prop) e.injOn.injective fun V hV ↦ ?_
+ rw [Set.restrict_eq, Set.image_comp]
+ exact e.image_open_of_open (e.open_source.isOpenMap_subtype_val V hV) fun _ ⟨x, _, h⟩ ↦ h ▸ x.2
+
/-- A local homeomorphism whose source is all of `α` defines an open embedding of `α` into `β`. The
converse is also true; see `OpenEmbedding.toLocalHomeomorph`. -/
-theorem to_openEmbedding (h : e.source = Set.univ) : OpenEmbedding e := by
- apply openEmbedding_of_continuous_injective_open
- · apply continuous_iff_continuousOn_univ.mpr
- rw [← h]
- exact e.continuousOn
- · apply Set.injective_iff_injOn_univ.mpr
- rw [← h]
- exact e.injOn
- · intro U hU
- simpa only [h, subset_univ, mfld_simps] using e.image_open_of_open hU
+theorem to_openEmbedding (h : e.source = Set.univ) : OpenEmbedding e :=
+ e.openEmbedding_restrict.comp
+ ((Homeomorph.setCongr h).trans <| Homeomorph.Set.univ α).symm.openEmbedding
+
#align local_homeomorph.to_open_embedding LocalHomeomorph.to_openEmbedding
end LocalHomeomorph
@@ -929,7 +929,7 @@ theorem _root_.Homeomorph.transLocalHomeomorph_eq_trans (e : α ≃ₜ β) :
toLocalEquiv_injective <| Equiv.transLocalEquiv_eq_trans _ _
#align homeomorph.trans_local_homeomorph_eq_trans Homeomorph.transLocalHomeomorph_eq_trans
-/-- `eq_on_source e e'` means that `e` and `e'` have the same source, and coincide there. They
+/-- `EqOnSource e e'` means that `e` and `e'` have the same source, and coincide there. They
should really be considered the same local equiv. -/
def EqOnSource (e e' : LocalHomeomorph α β) : Prop :=
e.source = e'.source ∧ EqOn e e' e.source
@@ -940,7 +940,7 @@ theorem eqOnSource_iff (e e' : LocalHomeomorph α β) :
Iff.rfl
#align local_homeomorph.eq_on_source_iff LocalHomeomorph.eqOnSource_iff
-/-- `eq_on_source` is an equivalence relation -/
+/-- `EqOnSource` is an equivalence relation -/
instance eqOnSourceSetoid : Setoid (LocalHomeomorph α β) :=
{ LocalEquiv.eqOnSourceSetoid.comap toLocalEquiv with r := EqOnSource }
@@ -514,7 +514,7 @@ theorem iff_preimage_eq : e.IsImage s t ↔ e.source ∩ e ⁻¹' t = e.source
LocalEquiv.IsImage.iff_preimage_eq
#align local_homeomorph.is_image.iff_preimage_eq LocalHomeomorph.IsImage.iff_preimage_eq
-alias iff_preimage_eq ↔ preimage_eq of_preimage_eq
+alias ⟨preimage_eq, of_preimage_eq⟩ := iff_preimage_eq
#align local_homeomorph.is_image.preimage_eq LocalHomeomorph.IsImage.preimage_eq
#align local_homeomorph.is_image.of_preimage_eq LocalHomeomorph.IsImage.of_preimage_eq
@@ -522,7 +522,7 @@ theorem iff_symm_preimage_eq : e.IsImage s t ↔ e.target ∩ e.symm ⁻¹' s =
symm_iff.symm.trans iff_preimage_eq
#align local_homeomorph.is_image.iff_symm_preimage_eq LocalHomeomorph.IsImage.iff_symm_preimage_eq
-alias iff_symm_preimage_eq ↔ symm_preimage_eq of_symm_preimage_eq
+alias ⟨symm_preimage_eq, of_symm_preimage_eq⟩ := iff_symm_preimage_eq
#align local_homeomorph.is_image.symm_preimage_eq LocalHomeomorph.IsImage.symm_preimage_eq
#align local_homeomorph.is_image.of_symm_preimage_eq LocalHomeomorph.IsImage.of_symm_preimage_eq
@@ -531,7 +531,7 @@ theorem iff_symm_preimage_eq' :
rw [iff_symm_preimage_eq, ← image_source_inter_eq, ← image_source_inter_eq']
#align local_homeomorph.is_image.iff_symm_preimage_eq' LocalHomeomorph.IsImage.iff_symm_preimage_eq'
-alias iff_symm_preimage_eq' ↔ symm_preimage_eq' of_symm_preimage_eq'
+alias ⟨symm_preimage_eq', of_symm_preimage_eq'⟩ := iff_symm_preimage_eq'
#align local_homeomorph.is_image.symm_preimage_eq' LocalHomeomorph.IsImage.symm_preimage_eq'
#align local_homeomorph.is_image.of_symm_preimage_eq' LocalHomeomorph.IsImage.of_symm_preimage_eq'
@@ -539,7 +539,7 @@ theorem iff_preimage_eq' : e.IsImage s t ↔ e.source ∩ e ⁻¹' (e.target ∩
symm_iff.symm.trans iff_symm_preimage_eq'
#align local_homeomorph.is_image.iff_preimage_eq' LocalHomeomorph.IsImage.iff_preimage_eq'
-alias iff_preimage_eq' ↔ preimage_eq' of_preimage_eq'
+alias ⟨preimage_eq', of_preimage_eq'⟩ := iff_preimage_eq'
#align local_homeomorph.is_image.preimage_eq' LocalHomeomorph.IsImage.preimage_eq'
#align local_homeomorph.is_image.of_preimage_eq' LocalHomeomorph.IsImage.of_preimage_eq'
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -49,12 +49,12 @@ open Function Set Filter Topology
open TopologicalSpace (SecondCountableTopology)
-variable {α : Type _} {β : Type _} {γ : Type _} {δ : Type _} [TopologicalSpace α]
+variable {α : Type*} {β : Type*} {γ : Type*} {δ : Type*} [TopologicalSpace α]
[TopologicalSpace β] [TopologicalSpace γ] [TopologicalSpace δ]
/-- local homeomorphisms, defined on open subsets of the space -/
-- porting note: commented @[nolint has_nonempty_instance]
-structure LocalHomeomorph (α : Type _) (β : Type _) [TopologicalSpace α]
+structure LocalHomeomorph (α : Type*) (β : Type*) [TopologicalSpace α]
[TopologicalSpace β] extends LocalEquiv α β where
open_source : IsOpen source
open_target : IsOpen target
@@ -736,7 +736,7 @@ theorem restr_source_inter (s : Set α) : e.restr (e.source ∩ s) = e.restr s :
/-- The identity on the whole space as a local homeomorphism. -/
@[simps! (config := mfld_cfg) apply, simps! (config := .lemmasOnly) source target]
-protected def refl (α : Type _) [TopologicalSpace α] : LocalHomeomorph α α :=
+protected def refl (α : Type*) [TopologicalSpace α] : LocalHomeomorph α α :=
(Homeomorph.refl α).toLocalHomeomorph
#align local_homeomorph.refl LocalHomeomorph.refl
@@ -1031,13 +1031,13 @@ theorem prod_symm (e : LocalHomeomorph α β) (e' : LocalHomeomorph γ δ) :
#align local_homeomorph.prod_symm LocalHomeomorph.prod_symm
@[simp]
-theorem refl_prod_refl {α β : Type _} [TopologicalSpace α] [TopologicalSpace β] :
+theorem refl_prod_refl {α β : Type*} [TopologicalSpace α] [TopologicalSpace β] :
(LocalHomeomorph.refl α).prod (LocalHomeomorph.refl β) = LocalHomeomorph.refl (α × β) :=
LocalHomeomorph.ext _ _ (fun _ => rfl) (fun _ => rfl) univ_prod_univ
#align local_homeomorph.refl_prod_refl LocalHomeomorph.refl_prod_refl
@[simp, mfld_simps]
-theorem prod_trans {η : Type _} {ε : Type _} [TopologicalSpace η] [TopologicalSpace ε]
+theorem prod_trans {η : Type*} {ε : Type*} [TopologicalSpace η] [TopologicalSpace ε]
(e : LocalHomeomorph α β) (f : LocalHomeomorph β γ) (e' : LocalHomeomorph δ η)
(f' : LocalHomeomorph η ε) : (e.prod e').trans (f.prod f') = (e.trans f).prod (e'.trans f') :=
toLocalEquiv_injective <| e.1.prod_trans ..
@@ -1120,7 +1120,7 @@ end Piecewise
section Pi
-variable {ι : Type _} [Fintype ι] {Xi Yi : ι → Type _} [∀ i, TopologicalSpace (Xi i)]
+variable {ι : Type*} [Fintype ι] {Xi Yi : ι → Type*} [∀ i, TopologicalSpace (Xi i)]
[∀ i, TopologicalSpace (Yi i)] (ei : ∀ i, LocalHomeomorph (Xi i) (Yi i))
/-- The product of a finite family of `LocalHomeomorph`s. -/
homeomorphUnitBall
(#6030)
Equiv.toLocalEquivOfImageEq
and Homeomorph.toLocalHomeomorphOfImageEq
.homeomorphUnitBall
to Homeomorph.unitBall
.LocalHomeomorph.univUnitBall
,
a LocalHomeomorph
version of Homeomorph.unitBall
.LocalHomeomorph.unitBallBall
and LocalHomeomorph.univBall
.Inspired by a definition from the sphere eversion project.
@@ -194,14 +194,22 @@ protected theorem surjOn : SurjOn e e.source e.target :=
e.bijOn.surjOn
#align local_homeomorph.surj_on LocalHomeomorph.surjOn
-/-- A homeomorphism induces a local homeomorphism on the whole space -/
-@[simps! (config := mfld_cfg)]
-def _root_.Homeomorph.toLocalHomeomorph (e : α ≃ₜ β) : LocalHomeomorph α β where
- toLocalEquiv := e.toEquiv.toLocalEquiv
- open_source := isOpen_univ
- open_target := isOpen_univ
+/-- Interpret a `Homeomorph` as a `LocalHomeomorph` by restricting it
+to an open set `s` in the domain and to `t` in the codomain. -/
+@[simps! (config := .asFn) apply symm_apply toLocalEquiv,
+ simps! (config := .lemmasOnly) source target]
+def _root_.Homeomorph.toLocalHomeomorphOfImageEq (e : α ≃ₜ β) (s : Set α) (hs : IsOpen s)
+ (t : Set β) (h : e '' s = t) : LocalHomeomorph α β where
+ toLocalEquiv := e.toLocalEquivOfImageEq s t h
+ open_source := hs
+ open_target := by simpa [← h]
continuous_toFun := e.continuous.continuousOn
continuous_invFun := e.symm.continuous.continuousOn
+
+/-- A homeomorphism induces a local homeomorphism on the whole space -/
+@[simps! (config := mfld_cfg)]
+def _root_.Homeomorph.toLocalHomeomorph (e : α ≃ₜ β) : LocalHomeomorph α β :=
+ e.toLocalHomeomorphOfImageEq univ isOpen_univ univ <| by rw [image_univ, e.surjective.range_eq]
#align homeomorph.to_local_homeomorph Homeomorph.toLocalHomeomorph
/-- Replace `toLocalEquiv` field to provide better definitional equalities. -/
@@ -411,10 +411,8 @@ theorem eventually_nhdsWithin (e : LocalHomeomorph α β) {x : α} (p : β → P
theorem eventually_nhdsWithin' (e : LocalHomeomorph α β) {x : α} (p : α → Prop) {s : Set α}
(hx : x ∈ e.source) : (∀ᶠ y in 𝓝[e.symm ⁻¹' s] e x, p (e.symm y)) ↔ ∀ᶠ x in 𝓝[s] x, p x := by
rw [e.eventually_nhdsWithin _ hx]
- refine'
- eventually_congr
- ((eventually_nhdsWithin_of_eventually_nhds <| e.eventually_left_inverse hx).mono fun y hy =>
- _)
+ refine eventually_congr <|
+ (eventually_nhdsWithin_of_eventually_nhds <| e.eventually_left_inverse hx).mono fun y hy => ?_
rw [hy]
#align local_homeomorph.eventually_nhds_within' LocalHomeomorph.eventually_nhdsWithin'
@@ -776,6 +774,7 @@ end
/-- Composition of two local homeomorphisms when the target of the first and the source of
the second coincide. -/
+@[simps! apply symm_apply toLocalEquiv, simps! (config := .lemmasOnly) source target]
protected def trans' (h : e.target = e'.source) : LocalHomeomorph α γ where
toLocalEquiv := LocalEquiv.trans' e.toLocalEquiv e'.toLocalEquiv h
open_source := e.open_source
Rename LocalHomeomorph.trans_equiv_eq_trans
to LocalHomeomorph.transHomeomorph_eq_trans
.
Also fix the module docstring.
@@ -22,14 +22,14 @@ instead of `e.toFun x` and `e.invFun x`.
## Main definitions
-`Homeomorph.toLocalHomeomorph`: associating a local homeomorphism to a homeomorphism, with
- source = target = univ
-`LocalHomeomorph.symm` : the inverse of a local homeomorphism
+`Homeomorph.toLocalHomeomorph` : associating a local homeomorphism to a homeomorphism, with
+ `source = target = Set.univ`;
+`LocalHomeomorph.symm` : the inverse of a local homeomorphism
`LocalHomeomorph.trans` : the composition of two local homeomorphisms
-`LocalHomeomorph.refl` : the identity local homeomorphism
-`LocalHomeomorph.ofSet`: the identity on a set `s`
-`eq_on_source` : equivalence relation describing the "right" notion of equality for local
- homeomorphisms
+`LocalHomeomorph.refl` : the identity local homeomorphism
+`LocalHomeomorph.ofSet` : the identity on a set `s`
+`LocalHomeomorph.EqOnSource` : equivalence relation describing the "right" notion of equality
+ for local homeomorphisms
## Implementation notes
@@ -901,9 +901,10 @@ def transHomeomorph (e' : β ≃ₜ γ) : LocalHomeomorph α γ where
continuous_invFun := e.symm.continuousOn.comp e'.symm.continuous.continuousOn fun _ => id
#align local_homeomorph.trans_homeomorph LocalHomeomorph.transHomeomorph
-theorem trans_equiv_eq_trans (e' : β ≃ₜ γ) : e.transHomeomorph e' = e.trans e'.toLocalHomeomorph :=
+theorem transHomeomorph_eq_trans (e' : β ≃ₜ γ) :
+ e.transHomeomorph e' = e.trans e'.toLocalHomeomorph :=
toLocalEquiv_injective <| LocalEquiv.transEquiv_eq_trans _ _
-#align local_homeomorph.trans_equiv_eq_trans LocalHomeomorph.trans_equiv_eq_trans
+#align local_homeomorph.trans_equiv_eq_trans LocalHomeomorph.transHomeomorph_eq_trans
/-- Precompose a local homeomorphism with a homeomorphism.
We modify the source and target to have better definitional behavior. -/
@@ -2,15 +2,12 @@
Copyright (c) 2019 Sébastien Gouëzel. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
-
-! This file was ported from Lean 3 source module topology.local_homeomorph
-! leanprover-community/mathlib commit 431589bce478b2229eba14b14a283250428217db
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Logic.Equiv.LocalEquiv
import Mathlib.Topology.Sets.Opens
+#align_import topology.local_homeomorph from "leanprover-community/mathlib"@"431589bce478b2229eba14b14a283250428217db"
+
/-!
# Local homeomorphisms
@@ -548,7 +548,7 @@ theorem of_symm_image_eq (h : e.symm '' (e.target ∩ t) = e.source ∩ s) : e.I
LocalEquiv.IsImage.of_symm_image_eq h
#align local_homeomorph.is_image.of_symm_image_eq LocalHomeomorph.IsImage.of_symm_image_eq
-protected theorem compl (h : e.IsImage s t) : e.IsImage (sᶜ) (tᶜ) := fun _ hx => (h hx).not
+protected theorem compl (h : e.IsImage s t) : e.IsImage sᶜ tᶜ := fun _ hx => (h hx).not
#align local_homeomorph.is_image.compl LocalHomeomorph.IsImage.compl
protected theorem inter {s' t'} (h : e.IsImage s t) (h' : e.IsImage s' t') :
at
and goals (#5387)
Changes are of the form
some_tactic at h⊢
-> some_tactic at h ⊢
some_tactic at h
-> some_tactic at h
@@ -1169,7 +1169,7 @@ theorem continuousWithinAt_iff_continuousWithinAt_comp_left {f : γ → α} {s :
(hx : f x ∈ e.source) (h : f ⁻¹' e.source ∈ 𝓝[s] x) :
ContinuousWithinAt f s x ↔ ContinuousWithinAt (e ∘ f) s x := by
refine' ⟨(e.continuousAt hx).comp_continuousWithinAt, fun fe_cont => _⟩
- rw [← continuousWithinAt_inter' h] at fe_cont⊢
+ rw [← continuousWithinAt_inter' h] at fe_cont ⊢
have : ContinuousWithinAt (e.symm ∘ e ∘ f) (s ∩ f ⁻¹' e.source) x :=
haveI : ContinuousWithinAt e.symm univ (e (f x)) :=
(e.continuousAt_symm (e.map_source hx)).continuousWithinAt
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel
! This file was ported from Lean 3 source module topology.local_homeomorph
-! leanprover-community/mathlib commit dc6c365e751e34d100e80fe6e314c3c3e0fd2988
+! leanprover-community/mathlib commit 431589bce478b2229eba14b14a283250428217db
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -1379,6 +1379,16 @@ theorem subtypeRestr_source : (e.subtypeRestr s).source = (↑) ⁻¹' e.source
simp only [subtypeRestr_def, mfld_simps]
#align local_homeomorph.subtype_restr_source LocalHomeomorph.subtypeRestr_source
+variable {s}
+
+theorem map_subtype_source {x : s} (hxe : (x : α) ∈ e.source): e x ∈ (e.subtypeRestr s).target := by
+ refine' ⟨e.map_source hxe, _⟩
+ rw [s.localHomeomorphSubtypeCoe_target, mem_preimage, e.leftInvOn hxe]
+ exact x.prop
+#align local_homeomorph.map_subtype_source LocalHomeomorph.map_subtype_source
+
+variable (s)
+
/- This lemma characterizes the transition functions of an open subset in terms of the transition
functions of the original space. -/
theorem subtypeRestr_symm_trans_subtypeRestr (f f' : LocalHomeomorph α β) :
@@ -1399,4 +1409,23 @@ theorem subtypeRestr_symm_trans_subtypeRestr (f f' : LocalHomeomorph α β) :
simp only [mfld_simps, Setoid.refl]
#align local_homeomorph.subtype_restr_symm_trans_subtype_restr LocalHomeomorph.subtypeRestr_symm_trans_subtypeRestr
+theorem subtypeRestr_symm_eqOn_of_le {U V : Opens α} [Nonempty U] [Nonempty V] (hUV : U ≤ V) :
+ EqOn (e.subtypeRestr V).symm (Set.inclusion hUV ∘ (e.subtypeRestr U).symm)
+ (e.subtypeRestr U).target := by
+ set i := Set.inclusion hUV
+ intro y hy
+ dsimp [LocalHomeomorph.subtypeRestr_def] at hy ⊢
+ have hyV : e.symm y ∈ V.localHomeomorphSubtypeCoe.target := by
+ rw [Opens.localHomeomorphSubtypeCoe_target] at hy ⊢
+ exact hUV hy.2
+ refine' V.localHomeomorphSubtypeCoe.injOn _ trivial _
+ · rw [← LocalHomeomorph.symm_target]
+ apply LocalHomeomorph.map_source
+ rw [LocalHomeomorph.symm_source]
+ exact hyV
+ · rw [V.localHomeomorphSubtypeCoe.right_inv hyV]
+ show _ = U.localHomeomorphSubtypeCoe _
+ rw [U.localHomeomorphSubtypeCoe.right_inv hy.2]
+#align local_homeomorph.subtype_restr_symm_eq_on_of_le LocalHomeomorph.subtypeRestr_symm_eqOn_of_le
+
end LocalHomeomorph
@@ -893,7 +893,7 @@ theorem restr_trans (s : Set α) : (e.restr s).trans e' = (e.trans e').restr s :
toLocalEquiv_injective <| LocalEquiv.restr_trans e.toLocalEquiv e'.toLocalEquiv (interior s)
#align local_homeomorph.restr_trans LocalHomeomorph.restr_trans
-/-- Postcompose a local homeomorphism with an homeomorphism.
+/-- Postcompose a local homeomorphism with a homeomorphism.
We modify the source and target to have better definitional behavior. -/
@[simps! (config := { fullyApplied := false })]
def transHomeomorph (e' : β ≃ₜ γ) : LocalHomeomorph α γ where
@@ -908,7 +908,7 @@ theorem trans_equiv_eq_trans (e' : β ≃ₜ γ) : e.transHomeomorph e' = e.tran
toLocalEquiv_injective <| LocalEquiv.transEquiv_eq_trans _ _
#align local_homeomorph.trans_equiv_eq_trans LocalHomeomorph.trans_equiv_eq_trans
-/-- Precompose a local homeomorphism with an homeomorphism.
+/-- Precompose a local homeomorphism with a homeomorphism.
We modify the source and target to have better definitional behavior. -/
@[simps! (config := { fullyApplied := false })]
def _root_.Homeomorph.transLocalHomeomorph (e : α ≃ₜ β) : LocalHomeomorph α γ where
@@ -1222,7 +1222,7 @@ def homeomorphOfImageSubsetSource {s : Set α} {t : Set β} (hs : s ⊆ e.source
continuous_invFun := (e.continuousOn_symm.mono h₂).restrict_mapsTo h₃ }
#align local_homeomorph.homeomorph_of_image_subset_source LocalHomeomorph.homeomorphOfImageSubsetSource
-/-- A local homeomrphism defines a homeomorphism between its source and target. -/
+/-- A local homeomorphism defines a homeomorphism between its source and target. -/
@[simps!] -- porting note: new `simps`
def toHomeomorphSourceTarget : e.source ≃ₜ e.target :=
e.homeomorphOfImageSubsetSource subset_rfl e.image_source_eq_target
by
s! (#3825)
This PR puts, with one exception, every single remaining by
that lies all by itself on its own line to the previous line, thus matching the current behaviour of start-port.sh
. The exception is when the by
begins the second or later argument to a tuple or anonymous constructor; see https://github.com/leanprover-community/mathlib4/pull/3825#discussion_r1186702599.
Essentially this is s/\n *by$/ by/g
, but with manual editing to satisfy the linter's max-100-char-line requirement. The Python style linter is also modified to catch these "isolated by
s".
@@ -426,8 +426,8 @@ theorem eventually_nhdsWithin' (e : LocalHomeomorph α β) {x : α} (p : α →
of `e` and some other neighborhood of `f x` (which will be the source of a chart on `γ`). -/
theorem preimage_eventuallyEq_target_inter_preimage_inter {e : LocalHomeomorph α β} {s : Set α}
{t : Set γ} {x : α} {f : α → γ} (hf : ContinuousWithinAt f s x) (hxe : x ∈ e.source)
- (ht : t ∈ 𝓝 (f x)) : e.symm ⁻¹' s =ᶠ[𝓝 (e x)] (e.target ∩ e.symm ⁻¹' (s ∩ f ⁻¹' t) : Set β) :=
- by
+ (ht : t ∈ 𝓝 (f x)) :
+ e.symm ⁻¹' s =ᶠ[𝓝 (e x)] (e.target ∩ e.symm ⁻¹' (s ∩ f ⁻¹' t) : Set β) := by
rw [eventuallyEq_set, e.eventually_nhds _ hxe]
filter_upwards [e.open_source.mem_nhds hxe,
mem_nhdsWithin_iff_eventually.mp (hf.preimage_mem_nhdsWithin ht)]
@@ -385,7 +385,6 @@ theorem map_nhdsWithin_eq (e : LocalHomeomorph α β) {x} (hx : x ∈ e.source)
(e.leftInvOn.mono <| inter_subset_left _ _).map_nhdsWithin_eq (e.left_inv hx)
(e.continuousAt_symm (e.map_source hx)).continuousWithinAt
(e.continuousAt hx).continuousWithinAt
-
#align local_homeomorph.map_nhds_within_eq LocalHomeomorph.map_nhdsWithin_eq
theorem map_nhdsWithin_preimage_eq (e : LocalHomeomorph α β) {x} (hx : x ∈ e.source) (s : Set β) :
@@ -1224,6 +1223,7 @@ def homeomorphOfImageSubsetSource {s : Set α} {t : Set β} (hs : s ⊆ e.source
#align local_homeomorph.homeomorph_of_image_subset_source LocalHomeomorph.homeomorphOfImageSubsetSource
/-- A local homeomrphism defines a homeomorphism between its source and target. -/
+@[simps!] -- porting note: new `simps`
def toHomeomorphSourceTarget : e.source ≃ₜ e.target :=
e.homeomorphOfImageSubsetSource subset_rfl e.image_source_eq_target
#align local_homeomorph.to_homeomorph_source_target LocalHomeomorph.toHomeomorphSourceTarget
@@ -1233,6 +1233,13 @@ theorem secondCountableTopology_source [SecondCountableTopology β] (e : LocalHo
e.toHomeomorphSourceTarget.secondCountableTopology
#align local_homeomorph.second_countable_topology_source LocalHomeomorph.secondCountableTopology_source
+theorem nhds_eq_comap_inf_principal {x} (hx : x ∈ e.source) :
+ 𝓝 x = comap e (𝓝 (e x)) ⊓ 𝓟 e.source := by
+ lift x to e.source using hx
+ rw [← e.open_source.nhdsWithin_eq x.2, ← map_nhds_subtype_val, ← map_comap_setCoe_val,
+ e.toHomeomorphSourceTarget.nhds_eq_comap, nhds_subtype_eq_comap]
+ simp only [(· ∘ ·), toHomeomorphSourceTarget_apply_coe, comap_comap]
+
/-- If a local homeomorphism has source and target equal to univ, then it induces a homeomorphism
between the whole spaces, expressed in this definition. -/
@[simps (config := mfld_cfg) apply symm_apply] -- porting note: todo: add a `LocalEquiv` version
Simps.Config.lemmasOnly
and use it in the library@[simps!]
in the test fileLocalHomeomorph
@@ -198,7 +198,7 @@ protected theorem surjOn : SurjOn e e.source e.target :=
#align local_homeomorph.surj_on LocalHomeomorph.surjOn
/-- A homeomorphism induces a local homeomorphism on the whole space -/
-@[simps! (config := { mfld_cfg with simpRhs := true })]
+@[simps! (config := mfld_cfg)]
def _root_.Homeomorph.toLocalHomeomorph (e : α ≃ₜ β) : LocalHomeomorph α β where
toLocalEquiv := e.toEquiv.toLocalEquiv
open_source := isOpen_univ
@@ -207,10 +207,6 @@ def _root_.Homeomorph.toLocalHomeomorph (e : α ≃ₜ β) : LocalHomeomorph α
continuous_invFun := e.symm.continuous.continuousOn
#align homeomorph.to_local_homeomorph Homeomorph.toLocalHomeomorph
--- porting note: todo: see #2350
-attribute [mfld_simps] Homeomorph.toLocalHomeomorph_apply Homeomorph.toLocalHomeomorph_symm_apply
- Homeomorph.toLocalHomeomorph_source Homeomorph.toLocalHomeomorph_target
-
/-- Replace `toLocalEquiv` field to provide better definitional equalities. -/
def replaceEquiv (e : LocalHomeomorph α β) (e' : LocalEquiv α β) (h : e.toLocalEquiv = e') :
LocalHomeomorph α β where
@@ -701,14 +697,11 @@ theorem restrOpen_source (s : Set α) (hs : IsOpen s) : (e.restrOpen s hs).sourc
sure that the restriction is well defined whatever the set s, since local homeomorphisms are by
definition defined on open sets. In applications where `s` is open, this coincides with the
restriction of local equivalences -/
-@[simps! (config := mfld_cfg) apply symm_apply, simps! (config := { attrs := [] }) source target]
+@[simps! (config := mfld_cfg) apply symm_apply, simps! (config := .lemmasOnly) source target]
protected def restr (s : Set α) : LocalHomeomorph α β :=
e.restrOpen (interior s) isOpen_interior
#align local_homeomorph.restr LocalHomeomorph.restr
--- porting note: todo: see #2350
-attribute [mfld_simps] restr_apply restr_symm_apply
-
@[simp, mfld_simps]
theorem restr_toLocalEquiv (s : Set α) :
(e.restr s).toLocalEquiv = e.toLocalEquiv.restr (interior s) :=
@@ -740,14 +733,11 @@ theorem restr_source_inter (s : Set α) : e.restr (e.source ∩ s) = e.restr s :
#align local_homeomorph.restr_source_inter LocalHomeomorph.restr_source_inter
/-- The identity on the whole space as a local homeomorphism. -/
-@[simps! (config := mfld_cfg) apply, simps! (config := { attrs := [] }) source target]
+@[simps! (config := mfld_cfg) apply, simps! (config := .lemmasOnly) source target]
protected def refl (α : Type _) [TopologicalSpace α] : LocalHomeomorph α α :=
(Homeomorph.refl α).toLocalHomeomorph
#align local_homeomorph.refl LocalHomeomorph.refl
--- porting note: todo: see #2350
-attribute [mfld_simps] refl_apply
-
@[simp, mfld_simps]
theorem refl_localEquiv : (LocalHomeomorph.refl α).toLocalEquiv = LocalEquiv.refl α :=
rfl
@@ -763,7 +753,7 @@ section
variable {s : Set α} (hs : IsOpen s)
/-- The identity local equiv on a set `s` -/
-@[simps! (config := mfld_cfg) apply, simps! (config := { attrs := [] }) source target]
+@[simps! (config := mfld_cfg) apply, simps! (config := .lemmasOnly) source target]
def ofSet (s : Set α) (hs : IsOpen s) : LocalHomeomorph α α where
toLocalEquiv := LocalEquiv.ofSet s
open_source := hs
@@ -772,9 +762,6 @@ def ofSet (s : Set α) (hs : IsOpen s) : LocalHomeomorph α α where
continuous_invFun := continuous_id.continuousOn
#align local_homeomorph.of_set LocalHomeomorph.ofSet
--- porting note: todo: see #2350
-attribute [mfld_simps] ofSet_apply
-
@[simp, mfld_simps]
theorem ofSet_toLocalEquiv : (ofSet s hs).toLocalEquiv = LocalEquiv.ofSet s :=
rfl
@@ -1023,7 +1010,7 @@ section Prod
/-- The product of two local homeomorphisms, as a local homeomorphism on the product space. -/
@[simps! (config := mfld_cfg) toLocalEquiv apply,
- simps! (config := { attrs := [] }) source target symm_apply]
+ simps! (config := .lemmasOnly) source target symm_apply]
def prod (e : LocalHomeomorph α β) (e' : LocalHomeomorph γ δ) :
LocalHomeomorph (α × γ) (β × δ) where
open_source := e.open_source.prod e'.open_source
@@ -1033,9 +1020,6 @@ def prod (e : LocalHomeomorph α β) (e' : LocalHomeomorph γ δ) :
toLocalEquiv := e.toLocalEquiv.prod e'.toLocalEquiv
#align local_homeomorph.prod LocalHomeomorph.prod
--- porting note: todo: see #2350
-attribute [mfld_simps] prod_toLocalEquiv prod_apply
-
@[simp, mfld_simps]
theorem prod_symm (e : LocalHomeomorph α β) (e' : LocalHomeomorph γ δ) :
(e.prod e').symm = e.symm.prod e'.symm :=
@@ -1270,10 +1254,6 @@ def toHomeomorphOfSourceEqUnivTargetEqUniv (h : e.source = (univ : Set α)) (h'
simpa only [continuous_iff_continuousOn_univ, h'] using e.continuousOn_symm
#align local_homeomorph.to_homeomorph_of_source_eq_univ_target_eq_univ LocalHomeomorph.toHomeomorphOfSourceEqUnivTargetEqUniv
--- porting note: todo: see #2350
-attribute [mfld_simps] toHomeomorphOfSourceEqUnivTargetEqUniv_apply
- toHomeomorphOfSourceEqUnivTargetEqUniv_symm_apply
-
/-- A local homeomorphism whose source is all of `α` defines an open embedding of `α` into `β`. The
converse is also true; see `OpenEmbedding.toLocalHomeomorph`. -/
theorem to_openEmbedding (h : e.source = Set.univ) : OpenEmbedding e := by
@@ -1326,9 +1306,6 @@ noncomputable def toLocalHomeomorph [Nonempty α] : LocalHomeomorph α β :=
h.continuous.continuousOn h.isOpenMap isOpen_univ
#align open_embedding.to_local_homeomorph OpenEmbedding.toLocalHomeomorph
--- porting note: todo: see #2350
-attribute [mfld_simps] toLocalHomeomorph_apply toLocalHomeomorph_source toLocalHomeomorph_target
-
theorem continuousAt_iff {f : α → β} {g : β → γ} (hf : OpenEmbedding f) {x : α} :
ContinuousAt (g ∘ f) x ↔ ContinuousAt g (f x) :=
hf.tendsto_nhds_iff'
initialize_simps_projections
now by default generates all projections of all parent structures, and doesn't generate the projections to those parent structures.TwoPointed
)Internal changes:
ParsedProjectionData
to avoid the bug reported here (and to another bug where it seemed that the wrong data was inserted in ParsedProjectionData
, but it was hard to minimize because of all the crashes). If we manage to fix the bug in that Zulip thread, I'll see if I can track down the other bug in commit 97454284Co-authored-by: Johan Commelin <johan@commelin.net>
@@ -96,9 +96,7 @@ def Simps.apply (e : LocalHomeomorph α β) : α → β := e
def Simps.symm_apply (e : LocalHomeomorph α β) : β → α := e.symm
#align local_homeomorph.simps.symm_apply LocalHomeomorph.Simps.symm_apply
-initialize_simps_projections LocalHomeomorph (toLocalEquiv_toFun → apply,
- toLocalEquiv_invFun → symm_apply, toLocalEquiv_source → source, toLocalEquiv_target → target,
- -toLocalEquiv)
+initialize_simps_projections LocalHomeomorph (toFun → apply, invFun → symm_apply)
protected theorem continuousOn : ContinuousOn e e.source :=
e.continuous_toFun
The unported dependencies are