Documentation

Mathlib.Topology.Category.Profinite.Nobeling

Nöbeling's theorem #

This file proves Nöbeling's theorem.

Main result #

Proof idea #

We follow the proof of theorem 5.4 in [Sch19], in which the idea is to embed S in a product of I copies of Bool for some sufficiently large I, and then to choose a well-ordering on I and use ordinal induction over that well-order. Here we can let I be the set of clopen subsets of S since S is totally separated.

The above means it suffices to prove the following statement: For a closed subset C of I → Bool, the -module LocallyConstant C ℤ is free.

For i : I, let e C i : LocallyConstant C ℤ denote the map fun f ↦ (if f.val i then 1 else 0).

The basis will consist of products e C iᵣ * ⋯ * e C i₁ with iᵣ > ⋯ > i₁ which cannot be written as linear combinations of lexicographically smaller products. We call this set GoodProducts C

What is proved by ordinal induction is that this set is linearly independent. The fact that it spans can be proved directly.

References #

Projection maps #

The purpose of this section is twofold.

Firstly, in the proof that the set GoodProducts C spans the whole module LocallyConstant C ℤ, we need to project C down to finite discrete subsets and write C as a cofiltered limit of those.

Secondly, in the inductive argument, we need to project C down to "smaller" sets satisfying the inductive hypothesis.

In this section we define the relevant projection maps and prove some compatibility results.

Main definitions #

def Profinite.NobelingProof.Proj {I : Type u} (J : IProp) [(i : I) → Decidable (J i)] :
(IBool)IBool

The projection mapping everything that satisfies J i to itself, and everything else to false

