如何在 Isabelle 中为子集做证明
how to do a proof for subset in Isabelle
我正在尝试在 Isabelle 中手动做一些证明,但我正在努力处理以下证明:
lemma "(A ∩ B) ∪ C ⊆ A ∪ C "
我正在尝试将其转换为命题逻辑然后证明它。
这就是我的尝试:
lemma "(A ∩ B) ∪ C ⊆ A ∪ C "
apply (subst subset_iff)+
apply(rule allI)
apply (rule impI)
(*here normally we should try to get rid of Union and Inter*)
apply(subst Un_iff)+
apply(subst (asm) Un_iff)+
apply(subst Inter_iff) (*not working*)
我卡在了最后一步,有人可以帮我完成这个证明并解释如何找到正确的定理直到最后吗?
我使用 find_theorems,但它需要很多时间 + 到目前为止我发现的唯一有用(并且可以理解)的资源是这个 link:
https://www.inf.ed.ac.uk/teaching/courses/ar/isabelle/FormalCheatSheet.pdf
和一些非常随机的讲义,内容与上面的 link 几乎相同...
我找到的其他资源有 100 多页,看起来不适合初学者...
提前致谢
先手写这样的证明是没有用的,可以用blast来解决。它主要为高级用户保留。我知道的唯一文档是 the old tutorial,第 5 节
无论如何,你的交集定理是错误的:你想使用 Int_iff
。这是完整的证明:
lemma "(A ∩ B) ∪ C ⊆ A ∪ C "
apply (subst subset_iff)+
apply(rule allI)
apply (rule impI)
(*here normally we should try to get rid of Union and Inter*)
apply(subst Un_iff)+
apply(subst (asm) Un_iff)
apply(subst (asm) Int_iff)
apply (elim disjE)
apply (elim conjE)
apply (rule disjI1)
apply assumption
apply (rule disjI2)
apply assumption
done
我如何找到这样的证据?我熟知关于蕴涵、合取和析取的低级定理 (allI, impI, conjI, conjE, disjE, disjI1
,...)。有统一的命名规范(I
:介绍规则,E
:淘汰规则,D
:销毁规则),所以不难记。
对于其余部分,可以使用 find_theorems(或查询面板)进行搜索。
这是我要写的证明(但另一个更适合教学:conjE 比 IntE 重要得多):
lemma "(A ∩ B) ∪ C ⊆ A ∪ C "
apply (rule subset_iff[THEN iffD2])
apply(intro allI impI)
apply (elim UnE)
apply (elim IntE)
apply (rule UnI1)
apply assumption
apply (rule UnI2)
apply assumption
done
我正在尝试在 Isabelle 中手动做一些证明,但我正在努力处理以下证明:
lemma "(A ∩ B) ∪ C ⊆ A ∪ C "
我正在尝试将其转换为命题逻辑然后证明它。
这就是我的尝试:
lemma "(A ∩ B) ∪ C ⊆ A ∪ C "
apply (subst subset_iff)+
apply(rule allI)
apply (rule impI)
(*here normally we should try to get rid of Union and Inter*)
apply(subst Un_iff)+
apply(subst (asm) Un_iff)+
apply(subst Inter_iff) (*not working*)
我卡在了最后一步,有人可以帮我完成这个证明并解释如何找到正确的定理直到最后吗?
我使用 find_theorems,但它需要很多时间 + 到目前为止我发现的唯一有用(并且可以理解)的资源是这个 link: https://www.inf.ed.ac.uk/teaching/courses/ar/isabelle/FormalCheatSheet.pdf 和一些非常随机的讲义,内容与上面的 link 几乎相同...
我找到的其他资源有 100 多页,看起来不适合初学者...
提前致谢
先手写这样的证明是没有用的,可以用blast来解决。它主要为高级用户保留。我知道的唯一文档是 the old tutorial,第 5 节
无论如何,你的交集定理是错误的:你想使用 Int_iff
。这是完整的证明:
lemma "(A ∩ B) ∪ C ⊆ A ∪ C "
apply (subst subset_iff)+
apply(rule allI)
apply (rule impI)
(*here normally we should try to get rid of Union and Inter*)
apply(subst Un_iff)+
apply(subst (asm) Un_iff)
apply(subst (asm) Int_iff)
apply (elim disjE)
apply (elim conjE)
apply (rule disjI1)
apply assumption
apply (rule disjI2)
apply assumption
done
我如何找到这样的证据?我熟知关于蕴涵、合取和析取的低级定理 (allI, impI, conjI, conjE, disjE, disjI1
,...)。有统一的命名规范(I
:介绍规则,E
:淘汰规则,D
:销毁规则),所以不难记。
对于其余部分,可以使用 find_theorems(或查询面板)进行搜索。
这是我要写的证明(但另一个更适合教学:conjE 比 IntE 重要得多):
lemma "(A ∩ B) ∪ C ⊆ A ∪ C "
apply (rule subset_iff[THEN iffD2])
apply(intro allI impI)
apply (elim UnE)
apply (elim IntE)
apply (rule UnI1)
apply assumption
apply (rule UnI2)
apply assumption
done