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.

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') :
    OpenPartialHomeomorph (X ร— Y) (X' ร— Y')

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

    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.

      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.

        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.

          Instances For

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

            Instances For
              @[simp]
              theorem OpenPartialHomeomorph.transHomeomorph_symm_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').symm = โ†‘e.symm โˆ˜ โ‡‘f'.symm
              @[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.

              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
                theorem OpenPartialHomeomorph.subtypeRestr_symm_trans_subtypeRestr {X : Type u_1} {Y : Type u_3} [TopologicalSpace X] [TopologicalSpace Y] {s : TopologicalSpace.Opens X} (hs : Nonempty โ†ฅs) (f f' : OpenPartialHomeomorph X Y) :
                (f.subtypeRestr hs).symm.trans (f'.subtypeRestr hs) โ‰ˆ (f.symm.trans f').restr (f.target โˆฉ โ†‘f.symm โปยน' โ†‘s)

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

                theorem OpenPartialHomeomorph.subtypeRestr_symm_apply {X : Type u_1} {Y : Type u_3} [TopologicalSpace X] [TopologicalSpace Y] (e : OpenPartialHomeomorph X Y) {U : TopologicalSpace.Opens X} (hU : Nonempty โ†ฅU) {y : Y} (hy : y โˆˆ (e.subtypeRestr hU).target) :
                (Subtype.val โˆ˜ โ†‘(e.subtypeRestr hU).symm) y = โ†‘e.symm y
                theorem OpenPartialHomeomorph.subtypeRestr_symm_eqOn {X : Type u_1} {Y : Type u_3} [TopologicalSpace X] [TopologicalSpace Y] (e : OpenPartialHomeomorph X Y) {U : TopologicalSpace.Opens X} (hU : Nonempty โ†ฅU) :
                Set.EqOn (โ†‘e.symm) (Subtype.val โˆ˜ โ†‘(e.subtypeRestr hU).symm) (e.subtypeRestr hU).target
                theorem OpenPartialHomeomorph.subtypeRestr_symm_eqOn_of_le {X : Type u_1} {Y : Type u_3} [TopologicalSpace X] [TopologicalSpace Y] (e : OpenPartialHomeomorph X Y) {U V : TopologicalSpace.Opens X} (hU : Nonempty โ†ฅU) (hV : Nonempty โ†ฅV) (hUV : U โ‰ค V) :
                Set.EqOn (โ†‘(e.subtypeRestr hV).symm) (Set.inclusion hUV โˆ˜ โ†‘(e.subtypeRestr hU).symm) (e.subtypeRestr hU).target

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

                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_source {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) :
                  @[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
                  @[simp]
                  theorem OpenPartialHomeomorph.lift_openEmbedding_trans {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) :