agda相关内容
在Haskell中寻找一个可以展平任意深度嵌套列表的函数,即递归地应用concat并在最后一次迭代时停止(使用非嵌套列表)的函数时,我注意到这需要有一个更灵活的类型系统,因为随着列表深度的变化,输入类型也会有所不同。事实上,有几个堆栈溢出问题--例如this一个--其中响应指出,不存在将在不同深度‘查看’不同嵌套列表的函数。 编辑:有些答案在Haskell中提供了解决办法,用于自定义数据类型,或
..
我使用的是大小类型,并且有一个类型化术语的替换函数,该函数用于终止检查我是否直接给出定义,但如果我通过(一元)联接和FMAP将其分解,则不会。 {-# OPTIONS --sized-types #-} module Subst where open import Size 要显示问题,只需有单位和就足够了。我的数据类型为Trie和Term,并且我在Term内部使用Term同域
..
假设我们定义了一个函数 f : N \to N0 = 0f (s n) = f (n/2) -- 这个/操作符被实现为地板除法. Agda 会在鲑鱼上画 f,因为它无法判断 n/2 是否小于 n.我不知道如何告诉 Agda 的终止检查器任何事情.我在标准库中看到他们有一个除以 2 的除法和证明 n/2 解决方案 Agda 的终止检查器只检查结构递归(即发生在结构上较小的参数上的调用),而无
..
是否有一种类型化编程语言可以像下面两个示例那样约束类型? 概率是一个浮点数,最小值为 0.0,最大值为 1.0. type 浮点数的概率子类型在哪里最大值 = 0.0min_value = 1.0 离散概率分布是一个映射,其中:键应该都是相同的类型,值都是概率,值的总和 = 1.0. 类型 DPDmap的子类型在哪里总和(值)= 1.0 据我所知,Has
..
我正在尝试破译有关级别的错误消息.在 Haskell 中,我可以以一种简单的方式编写以下流函数,twist: 数据流 a = a :>流一个扭曲 :: (a -> (b , (a c))) ->(c -> (b , (a c))) ->(c) ->流b扭曲lt rt (左a) = b :>扭曲 lt rt ac在哪里(b, ac) = lt a扭曲lt rt(右c)= b:>扭曲 lt rt a
..
我不明白为什么我的路径归纳没有正确地进行类型检查.当提到 C (refl x) 时,它说“C x 应该是一个函数类型,但它不是".也许我对 refl 的定义是错误的,或者我的 {} 和 () 有什么问题? data _≡_ {A : Set}(a : A) : A → Set whererefl : a ≡ a中缀 4 _≡_pathInd : ∀ {u} → {A : 集合} →(C : {x
..
我想创建一个辅助函数,它将从索引或参数化类型中获取一个术语并返回该类型参数. showLen : {len : ℕ} {A : Set} ->Vec A len ->ℕ显示 ?= 伦showType : {len : ℕ} {A : Set} ->Vec A len ->放显示类型?= A 这可能吗?(我可以看到 showType [] 可能有什么问题,但是当 Type 被索引时呢?)
..
几天来我一直在努力解决一个问题,但我的 Agda 技能不是很强大. 我正在尝试针对仅在特定索引处定义的索引数据类型编写函数.这仅适用于数据构造器的某些专业化.我不知道如何定义这样的函数.我试图将我的问题减少到一个较小的例子. 设置涉及自然数列表,具有用于见证列表成员的类型和用于删除列表成员的函数. 打开导入Data.Nat打开导入 Relation.Binary.Core数据列表:设
..
这是获取路径归纳以在 Agda 中工作的后续问题 我想知道这个结构什么时候可能更具表现力.在我看来,我们总是可以这样表达: f : forall {A} ->{x y : A} ->x == y ->“某种类型"f refl = p == refl 的“某种类型"的实例 这里 Agda 将给出与 c 相同的例子进行路径归纳:(x : A) ->C refl 来自那个问题: pathIn
..
例如,Agda 允许我这样写: 打开导入Data.Vec打开导入 Data.NatmyVec : Vec ℕ _myVec = 0 ∷ 1 ∷ 2 ∷ 3 ∷ [] 和 myVec 将按预期具有 Vec ℕ 4 类型. 但如果我在 Idris 中尝试同样的方法: 导入Data.VectmyVec : Vect _ NatmyVec = [0, 1, 2, 3] 我从类型检查器收到一条
..
我们可以像这样枚举列表的元素: -- enumerate-ℕ = zip [0..]enumerate-ℕ : ∀ {α} {A : Set α} ->列表 A ->列表 (ℕ × A)enumerate-ℕ = go 0 wherego : ∀ {α} {A : 集合 α} ->ℕ ->列表 A ->列表 (ℕ × A)去 n [] = []go n (x ∷ xs) = (n , x) ∷
..
我仍在尝试围绕 agda 进行思考,所以我写了一个小井字游戏类型 data Game : Player ->维克广场 9 ->设置在哪里开始:游戏 x ( - ∷ - ∷ - ∷- ∷ - ∷ - ∷- ∷ - ∷ - ∷ [] )xturn : {gs : Vec Square 9} ->(n: ℕ) ->游戏 x gs ->≤(#ofMoves gs) ->游戏 o (makeMove gs
..
我注意到自 HoTT 以来,关于“Axiom K"的讨论越来越频繁.我相信这与模式匹配有关.我很惊讶在 TAPL、ATTAPL 或 PFPL 中找不到参考. 什么是 Axiom K? 它是否像 SML 一样用于 ML 样式的模式匹配(或仅用于依赖模式匹配)? Axiom K 的合适参考是什么? 解决方案 Axiom K 也称为身份证明唯一性原则,是关于性质的公理Martin-Lö
..
我有以下代码: 打开导入Data.Nat打开导入 Agda.Builtin.Char打开导入数据.也许数字' : ℕ → 也许 ℕ数字' n 与比较 n (primCharToNat '9')... |更大 _ _ = 没有... |_ = ?数字 : 字符 → 也许 ℕ数字 c = 数字' (primCharToNat c) 不幸的是,emacs 中的 Agda“加载文件"命令失败并显示以下
..
我试图证明关于整数的可整性.首先,我试图证明可分性是反射性的. ∣-refl : ∀{n} → n ∣ n 因为我定义了基于减法的可分性... data _∣_ : ℤ → ℤ → Set where0∣d : ∀{d} → 零 ∣ dn-d∣d : ∀{n d} → (n - d) ∣ d → n ∣ d ...如果我使用 n-n=0 的事实似乎很容易: ∣-refl {n} 与 n-
..
在定义数据类型时,我可以“通过"冒号前的一些参数. data Image_э_ { A B : Set} : (f : A → B) → B → Set whereim : {f : A → B} → (x : A) → 图像 f э f x 但由于未知原因,我似乎无法在函数声明中执行此操作. exIm {A B : Set} : {f : A → B}{y : B} → Image f э
..
我正在尝试弄清类型层次结构在Agda中的工作方式. 假设我定义了一个集合类型X: X : Set ,然后继续构建归纳类型 data Y : X -> Set where X -> Set的类型是什么?是设置还是类型? 谢谢! 解决方案 那么,为什么不问Agda本身呢?我将对Emacs使用出色的Agda模式.我们从以下内容开始: module Hier
..
除了可以在文件系统(带有EMACS,终端等)上使用Agda之外,还可以直接从Haskell作为库使用它吗?例如: -- UsingAgda.hs import Agda -- Prints the type of a term on some Agda code main :: IO () main = typeOf "true" agdaCode where agdaCode ::
..
如何在Agda中编写泛型函数?是否可以编写完全依赖的和Universe多态的Arity泛型函数? 解决方案 我将以n元合成函数为例. 最简单的版本 open import Data.Vec.N-ary comp : ∀ n {α β γ} {X : Set α} {Y : Set β} {Z : Set γ} -> (Y -> Z) -> N-ary n X Y -
..
我在弄清楚如何正确地在Agda中使用String键制作Map时遇到了一些麻烦.我有以下内容: import Data.AVL.IndexedMap Var = String data Type where -- ... alwaysType : Var -> Set alwaysType _ = Type open Data.AVL.IndexedMap alwaysType (St
..