Vector Agda:Stdlib中的矢量成员资格?(以及一般如何学习stdlib)

Vector Agda:Stdlib中的矢量成员资格?(以及一般如何学习stdlib),vector,functional-programming,proof,agda,dependent-type,Vector,Functional Programming,Proof,Agda,Dependent Type,我在处理Agda中的字符串,我得到了它们的向量。我需要检查给定的字符串是否出现在向量中(作为检查变量在表达式中是自由的还是有界的一部分,在我正在做的PL理论wprk中) 我仍然在寻找标准库的方法,我发现我花了很多时间寻找其他语言(Haskell等)的标准库中的基本函数。有很多学习语言及其概念的资源,但我在Agda、公共库等应用编程方面看到的并不多 在标准库中是否有向量的隶属函数,或者是否有一个简单的一行程序来构造一个隶属函数,或者是否需要我自己编写该函数?(显然,对于元素类型,这样的函数将参数化

我在处理Agda中的字符串,我得到了它们的向量。我需要检查给定的字符串是否出现在向量中(作为检查变量在表达式中是自由的还是有界的一部分,在我正在做的PL理论wprk中)

我仍然在寻找标准库的方法,我发现我花了很多时间寻找其他语言(Haskell等)的标准库中的基本函数。有很多学习语言及其概念的资源,但我在Agda、公共库等应用编程方面看到的并不多

  • 在标准库中是否有向量的隶属函数,或者是否有一个简单的一行程序来构造一个隶属函数,或者是否需要我自己编写该函数?(显然,对于元素类型,这样的函数将参数化为可判定的等式)

  • 如何学习Agda中的标准库?是否有好的指南/教程或类似于胡说八道的工具

  • 在标准库中是否有向量的隶属函数,或者是否有一个简单的一行程序来构造一个隶属函数,或者是否需要我自己编写该函数

    据我所知没有。有但没有搜索功能AFAICT。使用我在答案的其余部分描述的命令不会产生任何结果

    如何学习Agda中的标准库?是否有好的指南/教程或类似于胡说八道的工具

    在emacs内部,您可以使用
    C-C-z
    搜索范围中的定义。您可以同时使用标识符(它将选择其类型提到它们的定义)和字符串文本(它将选择其标识符包含该字符串的定义)

    因此,探索该库的一种方法是
    打开import
    许多模块,并在仔细选择的关键字上使用
    C-C-z
    。例如,在以下模块中

    module Explore where
    
    open import Data.Nat
    open import Data.Nat.Divisibility
    open import Data.Nat.Properties
    open import Data.Nat.Properties.Simple
    
    击键
    C-C-z*\uu+\uret
    返回:

    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.⊥