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