agda相关内容
在下面的Agda代码中,我有一个基于de Bruijn索引的术语语言.我可以使用通常的de Bruijn索引方式定义术语的替换,使用重命名以允许替换在活页夹下进行. module Temp where data Type : Set where unit : Type _⇾_ : Type → Type → Type -- A context is a snoc-list o
..
假设我们有一个排序列表的数据类型,其中包含与证明无关的排序见证.我们将使用Agda的实验性大小类型功能,以便希望可以在数据类型上获得一些递归函数,以通过Agda的终止检查器. {-# OPTIONS --sized-types #-} open import Relation.Binary open import Relation.Binary.PropositionalEquality
..
我很努力地想出Data.AVL树的成员资格证明的概念.我希望能够传递n ∈ m类型的值,以表示n在AVL树中显示为键,因此,给出这样的证明,get n m总是可以成功产生与n相关的值.您可以假设我的AVL树始终包含从集合半格(A,≈)上的连接半格(A,∨,⊥)绘制的值,尽管下面的幂等性是隐式的. module Temp where open import Algebra.FunctionP
..
我正在尝试编写一个简单的程序,从标准输入读取一行,将其反转,然后打印反转的字符串。 不幸的是本机 getLine 函数读取 Costring ;我只能反转 String s;并且没有函数将 Costring 带到 String 。 如何修改此程序进行编译? 模块EchoInputReverse其中 - Agda标准库0.7 打开导入Data.List使用(反向) 打开导
..
我做了一个(N×N)类型的流。我怎样才能访问这对单个元素? genL:ℕ→流(ℕ×ℕ)→流(ℕ (x,y):: xs)= if((y * k)lt x)then(x,y)::(♯genL k(♭xs)) else genL k(♭xs) 它表示没有构造函数,在流中。我有一个解决方案,我会创建一对记录,然后它会起作用。除此之外,还有其他方法可以访问元素。 解决方案
..
我想知道Agda中是否有类似于Haskell的派生Eq 子句的东西---那么我也有下面的相关问题。 b $ b 例如,假设我有一个玩具语言的类型, 数据类型:设置其中 Nat:Type Prp:Type 然后我可以实现可确定通过模式匹配和 Cc Ca , ___:Decicable {A = Type}_≡_ Nat≟ₜNat = yes refl
..
不用说,Haskell的标准构造 newtype修复f =修复{getFix :: f(修复f) } cata ::(Functor f)=> (f a - > a) - >修复f - > cata f = f。 fmap(cata f)。 getFix 非常棒,非常有用。 试图在Agda中定义一个类似的东西(我只是为了完整起见) da
..
在走向观察型理论的“5. Full OTT”部分的最后,作者展示了如何定义强制 - OTT中的构造器下索引数据类型。这个想法基本上是将索引数据类型转换为像这样的参数化数据: data IFin:ℕ - >设置 zero:∀{n} - > IFin(suc n) suc:∀{n} - > IFin n - > IFin(suc n) data PFin(m:ℕ):设置 ze
..
这最近 SO问题促使我在Haskell中编写了一个不安全和纯粹的ST monad仿真,稍微修改后的版本可以在下面看到: { - #LANGUAGE DeriveFunctor,GeneralizedNewtypeDiving,RankNTypes# - } import Control.Monad.Trans.State import GHC.Prim(Any) import
..
data数值= FunVal(价值 - >价值) | PriVal Int | ConVal Id [Value] |错误字符串 在Agda中,直接翻译将是; data数值:设置其中 FunVal:(值 - >值) - >价值 PriVal:ℕ - >价值 ConVal:字符串 - >列表值 - >价值 错误:字符串 - >价值 但我得
..
(作为借口:标题模仿了为什么我们需要monads? a>) 有容器(和索引)(和 hasochistic ones)和说明。但容器存在问题,对于我非常小的体验,很难想象在容器方面而不是在描述方面。非索引容器的类型同构于Σ - 这是非常不确定的。形状和位置描述有帮助,但是在 ⟦_⟧ᶜ:∀{αβγ} - >容器αβ->设置γ - > Set(α⊔β⊔γ) ⟦Sh◃Pos⟧ᶜA =∃λsh
..
依赖类型通常被宣传为一种方式,使您能够断言程序在规范中是正确的。因此,例如,要求您编写对列表进行分类的代码 - 您可以通过将“sort”的概念编码为类型来编写代码,并编写一个函数作为列表a - > SortedList a 。但是,您如何证明规范 SortedList 是正确的?难道不是这种情况:您的规格越复杂,您将该规格的编码作为类型编码的可能性就越不正确? 解决方案 这是静态的类型系统
..
我一直在研究依赖类型,并理解以下内容: 为什么 universal quantification 被表示为一个依赖函数类型。 ∀(x:A).B(x)表示所有 x 类型 A 有一个 B(x) 类型的值。因此,它被表示为一个函数,当给定任何值 x 类型 A 返回一个类型的值 B(x)。 为什么存在量化表示为从属对类型。 ∃(x:A).B(x)表示“存在一个 x 类型 A ,其中存在类型 B(x
..
有一个Idris教程,一个Agda教程和许多其他教程风格的论文和介绍性材料,永无止境地提及尚未学习的东西。我在所有这些中间爬行,大部分时间我都被数学符号和新术语突然出现而没有解释。也许我的数学很糟糕: - ) 是否有任何有纪律的方法来处理依赖类型编程?就像你想要学习Haskell一样,你从“教你自己一个Haskell”开始,当你想学习Scala时,你从Odersky的书开始,对于Ruby,你
..
从我所了解的依赖类型中,我认为它应该是可能的,但我从来没有在依赖类型语言中看到过这样的例子,所以我不确定从哪里开始。 我想要的是一个形式的函数: pre $ f $ f [Int] - > (Int→> Bool) f:[Int] - > (Int→> Int→> Bool) f:[Int] - > (Int→> Int→> Int→> Bool) p> 该函数获
..
有没有一种类型化的编程语言,我可以像下面两个例子那样限制类型? 概率是一个浮动 type float的概率子类型 其中 最大值= 0.0 min_value = 1.0 离散概率分布是一张图, :键应该都是相同的类型,值都是概率,值的总和= 1.0。 type DPD< K>地图的子类型 其中 sum(values)= 1
..
在Agda中,有 Set n 。据我所知, Set n 将Haskell风格的value-type-kind层次扩展为无限级别。也就是说, Set 0 是普通类型的宇宙, Set 1 是普通类型的宇宙, Set 2 是普通排序的等等。 相比之下,Idris具有所谓的“累积层次的宇宙” 。看来,对于 a
..
最近我完成了一门以Haskell和Agda(一种依赖类型的函数式编程语言)为特色的大学课程,并想知道是否可以用组合逻辑来替代这些中的lambda演算。对于Haskell来说,使用S和K组合器似乎是可能的,从而使它没有任何问题。我想知道Agda的等价物是什么。也就是说,我们可以制作一个与Agda等价的相关类型函数式编程语言而不使用任何变量吗? 另外,是否有可能用组合器代替量化?我不知道这是否是
..
由于 _ + _ Nat 的操作通常在第一个参数中递归定义, - 类型检查器知道 i + 0 == i 。但是,当我在固定大小的向量上编写函数时,我经常遇到这个问题。 一个例子:我如何定义一个Agda函数 swap:{A:Set} {mn:Nat} - > Vec A(n + m) - > Vec A(m + n) 将第一个 n 由于Haskell中的一个简
..
我想分两个自然数。我做了这样的功能 _ / _:N - > N - > frac m / one = m / one (suc m)/ n = ??我不知道该写什么。 Please help。 解决方案 这是@gallais说的,你可以明确地使用有根据的递归,但我不喜欢这种方法,因为它是完全不可读的。数据类型 record是{α}
..