Equations
Instances For
    @[simp]
    theorem Profinite.NobelingProof.continuous_proj {I : Type u} (J : IProp) [(i : I) → Decidable (J i)] :
    def Profinite.NobelingProof.π {I : Type u} (C : Set (IBool)) (J : IProp) [(i : I) → Decidable (J i)] :
    Set (IBool)

    The image of Proj π J

    Equations
    Instances For
      def Profinite.NobelingProof.ProjRestrict {I : Type u} (C : Set (IBool)) (J : IProp) [(i : I) → Decidable (J i)] :
      C(π C J)

      The restriction of Proj π J to a subset, mapping to its image.

      Equations
      Instances For
        @[simp]
        theorem Profinite.NobelingProof.ProjRestrict_coe {I : Type u} (C : Set (IBool)) (J : IProp) [(i : I) → Decidable (J i)] (a✝ : C) (a✝¹ : I) :
        (ProjRestrict C J a✝) a✝¹ = Proj J (↑a✝) a✝¹
        @[simp]
        theorem Profinite.NobelingProof.continuous_projRestrict {I : Type u} (C : Set (IBool)) (J : IProp) [(i : I) → Decidable (J i)] :
        theorem Profinite.NobelingProof.proj_eq_self {I : Type u} (J : IProp) [(i : I) → Decidable (J i)] {x : IBool} (h : ∀ (i : I), x i falseJ i) :
        Proj J x = x
        theorem Profinite.NobelingProof.proj_prop_eq_self {I : Type u} (C : Set (IBool)) (J : IProp) [(i : I) → Decidable (J i)] (hh : ∀ (i : I), xC, x i falseJ i) :
        π C J = C
        theorem Profinite.NobelingProof.proj_comp_of_subset {I : Type u} (J K : IProp) [(i : I) → Decidable (J i)] [(i : I) → Decidable (K i)] (h : ∀ (i : I), J iK i) :
        theorem Profinite.NobelingProof.proj_eq_of_subset {I : Type u} (C : Set (IBool)) (J K : IProp) [(i : I) → Decidable (J i)] [(i : I) → Decidable (K i)] (h : ∀ (i : I), J iK i) :
        π (π C K) J = π C J
        def Profinite.NobelingProof.ProjRestricts {I : Type u} (C : Set (IBool)) {J K : IProp} [(i : I) → Decidable (J i)] [(i : I) → Decidable (K i)] (h : ∀ (i : I), J iK i) :
        (π C K)(π C J)

        A variant of ProjRestrict with domain of the form π C K

        Equations
        Instances For
          @[simp]
          theorem Profinite.NobelingProof.ProjRestricts_coe {I : Type u} (C : Set (IBool)) {J K : IProp} [(i : I) → Decidable (J i)] [(i : I) → Decidable (K i)] (h : ∀ (i : I), J iK i) (a✝ : (π C K)) (a✝¹ : I) :
          (ProjRestricts C h a✝) a✝¹ = Proj J (↑a✝) a✝¹
          @[simp]
          theorem Profinite.NobelingProof.continuous_projRestricts {I : Type u} (C : Set (IBool)) {J K : IProp} [(i : I) → Decidable (J i)] [(i : I) → Decidable (K i)] (h : ∀ (i : I), J iK i) :
          theorem Profinite.NobelingProof.surjective_projRestricts {I : Type u} (C : Set (IBool)) {J K : IProp} [(i : I) → Decidable (J i)] [(i : I) → Decidable (K i)] (h : ∀ (i : I), J iK i) :
          theorem Profinite.NobelingProof.projRestricts_eq_id {I : Type u} (C : Set (IBool)) (J : IProp) [(i : I) → Decidable (J i)] :
          theorem Profinite.NobelingProof.projRestricts_eq_comp {I : Type u} (C : Set (IBool)) {J K L : IProp} [(i : I) → Decidable (J i)] [(i : I) → Decidable (K i)] [(i : I) → Decidable (L i)] (hJK : ∀ (i : I), J iK i) (hKL : ∀ (i : I), K iL i) :
          theorem Profinite.NobelingProof.projRestricts_comp_projRestrict {I : Type u} (C : Set (IBool)) {J K : IProp} [(i : I) → Decidable (J i)] [(i : I) → Decidable (K i)] (h : ∀ (i : I), J iK i) :
          def Profinite.NobelingProof.iso_map {I : Type u} (C : Set (IBool)) (J : IProp) [(i : I) → Decidable (J i)] :
          C((π C J), (IndexFunctor.obj C J))

          The objectwise map in the isomorphism spanFunctorProfinite.indexFunctor.

          Equations
          Instances For
            theorem Profinite.NobelingProof.iso_map_bijective {I : Type u} (C : Set (IBool)) (J : IProp) [(i : I) → Decidable (J i)] :
            noncomputable def Profinite.NobelingProof.spanFunctor {I : Type u} {C : Set (IBool)} [(s : Finset I) → (i : I) → Decidable (i s)] (hC : IsCompact C) :

            For a given compact subset C of I → Bool, spanFunctor is the functor from the poset of finsets of I to Profinite, sending a finite subset set J to the image of C under the projection Proj J.

            Equations
            • One or more equations did not get rendered due to their size.
            Instances For
              noncomputable def Profinite.NobelingProof.spanCone {I : Type u} {C : Set (IBool)} [(s : Finset I) → (i : I) → Decidable (i s)] (hC : IsCompact C) :

              The limit cone on spanFunctor with point C.

              Equations
              • One or more equations did not get rendered due to their size.
              Instances For
                noncomputable def Profinite.NobelingProof.spanCone_isLimit {I : Type u} {C : Set (IBool)} [(s : Finset I) → (i : I) → Decidable (i s)] (hC : IsCompact C) :

                spanCone is a limit cone.

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

                  Defining the basis #

                  Our proposed basis consists of products e C iᵣ * ⋯ * e C i₁ with iᵣ > ⋯ > i₁ which cannot be written as linear combinations of lexicographically smaller products. See below for the definition of e.

                  Main definitions #

                  Main results #

                  def Profinite.NobelingProof.e {I : Type u} (C : Set (IBool)) (i : I) :

                  e C i is the locally constant map from C : Set (I → Bool) to sending f to 1 if f.val i = true, and 0 otherwise.

                  Equations
                  Instances For

                    Products I is the type of lists of decreasing elements of I, so a typical element is [i₁, i₂, ...] with i₁ > i₂ > .... We order Products I lexicographically, so [] < [i₁, ...], and [i₁, i₂, ...] < [j₁, j₂, ...] if either i₁ < j₁, or i₁ = j₁ and [i₂, ...] < [j₂, ...].

                    Terms m = [i₁, i₂, ..., iᵣ] of this type will be used to represent products of the form e C i₁ ··· e C iᵣ : LocallyConstant C ℤ . The function associated to m is m.eval.

                    Equations
                    Instances For
                      @[simp]
                      theorem Profinite.NobelingProof.Products.lt_iff_lex_lt {I : Type u} [LinearOrder I] (l m : Products I) :
                      l < m List.Lex (fun (x1 x2 : I) => x1 < x2) l m

                      The evaluation e C i₁ ··· e C iᵣ : C → ℤ of a formal product [i₁, i₂, ..., iᵣ].

                      Equations
                      Instances For

                        The predicate on products which we prove picks out a basis of LocallyConstant C ℤ. We call such a product "good".

                        Equations
                        • One or more equations did not get rendered due to their size.
                        Instances For
                          theorem Profinite.NobelingProof.Products.rel_head!_of_mem {I : Type u} [LinearOrder I] [Inhabited I] {i : I} {l : Products I} (hi : i l) :
                          i (↑l).head!
                          theorem Profinite.NobelingProof.Products.head!_le_of_lt {I : Type u} [LinearOrder I] [Inhabited I] {q l : Products I} (h : q < l) (hq : q []) :
                          (↑q).head! (↑l).head!

                          Evaluation of good products.

                          Equations
                          Instances For
                            noncomputable def Profinite.NobelingProof.GoodProducts.equiv_range {I : Type u} (C : Set (IBool)) [LinearOrder I] :
                            (GoodProducts C) (range C)

                            The type of good products is equivalent to its image.

                            Equations
                            Instances For
                              theorem Profinite.NobelingProof.Products.eval_eq {I : Type u} (C : Set (IBool)) [LinearOrder I] (l : Products I) (x : C) :
                              (eval C l) x = if il, x i = true then 1 else 0
                              theorem Profinite.NobelingProof.Products.evalFacProp {I : Type u} (C : Set (IBool)) [LinearOrder I] {l : Products I} (J : IProp) (h : al, J a) [(j : I) → Decidable (J j)] :
                              (eval (π C J) l) ProjRestrict C J = (eval C l)
                              theorem Profinite.NobelingProof.Products.evalFacProps {I : Type u} (C : Set (IBool)) [LinearOrder I] {l : Products I} (J K : IProp) (h : al, J a) [(j : I) → Decidable (J j)] [(j : I) → Decidable (K j)] (hJK : ∀ (i : I), J iK i) :
                              (eval (π C J) l) ProjRestricts C hJK = (eval (π C K) l)
                              theorem Profinite.NobelingProof.Products.prop_of_isGood {I : Type u} (C : Set (IBool)) [LinearOrder I] {l : Products I} (J : IProp) [(j : I) → Decidable (J j)] (h : isGood (π C J) l) (a : I) :
                              a lJ a

                              The good products span LocallyConstant C ℤ if and only all the products do.

                              The good products span #

                              Most of the argument is developing an API for π C (· ∈ s) when s : Finset I; then the image of C is finite with the discrete topology. In this case, there is a direct argument that the good products span. The general result is deduced from this.

                              Main theorems #

                              noncomputable def Profinite.NobelingProof.πJ {I : Type u} (C : Set (IBool)) [LinearOrder I] (s : Finset I) :
                              LocallyConstant (π C fun (x : I) => x s) →ₗ[] LocallyConstant C

                              The -linear map induced by precomposition of the projection C → π C (· ∈ s).

                              Equations
                              Instances For
                                theorem Profinite.NobelingProof.eval_eq_πJ {I : Type u} (C : Set (IBool)) [LinearOrder I] (s : Finset I) (l : Products I) (hl : Products.isGood (π C fun (x : I) => x s) l) :
                                Products.eval C l = (πJ C s) (Products.eval (π C fun (x : I) => x s) l)
                                noncomputable instance Profinite.NobelingProof.instFintypeElemForallBoolπMemFinset {I : Type u} (C : Set (IBool)) [LinearOrder I] (s : Finset I) :
                                Fintype (π C fun (x : I) => x s)

                                π C (· ∈ s) is finite for a finite set s.

                                Equations
                                noncomputable def Profinite.NobelingProof.spanFinBasis {I : Type u} (C : Set (IBool)) [LinearOrder I] (s : Finset I) (x : (π C fun (x : I) => x s)) :
                                LocallyConstant (π C fun (x : I) => x s)

                                The Kronecker delta as a locally constant map from π C (· ∈ s) to .

                                Equations
                                Instances For
                                  def Profinite.NobelingProof.factors {I : Type u} (C : Set (IBool)) [LinearOrder I] (s : Finset I) (x : (π C fun (x : I) => x s)) :
                                  List (LocallyConstant (π C fun (x : I) => x s) )

                                  A certain explicit list of locally constant maps. The theorem factors_prod_eq_basis shows that the product of the elements in this list is the delta function spanFinBasis C s x.

                                  Equations
                                  • One or more equations did not get rendered due to their size.
                                  Instances For
                                    theorem Profinite.NobelingProof.list_prod_apply {I : Type u_1} (C : Set (IBool)) (x : C) (l : List (LocallyConstant C )) :
                                    l.prod x = (List.map (⇑(LocallyConstant.evalMonoidHom x)) l).prod
                                    theorem Profinite.NobelingProof.factors_prod_eq_basis_of_eq {I : Type u} (C : Set (IBool)) [LinearOrder I] (s : Finset I) {x y : (π C fun (x : I) => x s)} (h : y = x) :
                                    (factors C s x).prod y = 1
                                    theorem Profinite.NobelingProof.e_mem_of_eq_true {I : Type u} (C : Set (IBool)) [LinearOrder I] (s : Finset I) {x : (π C fun (x : I) => x s)} {a : I} (hx : x a = true) :
                                    e (π C fun (x : I) => x s) a factors C s x
                                    theorem Profinite.NobelingProof.one_sub_e_mem_of_false {I : Type u} (C : Set (IBool)) [LinearOrder I] (s : Finset I) {x y : (π C fun (x : I) => x s)} {a : I} (ha : y a = true) (hx : x a = false) :
                                    1 - e (π C fun (x : I) => x s) a factors C s x
                                    theorem Profinite.NobelingProof.factors_prod_eq_basis_of_ne {I : Type u} (C : Set (IBool)) [LinearOrder I] (s : Finset I) {x y : (π C fun (x : I) => x s)} (h : y x) :
                                    (factors C s x).prod y = 0
                                    theorem Profinite.NobelingProof.factors_prod_eq_basis {I : Type u} (C : Set (IBool)) [LinearOrder I] (s : Finset I) (x : (π C fun (x : I) => x s)) :
                                    (factors C s x).prod = spanFinBasis C s x

                                    If s is finite, the product of the elements of the list factors C s x is the delta function at x.

                                    theorem Profinite.NobelingProof.GoodProducts.finsupp_sum_mem_span_eval {I : Type u} (C : Set (IBool)) [LinearOrder I] (s : Finset I) {a : I} {as : List I} (ha : List.Chain' (fun (x1 x2 : I) => x1 > x2) (a :: as)) {c : Products I →₀ } (hc : c.support {m : Products I | m as}) :
                                    (c.sum fun (a_1 : Products I) (b : ) => e (π C fun (x : I) => x s) a * b Products.eval (π C fun (x : I) => x s) a_1) Submodule.span (Products.eval (π C fun (x : I) => x s) '' {m : Products I | m a :: as})
                                    theorem Profinite.NobelingProof.GoodProducts.spanFin {I : Type u} (C : Set (IBool)) [LinearOrder I] (s : Finset I) [WellFoundedLT I] :
                                    Submodule.span (Set.range (eval (π C fun (x : I) => x s)))

                                    If s is a finite subset of I, then the good products span.

                                    theorem Profinite.NobelingProof.fin_comap_jointlySurjective {I : Type u} (C : Set (IBool)) [LinearOrder I] (hC : IsClosed C) (f : LocallyConstant C ) :
                                    ∃ (s : Finset I) (g : LocallyConstant (π C fun (x : I) => x s) ), f = LocallyConstant.comap { toFun := ProjRestrict C fun (x : I) => x s, continuous_toFun := } g

                                    The good products span all of LocallyConstant C ℤ if C is closed.

                                    Relating elements of the well-order I with ordinals #

                                    We choose a well-ordering on I. This amounts to regarding I as an ordinal, and as such it can be regarded as the set of all strictly smaller ordinals, allowing to apply ordinal induction.

                                    Main definitions #

                                    A term of I regarded as an ordinal.

                                    Equations
                                    Instances For
                                      noncomputable def Profinite.NobelingProof.term (I : Type u) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) :
                                      I

                                      An ordinal regarded as a term of I.

                                      Equations
                                      Instances For
                                        theorem Profinite.NobelingProof.term_ord_aux {I : Type u} [LinearOrder I] [WellFoundedLT I] {i : I} (ho : ord I i < Ordinal.type fun (x1 x2 : I) => x1 < x2) :
                                        term I ho = i
                                        @[simp]
                                        theorem Profinite.NobelingProof.ord_term_aux {I : Type u} [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) :
                                        ord I (term I ho) = o
                                        theorem Profinite.NobelingProof.ord_term {I : Type u} [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) (i : I) :
                                        ord I i = o term I ho = i

                                        A predicate saying that C is "small" enough to satisfy the inductive hypothesis.

                                        Equations
                                        Instances For

                                          The predicate on ordinals which we prove by induction, see GoodProducts.P0, GoodProducts.Plimit and GoodProducts.linearIndependentAux in the section Induction below

                                          Equations
                                          • One or more equations did not get rendered due to their size.
                                          Instances For
                                            theorem Profinite.NobelingProof.Products.prop_of_isGood_of_contained {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {l : Products I} (o : Ordinal.{u}) (h : isGood C l) (hsC : contained C o) (i : I) (hi : i l) :
                                            ord I i < o

                                            The zero case of the induction #

                                            In this case, we have contained C 0 which means that C is either empty or a singleton.

                                            The empty list as a Products

                                            Equations
                                            Instances For

                                              There is a unique GoodProducts for the singleton {fun _ ↦ false}.

                                              Equations

                                              -linear maps induced by projections #

                                              We define injective -linear maps between modules of the form LocallyConstant C ℤ induced by precomposition with the projections defined in the section Projections.

                                              Main definitions #

                                              Main result #

                                              theorem Profinite.NobelingProof.contained_eq_proj {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] (o : Ordinal.{u}) (h : contained C o) :
                                              C = π C fun (x : I) => ord I x < o
                                              theorem Profinite.NobelingProof.isClosed_proj {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] (o : Ordinal.{u}) (hC : IsClosed C) :
                                              IsClosed (π C fun (x : I) => ord I x < o)
                                              theorem Profinite.NobelingProof.contained_proj {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] (o : Ordinal.{u}) :
                                              contained (π C fun (x : I) => ord I x < o) o
                                              noncomputable def Profinite.NobelingProof.πs {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] (o : Ordinal.{u}) :
                                              LocallyConstant (π C fun (x : I) => ord I x < o) →ₗ[] LocallyConstant C

                                              The -linear map induced by precomposition of the projection C → π C (ord I · < o).

                                              Equations
                                              Instances For
                                                @[simp]
                                                theorem Profinite.NobelingProof.πs_apply_apply {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] (o : Ordinal.{u}) (g : LocallyConstant (π C fun (x : I) => ord I x < o) ) (a✝ : C) :
                                                ((πs C o) g) a✝ = g (ProjRestrict C (fun (x : I) => ord I x < o) a✝)
                                                theorem Profinite.NobelingProof.coe_πs {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] (o : Ordinal.{u}) (f : LocallyConstant (π C fun (x : I) => ord I x < o) ) :
                                                ((πs C o) f) = f ProjRestrict C fun (x : I) => ord I x < o
                                                noncomputable def Profinite.NobelingProof.πs' {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o₁ o₂ : Ordinal.{u}} (h : o₁ o₂) :
                                                LocallyConstant (π C fun (x : I) => ord I x < o₁) →ₗ[] LocallyConstant (π C fun (x : I) => ord I x < o₂)

                                                The -linear map induced by precomposition of the projection π C (ord I · < o₂) → π C (ord I · < o₁) for o₁ ≤ o₂.

                                                Equations
                                                Instances For
                                                  @[simp]
                                                  theorem Profinite.NobelingProof.πs'_apply_apply {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o₁ o₂ : Ordinal.{u}} (h : o₁ o₂) (g : LocallyConstant (π C fun (x : I) => ord I x < o₁) ) (a✝ : (π C fun (x : I) => ord I x < o₂)) :
                                                  ((πs' C h) g) a✝ = g (ProjRestricts C a✝)
                                                  theorem Profinite.NobelingProof.coe_πs' {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o₁ o₂ : Ordinal.{u}} (h : o₁ o₂) (f : LocallyConstant (π C fun (x : I) => ord I x < o₁) ) :
                                                  ((πs' C h) f).toFun = f.toFun ProjRestricts C
                                                  theorem Profinite.NobelingProof.injective_πs' {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o₁ o₂ : Ordinal.{u}} (h : o₁ o₂) :
                                                  theorem Profinite.NobelingProof.Products.lt_ord_of_lt {I : Type u} [LinearOrder I] [WellFoundedLT I] {l m : Products I} {o : Ordinal.{u}} (h₁ : m < l) (h₂ : il, ord I i < o) (i : I) :
                                                  i mord I i < o
                                                  theorem Profinite.NobelingProof.Products.eval_πs {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {l : Products I} {o : Ordinal.{u}} (hlt : il, ord I i < o) :
                                                  (πs C o) (eval (π C fun (x : I) => ord I x < o) l) = eval C l
                                                  theorem Profinite.NobelingProof.Products.eval_πs' {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {l : Products I} {o₁ o₂ : Ordinal.{u}} (h : o₁ o₂) (hlt : il, ord I i < o₁) :
                                                  (πs' C h) (eval (π C fun (x : I) => ord I x < o₁) l) = eval (π C fun (x : I) => ord I x < o₂) l
                                                  theorem Profinite.NobelingProof.Products.eval_πs_image {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {l : Products I} {o : Ordinal.{u}} (hl : il, ord I i < o) :
                                                  eval C '' {m : Products I | m < l} = (πs C o) '' (eval (π C fun (x : I) => ord I x < o) '' {m : Products I | m < l})
                                                  theorem Profinite.NobelingProof.Products.eval_πs_image' {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {l : Products I} {o₁ o₂ : Ordinal.{u}} (h : o₁ o₂) (hl : il, ord I i < o₁) :
                                                  eval (π C fun (x : I) => ord I x < o₂) '' {m : Products I | m < l} = (πs' C h) '' (eval (π C fun (x : I) => ord I x < o₁) '' {m : Products I | m < l})
                                                  theorem Profinite.NobelingProof.Products.head_lt_ord_of_isGood {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] [Inhabited I] {l : Products I} {o : Ordinal.{u}} (h : isGood (π C fun (x : I) => ord I x < o) l) (hn : l []) :
                                                  ord I (↑l).head! < o
                                                  theorem Profinite.NobelingProof.Products.isGood_mono {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {l : Products I} {o₁ o₂ : Ordinal.{u}} (h : o₁ o₂) (hl : isGood (π C fun (x : I) => ord I x < o₁) l) :
                                                  isGood (π C fun (x : I) => ord I x < o₂) l

                                                  If l is good w.r.t. π C (ord I · < o₁) and o₁ ≤ o₂, then it is good w.r.t. π C (ord I · < o₂)

                                                  The limit case of the induction #

                                                  We relate linear independence in LocallyConstant (π C (ord I · < o')) ℤ with linear independence in LocallyConstant C ℤ, where contained C o and o' < o.

                                                  When o is a limit ordinal, we prove that the good products in LocallyConstant C ℤ are linearly independent if and only if a certain directed union is linearly independent. Each term in this directed union is in bijection with the good products w.r.t. π C (ord I · < o') for an ordinal o' < o, and these are linearly independent by the inductive hypothesis.

                                                  Main definitions #

                                                  Main results #

                                                  The image of the GoodProducts for π C (ord I · < o) in LocallyConstant C ℤ. The name smaller refers to the setting in which we will use this, when we are mapping in GoodProducts from a smaller set, i.e. when o is a smaller ordinal than the one C is "contained" in.

                                                  Equations
                                                  • One or more equations did not get rendered due to their size.
                                                  Instances For
                                                    noncomputable def Profinite.NobelingProof.GoodProducts.range_equiv_smaller_toFun {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] (o : Ordinal.{u}) (x : (range (π C fun (x : I) => ord I x < o))) :
                                                    (smaller C o)

                                                    The map from the image of the GoodProducts in LocallyConstant (π C (ord I · < o)) ℤ to smaller C o

                                                    Equations
                                                    Instances For
                                                      noncomputable def Profinite.NobelingProof.GoodProducts.range_equiv_smaller {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] (o : Ordinal.{u}) :
                                                      (range (π C fun (x : I) => ord I x < o)) (smaller C o)

                                                      The equivalence from the image of the GoodProducts in LocallyConstant (π C (ord I · < o)) ℤ to smaller C o

                                                      Equations
                                                      Instances For
                                                        theorem Profinite.NobelingProof.GoodProducts.smaller_factorization {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] (o : Ordinal.{u}) :
                                                        (fun (p : (smaller C o)) => p) (range_equiv_smaller C o).toFun = (πs C o) fun (p : (range (π C fun (x : I) => ord I x < o))) => p
                                                        theorem Profinite.NobelingProof.GoodProducts.smaller_mono {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o₁ o₂ : Ordinal.{u}} (h : o₁ o₂) :
                                                        smaller C o₁ smaller C o₂
                                                        theorem Profinite.NobelingProof.Products.limitOrdinal {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (ho : o.IsLimit) (l : Products I) :
                                                        isGood (π C fun (x : I) => ord I x < o) l o' < o, isGood (π C fun (x : I) => ord I x < o') l
                                                        theorem Profinite.NobelingProof.GoodProducts.union {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (ho : o.IsLimit) (hsC : contained C o) :
                                                        range C = ⋃ (e : { o' : Ordinal.{u} // o' < o }), smaller C e
                                                        def Profinite.NobelingProof.GoodProducts.range_equiv {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (ho : o.IsLimit) (hsC : contained C o) :
                                                        (range C) (⋃ (e : { o' : Ordinal.{u} // o' < o }), smaller C e)

                                                        The image of the GoodProducts in C is equivalent to the union of smaller C o' over all ordinals o' < o.

                                                        Equations
                                                        Instances For
                                                          theorem Profinite.NobelingProof.GoodProducts.range_equiv_factorization {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (ho : o.IsLimit) (hsC : contained C o) :
                                                          (fun (p : (⋃ (e : { o' : Ordinal.{u} // o' < o }), smaller C e)) => p) (range_equiv C ho hsC).toFun = fun (p : (range C)) => p
                                                          theorem Profinite.NobelingProof.GoodProducts.linearIndependent_iff_union_smaller {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (ho : o.IsLimit) (hsC : contained C o) :
                                                          LinearIndependent (eval C) LinearIndependent fun (p : (⋃ (e : { o' : Ordinal.{u} // o' < o }), smaller C e)) => p

                                                          The successor case in the induction #

                                                          Here we assume that o is an ordinal such that contained C (o+1) and o < I. The element in I corresponding to o is called term I ho, but in this informal docstring we refer to it simply as o.

                                                          This section follows the proof in [Sch19] quite closely. A translation of the notation there is as follows:

                                                          [scholze2019condensed]                  | This file
                                                          `S₀`                                    |`C0`
                                                          `S₁`                                    |`C1`
                                                          `\overline{S}`                          |`π C (ord I · < o)
                                                          `\overline{S}'`                         |`C'`
                                                          The left map in the exact sequence      |`πs`
                                                          The right map in the exact sequence     |`Linear_CC'`
                                                          

                                                          When comparing the proof of the successor case in Theorem 5.4 in [Sch19] with this proof, one should read the phrase "is a basis" as "is linearly independent". Also, the short exact sequence in [Sch19] is only proved to be left exact here (indeed, that is enough since we are only proving linear independence).

                                                          This section is split into two sections. The first one, ExactSequence defines the left exact sequence mentioned in the previous paragraph (see succ_mono and succ_exact). It corresponds to the penultimate paragraph of the proof in [Sch19]. The second one, GoodProducts corresponds to the last paragraph in the proof in [Sch19].

                                                          Main definitions #

                                                          The main definitions in the section ExactSequence are all just notation explained in the table above.

                                                          The main definitions in the section GoodProducts are as follows:

                                                          Main results #

                                                          The main results in the section GoodProducts are as follows:

                                                          def Profinite.NobelingProof.C0 {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) :
                                                          Set (IBool)

                                                          The subset of C consisting of those elements whose o-th entry is false.

                                                          Equations
                                                          Instances For
                                                            def Profinite.NobelingProof.C1 {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) :
                                                            Set (IBool)

                                                            The subset of C consisting of those elements whose o-th entry is true.

                                                            Equations
                                                            Instances For
                                                              theorem Profinite.NobelingProof.isClosed_C0 {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (hC : IsClosed C) (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) :
                                                              IsClosed (C0 C ho)
                                                              theorem Profinite.NobelingProof.isClosed_C1 {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (hC : IsClosed C) (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) :
                                                              IsClosed (C1 C ho)
                                                              theorem Profinite.NobelingProof.contained_C1 {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) :
                                                              contained (π (C1 C ho) fun (x : I) => ord I x < o) o
                                                              theorem Profinite.NobelingProof.union_C0C1_eq {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) :
                                                              C0 C ho C1 C ho = C
                                                              def Profinite.NobelingProof.C' {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) :
                                                              Set (IBool)

                                                              The intersection of C0 and the projection of C1. We will apply the inductive hypothesis to this set.

                                                              Equations
                                                              Instances For
                                                                theorem Profinite.NobelingProof.isClosed_C' {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (hC : IsClosed C) (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) :
                                                                IsClosed (C' C ho)
                                                                theorem Profinite.NobelingProof.contained_C' {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) :
                                                                contained (C' C ho) o
                                                                noncomputable def Profinite.NobelingProof.SwapTrue {I : Type u} [LinearOrder I] [WellFoundedLT I] (o : Ordinal.{u}) :
                                                                (IBool)IBool

                                                                Swapping the o-th coordinate to true.

                                                                Equations
                                                                Instances For
                                                                  theorem Profinite.NobelingProof.swapTrue_mem_C1 {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (hsC : contained C (Order.succ o)) (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) (f : (π (C1 C ho) fun (x : I) => ord I x < o)) :
                                                                  SwapTrue o f C1 C ho
                                                                  def Profinite.NobelingProof.CC'₀ {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) :
                                                                  (C' C ho)C

                                                                  The first way to map C' into C.

                                                                  Equations
                                                                  Instances For
                                                                    noncomputable def Profinite.NobelingProof.CC'₁ {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (hsC : contained C (Order.succ o)) (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) :
                                                                    (C' C ho)C

                                                                    The second way to map C' into C.

                                                                    Equations
                                                                    Instances For
                                                                      theorem Profinite.NobelingProof.continuous_CC'₀ {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) :
                                                                      theorem Profinite.NobelingProof.continuous_CC'₁ {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (hsC : contained C (Order.succ o)) (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) :
                                                                      Continuous (CC'₁ C hsC ho)
                                                                      noncomputable def Profinite.NobelingProof.Linear_CC'₀ {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) :

                                                                      The -linear map induced by precomposing with CC'₀

                                                                      Equations
                                                                      Instances For
                                                                        noncomputable def Profinite.NobelingProof.Linear_CC'₁ {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (hsC : contained C (Order.succ o)) (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) :

                                                                        The -linear map induced by precomposing with CC'₁

                                                                        Equations
                                                                        Instances For
                                                                          noncomputable def Profinite.NobelingProof.Linear_CC' {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (hsC : contained C (Order.succ o)) (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) :

                                                                          The difference between Linear_CC'₁ and Linear_CC'₀.

                                                                          Equations
                                                                          Instances For
                                                                            theorem Profinite.NobelingProof.CC_comp_zero {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (hsC : contained C (Order.succ o)) (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) (y : LocallyConstant (π C fun (x : I) => ord I x < o) ) :
                                                                            (Linear_CC' C hsC ho) ((πs C o) y) = 0
                                                                            theorem Profinite.NobelingProof.C0_projOrd {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (hsC : contained C (Order.succ o)) (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) {x : IBool} (hx : x C0 C ho) :
                                                                            Proj (fun (x : I) => ord I x < o) x = x
                                                                            theorem Profinite.NobelingProof.C1_projOrd {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (hsC : contained C (Order.succ o)) (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) {x : IBool} (hx : x C1 C ho) :
                                                                            SwapTrue o (Proj (fun (x : I) => ord I x < o) x) = x
                                                                            theorem Profinite.NobelingProof.CC_exact {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (hC : IsClosed C) (hsC : contained C (Order.succ o)) (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) {f : LocallyConstant C } (hf : (Linear_CC' C hsC ho) f = 0) :
                                                                            ∃ (y : LocallyConstant (π C fun (x : I) => ord I x < o) ), (πs C o) y = f
                                                                            theorem Profinite.NobelingProof.succ_exact {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (hC : IsClosed C) (hsC : contained C (Order.succ o)) (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) :
                                                                            theorem Profinite.NobelingProof.GoodProducts.union_succ {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (hsC : contained C (Order.succ o)) (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) :
                                                                            GoodProducts C = GoodProducts (π C fun (x : I) => ord I x < o) MaxProducts C ho
                                                                            def Profinite.NobelingProof.GoodProducts.sum_to {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) :
                                                                            (GoodProducts (π C fun (x : I) => ord I x < o)) (MaxProducts C ho)Products I

                                                                            The inclusion map from the sum of GoodProducts (π C (ord I · < o)) and (MaxProducts C ho) to Products I.

                                                                            Equations
                                                                            Instances For
                                                                              theorem Profinite.NobelingProof.GoodProducts.injective_sum_to {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) :
                                                                              theorem Profinite.NobelingProof.GoodProducts.sum_to_range {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) :
                                                                              Set.range (sum_to C ho) = GoodProducts (π C fun (x : I) => ord I x < o) MaxProducts C ho
                                                                              noncomputable def Profinite.NobelingProof.GoodProducts.sum_equiv {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (hsC : contained C (Order.succ o)) (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) :
                                                                              (GoodProducts (π C fun (x : I) => ord I x < o)) (MaxProducts C ho) (GoodProducts C)

                                                                              The equivalence from the sum of GoodProducts (π C (ord I · < o)) and (MaxProducts C ho) to GoodProducts C.

                                                                              Equations
                                                                              Instances For
                                                                                theorem Profinite.NobelingProof.GoodProducts.sum_equiv_comp_eval_eq_elim {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (hsC : contained C (Order.succ o)) (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) :
                                                                                eval C (sum_equiv C hsC ho).toFun = Sum.elim (fun (l : (GoodProducts (π C fun (x : I) => ord I x < o))) => Products.eval C l) fun (l : (MaxProducts C ho)) => Products.eval C l
                                                                                def Profinite.NobelingProof.GoodProducts.SumEval {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) :
                                                                                (GoodProducts (π C fun (x : I) => ord I x < o)) (MaxProducts C ho)LocallyConstant C

                                                                                Let

                                                                                N := LocallyConstant (π C (ord I · < o)) ℤ

                                                                                M := LocallyConstant C ℤ

                                                                                P := LocallyConstant (C' C ho) ℤ

                                                                                ι := GoodProducts (π C (ord I · < o))

                                                                                ι' := GoodProducts (C' C ho')

                                                                                v : ι → N := GoodProducts.eval (π C (ord I · < o))

                                                                                Then SumEval C ho is the map u in the diagram below. It is linearly independent if and only if GoodProducts.eval C is, see linearIndependent_iff_sum. The top row is the exact sequence given by succ_exact and succ_mono. The left square commutes by GoodProducts.square_commutes.

                                                                                0 --→ N --→ M --→  P
                                                                                      ↑     ↑      ↑
                                                                                     v|    u|      |
                                                                                      ιι ⊕ ι' ← ι'
                                                                                
                                                                                Equations
                                                                                • One or more equations did not get rendered due to their size.
                                                                                Instances For
                                                                                  theorem Profinite.NobelingProof.GoodProducts.span_sum {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (hsC : contained C (Order.succ o)) (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) :
                                                                                  Set.range (eval C) = Set.range (Sum.elim (fun (l : (GoodProducts (π C fun (x : I) => ord I x < o))) => Products.eval C l) fun (l : (MaxProducts C ho)) => Products.eval C l)
                                                                                  theorem Profinite.NobelingProof.GoodProducts.square_commutes {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) :
                                                                                  SumEval C ho Sum.inl = (ModuleCat.ofHom (πs C o)).hom eval (π C fun (x : I) => ord I x < o)
                                                                                  theorem Profinite.NobelingProof.swapTrue_eq_true {I : Type u} [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) (x : IBool) :
                                                                                  SwapTrue o x (term I ho) = true
                                                                                  theorem Profinite.NobelingProof.mem_C'_eq_false {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) (x : IBool) :
                                                                                  x C' C hox (term I ho) = false

                                                                                  List.tail as a Products.

                                                                                  Equations
                                                                                  • l.Tail = (↑l).tail,
                                                                                  Instances For
                                                                                    theorem Profinite.NobelingProof.Products.max_eq_o_cons_tail {I : Type u} [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) [Inhabited I] (l : Products I) (hl : l []) (hlh : (↑l).head! = term I ho) :
                                                                                    l = term I ho :: l.Tail
                                                                                    theorem Profinite.NobelingProof.Products.max_eq_o_cons_tail' {I : Type u} [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) [Inhabited I] (l : Products I) (hl : l []) (hlh : (↑l).head! = term I ho) (hlc : List.Chain' (fun (x1 x2 : I) => x1 > x2) (term I ho :: l.Tail)) :
                                                                                    l = term I ho :: l.Tail, hlc
                                                                                    theorem Profinite.NobelingProof.GoodProducts.head!_eq_o_of_maxProducts {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (hsC : contained C (Order.succ o)) (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) [Inhabited I] (l : (MaxProducts C ho)) :
                                                                                    (↑l).head! = term I ho
                                                                                    theorem Profinite.NobelingProof.GoodProducts.max_eq_o_cons_tail {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (hsC : contained C (Order.succ o)) (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) (l : (MaxProducts C ho)) :
                                                                                    l = term I ho :: (↑l).Tail
                                                                                    theorem Profinite.NobelingProof.Products.evalCons {I : Type u_1} [LinearOrder I] {C : Set (IBool)} {l : List I} {a : I} (hla : List.Chain' (fun (x1 x2 : I) => x1 > x2) (a :: l)) :
                                                                                    eval C a :: l, hla = e C a * eval C l,
                                                                                    theorem Profinite.NobelingProof.Products.max_eq_eval {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (hsC : contained C (Order.succ o)) (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) [Inhabited I] (l : Products I) (hl : l []) (hlh : (↑l).head! = term I ho) :
                                                                                    (Linear_CC' C hsC ho) (eval C l) = eval (C' C ho) l.Tail
                                                                                    theorem Profinite.NobelingProof.GoodProducts.max_eq_eval {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (hsC : contained C (Order.succ o)) (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) (l : (MaxProducts C ho)) :
                                                                                    (Linear_CC' C hsC ho) (Products.eval C l) = Products.eval (C' C ho) (↑l).Tail
                                                                                    theorem Profinite.NobelingProof.GoodProducts.max_eq_eval_unapply {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (hsC : contained C (Order.succ o)) (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) :
                                                                                    ((Linear_CC' C hsC ho) fun (l : (MaxProducts C ho)) => Products.eval C l) = fun (l : (MaxProducts C ho)) => Products.eval (C' C ho) (↑l).Tail
                                                                                    theorem Profinite.NobelingProof.GoodProducts.chain'_cons_of_lt {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (hsC : contained C (Order.succ o)) (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) (l : (MaxProducts C ho)) (q : Products I) (hq : q < (↑l).Tail) :
                                                                                    List.Chain' (fun (x x_1 : I) => x > x_1) (term I ho :: q)
                                                                                    theorem Profinite.NobelingProof.GoodProducts.good_lt_maxProducts {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (hsC : contained C (Order.succ o)) (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) (q : (GoodProducts (π C fun (x : I) => ord I x < o))) (l : (MaxProducts C ho)) :
                                                                                    List.Lex (fun (x1 x2 : I) => x1 < x2) q l
                                                                                    theorem Profinite.NobelingProof.GoodProducts.maxTail_isGood {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (hC : IsClosed C) (hsC : contained C (Order.succ o)) (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) (l : (MaxProducts C ho)) (h₁ : Submodule.span (Set.range (eval (π C fun (x : I) => ord I x < o)))) :
                                                                                    Products.isGood (C' C ho) (↑l).Tail

                                                                                    Removing the leading o from a term of MaxProducts C yields a list which isGood with respect to C'.

                                                                                    noncomputable def Profinite.NobelingProof.GoodProducts.MaxToGood {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (hC : IsClosed C) (hsC : contained C (Order.succ o)) (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) (h₁ : Submodule.span (Set.range (eval (π C fun (x : I) => ord I x < o)))) :
                                                                                    (MaxProducts C ho)(GoodProducts (C' C ho))

                                                                                    Given l : MaxProducts C ho, its Tail is a GoodProducts (C' C ho).

                                                                                    Equations
                                                                                    Instances For
                                                                                      theorem Profinite.NobelingProof.GoodProducts.maxToGood_injective {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (hC : IsClosed C) (hsC : contained C (Order.succ o)) (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) (h₁ : Submodule.span (Set.range (eval (π C fun (x : I) => ord I x < o)))) :
                                                                                      Function.Injective (MaxToGood C hC hsC ho h₁)
                                                                                      theorem Profinite.NobelingProof.GoodProducts.linearIndependent_comp_of_eval {I : Type u} (C : Set (IBool)) [LinearOrder I] [WellFoundedLT I] {o : Ordinal.{u}} (hC : IsClosed C) (hsC : contained C (Order.succ o)) (ho : o < Ordinal.type fun (x1 x2 : I) => x1 < x2) (h₁ : Submodule.span (Set.range (eval (π C fun (x : I) => ord I x < o)))) :
                                                                                      LinearIndependent (eval (C' C ho))LinearIndependent (ι := (MaxProducts C ho)) ((ModuleCat.ofHom (Linear_CC' C hsC ho)).hom SumEval C ho Sum.inr)

                                                                                      The induction #

                                                                                      Here we put together the results of the sections Zero, Limit and Successor to prove the predicate P I o holds for all ordinals o, and conclude with the main result:

                                                                                      We also define

                                                                                      theorem Profinite.NobelingProof.GoodProducts.Plimit {I : Type u} [LinearOrder I] [WellFoundedLT I] (o : Ordinal.{u}) (ho : o.IsLimit) :
                                                                                      (∀ o' < o, P I o')P I o

                                                                                      GoodProducts C as a -basis for LocallyConstant C ℤ.

                                                                                      Equations
                                                                                      Instances For
                                                                                        theorem Profinite.NobelingProof.Nobeling_aux {I : Type u} [LinearOrder I] [WellFoundedLT I] {S : Profinite} {ι : S.toTopIBool} (hι : Topology.IsClosedEmbedding ι) :

                                                                                        Given a profinite set S and a closed embedding S → (I → Bool), the -module LocallyConstant C ℤ is free.

                                                                                        noncomputable def Profinite.Nobeling.ι (S : Profinite) :
                                                                                        S.toTop{ C : Set S.toTop // IsClopen C }Bool

                                                                                        The embedding S → (I → Bool) where I is the set of clopens of S.

                                                                                        Equations
                                                                                        Instances For
                                                                                          @[deprecated Profinite.Nobeling.isClosedEmbedding (since := "2024-10-26")]

                                                                                          Alias of Profinite.Nobeling.isClosedEmbedding.


                                                                                          The map Nobeling.ι is a closed embedding.

                                                                                          Nöbeling's theorem: the -module LocallyConstant S ℤ is free for every S : Profinite