Documentation

LeanPool.DomainTheory.Neighborhood.Exercise619PartB

Exercise 6.19 (Scott 1981, PRG-19, ยง6) โ€” Part B: the functor algebra #

โ€ฆ Now generate all constructs T(X) formed by the constants (that is, T(X) = ๐’Ÿ for a fixed ๐’Ÿ), by the identity (T(X) = X), and by sums and products (Tโ‚€(X) + Tโ‚(X), etc.). Show that these are all functors, continuous on maps, and monotone and continuous on domains.

This module formalizes Part B: the closed family of constructs T(X) over Scott's uniform category of Exercise 6.19 โ€” neighbourhood systems on ฮ” โІ {0,1}* with โˆ… โˆ‰ ๐’Ÿ (the standing hypothesis that makes the token-level sum sumTok/product prodTok of Part A genuine endo-operations) and strict approximable maps.

Contents #

Scott asks to show these constructs are all functors, continuous on maps, and monotone and continuous on domains; each is established here:

Because every construct stays over the single token type {0,1}*, the subdomain relation โ— is between systems on a common carrier, so the domain conditions need no carrier transport (unlike the universe-polymorphic Endofunctor DomainObj form of Definitions 6.8/6.13).

This module also formalizes Exercise 6.20: writing tok(๐’Ÿ) = ๐’Ÿ.master for the underlying token set and {ฮ“} for the one-neighbourhood system singletonSys ฮ“, the function ฮปฮ“. tok(T({ฮ“})) is computed by the token-level recursion mFun T (mFun_eq_master), shown monotone (mFun_mono) and continuous (mFun_continuous) on the domain {ฮ“ โˆฃ ฮ› โˆˆ ฮ“}. Its least fixed point โ€” the explicit Kleene union โ‹ƒโ‚™ mFunโฟ({ฮ›}) โ€” gives a ฮ“ = tok(T({ฮ“})) (exists_tok_fixedPoint), whence {ฮ“} โ— T({ฮ“}) (exists_singleton_subsystem), exactly the hypothesis Theorem 6.14 needs.

