Isabelle 如何为类型类名创建同义词?

Isabelle 如何为类型类名创建同义词?,isabelle,Isabelle,我想缩写为类型类名创建一个同义词。我现在是这样做的: class fooC = linordered_idom instance int :: fooC proof qed definition foof :: "'a::fooC ⇒ 'a" where "foof x = x" term "foof (x::int)" value "foof (x::int)" 如果没有更好的方法,这很好用。缺

我想缩写为类型类名创建一个同义词。我现在是这样做的:

class fooC = linordered_idom
instance int :: fooC 
  proof qed

definition foof :: "'a::fooC ⇒ 'a" where
  "foof x = x"
  
term "foof (x::int)"
value "foof (x::int)"
如果没有更好的方法,这很好用。缺点是我必须实例化
int
,而
class
命令本身需要时间来实现

更新140314 这次更新是为了向Makarius阐明我想要的是什么,解释我想要它的目的,并给出一个我熟悉的用于创建符号、缩写和同义词的命令列表,但这些命令我无法满足我的需要

我最初选择“缩写”而不是“同义词” 我想“同义词”应该是一个更好的词,但我选择“缩写”是因为它描述了我想要的,即能够为类型类创建一个更短的名称,比如将
linordered\u semidom
重命名为
losdC
。虽然Isar
缩写
具有
定义
的一些属性,但它也只是定义语法。所以,因为“缩写”描述了我想要的内容,而
缩写
只是定义语法,所以我选择了“缩写”而不是“同义词”或“别名”

同义词/别名,Isar命令我没法用它 “别名”可以描述我想要什么。至于“如果您只想在编辑器中保存键入内容,可以在编辑器中使用一些缩写”这句话,以下是我尝试过的命令,用于尝试重命名
linordered\u idom
,但我无法让它们为我工作:

  • 类型符号
  • type_同义词
  • 符号
  • 缩写
  • 语法
与其解释我尝试过什么,试着记住我尝试过什么,我只是列出它们。我搜索了“class”,只找到了Isar命令
class
class
。我想也许可以使用区域设置命令,但我没有找到任何东西

我想要的很简单,比如如何使用
type\u synonym
定义类型的同义词

目的 我通常希望缩短类型类名称,例如
linordered\u idom
,因为最终,我计划广泛使用代数类型类

然而,还有第二个原因,那就是将类似于
linordered\u semidom
的东西重命名为三种类型命名方案的一部分

对于任何代数类型类,例如
linordered\u semidom
,我可以使用该类型类以及
商\u type
,来创建我称之为数字系统的东西,例如如何使用
nat
定义
int

使用
Int.thy
作为模板,我使用
linordered\u semidom
实现了这一点,然后将其实例化为
comm\u ring\u 1
,这几天我只有时间去做

此外,使用
typedef
,对于依赖关系为
zero
one
(以及其他如
ord
)的任何代数类型类,我可以定义大于或等于零的所有元素的类型,以及大于零的所有元素的另一个类型。我这样做是为了
linordered\u idom
,但后来我发现我实际上需要走
商类型
的路线,才能得到模拟老鼠的东西

这是一个很长的解释。最后,我将开始使用大量的代数类型类,从一个类型类中,我将得到另外两个。如果我对20个类型类这样做,并且也使用它们,那么长的描述性名称就不起作用,重命名类型类将帮助我了解哪些类型类一起使用

下面是关于
linordered_semidom
的方案,在我能够全部尝试之前,我不知道这会是怎样的结果:

  • linordered\u semidom
    是基类。我将其重命名为
    losdC
    。这三种类型的数字大于或等于零
  • losdQ
    是从
    losdC
    使用
    商类型定义的。它给了我负数,以及强制
    losdC
    losdQ
    的能力
  • losd1
    是使用
    typedef
    定义的,是大于零的数字
  • 我需要一个一致的命名方案,以保持其完整性:
    losdC
    losdQ
    losd1

    最后,最终甚至有4种类型,而不是3种类型 我还没有完全研究和思考过(我甚至还没有接近),但类似地,对于代数类型的类来说,这一切都与实现
    nat
    int
    rat
    之间的基本关系有关,而
    real
    最终可能发挥作用。此外,它还涉及从这些类型中获取一个非负成员或正成员的类型,若这些成员不是默认的

    nat
    用于
    int
    ,而
    int
    用于
    rat

    nat
    用于
    int
    时,我们默认获得非负整数,即
    nat

    使用
    int
    用于
    rat
    ,我们不会得到
    rat
    的非负成员,而是得到分数。(再说一遍,我说的是一种非消极和积极,而不是一组非消极和积极。)

    因此,如果我使用
    linordered_idom
    quotient_type
    来定义分数,那么我必须使用
    typedef
    两次来获得这些分数的非负和正成员,这意味着我要跟踪4种类型,
    liodC
    liodQ
    liod0
    ,以及
    liod1


    如果有一个简单的方法来重命名类型类,那么我不必要说了大约600个单词。

    定义不是缩写,它引入了一个逻辑上相等的单独术语。这适用于术语常量
    class foobar = ord + fixes foobar :: 'a
    
    setup {* Sign.class_alias @{binding f} @{class foobar} *}
    
    typ "'a::f"
    
    instantiation nat :: f
    begin
    definition foobar_nat :: nat where "foobar_nat = 0"
    instance ..
    end
    
    definition (in foobar) "fuzz = foobar"
    theorem (in foobar) "fuzz = foobar" by (simp add: fuzz_def)