要求澄清在伊莎贝尔理论中涉及自然数的理论中明显的实数强制的出现
request clarification on appearance of apparent real coercion in theory involving natural numbers in Isabelle theory
我正在研究 Isabelle2020 /jEdit 中的以下理论:
theory Sqrt
imports Complex_Main "HOL-Computational_Algebra.Primes"
begin
theorem
assumes "prime (p::nat)"
shows "sqrt p ∉ ℚ"
proof
from ‹prime p› have p: "1 < p" by (simp add: prime_nat_iff)
assume "sqrt p ∈ ℚ"
then obtain m n :: nat where
n: "n ≠ 0" and sqrt_rat: "¦sqrt p¦ = m / n"
and "coprime m n" by (rule Rats_abs_nat_div_natE)
[we omit the remainder of the proof]
输出窗格显示证明状态:
have (⋀m n. n ≠ 0 ⟹ ¦sqrt (real p)¦ = real m / real n ⟹ coprime m n ⟹ ?thesis) ⟹ ?thesis
proof (state)
this:
n ≠ 0
¦sqrt (real p)¦ = real m / real n
coprime m n
goal (1 subgoal):
1. sqrt (real p) ∈ ℚ ⟹ False
我的问题是:那些“真实”的出现是类型强制转换吗?我已阅读 Isabelle 发行版附带的 so-called 教程中讨论类型的第 8 章(标题为 Higher-Order 逻辑的证明助手)。我阅读了 Florian Haftman 的文档标题 Isabelle/HOL type-class hierarchy(也是 Isabelle 发行版的一部分)。上述理论陈述中使用的规则 Rats_abs_nat_div_natE
是 Real.thy
理论中的引理。
我查找了该理论文件中的参考文献并查看了 A Proof 中的 §8.4.5
Higher-Order Logic 的助手 我发现了 The natural
number type nat
是线性有序半环,type int
是有序环,
type real
是有序字段。属性可能不适用于特定的 class,例如,类型 nat
不包含涉及减法的抽象属性(因为,当然,一个人可能以负数结束,这不是自然数).相反,提供了特定定理来解决类型 nat
上的减法问题。更重要的是,“所有涉及除法的抽象属性都需要一个字段。”(Higher-Order 逻辑的证明助手。)
所以,我们在这里看到的是商类型,用于将自然或整数类型的除法提升为抽象实数类型以满足字段
要求(参见§11.9 Isabelle/Isar 参考手册)?商类型 real 是根据 Real.thy
文件中的等价关系定义 realrel
创建的。
我很惊讶地看到证明中的实项取决于素数、正整数和有理数,并且想确保我至少已经接近解释为什么在 Isabelle 证明中会出现这种情况。
函数 sqrt
仅在实数上定义。因此,您需要将其参数 p
从 nat
转换为 real
。有一种强制会自动为您执行此操作;因此可以使用 real
功能。
之后,输入m/n
的唯一方法是real m / real n
。
一般来说,重载语法对证明助手来说是一个问题。比如纸上的2/3
可以是Isabelle中的有理数Fract 2 3
,实数2/3
,或者F_5
中的3的倒数乘以2,等等否则。
在 Isabelle 中,这是通过(在一定程度上)避免重载和使用不同的符号来解决的。
我正在研究 Isabelle2020 /jEdit 中的以下理论:
theory Sqrt
imports Complex_Main "HOL-Computational_Algebra.Primes"
begin
theorem
assumes "prime (p::nat)"
shows "sqrt p ∉ ℚ"
proof
from ‹prime p› have p: "1 < p" by (simp add: prime_nat_iff)
assume "sqrt p ∈ ℚ"
then obtain m n :: nat where
n: "n ≠ 0" and sqrt_rat: "¦sqrt p¦ = m / n"
and "coprime m n" by (rule Rats_abs_nat_div_natE)
[we omit the remainder of the proof]
输出窗格显示证明状态:
have (⋀m n. n ≠ 0 ⟹ ¦sqrt (real p)¦ = real m / real n ⟹ coprime m n ⟹ ?thesis) ⟹ ?thesis
proof (state)
this:
n ≠ 0
¦sqrt (real p)¦ = real m / real n
coprime m n
goal (1 subgoal):
1. sqrt (real p) ∈ ℚ ⟹ False
我的问题是:那些“真实”的出现是类型强制转换吗?我已阅读 Isabelle 发行版附带的 so-called 教程中讨论类型的第 8 章(标题为 Higher-Order 逻辑的证明助手)。我阅读了 Florian Haftman 的文档标题 Isabelle/HOL type-class hierarchy(也是 Isabelle 发行版的一部分)。上述理论陈述中使用的规则 Rats_abs_nat_div_natE
是 Real.thy
理论中的引理。
我查找了该理论文件中的参考文献并查看了 A Proof 中的 §8.4.5
Higher-Order Logic 的助手 我发现了 The natural
number type nat
是线性有序半环,type int
是有序环,
type real
是有序字段。属性可能不适用于特定的 class,例如,类型 nat
不包含涉及减法的抽象属性(因为,当然,一个人可能以负数结束,这不是自然数).相反,提供了特定定理来解决类型 nat
上的减法问题。更重要的是,“所有涉及除法的抽象属性都需要一个字段。”(Higher-Order 逻辑的证明助手。)
所以,我们在这里看到的是商类型,用于将自然或整数类型的除法提升为抽象实数类型以满足字段
要求(参见§11.9 Isabelle/Isar 参考手册)?商类型 real 是根据 Real.thy
文件中的等价关系定义 realrel
创建的。
我很惊讶地看到证明中的实项取决于素数、正整数和有理数,并且想确保我至少已经接近解释为什么在 Isabelle 证明中会出现这种情况。
函数 sqrt
仅在实数上定义。因此,您需要将其参数 p
从 nat
转换为 real
。有一种强制会自动为您执行此操作;因此可以使用 real
功能。
之后,输入m/n
的唯一方法是real m / real n
。
一般来说,重载语法对证明助手来说是一个问题。比如纸上的2/3
可以是Isabelle中的有理数Fract 2 3
,实数2/3
,或者F_5
中的3的倒数乘以2,等等否则。
在 Isabelle 中,这是通过(在一定程度上)避免重载和使用不同的符号来解决的。