簡體   English   中英

Agda:Stdlib中的矢量成員身份? (以及一般如何學習stdlib)

[英]Agda: Vector Membership in Stdlib? (And how to learn stdlib in general)

我正在用Agda處理字符串,並且有一個向量。 我需要檢查給定的字符串是否出現在向量中(作為檢查變量是否在表達式中自由或綁定的一部分,按照我正在做的PL理論)。

我仍在尋找標准庫的方法,並且發現我花了很多時間尋找其他語言(Haskell等)的標准庫中的基本函數。 有很多學習語言及其概念的資源,但是我在Agda,通用庫等中進行的應用程序編程方面卻見識不多。

  1. 標准庫中是否有Vectors的隸屬函數,或者是一種簡單的構造函數,還是我需要自己編寫該函數? (顯然,此類函數將通過元素類型的可確定相等性進行參數化)

  2. 您如何學習Agda中的標准庫? 是否有良好的指南/教程,或類似hoogle的工具?

標准庫中是否有Vectors的隸屬函數,或者是一種簡單的構造函數,還是我需要自己編寫該函數?

從來沒聽說過。 這里有正確的概念 ,但沒有搜索功能AFAICT。 使用我在其余答案中描述的命令不會產生任何結果。

您如何學習Agda中的標准庫? 是否有良好的指南/教程,或類似hoogle的工具?

在emacs內部,您可以使用Cc Cz搜索范圍內的定義。 您可以同時使用標識符(它將選擇類型提及它們的定義)和字符串文字(它將選擇其標識符包含該字符串的定義)。

因此,瀏覽庫的一種方法是open import很多模塊,並對精心選擇的關鍵字使用Cc Cz 例如在以下模塊中

module Explore where

open import Data.Nat
open import Data.Nat.Divisibility
open import Data.Nat.Properties
open import Data.Nat.Properties.Simple

擊鍵Cc Cz _*_ _+_ RET返回:

Definitions about _*_, _+_
  +-*-suc : (m n : ℕ) → m * suc n .Agda.Builtin.Equality.≡ m + m * n
  /-cong  : {i j : ℕ} (k : ℕ) → i + k * i ∣ j + k * j → i ∣ j
  distribʳ-*-+
          : (m n o : ℕ) → (n + o) * m .Agda.Builtin.Equality.≡ n * m + o * m
  im≡jm+n⇒[i∸j]m≡n
          : (i j m n : ℕ) →
            i * m .Agda.Builtin.Equality.≡ j * m + n →
            (i ∸ j) * m .Agda.Builtin.Equality.≡ n
  isCommutativeSemiring
          : .Algebra.Structures.IsCommutativeSemiring
            .Agda.Builtin.Equality._≡_ _+_ _*_ 0 1
  nonZeroDivisor-lemma
          : (m q : ℕ) (r : .Data.Fin.Fin (suc m)) →
            .Data.Fin.toℕ r .Relation.Binary.Core.≢ 0 →
            suc m ∣ .Data.Fin.toℕ r + q * suc m → .Data.Empty.⊥

暫無
暫無

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

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