我应该在引理公式中使用通用量化吗?
Should I use universal quantification in lemma formulation?
为了
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)"
关于这些版本的常识是什么?在什么情况下我应该更喜欢哪一个?
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)"
引理 1、2 和 4 产生相同的定理,以后可以以相同的方式使用。引理 3 使用 HOL 通用量词而不是元逻辑的量化。因此,需要额外的工作来实例化引理 3 中的量词。因此,此版本应仅在特殊情况下使用。
引理 1 中的版本可以追溯到 Isar 语言尚未处于当前状态时,因此有些过时。因此,我建议更喜欢版本 2(如果你想明确提及量化变量)或 4(如果不是)。
为了
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)"
关于这些版本的常识是什么?在什么情况下我应该更喜欢哪一个?
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)"
引理 1、2 和 4 产生相同的定理,以后可以以相同的方式使用。引理 3 使用 HOL 通用量词而不是元逻辑的量化。因此,需要额外的工作来实例化引理 3 中的量词。因此,此版本应仅在特殊情况下使用。
引理 1 中的版本可以追溯到 Isar 语言尚未处于当前状态时,因此有些过时。因此,我建议更喜欢版本 2(如果你想明确提及量化变量)或 4(如果不是)。