Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >用了一段时间Agda的感想

用了一段时间Agda的感想

作者头像
KAAAsS
发布于 2022-01-14 09:44:48
发布于 2022-01-14 09:44:48
1.5K00
代码可运行
举报
文章被收录于专栏:KAAAsS's BlogKAAAsS's Blog
运行总次数:0
代码可运行

最近闲下来的时候其实一直有在玩Agda。其实之前也知道Agda,但是由于Coq的相关资料更多,而且那时候我在Windows平台上无法安装Agda(old-times库的问题),于是拖到近来PLFA这本书的中文翻译动工才开始跟着看。

我的第一感觉就是,Agda真的很好入门。Agda的语法和Haskell几乎完全一致,而且由于Agda支持Unicode,于是代码中可以使用大量的数学符号,可以很简单的将一个命题翻译为Agda代码。和Coq相比,虽然Gallina也支持使用Unicode字符作为identifier,但是Coq并没有广泛使用。

在证明方面,Agda和Coq有本质的不同。虽然都以有类型λ演算为理论基础(Agda是UTT,Coq是归纳构造演算),但是表现在证明上,两者就有很大的不同了。在Agda中,命题的证明就是给出一个类型的一个项。可以说,在Agda中证明一个命题能充分体现Curry-Horwad同构的实质。进一步的说,Agda根本没有强调“证明”,而你的每一次证明,其实都是C-H同构的体现。而Coq却完全相反。Coq使用了不同的Tactics来辅助证明。在Coq中进行证明的过程更加类似于一般的数学证明。以下是证明皮尔士定律与排中律等价的Agda、Coq程序片段。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
open import Data.Sum using (_⊎_; inj₁; inj₂)
open import Relation.Nullary using (¬_)
open import Data.Empty using (;-elim)

em : Set₁
em ={A : Set}A ⊎ ¬ A

peirce : Set₁
peirce ={P Q : Set}
   ((PQ)P)P

peirce→em : peirce → em
peirce→em h = h λ x → inj₂ λ a → x (inj₁ a)

em→peirce : em → peirce
em→peirce h {P} x with h {P}
... | inj₁ p = p
... | inj₂ ¬p = x (λ p → ⊥-elim (¬p p))
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Definition pierce := forall (p q : Prop), ((p -> q) -> p) -> p.

Definition em := forall p, p \/ ~ p.

Theorem pierce_equiv_em: pierce <-> em.
Proof.
  unfold pierce, em.
  firstorder.
  apply H with (q := ~(p \/ ~p)).
  firstorder.
  destruct (H p).
  assumption.
  tauto.
Qed.

Agda的证明并没有用Function.Equality的_⇔_,因为我个人觉得那个东西非常复杂。

证明过程中,Agda实际上是在辅助使用者获得某类型的项。而针对这个目标,Agda提供了比如Case和Refine之类的工具来根据类型生成目标代码,这一点是十分方便的。但是缺点也显而易见,就是证明过程并不按照一般的证明顺序进行的,毕竟只是项的构造。虽然有≡-Reasoning将证明过程展示为竖式,但是表达能力有限。另外,Agda的证明代码也需要一定理解才能获得大致的证明思路。

相比之下,Coq的证明过程更加近似于人工证明。Coq的证明中自然而然的带入的证明的“顺序”,所以在一定程度上,阅读Coq的代码更容易得到证明的大致思路。而且由于Tactics的应用是有序的,所以结合相关证明信息的说明,Coq代码的证明过程可以得到非常直观的展现。而且,Coq区分了Definition、Thereom、Lemma、Example、Proof等等,为阅读提供了很大的便利。当然,这种证明形式隐藏了C-H同构。对于更深层次的证明,需要学习更多内容才可以。

最后是关于ide。Agda与Coq都提供了Emacs的插件以便编写程序。此外,Agda还有Atom与Vscode(不完善)等现代编辑器的插件。Coq有官方的CoqIde,还有比如ProofAssistant也可以使用Coq。

CoqIde

agda-mode in Atom

agda-mode in Emacs

相比之下,CoqIde编写代码的体验较好。三个分栏窗体提供的信息充足且格式完整。不过agda-mode的编写体验也是挺好的,尤其是关于Hole的处理,个人感觉在一定程度上替代了Tactics的作用。而且通过类似latex方式,Unicode字符的输入也不是特别复杂。

