Documentation

InfinitaryLogic.ModelTheory.FiberAssembly

The labeled-fiber language, the generic row assembly, and its prefix specialization #

A row assembly glues a family of component structures into one structure: a set of rows, and for every row r and every label τ a fiber C r τ carrying a component structure. The generic assembly is parameterized by an arbitrary row type R and fiber family C : R → Label U → Type, so that different row types (finite allowed words now, infinite allowed paths later) and different fiber families can be compared by the assembly theorems. The prefix specialization instantiates it with rows the allowed words and fibers chosen by the prefix rule.

Labels and the language #

Labels are all nonempty words over a linear order U, admissible or not (Label U), so the signature does not depend on any allowed-word membership. The language lang U Lc is relational, with equality and the symbols of Sym U Lc:

Component-language boundary. The assembly encodes the relation symbols of Lc only; component function symbols are not encoded, so two component structures with the same relational data but different function interpretations assemble identically. For that reason the restriction theorem that recovers component isomorphisms from an assembled isomorphism requires [Lc.IsRelational]; the definitions here do not, and no unused hypothesis is imposed.

The generic assembly #

Carrier R C is the disjoint union of the rows and of all fiber points (Carrier.row, Carrier.pt). instStructure interprets every symbol as listed above (relMap), with one interpretation equation per symbol.

The prefix specialization #

The construction uses allowed-word membership, order comparisons, prefixes, and the component family. No well-founded initial segment W appears anywhere. The input order on rows and its successor relation are not symbols of lang.

The symbol set is countable when U and the component symbols are (instCountableSigmaSym).

Labels #

The labels: nonempty words over U, admissible or not.