Everything is choice-free (#print axioms โІ {propext, Quot.sound}).

Objects of Scott's category: โˆ…-free systems over {0,1}* #

An object of the Exercise 6.19 category. An โˆ…-free neighbourhood system over Str = {0,1}* (ne: every neighbourhood is non-empty, Scott's โˆ… โˆ‰ ๐’Ÿ).

Instances For

    The sum object ๐’Ÿโ‚€ + ๐’Ÿโ‚ of Part A, repackaged as an object of the category.

    Equations
    Instances For

      The product object ๐’Ÿโ‚€ ร— ๐’Ÿโ‚ of Part A, repackaged as an object of the category.

      Equations
      Instances For

        A non-empty b-tagged copy can never sit inside a b'-tagged copy for b โ‰  b'.

        The functorial action of sum on maps #

        def Domain.Neighborhood.Exercise619.sumMapTok {Aโ‚€ Aโ‚ Bโ‚€ Bโ‚ : ScottSys} (fโ‚€ : ApproximableMap Aโ‚€.sys Bโ‚€.sys) (fโ‚ : ApproximableMap Aโ‚.sys Bโ‚.sys) :
        ApproximableMap (Aโ‚€.sum Aโ‚).sys (Bโ‚€.sum Bโ‚).sys

        fโ‚€ + fโ‚, the action of the sum functor on (approximable) maps. It carries the master to the master (so it is strict), a left copy 0X to 0X' whenever X fโ‚€ X', and a right copy 1Y to 1Y' whenever Y fโ‚ Y'.

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For
          theorem Domain.Neighborhood.Exercise619.sumMapTok_isStrict {Aโ‚€ Aโ‚ Bโ‚€ Bโ‚ : ScottSys} (fโ‚€ : ApproximableMap Aโ‚€.sys Bโ‚€.sys) (fโ‚ : ApproximableMap Aโ‚.sys Bโ‚.sys) :
          Exercise510.IsStrict (sumMapTok fโ‚€ fโ‚)

          sumMapTok is strict for any component maps: the master input ฮ› (the only neighbourhood containing the empty string) relates only to the output master.

          The functorial action of product on maps #

          def Domain.Neighborhood.Exercise619.prodMapTok {Aโ‚€ Aโ‚ Bโ‚€ Bโ‚ : ScottSys} (fโ‚€ : ApproximableMap Aโ‚€.sys Bโ‚€.sys) (fโ‚ : ApproximableMap Aโ‚.sys Bโ‚.sys) :
          ApproximableMap (Aโ‚€.prod Aโ‚).sys (Bโ‚€.prod Bโ‚).sys

          fโ‚€ ร— fโ‚, the action of the product functor on (approximable) maps. A product neighbourhood {ฮ›} โˆช 0X โˆช 1Y is sent to {ฮ›} โˆช 0X' โˆช 1Y' whenever X fโ‚€ X' and Y fโ‚ Y'.

          Equations
          • One or more equations did not get rendered due to their size.
          Instances For
            theorem Domain.Neighborhood.Exercise619.prodMapTok_isStrict {Aโ‚€ Aโ‚ Bโ‚€ Bโ‚ : ScottSys} {fโ‚€ : ApproximableMap Aโ‚€.sys Bโ‚€.sys} {fโ‚ : ApproximableMap Aโ‚.sys Bโ‚.sys} (hfโ‚€ : Exercise510.IsStrict fโ‚€) (hfโ‚ : Exercise510.IsStrict fโ‚) :
            Exercise510.IsStrict (prodMapTok fโ‚€ fโ‚)

            prodMapTok is strict exactly when both components are strict.

            The bifunctor laws: identities and composition are preserved #

            (I_{๐’Ÿโ‚€} + I_{๐’Ÿโ‚}) = I_{๐’Ÿโ‚€+๐’Ÿโ‚}.

            theorem Domain.Neighborhood.Exercise619.sumMapTok_comp {Aโ‚€ Aโ‚ Bโ‚€ Bโ‚ Cโ‚€ Cโ‚ : ScottSys} (fโ‚€ : ApproximableMap Aโ‚€.sys Bโ‚€.sys) (fโ‚ : ApproximableMap Aโ‚.sys Bโ‚.sys) (gโ‚€ : ApproximableMap Bโ‚€.sys Cโ‚€.sys) (gโ‚ : ApproximableMap Bโ‚.sys Cโ‚.sys) :
            sumMapTok (gโ‚€.comp fโ‚€) (gโ‚.comp fโ‚) = (sumMapTok gโ‚€ gโ‚).comp (sumMapTok fโ‚€ fโ‚)

            (gโ‚€ โˆ˜ fโ‚€) + (gโ‚ โˆ˜ fโ‚) = (gโ‚€ + gโ‚) โˆ˜ (fโ‚€ + fโ‚).

            (I_{๐’Ÿโ‚€} ร— I_{๐’Ÿโ‚}) = I_{๐’Ÿโ‚€ร—๐’Ÿโ‚}.

            theorem Domain.Neighborhood.Exercise619.prodMapTok_comp {Aโ‚€ Aโ‚ Bโ‚€ Bโ‚ Cโ‚€ Cโ‚ : ScottSys} (fโ‚€ : ApproximableMap Aโ‚€.sys Bโ‚€.sys) (fโ‚ : ApproximableMap Aโ‚.sys Bโ‚.sys) (gโ‚€ : ApproximableMap Bโ‚€.sys Cโ‚€.sys) (gโ‚ : ApproximableMap Bโ‚.sys Cโ‚.sys) :
            prodMapTok (gโ‚€.comp fโ‚€) (gโ‚.comp fโ‚) = (prodMapTok gโ‚€ gโ‚).comp (prodMapTok fโ‚€ fโ‚)

            (gโ‚€ โˆ˜ fโ‚€) ร— (gโ‚ โˆ˜ fโ‚) = (gโ‚€ ร— gโ‚) โˆ˜ (fโ‚€ ร— fโ‚).

            The functor-expression algebra T(X) and the functor laws #

            "Generate all constructs T(X) formed by the constants (T(X) = ๐’Ÿ), by the identity (T(X) = X), and by sums and products."

            The functor-expression algebra. A T(X) built from constants, the identity, and binary sums and products โ€” Scott's closed family of constructs.

            • const : ScottSys โ†’ FExpr

              The constant functor T(X) = ๐’Ÿ at a fixed object ๐’Ÿ.

            • var : FExpr

              The identity functor T(X) = X.

            • sum : FExpr โ†’ FExpr โ†’ FExpr

              The sum Tโ‚€(X) + Tโ‚(X).

            • prod : FExpr โ†’ FExpr โ†’ FExpr

              The product Tโ‚€(X) ร— Tโ‚(X).

            Instances For

              The action of T on objects.

              Equations
              Instances For

                The action of T on (approximable) maps. Constants act by the identity, the identity functor acts by f itself, and sums/products act by the bifunctorial combinators sumMapTok/prodMapTok.

                Equations
                Instances For

                  Every T preserves strictness (so it restricts to Scott's category of strict maps): T(f) is strict whenever f is (and constants/sums are strict unconditionally).

                  Functor law 1 โ€” T(I_X) = I_{T(X)}. Every construct T preserves identities.

                  Functor law 2 โ€” T(g โˆ˜ f) = T(g) โˆ˜ T(f). Every construct T preserves composition; together with map_id this shows these are all functors.

                  Continuous on maps โ€” the monotone half #

                  Scott's continuous on maps (Definition 6.8) requires ฮปf. T(f) to be approximable on the strict function space; here we record its monotonicity (the order half of approximability โ€” a sharper map yields a sharper image), proved compositionally from the bifunctor combinators.

                  theorem Domain.Neighborhood.Exercise619.sumMapTok_mono {Aโ‚€ Aโ‚ Bโ‚€ Bโ‚ : ScottSys} {fโ‚€ fโ‚€' : ApproximableMap Aโ‚€.sys Bโ‚€.sys} {fโ‚ fโ‚' : ApproximableMap Aโ‚.sys Bโ‚.sys} (h0 : fโ‚€ โ‰ค fโ‚€') (h1 : fโ‚ โ‰ค fโ‚') :
                  sumMapTok fโ‚€ fโ‚ โ‰ค sumMapTok fโ‚€' fโ‚'

                  sumMapTok is monotone in both arguments.

                  theorem Domain.Neighborhood.Exercise619.prodMapTok_mono {Aโ‚€ Aโ‚ Bโ‚€ Bโ‚ : ScottSys} {fโ‚€ fโ‚€' : ApproximableMap Aโ‚€.sys Bโ‚€.sys} {fโ‚ fโ‚' : ApproximableMap Aโ‚.sys Bโ‚.sys} (h0 : fโ‚€ โ‰ค fโ‚€') (h1 : fโ‚ โ‰ค fโ‚') :
                  prodMapTok fโ‚€ fโ‚ โ‰ค prodMapTok fโ‚€' fโ‚'

                  prodMapTok is monotone in both arguments.

                  ฮปf. T(f) is monotone. A sharper map f โ‰ค f' is sent to a sharper image T(f) โ‰ค T(f') โ€” the monotonicity half of continuous on maps.

                  Monotone on domains #

                  Scott's monotone on domains (Definition 6.13): a subdomain relation D โ— E is carried to T(D) โ— T(E). Because every construct here stays over the single token type {0,1}*, the relation is between systems on a common carrier (no transport needed), and the bifunctor combinators carry โ— componentwise.

                  theorem Domain.Neighborhood.Exercise619.sumTok_subsystem {Aโ‚€ Aโ‚ Bโ‚€ Bโ‚ : ScottSys} (h0 : Aโ‚€.sys โ— Bโ‚€.sys) (h1 : Aโ‚.sys โ— Bโ‚.sys) :
                  (Aโ‚€.sum Aโ‚).sys โ— (Bโ‚€.sum Bโ‚).sys

                  The sum carries the subsystem relation componentwise: ๐’Ÿโ‚€ โ— โ„ฐโ‚€ and ๐’Ÿโ‚ โ— โ„ฐโ‚ give ๐’Ÿโ‚€+๐’Ÿโ‚ โ— โ„ฐโ‚€+โ„ฐโ‚.

                  theorem Domain.Neighborhood.Exercise619.prodTok_subsystem {Aโ‚€ Aโ‚ Bโ‚€ Bโ‚ : ScottSys} (h0 : Aโ‚€.sys โ— Bโ‚€.sys) (h1 : Aโ‚.sys โ— Bโ‚.sys) :
                  (Aโ‚€.prod Aโ‚).sys โ— (Bโ‚€.prod Bโ‚).sys

                  The product carries the subsystem relation componentwise.

                  ฮปX. T(X) is monotone on domains. Whenever X โ— Y we have T(X) โ— T(Y).

                  Continuous on domains #

                  Scott's continuous on domains (Definition 6.13): ฮปD. T(D) preserves directed unions of subsystems. Concretely, if U is the union of a non-empty โ—-directed family โ„ฑ of subsystems of U, then every neighbourhood of T(U) already appears in some T(D) with D โˆˆ โ„ฑ (and conversely). The forward direction is by induction; the products use directedness to merge the two component witnesses into a single D.

                  theorem Domain.Neighborhood.Exercise619.FExpr.obj_continuous_mp (T : FExpr) {โ„ฑ : Set ScottSys} {U : ScottSys} :
                  DirectedOn (fun (a b : ScottSys) => a.sys โ— b.sys) โ„ฑ โ†’ โ„ฑ.Nonempty โ†’ (โˆ€ D โˆˆ โ„ฑ, D.sys โ— U.sys) โ†’ (โˆ€ (X : Set ExampleB.Str), U.sys.mem X โ†” โˆƒ D โˆˆ โ„ฑ, D.sys.mem X) โ†’ โˆ€ {W : Set ExampleB.Str}, (T.obj U).sys.mem W โ†’ โˆƒ D โˆˆ โ„ฑ, (T.obj D).sys.mem W

                  Forward direction of continuity on domains: a neighbourhood of T(U) is a neighbourhood of some T(D) with D โˆˆ โ„ฑ.

                  theorem Domain.Neighborhood.Exercise619.FExpr.obj_continuous (T : FExpr) {โ„ฑ : Set ScottSys} {U : ScottSys} (hdir : DirectedOn (fun (a b : ScottSys) => a.sys โ— b.sys) โ„ฑ) (hne : โ„ฑ.Nonempty) (hsub : โˆ€ D โˆˆ โ„ฑ, D.sys โ— U.sys) (hU : โˆ€ (X : Set ExampleB.Str), U.sys.mem X โ†” โˆƒ D โˆˆ โ„ฑ, D.sys.mem X) (W : Set ExampleB.Str) :
                  (T.obj U).sys.mem W โ†” โˆƒ D โˆˆ โ„ฑ, (T.obj D).sys.mem W

                  ฮปD. T(D) is continuous on domains. For a non-empty โ—-directed family โ„ฑ of subsystems of U whose union is U, the neighbourhood family of T(U) is the union of those of the T(D).

                  Continuous on maps โ€” full directed-sup preservation #

                  Scott's continuous on maps (Definition 6.8): ฮปf. T(f) is approximable, equivalently (Exercise 2.13) it is continuous โ€” monotone (map_mono) and preserving directed unions of maps. If f is the pointwise union of a non-empty directed family gแตข, then T(f) is the pointwise union of the T(gแตข). The products use directedness to merge the two component witnesses.

                  theorem Domain.Neighborhood.Exercise619.FExpr.map_continuous_mp (T : FExpr) {I : Type} {X Y : ScottSys} {g : I โ†’ ApproximableMap X.sys Y.sys} {f : ApproximableMap X.sys Y.sys} [Nonempty I] :
                  (โˆ€ (i j : I), โˆƒ (k : I), g i โ‰ค g k โˆง g j โ‰ค g k) โ†’ (โˆ€ (A B : Set ExampleB.Str), f.rel A B โ†” โˆƒ (i : I), (g i).rel A B) โ†’ โˆ€ {A B : Set ExampleB.Str}, (T.map f).rel A B โ†’ โˆƒ (i : I), (T.map (g i)).rel A B

                  Forward direction of continuity on maps: a related pair of T(f) is already related by some T(gแตข).

                  theorem Domain.Neighborhood.Exercise619.FExpr.map_continuous (T : FExpr) {I : Type} [Nonempty I] {X Y : ScottSys} (g : I โ†’ ApproximableMap X.sys Y.sys) (f : ApproximableMap X.sys Y.sys) (hdir : โˆ€ (i j : I), โˆƒ (k : I), g i โ‰ค g k โˆง g j โ‰ค g k) (hf : โˆ€ (A B : Set ExampleB.Str), f.rel A B โ†” โˆƒ (i : I), (g i).rel A B) (A B : Set ExampleB.Str) :
                  (T.map f).rel A B โ†” โˆƒ (i : I), (T.map (g i)).rel A B

                  ฮปf. T(f) is continuous on maps. For a non-empty directed family gแตข with pointwise union f, the relation of T(f) is the union of those of the T(gแตข) โ€” T(f) is approximable.

                  Exercise 6.20 โ€” ฮปฮ“. tok(T({ฮ“})) is continuous, hence a fixed point exists #

                  For any system ๐’Ÿ let tok(๐’Ÿ) be the underlying set of tokens, so that ๐’Ÿ is a system over tok(๐’Ÿ). For the category of Exercise 6.19 show that the function ฮปฮ“. tok(T({ฮ“})) is continuous on the domain {ฮ“ โІ {0,1}* โˆฃ ฮ› โˆˆ ฮ“}, where T is any of the functors generated in 6.19. Conclude that there must exist a set ฮ“ = tok(T({ฮ“})), so that {ฮ“} โ— T({ฮ“}), and so 6.14 applies.

                  Here tok(๐’Ÿ) = ๐’Ÿ.master (the master neighbourhood is the token set ฮ”, since ๐’Ÿ โІ ๐’ซ(ฮ”)), and {ฮ“} is the one-neighbourhood system singletonSys ฮ“ with master ฮ“. The key simplification is that the master of T({ฮ“}) is computed by a tiny token-level recursion mFun T that needs no NeighborhoodSystem data at all: constants are constant, the identity returns ฮ“, and both sum and product return {ฮ›} โˆช 0ยท(โ€ฆ) โˆช 1ยท(โ€ฆ) (sumTokMaster = prodTokNbhd on masters). mFun_eq_master identifies mFun T ฮ“ with tok(T({ฮ“})). The function mFun T is monotone (mFun_mono) and continuous โ€” in fact fully additive โ€” on the powerset of {0,1}* (mFun_continuous), so its restriction to {ฮ“ โˆฃ ฮ› โˆˆ ฮ“} is continuous on that domain. The least fixed point above the bottom {ฮ›} is the explicit Kleene union โ‹ƒโ‚™ mFunโฟ({ฮ›}) (mIter), giving ฮ“ = tok(T({ฮ“})) (exists_tok_fixedPoint) and hence {ฮ“} โ— T({ฮ“}) (exists_singleton_subsystem), exactly the hypothesis Theorem 6.14 needs. (For the bottom to stay in the domain we need ฮ› โˆˆ tok(C) for the constant systems C; this is recorded by FExpr.RootedConst, and holds automatically for sums and products since their masters contain ฮ›.)

                  tok(๐’Ÿ) โ€” the underlying set of tokens of a system, i.e. its master neighbourhood ฮ”.

                  Equations
                  Instances For

                    The one-neighbourhood system {ฮ“} over {0,1}*: its only neighbourhood is ฮ“ itself, and its master (token set) is ฮ“. It is โˆ…-free precisely because ฮ“ is non-empty.

                    Equations
                    • One or more equations did not get rendered due to their size.
                    Instances For

                      The token-level master recursion. mFun T ฮ“ computes tok(T({ฮ“})) purely from ฮ“, without touching the neighbourhood data of {ฮ“} (mFun_eq_master): constants are constant, the identity returns ฮ“, and both sum and product wrap the two component token sets with the tags 0,1 under a common root ฮ› (sumTokMaster = prodTokNbhd agree on masters).

                      Equations
                      Instances For
                        theorem Domain.Neighborhood.Exercise619.mFun_eq_master (T : FExpr) {ฮ“ : Set ExampleB.Str} (h : ฮ“.Nonempty) :
                        mFun T ฮ“ = (T.obj (singletonSys ฮ“ h)).sys.master

                        mFun T ฮ“ is exactly the token set tok(T({ฮ“})) = (T.obj {ฮ“}).sys.master.

                        Monotone on the domain #

                        Monotonicity of the tagged-union shape shared by sum and product.

                        theorem Domain.Neighborhood.Exercise619.mFun_mono (T : FExpr) {ฮ“ ฮ“' : Set ExampleB.Str} (h : ฮ“ โІ ฮ“') :
                        mFun T ฮ“ โІ mFun T ฮ“'

                        ฮปฮ“. tok(T({ฮ“})) is monotone on the domain.

                        Continuous on the domain #

                        theorem Domain.Neighborhood.Exercise619.insertTag_continuous {โ„ฑ : Set (Set ExampleB.Str)} {U : Set ExampleB.Str} (hne : โ„ฑ.Nonempty) {p q : Set ExampleB.Str โ†’ Set ExampleB.Str} (hp : โˆ€ (w : ExampleB.Str), w โˆˆ p U โ†” โˆƒ ฮ“ โˆˆ โ„ฑ, w โˆˆ p ฮ“) (hq : โˆ€ (w : ExampleB.Str), w โˆˆ q U โ†” โˆƒ ฮ“ โˆˆ โ„ฑ, w โˆˆ q ฮ“) (w : ExampleB.Str) :

                        Continuity (full additivity) of the tagged-union shape shared by sum and product.

                        theorem Domain.Neighborhood.Exercise619.mFun_continuous (T : FExpr) {โ„ฑ : Set (Set ExampleB.Str)} {U : Set ExampleB.Str} (_hdir : DirectedOn (fun (x1 x2 : Set ExampleB.Str) => x1 โІ x2) โ„ฑ) (hne : โ„ฑ.Nonempty) (hU : โˆ€ (w : ExampleB.Str), w โˆˆ U โ†” โˆƒ ฮ“ โˆˆ โ„ฑ, w โˆˆ ฮ“) (w : ExampleB.Str) :
                        w โˆˆ mFun T U โ†” โˆƒ ฮ“ โˆˆ โ„ฑ, w โˆˆ mFun T ฮ“

                        ฮปฮ“. tok(T({ฮ“})) is continuous on the domain {ฮ“ โˆฃ ฮ› โˆˆ ฮ“}. For a non-empty โІ-directed family โ„ฑ with union U, the token set of T({U}) is the union of those of the T({ฮ“}). (The proof in fact establishes full additivity โ€” directedness is not needed for the master level โ€” but the statement is the directed-sup form Scott calls continuous.)

                        A fixed point ฮ“ = tok(T({ฮ“})) โ€” so {ฮ“} โ— T({ฮ“}) and 6.14 applies #

                        ฮ› โˆˆ tok(C) for every constant C occurring in T. This is what keeps the bottom {ฮ›} and the whole Kleene chain inside the domain {ฮ“ โˆฃ ฮ› โˆˆ ฮ“}; sums and products satisfy it for free.

                        Equations
                        Instances For
                          theorem Domain.Neighborhood.Exercise619.mFun_nil_mem (T : FExpr) :
                          T.RootedConst โ†’ โˆ€ {ฮ“ : Set ExampleB.Str}, [] โˆˆ ฮ“ โ†’ [] โˆˆ mFun T ฮ“

                          If ฮ› โˆˆ ฮ“ then ฮ› โˆˆ tok(T({ฮ“})) โ€” so ฮปฮ“. tok(T({ฮ“})) is an endofunction of the domain.

                          The Kleene iteration mFunโฟ({ฮ›}) whose union is the least fixed point above {ฮ›}.

                          Equations
                          Instances For
                            theorem Domain.Neighborhood.Exercise619.mFun_iter_fixed (T : FExpr) (hT : T.RootedConst) :
                            mFun T (โ‹ƒ (n : โ„•), mIter T n) = โ‹ƒ (n : โ„•), mIter T n

                            The Kleene union is a fixed point of ฮปฮ“. tok(T({ฮ“})).

                            theorem Domain.Neighborhood.Exercise619.exists_tok_fixedPoint (T : FExpr) (hT : T.RootedConst) :
                            โˆƒ (ฮ“ : Set ExampleB.Str), [] โˆˆ ฮ“ โˆง mFun T ฮ“ = ฮ“

                            The conclusion of Exercise 6.20 (token level). For any construct T whose constants contain ฮ›, there is a set ฮ“ with ฮ› โˆˆ ฮ“ and ฮ“ = tok(T({ฮ“})).

                            The conclusion of Exercise 6.20 (object level): {ฮ“} โ— T({ฮ“}), so Theorem 6.14 applies. From the fixed point ฮ“ = tok(T({ฮ“})), the one-neighbourhood system {ฮ“} is a subsystem of T({ฮ“}): they share the master ฮ“, and ฮ“ is a (the master) neighbourhood of T({ฮ“}).