Это на самом деле особенность SMT-Lib, z3 просто реализует это. Смотрите здесь: http://smtlib.cs.uiowa.edu/theories-Ints.shtml
И да, если у вас есть несколько элементов, он просто ассоциируется слева. То есть:
(- 1 2 3 4)
означает то же самое, что и:
(- (- (- 1 2) 3) 4)
Это действительно сбивает с толку, поскольку мы хотим сделать только для ассоциативных операторов, где скобки не имеют значения (например, +
и *
), но SMTLib либерален в этом смысле. Это не означает, что вычитание является ассоциативным в SMT-Lib, это просто означает, что если у вас есть несколько аргументов, он анализируется, как описано выше. Надеюсь, это поможет!