∀ y ∈ R+, ∃ z ∈ R, e^z = y 用伪代码怎么写?
How would you write ∀ y ∈ R+, ∃ z ∈ R, e^z = y in pseudocode?
我正在阅读证明,目前正在阅读 Eric Lehman 和 Tom Leighton 撰写的计算机科学数学,他们在示例命题中说明了 "as z ranges over the real numbers, e^z takes on every positive, real value at least once"。我无法完全理解这个命题。
我正试图以程序员的身份来处理这个问题,并想一想如果我要看看它是否属实,它在伪代码中会是什么样子。
pr = [ all real positive numbers ]
r = [ all real numbers ]
for y in pr:
for z in r:
e = pow(y, z)
if e != y:
goto outer
print "this is true";
outer
这是他们的提议吗?
∀ y ∈ R+, ∃ z ∈ R, e^z = y
是说对于正实数集中的所有y
,实数集中存在一个z
,使得exp(z) = y
.
你不能真的创建一个程序来验证这是真的。最主要是因为你会遇到以下问题之一
- 浮点数学不精确(必读Is floating point math broken?)
- 实数是无限的
你可以检查每个浮点数(这会花费很长时间,但理论上仍然可以计算),但你会
- 可能会想出这样一种情况,即没有
z
这样的 exp(z) = y
因为这样的 z
在浮点数集中并不完全存在,无法给你exp(z) = y
- 即使浮点数集中的每个
y
都有一个 z
,这也不能证明 exp(z) = y
对于 R+ 中的所有 y 和 R 中的 z。
所以总的来说,是的,你是伪代码,在某种程度上代表了这个想法,但在计算机上检查它是不可行的或不合逻辑的,或者真的把它当作一个计算问题来考虑。
编辑:
以编程方式思考这个问题的最佳方式是这样
R = [SET OF ALL REALS]
R+ = FILTER (> 0) R
(MAP (exp) R) == R+
N.B. exp
表示 e^n
其中 e^x = SUM [ (x^k)/(k!) | k <- [SET OF ALL NATURALS]]
大约是 2.718^x
。
如果您想象可以枚举所有正实数,而且可以在有限时间内完成,那么您的思想实验的伪代码可能看起来更像这样:
pr = [ all real positive numbers ]
r = [ all real numbers ]
for y in pr:
for z in r:
e = exp(z)
if e == y:
goto outer
print "false"
stop
outer:
print "true"
与您的伪代码的主要区别是:
(技术)将 pow(y, z)
更改为 exp(z)
。这是 z
上的指数函数,或者等价地,数字 e 上升到 zth 功率
仅当外循环运行完成时命题才为真(算法打印结果)
如果在外循环的任何迭代中,内循环确实运行完成(表明y 因为那次迭代不是任何实数的指数)那么这个命题被证明是错误的。在那种情况下,算法会打印结果并停止。只需要一个这样的实数 y 整个命题就失败了。
当然,描述该命题的一种完全不同的数学方法是,它表示自然对数已定义,并且对所有正实参求值为实数。这是因为自然对数是指数的倒数,所以如果你对 e^z = y
两边取对数,你会得到 z = log(y)
.
该命题由一个程序证明,该程序将在给定任何 y ∈ R+ 的情况下找到 z ∈ R,因此:
z = log(y);
我正在阅读证明,目前正在阅读 Eric Lehman 和 Tom Leighton 撰写的计算机科学数学,他们在示例命题中说明了 "as z ranges over the real numbers, e^z takes on every positive, real value at least once"。我无法完全理解这个命题。
我正试图以程序员的身份来处理这个问题,并想一想如果我要看看它是否属实,它在伪代码中会是什么样子。
pr = [ all real positive numbers ]
r = [ all real numbers ]
for y in pr:
for z in r:
e = pow(y, z)
if e != y:
goto outer
print "this is true";
outer
这是他们的提议吗?
∀ y ∈ R+, ∃ z ∈ R, e^z = y
是说对于正实数集中的所有y
,实数集中存在一个z
,使得exp(z) = y
.
你不能真的创建一个程序来验证这是真的。最主要是因为你会遇到以下问题之一
- 浮点数学不精确(必读Is floating point math broken?)
- 实数是无限的
你可以检查每个浮点数(这会花费很长时间,但理论上仍然可以计算),但你会
- 可能会想出这样一种情况,即没有
z
这样的exp(z) = y
因为这样的z
在浮点数集中并不完全存在,无法给你exp(z) = y
- 即使浮点数集中的每个
y
都有一个z
,这也不能证明exp(z) = y
对于 R+ 中的所有 y 和 R 中的 z。
所以总的来说,是的,你是伪代码,在某种程度上代表了这个想法,但在计算机上检查它是不可行的或不合逻辑的,或者真的把它当作一个计算问题来考虑。
编辑: 以编程方式思考这个问题的最佳方式是这样
R = [SET OF ALL REALS]
R+ = FILTER (> 0) R
(MAP (exp) R) == R+
N.B. exp
表示 e^n
其中 e^x = SUM [ (x^k)/(k!) | k <- [SET OF ALL NATURALS]]
大约是 2.718^x
。
如果您想象可以枚举所有正实数,而且可以在有限时间内完成,那么您的思想实验的伪代码可能看起来更像这样:
pr = [ all real positive numbers ]
r = [ all real numbers ]
for y in pr:
for z in r:
e = exp(z)
if e == y:
goto outer
print "false"
stop
outer:
print "true"
与您的伪代码的主要区别是:
(技术)将
pow(y, z)
更改为exp(z)
。这是z
上的指数函数,或者等价地,数字 e 上升到 zth 功率仅当外循环运行完成时命题才为真(算法打印结果)
如果在外循环的任何迭代中,内循环确实运行完成(表明y 因为那次迭代不是任何实数的指数)那么这个命题被证明是错误的。在那种情况下,算法会打印结果并停止。只需要一个这样的实数 y 整个命题就失败了。
当然,描述该命题的一种完全不同的数学方法是,它表示自然对数已定义,并且对所有正实参求值为实数。这是因为自然对数是指数的倒数,所以如果你对 e^z = y
两边取对数,你会得到 z = log(y)
.
该命题由一个程序证明,该程序将在给定任何 y ∈ R+ 的情况下找到 z ∈ R,因此:
z = log(y);