伊莎贝尔的语言环境声明中的实例

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 分别重命名为 FG,并添加了前缀 FG 来引用这两个实例。但是,其他参数 TRopcatopensetsrestrictionsmap 尚未重命名,并且在语言环境声明的 for 子句中缺失。这就是错误消息的原因。所以你应该将它们添加到 for 子句中,它应该可以工作。但是,两个语言环境实例将使用相同的 TRopcatopensetsrestrictionsmap。如果这不是您想要的,那么您也应该重命名它们。

例如下面的声明

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 ...

重命名两个实例的所有参数。相比之下,下面只是将态射重命名为 FG.

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 ...