[英]Trying to prove that a type is an instance of `euclidean_semiring` (in 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
即使只是陳述所需的目標陳述。 看起來有點像catch-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
您可以在使用instantiation
的庫中的任何地方找到此示例,例如euclidean_semiring
的實例化nat
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.