首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么Idris中的特殊形式的cong无法进行类型检查?

在Idris中,cong是一个特殊形式的函数,用于证明两个类型相等。它的定义如下:

代码语言:txt
复制
cong : {a : Type} -> {b : Type} -> (f : a -> b) -> (x : a) -> (y : a) -> x = y -> f x = f y

cong函数接受一个函数f,两个相等的参数x和y,以及一个证明x = y的等式,然后返回一个证明f x = f y的等式。

然而,由于Idris的类型检查器的限制,cong函数无法进行类型检查,这是因为类型检查器无法确定等式x = y是否成立。这是因为在Idris中,等式的类型是非常严格的,必须在编译时就能够确定。

为了解决这个问题,可以使用Idris中的rewrite规则来替代cong函数。rewrite规则允许我们在类型检查过程中使用等式进行替换。下面是一个使用rewrite规则来替代cong函数的示例:

代码语言:txt
复制
cong_rewrite : {a : Type} -> {b : Type} -> (f : a -> b) -> (x : a) -> (y : a) -> x = y -> f x = f y
cong_rewrite f x y prf = rewrite prf in Refl

在这个示例中,我们使用rewrite规则将等式x = y替换为Refl,这是一个证明x = x的等式。这样,我们就可以得到一个类型正确的证明f x = f y的等式。

需要注意的是,使用rewrite规则可能会导致类型不一致的问题,因此在使用时需要谨慎。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

理论+实践:从原型链到继承模式,掌握 Object 的精髓(一)

理论+实践:从原型链到继承模式,掌握 Object 的精髓(一) • 在之前的文章中,我们介绍了函数调用位置的不同造成了 this 绑定对象的不同,但对象到底是什么?为什么我们需要绑定他们呢?...myObj.key = value; • 构造形式和文字形式生成的对象是一样的,唯一的区别在于,在文字声明中你可以添加多个键值对,但在构造形式中你必须逐个添加属性。...类型 • JavaScript 一种有6中主要类型。...(); myObj.key = value; • 构造形式和文字形式生成的对象是一样的,唯一的区别在于,在文字声明中你可以添加多个键值对,但在构造形式中你必须逐个添加属性。...并把所有“数据访问”属性标记为 writable:false,这样就无法修改它们的值。 4. in 操作符会检查属性是否在对象及其[[prototype]] 原型链中。

10010

Sceince子刊:利用AI+脑电波,锁定你想听的声音

虽然仍处于早期开发阶段,但该技术是迈向更好助听器的重要一步,使佩戴者能够无缝,高效地与周围的人交谈。 人类大脑具有非凡的能力,可以在嘈杂的环境中挑选出特定的声音。...比如,在嘈杂的酒吧里留意中意对象的说话、在车水马龙的街道分辨身后来车等等。 这在人类来说很轻松就能做到,可连最先进的助听器也无法实现。不过,哥伦比亚大学的工程师们正在改变这种情况。...哥伦比亚工程公司电气工程副教授Mesgarani博士说:“助听器会立刻放大所有人的声音,你仍然无法将你的谈话对象和其他人区分出来” 用脑电波来放大特定声音 为什么会想到利用脑电波呢?...好在哥伦比亚科技风险投资公司的资助下,团队对原始算法进行了改进,Mesgarani博士、第一作者Cong Han和James O'Sullivan博士再次利用深度神经网络,构建了一个更加复杂的模型,从而能够识别任何人声...目前为止只在室内环境中进行了测试,Mesgarani博士说未来有望在室外环境也实现相同的效果。

