https://alloy.readthedocs.io/en/latest/language/signatures.html#relations >[!note] >Node.prox' = Node.prox != all n:Node | n.prox' = n.prox = prox' = prox >[!note] >some b: Bucket | ... ```c // Recall the hash table Alloy model, // now with mutable lists inside the buckets. sig Bucket { var head : lone Node } sig Node { key : one Key, var prox : lone Node } sig Key { hash : one Hash } sig Hash {} // Specify the operation of inserting a node // in the hash table. The node should be // inserted at the head of a bucket. // If the operation only works well when the // hash of the new node does not exist in the // table you get Two points. If it always // works well you get Five points. Use the // respective commands to check how many // points you have. pred insert[n : Node] { always n in ( Bucket.head + Bucket.head.prox) always n in Bucket.head or n in Node.prox //if hash empty -> node to head of bucket n.key.hash not in Hash implies ( lone b:Bucket | b.head = none implies b.head' = n ) //if hash empty -> bucket of desired hash, add to next n.key.hash in Hash implies ( lone b: Bucket | b.head.key.hash = n.key.hash | b.head.*prox = n ) } ```