Я хочу использовать функцию coprime
, которая определена в Isabelle's GCD
и немного поиграть с ней. Почему value "coprime Suc(Suc 0) Suc(Suc(Suc (Suc 0)))"
возвращает ошибкуОшибка при попытке оценить `coprime`
Type unification failed: No type arity fun :: gcd
Type error in application: incompatible operand type
Operator: coprime :: ??'a ⇒ ??'a ⇒ bool
Operand: Suc :: nat ⇒ nat
Coercion Inference:
Local coercion insertion on the operand failed:
No type arity fun :: gcd
Now trying to infer coercions globally.
Coercion inference failed:
weak unification of subtype constraints fails
Clash of types "_ ⇒ _" and "nat"
вместо false
?
(Это также относится и к value "coprime 0 0"
.)
Минимальный MWE w.r.t ответ:
(*<*) theory T
imports
Main
"~~/src/HOL/Number_Theory/Number_Theory"
begin (*>*)
value "coprime 2 (4 :: nat))"
(*<*) end (*>*)
Как всегда, большое спасибо за ваш ответ. Я не знаю, что делать без ваших быстрых ответов. Хотя 'value" coprime 2 (4 :: nat) "' не компилируется для меня, так как он говорит 'Внутренняя синтаксическая ошибка ' Не удалось проанализировать термин'. Я помещаю минимальный (не) рабочий пример в свой ответ как редактирование. – nicht
У вас, похоже, есть незакрытая скобка в вашем MWE - возможно, это проблема? – IIM
'value" coprime 2 (4 :: nat) "' должен * абсолютно * работать. С другой стороны, дополнительная скобка IIM указала, что это приведет к этой точной ошибке. –