Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Types 试图证明一个类型是“欧几里德半环”的一个实例(在《伊莎贝尔》中)_Types_Isabelle - Fatal编程技术网

Types 试图证明一个类型是“欧几里德半环”的一个实例(在《伊莎贝尔》中)

Types 试图证明一个类型是“欧几里德半环”的一个实例(在《伊莎贝尔》中),types,isabelle,Types,Isabelle,我正在使用Isabelle/HOL中的非标准分析会话,我试图证明类型'a::欧几里德半环星是欧几里德半环的一个实例 我正在展示 instance star :: (euclidean_semiring) euclidean_semiring proof (intro_classes) show "euclidean_size (0::'a star) = (0::nat)" 但是得到以下错误 No type arity star :: euclidean_semi

我正在使用Isabelle/HOL中的非标准分析会话,我试图证明类型
'a::欧几里德半环星
欧几里德半环的一个实例

我正在展示

instance star ::  (euclidean_semiring) euclidean_semiring
proof (intro_classes)
  show "euclidean_size (0::'a star) = (0::nat)"
但是得到以下错误

  No type arity star :: euclidean_semiring
即使只是陈述所需的目标陈述。看起来有点像第二十二条军规
欧几里德半环
指定如下

  class euclidean_semiring = semidom_modulo + 
   fixes euclidean_size :: "'a ⇒ nat"
   assumes size_0 [simp]: "euclidean_size 0 = 0"
   assumes mod_size_less: 
     "b ≠ 0 ⟹ euclidean_size (a mod b) < euclidean_size b"
   assumes size_mult_mono:
     "b ≠ 0 ⟹ euclidean_size a ≤ euclidean_size (a * b)"
事实上,我想知道这个特定的例子给出错误的原因,即使我已经能够展示类似的东西,比如
实例星::(半环奇偶校验)半环奇偶校验
,是否是因为这个特定的类型类
欧几里得半环
有一个参数,即
欧几里得大小

当然,我更倾向于更好地解释错误消息和建议的解决方法(如果可能的话),但看到证明这种形式的例子也会有所帮助

  instance X :: (Y) Y

尤其是当
Y
是一个接受参数的类型类时,就像
欧几里德半环
那样。

是的,如果类型类有参数,则必须使用
实例化
并为其定义

    instantiation star :: (euclidean_semiring) euclidean_semiring
    begin

    definition euclidean_size_star where
      "euclidean_size_star x = …"
      
    instance proof (intro_classes)
      …
    qed

    end

您可以在库中使用
实例化
的任何地方找到这方面的示例,例如
欧几里德半环的实例化
对于
nat
是,如果类型类具有参数,则必须使用
实例化
并为其给出定义

    instantiation star :: (euclidean_semiring) euclidean_semiring
    begin

    definition euclidean_size_star where
      "euclidean_size_star x = …"
      
    instance proof (intro_classes)
      …
    qed

    end

您可以在库中使用
实例化的任何地方找到这方面的示例,例如
欧几里德半环的实例化
用于
nat

哦,我明白了!我没有真正理解两者之间的区别(实例和实例化),因为我发现关于类型类的教程令人困惑。你知道我在哪里可以找到nat的示例吗?我搜索了前几个依赖于欧氏除法的理论。也许nat并没有被明确证明是欧几里德半环的一个实例化,而是从其他类型类的一部分被证明继承了它?哦,我发现了实例化nat::唯一的欧几里德半环,所以我认为我认为nat并没有被明确证明为欧几里德半环的想法是正确的(我的问题得到了回答)。哦,我明白了!我没有真正理解两者之间的区别(实例和实例化),因为我发现关于类型类的教程令人困惑。你知道我在哪里可以找到nat的示例吗?我搜索了前几个依赖于欧氏除法的理论。也许nat并没有被明确证明是欧几里得半环的一个实例,而是从其他类型类的被证明部分继承了它?哦,我发现了实例化nat::unique_欧几里得半环,所以我认为我认为nat并没有被明确证明为欧几里得半环的想法是正确的(我的问题得到了回答)。