我应该在引理公式中使用通用量化吗?

时间:2016-07-19 11:46:13

标签: isabelle

有关

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)"

这些版本的常识是什么,在什么情况下我应该选择哪一个?

1 个答案:

答案 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(如果没有)。