Является ли использование util/ordering точно таким же, как аксиоматизация общего порядка обычным способом?

Модуль util/ordering содержит комментарий в верхней части файла о том факте, что граница параметра модуля должна иметь точно границу, разрешенную областью действия для указанной подписи.

Я несколько раз читал (например, здесь), что это оптимизация, которая позволяет генерировать хороший предикат, нарушающий симметрию, который я могу понять. (Кстати, в отношении указанного сообщения, я прав на сделать вывод, что ключевое слово exactly в спецификации параметра модуля здесь для явного применения этой точной границы (в то время как это было неявно в версиях Alloy до 4.x)?)

Однако комментарий также содержит часть, которая, похоже, не относится к оптимизации, а на самом деле относится к проблеме, имеющей семантический оттенок:

 * Technical comment:
 * An important constraint: elem must contain all atoms permitted by the scope.
 * This is to let the analyzer optimize the analysis by setting all fields of each
 * instantiation of Ord to predefined values: e.g. by setting 'last' to the highest
 * atom of elem and by setting 'next' to {<T0,T1>,<T1,T2>,...<Tn-1,Tn>}, where n is
 * the scope of elem. Without this constraint, it might not be true that Ord.last is
 * a subset of elem, and that the domain and range of Ord.next lie inside elem.  

Итак, я не понимаю этого, в частности, последнее предложение о Ord.last и Ord.next... Допустим, я моделирую полностью упорядоченную подпись S классическим способом (т.е. задавая тотальную, рефлексивную, антисимметричную, транзитивное отношение в S -> S, все это возможно с использованием простой логики первого порядка) и что я позабочусь о том, чтобы указать точную границу для S: будет ли это эквивалентно указанию open util/ordering[S] (игнорирование эффективности и запутанных проблем с именами атомов)?


person Grayswandyr    schedule 23.07.2015    source источник
comment
Да, вы правы насчет именно ключевого слова.   -  person Daniel Jackson    schedule 12.08.2015


Ответы (1)


Извините за медленный ответ на это. Это не очень понятно, не так ли? Все это означает, что из-за нарушения симметрии значения last, prev и next жестко связаны. Если бы это было сделано, и elem независимо был привязан к набору, который меньше, чем набор всех возможных атомов для elem, то у вас были бы странные нарушения объявлений, таких как Ord.last, не находящихся в наборе elem. Таким образом, нечего понимать, кроме того, что (1) ключевое слово точно заставляет elem содержать все атомы в заданной области видимости, и (2) отношение упорядочения запрограммировано так, что атомы появляются в «естественном» порядке.

person Daniel Jackson    schedule 12.08.2015