dependent-type相关内容
我有一个关于Coq中类型检查定义的问题。我遇到了一种情况,我有两个T1和T2类型的项,从定义上我知道T1和T2是相等的(T1=T2)。但是,我不能同时使用这两个术语,因为类型检查器认为这两个类型不相等。我试图分离出一个模拟情况的最小示例(是的,我知道这是一个愚蠢的属性,但我只想检查它的类型;): Require Import Coq.Lists.List. Lemma myLemma :
..
Okasaki 描述了可以在 Haskell 中使用类型实现的持久实时队列 数据队列 a = forall x .队列{前::[a], 后方 :: [a], 时间表 :: [x]} 增量旋转保持不变 长度表 = 前长 - 后长 更多详情 如果您熟悉所涉及的队列,则可以跳过此部分. 旋转函数的样子 旋转 :: [a] ->[一]->[一]->[一个]旋转 [] (y : _)
..
有人可以向我解释依赖打字吗?我对 Haskell、Cayenne、Epigram 或其他函数式语言的经验很少,因此您使用的术语越简单,我就越感激! 解决方案 考虑一下:在所有体面的编程语言中,您都可以编写函数,例如 def f(arg) = 结果 这里,f 接受一个值 arg 并计算一个值 result.它是一个从值到值的函数. 现在,某些语言允许您定义多态(又名泛型)值: d
..
propositional 和 促进平等? 假设我有 prf :: x :~: y 在一些Symbol的范围内;通过模式匹配是 Refl,我可以将其转换为 prf' :: (x :== y) :~: True 像这样: fromProp :: (KnownSymbol x,KnownSymbol y) =>x :~: y ->(x :== y) :~: 真fromProp Refl
..
关于KnownNats,我想知道我是否可以吃我的蛋糕.我可以编写使用 Nats 的代码,它们可能是 KnownNats 和 UnknownNats(SomeNats?). 例如,如果我有一个依赖类型的向量 Vec (n :: Nat) a,我可以编写在编译和运行时都知道大小的代码吗?问题是我不想为静态和动态大小的“事物"复制整个代码.而且我不想通过在数据结构中存储大小而失去静态保证.
..
是否有一种类型化编程语言可以像下面两个示例那样约束类型? 概率是一个浮点数,最小值为 0.0,最大值为 1.0. type 浮点数的概率子类型在哪里最大值 = 0.0min_value = 1.0 离散概率分布是一个映射,其中:键应该都是相同的类型,值都是概率,值的总和 = 1.0. 类型 DPDmap的子类型在哪里总和(值)= 1.0 据我所知,Has
..
将我的脚趾浸入依赖类型的水域中,我对规范的“具有静态类型长度的列表"示例有一个裂缝. {-# LANGUAGE DataKinds, GADTs, KindSignatures #-}——一份善意的声明数据 Nat = Z |纳特数据安全列表 :: (Nat -> * -> *) 其中无 :: 安全列表 Z a缺点 :: a ->安全列表 n a ->安全列表 (S n) a-- 类型签名确保输
..
我看到一些消息来源回应了“Haskell 正在逐渐成为一种依赖类型的语言"的观点.这意味着随着越来越多的语言扩展,Haskell 正在朝着那个大方向漂移,但还没有. 基本上有两件事我想知道.第一个很简单,“作为一种依赖类型的语言"实际上意味着是什么?(希望不要太技术化.) 第二个问题是……缺点是什么?我的意思是,人们知道我们正朝着那个方向前进,所以它肯定有一些优势.然而,我们还没有到那
..
Idris 中依赖类型的简单演示是 向量,其类型取决于其值. 我们可以在 Python 中使用类型提示: 来自输入导入列表def append(a: List[int], b: List[int]) ->列表[int]:返回 a + b打印(追加([1, 2], [1, 3, 4])) 那么,我们可以实现一个类型Vect,它可以在 中使用 def append(a: Vect[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) ∷
..
因为我没有从第 1 部分得到答案: shapeless Record 类型可以用作 Poly1 吗? 我认为无形中不存在此功能.所以我决定自己的命运,自己写一篇: import shapeless.record._case class GetV[H val w = 证人val _ev = ev.asInstanceOf[Selector[H, w.T]]val v = hh.app
..
为handwavey 标题道歉.我不完全确定如何简洁地表达这个问题,因为我以前从未遇到过这样的事情. 背景信息: 我有以下特征,其中 U 类型用于保存 无形可扩展记录 类型: trait Flattened[T] {类型 U 我正在使用黑盒宏(出于本问题范围之外的原因)来创建 trait 的新实例: object flatten {导入 scala.language.exper
..
假设我正在编写一个向量乘法程序.遵循本文中的要求: https://etrain.github.io/2015/05/28/type-safe-linear-algebra-in-scala 只有当两个向量的维数相等时,乘法才能成功编译.为此,我定义了一个通用类型 Axis,它使用一个无形的文字类型(维数)作为类型参数: import shapeless.Witnesstrait A
..
trait JsonOps[J] {类型对象字段def partitionObjectFields(fields: ObjectFields, fieldNames: List[String]): (ObjectFields, ObjectFields)}def compilerNoLikey[J](stuff: ops.ObjectFields)(implicit ops:JsonOps[J])
..
据我所知,依赖类型允许您不指定输出类型: 例如,如果您有一个类型类: trait Last[In] {输入} 然后你可以在不指定输出类型的情况下召唤一个实例: implicitly(Last[String :: Int :: HNil])//输出类型计算为 Int 并且 Aux 模式允许您再次指定输出类型: implicitly(Last.Aux[String :: Int ::
..
假设我打算在scala程序中使用singleton/literal类型特性,这个特性在scala 2.12的shapeless库中提供(scala 2.13支持原生文字类型,但我们以shapeless为例) 在 shapeless 中,文字类型表示为 Witness 对象的路径相关的内部类型,可以从 Scala 文字/常量隐式转换: 导入 com.tribbloids.spike.Base
..
有路径依赖类型,我认为可以在 Scala 中表达 Epigram 或 Agda 等语言的几乎所有功能,但我想知道为什么 Scala 不支持 this 更明确地说它在其他领域(比如 DSL)做得很好?我缺少什么,比如“没有必要"? 解决方案 除了语法上的便利之外,单例类型、路径依赖类型和隐式值的组合意味着 Scala 对依赖类型的支持出奇地好,正如我所尝试的在 shapeless 中演示.
..
我最近查看了维基百科页面,了解相关类型,我想知道;Perl 6 是否真的引入了依赖类型?我似乎找不到可靠的消息来源. 这对某些人来说可能很明显,但对我来说肯定不是很明显. 解决方案 反对 Ven,在 Perl 6 对 SO 问题“Is there a language with constrainable types?"的回答之后的评论中,写道 “perl6 没有依赖类型"后来在#p
..
我注意到自 HoTT 以来,关于“Axiom K"的讨论越来越频繁.我相信这与模式匹配有关.我很惊讶在 TAPL、ATTAPL 或 PFPL 中找不到参考. 什么是 Axiom K? 它是否像 SML 一样用于 ML 样式的模式匹配(或仅用于依赖模式匹配)? Axiom K 的合适参考是什么? 解决方案 Axiom K 也称为身份证明唯一性原则,是关于性质的公理Martin-Lö
..