Recognizing a parameter row's descriptor #
The table of an apply's right side holds its rows under every descriptor,
and the apply's left row has to pick out its own: the descriptor whose
cells are the codes of its components. That is a predicate over the row
and a descriptor's cells (Sym.matchSP): each cell is a value equal to the
component, or a gap whose bounds enclose it; and the ranks recorded in the
fresh cells of one gap are ordered as their components, without a hole
below any of them. Over cells the cut can produce, it holds exactly of
the row's own descriptor (Sym.eval3_matchSP).
Gaps and bounds #
Truth of comparisons over columns #
A component against its cell #
The component lies in the cell's gap.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The component is what the cell codes: the value itself, or a value of its gap.
Equations
- Sym.cellMatch a x = ((Sym.isZ (x (Sym.iF k))).and (Sym.SP.atom CompOp.syneq a (x (Sym.iV k)))).or ((Sym.isN (x (Sym.iF k))).and (Sym.freshIn a x))
Instances For
Dependency graph
The codes a cell of a descriptor can hold.
Equations
- Sym.ShapeOK C k (Sym.Code.conc a) = (a ∈ C)
- Sym.ShapeOK C k (Sym.Code.fresh l r) = (Sym.GapOK C l ∧ r ≤ k)
Instances For
Dependency graph
A value fits a code: it is the code's value, or a fresh value of the code's gap.
Equations
- Sym.Fits C v (Sym.Code.conc a) = (v = a)
- Sym.Fits C v (Sym.Code.fresh l r) = (Sym.IsFresh C v ∧ Sym.lo C v = l)
Instances For
Dependency graph
Ranks recorded consistently are the ranks #
The fresh components of a row in a value's gap below it.
Equations
- Sym.below' C par a = {b ∈ Finset.image par Finset.univ | Sym.IsFresh C b ∧ Sym.lo C b = Sym.lo C a ∧ b < a}
Instances For
Dependency graph
Unary ranks up to k #
The descriptor of a row, as a predicate #
Two cells are of one gap.
Equations
- Sym.sameGap x y = (Sym.SP.atom CompOp.syneq (x (Sym.iB k)) (y (Sym.iB k))).and (Sym.SP.atom CompOp.syneq (x (Sym.iV k)) (y (Sym.iV k)))
Instances For
Dependency graph
Two predicates agree.
Instances For
Dependency graph
Two fresh cells of one gap record ranks ordered as their components.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The rank is 0.
Equations
- Sym.thZero x = Sym.andAll (List.map (fun (m : Fin k) => Sym.isLo (x (Sym.iR m))) (List.finRange k))
Instances For
Dependency graph
The second rank is the next of the first.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
A fresh cell's rank leaves no hole below it.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The descriptor's cells are the codes of the row's components.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
Over cells the cut can produce, the predicate holds exactly of a row's own descriptor.
Dependency graph
Reading an output cell back as a value #
Two cells are equal, column by column.
Equations
- Sym.cellEq x y = Sym.andAll (List.map (fun (j : Fin (7 + k)) => Sym.SP.atom CompOp.syneq (x j) (y j)) (List.finRange (7 + k)))
Instances For
Dependency graph
A value is what an output cell codes: the cell's value, or the component whose descriptor cell the output cell is.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
An output cell decodes to the value it codes.