我有另一个定理,我无法在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
如何在伊萨尔做同样的事情?
答案 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