簡體   English   中英

試圖證明一個類型是 `euclidean_semiring` 的一個實例(在 Isabelle 中)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM