从类或语言环境构造子语言环境更好吗?

时间:2019-02-15 01:24:04

标签: isabelle

我很困惑。

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)"

我似乎不太了解语言环境和课程之间的区别,希望有人能给我一些建议。预先感谢。

0 个答案:

没有答案