Record type with named fields (#208). Quantifying over a
record-shaped binding lets specs reference structured agent
state without flattening into per-field scalar bindings.
Fields are stored in declaration order; the gate evaluator
resolves expr.field against Value::Record’s IndexMap,
which preserves insertion order.
List of an element type (#208). Quantifying over a list lets
specs reason about agent collections — outstanding orders,
active charging sessions, message queues — via length,
head, tail, and indexed access (xs[i]).
Named user type (#208 slice 3). Refers to a user-defined ADT
from the host program (e.g. Message, Order). The gate
evaluator inspects the value’s variant tag at match time;
no compile-time variant table is needed for the gate path.
The random-input prover (check_spec) can’t sample arbitrary
user types and fails out — those tests should provide
concrete bindings instead.