Я использую привязки Python для программы доказательства теорем Z3 (Z3Py). У меня есть N логических переменных, x1, .., xN. Я хочу выразить ограничение, согласно которому ровно K из N из них должны быть истинными. Как я могу это сделать в Z3Py? Есть ли для этого встроенная поддержка? Я проверил онлайн-документацию, но в Z3Py docs не упоминается любой API для этого.
Я знаю, что для ограничений один из N я могу отдельно выразить, что по крайней мере одно истинно (assert Or (x1, .., xN)) и что самое большее одно истинно (assert Not (And (xi, xj )) для всех i, j). Я также знаю другие способы, чтобы вручную выразить 1-из-N и K-из-из- N ограничений. Однако у меня сложилось впечатление, что, когда решатель имеет встроенную поддержку этого ограничения, иногда он может быть более эффективным, чем выражение его вручную.