The symbolic operators: projection, selection, join #
A symbolic relation holds, for every descriptor of a parameter row, the
encodings of the rows a query computes at the parameter rows of that
type – and junk under the descriptors of no parameter row. What each
operator below is asked is to map the slice of its input under the
descriptor of a parameter row (Sym.slice) to the slice of its output:
the encodings of the input's rows to the encodings of the output's. The
rows may carry further columns after their cells (P of them), which a
recursive term carries through its rounds untouched.
The descriptor of a symbolic row: its first k cells.
Equations
- Sym.descP r = Sym.ofCells fun (i : Fin k) (j : Fin (7 + k)) => r (Sym.cc P (Fin.castAdd n i) j)
Instances For
Dependency graph
The slice of a symbolic relation under a descriptor.
Equations
Instances For
Dependency graph
The encodings of rows carrying further columns.
Equations
- Sym.encAll C par R = Multiset.map (fun (x : Tuple T n × Tuple T P) => Sym.rowEncP C par x.1 x.2) R
Instances For
Dependency graph
What a symbolic relation is asked: under the descriptor of the
parameter row par, it holds the encodings of R.
Equations
- Sym.SliceIs C par Q R = (Sym.slice Q (Sym.descEnc C par) = Sym.encAll C par R)
Instances For
Dependency graph
Maps keeping the descriptor #
Projection #
The symbolic projection's slice: the encodings of the projected rows.
Dependency graph
Selection #
Join #
The two descriptors of a pair of symbolic rows agree, the left one
carrying P₁ further columns and the right one P₂.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The cells of a joined row: the descriptor and the cells of the
left row, then the cells of the right row, then the further columns of
the left row (L) or of the right row (R).
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The join keeping the left row's further columns.
Equations
- Sym.joinLSA P₁ P₂ i = Fin.addCases (Sym.joinCellSA P₁ P₂) (fun (z : Fin P₁) => Sym.SA.col (Fin.castAdd ((k + n₂) * (7 + k) + P₂) (Fin.natAdd ((k + n₁) * (7 + k)) z))) i
Instances For
Dependency graph
The join keeping the right row's further columns.
Equations
- Sym.joinRSA P₁ P₂ i = Fin.addCases (Sym.joinCellSA P₁ P₂) (fun (z : Fin P₂) => Sym.SA.col (Fin.natAdd ((k + n₁) * (7 + k) + P₁) (Fin.natAdd ((k + n₂) * (7 + k)) z))) i
Instances For
Dependency graph
The descriptors, and the leaves #
The cells of a leaf's row, paired with a descriptor: the descriptor's cells, then the row's values as concrete cells.
Equations
- One or more equations did not get rendered due to their size.