Typeclass 我可以更改内置Isabelle类型类中的表示法吗

Typeclass 我可以更改内置Isabelle类型类中的表示法吗,typeclass,isabelle,Typeclass,Isabelle,我已将我的一种类型作为幺半群的一个实例添加到: instantiation "marking_ext" :: (monoid_add) monoid_add begin definition marking_add_def: "M + N = ... end 我现在可以在('a::monoid\u add)标记的值之间使用熟悉的+符号,例如writeM+N。但是我宁愿使用\,写M\N 我是否可以更改typeclass实例的表示法,但仍保留在类型类的内置层次结构

我已将我的一种类型作为
幺半群的一个实例添加到

instantiation "marking_ext" :: (monoid_add) monoid_add  
begin
  definition
    marking_add_def:
    "M + N = 
    ...
end
我现在可以在
('a::monoid\u add)标记的值之间使用熟悉的
+
符号,例如write
M+N
。但是我宁愿使用
\
,写
M\N


我是否可以更改typeclass实例的表示法,但仍保留在类型类的内置层次结构中?

您可以在您的类型上为
+
添加其他表示法,例如,通过引入缩写:

abbreviation marking_add' :: "marking_ext ⇒ marking_ext ⇒ marking_ext" (infixl "⊕" 65)
  where "(⊕) ≡ (+)"
您可以根据需要调整运算符优先级(65是正常的
+
所具有的优先级)


然而,请注意,如果引入额外的符号与其他理论中的符号相冲突,则可能会产生问题。如果有人希望将来将您的开发与其他一些也定义符号的库一起使用
,会有语法冲突,这会让那个人的生活变得更艰难。通常有一种方法可以绕过它(特别是对于像这样的简单符号),但是:我通常建议不要使用不必要的额外符号,除非有真正的好处。在这种特殊情况下,我真的看不出有什么好处。但这只是我的建议,当然可以忽略它!:)

上面的答案给了我实际需要的东西,但是,问题的/literal/答案是,您可以使用
notation
全局更改类型类的表示法:

notation plus (infixl "⊕" 65)
对于
plus
,您可能不想这样做,因为如果您这样做,算术将呈现您的新外观:

term "(2 :: nat) + 3"

--> "2 ⊕ 3"
  :: "nat"

谢谢我正在将我们在声明性流程建模方面的部分工作形式化,我认为在可能的情况下,遵循已发布结果的符号有一定的价值。