У меня есть следующее определение:Расчет переходных укупорочные
definition someRel :: "nat rel"
where
"someRel = {(1, 2), (2, 3), (3, 4), (4, 5)}"
Я хочу, чтобы доказать следующую лемму:
lemma "someRel^*``{1}={1, 2, 3, 4, 5}"
я придумал следующее доказательство:
proof
show "someRel^*``{1} ⊆ {1, 2, 3, 4, 5}"
proof
fix x
assume "x ∈ someRel⇧* `` {1}"
then show "x ∈ {1, 2, 3, 4, 5}"
using assms someRel_def by (auto elim: rtranclE)
qed
next
show "{1, 2, 3, 4, 5} ⊆ someRel^*``{1}"
proof
fix x
assume "x ∈ {1::nat, 2, 3, 4, 5}"
then show "x ∈ someRel⇧* `` {1}"
using assms someRel_def Image_singleton by (induction) blast+
qed
qed
Это доказательство имеет следующие проблемы:
- Первая часть (
show "someRel^*``{1} ⊆ {1, 2, 3, 4, 5}"
) подтверждена с использованием правилаrtranclE
. Это не сработает, если я добавлю еще одну пару в отношениеsomeRel
(скажем, пара(6, 7)
) - Доказательство второй части (
show "{1, 2, 3, 4, 5} ⊆ someRel^*``{1}"
) не заканчивается.
Может ли кто-нибудь предложить лучшее доказательство? То, что (а) допускает большее количество пар в отношении someRel
и (б), которое завершается.
Незначительный комментарий: Я бы не говорил о «доказательстве», если есть нечистые методы/тактика. – chris
Во второй части вашей попытки-доказательства «использование assms» на самом деле не имеет смысла ('assms' относится к общим предположениям вашей леммы, которые вообще отсутствуют). Также вместо 'using someRel_def' вы можете * развернуть * определение' someRel', путем 'разворачивания someRel_def'. – chris