Нужно определение в Изабель, чтобы показать, что две частичные функции никогда не выдают одинаковый вывод

Я использую математический инструментарий в 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) в Изабель, я предполагаю, что она ведет себя нормально.

Как я могу определить другую функцию, где я говорю, что две частичные функции полностью не пересекаются для всех "х". Я имею в виду, что реляционное применение одного и того же значения к двум частичным функциям "баланс" и "баланс" НИКОГДА не дает одинаковое значение. что-то вроде...

FORALL x. balance %^ x \noteq Bbalance %^ x

извините за плохое объяснение. мы учимся через советы экспертов:).

1 ответ

Ваше правило rel_appl_def использует функцию epsilon. Согласно Стэнфордской энциклопедии философии (SEP)(*) в его лекции в Гамбурге в 1921 году (1922), Гильберт впервые представил идею использования функций выбора для решения принципа исключенного среднего в формальной системе арифметики.

Управляющая аксиома функции эпсилон гласит:

 (A x) --> (A (@ A))

В классической логике, из-за ex falso quodlibet, если (A x) не удается, (@ A) может принимать любую интерпретацию. Это означает, что ваше правило rel_appl_def дает любое значение, когда вы указываете аргумент x, которого нет в домене dom R.

Поэтому, вероятно, вы хотите использовать в качестве равенства следующую логическую функцию (^) для двух частичных функций:

 f ^ g = (dom f = dom g) & (!x. x : dom f --> f %^ x = g %^ x)

Что я не могу понять, когда SEP пишет, второй, возможно, более актуальный интерес, это использование эпсилон-оператора в системах доказательства теорем HOL и Изабель, где выразительная сила эпсилон-термов дает значительные практические преимущества.

Я видел на практике гораздо более простое обращение с частичными функциями, а именно с использованием параметра option. Таким образом, частичная функция f принадлежит просто опции типа A => B. Но когда вы не можете изменить типы в своем проекте, возможно, разумнее искать равенство, которое соответствует вашим требованиям, приведенное выше определение может быть подходящим.

до свидания

(*)
Эпсилонское исчисление, Джереми Авигад и Ричард Зак
Впервые опубликовано пт 3 мая 2002 г.; основная редакция ср 27 ноября 2013
http://plato.stanford.edu/entries/epsilon-calculus/

Другие вопросы по тегам