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

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

      Equations
        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'

          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_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_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
              @[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_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)

              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
                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

                          Restriction to a subtype #

                          subtypeRestr: restriction to a subtype

                          noncomputable def OpenPartialHomeomorph.subtypeRestr {X : Type u_1} {Y : Type u_3} [TopologicalSpace X] [TopologicalSpace Y] (e : OpenPartialHomeomorph X Y) {s : TopologicalSpace.Opens X} (hs : Nonempty โ†ฅs) :
                          OpenPartialHomeomorph (โ†ฅs) Y

                          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.subtypeRestr_coe {X : Type u_1} {Y : Type u_3} [TopologicalSpace X] [TopologicalSpace Y] (e : OpenPartialHomeomorph X Y) {s : TopologicalSpace.Opens X} (hs : Nonempty โ†ฅs) :
                              โ†‘(e.subtypeRestr hs) = (โ†‘s).restrict โ†‘e
                              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 : X โ†’ X'} (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
                                Instances For
                                  @[simp]
                                  theorem OpenPartialHomeomorph.lift_openEmbedding_toFun {X : Type u_7} {X' : Type u_8} {Z : Type u_9} [TopologicalSpace X] [TopologicalSpace X'] [TopologicalSpace Z] [Nonempty Z] {f : X โ†’ X'} (e : OpenPartialHomeomorph X Z) (hf : Topology.IsOpenEmbedding f) :
                                  โ†‘(e.lift_openEmbedding hf) = Function.extend f โ†‘e fun (x : X') => Classical.arbitrary Z
                                  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 : X โ†’ X'} (e : OpenPartialHomeomorph X Z) (hf : Topology.IsOpenEmbedding f) {x : X} :
                                  โ†‘(e.lift_openEmbedding hf) (f x) = โ†‘e x
                                  @[simp]
                                  theorem OpenPartialHomeomorph.lift_openEmbedding_symm {X : Type u_7} {X' : Type u_8} {Z : Type u_9} [TopologicalSpace X] [TopologicalSpace X'] [TopologicalSpace Z] [Nonempty Z] {f : X โ†’ X'} (e : OpenPartialHomeomorph X Z) (hf : Topology.IsOpenEmbedding f) :
                                  โ†‘(e.lift_openEmbedding hf).symm = f โˆ˜ โ†‘e.symm
                                  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 : X โ†’ X'} (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