Я пытаюсь определить унарную операцию на множестве stalk x
, типичные элементы которого имеют вид germ x U s
. В этом случае невозможно определить операцию над общими вещами того же типа, что и germ x U s
, таким образом, чтобы это уменьшалось до того, что я хочу, поэтому мне кажется, что мне действительно приходится прибегать к определению по случаям. Я попытался следующийОпределение без рекурсии, в случаях, в Isabelle
definition stalk_mop2 :: "'a ⇒(('a set × 'a) set ⇒ ('a set × 'a) set) " where
"stalk_mop2 x y = ((λ z . if (∃ U s. y= germ x U s) then
(germ x U (-⇩a ⇘objectsmap U⇙ s)) else undefined) z) " ,
и получил сообщение об ошибке, что U s
являются дополнительными переменными на РИТАХ. Похоже, что с помощью этого синтаксиса Isabelle не устанавливает связь между гипотезой if
и следующим термином, так что, хотя я и связывал U
и s
в условном выражении, он, по-видимому, интерпретирует следующие вхождения U
и s
(после then
) как свободные переменные.
Что я действительно хочу, это просто функция, которая принимает x
и что-то вроде формы germ x U s
и возвращает germ x U (-⇩a ⇘objectsmap U⇙ s)
. Здесь нет ничего рекурсивного.
Есть ли способ обойти эту проблему или, может быть, лучший способ сделать определения в случаях, которые позволят мне определить, что я хочу?
Спасибо так много для это, застряло некоторое время, пытаясь найти достойный способ и не понимая Иса Белл сказала бы «ну и что?» если вы просто предполагаете существование. Будет держать AoC в виду. –
Один глупый вопрос: если я хочу «позволить» две вещи, что-то вроде let (U, s) = (НЕКОТОРЫЕ (U, s). Y = рост x U s) и пусть (V, t) = (НЕКОТОРЫЕ (V, t). Z = рост x V t), что такое правильный синтаксис? Очевидно, просто использование «и» или символ не работает, но, возможно, я просто не получаю синтаксис, который вы использовали в своей формулировке для начала. –
@ JoséSiqueira Я обновил свой ответ. – chris