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 ..
发布时间:2020-05-10 21:46:38 其他开发

合并大小类型的排序列表

假设我们有一个排序列表的数据类型,其中包含与证明无关的排序见证.我们将使用Agda的实验性大小类型功能,以便希望可以在数据类型上获得一些递归函数,以通过Agda的终止检查器. {-# OPTIONS --sized-types #-} open import Relation.Binary open import Relation.Binary.PropositionalEquality ..
发布时间:2020-05-09 00:43:00 其他开发

AVL树的成员资格证明

我很努力地想出Data.AVL树的成员资格证明的概念.我希望能够传递n ∈ m类型的值,以表示n在AVL树中显示为键,因此,给出这样的证明,get n m总是可以成功产生与n相关的值.您可以假设我的AVL树始终包含从集合半格(A,≈)上的连接半格(A,∨,⊥)绘制的值,尽管下面的幂等性是隐式的. module Temp where open import Algebra.FunctionP ..
发布时间:2020-05-08 01:55:12 其他开发

Agda:将一行标准输入读取为String而不是Costring

我正在尝试编写一个简单的程序,从标准输入读取一行,将其反转,然后打印反转的字符串。 不幸的是本机 getLine 函数读取 Costring ;我只能反转 String s;并且没有函数将 Costring 带到 String 。 如何修改此程序进行编译? 模块EchoInputReverse其中 - Agda标准库0.7 打开导入Data.List使用(反向) 打开导 ..
发布时间:2018-08-24 17:39:59 其他开发

在Agda中访问Stream中的元素

我做了一个(N×N)类型的流。我怎样才能访问这对单个元素? genL:ℕ→流(ℕ×ℕ)→流(ℕ (x,y):: xs)= if((y * k)lt x)then(x,y)::(♯genL k(♭xs)) else genL k(♭xs) 它表示没有构造函数,在流中。我有一个解决方案,我会创建一对记录,然后它会起作用。除此之外,还有其他方法可以访问元素。 解决方案 ..
发布时间:2018-06-05 11:26:28 其他开发

Agda的Haskell派生机制

我想知道Agda中是否有类似于Haskell的派生Eq 子句的东西---那么我也有下面的相关问题。 b $ b 例如,假设我有一个玩具语言的类型, 数据类型:设置其中 Nat:Type Prp:Type 然后我可以实现可确定通过模式匹配和 Cc Ca , ___:Decicable {A = Type}_≡_ Nat≟ₜNat = yes refl ..
发布时间:2018-06-04 17:36:53 其他开发

Agda的递归方案

不用说,Haskell的标准构造 newtype修复f =修复{getFix :: f(修复f) } cata ::(Functor f)=> (f a - > a) - >修复f - > cata f = f。 fmap(cata f)。 getFix 非常棒,非常有用。 试图在Agda中定义一个类似的东西(我只是为了完整起见) da ..
发布时间:2018-06-04 17:02:01 其他开发

观察型理论中的模式匹配

在走向观察型理论的“5. Full OTT”部分的最后,作者展示了如何定义强制 - OTT中的构造器下索引数据类型。这个想法基本上是将索引数据类型转换为像这样的参数化数据: data IFin:ℕ - >设置 zero:∀{n} - > IFin(suc n) suc:∀{n} - > IFin n - > IFin(suc n) data PFin(m:ℕ):设置 ze ..
发布时间:2018-06-04 17:00:46 其他开发

在Agda中对ST monad建模

这最近 SO问题促使我在Haskell中编写了一个不安全和纯粹的ST monad仿真,稍微修改后的版本可以在下面看到: { - #LANGUAGE DeriveFunctor,GeneralizedNewtypeDiving,RankNTypes# - } import Control.Monad.Trans.State import GHC.Prim(Any) import ..
发布时间:2018-06-04 16:05:54 其他开发

“严格肯定”在Agda

data数值= FunVal(价值 - >价值) | PriVal Int | ConVal Id [Value] |错误字符串 在Agda中,直接翻译将是; data数值:设置其中 FunVal:(值 - >值) - >价值 PriVal:ℕ - >价值 ConVal:字符串 - >列表值 - >价值 错误:字符串 - >价值 但我得 ..
发布时间:2018-06-04 15:56:58 其他开发

为什么我们需要容器?

(作为借口:标题模仿了为什么我们需要monads? a>) 有容器(和索引)(和 hasochistic ones)和说明。但容器存在问题,对于我非常小的体验,很难想象在容器方面而不是在描述方面。非索引容器的类型同构于Σ - 这是非常不确定的。形状和位置描述有帮助,但是在 ⟦_⟧ᶜ:∀{αβγ} - >容器αβ->设置γ - > Set(α⊔β⊔γ) ⟦Sh◃Pos⟧ᶜA =∃λsh ..

依赖类型可以证明您的代码在规格上是正确的。但你如何证明规范是正确的?

依赖类型通常被宣传为一种方式,使您能够断言程序在规范中是正确的。因此,例如,要求您编写对列表进行分类的代码 - 您可以通过将“sort”的概念编码为类型来编写代码,并编写一个函数作为列表a - > SortedList a 。但是,您如何证明规范 SortedList 是正确的?难道不是这种情况:您的规格越复杂,您将该规格的编码作为类型编码的可能性就越不正确? 解决方案 这是静态的类型系统 ..
发布时间:2018-06-04 15:52:32 其他开发

依赖类型:依赖对类型如何与不相交联合类似?

我一直在研究依赖类型,并理解以下内容: 为什么 universal quantification 被表示为一个依赖函数类型。 ∀(x:A).B(x)表示所有 x 类型 A 有一个 B(x) 类型的值。因此,它被表示为一个函数,当给定任何值 x 类型 A 返回一个类型的值 B(x)。 为什么存在量化表示为从属对类型。 ∃(x:A).B(x)表示“存在一个 x 类型 A ,其中存在类型 B(x ..
发布时间:2018-06-04 15:48:42 其他开发

从哪里开始依赖类型编程?

有一个Idris教程,一个Agda教程和许多其他教程风格的论文和介绍性材料,永无止境地提及尚未学习的东西。我在所有这些中间爬行,大部分时间我都被数学符号和新术语突然出现而没有解释。也许我的数学很糟糕: - ) 是否有任何有纪律的方法来处理依赖类型编程?就像你想要学习Haskell一样,你从“教你自己一个Haskell”开始,当你想学习Scala时,你从Odersky的书开始,对于Ruby,你 ..
发布时间:2018-06-04 15:46:15 其他开发

你可以创建函数来以依赖类型语言返回一个依赖项的函数吗?

从我所了解的依赖类型中,我认为它应该是可能的,但我从来没有在依赖类型语言中看到过这样的例子,所以我不确定从哪里开始。 我想要的是一个形式的函数: pre $ f $ f [Int] - > (Int→> Bool) f:[Int] - > (Int→> Int→> Bool) f:[Int] - > (Int→> Int→> Int→> Bool) p> 该函数获 ..
发布时间:2018-06-04 15:14:40 其他开发

有限制类型的语言吗?

有没有一种类型化的编程语言,我可以像下面两个例子那样限制类型? 概率是一个浮动 type float的概率子类型 其中 最大值= 0.0 min_value = 1.0 离散概率分布是一张图, :键应该都是相同的类型,值都是概率,值的总和= 1.0。 type DPD< K>地图的子类型 其中 sum(values)= 1 ..
发布时间:2018-06-04 14:43:31 其他开发

直觉型理论的组合逻辑等价物是什么?

最近我完成了一门以Haskell和Agda(一种依赖类型的函数式编程语言)为特色的大学课程,并想知道是否可以用组合逻辑来替代这些中的lambda演算。对于Haskell来说,使用S和K组合器似乎是可能的,从而使它没有任何问题。我想知道Agda的等价物是什么。也就是说,我们可以制作一个与Agda等价的相关类型函数式编程语言而不使用任何变量吗? 另外,是否有可能用组合器代替量化?我不知道这是否是 ..
发布时间:2018-04-18 15:35:42 其他开发

Agda类型检查和+的交换性/关联性

由于 _ + _ Nat 的操作通常在第一个参数中递归定义, - 类型检查器知道 i + 0 == i 。但是,当我在固定大小的向量上编写函数时,我经常遇到这个问题。 一个例子:我如何定义一个Agda函数 swap:{A:Set} {mn:Nat} - > Vec A(n + m) - > Vec A(m + n) 将第一个 n 由于Haskell中的一个简 ..
发布时间:2018-04-18 15:26:00 其他开发

如何在Agda中定义除法运算符?

我想分两个自然数。我做了这样的功能 _ / _:N - > N - > frac m / one = m / one (suc m)/ n = ??我不知道该写什么。 Please help。 解决方案 这是@gallais说的,你可以明确地使用有根据的递归,但我不喜欢这种方法,因为它是完全不可读的。数据类型 record是{α} ..
发布时间:2018-04-18 15:20:56 其他开发