有关
datatype natural = Zero | Succ natural
primrec add :: "natural ⇒ natural ⇒ natural"
where
"add Zero m = m"
| "add (Succ n) m = Succ (add n m)"
我证明了
lemma add_succ_right: "⋀ m n. add m (Succ n) = Succ (add m n)"
对于数学,重要的是进行通用量化。但是,为了在简化器中使用这个事实,最好不要:
lemma add_succ_right_rewrite: "add m (Succ n) = Succ (add m n)"
这些版本的常识是什么,在什么情况下我应该选择哪一个?
答案 0 :(得分:3)
Isabelle / HOL有三种方法可以对引理语句中的变量进行普遍量化:
lemma 1: "⋀m n. add m (Succ n) = Succ (add m n)"
lemma 2:
fixes m n
shows "add m (Succ n) = Succ (add m n)"
lemma 3: "∀m n. add m (Succ n) = Succ (add m n)"
此外,引理语句中的自由变量会自动量化:
lemma 4: "add m (Succ n) = Succ (add m n)"
Lemmas 1,2和4产生相同的定理,稍后可以以相同的方式使用。引理3使用HOL通用量词而不是元逻辑中的量化。因此,需要额外的工作来实例化引理3中的量词。因此,这个版本只应在特殊情况下使用。
引理1中的版本可以追溯到Isar语言不在当前状态时,因此有点过时了。因此,我建议更喜欢版本2(如果你想明确提到量化变量),或者4(如果没有)。