作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Haskell 中实现了四个德摩根定律中的三个:
notAandNotB :: (a -> c, b -> c) -> Either a b -> c
notAandNotB (f, g) (Left x) = f x
notAandNotB (f, g) (Right y) = g y
notAorB :: (Either a b -> c) -> (a -> c, b -> c)
notAorB f = (f . Left, f . Right)
notAorNotB :: Either (a -> c) (b -> c) -> (a, b) -> c
notAorNotB (Left f) (x, y) = f x
notAorNotB (Right g) (x, y) = g y
但是,我认为不可能实现最后一项法律(有两名居民):
notAandBLeft :: ((a, b) -> c) -> Either (a -> c) (b -> c)
notAandBLeft f = Left (\a -> f (a, ?))
notAandBRight :: ((a, b) -> c) -> Either (a -> c) (b -> c)
notAandBRight f = Right (\b -> f (?, b))
在我看来,有两种可能的解决方案:
未定义
代替?
。这不是一个好的解决方案,因为它是作弊行为。使用单态类型或有界多态类型来编码默认值。
notAandBLeft :: Monoid b => ((a, b) -> c) -> Either (a -> c) (b -> c)
notAandBLeft f = Left (\a -> f (a, mempty))
notAandBRight :: Monoid a => ((a, b) -> c) -> Either (a -> c) (b -> c)
notAandBRight f = Right (\b -> f (mempty, b))
这不是一个好的解决方案,因为它的法律比德摩根定律弱。
我们知道德摩根定律是正确的,但我假设最后一条定律不能用 Haskell 编码是否正确?这对库里-霍华德同构有何说明?如果每个证明都不能转换成等价的计算机程序,那么它就不是真正的同构,对吧?
最佳答案
第四定律是not intuitionistic 。您需要排除中间公理:
lem :: Either a (a -> c)
或 PIL 斯定律:
pierce :: ((a -> c) -> c) -> a
证明这一点。
关于haskell - 通过库里-霍华德通信了解 haskell 的德摩根定律,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37016673/
我在互联网上搜索过,但我找不到任何对 CHI 的解释,这些解释不会迅速退化为逻辑理论讲座,这完全超出了我的理解范围。 (这些人说话就好像“直觉命题演算”是一个对普通人来说实际上意味着什么的短语!) 粗
我发现了Curry-Howard Isomorphism我的编程生涯相对较晚,也许这使得我对它完全着迷。这意味着对于每个编程概念,形式逻辑中都存在精确的类比,反之亦然。这是我脑海中浮现出来的此类类比的
我是一名优秀的程序员,十分优秀!