# Documentation

Mathlib.Topology.LocalHomeomorph

# Local 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 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.

As in equivs, we register a coercion to functions, and we use e x and e.symm x throughout 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

## Implementation notes #

Most statements are copied from their LocalEquiv versions, although some care is required especially when restricting to subsets, as these should be open subsets.

For design notes, see LocalEquiv.lean.

### Local coding conventions #

If a lemma deals with the intersection of a set with either source or target of a LocalEquiv, then it should use e.source ∩ s or e.target ∩ t, not s ∩ e.source or t ∩ e.target.

structure LocalHomeomorph (α : Type u_5) (β : Type u_6) [] [] extends :
Type (max u_5 u_6)
• toFun : αβ
• invFun : βα
• source : Set α
• target : Set β
• map_source' : ∀ ⦃x : α⦄, x s.sources.toLocalEquiv x s.target
• map_target' : ∀ ⦃x : β⦄, x s.targetLocalEquiv.invFun s.toLocalEquiv x s.source
• left_inv' : ∀ ⦃x : α⦄, x s.sourceLocalEquiv.invFun s.toLocalEquiv (s.toLocalEquiv x) = x
• right_inv' : ∀ ⦃x : β⦄, x s.targets.toLocalEquiv (LocalEquiv.invFun s.toLocalEquiv x) = x
• open_source : IsOpen s.source
• open_target : IsOpen s.target
• continuous_toFun : ContinuousOn (s.toLocalEquiv) s.source
• continuous_invFun : ContinuousOn s.invFun s.target

local homeomorphisms, defined on open subsets of the space

Instances For
def LocalHomeomorph.toFun' {α : Type u_1} {β : Type u_2} [] [] (e : ) :
αβ

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.

Instances For
instance LocalHomeomorph.instCoeFunLocalHomeomorphForAll {α : Type u_1} {β : Type u_2} [] [] :
CoeFun () fun x => αβ

Coercion of a LocalHomeomorph to function. Note that a LocalHomeomorph is not FunLike.

def LocalHomeomorph.symm {α : Type u_1} {β : Type u_2} [] [] (e : ) :

The inverse of a local homeomorphism

Instances For
def LocalHomeomorph.Simps.apply {α : Type u_1} {β : Type u_2} [] [] (e : ) :
αβ

See Note [custom simps projection]. We need to specify this projection explicitly in this case, because it is a composition of multiple projections.

Instances For
def LocalHomeomorph.Simps.symm_apply {α : Type u_1} {β : Type u_2} [] [] (e : ) :
βα

See Note [custom simps projection]

Instances For
theorem LocalHomeomorph.continuousOn {α : Type u_1} {β : Type u_2} [] [] (e : ) :
ContinuousOn (e) e.source
theorem LocalHomeomorph.continuousOn_symm {α : Type u_1} {β : Type u_2} [] [] (e : ) :
ContinuousOn (↑()) e.target
@[simp]
theorem LocalHomeomorph.mk_coe {α : Type u_1} {β : Type u_2} [] [] (e : ) (a : IsOpen e.source) (b : IsOpen e.target) (c : ContinuousOn (e) e.source) (d : ContinuousOn e.invFun e.target) :
{ toLocalEquiv := e, open_source := a, open_target := b, continuous_toFun := c, continuous_invFun := d } = e
@[simp]
theorem LocalHomeomorph.mk_coe_symm {α : Type u_1} {β : Type u_2} [] [] (e : ) (a : IsOpen e.source) (b : IsOpen e.target) (c : ContinuousOn (e) e.source) (d : ContinuousOn e.invFun e.target) :
↑(LocalHomeomorph.symm { toLocalEquiv := e, open_source := a, open_target := b, continuous_toFun := c, continuous_invFun := d }) = ↑()
theorem LocalHomeomorph.toLocalEquiv_injective {α : Type u_1} {β : Type u_2} [] [] :
Function.Injective LocalHomeomorph.toLocalEquiv
@[simp]
theorem LocalHomeomorph.toFun_eq_coe {α : Type u_1} {β : Type u_2} [] [] (e : ) :
e.toLocalEquiv = e
@[simp]
theorem LocalHomeomorph.invFun_eq_coe {α : Type u_1} {β : Type u_2} [] [] (e : ) :
e.invFun = ↑()
@[simp]
theorem LocalHomeomorph.coe_coe {α : Type u_1} {β : Type u_2} [] [] (e : ) :
e.toLocalEquiv = e
@[simp]
theorem LocalHomeomorph.coe_coe_symm {α : Type u_1} {β : Type u_2} [] [] (e : ) :
↑(LocalEquiv.symm e.toLocalEquiv) = ↑()
@[simp]
theorem LocalHomeomorph.map_source {α : Type u_1} {β : Type u_2} [] [] (e : ) {x : α} (h : x e.source) :
e x e.target
@[simp]
theorem LocalHomeomorph.map_target {α : Type u_1} {β : Type u_2} [] [] (e : ) {x : β} (h : x e.target) :
↑() x e.source
@[simp]
theorem LocalHomeomorph.left_inv {α : Type u_1} {β : Type u_2} [] [] (e : ) {x : α} (h : x e.source) :
↑() (e x) = x
@[simp]
theorem LocalHomeomorph.right_inv {α : Type u_1} {β : Type u_2} [] [] (e : ) {x : β} (h : x e.target) :
e (↑() x) = x
theorem LocalHomeomorph.eq_symm_apply {α : Type u_1} {β : Type u_2} [] [] (e : ) {x : α} {y : β} (hx : x e.source) (hy : y e.target) :
x = ↑() y e x = y
theorem LocalHomeomorph.mapsTo {α : Type u_1} {β : Type u_2} [] [] (e : ) :
Set.MapsTo (e) e.source e.target
theorem LocalHomeomorph.symm_mapsTo {α : Type u_1} {β : Type u_2} [] [] (e : ) :
Set.MapsTo (↑()) e.target e.source
theorem LocalHomeomorph.leftInvOn {α : Type u_1} {β : Type u_2} [] [] (e : ) :
Set.LeftInvOn (↑()) (e) e.source
theorem LocalHomeomorph.rightInvOn {α : Type u_1} {β : Type u_2} [] [] (e : ) :
Set.RightInvOn (↑()) (e) e.target
theorem LocalHomeomorph.invOn {α : Type u_1} {β : Type u_2} [] [] (e : ) :
Set.InvOn (↑()) (e) e.source e.target
theorem LocalHomeomorph.injOn {α : Type u_1} {β : Type u_2} [] [] (e : ) :
Set.InjOn (e) e.source
theorem LocalHomeomorph.bijOn {α : Type u_1} {β : Type u_2} [] [] (e : ) :
Set.BijOn (e) e.source e.target
theorem LocalHomeomorph.surjOn {α : Type u_1} {β : Type u_2} [] [] (e : ) :
Set.SurjOn (e) e.source e.target
@[simp]
theorem Homeomorph.toLocalHomeomorphOfImageEq_toLocalEquiv {α : Type u_1} {β : Type u_2} [] [] (e : α ≃ₜ β) (s : Set α) (hs : ) (t : Set β) (h : e '' s = t) :
().toLocalEquiv = Equiv.toLocalEquivOfImageEq e.toEquiv s t h
@[simp]
theorem Homeomorph.toLocalHomeomorphOfImageEq_symm_apply {α : Type u_1} {β : Type u_2} [] [] (e : α ≃ₜ β) (s : Set α) (hs : ) (t : Set β) (h : e '' s = t) :
↑() = ↑()
@[simp]
theorem Homeomorph.toLocalHomeomorphOfImageEq_apply {α : Type u_1} {β : Type u_2} [] [] (e : α ≃ₜ β) (s : Set α) (hs : ) (t : Set β) (h : e '' s = t) :
↑() = e
theorem Homeomorph.toLocalHomeomorphOfImageEq_source {α : Type u_1} {β : Type u_2} [] [] (e : α ≃ₜ β) (s : Set α) (hs : ) (t : Set β) (h : e '' s = t) :
().toLocalEquiv.source = s
theorem Homeomorph.toLocalHomeomorphOfImageEq_target {α : Type u_1} {β : Type u_2} [] [] (e : α ≃ₜ β) (s : Set α) (hs : ) (t : Set β) (h : e '' s = t) :
().toLocalEquiv.target = t
def Homeomorph.toLocalHomeomorphOfImageEq {α : Type u_1} {β : Type u_2} [] [] (e : α ≃ₜ β) (s : Set α) (hs : ) (t : Set β) (h : e '' s = t) :

