Удивительное поведение при попытке доказать

Рассмотрим следующий код SMT-LIB:

(set-option :auto_config false)
(set-option :smt.mbqi false)
; (set-option :smt.case_split 3)
(set-option :smt.qi.profile true)

(declare-const x Int)

(declare-fun trigF (Int Int Int) Bool)
(declare-fun trigF$ (Int Int Int) Bool)
(declare-fun trigG (Int) Bool)
(declare-fun trigG$ (Int) Bool)

; Essentially noise
(declare-const y Int)
(assert (!
  (not (= x y))
  :named foo
))

; Essentially noise
(assert (forall ((x Int) (y Int) (z Int)) (!
  (= (trigF$ x y z) (trigF x y z))
  :pattern ((trigF x y z))
  :qid |limited-F|
)))

; Essentially noise
(assert (forall ((x Int)) (!
  (= (trigG$ x) (trigG x))
  :pattern ((trigG x))
  :qid |limited-G|
)))

; This assumption is relevant
(assert (forall ((a Int) (b Int) (c Int)) (!
  (and
    (trigG a)
    (trigF a b c))
  :pattern ((trigF a b c))
  :qid |bar|
)))

Пытаясь утверждать эту аксиомуbar держит, т.е.

(push)
(assert (not (forall ((a Int) (b Int) (c Int))
  (and
    (trigG a)
    (trigF a b c)))))
(check-sat)
(pop)

не удается (Z3 4.3.2 - сборка хэш-кода 47ac5c06333b):

unknown
[quantifier_instances]  limited-G :      1 :   0 : 1


Вопрос 1: Почему Z3 только инстанцируетlimited-G но ниlimited-F ниbar (что бы доказать утверждение)?

Вопрос 2: Комментирование любого из (бесполезных) утвержденийfoo, limited-F или жеlimited-G позволяет Z3 доказать утверждение - почему это так? (В зависимости от того, какие комментарииbar или жеbar а такжеlimited-F создаются.)


В случае, если это связано с наблюдаемым поведением: я хотел бы установитьsmt.case_split в3 (моя конфигурация соответствует опущенной MSRбуги-вуги инструмент), но Z3 дает мнеWARNING: auto configuration (option AUTO_CONFIG) must be disabled to use option CASE_SPLIT=3, 4 or 5, несмотря на то, что(set-option :auto_config false).

Ответы на вопрос(1)

Ваш ответ на вопрос