Z3 считает модель несовместимой с аксиомами

В дополнение к «необработанным» инструментам, предоставленным MutationObserver API , существуют «удобные» библиотеки для работы с DOM-мутациями.

Рассмотрим: MutationObserver представляет каждый DOM изменение в терминах поддеревьев. Итак, если вы, например, ожидаете, что какой-то элемент будет вставлен, он может быть глубоко внутри детей mutations.mutation[i].addedNodes[j].

Еще одна проблема заключается в том, что ваш собственный код в ответ на мутации, изменения DOM - вы часто хотите отфильтровать его.

Хорошая библиотека удобства, разрешающая такие проблемы, - mutation-summary (отказ от ответственности: я не автор, просто доволен user), который позволяет вам указывать запросы о том, что вас интересует, и получить именно это.

Пример основного использования из документов:

var observer = new MutationSummary({
  callback: updateWidgets,
  queries: [{
    element: '[data-widget]'
  }]
});

function updateWidgets(summaries) {
  var widgetSummary = summaries[0];
  widgetSummary.added.forEach(buildNewWidget);
  widgetSummary.removed.forEach(cleanupExistingWidget);
}

2
задан Levent Erkok 18 January 2019 в 17:38
поделиться

1 ответ

Похоже, что ваша установка может быть нарушена, поскольку я не могу повторить это:

$ cat a.py
import z3
f = z3.Function('f', z3.IntSort(), z3.IntSort(), z3.IntSort())
x = z3.Int('x')
s = z3.Solver()
s.add(f(1, 10) == 42)
s.add(z3.ForAll([x], f(2, x) == f(1, x)))
print s.sexpr()
s.check()
m = s.model()
print(m.eval(f(1, 10)))  # print 0
print(m.eval(f(2, 10)))  # print 0

$ python a.py
(declare-fun f (Int Int) Int)
(assert (= (f 1 10) 42))
(assert (forall ((x Int)) (= (f 2 x) (f 1 x))))

42
42

Обратите внимание, что я добавил print s.sexpr() в ваш код, и он красиво напечатал сгенерированный SMTLib. Вы видите то же самое?

0
ответ дан Levent Erkok 18 January 2019 в 17:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: