What a parameter pack owes, and one atom kind's machinery #
The machineries above the combinators take their parameters in a pack
(DescriptiveComplexity.Draw.StageArgs, TagArgs, ElemArgs), so what they
owe the interpretation is stated pack by pack. A pack's fields split in two:
the static ones – which slot a trip walks, which block it names, where the
coordinate loop lives – must not depend on the instance at all
(DescriptiveComplexity.Draw.UConst), since they are what the emitted formula
is built from; the dynamic ones are guards and control updates, and owe the
usual three obligations.
With the three pack statements, an atom kind's machinery
(DescriptiveComplexity.Draw.Data.kindRule) is definable one constructor at
a time: the stage atom's by
DescriptiveComplexity.Draw.Data.uRulesDefinable_stageRule, an expansion
atom's by the tag-branched statement, an equality's and an order atom's by the
element loop's.
A field that does not depend on the instance: what a static parameter of a pack owes, the emitted formula being built from it.
Equations
- DescriptiveComplexity.Draw.UConst F = ∃ (a : α), ∀ (e : DescriptiveComplexity.Draw.Env L), F e = a
Instances For
Dependency graph
An element loop's pack #
What an element loop's pack owes.
The tracks it walks are the same at every instance.
- MatchOf (j : Fin nr) : UGDefinable fun (e : Env L) => (args e).MatchOf j
Each leaf's name guard is definable.
And so is each leaf's filing.
- initEl : UStDefinable fun (e : Env L) => (args e).initEl
The three folds are definable.
- advEl : UStDefinable fun (e : Env L) => (args e).advEl
Advancing and folding.
- exitSt : UStDefinable fun (e : Env L) => (args e).exitSt
The final fold.
- IsMaxEl : UGDefinable fun (e : Env L) (f : Q → e.α) (x : W → e.α) => (args e).IsMaxEl f
And the exhaustion test.
Instances For
Dependency graph
Dependency graph
A tag-branched machinery's pack #
What a tag-branched machinery's pack owes.
The witness tracks are the same at every instance.
- MatchT (i : Fin m) : UGDefinable fun (e : Env L) => (args e).MatchT i
Each witness read's name guard is definable.
And so is its filing.
- TagsAre (τ : T) : UGDefinable fun (e : Env L) (f : Q → e.α) (x : W → e.α) => (args e).TagsAre τ f
The branch's decoding is definable.
The leaf tracks are the same at every instance.
Each leaf's name guard is definable.
- setFlagE (τ : T) (j : Fin (nrOf τ)) (b : Bool) : UStDefinable fun (e : Env L) => (args e).setFlagE τ j b
And so is its filing.
- initEl (τ : T) : UStDefinable fun (e : Env L) => (args e).initEl τ
The three folds are definable, per branch.
- advEl (τ : T) : UStDefinable fun (e : Env L) => (args e).advEl τ
Advancing and folding.
- exitSt (τ : T) : UStDefinable fun (e : Env L) => (args e).exitSt τ
The final fold.
- IsMaxEl (τ : T) : UGDefinable fun (e : Env L) (f : Q → e.α) (x : W → e.α) => (args e).IsMaxEl τ f
And the exhaustion test.
Instances For
Dependency graph
Dependency graph
A stage atom's pack, and an atom kind's machinery #
What a stage atom's pack owes.
The source tracks are the same at every instance.
And so are the two block families.
The target's among them.
And the coordinate loop's control location.
and the stage track read under the head.
The copied bit is definable.
- setBit (b : Bool) : UStDefinable fun (e : Env L) => (args e).setBit b
And so is its filing.
- initLv : UStDefinable fun (e : Env L) => (args e).initLv
The coordinate loop's two updates are definable.
- advLv : UStDefinable fun (e : Env L) => (args e).advLv
The advance among them.
With its exhaustion test.
- setAv (b : Bool) : UStDefinable fun (e : Env L) => (args e).setAv b
and the verdict's filing.
Instances For
Dependency graph
Dependency graph
What an atom kind's pack owes, one constructor at a time.
Equations
- DescriptiveComplexity.Draw.Data.UKindArgsDef (DescriptiveComplexity.Draw.MatAtom.stage i a) args = DescriptiveComplexity.Draw.Data.UStageArgsDef args
- DescriptiveComplexity.Draw.Data.UKindArgsDef (DescriptiveComplexity.Draw.MatAtom.exp a a_1) args = DescriptiveComplexity.Draw.UTagArgsDef args
- DescriptiveComplexity.Draw.Data.UKindArgsDef (DescriptiveComplexity.Draw.MatAtom.eq a a_1) args = DescriptiveComplexity.Draw.UElemArgsDef args
- DescriptiveComplexity.Draw.Data.UKindArgsDef (DescriptiveComplexity.Draw.MatAtom.ord a a_1) args = DescriptiveComplexity.Draw.UElemArgsDef args
Instances For
Dependency graph
An atom kind's machinery is definable, given its pack: the stage atom's by its own statement, an expansion atom's by the tag-branched one, an equality's and an order atom's by the element loop's.