再次,传递闭包和身份

时间:2014-08-29 10:00:17

标签: isabelle

我有另一个定理,我无法在Isabelle中证明,涉及身份和传递闭包。

以下是:

lemma "r ⊆ Id ⟹ r^* = Id"

更新:使用apply-style我有以下内容:

lemma "r ⊆ Id ⟹r^* = Id"
  apply (rule equalityI)
  apply (rule subrelI)
  apply (erule rtrancl_induct)
  apply (blast+)
done

如何在伊萨尔做同样的事情?

1 个答案:

答案 0 :(得分:1)

似乎您的问题更多的是将应用式样张转换为适当的Isar。对于具体示例,您可以按如下方式完成此操作。正如你在

中提到的那样
lemma "r ⊆ Id ⟹ r^* = Id"

参考假设r ⊆ Id有困难。构造此证明的规范Isar方法如下。我们通过

开始证明
proof -

其中-表示应使用 no 初始规则。这只是为了能够明确说明假设。

  assume *: "r ⊆ Id"
  show "r^* = Id"

此外,我们将名称*赋予假设。或者,我们可以用不同的方式说明整个引理

lemma
  assumes *: "r ⊆ Id"
  shows "r^* = Id"

可以节省一级嵌套。无论如何,正如你所说,拥有这个,集合的平等再次是规范的,即:

proof
  show "r^* ⊆ Id"
  proof (rule subrelI)
    fix x y
    assume "(x, y) ∈ r^*"
    then show "(x, y) ∈ Id"
      using * by (induct) blast+

上面的行是我们使用假设的地方(或者,我们可以通过‹r ⊆ Id›或通过assms之后的事实引入的隐含名称assumes来引用假设。 )。我们完成了:

  qed
next
  show "Id ⊆ r^*" by blast
qed