在Idris

时间:2017-04-19 14:31:32

标签: graph dependent-type idris

我想在Idris中实现有限的有向图。另外,我想使用从顶点集到其他类型/集的顶点映射f : V -> X。哪个是最自然的方法?

一种选择是始终为顶点集选择Fin n。这样,图表可以直接实现为其邻接矩阵,即Graph n = Vect n (Vect n Bool),任何顶点映射都可以作为Vect n a类型的向量。

另一方面,我喜欢定义Graph a = SortedMap (a, a) Bool的想法。这样,一些结构似乎更直接,例如,类型为Graph a -> Graph b -> Graph (a, b)的图表产品。

但是有可能构建男性图形实例,例如, (x, y)g的关键,但(y, x)不是。另外,如果我想编写一个带有图形和兼容顶点图的函数,我不知道如何指定两个对象的域必须重合。可能f : (g : Graph a) -> (m : SortedMap a b) -> {auto p : vertexList g = keys m} -> ...必须首先编写函数vertexListkeys

第三个定义是Graph a = (a, a) -> Bool,其中a应该是某种有限类型,如Fin n(Fin m, Fin n)。然后顶点地图只是a -> b类型。

0 个答案:

没有答案