Для этой цели вы используете функцию assert_and_track
.См. https://github.com/Z3Prover/z3/blob/master/src/api/python/z3/z3.py#L6571-L6599, пример которого приведен в документации.Чтобы указать z3 свести к минимуму количество ядер, используйте:
s.set(':core.minimize', True)
Обратите внимание, что понятие «минимального» ненасыщенного ядра на самом деле не существует;так как у вас может быть два разных набора с одинаковым количеством элементов, оба из которых могут выступать в качестве основного ядра.И, насколько я знаю, z3 не дает никаких гарантий относительно «минимальности», кроме «наилучших усилий».
Также актуально: https://github.com/Z3Prover/z3/issues/888, где тактика и минимизация несоответствующего ядра не совсем хороши.с другими.