Documentation

DescriptiveComplexity.Problems.Wide.DrawTagged

Tag-branched element loops: the expansion atoms and the domain gates #

An expansion atom's defining sentence – and a block's domain sentence – depends on the tags of its argument points. The machine reads them first: one named-bit read per argument position and candidate tag, at the canonical tag-witness cell, the verdicts stored one-hot in the control. A branch checkpoint then dispatches on the decoded tag tuple – one dispatch rule per tuple, their guards made exclusive by the decoding – into that tuple's own element loop (DescriptiveComplexity.Problems.Wide.DrawElem), which evaluates the sentence's prefix with one leaf read per block atom of its matrix.

The expansion atoms instantiate this at their arity, the domain gates at one argument. As everywhere, the shapes and separation are fixed here; the decodings and folds are parameters.

The shapes #

The rules of a branch checkpoint: the walk back, and one dispatch per tag tuple.

  • stay {T : Type} : BrRule T

    Walk left back to the marker.

  • dsp {T : Type} : T → BrRule T

    Dispatch into the tuple's loop.

Instances For
    Dependency graph
    inductive DescriptiveComplexity.Draw.TagPh (m : ℕ) (T : Type) (nrOf : T → ℕ) :

    The phases of a tag-branched machinery: the witness reads, the branch checkpoint, and one element loop per tag tuple.

    • tagRdP {m : ℕ} {T : Type} {nrOf : T → ℕ} : Fin m → ReadPh → TagPh m T nrOf

      The i-th witness read.

    • brP {m : ℕ} {T : Type} {nrOf : T → ℕ} : TagPh m T nrOf

      The branch checkpoint.

    • loopP {m : ℕ} {T : Type} {nrOf : T → ℕ} (τ : T) : ElemPh (nrOf τ) → TagPh m T nrOf

      A phase of the tuple's element loop.

    Instances For
      Dependency graph
      inductive DescriptiveComplexity.Draw.TagSite (m : ℕ) (T : Type) (nrOf : T → ℕ) :

      The sites of a tag-branched machinery.

      Instances For
        Dependency graph
        Dependency graph
        Dependency graph
        def DescriptiveComplexity.Draw.tagFirstRd {P T : Type} {m : ℕ} {nrOf : T → ℕ} (emb : TagPh m T nrOf → P) :
        P

        The first witness read's entry, or the branch checkpoint when there is none.

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For
          Dependency graph
          def DescriptiveComplexity.Draw.tagNextRd {P T : Type} {m : ℕ} {nrOf : T → ℕ} (emb : TagPh m T nrOf → P) (i : Fin m) :
          P

          The phase after the i-th witness read.

          Equations
          • One or more equations did not get rendered due to their size.
          Instances For
            Dependency graph
            def DescriptiveComplexity.Draw.tagRule {A Q W P T : Type} {m : ℕ} {nrOf : T → ℕ} (one : A) (wk rg : W) (emb : TagPh m T nrOf → P) (rdTrackT : Fin m → W) (MatchT : Fin m → (Q → A) → (W → A) → Prop) (setTagFlag : Fin m → Bool → (Q → A) → (W → A) → Q → A) (TagsAre : T → (Q → A) → Prop) (rdTrackE : (τ : T) → Fin (nrOf τ) → W) (MatchE : (τ : T) → Fin (nrOf τ) → (Q → A) → (W → A) → Prop) (setFlagE : (τ : T) → Fin (nrOf τ) → Bool → (Q → A) → (W → A) → Q → A) (initEl advEl exitSt : T → (Q → A) → (W → A) → Q → A) (IsMaxEl : T → (Q → A) → Prop) (exitPh : P) (i : TagSite m T nrOf) :
            TagSh m T nrOf i → Rule A Q W P

            The rules of a tag-branched machinery.

            Equations
            • One or more equations did not get rendered due to their size.
            Instances For
              Dependency graph
              theorem DescriptiveComplexity.Draw.tagSep {A Q W P T : Type} {m : ℕ} {nrOf : T → ℕ} (one : A) (wk rg : W) {emb : TagPh m T nrOf → P} (rdTrackT : Fin m → W) (MatchT : Fin m → (Q → A) → (W → A) → Prop) (setTagFlag : Fin m → Bool → (Q → A) → (W → A) → Q → A) (TagsAre : T → (Q → A) → Prop) (rdTrackE : (τ : T) → Fin (nrOf τ) → W) (MatchE : (τ : T) → Fin (nrOf τ) → (Q → A) → (W → A) → Prop) (setFlagE : (τ : T) → Fin (nrOf τ) → Bool → (Q → A) → (W → A) → Q → A) (initEl advEl exitSt : T → (Q → A) → (W → A) → Q → A) (IsMaxEl : T → (Q → A) → Prop) (exitPh : P) (hemb : Function.Injective emb) (hTags : ∀ (τ τ' : T) (f : Q → A), TagsAre τ f → TagsAre τ' f → τ = τ') (i : TagSite m T nrOf) (ρ ρ' : TagSh m T nrOf i) (f : Q → A) (g : W → A) :
              (tagRule one wk rg emb rdTrackT MatchT setTagFlag TagsAre rdTrackE MatchE setFlagE initEl advEl exitSt IsMaxEl exitPh i ρ).guard f g → (tagRule one wk rg emb rdTrackT MatchT setTagFlag TagsAre rdTrackE MatchE setFlagE initEl advEl exitSt IsMaxEl exitPh i ρ').guard f g → (tagRule one wk rg emb rdTrackT MatchT setTagFlag TagsAre rdTrackE MatchE setFlagE initEl advEl exitSt IsMaxEl exitPh i ρ).srcPh = (tagRule one wk rg emb rdTrackT MatchT setTagFlag TagsAre rdTrackE MatchE setFlagE initEl advEl exitSt IsMaxEl exitPh i ρ').srcPh → ρ = ρ'

              A tag-branched machinery separates in-shape: the reads by their kit, the branch's dispatches by the exclusive decoding, the loops by their own separation.

              Dependency graph