Изабель / Изара: Реализация эквалайзера

Я все еще пытаюсь разобраться в отношениях равенства и определить, как их определить в Изабель. К счастью, в справочном руководстве 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) (это определяет синтаксис). После этих двух изменений вы можете продолжить.

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