Я хочу подтвердить следующую теорему, для которой у меня уже есть доказательство на бумаге, в Изабель:
theorem
assumes "(X :: 'a set) ∩ (Y :: 'a set) = {}"
and "trans (r :: 'a rel) ∧ total_in X r"
and "trans (r' :: 'a rel) ∧ total_in Y r'"
shows "∃ m. m ⊇ (r ∪ r') ∧ trans m ∧ total_in (X ∪ Y) m"
proof
have 1: "(r ∪ r' ∪ {(x, y) | x y. x ∈ X ∧ y ∈ Y}) ⊇ (r ∪ r')" by simp
have 2: "trans (r ∪ r' ∪ {(x, y) | x y. x ∈ X ∧ y ∈ Y})" sorry
have 3: "total_in (X ∪ Y) (r ∪ r' ∪ {(x, y) | x y. x ∈ X ∧ y ∈ Y})" sorry
from 1 2 3 show "
r ∪ r' ⊆ (r ∪ r' ∪ {(x, y) | x y. x ∈ X ∧ y ∈ Y})
∧ trans (r ∪ r' ∪ {(x, y) | x y. x ∈ X ∧ y ∈ Y})
∧ total_in (X ∪ Y) (r ∪ r' ∪ {(x, y) | x y. x ∈ X ∧ y ∈ Y})" by auto
qed
Чтобы доказать 2 и 3, я хотел бы использовать различие в регистре какие подмножества сторон в данном члене нового отношения включаются в:
(a, b) ∈ (r ∪ r '∪ {(x, y) | x y. x ∈ X ∧ y ∈ Y}) где (a ∈ X, b ∈ X) или (a ∈ X, b ∈ Y) и т. Д. c.
Для каждого из возможных случаев я бы хотел доказать подцели .
Есть ли какое-нибудь автоматическое c правило доказательства, которое может помочь мне формализовать это? Я совершенно новичок в Изабель и не уверен, что я бы даже искал в справочнике, чтобы найти это.
Кроме того, я недоволен необходимостью копировать "(r ∪ r' ∪ {(x, y) | x y. x ∈ X ∧ y ∈ Y})"
повсюду. Как идиоматический c способ извлечь это новое отношение в какое-то определение, чтобы избежать копирования?