Isabelle 身份关系的传递闭包
我无法在中证明以下Isabelle 身份关系的传递闭包,isabelle,Isabelle,我无法在中证明以下引理: 关于如何证明这一点,你有什么想法吗?如果你只是调用sledgehammer(通过面板,或通过尝试),那么你会立即得到证据: by (metis rtrancl_empty rtrancl_idemp) 要想知道这是怎么回事,你应该首先考虑如何在纸上证明这一点。如你所见 term "Id" Id是一组对(type('a*'a)set)。因此,你必须证明两个集合相等。这样做的标准方法是显示每个集合是另一个集合的子集 让我们从Id^*开始⊆ Id。如何显示一个集合是另一个
引理
:
关于如何证明这一点,你有什么想法吗?如果你只是调用sledgehammer(通过面板,或通过
尝试),那么你会立即得到证据:
by (metis rtrancl_empty rtrancl_idemp)
要想知道这是怎么回事,你应该首先考虑如何在纸上证明这一点。如你所见
term "Id"
Id
是一组对(type('a*'a)set
)。因此,你必须证明两个集合相等。这样做的标准方法是显示每个集合是另一个集合的子集
让我们从Id^*开始⊆ Id
。如何显示一个集合是另一个集合的子集?确切地说,表明“较小”集合的每个元素也是“较大”集合的元素,即
fix x y
assume "(x, y) ∈ Id^*"
then show "(x, y) ∈ Id"
由于传递闭包是归纳式定义的,我们可以通过归纳如下
by (induct) simp_all
也就是说,使用默认的归纳规则作为(u,u)形式的前提∈ _^*
(正好是rtrancl\u import
),然后通过简化来解决基本情况和归纳情况
再一次,充分的证据
lemma
"Id^* ⊆ Id"
proof (rule subrelI)
fix x y
assume "(x, y) ∈ Id^*"
then show "(x, y) ∈ Id"
by (induct rule: rtrancl_induct) simp_all
qed
另一个方向是作为练习离开。我对此还是新手。我猜整个Isar证明是这样的:
lemma "Id^* = Id"
proof (rule equalityI)
show "Id^* ⊆ Id"
proof (rule subrelI)
fix x y
assume "(x, y) ∈ Id^*"
then show "(x, y) ∈ Id"
by (induct) simp_all
qed
next
show "Id ⊆ Id^*"
proof (rule subrelI)
fix x y
assume "(x, y) ∈ Id"
then show "(x, y) ∈ Id^*"
by (auto)
qed
qed
没什么好猜测的,当伊莎贝尔接受证据时,一切都很好;)
lemma "Id^* = Id"
proof (rule equalityI)
show "Id^* ⊆ Id"
proof (rule subrelI)
fix x y
assume "(x, y) ∈ Id^*"
then show "(x, y) ∈ Id"
by (induct) simp_all
qed
next
show "Id ⊆ Id^*"
proof (rule subrelI)
fix x y
assume "(x, y) ∈ Id"
then show "(x, y) ∈ Id^*"
by (auto)
qed
qed