使用定义在Isabelle中生成区域设置的特定示例

时间:2016-07-20 10:18:34

标签: isabelle

我正在研究一种需要使用戒指的理论,因此我引入了以下理论: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)的总和。

1 个答案:

答案 0 :(得分:1)

所提到的AFP条目中的乘法Group是一个包含四个字段的记录:载波集合carrier,二进制组操作top,逆操作{{1} }和中性元素iop。同样,one是一个扩展添加剂组的记录(记录Ring包含字段aGroupcarrierpopmop)二进制乘法运算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 来解释语言环境。