TLA + Проблема с удалением элемента

В настоящее время изучаю TLA + и застряли на этом простом методе удаления человека из реестра. Насколько я могу судить, проблема связана с состоянием разрешения.

Моя функция TLA + выглядит так и удаляет человека из реестра вместе с разрешениями.

DeRegister(p) == 
/\ p \in register
/\ register' = register \ {p}
/\ permission' = [x \in DOMAIN permission \ {p} |-> permission[x]]
/\ UNCHANGED <<location>>

Мой типок, который я проверяю, имеет следующие ограничения

TypeOk 
    /\ register \subseteq PERSON
    /\ permission \in [register -> SUBSET BUILDING]
    /\ location \in [register -> (BUILDING \union {OUTSIDE})]

Я получаю ошибку модели, что нарушен typeOK. В трассировке стека ошибка выглядит так

/\  location = [p1 |-> OUTSIDE]
/\  permission = << >>
/\  register = {}

Спасибо за понимание

РЕДАКТИРОВАТЬ:

Предыдущее состояние может быть полезно,

/\  location = [p2 |-> OUTSIDE]
/\  permission = [p2 |-> {}]
/\  register = {"p2"}

person SnowTurtle96    schedule 22.10.2018    source источник


Ответы (1)


location \in [register -> SUBSET BUILDING] означает (среди прочего), что DOMAIN location = register. Однако после DeRegister у вас есть DOMAIN location = {"pq"} /\ register = {}, что нарушает ваш инвариант.

person Hovercouch    schedule 22.10.2018