Я читал эту исследовательскую работу: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.365.9467&rep=rep1&type=pdf
Таким образом, вкратце, они преобразуют квантифицированные рупорные предложения в рупорные предложения без кванторов путем создания экземпляров (через E-сопоставление), и результирующие условия проверки (VC) приведены на рис. 6 документа.
Насколько я понимаю, в документе предлагается передать результирующие виртуальные каналы, показанные на рис. 6, в любой решатель SMT, поскольку виртуальные каналы теперь не имеют кванторов и могут быть решены любым решателем SMT. (Пожалуйста, поправьте меня, если я ошибаюсь.)
Итак, продолжая понимать это, я попробовал кодировать VC Рис. 6 с помощью z3py.
Изменить: Моя цель - найти решение для VC на рис. 6. Что я должен добавить в качестве возвращаемого типа инварианта P, который должен выводиться z3? Есть ли лучший способ сделать это с помощью z3? Спасибо за уделенное время!
Вот код:
from z3 import *
Z = IntSort()
B = BoolSort()
k0, k1, k2, N1, N2 = Ints('k0, k1, k2, N1, N2')
i0, i1, i2 = Ints('i0, i1, i2')
P = Function('P', B, Z)
a0 = Array('a0', Z, B)
a1 = Array('a1', Z, B)
a2 = Array('a2', Z, B)
prove(And(Implies(i0 == 0, P( Select(a0,k0), i0) ),
Implies(And(P(Select(a1, k1),i1), i1<N1), P(Select(Store(a1, i1, 0)), i1+1) ),
Implies(And(P(Select(a2,k2), i2), not(i2<N2)), Implies(0<=k2<=N2, a2[k2]) )))
Function('P', B, Z)
- функция от B до Z; в объявлении отсутствует второй аргумент или тип возвращаемого значения. - person Christoph Wintersteiger   schedule 20.10.2020