Return 最高或最低值 Z 表示法,形式化方法

Return highest or lowest value Z notation , formal method

我是 Z 表示法的新手,

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

如何在这个函数中获得最高的Y值? 'loop' 是否存在于形式化方法中,所以我可以使用循环来解决它?

我知道Z表示法中有递归,但是根据提供的material,我发现它只适用于multiset或bag,它可以适用于函数吗?

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

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

max(ran(f))

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

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

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

(mf 的值,属于 s 并且 f 的所有其他值 i2 都小于或等于" )

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

仅供参考:最大值的递归定义示例(我们称之为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 的 "computation rule",因为第二条规则中的 e 可以是 S 的任意元素。在更复杂的场景中,定义的关系是一个函数甚至可能并不明显,因为根据所选元素的不同,可以计算出不同的结果。