types - 试图证明一个类型是 `euclidean_semiring` 的一个实例(在 Isabelle 中)
问题描述
我在 Isabelle/HOL 中使用 Nonstandard_Analysis 会话,我试图证明该类型'a::euclidean_semiring star
是euclidean_semiring
.
我正在展示
instance star :: (euclidean_semiring) euclidean_semiring
proof (intro_classes)
show "euclidean_size (0::'a star) = (0::nat)"
但得到以下错误
No type arity star :: euclidean_semiring
即使只是陈述所需的目标陈述。似乎有点像第 22 条规则。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 star :: (semidom_modulo) semidom_modulo
实际上我想知道这个特定示例是否给出错误的原因,即使我已经能够显示类似的东西,例如instance star :: (semiring_parity) semiring_parity
因为这个特定类型类euclidean_semiring
有一个参数,即euclidean_size
.
当然,我最希望对错误消息进行更好的解释和建议的解决方法(如果可能的话),但查看证明形式的示例也会有所帮助
instance X :: (Y) Y
尤其是当Y
是一个带参数的类型类时,就像euclidean_semiring
这样。
解决方案
是的,如果类型类具有必须使用的参数instantiation
并为它们提供定义。
instantiation star :: (euclidean_semiring) euclidean_semiring
begin
definition euclidean_size_star where
"euclidean_size_star x = …"
instance proof (intro_classes)
…
qed
end
您可以在使用库的任何地方找到此示例,例如forinstantiation
的实例化。euclidean_semiring
nat
推荐阅读
- ruby-on-rails - Chrome doesn't start in WSL (Ubuntu 18.04) with "DevToolsActivePort file doesn't exist" under Chromedriver
- php - Remote mail() function
- swiftui - 如何在 SwiftUI 中将字体粗细更改为中等?
- python - 无效的凭据引发身份验证突变异常
- vue.js - 类型错误:e 不是函数
- javascript - 将 javascript 中的 Protobuf 模式转换为单独的 proto 定义文件
- laravel - 更改值状态时的 ID 问题
- aws-glue - 从 Redshift 读取数据并将其写入分区中的 S3
- c++ - Spirit X3, Is this error handling approach useful?
- javascript - Why is it possible to access form values in the inline event handler?