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 的一件好事,因为它用于规范而不是编程语言。即使没有 max
或 ran
函数,您仍然可以通过以下方式指定要查找的数字 m
:
\exists s:String @ (s,m):f /\
\forall s2:String, i2:Z @ (s2,i2):f ==> i2 <= m
(m
是 f
的值,属于 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
的任意元素。在更复杂的场景中,定义的关系是一个函数甚至可能并不明显,因为根据所选元素的不同,可以计算出不同的结果。
我是 Z 表示法的新手,
假设我有一个定义为 X |--> Y 的函数 f , 其中 X 是字符串,Y 是数字。
如何在这个函数中获得最高的Y值? 'loop' 是否存在于形式化方法中,所以我可以使用循环来解决它?
我知道Z表示法中有递归,但是根据提供的material,我发现它只适用于multiset或bag,它可以适用于函数吗?
'loop' 或递归应用程序的任何额外参考应用程序将不胜感激。对不起我的英语。
您可以只使用预定义函数 max
,它将一组整数作为输入,returns 是最大数。这里的输入值是函数的范围(所有值的集合):
max(ran(f))
请注意,没有为空集定义最大值。
关于你关于递归或循环的问题:你实际上可以递归地定义一个函数,但我认为你的问题更多的是针对一种计算方法。这在 Z 中不容易表达,这是 IMO 的一件好事,因为它用于规范而不是编程语言。即使没有 max
或 ran
函数,您仍然可以通过以下方式指定要查找的数字 m
:
\exists s:String @ (s,m):f /\
\forall s2:String, i2:Z @ (s2,i2):f ==> i2 <= m
(m
是 f
的值,属于 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
的任意元素。在更复杂的场景中,定义的关系是一个函数甚至可能并不明显,因为根据所选元素的不同,可以计算出不同的结果。