Agda 中实例参数的问题

2024-04-28

我正在尝试遵循 McBride's 的代码如何维持邻居秩序 https://personal.cis.strath.ac.uk/conor.mcbride/pub/Pivotal.pdf,并且无法理解为什么 Agda (我正在使用 Agda 2.4.2.2)给出以下错误消息:

实例搜索只能用于查找命名类型中的元素 当检查表达式时t有类型.T

为了功能_:-_。代码如下

data Zero : Set where

record One : Set where
  constructor <>

data Two : Set where tt ff : Two

So : Two -> Set
So tt = One
So ff = Zero

record <<_>> (P : Set) : Set where
  constructor !
  field
    {{ prf }} : P

_=>_ : Set -> Set -> Set
P => T = {{ p : P }} -> T

infixr 3 _=>_

-- problem HERE!

_:-_ : forall {P T} -> << P >> -> (P => T) -> T
! :- t = t

非常感谢任何帮助。


最近,agda-dev 邮件列表中尼尔斯·安德斯·丹尼尔森 (Nils Anders Danielsson) 发了一封关于此问题的电子邮件。网上找不到,所以引用一下:

康纳在“如何让你的邻居 in Order”。但是,他的代码是使用旧版本的 实例参数,现在无法检查。我设法编写了代码 使用一些小调整再次工作,并想知道我们是否可以摆脱困境 甚至更少:

我更换了

record One : Set where constructor it

with

record One : Set where
  instance
    constructor it.

这对我来说似乎很好。

我更换了

_:-_ : forall {P T} -> <P P P> -> (P => T) -> T
! :- t = t

with

_:-_ : forall {P T} -> <P P P> -> (P => T) -> T
! {{prf = p}} :- t = t {{p = p}},

因为“实例搜索只能用于查找 a 中的元素 命名类型”。类似地,在两种情况下我替换了模块参数

(L : REL P)

with

(L' : REL P) (let L = Named L'),

其中 Named 是命名类型系列:

data Named {P : Set} (A : REL P) : REL P where
  named : forall {x} -> A x -> Named A x
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Agda 中实例参数的问题 的相关文章

  • Agda 中的 Arity 通用编程

    如何在 Agda 中编写 arity generic 函数 是否可以编写完全依赖且全域多态的泛型函数 我将以 n 元复合函数为例 最简单的版本 open import Data Vec N ary comp n X Set Y Set Z
  • unionWith 的终止检查

    我在终止检查时遇到问题 与中描述的问题非常相似这个问题还有这个Agda 错误报告 功能请求 问题是让编译器相信以下内容unionWith终止 使用重复键的组合功能 unionWith合并表示为按键排序的 键 值 对列表的两个映射 有限映射的
  • agda 程序一定会终止吗?

    有几个地方指出所有 agda 程序都会终止 不过我可以构造一个这样的函数 stall n stall 0 0 stall x stall x 语法荧光笔似乎不喜欢它 但没有编译错误 计算范式stall 0结果是0 计算结果stall 1导致
  • 为什么我们需要容器?

    作为借口 标题模仿了标题为什么我们需要单子 https stackoverflow com questions 28139259 why do we need monads 有容器 http www sciencedirect com sc
  • 那么:有什么意义呢?

    其预期目的是什么So https github com idris lang Idris dev blob master libs base Data So idr L14类型 音译为阿格达 data So Bool Set where o
  • 如何使用 Agda 的分隔延续实现?

    我们可以很容易地在 Agda 中实现定界延续 monad 然而 没有必要 因为 Agda 标准库 已经定界延续单子的实现 http www cse chalmers se nad listings lib 0 7 Category Mona
  • Agda 函数、类型匹配函数

    我想创建一个辅助函数 它将从索引或参数化类型中获取术语并返回该类型参数 showLen len A Set gt Vec A len gt showLen len showType len A Set gt Vec A len gt Set
  • Idris 可以推断顶级常量类型中的索引吗?

    例如 Agda 允许我这样写 open import Data Vec open import Data Nat myVec Vec myVec 0 1 2 3 and myVec将有类型Vec 4正如预期的那样 但如果我在伊德里斯尝试同样
  • 显示 (head .unit ) = Agda 中的 head

    我试图证明 Agda 中的一个简单引理 我认为这是正确的 如果向量有两个以上元素 则取其head继采取init与取其相同head立即地 我将其表述如下 lem headInit l xs Vec suc suc l gt head init
  • 依赖类型:依赖对类型与不相交联合有何相似之处?

    我一直在研究依赖类型 我了解以下内容 Why 通用量化 https en wikipedia org wiki Universal quantification被表示为依赖函数类型 x A B x means 对全部x类型的A有一个类型的值
  • 将排序列表与大小类型合并

    假设我们有一个排序列表的数据类型 具有与证明无关的排序见证 我们将使用 Agda 的实验性大小类型功能 这样我们就有希望在数据类型上获得一些递归函数来通过 Agda 的终止检查器 OPTIONS sized types open impor
  • 专门构造函数上的模式匹配

    这几天我一直在为一个问题绞尽脑汁 但我的 Agda 技能不是很强 我正在尝试在仅在特定索引处定义的索引数据类型上编写一个函数 这仅适用于数据构造函数的某些专门化 我不知道如何定义这样的函数 我试图将我的问题简化为一个更小的例子 该设置涉及自
  • 使用标准库对 Agda 中的对/列表进行字典顺序排序

    Agda标准库包含一些模块Relation Binary Non StrictLex 目前仅适用于Product and List 我们可以使用这些模块轻松构建一个实例 例如IsStrictTotalOrder对于自然数对 即 open i
  • 如何处理 Agda 不确定是否在 with 语句中生成构造函数的情况?

    我有以下代码 open import Data Nat open import Agda Builtin Char open import Data Maybe digit Maybe digit n with compare n prim
  • AGDA 中极浅嵌入 VHDL 的指南

    对于我的编程语言项目 我正在 agda 中做一个非常浅且简单的 VHDL 数字电路嵌入 目的是写出语法 静态语义 动态语义 然后写一些证明来展示我们对材料的理解 到目前为止我已经编写了以下代码 data Ckt Set where var
  • 结构归纳终止

    我无法让 Agda 的终止检查器接受使用结构归纳定义的函数 我认为 我创建了以下最简单的示例来展示此问题 以下定义size被拒绝 即使它总是在严格较小的组件上递归 module Tree where open import Data Nat
  • Agda 中的递归方案

    不用说 Haskell 中的标准构造 newtype Fix f Fix getFix f Fix f cata Functor f gt f a gt a gt Fix f gt a cata f f fmap cata f getFix
  • 为什么较新的依赖类型语言没有采用 SSReflect 的方法?

    我在 Coq 的 SSReflect 扩展中发现了两个约定 它们似乎特别有用 但我还没有看到它们在较新的依赖类型语言 Lean Agda Idris 中得到广泛采用 首先 可能的谓词被表示为布尔返回函数而不是归纳定义的数据类型 默认情况下
  • Agda 中实例参数的问题

    我正在尝试遵循 McBride s 的代码如何维持邻居秩序 https personal cis strath ac uk conor mcbride pub Pivotal pdf 并且无法理解为什么 Agda 我正在使用 Agda 2
  • 在依赖类型的函数式编程语言中,扁平化列表是否更容易?

    在 haskell 中寻找一个可以展平任意深度嵌套列表的函数时 即应用的函数concat递归并在最后一次迭代时停止 使用非嵌套列表 我注意到这需要有一个更灵活的类型系统 因为随着列表深度的变化 输入类型也会变化 确实 有几个 stackov

随机推荐