簡體   English   中英

我如何在AGDA中實現正數

[英]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是一個約束條件,當n0時是不滿足的,而當n為正數時是微不足道的。 因此, fail約束fail則計算得出 ,您將得到這種類型的未解決元,這是無法解決的(假設類型系統是一致的),因為這種類型是無人居住的。

暫無
暫無

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

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