伊莎贝尔的语言环境声明中的实例
Instances in locale declaration for Isabelle
我已经声明了一个修复多个问题的特定语言环境,并且正在尝试为第一个态射声明一个新的语言环境。这是第一个语言环境:
locale presheaf = topology + Ring +
fixes
opcatopensets ::" ('a) PosetalCategory" and
objectsmap :: "'a set ⇒ ('a, 'm) Ring_scheme" and
restrictionsmap:: "('a set ×'a set) ⇒ ('a ⇒ 'a)"
assumes
"opcatopensets ≡ ⦇ Obj = {x. x ∈ T} , Mor = {(x,y)| x y. (x,y) ∈ revpo} ,
Dom = psheafdom , Cod = psheafcod , Id = psheafid , Comp = psheafcomp ⦈" and
"∀y w. w ≠ y ⟶ (psheafcomp (x,y) (w,z) = undefined)" and
"∀x. x ∉ T ⟶ (objectsmap x = undefined)" and
"∀x y.(restrictionsmap (x,y)) ∈ rHom (objectsmap x) (objectsmap y)" and
"∀ x y . (restrictionsmap (x,x) y = y) " and
"∀ x y z . ( (restrictionsmap (y,z))∘(restrictionsmap (x,y)) = restrictionsmap(x,z) )"
在声明结束时,我得到以下输出:
locale presheaf =
fixes T :: "'a set set"
and R :: "('b, 'c) Ring_scheme"
and opcatopensets :: "'a PosetalCategory"
and objectsmap :: "'a set ⇒ ('a, 'm) Ring_scheme"
and restrictionsmap :: "'a set × 'a set ⇒ 'a ⇒ 'a"
assumes "presheaf T R opcatopensets objectsmap restrictionsmap"
所以我想我可以从最后一行中提取我需要的内容,以便定义一个涉及两个语言环境实例的新语言环境 "presheaf"。这是我试过的:
locale sheafmorphism =
F: presheaf T R opcatopensets F restrictionsmap + G: presheaf T R opcatopensets
G restrictionsmap
for F and G +
fixes morphism :: "'a set ⇒ ('a ⇒ 'a)"
assumes (things)
简而言之,我想固定两个预滑轮 F 和 G,然后固定这个参数 "morphism" 并假设涉及 "morphism" 和 "restrictionsmap" 和 "objectsmap" 的事情F 和 G。我的这次尝试导致:
Illegal free variables in expression: "T", "R", "opcatopensets",
"restrictionsmap"
我想当您要实例化的语言环境修复不止一件事时,我不明白该怎么做。是什么导致了这个错误,我该如何做我想做的事?
您可以轻松地将一个语言环境的多个实例组合成一个新的实例,但您通常必须重命名语言环境的参数并使用 for
相应地声明它们。在您的代码中,您只是将参数 objectsmap
分别重命名为 F
和 G
,并添加了前缀 F
和 G
来引用这两个实例。但是,其他参数 T
、R
、opcatopensets
和 restrictionsmap
尚未重命名,并且在语言环境声明的 for
子句中缺失。这就是错误消息的原因。所以你应该将它们添加到 for
子句中,它应该可以工作。但是,两个语言环境实例将使用相同的 T
、R
、opcatopensets
和 restrictionsmap
。如果这不是您想要的,那么您也应该重命名它们。
例如下面的声明
locale sheafmorphism =
F: presheaf T1 R1 opcatopensets1 F restrictionsmap1 +
G: presheaf T2 R2 opcatopensets2 G restrictionsmap2
for T1 R1 opcatopensets1 F restrictionsmap1
T2 R2 opcatopensets2 G restrictionsmap2 +
fixes morphism :: "'a set ⇒ ('a ⇒ 'a)"
assumes ...
重命名两个实例的所有参数。相比之下,下面只是将态射重命名为 F
和 G
.
locale sheafmorphism =
F: presheaf T R opcatopensets F restrictionsmap +
G: presheaf T R opcatopensets G restrictionsmap
for T R opcatopensets F G restrictionsmap +
fixes morphism :: "'a set ⇒ ('a ⇒ 'a)"
assumes ...
我已经声明了一个修复多个问题的特定语言环境,并且正在尝试为第一个态射声明一个新的语言环境。这是第一个语言环境:
locale presheaf = topology + Ring +
fixes
opcatopensets ::" ('a) PosetalCategory" and
objectsmap :: "'a set ⇒ ('a, 'm) Ring_scheme" and
restrictionsmap:: "('a set ×'a set) ⇒ ('a ⇒ 'a)"
assumes
"opcatopensets ≡ ⦇ Obj = {x. x ∈ T} , Mor = {(x,y)| x y. (x,y) ∈ revpo} ,
Dom = psheafdom , Cod = psheafcod , Id = psheafid , Comp = psheafcomp ⦈" and
"∀y w. w ≠ y ⟶ (psheafcomp (x,y) (w,z) = undefined)" and
"∀x. x ∉ T ⟶ (objectsmap x = undefined)" and
"∀x y.(restrictionsmap (x,y)) ∈ rHom (objectsmap x) (objectsmap y)" and
"∀ x y . (restrictionsmap (x,x) y = y) " and
"∀ x y z . ( (restrictionsmap (y,z))∘(restrictionsmap (x,y)) = restrictionsmap(x,z) )"
在声明结束时,我得到以下输出:
locale presheaf =
fixes T :: "'a set set"
and R :: "('b, 'c) Ring_scheme"
and opcatopensets :: "'a PosetalCategory"
and objectsmap :: "'a set ⇒ ('a, 'm) Ring_scheme"
and restrictionsmap :: "'a set × 'a set ⇒ 'a ⇒ 'a"
assumes "presheaf T R opcatopensets objectsmap restrictionsmap"
所以我想我可以从最后一行中提取我需要的内容,以便定义一个涉及两个语言环境实例的新语言环境 "presheaf"。这是我试过的:
locale sheafmorphism =
F: presheaf T R opcatopensets F restrictionsmap + G: presheaf T R opcatopensets
G restrictionsmap
for F and G +
fixes morphism :: "'a set ⇒ ('a ⇒ 'a)"
assumes (things)
简而言之,我想固定两个预滑轮 F 和 G,然后固定这个参数 "morphism" 并假设涉及 "morphism" 和 "restrictionsmap" 和 "objectsmap" 的事情F 和 G。我的这次尝试导致:
Illegal free variables in expression: "T", "R", "opcatopensets", "restrictionsmap"
我想当您要实例化的语言环境修复不止一件事时,我不明白该怎么做。是什么导致了这个错误,我该如何做我想做的事?
您可以轻松地将一个语言环境的多个实例组合成一个新的实例,但您通常必须重命名语言环境的参数并使用 for
相应地声明它们。在您的代码中,您只是将参数 objectsmap
分别重命名为 F
和 G
,并添加了前缀 F
和 G
来引用这两个实例。但是,其他参数 T
、R
、opcatopensets
和 restrictionsmap
尚未重命名,并且在语言环境声明的 for
子句中缺失。这就是错误消息的原因。所以你应该将它们添加到 for
子句中,它应该可以工作。但是,两个语言环境实例将使用相同的 T
、R
、opcatopensets
和 restrictionsmap
。如果这不是您想要的,那么您也应该重命名它们。
例如下面的声明
locale sheafmorphism =
F: presheaf T1 R1 opcatopensets1 F restrictionsmap1 +
G: presheaf T2 R2 opcatopensets2 G restrictionsmap2
for T1 R1 opcatopensets1 F restrictionsmap1
T2 R2 opcatopensets2 G restrictionsmap2 +
fixes morphism :: "'a set ⇒ ('a ⇒ 'a)"
assumes ...
重命名两个实例的所有参数。相比之下,下面只是将态射重命名为 F
和 G
.
locale sheafmorphism =
F: presheaf T R opcatopensets F restrictionsmap +
G: presheaf T R opcatopensets G restrictionsmap
for T R opcatopensets F G restrictionsmap +
fixes morphism :: "'a set ⇒ ('a ⇒ 'a)"
assumes ...