P. Wadler的论文“The Strictness Monad”中的“⊥”是什么意思?

时间:2014-10-17 15:52:08

标签: haskell semantics strictness

有人可以帮助我理解Wadler的题为“Comprehending Monads”的论文中的以下定义吗? (摘录自第3.2节/第9页,即“Strictness Monad”小节。)


  

有时需要在懒惰的功能程序中控制评估顺序。这通常使用由

定义的可计算函数 strict 来实现      

严格 f x =如果 x ≠⊥然后 f x 其他⊥。

     

在操作上,严格 f x 通过首先将 x 减少到弱头正常形式(WHNF)来减少然后减少应用程序 f x 。或者,可以安全地并行减少 x f x ,但在 x 在WHNF。


在论文中,我们还没有看到使用由两条垂直线组成的符号(不确定它叫什么)所以它有点无处不在。

鉴于Wadler继续说“我们将使用[严格]理解来控制懒惰程序的评估”,这似乎是一个非常重要的理解概念。

2 个答案:

答案 0 :(得分:11)

您描述的符号是“底部”。它来自秩序理论(特别是格理论)。部分有序集合的“底部”元素(如果存在)是在所有其他集合之前的元素。在编程语言语义中,它指的是比其他任何语言“定义更少”的值。将“底部”值分配给产生错误或无法终止的每个计算是很常见的,因为试图区分这些条件会大大削弱数学并使程序分析复杂化。

为了将事物联系到另一个答案,逻辑“假”值是真值的格子的底部元素,而“真”是顶部元素。在经典逻辑中,这些是唯一的两个,但也可以考虑具有无限多个真值的逻辑,例如直觉主义和各种形式的建构主义。这些将概念带入了一个非常不同的方向。

答案 1 :(得分:7)

在标准布尔逻辑中,符号,读取 falsum bottom ,只是一个始终为false的语句,相当于{{ 1}}编程语言中的常量。表单是符号false verum top )的倒置(倒置)版本,相当于 - 这个符号看起来像一个大写字母T这一事实有一个助记符值。(名称​​ verum falsum 是拉丁语为“true”和“false”;名称“顶部”和“底部”来自有序集理论中符号的使用,它们是根据水平横杆的位置选择的。)

在可计算性理论中,true也是不可计算的计算的值,因此您也可以将其视为未定义的值。无论为什么计算是不可计算的 - 无论是因为它有未定义的输入,还是从不终止,或者其他什么都无关紧要。你的代码片段是第一个原因的形式化:它将 strict 定义为一个函数,只要其输入(参数)未定义,任何计算(另一个函数)都是未定义的。