Я работаю над теорией, где я довольно сильно использую экстенсиональные функции, определенные в теории Funcset. Мне нужно работать с функциональнозначными функциями, где и функция, и значения являются экстенсиональными. Весьма раздражает то, что некоторые из моих лемм терпят неудачу, потому что функция undefined
не отображает все в undefined
. Таким образом, цельIsabelle: новая аксиома для неопределенных функций
undefined x = undefined
не подлежит подтверждению. Я могу обойти это, используя ограничения, но это было бы намного более элегантно без них. Можно ли добавить новую аксиому:
axiomatization where
undefined_at [simp]: "undefined x = undefined"
? Меня это волнует, потому что
1) Я не уверен, что я должен поиграть с такой логикой.
2) После того, как я добавить эту аксиому, для целей, таких как «неопределенного \ в А», придираться производит ошибку: Limit reached: too many nested axioms (256).
3), казалось бы, так же невинной аксиома
axiomatization where
at_undefined [simp]: "f undefined = undefined"
производит странные цели, как "P ==> undefined".
Спасибо, ваш ответ был очень полезным. Хорошо знать, что 'undefined_at' является безопасным и разумным для добавления, но слишком специфичным для некоторых приложений. Я собираюсь определить новый 'undefined' (я соблазнился назвать его« ничего ») с более сильной аксиомой и использовать это, где мне нужно. –
На самом деле вам не нужны аксиомы. Определите класс класса 'class nothing = fixx nothing' и создайте экземпляр для типов, которые вам нужны. Для типа функции используйте 'instantiation" fun ":: (type, nothing) nothing begin' ' определение "nothing x = nothing" ' ' instance ..' 'end' Если это слишком громоздко для создания экземпляра все типы, вы также можете использовать неограниченную перегрузку, что также безопасно. 'consts nothing :: 'a' ' overloading f == "nothing :: (' a ⇒ 'b)" begin " ' определение nothing_fun_def: "f (x ::' a) = (ничего :: 'b) "' 'end' С помощью обоих подходов вы можете добавить дополнительные уравнения для других типов позже. –