从Bool到Bool有多少种不同的功能?

问题描述

由于(至少在我看来)这与编程紧密相关,所以我在这里而不是在mathcs上提问,但是如果您认为它最适合那里或那里另一方面,请发表您的看法。

在Bartosz Milewski的程序员分类理论的第二章结尾处,有一个问题:

libMobileGestaltBool有多少种不同的功能?你能全部实现吗?

这是我的理由:

  • Bool中只有两个元素,BoolTrue
  • different 是指被视为黑匣子的函数,无论它们内部发生了什么(例如,两个函数将两个False的和编码为Intarg1 + arg2分别是从arg2 + arg1Int的相同函数);
  • 所以不同的功能是从两个Int中的一个到两个Bool中的另一个的功能:
    1. BoolT
    2. TT
    3. FF
    4. TF
  • 我需要什么功能来实现那些出入场景?好吧,我想我只需要两个,例如恒等函数(允许1和4)和取反(允许2和3)。

我的推理正确吗?

解决方法

有四个功能:

1

假->假
正确->错误

2

假->假
正确->正确

3

false-> true
正确->错误

4

false-> true
正确->正确

说明

您的推理基本上是正确的。这些功能是黑匣子,我们将其视为值。由于输入是布尔值,并且具有两个可能的值,并且该函数可能具有两个单独的值,基本上是2 ^ 2 = 4

时的数字 ,

不同的功能是从两个Bool中的一个到两个Bool中的另一个的功能

不。函数确实将其domain每个值映射到其共域的一个值。您需要考虑所有可能的映射组合。为此,将功能视为relation并列出所有功能可能很有意义:

  • f -> ft -> f
  • f -> ft -> t
  • f -> tt -> f
  • f -> tt -> t

这些对应于4个功能

  • x => f(始终为false)
  • x => x(身份)
  • x => not(x)(否定)
  • x => t(不变)
,

您要求编程的事实,而不是数学或CS,很重要。

在Math上,他们会告诉您有四个这样的函数,其他答案列出了它们。

在CS上,他们告诉您有27个:三个可能的输入T F和each中的每一个分别对应三个可能的输出T F和⊥中的一个。

在编程方面,我可以告诉您十一点:

  • (T-> T,F-> F,⊥->⊥)身份
  • 不是(T-> F,F-> T,⊥->⊥)
  • (T-> T,F-> T,⊥-> T)惰性常数true
  • (T-> F,F-> F,⊥-> F)惰性常数false
  • (T-> T,F-> T,⊥->⊥)严格常数true
  • (T-> F,F-> F,⊥->⊥)严格常数false
  • (T->⊥,F-> F,⊥->⊥)身份验证失败
  • (T-> T,F->⊥,⊥->⊥)身份因错误而失败
  • (T->⊥,F-> T,⊥->⊥)不会失败
  • (T-> F,F->⊥,⊥->⊥)不会因错误而失败
  • (T->⊥,F->⊥,⊥->⊥)失败

(这个答案很讽刺:我认为实际上大多数学术型CS类型都会说4或11。)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...