Скажем, у меня есть следующее определение рефлексивного и транзитивного замыкания отношения, где отношения представлены двоичными предикатами:
inductive
closure :: "(['a, 'a] ⇒ bool) ⇒ (['a, 'a] ⇒ bool)"
for ℛ (infix "→" 50)
where
gen:
"x → y ⟹ closure (→) x y" |
refl:
"closure (→) x x" |
trans:
"⟦closure (→) x y; closure (→) y z⟧ ⟹ closure (→) x z"
Я хочу иметь более хороший синтаксис для приложений closure
.Скажем, я бы хотел написать x *(→)* y
для closure (→) x y
.Проблема в том, что порядок аргументов в этой записи не соответствует порядку аргументов функции closure
.
Я подумал, что, возможно, использование \<index>
может помочь.К сожалению, документация \<index>
в Справочном руководстве Isabelle / Isar очень краткая, и я не мог понять этого.Я немного поиграл с \<index>
, но не нашел никакого приемлемого решения.
Меня удивило то, что, очевидно, \<index>
переводится в ⇘some_index⇙
, судя по некоторым сообщениям об ошибках, которые я получил.Я пытался использовать ⇘ℛ⇙
, чтобы отметить позицию, в которой должно идти базовое отношение, но это тоже не сработало.