QueryValue
A literal a predicate compares against.
Deliberately not a Variant: a predicate has to be writable without an encoder, has to hash, and has to survive being compared with itself — none of which a document view offers. What it is is the four families the engine can bracket a value into, which is what keeps the AST and ColumnPredicate speaking about the same thing.
Numbers are canonical. Every Numeric strips its trailing zeros, so 10, 10.0 and 1e1 are one literal. That is the same canonicalisation ValueSignature applies on the way into a term dictionary, and the two have to agree or a query written with an integer would fail to find a document that stored a decimal.
There is no binary literal. JSON produces none, ColumnPredicate has no binary family to bracket one into, and a literal that only one of the two index kinds could answer for would be a value whose plan depends on which index happens to exist.