【发布时间】:2020-08-03 19:22:20
【问题描述】:
我已经定义了一些这样的翻译:
consts
"time" :: "i"
"sig" :: "i ⇒ i"
"BaseChTy" :: "i"
syntax
"time" :: "i"
"sig" :: "i ⇒ i"
translations
"time" ⇌ "CONST int"
"sig(A)" ⇌ "CONST int → A"
那么,我想证明这样一个定理:
theorem sig_mono: "⟦ A ⊆ B ⟧ ⟹ sig(A) ⊆ sig(B)"
这应该是一个非常简单的定理,应该用定理Pi_mono一步一步证明:
thm Pi_mono
?B ⊆ ?C ⟹ ?A → ?B ⊆ ?A → ?C
所以我是这样做的:
theorem sig_mono: "⟦ A ⊆ B ⟧ ⟹ sig(A) ⊆ sig(B)"
apply(drule Pi_mono[of _ _ "time"])
(*Output:
goal (1 subgoal):
1. sig(A) ⊆ sig(B) ⟹ sig(A) ⊆ sig(B)
*)
apply(simp)
(*Output:
Failed ...
*)
既然前提和目标一样,应该马上证明,但没有。我可以知道我在翻译定义中做错了什么吗? 我试图将定理更改为:
theorem sig_mono: "⟦ A ⊆ B ⟧ ⟹ (time → A) ⊆ (time → B)"
(*Output:
goal (1 subgoal):
1. A ⊆ B ⟹ sig(A) ⊆ sig(B)
*)
apply(drule Pi_mono[of _ _ "time"])
(*Output:
goal (1 subgoal):
1. sig(A) ⊆ sig(B) ⟹ sig(A) ⊆ sig(B)
*)
apply(simp)
(*Output:
Success ...
*)
然后它立即起作用,但翻译不应该使它们成为同一个东西吗?
更新: 感谢 Mathias Fleury 的回复,我尝试进行简化跟踪,它显示如下:
theorem sig_mono: "⟦ A ⊆ B ⟧ ⟹ sig(A) ⊆ sig(B)"
using [[show_sorts]] apply(drule Pi_mono[of _ _ "time"])
using [[simp_trace]] apply(simp)
oops
(*
Output:
[1]SIMPLIFIER INVOKED ON THE FOLLOWING TERM:
sig(A::i) ⊆ sig(B::i) ⟹ sig(A) ⊆ sig(B)
[1]Adding rewrite rule "??.unknown":
sig(A::i) ⊆ sig(B::i) ≡ True
*)
而 time -> A 版本显示:
theorem sig_mono: "⟦ A ⊆ B ⟧ ⟹ time → A ⊆ time → B"
using [[show_sorts]] apply(drule Pi_mono[of _ _ "time"])
using [[simp_trace]] apply(simp)
oops
(*
Output:
[1]SIMPLIFIER INVOKED ON THE FOLLOWING TERM:
sig(A::i) ⊆ sig(B::i) ⟹ sig(A) ⊆ sig(B)
[1]Adding rewrite rule "??.unknown":
sig(A::i) ⊆ sig(B::i) ≡ True
[1]Applying instance of rewrite rule "??.unknown":
sig(A::i) ⊆ sig(B::i) ≡ True
[1]Rewriting:
sig(A::i) ⊆ sig(B::i) ≡ True
*)
为什么这个版本可以应用rewrite rule的实例继续证明,而原来的不行?
【问题讨论】:
-
如果你的例子可以输入或者你可以给出你正在使用的导入会更容易...... sig 中的箭头是什么意思?
-
一些建议:i) 检查供应 [[show_types]] 类型是否真的相同; ii) 与
supply [[unify_trace_failure]] apply assumption核对为什么没有发生统一; iii) 与供应商 [[show_sorts]] 确认排序是否相同 -
导入是:
imports Nlist IntExt Hilbert ZF.Univ,其中 Nlist IntExt Hilbert 是我自己写的,但它们都没有任何与time或time -> A相关的定义,它们只包含关于int,箭头表示它是一个从time(这里是int)设置A的函数。我去看看supply命令,非常感谢。 -
问题是由于某种原因无法翻译...
标签: isabelle