В документации FlatZinc сказано, что только нестандартные предикаты должны быть объявлены в верхней части модели FlatZinc:
Предикаты, используемые в модели, не являющиеся стандартными для FlatZinc, должны быть объявлены в верхней части модели FlatZinc перед любыми другими лексическими элементами. Объявления предикатов имеют вид
<predicate-item> ::= "predicate" <identifier> "(" [ <pred-param-type> : <identifier> "," ... ] ")" ";"
источник: ссылка
Судя по всему, компилятор mzn2fzn добавляет объявления полуовеществленных предикатов вверху скомпилированных файлов (см.: эта проблема с github):
predicate int_eq_imp(var int: a, var int: b, var bool: r);
Я нахожу такое поведение несколько запутанным, потому что полуовеществленные предикаты кажутся частью стандарт.
Вопрос:
- Не является ли это ошибкой, поскольку в начале файла должны быть объявлены только нестандартные предикаты?
- Есть ли способ подавить такие объявления?