Metatheory of semantic stores #
List-level definedness laws, store-substitution symmetry, and generated-name
reservation properties for the definitions in Store.
Key results:
isDefinedCons/isDefinedAppand the correspondingSemanticStore.varsUndefined*laws compose and decompose list-level definedness.substStoresFlip,substDefinedFlip,invStoresComm, andinvStoresExceptCommestablish substitution and invariance symmetry.SemanticStore.isReserved.gen_slot_none,SemanticStore.isReserved.storeWith_gen, andSemanticStore.isReserved.monoestablish and preserve generated-name reservations.
Definedness of a singleton and a tail implies definedness of their cons.
Definedness of two lists implies definedness of their concatenation.
Definedness of a cons list implies definedness of its head and tail.
Definedness of a concatenation implies definedness of both component lists.
Undefinedness of a singleton and a tail implies undefinedness of their cons.
Undefinedness of two lists implies undefinedness of their concatenation.
Undefinedness of a cons list implies undefinedness of its head and tail.
Undefinedness of a concatenation implies undefinedness of both components.
Store substitution #
Store substitution can be read in the reverse direction after swapping its identifier pairs.
Reverse-direction store substitution can be flipped back.
Pairwise definedness is symmetric after swapping substitution pairs.
Swapped pairwise definedness can be flipped back.
Store invariance is symmetric.
Store invariance outside a key set is symmetric.
Generated-name reservations #
The freshly generated name's slot is undefined in a reserved store, given a well-formed generator state and classification of the generated name.
Defining the freshly generated name and advancing the generator preserves reserved-name freshness.
Advancing the generator weakens the set of ungenerated names, so reserved name freshness remains true.