综上,如果是数学的证明,我大概会选择Coq。如果是用来实现论文里的Type System,我会更青睐于使用Agda。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
「SF-LC」3 List
Pair of Numbers Q: Why name inductive? A: Inductive means building things bottom-up, it doesn’t have
零式的天空
2022/03/14
4210
「SF-LC」5 Tactics
It also works with conditional hypotheses:
零式的天空
2022/03/14
5340
「SF-LC」6 Logic
The equality operator = is also a function that returns a Prop. (property: equality)
零式的天空
2022/03/14
5920
「SF-LC」9 ProofObjects
So the book material is designed to be gradually reveal the facts that
零式的天空
2022/03/14
5570
「SF-PLF」6 Types
The toy lang from SmallStep is too “safe” to demonstrate any runtime (or dynamic) type errors. — 运行时类型错误 So that’s add some operations (common church numeral ones), and bool type.
零式的天空
2022/03/02
4460
「SF-LC」12 Imp
A weird convention through out all IMP is:
零式的天空
2022/03/14
1.7K0
「SF-PLF」5 Smallstep
not just input state get mapped to output state. but also intermediate state (which could be observed by concurrent code!)
零式的天空
2022/03/02
5950
「SF-LC」7 Ind Prop
we can write an Inductive definition of the even property!
零式的天空
2022/03/14
6550
理性的光辉,“哥德尔不完备定理”到底说了些什么?
编者按:智能技术要在理论研究方面必须要解决非线性现象的可建模机理与规律,其中哥德尔不完备定理不容忽视,哥德尔不完备定理、塔尔斯基形式语言真理论,图灵机和判定问题,被赞誉为现代逻辑科学在哲学方面的三大成果。
用户7623498
2020/08/04
2.7K0
1700页数学笔记火了!全程敲代码,速度飞快易搜索,硬核小哥教你上手LaTeX+Vim
不到一天,相关推文就已经有2000多赞,Hacker News论坛上盖了200多楼。
量子位
2019/04/23
1.2K0
1700页数学笔记火了!全程敲代码,速度飞快易搜索,硬核小哥教你上手LaTeX+Vim
人工智能达特茅斯夏季研究项目提案(1955年8月31日)中英对照版
科学Sciences导读:人工智能达特茅斯夏季研究项目提案(1955年8月31日)中英对照版。全文分为六大部分:一、提案说明,二、C.E.香农(C.E. Shannon)的研究提案,三、M.L.明斯基(M. L. Minsky)的研究提案,四、N.罗切斯特(N. Rochester)的研究提案,五、约翰·麦卡锡(JohnMcCarthy)的研究提案,六、对人工智能问题感兴趣的人。译后只校对了一遍,不妥之处请看后面附的原文再次校正或留言。公号输入栏发送“AI达特茅斯1955提案”获取本PDF资料;欢迎大家赞赏支持科普、下载学习科技知识。
秦陇纪
2019/07/15
4.5K0
人工智能达特茅斯夏季研究项目提案(1955年8月31日)中英对照版
统计学学术速递[9.1]
【1】 Uniform Consistency in Nonparametric Mixture Models 标题:非参数混合模型的一致相合性 链接:https://arxiv.org/abs/2108.14003
公众号-arXiv每日学术速递
2021/09/16
4220
博弈论(Game Theory)入门学习笔记(持续更新)
注意:迭代消除的过程同样也可以使用混合策略,比如说第二张图中,如果U行与D行以相同概率混合,混合结果同样严格占优M行,同样可以消除掉M行,虽然这里M行可以使用纯策略消除。因此给与我们提示,如果纯策略消除不掉的话或许可以尝试混合策略消除。
全栈程序员站长
2022/11/04
2.5K0
博弈论(Game Theory)入门学习笔记(持续更新)
机器学习发展历史回顾
其它机器学习、深度学习算法的全面系统讲解可以阅读《机器学习-原理、算法与应用》,清华大学出版社,雷明著,由SIGAI公众号作者倾力打造。
全栈程序员站长
2022/09/03
1.5K0
机器学习发展历史回顾
统计学学术速递[10.19]
【1】 Minimum \ell_{1}-norm interpolators: Precise asymptotics and multiple descent链接:https://arxiv.org/abs/2110.09502
公众号-arXiv每日学术速递
2021/10/21
1K0
最重要的论文之一:无监督的语义特征学习 论文翻译及代码
欢迎关注并置顶本公众号一起学习深度学习! ---- 我们先看看两段对此论文的解读,然后是论文翻译 二 from:http://www.jianshu.com/p/db87c51de510 InfoGAN (code). Peter Chen 和同时给出了 InfoGAN —— 一个对 GAN 的扩展,学习图像的去纠缠的和可解释的表示. 正常的 GAN 通过用模型重新产生数据分布达到这个目的,但是代码空间的 layout 和组织是 underspecified —— 存在很多可能的解可以将单位 Gaussia
CreateAMind
2018/07/20
7760
统计学学术速递[6.25]
【1】 MIxBN: library for learning Bayesian networks from mixed data 标题:MIxBN:从混合数据中学习贝叶斯网络的库
公众号-arXiv每日学术速递
2021/07/02
9340
朴素贝叶斯模型(NBM)详解与在Matlab和Python里的具体应用
今天给大家介绍机器学习的一种分类模型朴素贝叶斯模型,这是我整理了好久的文章,希望大家能学到一点知识我也是欣慰的^_^o~ 努力! 点击阅读原文可获得工具包连接与密码:sm2s 回复贝叶斯Matlab可获取全部文章 Word版 贝叶斯 Thomas Bayes,英国数学家。他首先将归纳推理法用于概率论基础理论,并创立了贝叶斯统计理论,对于统计决策函数、统计推断、统计的估算等做出了贡献。 贝叶斯决策理论是主观贝叶斯派归纳理论的重要组成部分。贝叶斯决策就是在不完全情报下,对部分未知的状态用主观概率估计,然后用
量化投资与机器学习微信公众号
2018/01/29
5.3K0
统计学学术速递[12.15]
【1】 Assessment of Treatment Effect Estimators for Heavy-Tailed Data 标题:重尾数据处理效果估计器的评价 链接:https://arxiv.org/abs/2112.07602
公众号-arXiv每日学术速递
2021/12/17
6630
【NSR特别专题】周志华:弱监督学习简介「全文翻译」
编者按:《国家科学评论》于2018年1月发表“机器学习”特别专题,由周志华教授组织并撰写文章。专题内容还包括对AAAI前主席Tom Dietterich的访谈,徐宗本院士、杨强教授、朱军博士、李航博士、张坤博士和Bernhard Scholkopf等人的精彩文章。
马上科普尚尚
2020/05/14
1.3K0
【NSR特别专题】周志华:弱监督学习简介「全文翻译」
相关推荐
「SF-LC」3 List
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验