返回最高或最低值Z表示法,形式方法

时间:2016-02-17 16:38:09

标签: formal-methods z-notation

我是Z记谱法的新手,

假设我的函数f定义为X | - >是的, 其中X是字符串,Y是数字。

如何在此功能中获得最高Y值? '循环'是否存在于形式方法中,所以我可以使用循环来解决它?

我知道Z符号有递归,但根据提供的材料,我发现它适用于multiset或bag,它是否适用于函数?

'loop'或递归应用程序的任何额外参考应用程序将不胜感激。抱歉我的英文。

1 个答案:

答案 0 :(得分:1)

您可以使用预定义函数max,它将一组整数作为输入并返回最大数字。这里的输入值是函数的范围(所有值的集合):

max(ran(f))

请注意,没有为空集定义最大值。

关于递归或循环的问题:你实际上可以递归地定义一个函数,但我认为你的问题更多地是针对某种计算方法。这在Z中很难表达,这对IMO来说是一件好事,因为它用于规范而且它不是一种编程语言。即使没有maxran功能,您仍然可以指定您要查找的号码m

\exists s:String @ (s,m):f /\
  \forall s2:String, i2:Z @ (s2,i2):f ==> i2 <= m

(“m的值为f,属于s,而i2的所有其他值f都小于或等于”)< / p>

在习惯了这种风格之后,通常比任何编程语言更好理解(除了你试图描述算法本身而不是它的预期结果)。#

仅供参考:递归定义的一个示例(让我们称之为rmax)的最大值将包含一个基本情况:

\forall e:Z @ rmax({e}) = e

和递归案例:

\forall e:Z; S:\pow(Z) @
    S \noteq {} \land
    rmax({e} \cup S) = \IF e > rmax(S) \THEN e \ELSE rmax(S)

但请注意,这仍然不是rmax的“计算规则”,因为第二个规则中的e可以是S的任意元素。在更复杂的情况下,定义的关系可能根本不是一个函数,因为根据所选元素,可以计算出不同的结果。