输入对 (x,y) 和 (x/=y)
Type for pairs (x,y) with (x/=y)
我想为 (x, y)
和 x /= y
对设置一个类型。
我的想法是定义 NEqPa : Type -> Type
,这样 NEqPa a
应该包含所有元素 ((x,y), p)
以及 x : a
、y : a
和 p : (x = y) -> Void
.我尝试了以下两个版本:
NEqPa a = ((x, y) : (a, a) ** (x = y) -> Void)
NEqPa a = ((x : a, y : a) ** (x = y) -> Void)
两者在语法上似乎都不正确,但我不知道如何修复它们。
[编辑] 我找到了解决方案:
NEqPa a = (p : (a, a) ** (fst p = snd p) -> Void)
这种做法合理吗?
当您想在第一个坐标上添加显式类型注释时,**
的语法糖使用起来有点笨拙。我直接使用 DPair
:
NEqPa : Type -> Type
NEqPa a = DPair (a, a) $ \(x, y) => Not (x = y)
我想为 (x, y)
和 x /= y
对设置一个类型。
我的想法是定义 NEqPa : Type -> Type
,这样 NEqPa a
应该包含所有元素 ((x,y), p)
以及 x : a
、y : a
和 p : (x = y) -> Void
.我尝试了以下两个版本:
NEqPa a = ((x, y) : (a, a) ** (x = y) -> Void)
NEqPa a = ((x : a, y : a) ** (x = y) -> Void)
两者在语法上似乎都不正确,但我不知道如何修复它们。
[编辑] 我找到了解决方案:
NEqPa a = (p : (a, a) ** (fst p = snd p) -> Void)
这种做法合理吗?
当您想在第一个坐标上添加显式类型注释时,**
的语法糖使用起来有点笨拙。我直接使用 DPair
:
NEqPa : Type -> Type
NEqPa a = DPair (a, a) $ \(x, y) => Not (x = y)