Я хочу создать определение, имеющее кортеж в качестве аргумента.Использование кортежей в определениях
definition my_def :: "('a × 'a) ⇒ bool" where
"my_def (a, b) ⟷ a = b"
Однако, это не принято. Сообщение об ошибке
Bad arguments on lhs: "(a, b)"
The error(s) above occurred in definition:
"my_def (a, b) ≡ a = b"
Использование fun
вместо definition
работает, но это не то, что я хочу. Следующие обозначения также работает, но несколько некрасиво:
definition my_def :: "('a × 'a) ⇒ bool" where
"my_def t ⟷ fst t = snd t"
Каков наилучший способ использовать кортежи в качестве аргументов в definition
?
Так что случилось с 'fun' здесь? 'fun' и' definition' равны в механизмах определения * производных *, тогда как 'definition' просто оказывается более минималистичным (и позволяет определять вещи без аргументов). – Makarius
'fun' автоматически распространяется на его определение. – corny
ОК, это определенная разница по умолчанию. Вы можете сказать 'declare my_def.simps [simp del]' после 'fun' или использовать' definition' с абстракцией кортежа, как предложено lsf37. – Makarius