【发布时间】:2015-06-12 02:03:26
【问题描述】:
我想写一个函数,它以 set 作为输入和return true if it is top and false if it is bottom.
这种方式我试过了。。
isTop : Set → Bool
isTop x = if (x eq ⊤) then true
else false
但我无法正确定义 eq。我试过了。。
_eq_ : Set → Set → Bool
⊤ eq ⊥ = false
这不起作用,因为当我检查 T eq T it is also returning false.
请帮我写这个 eq 函数或任何其他写 isTop 的方法。
【问题讨论】:
-
例如,可以定义一个集合,其居民是哥德巴赫猜想的证明。这告诉了你关于
isTop的什么信息? -
我不确定如何定义
isTop,但⊤ eq ⊤返回false 的原因是您无法对Set类型的内容进行模式匹配。 Agda 将⊤和⊥解释为普通变量名。与x eq y = false相同。 -
@luqui 我不知道如何用该证明定义一个集合。能详细点吗??
-
简而言之,这是不可能的。相反,您应该说明您正在努力实现的更广泛的目标。
-
Universe
Set不是归纳定义的类型,因此您不能对其使用模式匹配。假设您可以使用模式匹配以某种方式定义_eq_。稍后您可以添加自定义类型data Foo : Set where ...,其中Foo未在_eq_的定义中考虑。
标签: haskell functional-programming agda