idris相关内容
在Haskell中寻找一个可以展平任意深度嵌套列表的函数,即递归地应用concat并在最后一次迭代时停止(使用非嵌套列表)的函数时,我注意到这需要有一个更灵活的类型系统,因为随着列表深度的变化,输入类型也会有所不同。事实上,有几个堆栈溢出问题--例如this一个--其中响应指出,不存在将在不同深度‘查看’不同嵌套列表的函数。 编辑:有些答案在Haskell中提供了解决办法,用于自定义数据类型,或
..
例如,Agda 允许我这样写: 打开导入Data.Vec打开导入 Data.NatmyVec : Vec ℕ _myVec = 0 ∷ 1 ∷ 2 ∷ 3 ∷ [] 和 myVec 将按预期具有 Vec ℕ 4 类型. 但如果我在 Idris 中尝试同样的方法: 导入Data.VectmyVec : Vect _ NatmyVec = [0, 1, 2, 3] 我从类型检查器收到一条
..
在下面,example1 是标准语法(如文档所示),Eq a 作为约束.在example2中,我直接指定Eq a作为参数的类型,编译器接受.但是,尚不清楚我可以指定什么作为该类型的值.对于特定类型 a,例如 Nat,我认为以某种方式指定 Eq Nat 的实现是有意义的,要么是默认实现,或其他一些命名实现. %default 总数示例1:等式a =>(x: a) ->(y:a) ->类型示例 1
..
在 Haskell 中,我会做 join (***).在 Idris 中,flatten (***) 不起作用((***) 很复杂). 解决方案 在 Idris 中,没有 Functor/Applicative/Monad 实例用于r ->_ 和 -> 没有 Arrow 实例,只能通过 Morphism,所以使用flatten来做\外汇 ->f x x 导致非常冗长的代码,充满了从/到 M
..
我对 idris 和依赖类型比较陌生,遇到了以下问题 - 我创建了一个类似于向量的自定义数据类型: 中缀 1 :::数据元组向量:Nat ->纳特->类型 ->输入哪里空:TupleVect Z Z a(:::) : (Vect o a, Vect p a) ->TupleVect n m a ->TupleVect (n+o) (m+p) a示例TupleVect : TupleVect 5
..
我们可以像这样枚举列表的元素: -- enumerate-ℕ = zip [0..]enumerate-ℕ : ∀ {α} {A : Set α} ->列表 A ->列表 (ℕ × A)enumerate-ℕ = go 0 wherego : ∀ {α} {A : 集合 α} ->ℕ ->列表 A ->列表 (ℕ × A)去 n [] = []go n (x ∷ xs) = (n , x) ∷
..
我正在学习 Idris,我想我会尝试为 Vect 类型实现快速排序. 但是我在使用实用方法时遇到了困难,该方法应该给定一个主元元素和一个向量,将向量一分为二,一个元素 ≤ 枢轴,另一个元素 > 枢轴. 这对于列表来说是微不足道的: splitListOn : Ord e =>(枢轴:e)->列表 e ->(清单e,清单e)splitListOn pivot [] = ([], [])
..
以下代码段来自 (https://stackoverflow.com/a/37461290/2129302):> 张量:Vect n Nat ->类型 ->类型张量 [] a = a张量 (m :: ms) a = Vect m (张量 ms a) 我想定义以下内容: mkStr : (Show a) =>张量形状 a ->细绳mkStr x = 显示 x 但是这会产生以下错误: 找不到
..
我正在尝试像这样声明 MonadPlus 接口: 模块 NanoParsec.Plus%access 公共出口接口 Monad m =>MonadPlus 在哪里零 : m a加:m a ->m a ->嘛 但是有一个错误: |5 |接口 Monad m =>MonadPlus 在哪里|~~~~~~~检查 NanoParsec.Plus.MonadPlus#Monad m 的构造函数类型时
..
我找不到如何将此 typedef struct TF_Status TF_Status; 视为抽象类型并绑定到该 c函数是 TF_Status * TF_NewStatus(); 数据TF_StatustfNewStatus:IO TF_StatustfNewStatus =外部FFI_C"TF_NewStatus"(IO TF_Status) http://docs.idris-la
..
将Coq来源转换为Idris的有用指南是什么(例如,它们的类型系统有多相似,如何翻译证明?)?据我所知,Idris的内置战术库极少但可扩展,因此我认为应该可以做一些额外的工作。 解决方案 我最近翻译了一大堆软件基础,并做了部分翻译 {P | N | Z} Arith 的端口,我在此过程中做了一些观察: 通常使用Idris战术(在他们的 Pruvloj / Elab.Reflectio
..
在某些依赖类型的语言(例如Idris)中实现向量加法非常简单。按照 Wikipedia上的示例: 导入Data.Vect %默认总计 对=> Vect n a-> Vect n a-> Vect na pairAdd Nil Nil = Nil pairAdd(x :: xs)(y :: ys)= x + y :: pairAdd xs ys (请注意,I
..
我只是想知道是否有可能对Idris,Agda,Coq等类似物的教堂编码Nat类型进行归纳。请注意,这与在CoC上进行处理(这是不可能的)不同,因为我们在CoC上具有更高的表达能力(例如,我们可以提取Sigma的第二个元素)。 以下是有关Idris的一个不可靠的草图(有很多语法问题): CN:类型 CN =(t:类型)-> t-> (t-> t)-> t CS:CN-> CN
..
我正在尝试在Idris中实现一个十进制.到目前为止,我已经知道了: -- a big decimal has a numerator and a 10^x value -- it has one type for zero, --TODO the numerator can't be zero for any other case --TODO and it can't be divisi
..
我目前正在尝试下载Idris并将其用于Atom,并使用其编辑器.我下载了Hackage,然后从那里在计算机上安装了idris,然后将idris软件包安装在了atom上,每当我键入该程序时,它就会像Idris应该的那样突出显示,但是当我键入check时,出现两个错误,“可能t查找idris可执行文件:在"Idris"处找不到idris可执行文件"和"idris编译器已关闭或崩溃:(可能)崩溃,错误代
..
可能是基本的,但我不明白为什么以下功能为 fnc Nat 和 fnc Integer 回答1,甚至没有包含在模式中 fnc : Type -> Integer fnc Bool = 1 fnc Nat = 2 解决方案 您不能对类型进行模式匹配,也不应.当我编译您的代码时,我会收到下一个错误: warning - Unreachable case: fnc Nat 这已经在前
..
大多数证明助手是具有依赖类型的功能编程语言.他们可以证明程序/算法.相反,我对最适合数学且仅适用于数学的证明助手感兴趣(例如微积分).你能推荐一个吗?我听说过Mizar,但我不喜欢关闭源代码,但是如果最适合数学,我会使用它.像Agda和Idris这样的新语言适合数学证明的程度如何? 解决方案 Coq 具有涵盖实际分析的广泛库.各种发展浮现在脑海: 标准库以及在其上构建的项目,例如现已
..
在有关总体检查器的问题中的答案,此变通办法涉及使用case而不是with被推荐. 但是,在匹配结果细化其他参数类型的情况下,这种转换并不容易进行. 例如,给定以下定义: data IsEven : Nat -> Nat -> Type where Times2 : (n : Nat) -> IsEven (n + n) n data IsOdd : Nat -> Nat
..
我开始研究依赖类型的编程,并且发现Agda和Idris语言是最接近Haskell的语言,所以我从这里开始. 我的问题是:它们之间的主要区别是什么?两种类型的系统都同样富有表现力吗?进行全面的比较并讨论收益将是很棒的. 我已经发现了一些东西: Idris具有类型类àla Haskell,而Agda带有实例参数 Idris包含一元和适用的符号 它们两者似乎都具有某种可重新绑定的语
..
我对依赖类型是陌生的,并且对两者之间的区别感到困惑.似乎人们通常会说一种类型是由另一种类型参数化,而由某些值索引.但是,在依赖类型的语言中,类型和术语之间是否没有区别?参数和索引之间的区别是根本的吗?能否给我展示一些示例,这些示例在编程和定理证明中都表现出不同的含义? 解决方案 当您看到一系列类型时,您可能会想知道它具有的每个参数是 parameters 还是 indices . 参
..