我正在研究一种需要使用戒指的理论,因此我引入了以下理论:https://www.isa-afp.org/browser_info/devel/AFP/Group-Ring-Module/
现在,我已经定义了一个特定类型的集合X,并且我想在其上定义操作以使其成为一个环,就像导入理论的语言环“Ring”一样。
如何定义带有载体X的环并将其识别为语言环“Ring”的实例?
语言环境“Ring”是通过扩展“aGroup”来声明的,而“aGroup”又是通过扩展“Group”来声明的,这是在“Algebra2.thy”理论中:
record 'a Group = "'a carrier" +
top :: "['a, 'a ] ⇒ 'a" (infixl "⋅ı" 70)
iop :: "'a ⇒ 'a" ("ρı _" [81] 80)
one :: "'a" ("ı")
locale Group =
fixes G (structure)
assumes top_closed: "top G ∈ carrier G → carrier G → carrier G"
and tassoc : "⟦a ∈ carrier G; b ∈ carrier G; c ∈ carrier G⟧ ⟹
(a ⋅ b) ⋅ c = a ⋅ (b ⋅ c)"
and iop_closed:"iop G ∈ carrier G → carrier G"
and l_i :"a ∈ carrier G ⟹ (ρ a) ⋅ a = "
and unit_closed: " ∈ carrier G"
and l_unit:"a ∈ carrier G ⟹ ⋅ a = a"
我解决的另一个可能的问题:如果我没有弄错,载体必须是'a set'类型,但我的set X是类型('set \ times'a)set set。有解决方法吗?
编辑:为了更好地在评论中制定顺序问题,以下是我所做的一些事情。以下所有内容都在语言环境 presheaf 的上下文中,修复了(除其他外):
T :: 'a set set and
objectsmap :: "'a set ⇒ ('a, 'm) Ring_scheme" and
restrictionsmap:: "('a set ×'a set) ⇒ ('a ⇒ 'a)"
然后我介绍了以下内容:
definition prestalk :: "'a ⇒('a set × 'a) set" where
"prestalk x = { (U,s). (U ∈ T) ∧ x ∈U ∧ (s ∈ carrier (objectsmap U))}"
definition stalkrel :: "'a ⇒ ( ('a set × 'a) × ('a set × 'a) ) set" where
"stalkrel x = {( (U,s), (V,t) ). (U,s) ∈ prestalk x ∧ (V,t) ∈ prestalk x ∧ (∃W. W ⊆ U∩V ∧ x∈W ∧
restrictionsmap (V,W) t = restrictionsmap (U,W)) s} "
然后我证明了对于每个x,stalkrel x是等价关系,并且定义为:
definition germ:: "'a ⇒ 'a set ⇒ 'a ⇒ ('a set × 'a) set" where
"germ x U s = {(V,t). ((U,s),(V,t)) ∈ stalkrel x}"
definition stalk:: "'a ⇒( ('a set × 'a) set) set" where
"stalk x = {w. (∃ U s. w = germ x U s ∧ (U,s) ∈ prestalk x) }"
我试图表明,对于每个x,这个柄x是一个环,并且环操作是从环objectsmap (U∩V)
的环操作中“构建”的,即,我想{{1 } {}为germ x U s + germ x V t
,其中最后一个总和是germ x (U∩V) (restrictionsmap (U, (U∩V)) s + restrictionsmap (V, (U∩V)) t)
的总和。
答案 0 :(得分:1)
所提到的AFP条目中的乘法Group
是一个包含四个字段的记录:载波集合carrier
,二进制组操作top
,逆操作{{1} }和中性元素iop
。同样,one
是一个扩展添加剂组的记录(记录Ring
包含字段aGroup
,carrier
,pop
,mop
)二进制乘法运算zero
和乘法单位tp
。如果要定义组或记录的实例,则必须定义适当记录类型的某些内容。例如,
un
您必须根据戒指的类型和字词替换所有 definition my_ring :: "<el> Ring" where
"my_ring =
(|carrier = <c>,
pop = <plus>,
mop = <minus>,
zero = <0>,
tp = <times>,
un = <unit>|)"
。也就是说,<...>
是环元素的类型,<el>
是载体集等。请注意,您可以根据需要专门化环元素的类型。
为了证明<c>
确实是一个响铃,您必须证明它满足相应语言环境my_ring
的假设:
Ring
如果您想使用已被抽象地证明任意环的定理,您可能希望使用lemma "Ring my_ring"
proof unfold_locales
...
qed
来解释语言环境。