Documentation

Mathlib.Topology.OpenPartialHomeomorph.Constructions

Constructions of new partial homeomorphisms from old #

Main definitions #

Constants #

PartialEquiv.const as an open partial homeomorphism

def OpenPartialHomeomorph.const {X : Type u_1} {Y : Type u_3} [TopologicalSpace X] [TopologicalSpace Y] {a : X} {b : Y} (ha : IsOpen {a}) (hb : IsOpen {b}) :

This is PartialEquiv.single as an open partial homeomorphism: a constant map, whose source and target are necessarily singleton sets.

Equations
Instances For
    @[simp]
    theorem OpenPartialHomeomorph.const_apply {X : Type u_1} {Y : Type u_3} [TopologicalSpace X] [TopologicalSpace Y] {a : X} {b : Y} (ha : IsOpen {a}) (hb : IsOpen {b}) (x : X) :
    (const ha hb) x = b
    @[simp]
    theorem OpenPartialHomeomorph.const_source {X : Type u_1} {Y : Type u_3} [TopologicalSpace X] [TopologicalSpace Y] {a : X} {b : Y} (ha : IsOpen {a}) (hb : IsOpen {b}) :
    (const ha hb).source = {a}
    @[simp]
    theorem OpenPartialHomeomorph.const_target {X : Type u_1} {Y : Type u_3} [TopologicalSpace X] [TopologicalSpace Y] {a : X} {b : Y} (ha : IsOpen {a}) (hb : IsOpen {b}) :
    (const ha hb).target = {b}

    Products #

    Product of two open partial homeomorphisms

    def OpenPartialHomeomorph.prod {X : Type u_1} {X' : Type u_2} {Y : Type u_3} {Y' : Type u_4} [TopologicalSpace X] [TopologicalSpace X'] [TopologicalSpace Y] [TopologicalSpace Y'] (eX : OpenPartialHomeomorph X X') (eY : OpenPartialHomeomorph Y Y') :

    The product of two open partial homeomorphisms, as an open partial homeomorphism on the product space.

    Equations
    • eX.prod eY = { toPartialEquiv := eX.prod eY.toPartialEquiv, open_source := , open_target := , continuousOn_toFun := , continuousOn_invFun := }
    Instances For
      @[simp]
      theorem OpenPartialHomeomorph.prod_apply {X : Type u_1} {X' : Type u_2} {Y : Type u_3} {Y' : Type u_4} [TopologicalSpace X] [TopologicalSpace X'] [TopologicalSpace Y] [TopologicalSpace Y'] (eX : OpenPartialHomeomorph X X') (eY : OpenPartialHomeomorph Y Y') :
      (eX.prod eY) = fun (p : X × Y) => (eX p.1, eY p.2)
      theorem OpenPartialHomeomorph.prod_symm_apply {X : Type u_1} {X' : Type u_2} {Y : Type u_3} {Y' : Type u_4} [TopologicalSpace X] [TopologicalSpace X'] [TopologicalSpace Y] [TopologicalSpace Y'] (eX : OpenPartialHomeomorph X X') (eY : OpenPartialHomeomorph Y Y') (p : X' × Y') :
      (eX.prod eY).symm p = (eX.symm p.1, eY.symm p.2)
      @[simp]
      theorem OpenPartialHomeomorph.prod_symm {X : Type u_1} {X' : Type u_2} {Y : Type u_3} {Y' : Type u_4} [TopologicalSpace X] [TopologicalSpace X'] [TopologicalSpace Y] [TopologicalSpace Y'] (eX : OpenPartialHomeomorph X X') (eY : OpenPartialHomeomorph Y Y') :
      (eX.prod eY).symm = eX.symm.prod eY.symm
      @[simp]
      theorem OpenPartialHomeomorph.prod_trans {X : Type u_1} {X' : Type u_2} {Y : Type u_3} {Y' : Type u_4} {Z : Type u_5} {Z' : Type u_6} [TopologicalSpace X] [TopologicalSpace X'] [TopologicalSpace Y] [TopologicalSpace Y'] [TopologicalSpace Z] [TopologicalSpace Z'] (e : OpenPartialHomeomorph X Y) (f : OpenPartialHomeomorph Y Z) (e' : OpenPartialHomeomorph X' Y') (f' : OpenPartialHomeomorph Y' Z') :
      (e.prod e').trans (f.prod f') = (e.trans f).prod (e'.trans f')
      theorem OpenPartialHomeomorph.prod_eq_prod_of_nonempty {X : Type u_1} {X' : Type u_2} {Y : Type u_3} {Y' : Type u_4} [TopologicalSpace X] [TopologicalSpace X'] [TopologicalSpace Y] [TopologicalSpace Y'] {eX eX' : OpenPartialHomeomorph X X'} {eY eY' : OpenPartialHomeomorph Y Y'} (h : (eX.prod eY).source.Nonempty) :
      eX.prod eY = eX'.prod eY' eX = eX' eY = eY'
      theorem OpenPartialHomeomorph.prod_eq_prod_of_nonempty' {X : Type u_1} {X' : Type u_2} {Y : Type u_3} {Y' : Type u_4} [TopologicalSpace X] [TopologicalSpace X'] [TopologicalSpace Y] [TopologicalSpace Y'] {eX eX' : OpenPartialHomeomorph X X'} {eY eY' : OpenPartialHomeomorph Y Y'} (h : (eX'.prod eY').source.Nonempty) :
      eX.prod eY = eX'.prod eY' eX = eX' eY = eY'
      theorem OpenPartialHomeomorph.prod_symm_trans_prod {X : Type u_1} {X' : Type u_2} {Y : Type u_3} {Y' : Type u_4} [TopologicalSpace X] [TopologicalSpace X'] [TopologicalSpace Y] [TopologicalSpace Y'] (e f : OpenPartialHomeomorph X Y) (e' f' : OpenPartialHomeomorph X' Y') :
      (e.prod e').symm.trans (f.prod f') = (e.symm.trans f).prod (e'.symm.trans f')

      Pi types #

      Finite indexed products of partial homeomorphisms

      def OpenPartialHomeomorph.pi {ι : Type u_7} [Finite ι] {X : ιType u_8} {Y : ιType u_9} [(i : ι) → TopologicalSpace (X i)] [(i : ι) → TopologicalSpace (Y i)] (ei : (i : ι) → OpenPartialHomeomorph (X i) (Y i)) :
      OpenPartialHomeomorph ((i : ι) → X i) ((i : ι) → Y i)

      The product of a finite family of OpenPartialHomeomorphs.

      Equations
      Instances For
        @[simp]
        theorem OpenPartialHomeomorph.pi_source {ι : Type u_7} [Finite ι] {X : ιType u_8} {Y : ιType u_9} [(i : ι) → TopologicalSpace (X i)] [(i : ι) → TopologicalSpace (Y i)] (ei : (i : ι) → OpenPartialHomeomorph (X i) (Y i)) :
        (pi ei).source = Set.univ.pi fun (i : ι) => (ei i).source
        @[simp]
        theorem OpenPartialHomeomorph.pi_symm_apply {ι : Type u_7} [Finite ι] {X : ιType u_8} {Y : ιType u_9} [(i : ι) → TopologicalSpace (X i)] [(i : ι) → TopologicalSpace (Y i)] (ei : (i : ι) → OpenPartialHomeomorph (X i) (Y i)) (a✝ : (i : ι) → Y i) (i : ι) :
        (pi ei).symm a✝ i = (ei i).symm (a✝ i)
        @[simp]
        theorem OpenPartialHomeomorph.pi_toPartialEquiv {ι : Type u_7} [Finite ι] {X : ιType u_8} {Y : ιType u_9} [(i : ι) → TopologicalSpace (X i)] [(i : ι) → TopologicalSpace (Y i)] (ei : (i : ι) → OpenPartialHomeomorph (X i) (Y i)) :
        (pi ei).toPartialEquiv = PartialEquiv.pi fun (i : ι) => (ei i).toPartialEquiv
        @[simp]
        theorem OpenPartialHomeomorph.pi_apply {ι : Type u_7} [Finite ι] {X : ιType u_8} {Y : ιType u_9} [(i : ι) → TopologicalSpace (X i)] [(i : ι) → TopologicalSpace (Y i)] (ei : (i : ι) → OpenPartialHomeomorph (X i) (Y i)) (a✝ : (i : ι) → X i) (i : ι) :
        (pi ei) a✝ i = (ei i) (a✝ i)
        @[simp]
        theorem OpenPartialHomeomorph.pi_target {ι : Type u_7} [Finite ι] {X : ιType u_8} {Y : ιType u_9} [(i : ι) → TopologicalSpace (X i)] [(i : ι) → TopologicalSpace (Y i)] (ei : (i : ι) → OpenPartialHomeomorph (X i) (Y i)) :
        (pi ei).target = Set.univ.pi fun (i : ι) => (ei i).target

        Disjoint union #

        Combining two partial homeomorphisms using Set.piecewise

        def OpenPartialHomeomorph.piecewise {X : Type u_1} {Y : Type u_3} [TopologicalSpace X] [TopologicalSpace Y] (e e' : OpenPartialHomeomorph X Y) (s : Set X) (t : Set Y) [(x : X) → Decidable (x s)] [(y : Y) → Decidable (y t)] (H : e.IsImage s t) (H' : e'.IsImage s t) (Hs : e.source frontier s = e'.source frontier s) (Heq : Set.EqOn (↑e) (↑e') (e.source frontier s)) :

        Combine two OpenPartialHomeomorphs using Set.piecewise. The source of the new OpenPartialHomeomorph 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.

        Equations
        • e.piecewise e' s t H H' Hs Heq = { toPartialEquiv := e.piecewise e'.toPartialEquiv s t H H', open_source := , open_target := , continuousOn_toFun := , continuousOn_invFun := }
        Instances For
          @[simp]
          theorem OpenPartialHomeomorph.piecewise_toPartialEquiv {X : Type u_1} {Y : Type u_3} [TopologicalSpace X] [TopologicalSpace Y] (e e' : OpenPartialHomeomorph X Y) (s : Set X) (t : Set Y) [(x : X) → Decidable (x s)] [(y : Y) → Decidable (y t)] (H : e.IsImage s t) (H' : e'.IsImage s t) (Hs : e.source frontier s = e'.source frontier s) (Heq : Set.EqOn (↑e) (↑e') (e.source frontier s)) :
          (e.piecewise e' s t H H' Hs Heq).toPartialEquiv = e.piecewise e'.toPartialEquiv s t H H'
          @[simp]
          theorem OpenPartialHomeomorph.piecewise_apply {X : Type u_1} {Y : Type u_3} [TopologicalSpace X] [TopologicalSpace Y] (e e' : OpenPartialHomeomorph X Y) (s : Set X) (t : Set Y) [(x : X) → Decidable (x s)] [(y : Y) → Decidable (y t)] (H : e.IsImage s t) (H' : e'.IsImage s t) (Hs : e.source frontier s = e'.source frontier s) (Heq : Set.EqOn (↑e) (↑e') (e.source frontier s)) :
          (e.piecewise e' s t H H' Hs Heq) = s.piecewise e e'
          @[simp]
          theorem OpenPartialHomeomorph.symm_piecewise {X : Type u_1} {Y : Type u_3} [TopologicalSpace X] [TopologicalSpace Y] (e e' : OpenPartialHomeomorph X Y) {s : Set X} {t : Set Y} [(x : X) → Decidable (x s)] [(y : Y) → Decidable (y t)] (H : e.IsImage s t) (H' : e'.IsImage s t) (Hs : e.source frontier s = e'.source frontier s) (Heq : Set.EqOn (↑e) (↑e') (e.source frontier s)) :
          (e.piecewise e' s t H H' Hs Heq).symm = e.symm.piecewise e'.symm t s
          def OpenPartialHomeomorph.disjointUnion {X : Type u_1} {Y : Type u_3} [TopologicalSpace X] [TopologicalSpace Y] (e e' : OpenPartialHomeomorph X Y) [(x : X) → Decidable (x e.source)] [(y : Y) → Decidable (y e.target)] (Hs : Disjoint e.source e'.source) (Ht : Disjoint e.target e'.target) :

          Combine two OpenPartialHomeomorphs with disjoint sources and disjoint targets. We reuse OpenPartialHomeomorph.piecewise then override toPartialEquiv to PartialEquiv.disjointUnion. This way we have better definitional equalities for source and target.

          Equations
          Instances For

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

            Equations
            Instances For
              @[simp]
              theorem OpenPartialHomeomorph.transHomeomorph_apply {X : Type u_1} {Y : Type u_3} {Z : Type u_5} [TopologicalSpace X] [TopologicalSpace Y] [TopologicalSpace Z] (e : OpenPartialHomeomorph X Y) (f' : Y ≃ₜ Z) :
              (e.transHomeomorph f') = f' e
              @[simp]
              @[simp]

              Restriction to a subtype #

              subtypeRestr: restriction to a subtype

              The restriction of an open partial homeomorphism e to an open subset s of the domain type produces an open partial homeomorphism whose domain is the subtype s.

              Equations
              Instances For
                @[simp]
                theorem OpenPartialHomeomorph.map_subtype_source {X : Type u_1} {Y : Type u_3} [TopologicalSpace X] [TopologicalSpace Y] (e : OpenPartialHomeomorph X Y) {s : TopologicalSpace.Opens X} (hs : Nonempty s) {x : s} (hxe : x e.source) :
                e x (e.subtypeRestr hs).target

                This lemma characterizes the transition functions of an open subset in terms of the transition functions of the original space.

                Extending along an open embedding #

                noncomputable def OpenPartialHomeomorph.lift_openEmbedding {X : Type u_7} {X' : Type u_8} {Z : Type u_9} [TopologicalSpace X] [TopologicalSpace X'] [TopologicalSpace Z] [Nonempty Z] {f : XX'} (e : OpenPartialHomeomorph X Z) (hf : Topology.IsOpenEmbedding f) :

                Extend an open partial homeomorphism e : X → Z to X' → Z, using an open embedding ι : X → X'. On ι(X), the extension is specified by e; its value elsewhere is arbitrary (and uninteresting).

                Equations
                • One or more equations did not get rendered due to their size.
                Instances For
                  @[simp]
                  theorem OpenPartialHomeomorph.lift_openEmbedding_apply {X : Type u_7} {X' : Type u_8} {Z : Type u_9} [TopologicalSpace X] [TopologicalSpace X'] [TopologicalSpace Z] [Nonempty Z] {f : XX'} (e : OpenPartialHomeomorph X Z) (hf : Topology.IsOpenEmbedding f) {x : X} :
                  (e.lift_openEmbedding hf) (f x) = e x
                  @[simp]
                  theorem OpenPartialHomeomorph.lift_openEmbedding_trans_apply {X : Type u_7} {X' : Type u_8} {Z : Type u_9} [TopologicalSpace X] [TopologicalSpace X'] [TopologicalSpace Z] [Nonempty Z] {f : XX'} (e e' : OpenPartialHomeomorph X Z) (hf : Topology.IsOpenEmbedding f) (z : Z) :
                  ((e.lift_openEmbedding hf).symm.trans (e'.lift_openEmbedding hf)) z = (e.symm.trans e') z