簡體   English   中英

Coq數據類型沖突

[英]Coq data type clashes

在Coq中重新定義自然數類型並嘗試使用它時,如下所示:

Inductive Nat: Type :=
| O: Nat
| S: Nat -> Nat.

Fixpoint plus (n: Nat) (m: Nat): Nat :=
match n with
    | O => m
    | S n' => S (plus n' m)
end.

Fixpoint mult (n: Nat) (m: Nat): Nat :=
match n with
    | O => O
    | S n' => plus m (mult n' m)
end.

Fixpoint factorial (n: Nat) : Nat :=
match n with
    | O => 1
    | (S n') => mult n (factorial n')
end.

Coq發出錯誤

術語“ 1”的類型為“ nat”,而預期類型為“ Nat”。

我了解這種現象的原因(實際數字'1'仍映射到Coq的內置自然數類型),但是有沒有解決的方法? TIA。

好吧,最簡單的解決方案當然是

Definition one := S O.

但是,由於您的類型與nat完全相同,因此可以聲明強制。 這看起來像

Inductive Nat : Type :=
| O: Nat
| S: Nat -> Nat.
Fixpoint to_nat (n : nat) : Nat :=
  match n with
    | S n' => 1 + (to_nat n')
    | O => 0
  end.
Coercion to_nat : nat >-> Nat.

這告訴coq每當獲得nat並期望獲得Nat時就使用to_nat 它使您可以執行諸如use +以及特殊數字文字之類的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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