Algorithm 你会怎么写∀;y&x2208;R+∃;z∈;R、 伪代码中的e^z=y?

Algorithm 你会怎么写∀;y&x2208;R+∃;z∈;R、 伪代码中的e^z=y?,algorithm,math,computer-science,proof,Algorithm,Math,Computer Science,Proof,我正在读关于校对的书,目前正在读埃里克·莱曼和汤姆·莱顿的《计算机科学数学》,他们在一个示例命题中说明,“当z在实数范围内时,e^z至少一次呈现每一个正的实数值”。我很难完全理解这个命题 作为一名程序员,我正在尝试处理这一问题,并思考如果我想知道这是不是真的,在伪代码中会是什么样子 pr = [ all real positive numbers ] r = [ all real numbers ] for y in pr: for z in r: e = pow(

我正在读关于校对的书,目前正在读埃里克·莱曼和汤姆·莱顿的《计算机科学数学》,他们在一个示例命题中说明,“当z在实数范围内时,e^z至少一次呈现每一个正的实数值”。我很难完全理解这个命题

作为一名程序员,我正在尝试处理这一问题,并思考如果我想知道这是不是真的,在伪代码中会是什么样子

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

你不能真正创建一个程序来验证这是真的。最基本的原因是,您将遇到以下问题之一

  • 浮点数学不精确(基本读取)
  • 实是无限的
  • 您可以检查每个浮点数(这需要很长时间,但理论上仍然可以计算),但是您可以

  • 可能会出现这样一种情况,即不存在
    z
    ,因此
    exp(z)=y
    ,因为这样的
    z
    在浮点数集合中并不完全存在,无法给出
    exp(z)=y
  • 即使浮点数集中的每个
    y
    都有
    z
    ,这也不能证明R+中的所有y和R中的所有z都是
    exp(z)=y
  • 所以总的来说,是的,伪代码在某种程度上代表了这个想法,但是在计算机上检查它是不可行的,也不符合逻辑的,或者把它当作一个计算问题来考虑

    编辑: 以编程方式思考这个问题的最佳方式是

    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如果你想象可以枚举所有的正实数,而且可以在有限的时间内这样做,那么你思想实验的伪代码可能看起来更像这样:

    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提升到第z次方

    • 只有当外部循环运行到完成时,该命题才被发现为真(并且算法打印该结果)

    • 如果在外循环的任何一次迭代中,内循环确实运行到完成(表明该迭代的y不是任何实数的指数),则该命题被证明是错误的。在这种情况下,算法打印该结果并停止。整个命题失败只需要一个这样的实数y


    当然,描述这个命题的一种完全不同的数学方法是,它说自然对数是定义的,并且对所有正实数变元求值为实数。这是因为自然对数是指数的倒数,所以如果你取
    e^z=y
    两边的对数,你会得到
    z=log(y)

    这个命题被一个程序证明了,该程序将找到z∈ R给出了任何y∈ R+,因此:

    z = log(y);
    

    @CarlosGranados你的思路是对的。我刚才的编辑可能对你也有一些用处(如果你做函数编程的话)。实数是无限的这一事实本身并不是问题。如果命题是真的,并且实数是可数的(确切地说是递归枚举的),这个想法会起作用:对于每一个
    y
    ,这样一个
    z
    最终会被找到。事实上,实数是不可数无限的,因此不可枚举,这是实际的障碍。对,这是计算机的实际性质,因为它是一个有限的设备。@EliSadoff Brute强制一个可数集,前提是我们搜索的元素是r属于集合,最终停止(理论上),-这在可计算性理论中很重要。当然,由于物理限制,这在实践中是不可行的。我只想指出这个精确的区别。@lisyarus“最终停止”-这不是真的;真正的是,对于每个元素,它都会在有限的时间后被处理。但总体而言,这实际上是一个奇妙的问题。很高兴看到更多关于stackoverflow的算法和数学内容。“pr=[所有实数]r=[所有实数]”这些已经是一个问题了,因为它们不仅无限多,而且大多数都是不可计算的。@G.Bach我在下面已经提到了这一点。问题不是要创建一个实际的程序,而是要看看它在伪代码算法中会是什么样子。似乎你在以一种有趣的方式使用
    e
    。在数学中,
    e
    是一个常量-它不能赋值。你可能想要类似于
    x=pow(e,z)
    x=exp(z)
    @anatolyg的东西。这是一个很好的上下文,我有一段时间对e是什么感到困惑。