我试图证明一组中的前沿,内部和外部在isabelle中是不相交的。在我标记为'***'的行上,c \<inter> d = {}
明确跟随前一行的事实,假设在块的开头给出了假设,那么我将如何让伊莎贝尔理解这一点?
theory Scratch
imports
"~~/src/HOL/Multivariate_Analysis/Topology_Euclidean_Space"
"~~/src/HOL/Probability/Sigma_Algebra"
begin
lemma boundary_disjoint: "disjoint {frontier S, interior S, interior (-S)}"
proof (rule disjointI)
fix c d assume sets:
"c \<in> {frontier S, interior S, interior (-S)}"
"d \<in> {frontier S, interior S, interior (-S)}"
and "c \<noteq> d"
show "c \<inter> d = {}"
proof cases
assume "c = frontier S \<and> d = interior S"
then show ?thesis using frontier_def by auto
next
assume "c = frontier S \<and> d = interior (-S)"
have "closure S \<inter> interior (-S) = {}" by (simp add: closure_interior)
hence "frontier S \<inter> interior (-S) = {}" using frontier_def by auto
*** then show ?thesis by auto
next
qed
qed
end
答案 0 :(得分:2)
在Isar中,您必须明确引用您想要使用的事实。如果您说您的目标来自上一行和您做出的本地假设,那么您应该通过编写assume A: "c = frontier S ∧ d = interior (-S)"
给出一个名称,然后您可以通过with A have ?thesis by auto
证明您的目标。
为什么我写have
而不是show
?那么,还有另一个问题。你做了一个proof cases
,但是使用了规则(P ⟹ Q) ⟹ (¬P ⟹ Q) ⟹ Q
,即它确实区分了'是P是真还是假?'。这不是你想要的。
解决你的案件的一种方法就是这样:
from sets show "c ∩ d = {}"
proof (elim singletonE insertE)
insertE
是x ∈ insert y A
形式事实的消除规则,因为{a,b,c}
只是insert a (insert b (insert c A))
的语法糖,所以这就是你想要的。 singletonE
类似,但专门用于x ∈ {y}
;使用singletonE
代替insertE
意味着您不会使用x ∈ {}
这样的假设获得微不足道的案例。
这给你9个案例,其中3个由simp_all
轻易解决。剩下的你必须在Isar中证明自己,但是auto
也可以很容易地解决它们:
from sets and `c ≠ d` show "c ∩ d = {}"
by (auto simp: frontier_def closure_def interior_closure)