Вы ищете поле constructors
, здесь: https://z3prover.github.io/api/html/z3py_8py_source.html#l04711
Обратите внимание, что, перезаписав значение record
, вы загнали себя в угол. Лучше держать имена явными, если вы хотите заниматься этим уровнем программирования. То есть, называйте тип данных другим именем, а когда вы create
, назначаете ему другое имя. Таким образом, вы можете легко отслеживать тип данных и сортировать. Вот ваш пример, кодированный более четко:
from z3 import *
record_dt = Datatype("record")
record_dt.declare('cons', ('f1', BoolSort()), ('f2', BoolSort()), ('f3', BoolSort()))
record_sort = record_dt.create()
functions = record_dt.constructors
print functions
Это печатает:
[('cons', 'is-cons', (('f1', Bool), ('f2', Bool), ('f3', Bool)))]
Это дает вам имя конструктора (cons
), распознаватель (is-cons
), и имена и виды всех полей (f1
, f2
, f3
), которые вы затем можете использовать по мере того, как вы будете sh.