Documentation

InfinitaryLogic.Descriptive.Mycielski

Mycielski's theorem for Cantor space #

mycielski_cantor: for a meager set M ⊆ (ℕ → Bool) × (ℕ → Bool) there is a continuous ψ : (ℕ → Bool) → (ℕ → Bool) with (ψ a, ψ b) ∉ M for all a ≠ b. This is Mycielski's independent-set theorem (Kechris, CDST 19.1) specialized to Cantor space and binary relations — step 4 of the classical category route to Silver's theorem (see InfinitaryLogic/Conditional/SilverCategoryRoute.lean and docs/silver-phase2-route.md).

Construction #

Write the complement of M over a countable family of dense open sets U k. Build, by recursion on levels, a family of pointed cylinders (anchor, depth) indexed by List Bool nodes:

The scheme of (closed) cylinders has vanishing diameter and contains the closures of its children, so CantorScheme.inducedMap is total and continuous. For distinct branches a ≠ b and any k, at any level m > max (firstDiff a b) k the branch nodes are distinct, so the image pair lies in U k; hence it lies in ⋂ k, U k ⊆ Mᶜ.

Avoidance is achieved only in the limit — for dense M no two cylinders can have cross-product avoiding M — which is why this construction does not factor through CantorScheme.exists_antichain_map (whose sibling cross-avoidance hypothesis is exactly finite-stage avoidance). Injectivity of ψ is not claimed; downstream consumers recover it from reflexivity of the relation being avoided.

Implementation note #

Cantor space carries the PiNat metric via PiNat.metricSpaceOfDiscreteUniformity, whose uniformity is definitionally the product uniformity (see the warning on PiNat.metricSpace: since Bool has a UniformSpace instance, the plain PiNat.metricSpace would create a second, non-defeq uniform structure).

Cylinder prerequisites #

Cylinders are closed (they are in fact clopen).

theorem MycielskiCantor.exists_cylinder_subset {V : Set (Bool)} (hV : IsOpen V) {x : Bool} (hx : x V) :
∃ (n : ), PiNat.cylinder x nV

Every open neighborhood contains a cylinder around the point.

Pointed cylinders and refinement #

Refines q p: the pointed cylinder q = (anchor, depth) is at least as deep as p and its cylinder is contained in that of p.

Equations
Instances For
    theorem MycielskiCantor.Refines.trans {r q p : (Bool) × } (h₁ : Refines r q) (h₂ : Refines q p) :
    theorem MycielskiCantor.exists_refines_box_subset {U : Set ((Bool) × (Bool))} (hUo : IsOpen U) (hUd : Dense U) (p q : (Bool) × ) :
    ∃ (p' : (Bool) × ) (q' : (Bool) × ), Refines p' p Refines q' q PiNat.cylinder p'.1 p'.2 ×ˢ PiNat.cylinder q'.1 q'.2U

    Single pair-killing move: two pointed cylinders can be refined so that the product of their cylinders lands inside a given dense open subset of the square.

    theorem MycielskiCantor.exists_refines_forall_pairs {ι : Type u_1} [DecidableEq ι] {U : Set ((Bool) × (Bool))} (hUo : IsOpen U) (hUd : Dense U) (s : Finset (ι × ι)) (P : ι(Bool) × ) :
    ∃ (Q : ι(Bool) × ), (∀ (i : ι), Refines (Q i) (P i)) abs, ab.1 ab.2PiNat.cylinder (Q ab.1).1 (Q ab.1).2 ×ˢ PiNat.cylinder (Q ab.2).1 (Q ab.2).2U

    Pair-killing fold: a family of pointed cylinders can be refined so that all pairs of distinct indices from a given finite set of pairs have cylinder products inside a dense open subset of the square.

    Level-indexed stages #

    All binary lists of a given length, as a finset.

    Equations
    Instances For
      structure MycielskiCantor.Stage (U : Set ((Bool) × (Bool))) (m : ) :

      Stage m of the construction: a pointed cylinder for every node, such that level-m nodes have depth at least m and all pairs of distinct level-m nodes have cylinder products inside U k for every k < m.

      Instances For
        def MycielskiCantor.base (U : Set ((Bool) × (Bool))) :
        Stage U 0

        The root stage: every node gets the full space.

        Equations
        Instances For
          def MycielskiCantor.presplit {U : Set ((Bool) × (Bool))} {m : } (S : Stage U m) :
          List Bool(Bool) ×

          The split step: each child b :: l refines its parent l by fixing the coordinate at the parent's depth to b.

          Equations
          Instances For
            theorem MycielskiCantor.presplit_refines {U : Set ((Bool) × (Bool))} {m : } (S : Stage U m) (b : Bool) (l : List Bool) :
            Refines (presplit S (b :: l)) (S.f l)
            theorem MycielskiCantor.exists_step {U : Set ((Bool) × (Bool))} {m : } (hUo : ∀ (k : ), IsOpen (U k)) (hUd : ∀ (k : ), Dense (U k)) (S : Stage U m) :
            ∃ (T : Stage U (m + 1)), ∀ (l : List Bool) (b : Bool), l.length = mRefines (T.f (b :: l)) (S.f l)

            The inductive step: split every node, then run the pair-killing fold against the (dense open) intersection of the first m + 1 dense open sets.

            noncomputable def MycielskiCantor.stages (U : Set ((Bool) × (Bool))) (hUo : ∀ (k : ), IsOpen (U k)) (hUd : ∀ (k : ), Dense (U k)) (m : ) :
            Stage U m

            The full tower of stages, with each level refining the previous one.

            Equations
            Instances For
              theorem MycielskiCantor.stages_refines {U : Set ((Bool) × (Bool))} (hUo : ∀ (k : ), IsOpen (U k)) (hUd : ∀ (k : ), Dense (U k)) (m : ) (l : List Bool) (b : Bool) (hl : l.length = m) :
              Refines ((stages U hUo hUd (m + 1)).f (b :: l)) ((stages U hUo hUd m).f l)
              theorem mycielski_cantor {M : Set ((Bool) × (Bool))} (hM : IsMeagre M) :
              ∃ (ψ : (Bool)Bool), Continuous ψ ∀ (a b : Bool), a b(ψ a, ψ b)M

              Mycielski's theorem for Cantor space: for a meager set M in the square of Cantor space, there is a continuous ψ : (ℕ → Bool) → (ℕ → Bool) such that (ψ a, ψ b) ∉ M whenever a ≠ b. (Kechris, CDST 19.1, specialized.) Injectivity of ψ is not asserted; when avoiding a reflexive relation it is automatic.