55940
  • 6 个新奇的编程方式,改变你对编码的认知

    相关类型 示例语言:Idris, Agda, Coq 你可能习惯使用C和Java等语言来键入系统,编译器可以检查变量是整数,列表还是字符串。...但是如果你的编译器能检查一个变量是“一个正整数”,“一个长度为2的列表”还是“一个回文字符串”呢?...Shapeless 是一个仍然有点粗糙的库,只支持依赖类型的一个子集,并有相当冗长的代码和类型签名。相反,Idris使得类型成为编程语言的第一类成员,因此依赖类型系统似乎更加强大和干净。...为了进行比较,请查看Scala vs Idris:相关类型,现在以及未来的讨论。 连贯语言 示例语言:Forth, cat,joy 有没有想过不用变量和函数应用程序编程会是什么样子?...如果您使用像Prolog这样的声明性语言对数字进行排序 ,则应该描述所需的输出:“我需要相同的值列表,但索引中的每个项目 i应小于或等于索引处的项目i + 1”。

    2.4K50

    1088 三人行 (20 分)

    本题给定甲、乙、丙三个人的能力值关系为:甲的能力值确定是 2 位正整数;把甲的能力值的 2 个数字调换位置就是乙的能力值;甲乙两人能力差是丙的能力值的 X 倍;乙的能力值是丙的 Y 倍。...输入格式: 输入在一行中给出三个数,依次为:M(你自己的能力值)、X 和 Y。三个数字均为不超过 1000 的正整数。...输出格式: 在一行中首先输出甲的能力值,随后依次输出甲、乙、丙三人与你的关系:如果其比你强,输出 Cong;平等则输出 Ping;比你弱则输出 Gai。其间以 1 个空格分隔,行首尾不得有多余空格。...注意:如果解不唯一,则以甲的最大解为准进行判断;如果解不存在,则输出 No Solution。...输入样例 1: 48 3 7 输出样例 1: 48 Ping Cong Gai 输入样例 2: 48 11 6 输出样例 2: No Solution 题题都有坑,这题的坑是,甲乙是两位整数,丙没告诉你是啥类型

    29850

    改变开发者编码思维的六种编程范式

    依赖类型 (Dependent types) ? 示例语言:Idris, Agda, Coq 你可能习惯于像C和JAVA等语言的类型系统,编译器可以检查一个变量是整数,列表,或者字符串。...但是如果你的编译器可以检查一个变量是“正整数”,“长度为2的列表”,还是“一个回文字符串”会怎样呢? 这就是支持依赖类型语言背后的思想:你可以在编译时指定检查变量值得类型。...另一方面,Irdris,使类型成为编程语言的首要成员,所以,依赖类型系统似乎更强大和更干净。为了比较,可以看看“Scala VS Idris:从属依赖类型的,在现在和未来”演讲。...依赖类型的语言,如Idris,甚至在未来的Scala中,可能会提供更轻量级和更实用的替代方案,这仍然可以显著的提高类型系统捕捉错误的能力。...注意,在CAT中函数不指定输入参数:所有参数都是从堆栈中隐式读取的。 foo调用的第一个选项,将其与10进行比较,并将true或false返回到堆栈。

    2.2K100

    3.10内核TCP慢启动耗时问题分析——拥塞控制算法

    )影响了client的cwnd增长,为什么有延迟(回包少)会对cwnd有影响,需要了解拥塞控制算法上面可能存在的差异,进而分析有什么办法优化。...在本篇中,将讲述我们在client端针对拥塞控制方法所进行的一系列分析,而server端的分析将会留到下回分解,下面正片中的正片即将开始。...,好比大海捞针,不仅容易抓不到点,不知道自己看到哪了,更无法知道自己看到的东西和自己的理解是否正确。...因此我们来聚焦分析两个不同内核版本tcp_ack的细节差异,分析为什么4.14拥塞控制算法在开gro导致收ack少时也能调整cwnd到一个比较大的水平。...而3.10的对应参数,则是计算了还有多少个发送中未收到的包:图片图片但是这个in_flight,在进入cubic后并不会影响cong_avoid和tcp_slow_start(之前的差异里已经分析过):

    2.4K80

    Redis入坟(一)redis的前世今生、redis基础及存储结构源码讲解

    从最开始只支持列表的数据库,到现在支持多种数据类型,并且提供了一系列的高级特性,Redis 已经成为一个在全世界被广泛使用的开源项目。 为什么叫 REDIS 呢?...查看键是否存在 exists cong 删除键 del cong 重命名键 rename cong congnew 查看类型 type cong Redis 一共有几种数据类型?...问题 7:为什么要对底层的数据结构进行一层包装呢? 通过封装,可以根据对象的类型动态地选择存储结构和可以使用的命令,实现节省空间和优化查询速度。...现在当我们想查找数据的时候,可以先沿着这个新链表进行查找。当碰到比待查数据大的节点时,再回到原来的链表中的下一层进行查找。...23 比 26 小,说明待查数据 23 在原链表中不存在 在这个查找过程中,由于新增加的指针,我们不再需要与链表中每个节点逐个进行比较了。需要比较的节点数大概只有原来的一半。这就是跳跃表。

    1.1K50

    MarkDown高级技巧

    MarkDown代码块中插入代码块 即在代码块中再次引用代码块,产生以下效果: ```markdown ``` 方法是在代码块中引用的代码块整体 **tab** 缩进一格。 ## 3....MarkDown表格 - 表格内换行:使用``进行换行 - 表格中特殊字符(作为普通字符时需要使用 `\` 转义) | 特殊字符 | 转义 | | :-: | :-: | | `[ ]` |..._{11} & x_{12} \\ x_{21} & x_{22} \end{matrix} \right) \end{array} $$ 其 MarkDown 编码如下(其中的左右...特殊符号编码 MarkDown 支持 HTML 中的特殊符号编码: ### 5.1 ASCII 字符 - 对于 ASCII 字符,只需使用 **`&#ASCII值;`** 就可以显示对应字符。 !...[ASCII 字符表](/images/Technique/MarkDown/MarkDown高级技巧/ASCII字符表.png) - 带有实体名称的 ASCII 字符表如下: | ASCII 字母

    1.3K20

    秋招工作不好找?腾讯大咖们教你应对

    2024年的秋招正在进行中,而腾讯的秋招也在持续进行中。 你可能不知道的是,在腾讯里,有一个非常出名的技术大咖项目。 在腾讯,技术大咖算是一个特别的存在。...因为大公司有成熟的管理运作体系、专业的职场人、沉淀下来的宝贵技术资产等等。只有看过好的东西,知道好的标准,才会了解自己的差距在哪里。而在其中为什么选了腾讯?...CONG(自然语言处理) 我们团队主要以业务需求为导向,专注于在 NLP 领域的研发工作,在服务业务的同时,沉淀技术到我们的「太极机器学习平台」上,并且通过平台化的形式让更多业务方便能够地利用AI能力。...CONG(自然语言处理) 看着ChatGPT横空出世,给我们这些从业者带来了巨大的冲击的同时,也带来了极大的兴奋感。...CONG(自然语言处理) 我觉得身边这群优秀的同事是这个平台带给我最宝贵的无形财富。

    21040

    用于数学的 10 个优秀编程语言

    它允许表达数学断言,机械地检查这些断言的证明,帮助找到形式化的证明,并从其正式规范的建设性证明中提取认证程序。 Coq工作在归纳结构微积分理论的基础上,归纳结构微积分是结构微积分的一个衍生物。...Prolog的根源是一阶逻辑——一种形式逻辑,且与许多其他编程语言不同的是,Prolog是声明式的。 程序逻辑用关系来表达,用事实和规则来表现。通过对这些关系运行查询来启动计算。...6.Haskell Haskell是一个标准化的,通用的纯函数式编程语言,具有非严格的语义和强大的静态类型。Haskell具有类型推断和惰性计算的类型系统。...IDRIS Idris是一种具有相关类型的通用纯函数编程语言。类型系统类似于Agda使用的类型系统。 语言支持可与Coq媲美的交互式定理证明,包括策略,即使在定理证明之前,重点仍然放在通用编程上。...Idris的其他目标是“充足”性能,易于管理的副作用和支持实施嵌入式领域特定语言。 我的看法 研究型语言。它结合了Haskell和Coq的元素。很有意思。 8.

    3.4K100

    用eBPF写TCP拥塞控制算法

    两个内核版本,数据结构只是字段变化了位置,新增了字段,更新了字段名字,即便如此,不得不对算法模块进行重新编译… 如果能在模块载入内核的时候,对函数和数据结构字段进行重定位就好了!...该机制可以: 用eBPF的一组字节码实现内核模块的一组回调函数。 对使用到的内核数据结构字段进行重定位,适配当前内核的对应偏移。 后果就是: 很多内核算法模块可以用eBPF来编写了。...preserve_access_index属性表示eBPF字节码在载入的时候,会对这个结构体里的字段进行重定向,满足当前内核版本的同名结构体字段的偏移。..., .flags = TCP_CONG_NEEDS_ECN, .name = "bpf_dctcp", }; 没啥特殊的,几乎和内核模块的写法一样,唯一不同的是: 它和内核版本无关了...是的,这就是在用户态写的TCP CC算法,eBPF字节码的对应verifier会对你的代码进行校验,它不允许可以crash内核的eBPF代码载入,你的危险代码几乎无法通过verify。

    1.3K20

    剑指offer - 打印从 1 到最大的 n 位数 - JavaScript

    但是仔细看这题给的 JavaScript 模版,函数返回的类型是number[],所以不是考察字符串和大数,否则的话字符串还得转换成数字,照样越界。...我在《剑指 offer - 数值的整次方(四种解法)》这篇文章中详细讲解了求整次方的几种做法。本题显然不需要封装通用的函数,只需要对 10 的 n 次方进行快速计算即可。...解法 1:BIF 直接调用内置函数即可: // ac地址:https://leetcode-cn.com/problems/da-yin-cong-1dao-zui-da-de-nwei-shu-lcof...,这里可以直接使用**运算符,简化写法: // ac地址:https://leetcode-cn.com/problems/da-yin-cong-1dao-zui-da-de-nwei-shu-lcof...代码实现如下: // ac地址:https://leetcode-cn.com/problems/da-yin-cong-1dao-zui-da-de-nwei-shu-lcof/ // 原文地址:https

    70110

    秋招工作不好找?腾讯大咖们教你应对

    2024年的秋招正在进行中,而腾讯的秋招也在持续进行中。你可能不知道的是,在腾讯里,有一个非常出名的技术大咖项目。在腾讯,技术大咖算是一个特别的存在。...因为大公司有成熟的管理运作体系、专业的职场人、沉淀下来的宝贵技术资产等等。只有看过好的东西,知道好的标准,才会了解自己的差距在哪里。而在其中为什么选了腾讯?...CONG(自然语言处理)我们团队主要以业务需求为导向,专注于在 NLP 领域的研发工作,在服务业务的同时,沉淀技术到我们的「太极机器学习平台」上,并且通过平台化的形式让更多业务方便能够地利用AI能力。...CONG(自然语言处理)看着ChatGPT横空出世,给我们这些从业者带来了巨大的冲击的同时,也带来了极大的兴奋感。...腾讯给我提供了重要且有挑战的靶场,我在工作过程中能不断完善提升我的能力组合,也期待自己能不断地在新的场景里发挥价值。CONG(自然语言处理)我觉得身边这群优秀的同事是这个平台带给我最宝贵的无形财富。

    22510

    丛京生院士深度解读可定制计算的设计自动化:自动将代码转换成电路描述,解决开发人员最大难题

    在提案中我们提出可定制计算将会是计算行业的未来,特别是在大家已经对各种各样的并行计算做到极致之后。...有些同学可能会比较好奇说:等一会,我在计算机原理课上学过CPU的架构。为什么CPU的性能这么差,差到甚至成百上千倍?实际上原因通过下图看来非常简单明了。你们可以想一想CPU是怎么进行加法操作的。...这就是为什么CPU不高效的原因。 将关键计算任务交给可定制计算加速器,解决CPU性能差的难题 我们的解决方法很简单:知道了CPU在这方面的不足,那我们就把关键的计算任务交给可定制计算加速器[8]。...这样的架构就和以前的单一机器或者单一芯片的计算架构不一样。为什么这是合理的呢?如果你仅有有限的计算资源,通用计算架构是一种非常好的做法。...模板计算让图片可以进行模糊或者锐化的操作 另外一个微架构例子是模板计算(Stencil Computation)。比如在下图中某一像素的值将会根据相邻四个像素的值进行更新。

    1.6K10

    分块传输绕过WAF

    在介绍WAF绕过技术之前,我们必须要要搞明白一个问题,那就是WAF为什么会存在被绕过的风险?这是因为WAF对数据包的解析和Web服务器对数据包的解析两者之间存在差异,所以存在被绕过的可能。...:MD5、SHA-1、自定义加密) 4、缓冲区溢出 5、编码绕过 6、特殊字符插入(%00) 7、异常HTTP请求包(例如:超级大,不符合HTTP规范但被server容错的数据包) 8、数据包分块传输方式...在HTTP0.9中,响应包的结束只是简单的依赖于TCP的连接断开。...然后:数据包头中添加Transfer-Encoding:chunked进行分块传输,将注入的内容进行分块,发现是可以进行绕过的。 ? ? ? 分块传输还有很多有趣的玩法,欢迎各位朋友一些交流学习。...作者:cong9184 来源:Ms08067安全实验室

    1.7K30

    理解音频焦点 (第 23 部分):更多的音频焦点用例

    本文将继续介绍一些用例,并介绍应用可以请求的音频焦点类型的概念,以帮助应用微调音频。 用例一 :当后台运行的导航程序正在播报转向语音的时候,另一个应用正在播放音乐。...这里所说的回避模式,没有约束规定,建议您做到把音量调节到百分之二十。有一些特殊的情况,如果应用是有声读物,播客或口语类应用,建议暂停声音播放。...您的应用处理了音频焦点的情况下: 在 Android O 中,有一个应对诸如本用例的音频焦点的功能,叫做延迟音频聚焦。 假如当用户在通话中打开游戏,他们想玩游戏,不想听到游戏声音。...总结 当您的应用程序需要输出音频时,应该请求音频焦点(并且可以请求不同类型的焦点)。 只有在获得音频焦点之后,才能播放声音。...但是,在获取音频焦点之后,您的应用程序在完成播放音频之前可能无法一直保留它。 另一个应用程序可以请求并抢占音频焦点。

    2.3K20

    Groovy 类型检查扩展,最终篇 高级类型检查扩展

    它们在类路径中以源形式存在,这意味着: 对应于类型检查扩展的Groovy源文件在编译类路径上可用 这个文件由Groovy编译器为每个被编译的源单元编译(通常,一个源单元对应一个文件) 这是开发类型检查扩展的一种非常方便的方法...如果真的想用Java编写扩展,那么将无法从类型检查扩展DSL中获益。...2.4 全局类型检查扩展 虽然可以配置编译器透明地将类型检查扩展添加到脚本中, 但目前还无法通过将扩展放在类路径中透明地应用扩展。...这是一个设计决策: 如果代码是静态编译的,我们通常希望类型安全和最佳性能 如果无法识别的变量/方法调用是动态进行的,那么您就失去了类型安全,而且还在编译时支持所有的拼写错误!...这就是为什么不建议从类型检查扩展和AST转换开始使用这种方法的原因。 2.8 示例 现实生活中类型检查扩展的例子很容易找到。

    95520

    VirtualBox下安装CentOS7系统的操作步骤

    ) 虚拟机名称可以随便输入,类型选择linux,在操作系统的发行版本中没有找到可选的centos版本,我们选择Other Linux版本(其他版本)替代,如果我们安装的是64位操作系统那么对应的选项是...2.以上设置完成后,点击下一步 进行分配内存 使用建议的内存大小即可,根据宿主机的配置可以自己进行调整,这里的值可以理解为虚拟机最大可占用宿主机的多少内存。...虚拟硬盘的大小使用第3步中推荐的硬盘大小即可。 7.点击创建,虚拟机创建完成 主界面中已经看到刚刚创建的虚拟机。...,第二个选项是检查操作系统文件是否损坏并安装CentOS7。...3.我们选择第一个选项按下回车键直接安装,进入语言选择界面 选择中文->简体中文 4.点击界面右下角的继续按钮进行下一步 提示先完成带有黄色叹号的内容,否则无法进行下一步,我们看到安装位置处于此状态

    1.6K20
    领券