проблема действительно в неявных типах. В вашем последнем утверждении Изабель неявно выводит типы состояний 'p, 'q, 'r
для трех автоматов A, B, C
, тогда как ваша лемма DFA_union
фиксирует тип состояния от C
до 'p * 'q
. Поэтому, если вам нужно явно предоставить аннотации типов. Более того, обычно не требуется указывать ваши леммы с явными ∀
-квантователями.
Итак, вы можете продолжать так:
lemma DFA_union: "language ? ∪ language ℬ = language (DFA_union ? ℬ)"
(is "_ = language ??")
proof -
have "language ?? = {w . δ0_iter ?? w ∈ F ??}"
...
qed
lemma DFA_union_closed: fixes ? :: "('q,'a)DFA" and ℬ :: "('p,'a)DFA"
shows "∃ ? :: ('q × 'p, 'a)DFA. language ? ∪ language ℬ = language ?"
by (intro exI, rule DFA_union)
Обратите внимание, что эти аннотации типов также важно в следующем смысле. Лемма, подобная следующей (где все типы состояний одинаковы) просто не соответствует действительности.
lemma fixes ? :: "('q,'a)DFA" and ℬ :: "('q,'a)DFA"
shows "∃ ? :: ('q, 'a)DFA. language ? ∪ language ℬ = language ?"
Проблема в том, что подключите bool
-тип для 'q
, тогда у вас есть автоматы которые имеют не более двух государств. И тогда вы не всегда можете найти автомат для объединения, которое также имеет не более двух состояний.