[英]How do i implement positive numbers in agda
因此,我試圖定義一組正自然數{1,2,3,...。 。 。}在阿格達。
data Nat : Set where
one : Nat
succ : Nat -> Nat
{-#BUILTIN NATURAL Nat #-}
這是我的方法,但是仍然需要0。
您如何使它從1開始?
Agda允許通過內置的FROMNAT
重載數字文字:
open import Agda.Builtin.Nat
open import Data.Empty
open import Data.Unit.Base
Positive : Nat -> Set
Positive zero = ⊥
Positive _ = ⊤
data Nat₁ : Set where
one : Nat₁
succ : Nat₁ -> Nat₁
toNat₁ : ∀ n {_ : Positive n} -> Nat₁
toNat₁ 0 {()}
toNat₁ 1 = one
toNat₁ (suc (suc n)) = succ (toNat₁ (suc n))
{-# BUILTIN FROMNAT toNat₁ #-}
fail : Nat₁
fail = 0
ok : Nat₁
ok = 1
在這里, Positive n
是一個約束條件,當n
為0
時是不滿足的,而當n
為正數時是微不足道的。 因此, fail
約束fail
則計算得出⊥
,您將得到這種類型的未解決元,這是無法解決的(假設類型系統是一致的),因為這種類型是無人居住的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.