Missing data is null

Reaching past what is there does not drop the row; it yields null. A missing key and an out-of-range index both give null, and null keeps spreading as you reach further in:

null is one of the value shapes, not the absence of a row, so every rule still produces a tuple; the last one branches on it with = null.

This safe-navigation null is Datamog-specific: standard Datalog has only flat, atomic values and no notion of null.