Interpret a Homeomorph as a LocalHomeomorph by restricting it to an open set s in the domain and to t in the codomain.

Instances For
@[simp]
theorem Homeomorph.toLocalHomeomorph_symm_apply {α : Type u_1} {β : Type u_2} [] [] (e : α ≃ₜ β) :
@[simp]
theorem Homeomorph.toLocalHomeomorph_apply {α : Type u_1} {β : Type u_2} [] [] (e : α ≃ₜ β) :
@[simp]
theorem Homeomorph.toLocalHomeomorph_source {α : Type u_1} {β : Type u_2} [] [] (e : α ≃ₜ β) :
().toLocalEquiv.source = Set.univ
@[simp]
theorem Homeomorph.toLocalHomeomorph_target {α : Type u_1} {β : Type u_2} [] [] (e : α ≃ₜ β) :
().toLocalEquiv.target = Set.univ
def Homeomorph.toLocalHomeomorph {α : Type u_1} {β : Type u_2} [] [] (e : α ≃ₜ β) :

A homeomorphism induces a local homeomorphism on the whole space

Instances For
def LocalHomeomorph.replaceEquiv {α : Type u_1} {β : Type u_2} [] [] (e : ) (e' : ) (h : e.toLocalEquiv = e') :

Replace toLocalEquiv field to provide better definitional equalities.

