我正在使用 HOL-Z 中的数学工具包来释放一些 Isabelle 谓词。具体来说,我使用部分函数定义来定义我正在编写的 Z 规范中的一些关系,在其中我将模式转换为规范语句,以便我可以生成简单的 HOL 谓词。
来自 HOL-Z 工具包的定义
type_synonym ('a,'b) lts = "('a*'b) set" (infixr "<=>" 20)
prodZ ::"['a set,'b set] => ('a <=> 'b) " ("_ %x _" [81,80] 80)
"a %x b" == "a <*> b"
rel ::"['a set, 'b set] => ('a <=> 'b) set" ("_ <--> _" [54,53] 53)
rel_def : "A <--> B == Pow (A %x B)"
partial_func ::"['a set,'b set] => ('a <=> 'b) set" ("_ -|-> _" [54,53] 53)
partial_func_def : "S -|-> R ==
{f. f:(S <--> R) & (! x y1 y2. (x,y1):f & (x,y2):f --> (y1=y2))}"
rel_appl :: "['a<=>'b,'a] => 'b" ("_ %^ _" [90,91] 90)
rel_appl_def : "R %^ x == (@y. (x,y) : R)"
当我在谓词中编写以下内容时:
FORALL x. balance %^ x = Bbalance %^ x
其中 balance 和 Bbalance 都是偏函数(在 Z 中),在 Isabelle 中的形式为 ('a <=> 'b),我认为它表现良好。
我如何定义另一个函数,我说这两个部分函数对于所有 'x' 都是完全不相交的。我的意思是相同值在两个偏函数“balance”和“Bbalance”上的关系应用永远不会产生相同的值。就像是...
FORALL x. balance %^ x \noteq Bbalance %^ x
抱歉解释不佳。我们通过专家建议学习:)。