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