Изабель / Изара: Реализация эквалайзера
Я все еще пытаюсь разобраться в отношениях равенства и определить, как их определить в Изабель. К счастью, в справочном руководстве isar 2.3.1 p38f есть глава об этом.
Я попытался восстановить приведенный пример. Чтобы избежать совпадений с установленным синтаксисом, я переименовал все. Также я добавил некоторые кавычки, так как они, кажется, отсутствуют в примере.
theory playground
imports Main
begin
typedecl i_play
typedecl u_play
Следующий шаг - это суждение, которое я не совсем понимаю, но, что ж, что может пойти не так:
judgment
Trueprop :: "u_play => prop" ("_play" 5)
error: Attempt to redeclare object-logic judgment
даже переименование Trueprop не дает другого результата.
Разве я не могу как-то здесь использовать bool вместо определения моего собственного объектного предложения? Или мне нужно представить u_play где-то еще?
Но пойдем дальше. Следующим шагом является отношение равенства, также скопированное и переименованное.
axiomatization
equal :: "i_play => i_play => u_play" (infix "EQ" 50)
where
refl [intro]: "x EQ x" and
subst [elim]: "x EQ y ⟹ B x ⟹ B y"
Это дает Type unification failed: Clash of types "u_play" and "bool"
ошибка. Когда я заменяю u_play на bool, все в порядке, и я даже могу использовать EQ
в чем-то тривиальном, как lemma t : "x EQ x"
, но правило подстановки, похоже, не работает, что приводит меня к вопросу о том, каковы два B там. Я видел ту же конструкцию в HOL.thy с буквами P и немного дальше по isar rm, они опущены. Просто констатирую impD [dest]: (A --> B) ==> A ==> B
Что нужно сделать, чтобы замена заработала?
1 ответ
Теория playground
импорт Main
это многое определяет. Если вы хотите начать с нуля, вы должны использовать Pure
вместо. Другая проблема связана с ("_play" 5)
что следует читать ("_" 5)
(это определяет синтаксис). После этих двух изменений вы можете продолжить.