Z表示法:2D阵列的表示

时间:2012-10-10 10:44:09

标签: graph multidimensional-array formal-methods z-notation

我是Z符号的完全初学者。我需要在Z中表示图形类型。我的想法是使用关联矩阵,以便我可以轻松地在节点和边缘之间自由遍历。

唯一的问题是,我不知道如何在Z中指定关联矩阵。我认为我需要一个2D数组,但查看可用于Z表示法的参考材料,数组通常使用seq表示。还有另一种指定多维数组的方法吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

我认为节点之间的关系可以更好地表示关联矩阵。让我们假设我们有一个类型节点:

 [node]

然后可以将图形建模为节点之间的关系:

graph : node \rel node

这将是有向图,因为图中可能存在边n1-> n2但不是n2-> n1。如果您需要无向图,则可以添加进一步的限制:

graph\inv = graph

(图的倒数与图相同,即如果图中的n1-> n2,那么n2-> n1也必须在图中。)

如果您真的想要将关联矩阵建模为多维数组,可以定义一个从数组中的位置映射到整数的函数,例如:

matrix: (node \cross node) \fun {0,1}

两种表示之间的关系可表示为:

\forall n1,n2:node @ (n1,n2)\in graph \iff graph( (n1,n2) ) = 1