FlatZinc 文档说只有非标准谓词必须在 FlatZinc 模型的顶部声明:
模型中使用的非标准 FlatZinc 谓词必须在 FlatZinc 模型的顶部声明,在任何其他词汇项之前。谓词声明的形式
<predicate-item> ::= "predicate" <identifier> "(" [ <pred-param-type> : <identifier> "," ... ] ")" ";"
来源:链接
显然,mzn2fzn 编译器在编译文件的顶部添加了半具体化的谓词声明(参见: this github issue):
predicate int_eq_imp(var int: a, var int: b, var bool: r);
我觉得这种行为有点令人困惑,因为半具体化的谓词似乎是标准的一部分。
问:
- 这不是一个错误,因为只有非标准谓词应该在文件顶部声明?
- 有没有办法压制这样的声明?