是否可以聲明記錄中的字段不相關,但仍然在某處使用它們? 假設我有 postulate f : ℕ → ℕ
record Silly x : Set where
field
n : ℕ
s : f n ≡ x
open Silly
然後,我可以 same-silly : ∀{x} {p q : Silly x} → f (n p) ≡ f(n q)
same
我想了解Agda標準庫的某些部分,我似乎無法弄清REL的定義。這裏 FWIW是的REL定義: -- Binary relations
-- Heterogeneous binary relations
REL : ∀ {a b} → Set a → Set b → (ℓ : Level) → Set (a ⊔ b ⊔ suc ℓ)
REL A B ℓ = A → B → Set ℓ
看來,要證明記錄類型的兩個項目是等價的,我需要編寫一個幫助程序,它需要組件明智的證明並應用它們。 一個例子: postulate P : ℕ → Set
record Silly : Set (ℓsuc ℓ₀) where
constructor _#_#_
field
n : ℕ
pn : P n
f : Set → ℕ
open Silly
Sil
> {-# LANGUAGE RankNTypes #-}
我想知道是否有方法來表示haskell和/或其他函數式編程語言中的選擇公理。 正如我們所知,false由沒有值的類型表示(haskell中的Void)。 > import Data.Void
我們可以代表像這樣 > type Not a = a -> Void
我們可以表達排中律的類型a就像否定因此 > type LEM a
我剛剛學習Agda,但我不明白,當我試圖證明身份超過Addition時,我發現左身份是微不足道的證據。 left+identity : ∀ n -> (zero + n) ≡ n
left+identity n = refl
但它對於正確的身份不是這樣。 right+identity : ∀ n -> (n + zero) ≡ n
right+identity zero = refl
r
我在閱讀Brutal Meta-introduction to Agda。 在一節的「使用with和統一重寫」他們提了一個情況下的一種類型的目標從雲: (filter p (a ∷ as) | p a) ≡ (filterN p (a ∷ as) | p a)
到 (filter p (a ∷ rs) | r) ≡ (filterN p (a ∷ rs) | r)
添加with子句之後。
我目前正在有序矢量數據類型,我試圖創建從數據類型的操作,但我得到一個錯誤: (Set (.Agda.Primitive.lsuc ℓ)) != Set
when checking that the expression A has type Set ℓ
這是數據類型 module ordered-vector (A : Set) (_<A_ : A → A →) where
data o
爲什麼我不能確定異質平等這樣一個更爲明確的版本: data Eq : (A : Set) -> A -> A -> Set where
Refl : (T : Set) -> (x : T) -> Eq T x x
當我這樣做,我得到以下錯誤: The type of the constructor does not fit in the sort of the
datatype,