如何让伊莎贝尔认识到一个明显的结论

时间:2015-07-16 06:05:08

标签: isabelle

我试图证明一组中的前沿,内部和外部在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

1 个答案:

答案 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)

insertEx ∈ 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)