Ωmega 编程:特性与应用
1. 基于单例类型的函数编写
在 Ωmega 中,单例类型的类型决定其形状。我们可以利用这一特性编写函数 sameNat ,其功能是判断两个 Nat’ 类型的值是否相等。函数原型如下:
sameNat:: Nat’ a -> Nat’ b -> Maybe(Equal a b)
sameNat Z Z = Just Eq
若想了解该函数的类型推导过程,构建一个包含预期类型、等式、计算类型和生成等式的类型推导框会很有帮助。
2. 同时计算程序和属性
我们能够编写程序,在计算索引值的同时生成该值具有某些额外属性的证明。例如,在对两个静态长度列表进行加法运算时,结果列表的长度与两个输入列表的长度相关,我们可以同时生成表示这种关系的证明。
2.1 列表加法示例
data Plus:: Nat ~> Nat ~> Nat ~> *0 where
PlusZ:: Plus Z m m
PlusS:: Plus n m z -> Plus (S n) m (S z)
app1:: Seq a n -> Seq a m -> exists p . (Seq a p,Plus n m p)
app1 Snil ys = Ex(ys,PlusZ)
app1 (Scons x xs) ys = case (app1 xs ys
超级会员免费看
订阅专栏 解锁全文
87

被折叠的 条评论
为什么被折叠?