Instances For
theorem LocalHomeomorph.replaceEquiv_eq_self {α : Type u_1} {β : Type u_2} [] [] (e : ) (e' : ) (h : e.toLocalEquiv = e') :
= e
theorem LocalHomeomorph.source_preimage_target {α : Type u_1} {β : Type u_2} [] [] (e : ) :
e.source e ⁻¹' e.target
@[deprecated LocalHomeomorph.toLocalEquiv_injective]
theorem LocalHomeomorph.eq_of_localEquiv_eq {α : Type u_1} {β : Type u_2} [] [] {e : } {e' : } (h : e.toLocalEquiv = e'.toLocalEquiv) :
e = e'
theorem LocalHomeomorph.eventually_left_inverse {α : Type u_1} {β : Type u_2} [] [] (e : ) {x : α} (hx : x e.source) :
∀ᶠ (y : α) in nhds x, ↑() (e y) = y
theorem LocalHomeomorph.eventually_left_inverse' {α : Type u_1} {β : Type u_2} [] [] (e : ) {x : β} (hx : x e.target) :
∀ᶠ (y : α) in nhds (↑() x), ↑() (e y) = y
theorem LocalHomeomorph.eventually_right_inverse {α : Type u_1} {β : Type u_2} [] [] (e : ) {x : β} (hx : x e.target) :
∀ᶠ (y : β) in nhds x, e (↑() y) = y
theorem LocalHomeomorph.eventually_right_inverse' {α : Type u_1} {β : Type u_2} [] [] (e : ) {x : α} (hx : x e.source) :
∀ᶠ (y : β) in nhds (e x), e (↑() y) = y
theorem LocalHomeomorph.eventually_ne_nhdsWithin {α : Type u_1} {β : Type u_2} [] [] (e : ) {x : α} (hx : x e.source) :
∀ᶠ (x' : α) in nhdsWithin x {x}, e x' e x
theorem LocalHomeomorph.nhdsWithin_source_inter {α : Type u_1} {β : Type u_2} [] [] (e : ) {x : α} (hx : x e.source) (s : Set α) :
nhdsWithin x (e.source s) =
theorem LocalHomeomorph.nhdsWithin_target_inter {α : Type u_1} {β : Type u_2} [] [] (e : ) {x : β} (hx : x e.target) (s : Set β) :
nhdsWithin x (e.target s) =
theorem LocalHomeomorph.image_eq_target_inter_inv_preimage {α : Type u_1} {β : Type u_2} [] [] (e : ) {s : Set α} (h : s e.source) :
e '' s = e.target ↑() ⁻¹' s
theorem LocalHomeomorph.image_source_inter_eq' {α : Type u_1} {β : Type u_2} [] [] (e : ) (s : Set α) :
e '' (e.source s) = e.target ↑() ⁻¹' s
theorem LocalHomeomorph.image_source_inter_eq {α : Type u_1} {β : Type u_2} [] [] (e : ) (s : Set α) :
e '' (e.source s) = e.target ↑() ⁻¹' (e.source s)
theorem LocalHomeomorph.symm_image_eq_source_inter_preimage {α : Type u_1} {β : Type u_2} [] [] (e : ) {s : Set β} (h : s e.target) :
↑() '' s = e.source e ⁻¹' s
theorem LocalHomeomorph.symm_image_target_inter_eq {α : Type u_1} {β : Type u_2} [] [] (e : ) (s : Set β) :
↑() '' (e.target s) = e.source e ⁻¹' (e.target s)
theorem LocalHomeomorph.source_inter_preimage_inv_preimage {α : Type u_1} {β : Type u_2} [] [] (e : ) (s : Set α) :
e.source e ⁻¹' (↑() ⁻¹' s) = e.source s
theorem LocalHomeomorph.target_inter_inv_preimage_preimage {α : Type u_1} {β : Type u_2} [] [] (e : ) (s : Set β) :
e.target ↑() ⁻¹' (e ⁻¹' s) = e.target s
theorem LocalHomeomorph.source_inter_preimage_target_inter {α : Type u_1} {β : Type u_2} [] [] (e : ) (s : Set β) :
e.source e ⁻¹' (e.target s) = e.source e ⁻¹' s
theorem LocalHomeomorph.image_source_eq_target {α : Type u_1} {β : Type u_2} [] [] (e : ) :
e '' e.source = e.target
theorem LocalHomeomorph.symm_image_target_eq_source {α : Type u_1} {β : Type u_2} [] [] (e : ) :
↑() '' e.target = e.source
theorem LocalHomeomorph.ext {α : Type u_1} {β : Type u_2} [] [] (e : ) (e' : ) (h : ∀ (x : α), e x = e' x) (hinv : ∀ (x : β), ↑() x = ↑() x) (hs : e.source = e'.source) :
e = e'

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.

theorem LocalHomeomorph.ext_iff {α : Type u_1} {β : Type u_2} [] [] {e : } {e' : } :
e = e' (∀ (x : α), e x = e' x) (∀ (x : β), ↑() x = ↑() x) e.source = e'.source
@[simp]
theorem LocalHomeomorph.symm_toLocalEquiv {α : Type u_1} {β : Type u_2} [] [] (e : ) :
().toLocalEquiv = LocalEquiv.symm e.toLocalEquiv
theorem LocalHomeomorph.symm_source {α : Type u_1} {β : Type u_2} [] [] (e : ) :
().toLocalEquiv.source = e.target
theorem LocalHomeomorph.symm_target {α : Type u_1} {β : Type u_2} [] [] (e : ) :
().toLocalEquiv.target = e.source
@[simp]
theorem LocalHomeomorph.symm_symm {α : Type u_1} {β : Type u_2} [] [] (e : ) :
theorem LocalHomeomorph.continuousAt {α : Type u_1} {β : Type u_2} [] [] (e : ) {x : α} (h : x e.source) :
ContinuousAt (e) x

A local homeomorphism is continuous at any point of its source

theorem LocalHomeomorph.continuousAt_symm {α : Type u_1} {β : Type u_2} [] [] (e : ) {x : β} (h : x e.target) :
ContinuousAt (↑()) x

A local homeomorphism inverse is continuous at any point of its target

theorem LocalHomeomorph.tendsto_symm {α : Type u_1} {β : Type u_2} [] [] (e : ) {x : α} (hx : x e.source) :
Filter.Tendsto (↑()) (nhds (e x)) (nhds x)
theorem LocalHomeomorph.map_nhds_eq {α : Type u_1} {β : Type u_2} [] [] (e : ) {x : α} (hx : x e.source) :
Filter.map (e) (nhds x) = nhds (e x)
theorem LocalHomeomorph.symm_map_nhds_eq {α : Type u_1} {β : Type u_2} [] [] (e : ) {x : α} (hx : x e.source) :
Filter.map (↑()) (nhds (e x)) = nhds x
theorem LocalHomeomorph.image_mem_nhds {α : Type u_1} {β : Type u_2} [] [] (e : ) {x : α} (hx : x e.source) {s : Set α} (hs : s nhds x) :
e '' s nhds (e x)
theorem LocalHomeomorph.map_nhdsWithin_eq {α : Type u_1} {β : Type u_2} [] [] (e : ) {x : α} (hx : x e.source) (s : Set α) :
Filter.map (e) () = nhdsWithin (e x) (e '' (e.source s))
theorem LocalHomeomorph.map_nhdsWithin_preimage_eq {α : Type u_1} {β : Type u_2} [] [] (e : ) {x : α} (hx : x e.source) (s : Set β) :
Filter.map (e) (nhdsWithin x (e ⁻¹' s)) = nhdsWithin (e x) s
theorem LocalHomeomorph.eventually_nhds {α : Type u_1} {β : Type u_2} [] [] (e : ) {x : α} (p : βProp) (hx : x e.source) :
(∀ᶠ (y : β) in nhds (e x), p y) ∀ᶠ (x : α) in nhds x, p (e x)
theorem LocalHomeomorph.eventually_nhds' {α : Type u_1} {β : Type u_2} [] [] (e : ) {x : α} (p : αProp) (hx : x e.source) :
(∀ᶠ (y : β) in nhds (e x), p (↑() y)) ∀ᶠ (x : α) in nhds x, p x
theorem LocalHomeomorph.eventually_nhdsWithin {α : Type u_1} {β : Type u_2} [] [] (e : ) {x : α} (p : βProp) {s : Set α} (hx : x e.source) :
(∀ᶠ (y : β) in nhdsWithin (e x) (↑() ⁻¹' s), p y) ∀ᶠ (x : α) in , p (e x)
theorem LocalHomeomorph.eventually_nhdsWithin' {α : Type u_1} {β : Type u_2} [] [] (e : ) {x : α} (p : αProp) {s : Set α} (hx : x e.source) :
(∀ᶠ (y : β) in nhdsWithin (e x) (↑() ⁻¹' s), p (↑() y)) ∀ᶠ (x : α) in , p x
theorem LocalHomeomorph.preimage_eventuallyEq_target_inter_preimage_inter {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] {e : } {s : Set α} {t : Set γ} {x : α} {f : αγ} (hf : ) (hxe : x e.source) (ht : t nhds (f x)) :
↑() ⁻¹' s =ᶠ[nhds (e x)] e.target ↑() ⁻¹' (s f ⁻¹' t)

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 LocalHomeomorph.preimage_open_of_open {α : Type u_1} {β : Type u_2} [] [] (e : ) {s : Set β} (hs : ) :
IsOpen (e.source e ⁻¹' s)

### LocalHomeomorph.IsImage relation #

We say that t : Set β is an image of s : Set α under a local 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.

def LocalHomeomorph.IsImage {α : Type u_1} {β : Type u_2} [] [] (e : ) (s : Set α) (t : Set β) :

We say that t : Set β is an image of s : Set α under a local 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).
Instances For
theorem LocalHomeomorph.IsImage.toLocalEquiv {α : Type u_1} {β : Type u_2} [] [] {e : } {s : Set α} {t : Set β} (h : ) :
LocalEquiv.IsImage e.toLocalEquiv s t
theorem LocalHomeomorph.IsImage.apply_mem_iff {α : Type u_1} {β : Type u_2} [] [] {e : } {s : Set α} {t : Set β} {x : α} (h : ) (hx : x e.source) :
e x t x s
theorem LocalHomeomorph.IsImage.symm {α : Type u_1} {β : Type u_2} [] [] {e : } {s : Set α} {t : Set β} (h : ) :
theorem LocalHomeomorph.IsImage.symm_apply_mem_iff {α : Type u_1} {β : Type u_2} [] [] {e : } {s : Set α} {t : Set β} {y : β} (h : ) (hy : y e.target) :
↑() y s y t
@[simp]
theorem LocalHomeomorph.IsImage.symm_iff {α : Type u_1} {β : Type u_2} [] [] {e : } {s : Set α} {t : Set β} :
theorem LocalHomeomorph.IsImage.mapsTo {α : Type u_1} {β : Type u_2} [] [] {e : } {s : Set α} {t : Set β} (h : ) :
Set.MapsTo (e) (e.source s) (e.target t)
theorem LocalHomeomorph.IsImage.symm_mapsTo {α : Type u_1} {β : Type u_2} [] [] {e : } {s : Set α} {t : Set β} (h : ) :
Set.MapsTo (↑()) (e.target t) (e.source s)
theorem LocalHomeomorph.IsImage.image_eq {α : Type u_1} {β : Type u_2} [] [] {e : } {s : Set α} {t : Set β} (h : ) :
e '' (e.source s) = e.target t
theorem LocalHomeomorph.IsImage.symm_image_eq {α : Type u_1} {β : Type u_2} [] [] {e : } {s : Set α} {t : Set β} (h : ) :
↑() '' (e.target t) = e.source s
theorem LocalHomeomorph.IsImage.iff_preimage_eq {α : Type u_1} {β : Type u_2} [] [] {e : } {s : Set α} {t : Set β} :
e.source e ⁻¹' t = e.source s
theorem LocalHomeomorph.IsImage.of_preimage_eq {α : Type u_1} {β : Type u_2} [] [] {e : } {s : Set α} {t : Set β} :
e.source e ⁻¹' t = e.source s

Alias of the reverse direction of LocalHomeomorph.IsImage.iff_preimage_eq.

theorem LocalHomeomorph.IsImage.preimage_eq {α : Type u_1} {β : Type u_2} [] [] {e : } {s : Set α} {t : Set β} :
e.source e ⁻¹' t = e.source s

Alias of the forward direction of LocalHomeomorph.IsImage.iff_preimage_eq.

theorem LocalHomeomorph.IsImage.iff_symm_preimage_eq {α : Type u_1} {β : Type u_2} [] [] {e : } {s : Set α} {t : Set β} :
e.target ↑() ⁻¹' s = e.target t
theorem LocalHomeomorph.IsImage.symm_preimage_eq {α : Type u_1} {β : Type u_2} [] [] {e : } {s : Set α} {t : Set β} :
e.target ↑() ⁻¹' s = e.target t

Alias of the forward direction of LocalHomeomorph.IsImage.iff_symm_preimage_eq.

theorem LocalHomeomorph.IsImage.of_symm_preimage_eq {α : Type u_1} {β : Type u_2} [] [] {e : } {s : Set α} {t : Set β} :
e.target ↑() ⁻¹' s = e.target t

Alias of the reverse direction of LocalHomeomorph.IsImage.iff_symm_preimage_eq.

theorem LocalHomeomorph.IsImage.iff_symm_preimage_eq' {α : Type u_1} {β : Type u_2} [] [] {e : } {s : Set α} {t : Set β} :
e.target ↑() ⁻¹' (e.source s) = e.target t
theorem LocalHomeomorph.IsImage.of_symm_preimage_eq' {α : Type u_1} {β : Type u_2} [] [] {e : } {s : Set α} {t : Set β} :
e.target ↑() ⁻¹' (e.source s) = e.target t

Alias of the reverse direction of LocalHomeomorph.IsImage.iff_symm_preimage_eq'.

theorem LocalHomeomorph.IsImage.symm_preimage_eq' {α : Type u_1} {β : Type u_2} [] [] {e : } {s : Set α} {t : Set β} :
e.target ↑() ⁻¹' (e.source s) = e.target t

Alias of the forward direction of LocalHomeomorph.IsImage.iff_symm_preimage_eq'.

theorem LocalHomeomorph.IsImage.iff_preimage_eq' {α : Type u_1} {β : Type u_2} [] [] {e : } {s : Set α} {t : Set β} :
e.source e ⁻¹' (e.target t) = e.source s
theorem LocalHomeomorph.IsImage.preimage_eq' {α : Type u_1} {β : Type u_2} [] [] {e : } {s : Set α} {t : Set β} :
e.source e ⁻¹' (e.target t) = e.source s

Alias of the forward direction of LocalHomeomorph.IsImage.iff_preimage_eq'.

theorem LocalHomeomorph.IsImage.of_preimage_eq' {α : Type u_1} {β : Type u_2} [] [] {e : } {s : Set α} {t : Set β} :
e.source e ⁻¹' (e.target t) = e.source s

Alias of the reverse direction of LocalHomeomorph.IsImage.iff_preimage_eq'.

theorem LocalHomeomorph.IsImage.of_image_eq {α : Type u_1} {β : Type u_2} [] [] {e : } {s : Set α} {t : Set β} (h : e '' (e.source s) = e.target t) :
theorem LocalHomeomorph.IsImage.of_symm_image_eq {α : Type u_1} {β : Type u_2} [] [] {e : } {s : Set α} {t : Set β} (h : ↑() '' (e.target t) = e.source s) :
theorem LocalHomeomorph.IsImage.compl {α : Type u_1} {β : Type u_2} [] [] {e : } {s : Set α} {t : Set β} (h : ) :
theorem LocalHomeomorph.IsImage.inter {α : Type u_1} {β : Type u_2} [] [] {e : } {s : Set α} {t : Set β} {s' : Set α} {t' : Set β} (h : ) (h' : ) :
theorem LocalHomeomorph.IsImage.union {α : Type u_1} {β : Type u_2} [] [] {e : } {s : Set α} {t : Set β} {s' : Set α} {t' : Set β} (h : ) (h' : ) :
theorem LocalHomeomorph.IsImage.diff {α : Type u_1} {β : Type u_2} [] [] {e : } {s : Set α} {t : Set β} {s' : Set α} {t' : Set β} (h : ) (h' : ) :
LocalHomeomorph.IsImage e (s \ s') (t \ t')
theorem LocalHomeomorph.IsImage.leftInvOn_piecewise {α : Type u_1} {β : Type u_2} [] [] {e : } {s : Set α} {t : Set β} {e' : } [(i : α) → Decidable (i s)] [(i : β) → Decidable (i t)] (h : ) (h' : ) :
Set.LeftInvOn () (Set.piecewise s e e') (Set.ite s e.source e'.source)
theorem LocalHomeomorph.IsImage.inter_eq_of_inter_eq_of_eqOn {α : Type u_1} {β : Type u_2} [] [] {e : } {s : Set α} {t : Set β} {e' : } (h : ) (h' : ) (hs : e.source s = e'.source s) (Heq : Set.EqOn (e) (e') (e.source s)) :
e.target t = e'.target t
theorem LocalHomeomorph.IsImage.symm_eqOn_of_inter_eq_of_eqOn {α : Type u_1} {β : Type u_2} [] [] {e : } {s : Set α} {t : Set β} {e' : } (h : ) (hs : e.source s = e'.source s) (Heq : Set.EqOn (e) (e') (e.source s)) :
Set.EqOn (↑()) (↑()) (e.target t)
theorem LocalHomeomorph.IsImage.map_nhdsWithin_eq {α : Type u_1} {β : Type u_2} [] [] {e : } {s : Set α} {t : Set β} {x : α} (h : ) (hx : x e.source) :
Filter.map (e) () = nhdsWithin (e x) t
theorem LocalHomeomorph.IsImage.closure {α : Type u_1} {β : Type u_2} [] [] {e : } {s : Set α} {t : Set β} (h : ) :
theorem LocalHomeomorph.IsImage.interior {α : Type u_1} {β : Type u_2} [] [] {e : } {s : Set α} {t : Set β} (h : ) :
theorem LocalHomeomorph.IsImage.frontier {α : Type u_1} {β : Type u_2} [] [] {e : } {s : Set α} {t : Set β} (h : ) :
theorem LocalHomeomorph.IsImage.isOpen_iff {α : Type u_1} {β : Type u_2} [] [] {e : } {s : Set α} {t : Set β} (h : ) :
IsOpen (e.source s) IsOpen (e.target t)
@[simp]
theorem LocalHomeomorph.IsImage.restr_toLocalEquiv {α : Type u_1} {β : Type u_2} [] [] {e : } {s : Set α} {t : Set β} (h : ) (hs : IsOpen (e.source s)) :
().toLocalEquiv = LocalEquiv.IsImage.restr (_ : LocalEquiv.IsImage e.toLocalEquiv s t)
def LocalHomeomorph.IsImage.restr {α : Type u_1} {β : Type u_2} [] [] {e : } {s : Set α} {t : Set β} (h : ) (hs : IsOpen (e.source s)) :

Restrict a LocalHomeomorph to a pair of corresponding open sets.

Instances For
theorem LocalHomeomorph.isImage_source_target {α : Type u_1} {β : Type u_2} [] [] (e : ) :
LocalHomeomorph.IsImage e e.source e.target
theorem LocalHomeomorph.isImage_source_target_of_disjoint {α : Type u_1} {β : Type u_2} [] [] (e : ) (e' : ) (hs : Disjoint e.source e'.source) (ht : Disjoint e.target e'.target) :
LocalHomeomorph.IsImage e e'.source e'.target
theorem LocalHomeomorph.preimage_interior {α : Type u_1} {β : Type u_2} [] [] (e : ) (s : Set β) :
e.source e ⁻¹' = e.source interior (e ⁻¹' s)

Preimage of interior or interior of preimage coincide for local homeomorphisms, when restricted to the source.

theorem LocalHomeomorph.preimage_closure {α : Type u_1} {β : Type u_2} [] [] (e : ) (s : Set β) :
e.source e ⁻¹' = e.source closure (e ⁻¹' s)
theorem LocalHomeomorph.preimage_frontier {α : Type u_1} {β : Type u_2} [] [] (e : ) (s : Set β) :
e.source e ⁻¹' = e.source frontier (e ⁻¹' s)
theorem LocalHomeomorph.preimage_open_of_open_symm {α : Type u_1} {β : Type u_2} [] [] (e : ) {s : Set α} (hs : ) :
IsOpen (e.target ↑() ⁻¹' s)
theorem LocalHomeomorph.image_open_of_open {α : Type u_1} {β : Type u_2} [] [] (e : ) {s : Set α} (hs : ) (h : s e.source) :
IsOpen (e '' s)

The image of an open set in the source is open.

theorem LocalHomeomorph.image_open_of_open' {α : Type u_1} {β : Type u_2} [] [] (e : ) {s : Set α} (hs : ) :
IsOpen (e '' (e.source s))

The image of the restriction of an open set to the source is open.

def LocalHomeomorph.ofContinuousOpenRestrict {α : Type u_1} {β : Type u_2} [] [] (e : ) (hc : ContinuousOn (e) e.source) (ho : IsOpenMap (Set.restrict e.source e)) (hs : IsOpen e.source) :

A LocalEquiv with continuous open forward map and an open source is a LocalHomeomorph.

Instances For
def LocalHomeomorph.ofContinuousOpen {α : Type u_1} {β : Type u_2} [] [] (e : ) (hc : ContinuousOn (e) e.source) (ho : ) (hs : IsOpen e.source) :

A LocalEquiv with continuous open forward map and an open source is a LocalHomeomorph.

Instances For
def LocalHomeomorph.restrOpen {α : Type u_1} {β : Type u_2} [] [] (e : ) (s : Set α) (hs : ) :

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

Instances For
@[simp]
theorem LocalHomeomorph.restrOpen_toLocalEquiv {α : Type u_1} {β : Type u_2} [] [] (e : ) (s : Set α) (hs : ) :
().toLocalEquiv = LocalEquiv.restr e.toLocalEquiv s
theorem LocalHomeomorph.restrOpen_source {α : Type u_1} {β : Type u_2} [] [] (e : ) (s : Set α) (hs : ) :
().toLocalEquiv.source = e.source s
@[simp]
theorem LocalHomeomorph.restr_symm_apply {α : Type u_1} {β : Type u_2} [] [] (e : ) (s : Set α) :
@[simp]
theorem LocalHomeomorph.restr_apply {α : Type u_1} {β : Type u_2} [] [] (e : ) (s : Set α) :
↑() = e
theorem LocalHomeomorph.restr_source {α : Type u_1} {β : Type u_2} [] [] (e : ) (s : Set α) :
().toLocalEquiv.source = e.source
theorem LocalHomeomorph.restr_target {α : Type u_1} {β : Type u_2} [] [] (e : ) (s : Set α) :
().toLocalEquiv.target = e.target
def LocalHomeomorph.restr {α : Type u_1} {β : Type u_2} [] [] (e : ) (s : Set α) :

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

Instances For
@[simp]
theorem LocalHomeomorph.restr_toLocalEquiv {α : Type u_1} {β : Type u_2} [] [] (e : ) (s : Set α) :
().toLocalEquiv = LocalEquiv.restr e.toLocalEquiv ()
theorem LocalHomeomorph.restr_source' {α : Type u_1} {β : Type u_2} [] [] (e : ) (s : Set α) (hs : ) :
().toLocalEquiv.source = e.source s
theorem LocalHomeomorph.restr_toLocalEquiv' {α : Type u_1} {β : Type u_2} [] [] (e : ) (s : Set α) (hs : ) :
().toLocalEquiv = LocalEquiv.restr e.toLocalEquiv s
theorem LocalHomeomorph.restr_eq_of_source_subset {α : Type u_1} {β : Type u_2} [] [] {e : } {s : Set α} (h : e.source s) :
@[simp]
theorem LocalHomeomorph.restr_univ {α : Type u_1} {β : Type u_2} [] [] {e : } :
theorem LocalHomeomorph.restr_source_inter {α : Type u_1} {β : Type u_2} [] [] (e : ) (s : Set α) :
LocalHomeomorph.restr e (e.source s) =
@[simp]
theorem LocalHomeomorph.refl_apply (α : Type u_5) [] :
↑() = id
theorem LocalHomeomorph.refl_source (α : Type u_5) [] :
().toLocalEquiv.source = Set.univ
theorem LocalHomeomorph.refl_target (α : Type u_5) [] :
().toLocalEquiv.target = Set.univ
def LocalHomeomorph.refl (α : Type u_5) [] :

The identity on the whole space as a local homeomorphism.

Instances For
@[simp]
theorem LocalHomeomorph.refl_localEquiv {α : Type u_1} [] :
().toLocalEquiv =
@[simp]
theorem LocalHomeomorph.refl_symm {α : Type u_1} [] :
@[simp]
theorem LocalHomeomorph.ofSet_apply {α : Type u_1} [] (s : Set α) (hs : ) :
↑() = id
theorem LocalHomeomorph.ofSet_source {α : Type u_1} [] (s : Set α) (hs : ) :
().toLocalEquiv.source = s
theorem LocalHomeomorph.ofSet_target {α : Type u_1} [] (s : Set α) (hs : ) :
().toLocalEquiv.target = s
def LocalHomeomorph.ofSet {α : Type u_1} [] (s : Set α) (hs : ) :

The identity local equiv on a set s

Instances For
@[simp]
theorem LocalHomeomorph.ofSet_toLocalEquiv {α : Type u_1} [] {s : Set α} (hs : ) :
().toLocalEquiv =
@[simp]
theorem LocalHomeomorph.ofSet_symm {α : Type u_1} [] {s : Set α} (hs : ) :
@[simp]
theorem LocalHomeomorph.ofSet_univ_eq_refl {α : Type u_1} [] :
LocalHomeomorph.ofSet Set.univ (_ : IsOpen Set.univ) =
@[simp]
theorem LocalHomeomorph.trans'_apply {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e : ) (e' : ) (h : e.target = e'.source) :
∀ (a : α), ↑() a = e' (e a)
@[simp]
theorem LocalHomeomorph.trans'_symm_apply {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e : ) (e' : ) (h : e.target = e'.source) :
∀ (a : γ), ↑() a = ↑() (↑() a)
@[simp]
theorem LocalHomeomorph.trans'_toLocalEquiv {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e : ) (e' : ) (h : e.target = e'.source) :
().toLocalEquiv = LocalEquiv.trans' e.toLocalEquiv e'.toLocalEquiv h
theorem LocalHomeomorph.trans'_target {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e : ) (e' : ) (h : e.target = e'.source) :
().toLocalEquiv.target = e'.target
theorem LocalHomeomorph.trans'_source {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e : ) (e' : ) (h : e.target = e'.source) :
().toLocalEquiv.source = e.source
def LocalHomeomorph.trans' {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e : ) (e' : ) (h : e.target = e'.source) :

Composition of two local homeomorphisms when the target of the first and the source of the second coincide.

Instances For
def LocalHomeomorph.trans {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e : ) (e' : ) :

Composing two local homeomorphisms, by restricting to the maximal domain where their composition is well defined.

Instances For
@[simp]
theorem LocalHomeomorph.trans_toLocalEquiv {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e : ) (e' : ) :
().toLocalEquiv = LocalEquiv.trans e.toLocalEquiv e'.toLocalEquiv
@[simp]
theorem LocalHomeomorph.coe_trans {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e : ) (e' : ) :
↑() = e' e
@[simp]
theorem LocalHomeomorph.coe_trans_symm {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e : ) (e' : ) :
↑() = ↑() ↑()
theorem LocalHomeomorph.trans_apply {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e : ) (e' : ) {x : α} :
↑() x = e' (e x)
theorem LocalHomeomorph.trans_symm_eq_symm_trans_symm {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e : ) (e' : ) :
theorem LocalHomeomorph.trans_source {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e : ) (e' : ) :
().toLocalEquiv.source = e.source e ⁻¹' e'.source
theorem LocalHomeomorph.trans_source' {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e : ) (e' : ) :
().toLocalEquiv.source = e.source e ⁻¹' (e.target e'.source)
theorem LocalHomeomorph.trans_source'' {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e : ) (e' : ) :
().toLocalEquiv.source = ↑() '' (e.target e'.source)
theorem LocalHomeomorph.image_trans_source {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e : ) (e' : ) :
e '' ().toLocalEquiv.source = e.target e'.source
theorem LocalHomeomorph.trans_target {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e : ) (e' : ) :
().toLocalEquiv.target = e'.target ↑() ⁻¹' e.target
theorem LocalHomeomorph.trans_target' {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e : ) (e' : ) :
().toLocalEquiv.target = e'.target ↑() ⁻¹' (e'.source e.target)
theorem LocalHomeomorph.trans_target'' {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e : ) (e' : ) :
().toLocalEquiv.target = e' '' (e'.source e.target)
theorem LocalHomeomorph.inv_image_trans_target {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e : ) (e' : ) :
↑() '' ().toLocalEquiv.target = e'.source e.target
theorem LocalHomeomorph.trans_assoc {α : Type u_1} {β : Type u_2} {γ : Type u_3} {δ : Type u_4} [] [] [] [] (e : ) (e' : ) (e'' : ) :
=
@[simp]
theorem LocalHomeomorph.trans_refl {α : Type u_1} {β : Type u_2} [] [] (e : ) :
@[simp]
theorem LocalHomeomorph.refl_trans {α : Type u_1} {β : Type u_2} [] [] (e : ) :
theorem LocalHomeomorph.trans_ofSet {α : Type u_1} {β : Type u_2} [] [] (e : ) {s : Set β} (hs : ) :
theorem LocalHomeomorph.trans_of_set' {α : Type u_1} {β : Type u_2} [] [] (e : ) {s : Set β} (hs : ) :
= LocalHomeomorph.restr e (e.source e ⁻¹' s)
theorem LocalHomeomorph.ofSet_trans {α : Type u_1} {β : Type u_2} [] [] (e : ) {s : Set α} (hs : ) :
theorem LocalHomeomorph.ofSet_trans' {α : Type u_1} {β : Type u_2} [] [] (e : ) {s : Set α} (hs : ) :
= LocalHomeomorph.restr e (e.source s)
@[simp]
theorem LocalHomeomorph.ofSet_trans_ofSet {α : Type u_1} [] {s : Set α} (hs : ) {s' : Set α} (hs' : IsOpen s') :
theorem LocalHomeomorph.restr_trans {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e : ) (e' : ) (s : Set α) :
@[simp]
theorem LocalHomeomorph.transHomeomorph_apply {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e : ) (e' : β ≃ₜ γ) :
↑() = e' e
@[simp]
theorem LocalHomeomorph.transHomeomorph_source {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e : ) (e' : β ≃ₜ γ) :
().toLocalEquiv.source = e.source
@[simp]
theorem LocalHomeomorph.transHomeomorph_symm_apply {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e : ) (e' : β ≃ₜ γ) :
= ↑() ↑()
@[simp]
theorem LocalHomeomorph.transHomeomorph_target {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e : ) (e' : β ≃ₜ γ) :
().toLocalEquiv.target = ↑() ⁻¹' e.target
def LocalHomeomorph.transHomeomorph {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e : ) (e' : β ≃ₜ γ) :

Postcompose a local homeomorphism with a homeomorphism. We modify the source and target to have better definitional behavior.

Instances For
theorem LocalHomeomorph.transHomeomorph_eq_trans {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e : ) (e' : β ≃ₜ γ) :
@[simp]
theorem Homeomorph.transLocalHomeomorph_target {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e' : ) (e : α ≃ₜ β) :
().toLocalEquiv.target = e'.target
@[simp]
theorem Homeomorph.transLocalHomeomorph_symm_apply {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e' : ) (e : α ≃ₜ β) :
= ↑() ↑()
@[simp]
theorem Homeomorph.transLocalHomeomorph_apply {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e' : ) (e : α ≃ₜ β) :
↑() = e' e
@[simp]
theorem Homeomorph.transLocalHomeomorph_source {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e' : ) (e : α ≃ₜ β) :
().toLocalEquiv.source = e ⁻¹' e'.source
def Homeomorph.transLocalHomeomorph {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e' : ) (e : α ≃ₜ β) :

Precompose a local homeomorphism with a homeomorphism. We modify the source and target to have better definitional behavior.

Instances For
theorem Homeomorph.transLocalHomeomorph_eq_trans {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e' : ) (e : α ≃ₜ β) :
def LocalHomeomorph.EqOnSource {α : Type u_1} {β : Type u_2} [] [] (e : ) (e' : ) :

EqOnSource e e' means that e and e' have the same source, and coincide there. They should really be considered the same local equiv.

Instances For
theorem LocalHomeomorph.eqOnSource_iff {α : Type u_1} {β : Type u_2} [] [] (e : ) (e' : ) :
LocalEquiv.EqOnSource e.toLocalEquiv e'.toLocalEquiv
instance LocalHomeomorph.eqOnSourceSetoid {α : Type u_1} {β : Type u_2} [] [] :

EqOnSource is an equivalence relation

theorem LocalHomeomorph.eqOnSource_refl {α : Type u_1} {β : Type u_2} [] [] (e : ) :
e e
theorem LocalHomeomorph.EqOnSource.symm' {α : Type u_1} {β : Type u_2} [] [] {e : } {e' : } (h : e e') :

If two local homeomorphisms are equivalent, so are their inverses

theorem LocalHomeomorph.EqOnSource.source_eq {α : Type u_1} {β : Type u_2} [] [] {e : } {e' : } (h : e e') :
e.source = e'.source

Two equivalent local homeomorphisms have the same source

theorem LocalHomeomorph.EqOnSource.target_eq {α : Type u_1} {β : Type u_2} [] [] {e : } {e' : } (h : e e') :
e.target = e'.target

Two equivalent local homeomorphisms have the same target

theorem LocalHomeomorph.EqOnSource.eqOn {α : Type u_1} {β : Type u_2} [] [] {e : } {e' : } (h : e e') :
Set.EqOn (e) (e') e.source

Two equivalent local homeomorphisms have coinciding toFun on the source

theorem LocalHomeomorph.EqOnSource.symm_eqOn_target {α : Type u_1} {β : Type u_2} [] [] {e : } {e' : } (h : e e') :
Set.EqOn (↑()) (↑()) e.target

Two equivalent local homeomorphisms have coinciding invFun on the target

theorem LocalHomeomorph.EqOnSource.trans' {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] {e : } {e' : } {f : } {f' : } (he : e e') (hf : f f') :

Composition of local homeomorphisms respects equivalence

theorem LocalHomeomorph.EqOnSource.restr {α : Type u_1} {β : Type u_2} [] [] {e : } {e' : } (he : e e') (s : Set α) :

Restriction of local homeomorphisms respects equivalence

theorem LocalHomeomorph.Set.EqOn.restr_eqOn_source {α : Type u_1} {β : Type u_2} [] [] {e : } {e' : } (h : Set.EqOn (e) (e') (e.source e'.source)) :
theorem LocalHomeomorph.trans_self_symm {α : Type u_1} {β : Type u_2} [] [] (e : ) :
LocalHomeomorph.ofSet e.source (_ : IsOpen e.source)

Composition of a local homeomorphism and its inverse is equivalent to the restriction of the identity to the source

theorem LocalHomeomorph.trans_symm_self {α : Type u_1} {β : Type u_2} [] [] (e : ) :
LocalHomeomorph.ofSet e.target (_ : IsOpen e.target)
theorem LocalHomeomorph.eq_of_eq_on_source_univ {α : Type u_1} {β : Type u_2} [] [] {e : } {e' : } (h : e e') (s : e.source = Set.univ) (t : e.target = Set.univ) :
e = e'
@[simp]
theorem LocalHomeomorph.prod_toLocalEquiv {α : Type u_1} {β : Type u_2} {γ : Type u_3} {δ : Type u_4} [] [] [] [] (e : ) (e' : ) :
().toLocalEquiv = LocalEquiv.prod e.toLocalEquiv e'.toLocalEquiv
@[simp]
theorem LocalHomeomorph.prod_apply {α : Type u_1} {β : Type u_2} {γ : Type u_3} {δ : Type u_4} [] [] [] [] (e : ) (e' : ) :
↑() = fun p => (e p.fst, e' p.snd)
theorem LocalHomeomorph.prod_target {α : Type u_1} {β : Type u_2} {γ : Type u_3} {δ : Type u_4} [] [] [] [] (e : ) (e' : ) :
().toLocalEquiv.target = e.target ×ˢ e'.target
theorem LocalHomeomorph.prod_symm_apply {α : Type u_1} {β : Type u_2} {γ : Type u_3} {δ : Type u_4} [] [] [] [] (e : ) (e' : ) (p : β × δ) :
↑() p = (↑() p.fst, ↑() p.snd)
theorem LocalHomeomorph.prod_source {α : Type u_1} {β : Type u_2} {γ : Type u_3} {δ : Type u_4} [] [] [] [] (e : ) (e' : ) :
().toLocalEquiv.source = e.source ×ˢ e'.source
def LocalHomeomorph.prod {α : Type u_1} {β : Type u_2} {γ : Type u_3} {δ : Type u_4} [] [] [] [] (e : ) (e' : ) :
LocalHomeomorph (α × γ) (β × δ)

The product of two local homeomorphisms, as a local homeomorphism on the product space.

Instances For
@[simp]
theorem LocalHomeomorph.prod_symm {α : Type u_1} {β : Type u_2} {γ : Type u_3} {δ : Type u_4} [] [] [] [] (e : ) (e' : ) :
@[simp]
theorem LocalHomeomorph.refl_prod_refl {α : Type u_5} {β : Type u_6} [] [] :
@[simp]
theorem LocalHomeomorph.prod_trans {α : Type u_1} {β : Type u_2} {γ : Type u_3} {δ : Type u_4} [] [] [] [] {η : Type u_5} {ε : Type u_6} [] [] (e : ) (f : ) (e' : ) (f' : ) :
=
theorem LocalHomeomorph.prod_eq_prod_of_nonempty {α : Type u_1} {β : Type u_2} {γ : Type u_3} {δ : Type u_4} [] [] [] [] {e₁ : } {e₁' : } {e₂ : } {e₂' : } (h : Set.Nonempty ().toLocalEquiv.source) :
= LocalHomeomorph.prod e₁' e₂' e₁ = e₁' e₂ = e₂'
theorem LocalHomeomorph.prod_eq_prod_of_nonempty' {α : Type u_1} {β : Type u_2} {γ : Type u_3} {δ : Type u_4} [] [] [] [] {e₁ : } {e₁' : } {e₂ : } {e₂' : } (h : Set.Nonempty (LocalHomeomorph.prod e₁' e₂').toLocalEquiv.source) :
= LocalHomeomorph.prod e₁' e₂' e₁ = e₁' e₂ = e₂'
@[simp]
theorem LocalHomeomorph.piecewise_apply {α : Type u_1} {β : Type u_2} [] [] (e : ) (e' : ) (s : Set α) (t : Set β) [(x : α) → Decidable (x s)] [(y : β) → Decidable (y t)] (H : ) (H' : ) (Hs : e.source = e'.source ) (Heq : Set.EqOn (e) (e') (e.source )) :
↑(LocalHomeomorph.piecewise e e' s t H H' Hs Heq) = Set.piecewise s e e'
@[simp]
theorem LocalHomeomorph.piecewise_toLocalEquiv {α : Type u_1} {β : Type u_2} [] [] (e : ) (e' : ) (s : Set α) (t : Set β) [(x : α) → Decidable (x s)] [(y : β) → Decidable (y t)] (H : ) (H' : ) (Hs : e.source = e'.source ) (Heq : Set.EqOn (e) (e') (e.source )) :
(LocalHomeomorph.piecewise e e' s t H H' Hs Heq).toLocalEquiv = LocalEquiv.piecewise e.toLocalEquiv e'.toLocalEquiv s t H H'
def LocalHomeomorph.piecewise {α : Type u_1} {β : Type u_2} [] [] (e : ) (e' : ) (s : Set α) (t : Set β) [(x : α) → Decidable (x s)] [(y : β) → Decidable (y t)] (H : ) (H' : ) (Hs : e.source = e'.source ) (Heq : Set.EqOn (e) (e') (e.source )) :

Combine two LocalHomeomorphs 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.

Instances For
@[simp]
theorem LocalHomeomorph.symm_piecewise {α : Type u_1} {β : Type u_2} [] [] (e : ) (e' : ) {s : Set α} {t : Set β} [(x : α) → Decidable (x s)] [(y : β) → Decidable (y t)] (H : ) (H' : ) (Hs : e.source = e'.source ) (Heq : Set.EqOn (e) (e') (e.source )) :
LocalHomeomorph.symm (LocalHomeomorph.piecewise e e' s t H H' Hs Heq) = LocalHomeomorph.piecewise () () t s (_ : ) (_ : ) (_ : e.target = e'.target ) (_ : Set.EqOn (↑()) (↑()) (e.target ))
def LocalHomeomorph.disjointUnion {α : Type u_1} {β : Type u_2} [] [] (e : ) (e' : ) [(x : α) → Decidable (x e.source)] [(y : β) → Decidable (y e.target)] (Hs : Disjoint e.source e'.source) (Ht : Disjoint e.target e'.target) :

Combine two LocalHomeomorphs with disjoint sources and disjoint targets. We reuse LocalHomeomorph.piecewise then override toLocalEquiv to LocalEquiv.disjointUnion. This way we have better definitional equalities for source and target.

Instances For
@[simp]
theorem LocalHomeomorph.pi_toLocalEquiv {ι : Type u_5} [] {Xi : ιType u_6} {Yi : ιType u_7} [(i : ι) → TopologicalSpace (Xi i)] [(i : ι) → TopologicalSpace (Yi i)] (ei : (i : ι) → LocalHomeomorph (Xi i) (Yi i)) :
().toLocalEquiv = LocalEquiv.pi fun i => (ei i).toLocalEquiv
def LocalHomeomorph.pi {ι : Type u_5} [] {Xi : ιType u_6} {Yi : ιType u_7} [(i : ι) → TopologicalSpace (Xi i)] [(i : ι) → TopologicalSpace (Yi i)] (ei : (i : ι) → LocalHomeomorph (Xi i) (Yi i)) :
LocalHomeomorph ((i : ι) → Xi i) ((i : ι) → Yi i)

The product of a finite family of LocalHomeomorphs.

Instances For
theorem LocalHomeomorph.continuousWithinAt_iff_continuousWithinAt_comp_right {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e : ) {f : βγ} {s : Set β} {x : β} (h : x e.target) :
ContinuousWithinAt (f e) (e ⁻¹' s) (↑() x)

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 LocalHomeomorph.continuousAt_iff_continuousAt_comp_right {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e : ) {f : βγ} {x : β} (h : x e.target) :
ContinuousAt (f e) (↑() x)

Continuity at a point can be read under right composition with a local homeomorphism, if the point is in its target

theorem LocalHomeomorph.continuousOn_iff_continuousOn_comp_right {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e : ) {f : βγ} {s : Set β} (h : s e.target) :
ContinuousOn (f e) (e.source e ⁻¹' s)

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 LocalHomeomorph.continuousWithinAt_iff_continuousWithinAt_comp_left {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e : ) {f : γα} {s : Set γ} {x : γ} (hx : f x e.source) (h : f ⁻¹' e.source ) :
ContinuousWithinAt (e f) s x

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 LocalHomeomorph.continuousAt_iff_continuousAt_comp_left {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e : ) {f : γα} {x : γ} (h : f ⁻¹' e.source nhds x) :
ContinuousAt (e f) x

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 LocalHomeomorph.continuousOn_iff_continuousOn_comp_left {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e : ) {f : γα} {s : Set γ} (h : s f ⁻¹' e.source) :
ContinuousOn (e f) s

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 LocalHomeomorph.continuous_iff_continuous_comp_left {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e : ) {f : γα} (h : f ⁻¹' e.source = Set.univ) :
Continuous (e f)

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.

@[simp]
theorem LocalHomeomorph.homeomorphOfImageSubsetSource_apply {α : Type u_1} {β : Type u_2} [] [] (e : ) {s : Set α} {t : Set β} (hs : s e.source) (ht : e '' s = t) :
∀ (a : s), ↑() a = Set.MapsTo.restrict (e) s t (_ : Set.MapsTo (e) s t) a
@[simp]
theorem LocalHomeomorph.homeomorphOfImageSubsetSource_symm_apply {α : Type u_1} {β : Type u_2} [] [] (e : ) {s : Set α} {t : Set β} (hs : s e.source) (ht : e '' s = t) :
∀ (a : t), ↑() a = Set.MapsTo.restrict (↑()) t s (_ : ∀ (y : β), y t↑() y s) a
def LocalHomeomorph.homeomorphOfImageSubsetSource {α : Type u_1} {β : Type u_2} [] [] (e : ) {s : Set α} {t : Set β} (hs : s e.source) (ht : e '' s = t) :
s ≃ₜ t

The homeomorphism obtained by restricting a LocalHomeomorph to a subset of the source.

Instances For
@[simp]
theorem LocalHomeomorph.toHomeomorphSourceTarget_symm_apply_coe {α : Type u_1} {β : Type u_2} [] [] (e : ) :
∀ (a : e.target), = ↑() a
@[simp]
theorem LocalHomeomorph.toHomeomorphSourceTarget_apply_coe {α : Type u_1} {β : Type u_2} [] [] (e : ) :
∀ (a : e.source), ↑() = e a
def LocalHomeomorph.toHomeomorphSourceTarget {α : Type u_1} {β : Type u_2} [] [] (e : ) :
e.source ≃ₜ e.target

A local homeomorphism defines a homeomorphism between its source and target.

Instances For
theorem LocalHomeomorph.secondCountableTopology_source {α : Type u_1} {β : Type u_2} [] [] (e : ) :
theorem LocalHomeomorph.nhds_eq_comap_inf_principal {α : Type u_1} {β : Type u_2} [] [] (e : ) {x : α} (hx : x e.source) :
nhds x = Filter.comap (e) (nhds (e x)) Filter.principal e.source
@[simp]
theorem LocalHomeomorph.toHomeomorphOfSourceEqUnivTargetEqUniv_apply {α : Type u_1} {β : Type u_2} [] [] (e : ) (h : e.source = Set.univ) (h' : e.target = Set.univ) :
@[simp]
theorem LocalHomeomorph.toHomeomorphOfSourceEqUnivTargetEqUniv_symm_apply {α : Type u_1} {β : Type u_2} [] [] (e : ) (h : e.source = Set.univ) (h' : e.target = Set.univ) :
def LocalHomeomorph.toHomeomorphOfSourceEqUnivTargetEqUniv {α : Type u_1} {β : Type u_2} [] [] (e : ) (h : e.source = Set.univ) (h' : e.target = Set.univ) :
α ≃ₜ β

If a local homeomorphism has source and target equal to univ, then it induces a homeomorphism between the whole spaces, expressed in this definition.

Instances For
theorem LocalHomeomorph.to_openEmbedding {α : Type u_1} {β : Type u_2} [] [] (e : ) (h : e.source = Set.univ) :

A local homeomorphism whose source is all of α defines an open embedding of α into β. The converse is also true; see OpenEmbedding.toLocalHomeomorph.

@[simp]
theorem Homeomorph.refl_toLocalHomeomorph {α : Type u_1} [] :
@[simp]
theorem Homeomorph.symm_toLocalHomeomorph {α : Type u_1} {β : Type u_2} [] [] (e : α ≃ₜ β) :
@[simp]
theorem Homeomorph.trans_toLocalHomeomorph {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] (e : α ≃ₜ β) (e' : β ≃ₜ γ) :
@[simp]
theorem OpenEmbedding.toLocalHomeomorph_apply {α : Type u_1} {β : Type u_2} [] [] (f : αβ) (h : ) [] :
= f
@[simp]
theorem OpenEmbedding.toLocalHomeomorph_target {α : Type u_1} {β : Type u_2} [] [] (f : αβ) (h : ) [] :
().toLocalEquiv.target =
@[simp]
theorem OpenEmbedding.toLocalHomeomorph_source {α : Type u_1} {β : Type u_2} [] [] (f : αβ) (h : ) [] :
().toLocalEquiv.source = Set.univ
noncomputable def OpenEmbedding.toLocalHomeomorph {α : Type u_1} {β : Type u_2} [] [] (f : αβ) (h : ) [] :

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.

Instances For
theorem OpenEmbedding.continuousAt_iff {α : Type u_1} {β : Type u_2} {γ : Type u_3} [] [] [] {f : αβ} {g : βγ} (hf : ) {x : α} :
noncomputable def TopologicalSpace.Opens.localHomeomorphSubtypeCoe {α : Type u_1} [] (s : ) [Nonempty { x // x s }] :
LocalHomeomorph { x // x s } α

The inclusion of an open subset s of a space α into α is a local homeomorphism from the subtype s to α.

Instances For
@[simp]
theorem TopologicalSpace.Opens.localHomeomorphSubtypeCoe_coe {α : Type u_1} [] (s : ) [Nonempty { x // x s }] :
= Subtype.val
@[simp]
theorem TopologicalSpace.Opens.localHomeomorphSubtypeCoe_source {α : Type u_1} [] (s : ) [Nonempty { x // x s }] :
().toLocalEquiv.source = Set.univ
@[simp]
theorem TopologicalSpace.Opens.localHomeomorphSubtypeCoe_target {α : Type u_1} [] (s : ) [Nonempty { x // x s }] :
().toLocalEquiv.target = s
noncomputable def LocalHomeomorph.subtypeRestr {α : Type u_1} {β : Type u_2} [] [] (e : ) (s : ) [Nonempty { x // x s }] :
LocalHomeomorph { x // x 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.

Instances For
theorem LocalHomeomorph.subtypeRestr_def {α : Type u_1} {β : Type u_2} [] [] (e : ) (s : ) [Nonempty { x // x s }] :
@[simp]
theorem LocalHomeomorph.subtypeRestr_coe {α : Type u_1} {β : Type u_2} [] [] (e : ) (s : ) [Nonempty { x // x s }] :
↑() = Set.restrict s e
@[simp]
theorem LocalHomeomorph.subtypeRestr_source {α : Type u_1} {β : Type u_2} [] [] (e : ) (s : ) [Nonempty { x // x s }] :
().toLocalEquiv.source = Subtype.val ⁻¹' e.source
theorem LocalHomeomorph.map_subtype_source {α : Type u_1} {β : Type u_2} [] [] (e : ) {s : } [Nonempty { x // x s }] {x : { x // x s }} (hxe : x e.source) :
e x ().toLocalEquiv.target
theorem LocalHomeomorph.subtypeRestr_symm_trans_subtypeRestr {α : Type u_1} {β : Type u_2} [] [] (s : ) [Nonempty { x // x s }] (f : ) (f' : ) :
LocalHomeomorph.restr () (f.target ↑() ⁻¹' s)
theorem LocalHomeomorph.subtypeRestr_symm_eqOn_of_le {α : Type u_1} {β : Type u_2} [] [] (e : ) {U : } {V : } [Nonempty { x // x U }] [Nonempty { x // x V }] (hUV : U V) :
Set.EqOn () () ().toLocalEquiv.target