Я использую математический инструментарий HOL-Z для выполнения некоторых предикатов Изабель. в частности, я использую частичное определение функции для определения некоторых отношений в спецификации 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) формы ('a ‹=>' b) в Isabelle, я полагаю, что это нормально.
Как я могу определить другую функцию, в которой я говорю, что две частичные функции полностью не пересекаются для всех 'x'. Я имею в виду, что относительное применение одного и того же значения к двум частичным функциям «баланс» и «Bbalance» НИКОГДА не дает одно и то же значение. что-то типа...
FORALL x. balance %^ x \noteq Bbalance %^ x
извините за плохое объяснение. мы узнаем через советы специалистов :).