我很困惑。
class Nonde_choice=
fixes nodt :: " 'a ⇒ 'a ⇒ 'a" (infixl "⊓" 70)
assumes commutative [simp]: "(x ⊓ y) = (y ⊓ x)"
and associative [simp]: "((x ⊓ y) ⊓ z) = (x ⊓ (y ⊓ z))"
and idempotent [simp]: "(x ⊓ x)= x"
sublocale nonde_choice: comm_monoid_set Nonde_choice neutral_element_for_nonde_choice
defines nonde_choice = nonde_choice.F ..
没关系,接下来只是证明。
locale Nonde_choice=
fixes nodt :: " 'a ⇒ 'a ⇒ 'a" (infixl "⊓" 70)
assumes commutative [simp]: "(x ⊓ y) = (y ⊓ x)"
and associative [simp]: "((x ⊓ y) ⊓ z) = (x ⊓ (y ⊓ z))"
and idempotent [simp]: "(x ⊓ x)= x"
sublocale nonde_choice: comm_monoid_set Nonde_choice neutral_element_for_nonde_choice
defines nonde_choice = nonde_choice.F ..
然后警告并输出:
Type unification failed: Clash of types "bool" and "_ ⇒ _"
Failed to meet type constraint:
Term: Nonde_choice :: (??'a ⇒ ??'a ⇒ ??'a) ⇒ bool
Type: (??'a ⇒ ??'a ⇒ ??'a) ⇒ (??'a ⇒ ??'a ⇒ ??'a) ⇒ ??'a ⇒ ??'a ⇒ ??'a
我更喜欢第一种情况。但是,如果我选择了第一种情况,那么我需要更改其他操作。因为ifjudge报告错误:
Type error in application: incompatible operand type
Operator: (⊓) :: ??'a ⇒ ??'a ⇒ ??'a
Operand: a :* x :: 'a
我的其他操作员:
locale newoperation =
fixes next_two :: "'b ⇒ 'a ⇒ 'a" (infixl ":*" 70)
and compl :: "'b ⇒ 'b" ("¬* _" [40] 40)
assumes doucompl[simp]: "(¬* (¬* x)) = x"
locale ifjudge = newoperation + Nonde_choice +
fixes ifte :: "'b ⇒'a ⇒ 'a ⇒ 'a"
assumes negate [simp]: "ifte a x y = (a :* x) ⊓ ((¬* a) :* y)"
我似乎不太了解语言环境和课程之间的区别,希望有人能给我一些建议。预先感谢。