Equations
Instances For

    The last letter of a label.

    Equations
    Instances For

      The language #

      inductive FirstOrder.Language.FiberAssembly.Sym (U : Type u) (Lc : Language) :
      ℕ → Type (max u w)

      The relation symbols of the assembled language.

      Instances For

        The assembled language: relational, with the symbols of Sym.

        Equations
        Instances For

          The generic assembly #

          inductive FirstOrder.Language.FiberAssembly.Carrier {U : Type u} (R : Type u) (C : R → Label U → Type u) :

          The assembled carrier over a row type R and a fiber family C: rows, and the points of every fiber.

          Instances For
            def FirstOrder.Language.FiberAssembly.relMap {U : Type u} {Lc : Language} {R : Type u} {C : R → Label U → Type u} [(r : R) → (τ : Label U) → Lc.Structure (C r τ)] {n : ℕ} :
            Sym U Lc n → (Fin n → Carrier R C) → Prop

            Interpretation of each symbol, by cases on the symbol.

            Equations
            Instances For
              @[instance_reducible]
              instance FirstOrder.Language.FiberAssembly.instStructure {U : Type u} {Lc : Language} {R : Type u} {C : R → Label U → Type u} [(r : R) → (τ : Label U) → Lc.Structure (C r τ)] :
              (lang U Lc).Structure (Carrier R C)

              The assembled structure.

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

              Interpretation equations, one per symbol #

              theorem FirstOrder.Language.FiberAssembly.relMap_row {U : Type u} {Lc : Language} {R : Type u} {C : R → Label U → Type u} [(r : R) → (τ : Label U) → Lc.Structure (C r τ)] (v : Fin 1 → Carrier R C) :
              theorem FirstOrder.Language.FiberAssembly.relMap_own {U : Type u} {Lc : Language} {R : Type u} {C : R → Label U → Type u} [(r : R) → (τ : Label U) → Lc.Structure (C r τ)] (v : Fin 2 → Carrier R C) :
              Structure.RelMap Sym.own v ↔ ∃ (r : R) (τ : Label U) (x : C r τ), v 0 = Carrier.pt r τ x ∧ v 1 = Carrier.row r
              theorem FirstOrder.Language.FiberAssembly.relMap_lab {U : Type u} {Lc : Language} {R : Type u} {C : R → Label U → Type u} [(r : R) → (τ : Label U) → Lc.Structure (C r τ)] (τ : Label U) (v : Fin 1 → Carrier R C) :
              Structure.RelMap (Sym.lab τ) v ↔ ∃ (r : R) (x : C r τ), v 0 = Carrier.pt r τ x
              theorem FirstOrder.Language.FiberAssembly.relMap_lift {U : Type u} {Lc : Language} {R : Type u} {C : R → Label U → Type u} [(r : R) → (τ : Label U) → Lc.Structure (C r τ)] {l : ℕ} (S : Lc.Relations (l + 1)) (v : Fin (l + 1) → Carrier R C) :
              Structure.RelMap (Sym.lift S) v ↔ ∃ (r : R) (τ : Label U) (y : Fin (l + 1) → C r τ), (∀ (i : Fin (l + 1)), v i = Carrier.pt r τ (y i)) ∧ Structure.RelMap S y
              theorem FirstOrder.Language.FiberAssembly.relMap_lift0 {U : Type u} {Lc : Language} {R : Type u} {C : R → Label U → Type u} [(r : R) → (τ : Label U) → Lc.Structure (C r τ)] (S : Lc.Relations 0) (τ : Label U) (v : Fin 1 → Carrier R C) :
              theorem FirstOrder.Language.FiberAssembly.not_relMap_lift_of_row {U : Type u} {Lc : Language} {R : Type u} {C : R → Label U → Type u} [(r : R) → (τ : Label U) → Lc.Structure (C r τ)] {l : ℕ} (S : Lc.Relations (l + 1)) (v : Fin (l + 1) → Carrier R C) (i : Fin (l + 1)) (r : R) (hv : v i = Carrier.row r) :

              Lifted relations never hold of a row argument.

              theorem FirstOrder.Language.FiberAssembly.relMap_lift_same_fiber {U : Type u} {Lc : Language} {R : Type u} {C : R → Label U → Type u} [(r : R) → (τ : Label U) → Lc.Structure (C r τ)] {l : ℕ} (S : Lc.Relations (l + 1)) (v : Fin (l + 1) → Carrier R C) (h : Structure.RelMap (Sym.lift S) v) (i j : Fin (l + 1)) :
              ∃ (r : R) (τ : Label U) (x : C r τ) (y : C r τ), v i = Carrier.pt r τ x ∧ v j = Carrier.pt r τ y

              Mixed-fiber tuples are false: a lifted relation holds only of arguments from one fiber, the same owner row and the same label.

              theorem FirstOrder.Language.FiberAssembly.relMap_lift0_row {U : Type u} {Lc : Language} {R : Type u} {C : R → Label U → Type u} [(r : R) → (τ : Label U) → Lc.Structure (C r τ)] (S : Lc.Relations 0) (τ : Label U) (r : R) :

              The lift of a nullary symbol is read at the owner row; it does not require the fiber to have any point.

              The prefix specialization #

              An allowed word: nondecreasing, with the i-th letter in A i.

              Equations
              Instances For

                The rows of the prefix specialization: allowed words, the empty word included.

                Equations
                Instances For

                  Which component sits at (p, τ): some (last τ) if τ is a prefix of p, else none (the default component). Computable, so it reduces on concrete inputs.

                  Equations
                  Instances For
                    def FirstOrder.Language.FiberAssembly.Comp {U : Type u} (Bstar : Type u) (B : U → Type u) :
                    Option U → Type u

                    The component at an index: B_* at none, B u at some u.

                    Equations
                    Instances For
                      def FirstOrder.Language.FiberAssembly.prefixFiber {U : Type u} [LinearOrder U] (Bstar : Type u) (B : U → Type u) (A : ℕ → Set U) :
                      Row A → Label U → Type u

                      The prefix fiber family: the component of last τ when τ is a prefix of the row, the default component otherwise.

                      Equations
                      Instances For
                        @[instance_reducible]
                        instance FirstOrder.Language.FiberAssembly.instPrefixFiberStructure {U : Type u} [LinearOrder U] (Lc : Language) (Bstar : Type u) (B : U → Type u) (A : ℕ → Set U) [Lc.Structure Bstar] [(u : U) → Lc.Structure (B u)] (p : Row A) (τ : Label U) :
                        Lc.Structure (prefixFiber Bstar B A p τ)
                        Equations
                        @[reducible, inline]
                        abbrev FirstOrder.Language.FiberAssembly.PrefixCarrier {U : Type u} [LinearOrder U] (Bstar : Type u) (B : U → Type u) (A : ℕ → Set U) :

                        The carrier of the prefix specialization.

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

                          Countability of the carrier #

                          instance FirstOrder.Language.FiberAssembly.instCountableCarrier {U : Type u} (R : Type u) (C : R → Label U → Type u) [Countable R] [Countable U] [∀ (r : R) (τ : Label U), Countable (C r τ)] :

                          The assembled carrier is countable when the rows, the labels, and every fiber are.

                          The rows of the prefix specialization are countable when U is.

                          instance FirstOrder.Language.FiberAssembly.instCountableComp {U : Type u} (Bstar : Type u) (B : U → Type u) [Countable Bstar] [∀ (u : U), Countable (B u)] (o : Option U) :
                          Countable (Comp Bstar B o)

                          Components are countable when the default and every B u are.

                          instance FirstOrder.Language.FiberAssembly.instCountablePrefixFiber {U : Type u} [LinearOrder U] (Bstar : Type u) (B : U → Type u) (A : ℕ → Set U) [Countable Bstar] [∀ (u : U), Countable (B u)] (p : Row A) (τ : Label U) :
                          Countable (prefixFiber Bstar B A p τ)

                          Countability of the symbols #

                          Symbols are countable when U and the component symbols are.