的更改日志阿格达-2.4.2.5

--------------------------------------------------------------------------Agda 2.4.2.5版的发行说明------------------------------------------------------------------------自2.4.2.4以来的重要变化:安装和基础设施===============================*增加了对GHC 7.10.3的支持。*添加了`cpphs`Cabal标志打开/关闭此标志以选择cpphs/cpp作为C预处理器。默认情况下,此标志处于启用状态。(此标志在Agda 2.4.2.1中添加,但未记录)实用程序和选项===================*“where”子句中不允许使用终止杂注[第1137期]。类型检查=============*‘with’-抽象更具攻击性,抽象也有“with”表达式中使用的变量,除非它们是也用于“with”表达式的类型中。[第1692期]例子:```阿格达测试:(f:(x:A)a≡x)(b:a)b≡a用a | f b测试f b测试f b|.b|ref=f b```以前,“with”不会抽象为出现在“with”表达式中,在本例中为“f”和“b”,保持其类型不变。现在,它试图在“f”中抽象,因为只有“b”出现在with`-表达式是`A`(属于`A`)和`A≡b`(属于` fb`)。因此,`f`的类型变为`(x:a)b≡x`和目标类型为“b≡b”(如前所述)。这也影响到“重写”,它是根据`带有`。```阿格达测试:(f:(x:A)a≡x)(b:a)b≡a测试f b重写f b=f b```由于新的“with”不完全向后兼容使用“with”或“rewrite”的Agda开发可能需要维护。固定问题============请参见https://github.com/agda/agda/issues* 1407* 1518* 1670* 1677* 1698* 1701* 1710* 1718--------------------------------------------------------------------------Agda 2.4.2.4版的发行说明------------------------------------------------------------------------2.4.2.3以来的重要变化:安装和基础设施===============================*删除了GHC 7.4.2的支持。实用程序和选项===================*选项--copatterns现在默认处于启用状态。要关闭解析copatterns,使用:{-#选项--无模式#-}*选项--现在需要重写才能使用REWRITE杂注并在还原过程中重写。重写是不安全的。要使用重写,请首先指定一个关系符号“R”,该符号将稍后用于添加重写规则。一个典型的候选人应该是命题等式{-#内置重写_ lect _#-}但任何类型为Δ的符号“R”A类A类为一些`A`和`我被接受了。然后可以将符号“q”添加到重写中前提是它们的类型为“Γ”形式R ds l R `。这将添加重写规则Γ⊢lr:A[ds/Δ]签名,只要一个词是“l”的实例,签名就会触发。例如,如果加0:∀xx+0≡x(理想情况下,有“plus0”的证明,但可以是假设),然后{-#重写plus0#-}将提示Agda重写格式`t+0的任何格式良好的术语`到“t”。一些警告:Agda天真地接受并应用重写规则很容易破坏类型检查的一致性和终止性。应/不应/应添加的重写规则的一些示例:参考:∀xx≡x——Agda循环+符号:∀x yx+y≡y+x—Agda循环荒谬:真≡假——打破一致性仅添加经验证的方程式应至少保持一致性,但这只是一个猜测,所以要知道你在做什么!使用重写,你就进入了荒野靠你自己!语言========*for all/∀now parses likeλ,也就是说,以下parses now[第1583期]:⊤×∀(B:套)B类B类*下划线模式_现在也可以表示不可访问模式(点模式)。这减轻了书写“._”的需要。[第1605期]代替transVOld:{A:集}(A b c:A)a≡bb≡ca≠ctransVOld_._._回流=回流现在可以写作了transVNew:{A:Set}(A b c:A)a≡bb≡ca≡ctransVNew_ _ ref ref=refl让阿格达决定把圆点放在哪里。这总是可能的通过使用隐藏参数transH:∀{A:集合}{abc:A}a≡bb≡ca≡ctransH ref ref=回流现在相当于transHNew:{A:Set}{abc:A}a≡bb≡ca≡ctransHNew{a=_}{b=_}{c=_}refref=refl之前,下划线_表示无法由无法访问的模式实例化。如果没有人想阻止实例化的Agda,需要使用除强调(然而,实际上这种情况似乎不太可能发生)。类型检查=============*数据和记录类型的幻影参数的极性已更改。[第1596期]大小参数的极性是非变的(单调和反单调)。其他参数的极性为协变(单调)。两者以前都是不变的(既不是单调的,也不是反调的)。下面的示例现在进行类型检查:打开导入公用。大小--列表在两个参数中都应该是单调的--(即使缺少“cons”)。数据列表(i:大小)(A:设置):设置位置[]:列表i A种姓:∀{i A}列表i(列表i A)列表∞(列表∞A)卡斯特尔x=x--流在第一个参数中应该是反调的,在第二个参数中应是单调的--(即使缺少字段“tail”)。记录流(i:大小)(A:设置):设置位置共性的领域头部:A卡斯特:{iA}流∞(流∞A)流i(流i A)castSS x=x*SIZELT lambdas必须一致[第1523期,见Abel和Pientka,ICFP 2013]。当lambda-abstracting over type(Size<Size)时,大小必须为非零,用于大小变量的任何有效实例化。好的方面:data Nat(i:大小):设置位置零:∀(j:尺寸<i)国家例如:∀(j:尺寸<i)国家j国家{-#终止#-}--这个定义很好,终止检查目前太严格了。修复:{C:Size集合}(∀i(∀(j:尺寸<i)自然j->C j)国家C i)→ ∀ 国家C i公司固定t i(零j)=t i(λ(k:尺寸<i)固定t k)(零j)固定t i(suc j n)=t i(λ(k:尺寸<i)固定t k)(例如j n)作为上下文,λ(k:大小<i)在这两种情况下都很好i:尺寸,j:尺寸<i保证i不为零。坏的:记录流{i:Size}(A:Set):设置位置共性的建造师_领域头部:A尾部:∀{j:大小<i}流{j}Aopen Stream公共_++ˢ_:∀{i A}列表A流{i}A流{i}A[]++秒=秒(a|as)++ˢs=a|(as++ˣs)这在i:大小,s:流{i}Aa|ˢ(λ{j:尺寸<i}作为++ˢs)通过通过copattern匹配定义构造函数修复:记录流{i:Size}(A:Set):设置位置共性的领域头部:A尾部:∀{j:大小<i}流{j}Aopen Stream公共_●ˢ_:∀{i A}A类流{i}A流{i} A类头部(aˢas)=a尾部(aˢas)=as_++ˢ_:∀{i A}列表A流{i}A流{i}A[]++秒=秒(a|as)++ˢs=a|(as++ˣs)丑陋的:修复:{C:Size集合}(∀i(∀(j:尺寸<i)C j)C i)→ ∀ C i类固定t i=t iλ(j:尺寸<i)固定t j对于i=0,运行时没有这样的j,导致循环行为。互动===========*问题635已修复。案例拆分并没有显示出隐式再记录模式。记录Cont:设置哪里建造师_◃_领域Sh:设置位置:Sh设置打开Contdata W(C:Cont):设置位置sup:(s:Sh C)(k:位置C sW C)W C公司伪:{C:Cont}W C公司设置伪w={!w!}自第473期修复以来,在w上的案例拆分产生了结果,假的{Sh位置}(supsk)=?现在,正如预期的那样,伪(sup s k)=?性能===========*作为第21届Agda实施者会议(AIM XXI)的成果之一,标准库的序列化速度快50%(时间减少了第三),不使用额外的磁盘空间作为接口文件夹。错误修复=========*已修复的问题(请参阅https://github.com/agda/agda/issues ):1546(copattern匹配和带子句)1560(积极检查效率低下)1584(带有尾随隐式的let模式)--------------------------------------------------------------------------Agda 2.4.2.3版的发行说明------------------------------------------------------------------------2.4.2.2以来的重要变化:安装和基础设施===============================*增加了对GHC 7.10.1的支持。*删除了对GHC 7.0.4的支持。语言========*_不再是定义的有效名称。以下操作现在失败:[第1465期]假设_:集合*键入的绑定现在可以包含隐藏信息[问题1391]。这意味着你现在可以写了关联:(xs{ys-zs}:List A)((xs++ys)++zs)≡(xs++(ys++)zs)而不是更长关联:(xs:List A){ys-zs:List A}→ ...它也与此无关.(xs{ys-zs}:列表A)→ ...但是,如果已经存在隐藏信息,那么这当然没有意义。因此,这(仍然)是一个解析错误:{xs{ys-zs}:列表A}→。。。*大小类型的内置程序不再需要附带的假设。大小的BUILTIN杂注现在也声明标识符它们绑定到。{-#BUILTIN SIZEUNIV SIZEUNIV#-}--大小Univ:SIZEUNIV{-#BUILTIN SIZE大小#-}--大小:SizeUniv{-#BUILTIN SIZELT尺寸<_#-}--尺寸<_:。。大小SizeUniv公司{-#内置大小↑_ #-} -- ↑_ : 大小大小{-#BUILTIN SIZEINF∞#-}--∞:大小Size and Size<现在生活在新的宇宙SizeUniv中。禁止在这个宇宙中建造功能空间,为了防止恶意假设前一个大小pred:(i:大小)尺寸<i[第1428期]。*明确的符号(来自语法声明)可以解决到模棱两可的名称现在被明确解析[第1194期]。*如果只有重载名称的某些实例具有给定的关联的符号(来自语法声明),那么这个名称只能解析为名称,而不是其他实例[第1194期]。以前,如果重载名称的不同实例/不同/相关的符号,则所有符号都不能使用。现在所有这些都可以使用了。注意,符号标识不仅涉及右手语法声明的一侧。例如,以下内容符号并不完全相同,因为隐式参数名称不同:模块A,其中data D:设置位置c:{xy:D}D类语法c{x=a}{y=b}=a∙b模块B,其中数据D:设置位置c:{yx:D}D类语法c{y=a}{x=b}=a∙b*如果重载运算符在至少有两个不同运算符的作用域中fixities,然后它获得默认的fixity[第1436期]。类似地,如果给定重载有两个或多个相同的符号name在作用域中,并且这些符号并不都具有相同的固定性,则它们获得默认的固定性。类型检查=============*不同arity的函数现在可以使用with-clauses和rewrite。例子:NPred:国家设置NPred 0=布尔NPred(sucn)=自然NP红色n常量:布尔→ ∀{无}NP红色n常数b{0}=b常数b{sucn}m=常数b{n}所有奇数:∀nNP红色nallOdd 0=真allOdd(sucn)m与偶数m…|true=常量false…|false=所有奇数n*由copattern匹配定义的函数现在可以有with-clauses并使用重写。例子:{-#选项--合作模式#-}记录流(A:Set):Set where共性的构造函数延迟领域力:A×流A开放流地图:{AB}(A)B)流AB流力(映射f s)与力s…|a,as=f a,映射f为记录Bisim{AB}(R:AB类Set)(s:流A)(t:流B):设置其中共同生产的构造函数~延迟领域~force:设a,as=力sb,bs=力t以R a b×Bisim R为bs打开BisimSEq:{A}(s t:流A)设置SEq=比西姆(_≡_)--用稍微奇怪的对称定义来演示重写。~sym':∀{A}{s t:流A}SEq标准SEq t s(特殊要求)~force(~sym'{s=s}{t}p)with force s|force t|~force p……|a,作为|b,bs|r,q重写r=refl,~sym'q*现在可以通过copattern匹配来定义实例。【第1413期】以下示例扩展了中的[Abel,Pientka,Thibodeau,Setzer,POPL 2013,第2.2节]:{-#选项--合作模式#-}--Monad类型类记录Monad(M:设置Set):Set1,其中领域返回:{A:Set}A类机械制造商协会_>>=_:{AB:集合}机械制造商协会(A)月B)M B公司打开Monad{{…}}--State新类型记录状态(S A:设置):设置其中领域运行状态:SA×S开放状态--国家是莫纳德的一个例子实例stateMonad:{S:Set}莫纳德(S州)runState(返回{{stateMonad}}a)s=a,s--新建运行状态(_>>=_{stateMonad}}mk)s₀ = -- 新的让a,s₁ = 运行状态ms在runState(ka)s中--stateMonad符合monad法律leftId:{ABS:Set}(A:A)(k:A状态S B)(返回a>>=k)≡kaleftId a k=回流rightId:{ABS:Set}(m:状态SA)(m>>=返回)≡mrightId m=回流关联:{ABCS:Set}(m:状态SA)(k:A状态S B)(l:B州S C)((m>>=k)>>=l)≡(m>>=λak a>>=l)assoc m k l=参考Emacs模式==========*新的菜单选项“切换到另一个版本的Agda”尝试这样做它说什么。*更改的功能:交互式分割结果。[这和以前一样:]未给定变量的Make-case(C-C C-C)尝试在结果引入投影模式。这个洞需要当然是记录类型。测试:{A B:集}(A:A)(B:B)A×B测试a b=?结果分割?将产生新的条款:项目(测试a b)=?项目(测试a b)=?[此项已更改:]如果孔是功能型的,make-case将只引入图案变量(尽可能多)。测试乐趣:{AB:Set}(A:A)(B:B)A×BtestFun=?结果分割?将产生新条款:testFun a b=?第二次调用make-case将引入投影模式。错误消息==============*Agda现在建议更正拼写错误的选项,例如。{-#选项--不端接检查--不带-k--塞夫·古克#-}无法识别的选项:--不要终止检查(你是指不终止检查吗?)--不带-k(你是说--不带-k?)--塞夫·古克恐怕没有什么比这更接近的了。编译器后端=================*Epic后端已删除[第1481期]。错误修复=========*修复了unquoteDecl在实例块中不起作用的错误[问题1491]。*已修复的其他问题(请参阅https://code.google.com/p/agda/issues )14971500--------------------------------------------------------------------------Agda 2.4.2.2版的发行说明------------------------------------------------------------------------2.4.2.1以来的重要变化:错误修复=========*Windows上的编译已修复。*已修复的其他问题(请参阅https://code.google.com/p/agda/issues )13321353136013661369--------------------------------------------------------------------------Agda 2.4.2.1版的发行说明------------------------------------------------------------------------2.4.2以来的重要变化:练习和选项===================*新杂注{-#TERMINATING#-}替换{-#NO_TERMINATION_CHECK#-}对现有杂注{-#NON_TERMINATING#-}进行补充。跳过关联定义和标记的终止检查它们将终止。因此,它是具有相同语义的{-#NO_TERMINATION_CHECK#-}。您不能再使用杂注{-#no_TERMINATION_CHECK#-}跳过终止检查,但必须将定义标记为取而代之的是{-#TERMINATING#-}或{-#NON_TERMINATING#-}。注意:{-#OPTION--无终止检查#-}标记您的所有定义为{-#TERMINATING#-},将您置于危险区域类型检查器中的循环。语言========*现在引用被模块打开遮蔽的局部变量一个错误。以前的行为更喜欢本地而不是导入的定义。[第1266期]注意,模块参数是局部变量,也是受λ、 依赖函数类型、模式和let。例子:模块M,其中A=设置1测试:(A:设置)让A中的M打开最后一个A产生错误,因为它可以引用本地变量A或从模块M导入的定义。*“with”在由模块望远镜或父函数现在被禁止。[第1342期]数据单位:设置位置单位:单位id:(A:设置)A类A类id A A=A模块M(x:单位),其中dx:单位单位dx单位=x克:∀ux≡dxug和xg|单位=id(∀u单位≡dxu)?尽管这段代码看起来很正确,Agda还是抱怨类型表达式`∀u单位≡dxu`。如果你问阿格达该怎么办相反,它很高兴地告诉你它想要`∀u单位≡dxu`。事实上你没有看到什么和阿格达永远不会告诉你这两个表达式实际上是不同的“dx”的第一个不可见参数,仅在外部可见模块`M`。阿格达想要的是在“dx”后面有一个看不见的“单位”,但这一切您可以写一个不可见的`x`(它被插入到场景)。为了避免这些悖论,模块上的“with”现在是非法的参数。这应确保不可见参数始终精确显示模块参数。因为“where”块被分解为带有模式变量的模块将父子句作为模块参数,您会发现在父函数的模式变量上使用“with”。f:单位单位f x=单位哪里dx:单位单位dx单位=x克:∀ux≡dxug和xg|unit=id((u:单位)单位≡dxu)?父子句`f x=unit的模式变量`x`上的`with``现在被宣布为非法。类型检查=============*终止检查失败现在是一个适当的错误。终止检查失败后,我们不再继续类型检查。使用杂注{-#NON_TERMINATING#-}和{-#NO_TERMINITION_CHECK#-}如果你想这样做的话,请靠近有问题的定义。或关闭终端检查器{-#选项--无终止检查#-}(风险自负!)。*(自Agda 2.4.2以来:)终止检查--无K限制以数据类型或“大小”结尾的参数的结构下降。同样,只有当结果类型为数据或记录类型。相互的data WOne:设置换行位置:FOneWOne公司FOne=WOne公司noo:(X:设置)(WOne≡X)X(X)→ ⊥没有。WOne ref(wrap f)=无f无iso f`noo`被拒绝,因为在类型`X`处为结构下降`f<wrap f`打折--不带-K。数据潘多拉:设置位置C:∞潘多拉星球回路:(A:设置)潘多拉星球A类循环。潘多拉ref=C(Ş(回路foo)`循环`被拒绝,因为在类型`A中未跟踪防护`--不带-K。参见第1023、1264、1292期。终止检查====================*终止检查器现在可以识别点中的简单子方根模式。数据子集:(d:Nat)设置位置c(c)₁ : ∀ {d}基板d基板dc(c)二氧化碳:∀{天₂} → 基板d₁ → 基板d₂ → 基板(例如₁ + ₂)假设比较:{d₂} → 基板d₁ → 基板d₂ → 基板(d₁ + ₂)查找:∀d国家基板d设置查找d零(cρ) =设置查找d(suc v)(cρ) =查找d vρ查找。(例如₁ + ₂) v(c{天₁} {d₂} ρσ)=查找(dŞ+₂) v(压缩ρσ)这里的点模式实际上是标准化的,所以它是成功₁ + ₂)相应的递归调用参数是(d₁ + ₂).在这种简单的情况下,阿格达现在可以认识到这种模式是构造函数应用于调用参数,这是有效的下降。然而,请注意,Agda仅在以下情况下查找语法相等性识别子项,因为不允许对终止检查期间的rhs。实际上,写点模式没有效果,这也很有效,看起来很神奇…;-)隐藏:{d}国家基板d设置隐藏零点(cρ) =设置隐藏(例如v)(cρ) =隐藏vρ隐藏v(cρσ)=隐藏v工具=====LaTeX后端-------------*修复了包含运算符的标识符被排版的问题数学间距过大。错误修复=========*第1194版*问题836:字段和构造函数可以通过记录/数据*类型*及其记录/数据模块。这现在也适用于从导入的记录/数据类型参数化模块:模块M(_:设置₁) 哪里记录R:设置哪里领域X:设置使用(R)而不是使用(模块R)打开M集合X:右设置X=右X--------------------------------------------------------------------------Agda 2.4.2版的发行说明------------------------------------------------------------------------2.4.0.2以来的重要变化:实用程序和选项===================*新选项:--with-K。这可用于通过以下方式覆盖文件中不带-K的全局添加杂注{-#OPTIONS--with-K#-}。*新杂注{-#NON_TERMINATING#-}这是NO_TERMINATION_CHECK的安全版本,它不处理受影响的功能为终止。这意味着NON_TERMINATING函数在类型检查期间不要减少。在运行时和在顶层调用C-C C-n(但不是在洞中)。语言========*实例搜索现在更加高效和递归(请参阅第938期)(但尚未进行终止检查)。引入了一个新关键字“instance”(样式为`abstract和private),现在必须用于实例中必须考虑的定义/假设分辨率。例如:record RawMonoid(A:Set):设置位置领域无:A_++_:A->A->A打开原始Monoid{{…}}实例rawMonoidList:{A:Set}->RawMonoid(列表A)rawMonoidList=记录{nil=[];_++_=列表._+_}rawMonoidMaybe:{A:Set}{{m:RawMonoid A}}->原始Monoid(MaybeA)rawMonoidMaybe{A}=record{nil=nothing;_++_=catMaybe}哪里catMaybe:也许A->也许A->可能Acat可能什么都没有mb=mbcatMaybe ma nothing=可能macatMaybe(仅a)(仅b)=仅(a++b)此外,每种类型的实例都必须以to)命名类型(例如记录、数据类型或假设)。这个允许我们构建一个简单的索引结构数据/记录名称-->可能的实例这加快了实例搜索。实例搜索考虑所有本地绑定和所有全局绑定“instance”绑定和搜索是递归的。例如,搜索?:原始单体(可能(列表A))将考虑候选人{rawMonoidList,rawMononidMaybe},失败统一第一个,与第二个一起成功? = rawMonoidMaybe{A=列表A}{{m=?m}}:RawMonoid(Maybe(列表A))继续实现目标?m:原始单体(列表A)然后会发现?m=rawMonoidList{A=A}把这些放在一起,我们就有了解决方案。请注意,目前没有终止检查,您可以很容易地通过将标识函数声明为实例来创建Agda循环。但是不可能仅通过声明来创建Agda循环结构上的递归实例(不管这意味着什么)。此外:*实例的唯一性取决于定义的平等性(见第899期)。*允许使用以下表单的实例:EqSigma:{A:Set}{B:A集合}{{EqA:EqA}}{{EqB:{a:a}等式(B a)}}等式(∑A B)递归搜索类型的实例时`{a:a}等式(B a)',将自动引入λ实例搜索将在中搜索“Eq(B a)”类型的内容由“a:a”扩展的上下文。搜索实例时`参数不必是隐式的,但在EqSigma,实例搜索只能在“a”是隐式的情况下使用EqB。*不再试图通过实例解决无关的元搜索。*记录和数据类型的构造函数将自动添加到实例表。*现在可以在模式中使用“quote”。例如,下面是一个取消引用(封闭)自然数的函数术语。unquoteNat:术语也许是NatunquoteNat(con(quote Nat.zero)[])=刚好为零unquoteNat(con(quoteNat.suc)(arg_nŞ[]))=fmap-suc(unquoteNat n)unquoteNat _=无*内置构造函数AGDATERMUNSUPPORTED和AGDASORTUNSUPPORTED现在取消引用时转换为元变量。*新的句法糖“tactic e”和“tactical e1|..|英语。它如下所示,使其不太难调用基于反射的战术。战术e-->quote目标g(例如)战术e1|..|en-->quoteGoal g in unquote(例如)e1。。英语注意,在第二种形式中,策略函数应该生成一个函数从一些新的子目标到最初的目标。e的类型应为期限->两种情况下的期限。*文字的新反射内置程序。Term数据类型AGDATERM现在需要一个额外的构造函数AGDATERMLIT获取如下定义的反射文字(带有适当的内置Nat、Float等类型的绑定)。data Literal:设置位置nat:nat(自然)字面意义的float:浮点字面意义的char:字符字面意义的string:字符串字面意义的qname:Q名称字面意义的{-#BUILTIN AGDALITERAL文字#-}{-#BUILTIN AGDALITNAT地址#-}{-#BUILTIN AGDALITFLOAT浮点#-}{-#BUILTIN AGDALITCHAR字符#-}{-#BUILTIN AGDALITSTRING字符串#-}{-#BUILTIN AGDALITQNAME qname#-}引用(quoteGoal或quoteTerm)时,文字将映射到AGDATERMLIT构造函数。以前引用的是自然数文字引用了suc/zero应用程序和其他文字AGDATERMUNSUPPORTED公司。*函数定义的新反射内置。AGDAFUNDEF现在应该映射到如下定义的数据类型(带有{-#BUILTIN QNAME QNAME#-}{-#BUILTIN ARG精氨酸#-}{-#BUILTIN AGDATERM术语#-}{-#BUILTIN AGDATYPE类型#-}{-#BUILTIN AGDALITERAL文字#-})。数据模式:设置位置con:Q名称列表(Arg模式)图案dot:图案var:图案lit:文字图案项目:QName图案荒谬:模式{-#构建AGDAPATTERN模式#-}{-#构建AGDAPATCON con#-}{-#BUILTIN AGDAPATDOT点#-}{-#BUILTIN AGDAPATVAR变量#-}{-#BUILTIN AGDAPATLIT点亮#-}{-#BUILTIN AGDAPATPROJ项目#-}{-#BUILTIN AGDAPATABSURD荒谬#-}data子句:设置位置子句:列表(Arg模式)期限条款荒谬条款:列表(Arg模式)条款{-#BUILTIN AGDACLAUSE子句#-}{-#BUILTIN AGDACLAUSECLAUSE子句#-}{-#BUILTIN AGDACLAUSEABSURD荒谬条款#-}data FunDef:设置位置fun-def:类型列表子句FunDef(功能定义){-#BUILTIN AGDAFUNDEF函数定义#-}{-#BUILTIN AGDAFUNDEFCON函数定义#-}*为扩展(模式匹配)lambda内置了新的反射。AGDATERM数据类型已使用构造函数进行了扩充AGDATERMEXTLAM:列出AGDACLAUSE列表(ARG AGDATERM)AGDATERM公司荒谬的lambdas(λ())被引用到带有荒谬子句的扩展lambdas。*未引用声明。现在可以使用新的unquoteDecl声明unquoteDecl x=e这里e的类型应为AGDAFUNDEF,并计算为闭合值。此值然后拼接为x的定义。在主体e中,x的类型为QNAME它允许您拼接递归定义。标准修饰符(如固定性声明)可以应用于x as预期。*引用的级别人群水平现在被正确引用,而不是被引用给阿格达索特无支撑。然而,集合ω仍然得到不支持的排序。*模块申请人现在可以成为操作员申请。例子:假设[_]:A->B模块M(b:b),其中模N(a:a)=M[a][见第1245期。]*模块应用程序语义中的微小更改。[第892期]在实例化模块。例如模块A,其中f=。。。模块B(X:设置),其中公开公开模块C=B Nat在本例中,C.f是A.f的别名,因此如果A和C都打开了f不会模棱两可。然而,当A和B共享一些模块参数(第892期)。为了解决这个问题,C现在定义了自己的f的副本(计算为A.f),这意味着打开A和C结果在模糊的f中。类型检查=============*递归记录需要声明为归纳或共归纳。“inductive”不再是递归记录的默认值。示例:记录_×_(A B:设置):设置位置构造函数__领域fst:答序号:B记录树(A:Set):Set where感应的构造函数树领域元素:A子树:列表(树A)记录流(A:Set):Set where共性的施工员_::_领域头部:A尾部:流A如果你使用的是老式(音乐)制作,唱片可能有自相矛盾地被宣布为归纳。记录流(A:Set):Set where归纳法——是的,这是有意的!构造函数_领域头部:A尾部:∞(流A)这是因为“coinduction”发生在“∞”的用法中,而不是“record”的用法。工具=====Emacs模式----------*新的菜单选项“Display”(显示)可用于显示正在运行的Agda进程。LaTeX后端-------------*添加了新的实验选项“references”。指定时,即。:\usepackage[参考]{agda}提供了一个名为\AgdaRef的新命令,它允许您引用以前的排版命令,例如:让我们假设\AgdaRef{apa}。\开始{code}假设apa:设置\结束{code}上述“apa”的排版(突出显示)与文本中的相同代码,前提是使用src/data/postprocess-latex.pl,例如:cp$(目录名$(目录名称$(agda-mode-locate))/postprocess-latex.pl。agda-i-乳胶示例。agda镉胶乳/perl/后处理文本.pl Example.tex>已处理的示例mv示例.processed Example.texxelatex示例.texMix-fix和unicode应按预期工作(unicode需要XeLaTeX/LuaLaTeX),但存在局限性:+如果存在多个标识符,则应避免重载标识符\AgdaRef将根据找到的第一个进行排版。+如果需要引用,则只使用当前模块其他模块中的标识符,然后需要指定其他模块,即\AgdaRef[module]{identifier}。--------------------------------------------------------------------------Agda 2版本2.4.0.2的发行说明------------------------------------------------------------------------自2.4.0.1以来的重要变化:*Agda输入模式现在支持字母super和subscripts,除了已经存在的数字之外。[第1240期]*新功能:交互式分割结果。未给定变量的Make case(C-C C-C)尝试在结果引入投影模式。这个洞需要当然是记录类型。测试:{AB:Set}(A:A)(B:B)A×B测试a b=?结果分割?将产生新的条款:项目(测试a b)=?项目(测试a b)=?如果孔是以记录类型结尾的函数类型,则需要分割之前将引入模式变量。因此从以下开始可以获得相同的结果:测试:{AB:Set}(A:A)(B:B)A×B测试=?*到目前为止尚未记录的ETA杂注如果应用于不是记录的定义。ETA可用于强制递归记录类型的ETA-equality,Agda没有为其自动启用eta。下面是这样一个例子:相互的data Colist(A:设置):设置位置[]:大肠杆菌A_Ş_:A→ ∞大肠杆菌A大肠杆菌Arecord∞Colist(A:集合):集合,其中共性的构造函数延迟现场人员:Colist A开放式大肠杆菌{-#ETA∞大肠杆菌#-}测试:{A:Set}(x:∞大肠杆菌A)x≡延迟(力x)测试x=回流注:ETA的不安全使用可能导致Agda循环,例如通过触发无限eta扩展!*修复了Bug(请参阅https://code.google.com/p/agda/issues):1203120512091213121412161225122612311233123912411243--------------------------------------------------------------------------Agda 2版本2.4.0.1的发行说明------------------------------------------------------------------------2.4.0以来的重要变化:*选项--compile-no-main已重命名为--no-main。*现在可以为记录提供COMPILED_DATA杂注。*各种错误修复。--------------------------------------------------------------------------Agda 2 2.4.0版的发行说明------------------------------------------------------------------------自2.3.2.2以来的重要变化:安装和基础设施===============================*一个名为Agda的新模块。引入了原语。本模块对所有用户都可用,即使未使用标准库。目前,该模块包含级别基元及其使用MAlonzo编译时,在Haskell中表示:中缀6_⊔_假设级别:设置lzero:液位lsuc公司:(Ş:水平)水平_⊔_ : (ℓ₁ ℓ₂ : 水平)水平{-#COMPILED_TYPE级别()#-}{-#编译lzero()#-}{-#编译lsuc(\_->())#-}{-#编译_⊔_(\__->())#-}{-#构建级别#-}{-#构建级别零lzero#-}{-#构建级别SUC lsuc#-}{-#建筑标高最大值_⊔_#-}要将这些声明纳入范围,可以使用声明如下所示:开放式进口Agda。原语用法(Level;lzero;lsuc;_⊔_)标准库重新导出这些原语(使用名称零和suc,而不是lzero和lsuc)。使用宇宙多态性的现有开发现在可能触发以下错误消息:内置物LEVEL的重复绑定,上一个绑定到.Agda.原始。水平要解决此问题,请删除重复的绑定。技术细节(可能与建造Agda的人员有关包装):包含路径现在始终包含一个目录<DATADIR>/lib/prim,这个目录应该包含一个子目录Agda包含文件Primitive.agda。<DATADIR>的标准位置是系统和特定于安装。例如,在cabal中--用户安装Agda-2.3.4在标准的单ghc Linux系统上$HOME/.cabal/share/Agda-2.3.4或类似内容。<DATADIR>目录的位置可以配置为使用Cabal标志(--datadir和--datasubdir)编译时。也可以在运行时使用Agda_datadir设置位置环境变量。实用程序和选项===================*Pragma NO_TERMINATION_CHECK放置在一个相互块内现在是应用于整个相互块(而不是被丢弃无声)。添加到用途1.-4。在发行说明中概述对于2.3.2,我们允许:3a、。跳过老式的相互封锁:“相互”中的某个地方块位于类型签名或第一个函数子句之前。相互的{-#NO_TERMINATION_CHECK#-}抄送:Ac=dd:答d=c*新选项--无图案匹配禁用所有形式的模式匹配(对于当前文件)。您仍然可以导入使用模式匹配的文件。*新选项-v配置文件:7打印阿格达在哪些阶段花费的时间的一些统计数据。(由于垃圾收集,数字可能不太可靠可能是因为哈斯克尔的懒惰。)*新选项--无尺寸类型选项--sized-types现在是默认选项。--no-sized-types将关闭对用于对大小类型进行子类型划分的数据类型。语言========*实验功能:quoteContext有一个新的关键字“quoteContext”,使用户可以访问当前本地上下文中的名称列表。例如:打开导入数据。国家打开导入数据。列表打开导入反射foo:ℕ→ℕ→ℕfoo 0 m=0foo(sucn)m=quoteContext xs in?在剩下的目标中,列表xs将由两个名称组成,n和m、 对应于两个局部变量。目前还没有可以访问let bound变量--可以添加此功能未来。*实验特点:变量。函数子句现在可能具有不同的arity,例如。,总计:ℕ → 设置总和0=总和(sucn)=ℕ → 总和n总和:(n:ℕ) → ℕ → 总和n总和0 acc=acc总和(suc n)acc m=总和n(m+acc)或者,T:布尔设置T真=布尔T假=布尔布尔f:(b:布尔)T b类f假真=假f false false=truef真=真此功能是实验性的。但不受支持:*变量arity和“with”。*根据Haskell、JS或Epic的不同arity编译函数。*实验特征:共模式。(使用选项“copatterns”激活)现在,我们可以通过解释如果您进行投影会发生什么来定义记录记录。例如:{-#选项--共模式#-}记录_×_(A B:设置):设置位置构造函数__领域频率:A序号:B打开_×_对:{A B:集}A类B类A×Bfst(a对b)=asnd(a对b)=b交换:{AB:Set}A×BB×Afst(交换p)=snd psnd(交换p)=fst pswap3:{A B C:设置}A×(B×C)C×(B×A)fst(swap3 t)=snd(snd t)fst(snd(swap3t))=fst(SNdt)snd(snd(swap3 t))=fst t在左手侧进行投影(lhs)称为投影模式,应用于模式称为应用程序模式。(替代术语:投影/应用程序模式。)在第一个示例中,如果将符号“pair”应用于变量模式a和模式b,然后通过fst投影,减少为a。“pair”本身并不减少。典型的应用是共性记录,如流:记录流(A:Set):Set where共性的领域头部:A尾部:流A开放流重复:{A:Set}(A:A)->流A头部(重复a)=a尾部(重复a)=重复a同样,“重复a”本身不会减少,但您可以一个突出部分(头部或尾部),然后它将减少到各自的相对湿度。通过这种方式,我们得到了懒惰减少行为避免循环同余程序所必需的。应用程序模式不需要是琐碎的(即变量图案),如果我们与投影图案混合。例如,我们可以nats:Nat->流Nat水头(自然值为零)=零尾部(nats zero)=nats zer0头部(nats(suc x))=x尾部(nats(suc x))=nats x下面是一个示例(不涉及复制)具有函数类型字段的记录:--国家monad记录状态(S A:设置):设置其中构造函数状态领域运行状态:SA×S开放状态--Monad类型类记录Monad(M:设置Set):Set1,其中构造函数monad领域返回:{A:Set}A类机械制造商协会_>>=_:{AB:集合}机械制造商协会(A)月B)M B公司--State是Monad的一个实例--演示投影和应用程序模式的交错stateMonad:{S:Set}莫纳德(S州)runState(Monad.return stateMonad a)s=a,s运行状态(Monad._>>=_ stateMonad m k)s₀ =让a,s₁ = 运行状态ms在runState(ka)s中模块MonadLawsForState{S:Set}其中打开Monad(stateMonad{S})leftId:{AB:Set}(A:A)(k:A状态S B)(返回a>>=k)≡kaleftId a k=回流rightId:{AB:Set}(m:状态SA)(m>>=返回)≡mrightId m=回流关联:{ABC:Set}(m:状态SA)(k:A状态S B)(l:B州S C)((m>>=k)>>=l)≡(m>>=λa(k a>>=l)assoc m k l=参考Copatterns还处于实验阶段,以下操作不起作用:*Copatterns和“with”子句。*将copatterns编译为Haskell、JS或Epic。*由生成的投影打开R{{…}}尚未在lhss上正确处理。*存在copattern时转换检查速度较慢,因为记录类型的固定定义不再计算在内作为中性,因为它们可以通过应用投影来脱开。因此,目前比较两个中性点需要比较所有中性点他们预测,这会重复很多工作。*不再需要顶级模块。顶级模块可以从Agda文件中省略。模块名称为然后通过删除路径和.agda从文件名推断扩展。因此,在/a/B/C.agda中定义的模块将获得名称C。您还可以通过编写模块_其中这也适用于参数化模块。*模块参数现在始终是投影中的隐藏参数。例如:模块M(A:设置),其中记录生产(B:集合):集合,其中构造函数__领域fst:答序号:B公开生产公共打开M现在,fst和snd的类型是fst:{A:Set}{B:Set}产品A BA类snd:{A:Set}{B:Set}产品A BB类在2.3.2之前fst:(A:集合){B:集合}产品A BA类snd:(A:集合){B:集合}产品A BB类这一改变是朝向构造器和投影的对称性迈出的一步。(构造函数总是将模块参数作为隐藏参数)。*望远镜:望远镜现在接受局部绑定模块、函数类型和lambda抽象。望远镜的语法被扩展为支持“let”:id:(让★ = 设置)(A:★) → A类A类id A x=x特别是现在可以“打开”望远镜内的模块:星形模块,其中★ : 设置★ = 设置MEndo模块(打开星形)(A:★) 哪里Endo公司:Endo=AA类最后,提供了打开模块的快捷方式:模块N(开放星形)(A:★)(打开MEndo A)(f:Endo)其中...后者的语义是模块_其中开放之星模块_(A:★)哪里打开MEndo A模块N(f:Endo),其中...伸缩的语义让函数类型和lambda抽象只是将它们扩展为普通的let。*lets中更自由的左侧[第1028期]:现在您可以在左侧编写let绑定的参数没有类型签名。例如,设fx=f0中的sucx但是,让绑定函数仍然无法进行模式匹配。*模式中模棱两可的名称现在得到了乐观的解决施工人员数量。[Issue 822]特别是,以下内容现在成功了:模块M,其中data D:设置哪里[_]:设置D类假设[_]:集合设置打开MFoo:_设置Foo[A]=A*模块公开的匿名位置。[第848期]<条款>f args=rhs模块_望远镜,其中身体<更多子句>表示以下(不正确的Agda代码,因为您不能将模块中间子句)<条款>{arg-telescope}望远镜模块,其中身体f args=rhs<更多子句>例子:A:设置1A=B模块_其中B:设置1B=设置C:集合1C=B*内置ZERO和SUC已与NATURAL合并。当绑定NATURAL内建时,ZERO和SUC被绑定到适当的构造函数。这意味着,不是写作{-#构建自然自然#-}{-#构建零#-}{-#构建SUC SUC#-}你只要写{-#构建自然自然#-}*模式同义词现在可以有隐式参数。【第860期】例如,图案尾={x}xs=xбxs镜头:{A}列表A国家长度[]=0len(tail=xs)=1+len xs*语法声明现在可以有隐式参数。[第400期]例如id:{a}{a:设置a}->a->aid x=x语法id{A}x=x∈A*轻微的语法更改*-}现在被解析为结束注释,即使没有开始注释。因此,以下定义给出了一个解析错误f:{A-:集合}->集合f{A-}=A-因为Agda现在看到ID(f)LBRACE ID(A)END-COMMENT,并且没有更长的ID(f)LBRACE ID(A-)RBRACE。其原因是之前的词法是上下文敏感的,试图使用{-和-}注释f会导致解析错误。*固定性(结合强度)现在可以是负数嗯。[第1109期]中缀-1 _myop_*现在允许在相互块中进行推测。[第977期]*现在允许块的位置为空。【第947期】*现在,参数化模块中允许使用模式同义词。[第941期]*现在允许在模块指令中使用空的隐藏和重命名列表。*使用、隐藏、重命名和public的模块指令现在可以出现在任意命令。允许多次使用/隐藏/重命名指令,但你仍然不能同时使用和隐藏(因为这并不意味着感官)。[第493期]目标和错误显示======================*错误消息“拒绝构造无限项”删除后,将得到未解决的元变量。原因:错误被过度抛出。[第795期]*如果交互式案例拆分失败并显示消息由于目标已解决,因此不支持进一步的案例区分;改为尝试“求解约束”然后将关联的交互元分配给解决方案。按C-C C-=(显示约束)查看解决方案和C-C C-s(解决约束)以应用它。[第289期]类型检查=============*[issue 376]在元分配期间实现了绑定记录变量的扩展。现在,Agda可以求解应用于投影变量的元X,例如:X(fst z)(snd z)=zX(fst z)=fst z从技术上讲,这是通过用fresh替换z(x,y)来实现的绑定变量x和y。这里是示例的完整代码:记录Sigma(A:集合)(B:A->集合):集合,其中构造函数__领域fst:答序号:B fst开放西格玛测试:(A:设置)(B:A->设置)->设X:(X:A)(y:Bx)->西格玛A BX=_in(z:Sigma A B)->X(fst z)(snd z)≡z测试A B z=ref测试':(A:设置)(B:A->设置)->设X:A->AX=_in(z:Sigma A B)->X(fst z)≡fst ztest‘A B z=回流新绑定变量名为fst(z)和snd(z),可以出现在错误消息中,例如:失败:(A:设置)(B:A->设置)->让X:A->Sigma A BX=_in(z:Sigma A B)->X(fst z)≡z失败A B z=ref导致错误:无法将元变量_7实例化为解决方案fst(z)、snd(z)因为它包含的变量snd(z)不在元变量或与元变量无关但与解决方案检查表达式refl是否具有类型_7 A B(fst z)≡z时*copatterns的依赖记录类型和定义需要在检查当前子句。[第907期]举一个简单的例子,考虑测试:{A}∑自然λn兽医项目测试=零项目测试=[]对于第二个子句,lhs和rhs的类型为项目测试:Vec A(项目测试)[]:Vec A零为了使这些类型匹配,我们必须减少lhs类型第一个function子句。请注意,终止检查是在类型检查之后进行的,因此小心避免非终止!否则,类型检查器可能会进入一个无限循环。*原语primTrustMe的实现已更改。现在只有当两个参数x和y具有相同的计算范式。以前,当x和y在定义上是相等的,其中包括类型定向平等法,如eta-equality。然而,因为减排非类型化的调用转换导致Agda崩溃[第882期]。primTrustMe的修订描述如下(参见2.2.6的发行说明):primTrustMe:{A:Set}{xy:A}x≡y这里_≡_是内置等式(参见builtin hooks for equality,以上)。如果x和y具有相同的计算范式,那么primTrustMe{x=x}{y=y}减少为refl。关于primTrustMe运行时行为的注释:MAlonzo编译器用REFL内置,不检查定义是否相等。不正确使用primTrustMe可能会导致分段错误或类似错误编译代码的问题。*记录类型的隐式模式现在只有在以下情况下才能扩展是记录构造函数。[第473、635期]data D:设置位置d:d数据P:D设置位置p:p天记录Rc:设置位置构造函数c字段f:D作品:{r:Rc}P(卢比)设置工程p=D由于隐式模式{r}被扩展为{c x},这允许p的类型减少到p x并且x为与d统一。相应的显式版本为:作品:(r:Rc)P(接收频率)设置工程'(c.d)p=d然而,如果删除了记录构造函数,则相同的示例将失败:记录R:设置位置字段f:D失败:{r:r}P(相对湿度)设置失败p=D--d!=D型R.f R--当检查模式p是否为p(R.f R)类型时这个错误是有道理的,因为我们没有可以写下来的模式对于r来说,它必须看起来像记录{f=.d}但匿名记录模式不是语言的一部分。*不同源位置的荒谬lambdas不再不同。[第857期]特别是,现在要检查以下代码类型:荒谬品质:_≡_{A=≠→ ⊥} (λ()) λ()荒谬质量=refl这是一件好事!*打印命名隐式函数类型。在包含绑定变量的上下文中打印术语时,Agda重命名为new绑定以避免与以前绑定的名称冲突。例如,如果A在范围内,类型(A:Set)A打印为(A₁ : 设置)A类₁. 然而,对于隐式函数类型,绑定的名称很重要,因为它可以是在给出隐式参数时使用。针对这种情况,引入了以下新语法:{x=y:A}B是一个隐式函数类型,其绑定变量(在范围内在B)中是y,但其中参数的名称是x明确给出。例如,范围中有A时,类型{A:Set}A类现在打印为{A=A₁ : 集合}A类₁.此语法仅在打印时使用,当前未进行分析。*更改了--without-K的语义。[第712期,第865期,第1025期]--without-K的新规范:启用--without-K时,统一模式匹配索引有两种限制:1.形式为x==x的自反方程不再求解,而是Agda当遇到这样的方程时给出错误。2.当统一两个相同头的构造函数时,形成类型的“c us”和“c vs”“D pars ixs”,数据类型索引ixs(而不是参数)必须是“自统一的”,即ixs与自身的统一应该成功积极地。由于第1点,这是一个重要的要求。示例:*接受J规则。J:{A:Set}(P:{xy:A})x≡y设置)(∀xP(回流x))∀{xy}(x≡y:x≡y)P x≡yJ P P(ref x)=P x这个定义是可以接受的,因为x和y的统一不需要删除或注入。*K规则被拒绝。K:{A:Set}(P:{x:A})x≡x设置)(∀xP(反射{x=x}))∀{x}(x≡x:x≡x)P x≡xK P P回流=P_定义被拒绝,出现以下错误:无法消除类型A的自反方程x=x,因为K具有已禁用。当检查模式ref是否为x≡x类型时*新标准的对称性。测试₁ : {千分之一:ℕ} → k+l≡m→ ℕ测试refl=零测试₂ : {千分之一:ℕ} → k≡l+m→ ℕ测试refl=零这两个版本现在都被接受了(以前只有第一个版本被接受)。*参数处理。主观性:{A:Set}(xy:A)(x|[])≡(y|[]])x≡y主观x.x refl=refl参数不统一,因此被新标准忽略。*一个更大的例子:≤的反对称性。数据≤:ℕ → ℕ → 设置位置lz:(n:ℕ) → 零≤nls:(m n:ℕ) → m≤nsuc m≤suc n≤-反对称:(m n:ℕ) → m≤nn≤mm≡n≤-反对称zero.zero(lzzero)(lzzero)=反射≤-反对称。(例如m)。(例如n)(ls m n p)(ls n m q)=cong-suc(≤-反对称m n p q)*[第1025期]假设mySpace:Set假设myPoint:mySpace数据Foo:myPoint≡myPoint设置位置foo:foo回流测试:(i:foo≡foo)i≡ref测试ref={!!}将内射性应用于“foo-ref”类型的方程“foo≡foo”时,检查“myPoint≡myPoint”类型的索引ref为自我统一的。等式“ref≡ref”再次需要注入性,因此现在检查索引myPoint的自统一性,因此出现错误:无法消除类型的自反方程myPoint=myPointmySpace,因为K已被禁用。检查模式ref是否具有类型foo≡foo时终止检查====================*一个bug设施创造了“矩阵形订单”,支持未嫁接函数(采用参数元组而不是一个一个接一个的参数)已从终止中删除检查程序。[第787期]*未通过终止检查的定义不会展开更长的时间以避免Agda中的循环或堆栈溢出。然而只有在以下情况下才会调用相互块的终止检查器类型检查,因此如果定义非终止功能。但现在进行了终止检查在其他补充检查之前:阳性、极性、,内射性和投影相似性。注意,使用杂注{-#NO_TERMINATION_CHECK#-}可以Agda将任何功能视为终止。*对“with”定义的函数的终止检查已得到改进。先前要求的情况——终止深度不再通过终止检查程序(由于使用了“with”)需要旗帜。例如合并:列表A列表A列表A合并[]ys=ys合并xs[]=xs合并(x|xs)(y|ys)与x≤y合并(x|xs)(y|ys)|假=y|合并归并(x|xs)(y|ys)|真=x|归并xs(y}ys)由于“with”扩展为辅助功能merge-aux:merge-aux x y xs ys false=yбmerge(xбxs)ysmerge-aux x y xs ys true=xбmerge xs(yбys)此函数调用merge,其中一个参数的大小正在增加。要使此过程通过,终止检查器现在内联在检查之前定义merge-aux,从而有效终止检查原始源程序。由于此转换,不再对变量执行“with”保留终止。例如,这不会进行终止检查:坏:Nat国家坏n和n…|zero=zero…|suc m=错误m*终止检查器的性能得到了改进。对于终止深度越高,改进越显著。虽然默认的--termination-depth仍然是1,但使用进行检查更高的终止深度现在应该是可行的。编译器后端=================*MAlonzo编译器后端现在支持编译模块不是完整的程序(即没有主功能)。这个目标是你可以用Agda编写程序的一部分,其余的用并从Haskell代码调用Agda函数。这个为此添加了以下功能:*一个新的命令行选项--compile no main:命令agda—编译-非主测试.agda将把Test.agda及其所有依赖项编译到Haskell和使用--make编译生成的Haskell文件,但(不同于--compile)不要告诉GHC将Test.hs作为主模块。这个可以通过自定义agda2-backend变量的值MAlonzoNoMain,然后调用“C-C C-x C-C”如前所述。*MAlonzo FFI增加了一个新的杂注COMPILED_EXPORT。如果我们有一个包含以下内容的Agda文件:模块A.B,其中测试:SomeTypetest=some实现{-#COMPILED_EXPORT测试someHaskellId#-}然后将测试编译为一个名为MAlonzo模块中的someHaskellId。代码。可以从调用的A.B其他Haskell代码。其类型将根据正常的MAlonzo规则。工具=====Emacs模式----------*添加了新的目标命令“助手功能类型”(C-C C-h)。如果您在目标中编写未定义函数的应用程序,则HelperFunction Type命令将打印函数需要的类型让它符合目标。该类型也被添加到Emacs kill-ring并可以使用C-y粘贴到缓冲区中。应用程序的格式必须为“f args”,其中f是要创建的helper函数。参数可以使用所有正常命名隐式或实例参数等功能。例子:这是一个关于向量的天真反转的开始:反面:{An}兽医维生素A n反向[]=[]反向(xxs)={!snoc(反向xs)x!}在球门打印中调用C-C C-h斯诺克:{A}{n}兽医A类Vec A(例如)*新的命令“解释为什么特定名称在范围内”(C-C C-w)已经补充。[第207期]此命令可以从目标或顶层调用,并将作为name建议解释为什么特定名称在范围内。对于给定名称可以引用跟踪的每个定义或模块打印所有打开的语句和返回到名称的原始定义。例如,给定模块A(X:设置₁) 哪里data Foo:设置位置mkFoo:Foo模块B(Y:设置₁) 哪里公开A Y模块C=B组打开C在顶层打印时调用mkFoo上的C-C C-wmkFoo的范围是*构造函数Issue207.C._。Foo.mkFoo被纳入范围-第207期C的开幕式。agda:13,6-7-B在第207号问题上的应用。agda:11,12-13-A在第207号问题上的应用。agda:9,8-9-其定义见第207期。agda:6,5-10如果Agda投诉名称不明确,并且您需要找出如何隐藏不想要的解释。*对“make case”命令(C-C C-C)的改进-现在还可以使用名称拆分隐藏的变量(以.开头)。使用C-C C-查看上下文中的所有变量。-关于生成条款的打印:*使用命名隐式参数提高可读性。*当可以选择时,选择显式引用而不是隐式引用变量的结合位点。*通过替换点模式避免隐式位置中的绑定变量它通过通配符(.)使用它们。*许多“数学”字符的键绑定(示例:𝐴𝑨𝒜𝓐𝔄)已添加到Agda输入法中。示例:键入\MiA\MiA\McA\McA\MfA以获取𝐴𝑨𝒜𝓐𝔄.注意:\McB在unicode中不存在(以及其他这种风格的代码),但\MC(粗体)字母表是完整的。*“黑板粗体”B的键绑定(𝔹) 和0-9(𝟘-𝟡) 已添加Agda输入法(\bb和\b[0-9])。*控制简化/规范化的关键绑定:[TODO:应该在某个地方解释简化。]像“目标类型和上下文”(C-C C-,)这样的命令以前可以是以两种方式调用。默认情况下,输出是正常的,但如果使用了前缀参数(例如通过C-u C-C C-,),然后没有进行显式归一化。现在有三种选择:*默认情况下(C-C C-,)输出被简化。*如果C-u只使用一次(C-u C-C C-,),则结果为既没有(明确)规范化也没有简化。*如果C-u使用两次(C-u C-u C-C C-,),则结果为正常化。[TODO:作为Agda 2.3.4版本的一部分应该更新wiki。]LaTeX后端-------------*agda.sty中添加了两个新的配色方案选项:\usepackage[bw]{agda},以黑白突出显示;\usepackage[conor]{agda},它使用conor的颜色高亮显示。默认情况(未传递任何选项)是使用标准颜色。*如果乳胶环境中找不到agda.sty,则现在是改为复制到latex输出目录(默认为“latex”)工作目录的。这意味着需要现在生成PDF是agda—乳胶-i<文件>.lagda镉胶乳pdflatex<文件>.tex*特别是,LaTeX后端变得更加不依赖于工具XeLaTeX和LuaLaTeX现在应该可以工作了(test/latex-backend/success/UnicodeInput.lagda):\文档类{article}\使用包{agda}\开始{文档}\开始{code}数据αβγδεζθκλμνξρστνφχψω:设置哪里假设→⇒⇛⇉⇄↦⇨↠⇀⇁ : 设置\结束{code}\[∀X[∅∉X⇒ ∃f: X(X)⟶ ⋃ X∈A(f(A)∈A)]\]\结束{文档}编译如下,它应该会产生一个好看的PDF(用测试TeX Live 2012):agda—乳胶<文件>.lagda镉胶乳xelatex<file>.tex(或lualatex<file>.tex)如果缺少符号或xelatel/lualatex投诉字体缺少,请尝试使用设置其他字体:\setmathfont{<math-font>}使用fc-list工具列出可用字体。*为标识符的超链接添加实验支持如果hyperref乳胶包装在agda包装之前装载,并且链接选项传递给agda包,然后传递给agda包提供了一个名为\AgdaTarget的函数。已经用户声明的目标将成为文档的其余部分。这是一个小例子(test/latex-backend/success/Links.lagda):\文档类{article}\使用包{hyperref}\usepackage[链接]{agda}\开始{文档}\Agda目标{ℕ}\Agda目标{zero}\开始{code}数据ℕ : 设置位置零:例如:ℕ → ℕ\结束{code}有关如何定义\AgdaFunction{two}(不会变成链接,因为目标尚未定义)。我们可以做到虽然手动;\超链接{two}{\AgdaDatatype{two{}}。\newpage(新页面)\Agda目标{two}\超目标{2}{}\开始{code}两个:2=吸尘器(吸尘器为零)\结束{code}\AgdaInductiveConstructor{zero}的类型为\Agda数据类型{ℕ}\AgdaInductiveConstructor{suc}尚未定义为成为目标,这样它就不会变成链接。\新页面现在已经定义了\AgdaFunction{two}的目标,链接自动工作。\开始{代码}data Bool:设置位置对错:布尔\结束{code}AgdaTarget命令将列表作为输入,可以具体目标如下:\AgdaTarget{if,then,else,if \ _then \ _else \ _}\开始{code}if_then_else_:{A:设置}布尔A类A类A类如果为true,则t其他f=t如果为false,则t否则f=f\结束{code}\newpage(新页面)Mixfix标识符需要转义下划线:\AgdaFunction{if\_then\_else \_}。\结束{文档}可以使用超引用来抑制链接周围的边框隐藏链接选项:\使用包[hidelinks]{hyperref}请注意,当前的链接方法没有跟踪范围或类型,因此重载的名称可能会创建指向去错地方了。因此,建议不要重载名称当前使用links选项时,这可能会在未来。--------------------------------------------------------------------------Agda 2版本2.3.2.2的发行说明------------------------------------------------------------------------自2.3.2.1以来的重要变化:*修复了一个错误,该错误有时使在上使用Emacs模式变得棘手Windows[问题757]。*使用一些库的更新版本构建Agda。*修复了导致不明确解析错误消息的错误[问题147]。--------------------------------------------------------------------------Agda 2版本2.3.2.1的发行说明------------------------------------------------------------------------自2.3.2以来的重要变化:安装============*使Agda与更新版本的hashable、QuickCheck和Win32。*不包括mtl-2.1。类型检查=============*修复了终止检查程序中的错误(问题754)。--------------------------------------------------------------------------Agda 2版本2.3.2的发布说明------------------------------------------------------------------------自2.3.0以来的重要变化:安装============*Agda-executable软件包已删除。可执行文件现在作为Agda包的一部分提供。*Emacs模式不再依赖于haskell-mode或GHCi。*Emacs模式Lisp文件的编译。现在可以通过运行“agda-mode”来编译Emacs模式的Lisp文件compile”。此命令由“makeinstall”运行。在某些情况下,编译可以显著加快速度。警告:如果重新安装Agda模式而不重新编译Emacs Lisp文件,那么Emacs可以继续使用旧的编译后的文件夹。实用程序和选项===================*--without-K检查现在重建构造函数参数。--without-K的新规范:如果标志被激活,那么Agda只接受箱裂。如果要分割的变量类型是D pars ixs,其中D是数据(或记录)类型,pars代表参数,和ixs指数,则必须满足以下要求满意的:*索引ix必须是构造函数(或文字)的应用程序不同的变量。构造函数通常不适用于参数,但用于此检查构造函数参数被视为其他参数。*这些不同的变量在pars中不能是自由的。*现在,不相关的参数默认打印为_。打开打印无关参数,使用选项--显示相关项*新增:Pragma NO_TERMINATION_CHECK用于关闭终端检查器用于单独的功能定义和相互块。杂注必须位于函数定义或相互块之前。示例(参见test/success/NoTerminationCheck.agda):1.跳过单个定义:在类型签名之前。{-#NO_TERMINATION_CHECK#-}答:答a=a2.跳过单个定义:在第一个子句之前。b:答{-#NO_TERMINATION_CHECK#-}b=b3.跳过老式的mutual块:在“mutual”关键字之前。{-#NO_TERMINATION_CHECK#-}相互的抄送:Ac=dd:答d=c4.跳过一个新型的mutual block:类型之前的任意位置签名或块中的第一个函数子句i:Aj:答i=j{-#NO_TERMINATION_CHECK#-}j=i杂注不能在--safe模式下使用。语言========*让绑定记录模式记录_×_(A B:设置):设置位置构造函数__领域fst:答序号:B打开_×_设(x,(y,z))=t单位:u现在将被解释为设x=fst ty=fst(snd t)z=snd(snd t)单位:u请注意,t的类型需要是可推断的。如果您需要提供类型签名,您可以编写以下内容:让a:。。。a=t(x,(y,z))=a单位:u*模式同义词模式同义词是可以在左侧使用的声明侧面(模式匹配时)和右侧(in表达式)。例如:模式z=零模式ss x=suc(suc x)传真:ℕ -> ℕf z=zf(suc z)=ss zf(ss n)=n模式同义词通过在抽象上进行替换来实现语法,所以定义是范围检查的,而不是类型检查的。他们对宇宙构建特别有用。*合格的mixfix操作员现在可以通过限定第一个操作符来使用限定的mixfix操作符名称的一部分。例如导入数据。Nat作为Nat导入数据。布尔作为布尔2=Bool.如果为true,则1 Nat.+1其他0*章节【第735期】。Agda现在将匿名模块解析为节:模块{a}(a:集合a),其中数据列表:设置位置[]:列表_●_:(x:A)(xs:List)列表module_{a}{a:设置一个},其中_++_:列表A列表A列表A[]++ys=ys(x|xs)++ys=x|(xs++ys)测试:列出Nat测试=(5|[])++(3|[]])一般来说,现在的语法模块_参数,其中声明被接受并具有与私有的模块M参数,其中声明打开M public换一个新名字M。*在打开的导入语句中实例化模块[问题481]。现在接受:打开导入路径。模块参数[使用/隐藏/重命名(…)]这只会从Path中引入导入的标识符。模块进入范围,不是模块本身!因此,以下内容毫无意义,并提出错误:导入路径。模块参数[使用/隐藏/重命名(…)]您可以通过为实例化模块指定私有名称M导入路径。模块参数为M[使用/隐藏/重命名(…)]打开导入路径。模块参数为M[使用/隐藏/重命名(…)]尽量避免将“as”作为参数的一部分as’不是关键字;以下可能是合法的,尽管有点模糊了Agda代码:以如下方式打开导入*隐式模块参数可以通过名称给定。例如。打开M{namedArg=bla}此功能已在Agda 2.3.0中引入。*共享同一类型的多个类型签名现在可以作为单个签名写入类型签名。一二:1=零二=suc一目标和错误显示======================*隐藏参数“arg”引入的元变量现在是打印为arg_number,而不是number。[第526期]*Agda在打印时扩展匿名模块中的标识符。应该让一些目标更易于阅读。[第721期]*当模块标识符不明确时,Agda会告诉您其中是一个数据类型模块。[第318、705期]类型检查=============*改进的覆盖检查程序。覆盖范围检查器打开具有构造函数或文字模式的参数,提交向最左翼分裂,取得进展。考虑向量的查找函数:数据Fin:Nat设置位置零:{n:Nat}翅片(例如)例如:{n:Nat}财务n翅片(例如)数据Vec(A:设置):自然设置位置[]:Vec A零_●_:{n:Nat}A类兽医Vec A(例如)_!!_ : {A:集合}{n:自然}兽医财务nA类(x|xs)!!零=x(xŞxs)!!suc i=xs!!在2.3.0之前的Agda中,此定义被拒绝,除非我们添加荒谬的条款[] !! ()这是因为覆盖率检查器在拆分时提交关于向量论点,尽管这不可避免地会导致覆盖失败,因为缺少空向量[]的案例。覆盖率检查器的改进包括提交只有在有机会覆盖的裂缝上,因为一切都有可能存在构造函数模式。因此,阿格达现在将分裂首先是Fin参数,因为零和suc的情况都是存在。然后,它可以在Vec参数上分裂,因为通过将n实例化为suc,已经排除了空向量。*实例参数解析现在将考虑以下候选项仍然需要隐藏参数。例如:记录等式(A:设置):设置其中场方程:AA类布尔打开等式{{…}}eqFin:{n:ℕ} → 等式(Fin n)eqFin=记录{eq=primEqFin}testFin:布尔testFin=等于fin1 fin2类型检查器现在将解析eq的实例参数函数设置为eqFin{_}。这只针对隐藏参数,而不是实例参数,以便实例搜索保持非递归状态。*约束解决:升级Miller模式以记录模式。[第456期]Agda现在解决应用于记录模式的元变量。一个典型的(但这里是人为的)案例是:记录Sigma(A:集合)(B:A->集合):集合,其中构造函数__领域fst:答序列号:B fst测试:(A:设置)(B:A->设置)->让X:Sigma A B->Sigma A-BX=_in(x:A)(y:Bx)->x(x,y)≡(x,y)测试A B x y=ref这产生了形式的约束_X A B(X,y):=t[X,y](t[x,y]=(x,y)),这不是Miller模式。然而,Agda现在解决了这个问题_X A B z:=t[fst z,snd z]。*更改:解决递归约束。[第585期]在2.3.0之前,Agda有时会推断出未通过终止检查器之后,甚至会使Agda循环。为了防止这种情况发生,occurrence检查现在还可以检查当前相互之间的定义块,以避免构造递归解。因此,也不再自动找到终止递归解决方案。这会影响递归计算递归函数的类型留给Agda解决。相互的T:D->设置T模式1=_T模式2=_f:(d:d)->T df模式1=rhs1f模式2=rhs2从现在起,这可能不再有效。参见示例test/fail/Issue585*.agda*不太急于引入隐式参数。[第679期]在Agda 2.3.0之前,迫切引入了跟踪隐藏参数在定义的左侧。例如,一个人不能测试:{A:Set}->设置测试=\{A}->A因为在内部,隐藏参数{A:Set}被添加到左侧,屈服测试{_}=\{A}->A引发了一个类型错误。现在,Agda只引入了拖尾为了保持函数的一致性,必须使用隐式参数arity公司。例如,在测试:布尔->{A B C:设置}->设置测试真{A}=A测试错误{B=B}=BAgda将在所有条款中引入参数A和B,但不引入参数C,导致测试:Bool->{ABC:Set}->Set测试真{A}{_}=A测试错误{_}{B=B}=B注意,为了检查where-clauses,仍然所有的尾部都是隐藏的参数在范围内。例如:id:{i:Level}{A:Set i}->A->Aid=我的id其中myId:所有{A}->A->AmyId x=x能够填写中的元变量_1myId:{A:Set_1}->A->A隐藏参数{i:Level}需要在范围内。由于更懒惰地引入了隐式参数,下面的代码现在通过了。数据单位:设置位置单位:单位T:单位设置T单位={u:单位}单位测试:(u:单位)带单元的测试单元…|_=λ{v}v(v)此前,Agda会热切地将隐藏参数{v}引入为未命名的左侧参数,无法引用它。相关问题655也已得到解决。现在可以了定义同义词name=表达式即使表达式类型以隐藏量词开头。简单示例:id2=身份这导致在2.3.0之前无法解决meta。*Agda检测未使用的参数并在相等期间忽略它们检查。[第691期,也解决了第44期。]Agda的极性检查器现在为参数分配“非变量”实际上没有使用(除了荒谬的匹配)。如果f的第一个参数是非变的,那么f x在定义上是相等的与f y无关,与x和y无关,这类似于无关,但不需要用户注释。例如,未使用的模块参数不再妨碍:模块M(x:Bool),其中不是:布尔布尔不正确=错误not false=真打开M trueopen M false重命名(not to not′)测试:(y:Bool)not y≡not′y测试y=ref与记录或荒谬模式匹配不算“使用”,所以我们得到了某种形式的无关性证明:data:设置位置record⊤:设置位置构造函数琐碎data Bool:设置位置对错:布尔正确:布尔设置真真=⊤真假=乐趣:(b:布尔)真b布尔fun true triffy=真fun false()测试:(b:布尔)(x y:真b)乐趣b x≡乐趣b y测试b x y=reftest/success/NonvariantPolarity.agda中的更多示例。虚参数:考虑记录和数据类型的参数`“使用”,即使它们实际上没有被使用。考虑:错误:Nat设置假零=错误(suc n)=错误n模块不变量,其中记录Bla(n:Nat)(p:False n):设置位置模块非变量,其中布拉:(n:国家)错误n设置Blan p=⊤即使记录“Bla”不使用其参数n和p被视为已使用,允许使用“幻影类型”技术。相反,函数“Bla”的参数被识别为未使用。如果我们打开了Invariant但没有解决,那么下面的代码会进行类型检查如果打开Nonvariant,则返回meta。下拉成功:{n:Nat}{p:False n}Bla(例如)pBlan p公司下降-成功_=_bla:(n:国家){p:错误n}Blan p公司→ ⊥bla零{()}bbla(sucn)b=bla n(drop-suc b)如果“Bla”被视为不变量,则递归中的隐藏参数调用可以推断为“p”。如果它被视为非变量,那么`Blan X=Blan p'不包含“X=p”和隐藏参数仍未解决。由于“bla”实际上并不使用其隐藏参数,它的价值并不重要,可以搜索。不幸的是,“bla”的极性分析只发生在type之后因此,检查“bla”在“p”中是非变量的信息是求解元变量时尚不可用。(参见测试/失败/断裂推断DuetoNonvariantPolarity.agda)*Agda现在扩展了简单的定义(一个子句,终止)检查函数是否以构造函数开头。【第747期】例如,以下操作现在也有效:MyPair:设置->设置->设置MyPair A B=配对A BVec:设置->自然->设置Vec A零=单位Vec A(sucn)=我的配对A(Vec A n)这里,Unit和Pair是数据或记录类型。编译器后端=================*-Werror现在可重写。要启用包含警告的Haskell模块的编译-MAlonzo后端的Werror标志已被重写。如果,例如,编译时传递了--ghc-flag=-Wwarn,可以获取放弃以下内容:data PartialBool:设置位置true:部分布尔{-#COMPILED_DATA PartialBool Bool True#-}默认行为保持原样,并拒绝上述行为程序。工具=====Emacs模式----------*异步Emacs模式。现在可以在对缓冲区进行类型检查时使用Emacs。如果缓冲区在type-checker运行时进行编辑,然后语法高亮显示将类型检查完成后不更新。*交互式语法突出显示。在对缓冲区进行类型检查时,将更新语法突出显示:•首先,缓冲区被粗略地突出显示(没有过载的定义信息施工人员)。•如果突出显示级别为“交互式”,则代码段目前正在进行类型检查的内容也被突出显示出来。默认值为“非交互”。)•当对共同块进行类型检查时,它会突出显示正确(此突出显示包括潜在的警告非终止)。可通过新配置控制突出显示级别可变agda2高亮级别。*现在可以一次执行多个案例分割。考虑以下示例:_==_:布尔布尔布尔b条₁ == b条₂ = {!!}如果你在“b”上分裂b条”,则会得到以下代码:_==_:布尔布尔布尔true==true={!!}真==假={!!}false==true={!!}false==false={!!}变量的顺序很重要。考虑以下代码:查找:{an}{a:设置a}兽医财务nA类查找xsi={!!}如果在“xsi”上拆分,则会得到以下代码:查找:{an}{a:设置a}兽医财务nA类查找[]()查找(xxs)零={!!}查找(xxs)(suc i)={!!}然而,如果在“ixs”上拆分,则会得到以下代码而是:查找:{an}{a:设置a}兽医财务nA类查找(xxs)零=?查找(xxs)(suc i)=?该代码被Agda 2.3.0拒绝,但被2.3.2接受,谢谢以改进覆盖率检查(见上文)。*Emacs模式现在显示有关哪个模块的信息当前正在进行类型检查。*新的全局菜单项:有关点处字符的信息。如果选中此条目,则有关位于的字符的信息显示点,包括(在许多情况下)关于如何键入字符。*注释/取消注释缓冲区的其余部分。现在可以通过键入以下内容对缓冲区的其余部分进行注释或取消注释C-C C-x M-;或选择菜单项“Comment/uncomment the缓冲区的其余部分”。*Emacs模式现在使用Agda可执行文件而不是GHCi。*ghci*缓冲区已重命名为*agda2*。引入了一个新的配置变量:agda2-program-name,Agda可执行文件的名称(默认情况下阿格达)。变量agda2-ghci-options已替换为agda2-program-args:为Agda可执行文件提供的额外参数(由默认为无)。如果你想限制Agda的内存消耗,你可以添加一些agda2-program-args的参数,例如+RTS-M1.5G-RTS。*Emacs模式不再依赖于haskell-mode。自定义了某些haskell-mode变量(例如haskell-ghci-program-args)可能希望更新其配置。LaTeX后端-------------一个实验性的LaTeX后端,可以精确地突出显示添加了HTML支持和代码对齐a la lhs2TeX。以下是输入文字Agda文件的示例:\文档类{article}\使用包{agda}\开始{文档}以下模块声明将隐藏在输出中。\阿格达·海德{\开始{code}模块M,其中\结束{code}}可以使用两个或多个空格使后端对齐。\开始{code}数据ℕ : 设置位置零:例如:ℕ→ℕ_+_ : ℕ → ℕ → ℕ零+n=nsuc m+n=suc(m+n)\结束{code}\结束{文档}要生成输出PDF,请发出以下命令:agda—乳胶-i<文件>.lagdapdflatex乳胶/<文件>.tex只处理最顶层的模块,与lhs2tex类似,与HTML支持。如果要处理导入的模块,则必须在每个模块上手动调用agda--latex。仍然存在与格式相关的问题,请参阅错误跟踪器更多信息:https://code.google.com/p/agda/issues/detail?id=697因此,默认agda.sty可能会更改为向后不兼容在努力解决这些问题的过程中。实现的功能:*可以使用两个或多个空格来强制对齐,例如使用lhs2tex。参见上述示例。*类型检查器生成的突出显示信息用于生成输出。例如,示例中的数据声明产生:\Agda关键字{data}\AgdaDatatype{ℕ} \Agda符号{:}\AgdaPrimitiveType{设置}\AgdaKeyword{其中}这些latex命令在agda.sty中定义(由\usepackage{agda})并导致高亮显示。*latex后端检查乳胶是否找到agda.sty环境,如果它不是默认的agda.sty是从agda的数据dir到工作目录中(因此可供乳胶环境)。如果默认的agda.sty不令人满意(颜色、字体、间距、,等)然后用户可以修改它并将其放置在乳胶环境可以找到它。希望大多数方面都应该可通过agda.sty修改,而无需调整实施。*--latex-dir可用于更改默认输出目录。--------------------------------------------------------------------------Agda 2 2.3.0版本的发布说明------------------------------------------------------------------------自2.2.10以来的重要变化:语言========*新的更自由的语法用于相互递归定义。不再需要使用“mutual”关键字来定义相互递归的函数或数据类型。相反,这足以在使用前先声明。而不是相互的f:答f=a[f,g]克:乙[f]g=b[f,g]你现在可以写了f:答克:乙[f]f=a[f,g]g=b[f,g]。有了新款式,您可以更自由地选择哪些内容进行了类型检查(以前的类型签名是始终在定义之前检查)。此外,您可以混合任意声明,例如模块和假设相互递归的定义。对于数据类型和记录,使用以下新语法将声明与定义分开:--声明。数据Vec(A:设置):自然Set--注意没有“where”。--定义。数据Vec A,其中[]:Vec A零点_::_:{n:Nat}A类兽医Vec A(成功)--声明。记录Sigma(A:设置)(B:A设置):设置--定义。记录Sigma A B,其中构造函数__字段fst:A序号:B fst当单独声明/定义私有或抽象时您应该将“private”关键字附加到声明和定义的“abstract”关键字。例如,一名私人,抽象函数可以定义为私有的f:答摘要f=e最后,值得注意的是仍然支持递归定义(它基本上可以分解为新风格)。*模式匹配lambdas。可以使用语法定义匿名模式匹配函数\{p11..p1n->e1;…;pm1..pmn->em}(其中,和往常一样,\和->可以替换为λ和→). 内部这被转换为以下形式的函数定义:.extlam第11页。。p1n=e1....extlam pm1。。pmn=em这意味着匿名模式匹配函数是生成性的。例如,ref不会被接受为该类型的居民(λ{真真实;假})≡(λ{真真实;错误}),因为对于一些不同的新名称extlam1和extlam2。目前,“where”和“with”结构不允许出现在(的顶级子句)匿名模式匹配函数。示例:和:布尔布尔布尔且=λ{真xx;错误_假}xor:布尔布尔布尔xor=λ{真真; 假假; _ _ 真的}fst:{A:Set}{B:A集合}∑A BA类fst=λ{(a,b)一个}snd:{A:Set}{B:A集合}(p:∑A B)B(fst p)snd=λ{(a,b)b}(b)*记录更新语法。假设我们有一个记录类型和相应的值:record MyRecord:设置位置领域a b c:旧:MyRecord旧=记录{a=1;b=2;c=3}然后我们可以更新以下方式:新建:MyRecordnew=记录旧{a=0;c=5}这里新的规范化为记录{a=0;b=2;c=5}。任何可以使用产生MyRecord类型值的表达式来代替旧的。不允许更新记录以更改类型:结果值必须具有与原始类型相同的类型,包括记录参数。因此,如果类型可以推断出原始记录的。记录更新语法在类型检查之前展开。表达记录旧的{up-fields}根据记录类型R进行检查,将其展开为设r=记录{new-fields}中的旧字段,其中旧的要求为R型,新的定义为如下:对于R中的每个字段x,-如果x=e包含在upd-field中,则x=e包括在新油田等-如果x是显式字段,则x=R.x R包含在新油田,以及-如果x是隐式或实例字段,则从新油田。(实例参数解释如下。)处理的原因隐式字段和实例字段特别允许以下内容:记录R:设置位置领域{长度}:vec:车辆长度--更多字段…xs:R格式xs=记录{vec=0|1|2|[]}ys=记录xs{vec=0|[]}如果没有特殊处理,最后一个表达式需要包含一个新的长度绑定(例如“length=_”)。*记录不包含数据类型模式但不包含点图案,不再被拒绝。*使用--without-K标志时,文字现在被视为建造师。*应用不足的功能现在可以减少。考虑以下定义:id:{A:集}A类A类id x=x以前表达式id不会减少。此项已更改因此它现在减少到λxx。通常这没什么意义区别,但与“with”结合使用可能很重要。请参见例如,第365期。*望远镜未使用的AgdaLight传统语法(xy:A;zv:B)具有已删除。宇宙多态性---------------------*现在默认情况下启用了Universe多态性。使用--no universe多态性来禁用它。*人群级别不再定义为数据类型。基本层组合符可以通过以下方式引入:假设级别:设置zero:级别suc:级别水平max:级别水平水平{-#构建级别#-}{-#BUILTIN LEVELZERO零#-}{-#构建级别suc#-}{-#BUILTIN LEVELMAX最大#-}*现在要求BUILTIN等式是通用多态的。*trustMe现在是通用多态的。元变量与统一------------------------------*未解决的元变量现在在每个相互块后都被冻结。这意味着它们不能由后续代码实例化。对于实例,一个:Nat一个=_bla:一≡零bla=回流现在导致错误,而以前它会导致用“suc zero”实例化_。如果您想利用旧的行为,将这两个定义放在一个相互的块中。在交互式编辑期间,所有元变量都会被解冻,以便用户可以交互地填充孔。请注意,的类型检查交互式给定的条件并不完美:Agda有时拒绝加载文件,即使在文件的交互式构造。这是因为某些检查(例如,positity)仅在加载文件时调用。*现在可以推断记录类型。如果有一个唯一的已知记录类型,其字段与字段,则表达式的类型将被推断为应用于未知参数的记录类型。如果给定字段中没有已知的记录类型检查器将给出错误,而不是生成大量未解决的问题元变量。注意,“已知记录类型”是指任何导入的模块,而不仅仅是范围内的类型。*引用检查器区分刚性和强刚性事件[Reed,LFMTP 2009;Abel&Pientka,TLCA 2011]。完整性检查程序现在接受以下代码:h:(n:国家)n≡sucn国家h n()在内部,这会生成一个约束_n=suc _n,其中元变量n严格出现,即在构造函数路径上从根开始,在它自己的定义术语树中。这永远不会可解决。弱刚性递归事件可能有解决方案博士论文,第106页]:测试:(k:Nat)让X:(Nat国家)国家X=_在里面(f:国家国家)X f≡suc(f(X(λXk) ))测试k f=refl约束_X k f=suc(f(_X k(λXk))具有解决方案_X k f=suc(f(suc k)),尽管递归出现_X。这里_X不是强刚性的,因为它发生在边界下变量f。此前,Agda拒绝了此代码;现在改为投诉未解决的元变量。*涉及头部中相同元变量的方程约束现在触发修剪【Pientka博士,第3.1.2节;Abel&Pientka,TLCA2011]. 例子:相同:让X:AA类A类A×AX=_在{xyz:A}中X X y y≡(X,y)×X X X y≡X X y y相同=回流,回流第二个方程意味着X不能依赖于它的第二个参数。修剪后,第一个方程是线性的,可以是解决了的。*实例参数。添加了一种新类型的隐藏函数参数:instance论据。这个新功能基于Scala的影响隐式和Agda现有的隐式参数。纯隐式参数由单大括号{…}标记。实例参数由双大括号{{…}}标记。例子:假设A:设置B:A设置答:答f:{{a:a}}B和a您可以使用符号⦃和⦄代替双大括号,但在许多情况下,这些符号必须被空白包围。(如果你正在使用Emacs和Agda输入法,然后你可以变戏法分别键入“\{{”和“\}}”将符号向上。)实例参数的行为与普通隐式参数相同,除了一个重要方面:解决未提供的参数明确地。例如,考虑以下代码:测试=f在这里,Agda会注意到f的实例参数没有提供显式地,并尝试推断它。f处范围内的所有定义调用站点以及上下文中的所有变量都被考虑在内。如果这些名称中只有一个具有所需的类型(A),则实例参数将被实例化为此名称。此功能可用作Haskell类型类的替代。如果我们定义记录等式(A:设置):设置其中字段相等:AA类布尔,然后我们可以定义以下投影:相等:{A:Set}{{eq:EqA}}A类A类布尔相等{{eq}}=相等现在考虑以下表达式:等于假假∨等于34如果Bool和在范围内,没有其他,则接受该表达式:eq工具:eq Booleq-Bool=记录{equal=…}等式-ℕ : 等式等式-ℕ = 记录{equal=…}提供了一个简写符号,以避免定义手动投影功能:模块Eq-with-implicits=Eq{{…}}此符号创建Eq记录模块的变体,其中主Eq参数是一个实例参数,而不是显式参数。它相当于以下定义:模Eq与隐含{A:Set}{{Eq:EqA}}=Eqeq注意,使用简写符号可以避免将“-with-implicits”模块:打开等式{{…}}实例参数解析不是递归的。作为一个例子,考虑以下“参数化实例”:eq-List:{A:Set}等式A等式(列表A)eq列表{A}eq=记录{equal=eq列表-A}哪里eq-List-A:列表A列表A布尔eq-List-A[][]=真eq-List-A(A|as)(b|bs)=等于A b∧eq-Lest-A作为bseq-List-A _ _=假假设作用域中唯一的Eq实例是Eq-List和Eq-ℕ.则以下代码不会进行类型检查:测试=相等(1|2|[])(3|4|[]])然而,我们可以通过构造合适的实例手动执行:试验′=相等(1|2|[])(3|4|[]])其中,eq-List-ℕ = eq—列出eq-通过将“实例搜索”限制为非递归,我们避免了向Agda引入了一种新的仅编译时评估模型。有关实例参数的更多信息,请参见Devriese&皮森斯【ICFP 2011】。中还提供了一些示例Agda发行版的examples/instance-arguments子目录。无关性-----------*依赖的无关函数类型。一些例子说明依赖无关的语法函数类型:.(x y:A)B、。{xyz:A}B类∀x年B∀x。{y} {z}.vB类声明f:。(x:A)B【x】f x=t[x]要求x在t[x]和B[x]中都是不相关的。这是例如,如果B[x]=B′x,且B′:,则可能。A类设置。依赖无关性允许我们定义挤压类型:record Push(A:设置):设置位置构造函数挤压领域证明:Aelim-Squash:{A:设置}(P:挤压A设置)(ih:.(a:a)P(壁球a)(a)⁻ : 壁球A)太平洋elim-Squash P ih(南瓜a)=ih a请注意,这不会用(ih:(a:a)->P(南瓜a))。*只包含不相关字段的记录。以下操作现在有效:记录Is等价{A:Set}(_≈_:AA类Set):设置位置领域.ref:反射_≈_.sym:对称_≈_.trans:传递_≈_record Setoid:设置哪里中缀4≈_领域承运商:设置_≈_:载体承运人设置.is等效:isEquivalence_≈_open IsEquivalence是等效公共此前Agda对该应用程序提出投诉IsEquivalence就是Equivalent,因为isEquivality是不相关的,并且IsEquivalence模块需要相关参数。现在,什么时候记录模块是为只包含以下内容的记录生成的不相关的参数,记录参数变得不相关:模块等效{A:Set}{_≈_:AA类集合}.(r:Is等价{A=A}_≈_)其中*无关的东西不再被内部擦除。这意味着它们是作为普通术语打印的,而不是像以前那样“_”。*新的标志——实验无关性启用了不相关的宇宙只有一个构造函数时不相关数据的级别和匹配可用。这些功能都是实验性的,很可能会改变或消失。反射----------*反射API已扩展到镜像功能,如无关性、实例参数和宇宙多态性,以及允许(有限)访问定义。为了完整性,所有内置程序和原语如下所示:--姓名。假设名称:集合{-#BUILTIN QNAME名称#-}原始的--名称相等。primQNameEquality:名称姓名布尔--参数是可见(显式)、隐藏(隐式)还是--实例参数?数据可见性:设置位置可见隐藏实例:可见性{-#构建隐藏可见性#-}{-#BUILTIN VISIBLE可见#-}{-#BUILTIN HIDDEN HIDDEN隐藏#-}{-#BUILTIN INSTANCE实例#-}--论据可以是相关的,也可以是无关的。数据相关性:设置位置相关无关:相关性{-#构建相关性相关性#-}{-#构建相关#-}{-#BUILTIN IRRELEVANT无关#-}--争论。数据参数A:设置位置参数:(v:可见性)(r:相关性)(x:A)精氨酸A{-#构建参数#-}{-#内置ARGARG参数#-}--条款。相互的data Term:设置位置--应用于参数的变量。变量:(x:ℕ) (参数:列表(参数术语))期限--应用于参数的构造函数。con:(c:名称)(参数:列表(参数术语))期限--应用于参数的标识符。定义:(f:名称)(参数:列表(参数术语))期限--不同类型的λ-抽象。lam:(v:能见度)(t:术语)期限--Pi类型。圆周率:(t₁ : 氩气类型)(t二氧化碳:类型)期限--一种。sort:排序期限--还有别的吗。未知:术语数据类型:设置位置el:(s:排序)(t:术语)类型数据排序:设置位置--给定(可能是中性)电平的集合。集合:(t:期限)排序--给定混凝土标高的一组。点亮:(n:ℕ) → 排序--还有别的吗。未知:排序{-#BUILTIN AGDASORT排序#-}{-#BUILTIN AGDATYPE类型#-}{-#BUILTIN AGDATERM术语#-}{-#BUILTIN AGDATERMVAR变量#-}{-#BUILTIN AGDATERMCON公司{-#BUILTIN AGDATERMDEF定义#-}{-#构建AGDATERMLAM lam#-}{-#BUILTIN AGDATERMPIπ#-}{-#BUILTIN AGDATERMSORT排序#-}{-#BUILTIN AGDATERMUNSUPPORTED未知#-}{-#内置AGDATYPEEL el#-}{-#BUILTIN AGDASORTSET集合#-}{-#BUILTIN AGDASORTLIT点亮#-}{-#BUILTIN AGDASORTUNSUPPORTED未知#-}假设--函数定义。功能:设置--数据类型定义。数据类型:集合--记录类型定义。记录:设置{-#BUILTIN AGDAFUNDEF函数#-}{-#BUILTIN AGDADATADEF数据类型#-}{-#BUILTIN AGDARECORDDEF记录#-}--定义。数据定义:设置位置函数:函数定义data-type:数据类型定义record′:记录定义constructor′:定义公理:定义primitive′:定义{-#BUILTIN AGDADEFINITION定义#-}{-#BUILTIN AGDADEFINITIONFUNDEF函数#-}{-#BUILTIN AGDADEFINITIONDATADEF数据类型#-}{-#BUILTIN AGDADEFINITIONRECORDDEF记录'#-}{-#BUILTIN AGDADEFINITIONDATACONSTRUCTOR构造函数'#-}{-#BUILTIN AGDADEFINITIONPOSTULATE公理#-}{-#BUILTIN AGDADEFINITIONPRIMITIVE原语'#-}原始的--具有给定名称的事物的类型。primQNameType:名称类型--具有给定名称的事物的定义。primQName定义:名称定义--给定数据类型的构造函数。primDataConstructors:数据类型列表名称例如,表达式primQNameType(引号零)定义上等于el(点亮0)(定义(引用ℕ) [])(如果零是数据类型的构造函数ℕ).*新关键字:unquote。“unquote t”结构转换了Agda术语的表示按以下方式转换为实际的Agda代码:1.参数t必须具有Term类型(请参阅上面的反射API)。2.该论点已被规范化。3.整个结构替换为正常形式,即视为用户编写的语法,并在通常的方式。示例:测试:unquote(def(引号ℕ) []) ≡ 测试=回流id:(A:设置)A类A类id=unquote(lam可见(lam可视(var 0[]))id-ok:id≡(λA(x:A)x)id-ok=回流*新关键字:quoteTerm。构造“quoteTerm t”类似于“quote n”,但报价仅限于名称n,quoteTerm接受条款t施工方式如下:1.推断t的类型。术语t必须是类型正确的。2.术语t被归一化。3.该结构被术语表示替换(参见正常形式的反射API)。任何未解决的元变量在术语中由“未知”术语构造器表示。示例:测试第二阶段:引用项(λ{A:Set}(x:A)x) ≡lam隐藏(lam可见(var 0[]))测试₁ = 回流--局部变量表示为de Bruijn指数。测试二氧化碳:(λ{A:集合}(x:A)引用项x)≡(λx变量0[])测试₂ = 回流--条款在报价前进行规范化。测试₃ : quoteTerm(0+0)≡con(引号零)[]测试₃ = 回流编译器后端=================马隆佐-------*MAlonzo后端的FFI现在处理更好的方式。Agda类型和种类到Haskell的转换现在支持宇宙多态性假设。核心变化是函数类型的翻译已从T[[Pi(x:A)B]]=如果A是哈斯克尔类型的对于所有x()->T[[B]]否则,如果x在fv B中,则不设防的其他的T[[A]->T[[B]]进入之内T[[Pi(x:A)B]]=如果x在fv B中,则对于所有x。T[[A]]->T[[B]]--注:T[[A]]不是单位。其他的T[[A]->T[[B]],常数(公设、构造器和文字)已从更改T[[k As]]=如果COMPILED_TYPE k T,则T T[[作为]]其他的不设防的进入之内T[[k As]]=如果是COMPILED_TYPE k T,则T T[[作为]]否则,如果编译k E,则()其他的未定义。例如,假设Haskell定义类型AgdaIO a b=IO b,我们可以通过以下方式设置universe-polymorphic IO:假设IO:∀{ℓ} → 设置ℓ → 设置return:{a}{a:设置a}A类IO A接口_>>=_:{ab}{a:集合a}{b:集合b}IO A接口(A)IO B)IO B(输入输出B){-#COMPILED_TYPE IO AgdaIO#-}{-#COMPILED返回(\__->return)#-}{-#编译_>>=_(\____->(>>=))#-}这是可以接受的,因为(假设universe级别类型为转换为Haskell单元类型“()”)(\__->返回):对于所有a.()->对于所有b.()->b->AgdaIO a b=T[[∀{a}{a:设置a}A类IO A]](\_ _ _ _ -> (>>=)):对于所有a.()->对于所有b.()->对于所有c.()->对于所有d.()->AgdaIO a c->(c->AgdaIO b d)->AgdaIOb d=T[[∀{ab}{a:集合a}{b:集合b}IO A接口(A)IO B)IO B]]。史诗----*新的Epic后端杂注:STATIC。在Epic后端,用STATIC杂注标记的函数将是在编译前规范化。示例用法:{-#静态功率#-}功率:ℕ → ℕ → ℕ功率0 x=1功率1 x=x功率(suc n)x=功率n x x出现“power 4 x”将替换为“((x*x)*x)**”。*在Epic后端实现了一些新的优化:-删除未使用的参数。执行工作者/包装器转换,以便未使用参数可以通过Epic的内嵌程序删除。例如,地图函数的转换方式如下:map_wrap:(A B:设置)(A)B)列表A列表Bmap_wrap A B f xs=map_work f xsmap_work f[]=[]map_work f(xбxs)=f xбmap_workf xs如果map_wrap是内联的(它将出现在任何饱和调用中),然后A和B在生成的代码中消失。使用抽象解释找到未使用的参数。尸体检查模块中的所有函数,以确定哪些变量使用。假设的行为是基于它们的类型。考虑返回,例如:假设返回:{A:Set}A类IO A接口可以删除return的第一个参数,因为它的类型为设置,因此不会影响程序在运行时的结果。-喷射检测。在运行时,许多函数可能是的低效变体身份函数。强制后尤其如此。注入检测用更多功能取代了其中的一些功能高效版本。例子:注入:{n:ℕ}→财务n翅片(1+n)注入{sucn}zero=zeroinject{sucn}(suci)=suc(inject{n}i)强制删除Fin构造函数的参数,因此此函数是一个低效的标识函数,可以由以下一项:注入{}x=x为了真正找到这个函数,我们做了归纳假设该注入是其第二个参数和外观中的标识函数在函数的分支中确定此选项是否有效。注入检测也可以跨越数据类型障碍。例子:忘记:{A:Set}{n:ℕ} → 兽医列表A忘记[]=[]忘记(x|xs)=x|忘记xs假设构造函数标记(在编译的Epic代码中)车辆。[]和列表。[]是相同的,Vec._О_的标签列表。_б_也是一样的,这也是一个恒等函数。我们因此,可以用以下定义替换该定义:忘记{_}xs=xs为了尽可能频繁地应用这一点,构造函数标记如下已运行selected/after/injection检测,以使尽可能多的功能注入。每个源文件选择一次构造函数标记,因此在同一个函数中定义forget这样的转换函数是有利的模块作为数据类型之一。例如,如果Vec.agda进口List.agda,那么遗忘函数应该放在Vec.agda中确保向量和列表得到相同的标记(除非有其他标记注入函数对标记施加不同的约束优先)。-粉碎。此优化会查找其值在运行时可推断的类型:*只有一个构造函数的数据类型,其中所有字段都是可推断本身就是可推断的。*设置是可推断的(因为它没有运行时表示)。返回可推断数据类型的函数可以被破坏表示它被一个简单返回推断值。可推断类型的一个重要例子是通常的命题等式类型(_ lect _)。返回命题等式的任何函数可以直接返回自反性构造函数,而无需计算任何东西。这种优化使更多的参数未被使用。它还使史诗代码更小,从而加快编译速度。JavaScript脚本----------*ECMAScript编译器后端。正在实现一个新的编译器后端,目标是ECMAScript(也称为JavaScript),目标是允许Agda程序在浏览器或其他ECMAScript环境中运行。后端仍处于实验阶段:核心语言是实现了,但仍缺少许多功能。可以使用以下命令从命令行调用ECMAScript编译器标志--js:agda--js--compile-dir=<dir><FILE>.agda每个源<FILE>.agda都编译为ECMAScript目标<DIR>/jAgda<顶层模块名称>.js。编译器也可以是使用Emacs模式调用(变量agda2-backend控件使用哪个后端)。请注意,ECMAScript是一种严格的语言,而不是懒惰的语言。Agda程序是完整的,这不应该影响程序语义,但这可能会影响它们的空间或时间使用。ECMAScript不支持代数数据类型或模式匹配。这些功能被转换为访问者模式的使用。对于实例,标准库的List数据类型和null函数翻译为以下代码:exports[“List”]={};exports[“List”][“[]”]=函数(x0){返回x0[“[]”]();};exports[“List”][“_ _”]=功能(x0){返回函数(x1){返回函数(x2){返回x2[“_О_”](x0,x1);};};};exports[“null”]=函数(x0){返回函数(x1){返回函数(x2){返回x2({“[]”:函数(){return jAgda_Data_Tool[“Bool”][“true”];},“●”:功能(x3,x4){return jAgda_Data_Tool[“Bool”][“false”];}});};};};Agda记录被转换为ECMAScript对象,保留字段名称。顶级Agda模块转换为ECMAScript模块,遵循common.js模块规范。顶级Agda模块“Foo.Bar”被转换为ECMAScript模块“jAgda.Foo.Bar”。ECMAScript编译器不编译为Haskell,因此杂注与Haskell FFI(IMPORT、COMPILED_DATA和COMPILED)相关的是ECMAScript后端未使用。相反,有一个COMPILED_JS可以应用于任何声明的杂注。对于假设,它给出了ECMAScript代码由编译器发出。对于数据类型,它提供了一个函数应用于该类型的值和访问者对象。对于实例,自然数与ECMAScript整数的绑定(忽略溢出错误)是:数据ℕ : 设置位置零:例如:ℕ → ℕ{-#COMPILED_JS函数(x,v){if(x<1){return v.zero()} #-}{-#COMPILED_JS零0#-}{-#COMPILED_JS suc函数(x){return x+1;}#-}_+_ : ℕ → ℕ → ℕ零+n=nsuc m+n=suc(m+n){-#COMPILED_JS_+_函数(x){返回函数(y){返回x+y;};} #-}为了优化FFI代码,COMPILED_JS中的ECMAScript使用一个识别纯ECMAScript的函数子集,由函数、函数组成应用程序、返回、if-statements、if-expressions、,无副作用二进制运算符(无优先级,左关联),无副作用前缀操作符、对象(其中所有成员名称)、字段访问以及字符串和整数文本。可以使用require(“<module-id>”)语法导入模块:任何可以放置不纯代码或支持片段之外的代码在模块中并导入。工具=====*新标志--safe,可用于对不受信任的代码进行类型检查。此标志禁用假设、primTrustMe和“不安全”选项杂注,其中一些已知会使Agda不一致。拒绝的杂注:--允许未解决的元--实验无关性--警备型控制器--内射型构造函数--无平衡检查--无阳性检查--无终止检查--大小-类型--键入注意,目前不可能定义宇宙使用--safe时的level或coinduction原语(因为它们必须作为假设引入)。这可以通过以下方式解决在第一步中对受信任的文件进行类型检查,而不使用--safe,然后在第二遍中使用--safe已经过类型检查的人不会因为安全而重新进行类型检查已使用。*依赖关系图。新标志--dependency-graph=FILE可用于生成DOT包含模块依赖关系图的文件。生成的文件(file)可以使用点之类的工具进行渲染。*--no-unreachable-check标志已被删除。*投影函数突出显示为函数而不是领域。字段名(在记录定义和记录值中)为仍高亮显示为字段。*支持跳转到信息中提到的位置已添加缓冲区。*“make-install”命令不再全局安装Agda(通过默认设置)。--------------------------------------------------------------------------Agda 2版本2.2.10的发行说明------------------------------------------------------------------------自2.2.8以来的重要变化:语言--------*新标志:--不带-K。此标志使模式匹配更加受限。如果标志是激活后,Agda只接受特定的case-splits。如果类型要分割的变量是D pars ixs,其中D是数据(或record)类型,pars表示参数,ix表示索引,则必须满足以下要求:*指数ix必须是构造函数对变量。*这些变量在pars中不能是自由的。--without-K的预期目的是使用没有K规则的命题等式。让我们定义命题等式如下:data_≡_{A:集合}:AA类设置位置参考:∀xx≡x然后,J规则的明显实施被接受:J:{A:Set}(P:{xy:A})x≡y设置)(∀xP(回流x))∀{xy}(x≡y:x≡y)P x≡yJ P P(ref x)=P x这同样适用于Christine Paulin-Mohring的J规则版本:J′:{A:集合}{x:A}(P:{y:A}x≡y设置)P(回流x)∀{y}(x≡y:x≡y)P x≡yJ′P P(ref x)=P另一方面,K规则的明显实现并不是认可的:K:{A:Set}(P:{x:A})x≡x设置)(∀xP(回流x))∀{x}(x≡x:x≡x)P x≡xK P P(ref x)=P x然而,我们已经/没有/证明了--without-K的激活可以确保K规则无法用其他方法证明。*无关声明。可以通过前缀将谓词和函数标记为不相关声明名称时带点的名称。例子:假设无关:{A:Set}→ .A类A类不相关的名称只能用于不相关的位置或被宣布无关的事物的定义。上述无关公理可用于定义不相关的记录字段:数据子集(A:Set)(P:ASet):设置位置_#_:(甲:甲)→ .(P a)子集A P元素:{AP}子集A PA类元素(a#p)=a.证书:{AP}(x:子集AP})P(元素x)证书(a#p)=无关p证书的右侧是相关的,因此我们无法定义证书(a#p)=p(因为p无关)。然而,证书声明为不相关,所以可以使用不相关公理。此外公理的第一个论证是无关的,这意味着无关的p是格式良好的。如上所示,无关紧要的公理证明无关紧要预测。以前没有生成无关的投影记录字段,例如下面的字段证书记录类型:记录子集(A:Set)(P:ASet):设置位置建造师_#_领域元素:A.证书:P元素现在会自动为不相关的字段生成投影(除非使用标记--no-irelevant-projections)。请注意无关的投影是高度实验性的。*终止检查器识别预测。投影现在保留了图案和表达式中的大小。例子:记录环绕(A:Set):设置位置构造函数包装领域展开:A打开Wrap publicdata WMat:设置位置零:WMat例如:Wrap WNatWNat(WNat)id:WNat(WNat)WNat(WNat)id zero=零id(suc w)=suc(包装(id(展开w)))在结构顺序中,展开w≤w。这意味着展开w≤w<suc w,因此接受对id的递归调用。投射也能保持警惕。工具-----*顶级模块名称的超链接现在指向模块而不是模块名称的声明。这个应用于Emacs模式和agda--html的输出。*大多数记录字段名称现在突出显示为“字段”。以前的许多事件都突出显示为“功能”。*Emacs模式:无法再更改通过自定义agda2-indentation的TAB键。*Epic编译器后端。正在实现一个新的编译器后端。此后端使用埃德温·布莱迪的语言史诗(http://www.cs.st-andrews.ac.uk/~eb/epic.php)及其编译器。这个后端应该可以处理大多数Agda代码,但仍处于实验阶段:需要更多的测试,并编写一些东西以下可能并不完全正确。可以使用旗帜——史诗:agda--epic--epic-flag=<epic-flag>--compile-dir=<dir><FILE>.agda可以多次指定--epic-flag标志;每个标志都已给出逐字发送给Epic编译器(按给定顺序)。由此产生的可执行文件以主模块命名,并放置在--compile-dir标志指定的目录(默认值:项目root)。中间文件放在名为Epic的子目录中。后端要求有一个名为main的定义。这个定义应该是IO单元类型的值,但目前未选中(因此很容易生成分段错误的程序)。当前,后端将IO A类型的操作表示为函数从Unit到A,main应用于单位值。Epic编译器通过C而不是Haskell编译,因此杂注与Haskell FFI(IMPORT、COMPILED_DATA和COMPILED)相关的是Epic后端未使用。相反,有一个新的杂注编译_ EPIC。此杂注用于为假设提供史诗代码定义(史诗代码可以反过来调用C代码)。的形式pragma是{-#COMPILED_EPIC定义代码#-},其中def是的名称Agda假设和代码是一些史诗代码,应该包括函数参数、返回类型和函数体。作为一个例子IO单体可以定义如下:假设IO:设置设置返回:∀{A}A类IO A接口_>>=_:{AB}IO A接口(A)IO B)国际组织B{-#COMPILED_EPIC return(u:Unit,a:Any)->任意=i返回(a)#-}{-#COMPILED_EPIC_>>=_(u1:单位,u2:单位,x:任意,f:任意)->任意=iobind(x,f)#-}这里,ioreturn和iobind是Epic函数,在始终包含的文件AgdaPrelude.e。默认情况下,后端将删除所谓的强制构造函数参数(以及强制变量的case-splitting重写)。可以使用标志禁用此优化--不强迫。强制后看起来像一元自然数的所有数据类型构造函数参数已被删除(即具有两个构造函数,一个为nullary,一个带有单个递归参数)将表示为“BigInts”。这适用于标准翅片例如,类型。后端支持Agda的基本函数和BUILTIN杂注。如果使用一元自然数的BUILTIN杂注,然后一些操作,如加法和乘法,将使用更高效的“BigInt”操作。如果你想使用Epic后端,你需要安装一些依赖项,请参阅README。*Emacs模式可以使用MAlonzo或Epic进行编译后端。变量agda2-backend控制使用哪个后端。--------------------------------------------------------------------------Agda 2版本2.2.8的发行说明------------------------------------------------------------------------自2.2.6以来的重要变化:语言--------*记录模式匹配。现在可以对命名记录构造函数进行模式匹配。例子:记录∑(A:设置)(B:ASet):设置位置构造函数__领域项目₁ : A类项目₂ : B项目地图:{AB:Set}{P:A集合}{Q:B集}(f:答B)(∀{x}价格xQ(f x))∑A P∑B Q映射fg(x,y)=(fx,gy)上述条款在内部翻译为以下条款:映射f g p=(f(∑.projp) ,g(∑.项目p) )不转换包含数据类型模式的记录模式。例子:添加:× ℕ → ℕ加(零,n)=n添加(suc m,n)=suc(添加(m,n))记录不包含数据类型模式但不包含点模式,目前被拒绝。例子:Foo:{A:Set}(p第页₂ : A×A)项目第页₁ ≡ 项目第页₂ → 设置Foo(x,y)(.x,y′)refl=设置*证明不相关的函数类型。Agda现在支持不相关的非依赖函数类型:f:。A类B类此类型意味着f在计算上不依赖于它的参数。一个预期用例是嵌入式数据结构证据,如排序列表:假设_≤_ : ℕ → ℕ → 设置第页₁ : 0≤1第页₂ : 0 ≤ 1数据SList(绑定:ℕ) : 设置位置[]:SL列表绑定烤饼:(头部:ℕ) →.(水头≤界限)(尾部:SList头部)SList绑定scons签名中不相关类型的作用是斯科恩斯的第二个论点在阿格达确认后从未被审查过它有正确的类型。它甚至被扔掉,导致学期规模较小,希望能提高一些效率。这个type-checker在检查等式时忽略无关参数,因此两个列表可以相等,即使它们包含不同的证明:₁ : S列表1₁ = 烤饼0 p[]₂ : S列表1₂ = 烤饼0 p[]₁≡₂ : ₁ ≡ ₁≡₂ = 回流无关的参数只能在无关的上下文中使用。考虑以下子集类型:数据子集(A:Set)(P:ASet):设置位置_#_:(元素:A)→ .(要素)子集A P以下两种用途都可以:elimSubset:{AC:Set}{P}子集A P((甲:甲)→ .(P a)C)C类elimSubset(a#p)k=k a p元素:{A:Set}{P:A集合}子集A PA类元素(x#p)=x然而,如果我们试图设计出证明组件,那么Agda抱怨说“变量p被声明为无关,因此它不能在此处使用“:prjProof:{AP}(x:子集AP})P(标高x)prj证明(a#p)=p除了在无可辩驳的匹配情况(记录构造函数模式已被翻译掉)。例如,与此处接受模式(p,q):埃利姆₂ : ∀ {AC:设置}{PQ:A集合}子集A(λx∑(Px)(λ_Q x))((甲:甲)→ .(P a)→ .(问a)C)C类埃利姆(a#(p,q))k=k a p q也允许进行荒谬的匹配()。请注意,记录字段也可能不相关。例子:记录子集(A:Set)(P:ASet):设置位置构造函数_#_领域元素:A证明:P元素无关字段永远不在范围内,既不在内部也不在外部记录。这意味着没有记录字段可以依赖于无关的字段,并且没有为这些字段定义投影。无关字段只能使用模式匹配进行访问,如上述elimSubset。最近添加了不相关的函数类型,但尚未添加已经经历了很多实验,所以不要惊讶如果在下一个版本之前发生了更改。例如,依赖无关函数空间(.(x:A)B)可以添加未来。*Mixfix粘合剂。现在可以声明绑定的用户定义语法标识符。例子:假设状态:设置设置设置放置:∀{S}S公司州S⊤获取:∀{S}状态S S返回:{AS}A类州S A绑定:{ABS}状态S B(B)州S A)州S A语法绑定e(λxe(电子)₂) = x个e(电子)₁ , e(电子)增量:状态ℕ ⊤增量=x得到,put(1+x)bind的语法声明意味着x在e中的范围内二氧化碳,但不在e中₁.您可以提供固定性声明和语法声明:infixr 40绑定语法绑定e(λxe(电子)₂) = x个e(电子)₁ , e(电子)固定性适用于语法,而不是名称;语法声明也仅限于普通的非运算符名称。以下内容不允许声明:语法_==_xy=x==y语法声明也必须是线性的;以下声明不允许:语法错误x=x+x语法声明是最近添加的,尚未添加还需要进行大量实验,因此如果在下一个版本发布之前,有些内容发生了更改。*道具已从语言中删除。实验性排序属性已被禁用。任何使用Prop的程序如果Prop被Set替换,则应进行类型检查₀. 请注意,Prop仍然关键字。*默认情况下,注入类型构造函数处于关闭状态。类型构造函数的自动注入功能已被禁用(由默认设置)。要启用它,请使用标记--内射类型构造函数,在命令行或OPTIONS杂注中。请注意flag使阿格达反古典主义,并且可能不一致:排除中间的Agda不一致http://thread.gmane.org/gmane.comp.lang.agda/1367有关示例,请参见test/success/InjectiveTypeConstructors.agda。*终止检查器可以计数。有一个新标志--termination-depth=N接受值N>=1(默认为N=1),这会影响终止检查器。到目前为止,终止检查程序只有比较递归参数时区分了三种情况使用被调用方的形参调用。<:参数在结构上小于参数=:它们是相等的?:参数较大或与参数无关此行为仍然是默认的(N=1),不会将以下功能识别为终止。相互的传真:ℕ → ℕf zero=零f(suc zero)=零f(suc(sucn))=辅助n辅助的:ℕ → ℕaux m=f(例如m)调用图f--(<)-->辅助--(?)-->f通过aux产生从f到f的递归调用,其中被调用者参数的调用参数计算为“不相关”(<和?的组成)。设置N>=2可以进行更精细的分析:N少了两个构造函数比suc(sucn)多,而sucm比m多一个,所以我们接到了电话图表:f--(-2)-->辅助--(+1)-->f现在,间接调用f-->f标记为(-1)终止检查器可以识别调用参数在这条路径上减少。将终止深度设置为N意味着终止检验器计数减少到N并且增加到N-1。默认值,N=1,表示不计算增加,每增加一次“无关”。在实践中,当“with”时,有时会出现像上面这样的例子使用。例如,程序传真:ℕ→ℕf zero=零f(suc zero)=零f(suc(sucn))为零…|_=f(例如)内部表示为相互的传真:ℕ → ℕf zero=零f(suc zero)=零f(suc(sucn))=辅助n零辅助的:ℕ → ℕ → ℕ辅助m k=f(例如m)因此,默认情况下,不接受使用“with”定义f通过终止检查器,即使它看起来是结构化的(例如是suc suc n)的一个子类。现在,终止检查程序是如果使用选项“--termination-depth=2”,则满足。注意事项:-这是一个实验性功能,有望被替换为在不久的将来会变得更聪明。-增加终止深度将很快导致很长时间终止检查时间。所以,小心使用。设置终止习惯上深度为100,只是为了安全起见,这并不好想法!-增加终止深度仅对线性数据有意义类型,如和尺寸。对于其他类型,不能增加认可。例如,考虑一个类似的列表示例。数据列表:设置位置nil:列表欺骗:ℕ → 列表列表相互的f:列表列表f nil=零f(cons x nil)=零f(cons x(cons y y s))=辅助y y s辅助的:ℕ → 列表列表aux z z s=f(cons z z s)这里,终止检查器将cons z z与z以及cons z与z进行比较z秒。在这两种情况下,无论如何,结果都是“无关的”我们设置终止深度。这是因为在比较时例如,conszzs到zs,z与zs无关,因此,conszzs也与zs无关。我们不能说它只是“一个”因为z可能是一个非常大的项到非类型化终止检查的弱点。为了重新获得增加终止深度的好处,我们需要按线性类型为列表编制索引,例如或尺寸。使用终止深度2,上述示例适用于向量而不是列表。*codata关键字已删除。要使用缩合,请使用以下是新的内置程序:INFINITY、SHARP和FLAT。例子:{-#选项--通用多态性#-}模块Coduction其中打开导入级别中缀1000♯_假设∞:{a}(a:集合a)设置一个♯_ : ∀ {a} {a:设置}A类→ ∞ A类⑪:∀{a} {a:设置}→ ∞ A类A类{-#构建无限∞#-}{-#内置SHARP♯_ #-}{-#平铺建筑♭ #-}注意,SHARP上的(非依赖)模式匹配不再允许。还要注意,如果您尝试将上面的杂注,带有COMPILED_TYPE、COMPILER_DATA或COMPILED杂注,或者如果杂注没有在假设之后发生。编译器将INFINITY内建编译为空(更多或less),以便使用共创不会妨碍外国金融机构声明:data Colist(A:设置):设置位置[]:大肠杆菌A_●_:(x:A)(xs:∞(大肠杆菌A))大肠杆菌A{-#COMPILED_DATA列[][](:)#-}*无限类型。如果使用了新的标志——guardedness-preserving类型构造函数,然后类型构造函数被视为归纳构造函数,当我们检查生产率(但仅限于参数,并且仅限于严格肯定地使用或根本不使用)。这就产生了如下示例可能的情况如下:data Rec(A:∞集合):集合,其中折叠:A类记录A--∑不能是下面的记录类型。数据∑(A:设置)(B:ASet):设置位置_,_:(x:A)B x∑A B语法∑A(λxB) =∑[x∶A]B--W型的草书定义。W:(A:套)(A)设置)设置W A B=收入(Ş(∑[x∶A](BxW A B))语法W A(λxB) =宽[x∶A]Bsup:{A:Set}{B:A集合}(x:A)(f:B xW A B)W A B公司sup x f=折叠(x,f)W-rec:{A:设置}{B:A集合}(P:W A B设置)({x}{f:BxWAB公司}(∀yP(f y))P(支持x支持)∀x价格xW-rec P h(折叠(x,f))=h(λyW-rec P h(f y))--归纳-再递归编码为同级递归。数据标签:设置位置‘0′1′2′σ′π′w:标签相互的U:设置U=∑标签U′U′:标签设置U′′0=⊤U′′1=⊤U′′2=⊤U′′σ=Rec(Ş(∑[a∶U](El aU) ))U′′π=Rec(Ş(∑[a∶U](El aU) ))U′′w=可采收水平(Ş(∑[a∶U](El aU) ))标高:U设置El(′0,_)=El(′1,_)=⊤El(′2,_)=布尔El(′σ,褶皱(a,b))=∑[x∶El a]El(b x)El(′π,折叠(a,b))=(x:El a)标高(b x)El(′w,褶皱(a,b))=w[x∶El a]El(b x)U记录:(P:∀U厄尔尼诺设置)P(′1,_)ttP(′2,_)真P(′2,_)假({abxy}P a x公司P(b x)yP(′σ,折叠(a,b))(x,y))({abf}(∀xP(b x)(f x))P(′π,折叠(a,b))f)({abxf}(∀yP(′w,折叠(a,b))(f y))P(′w,折叠(a,b))(sup x f))∀u(x:El u)价格U-rec P P1 P2t P2f PσPπPw=回收哪里记录:∀u(x:El u)价格rec(′0,_)()rec(′1,_)_=P1rec(′2,_)真=P2trec(′2,_)false=P2frec(′σ,褶皱(a,b))(x,y)=Pσ(rec_x)(rec_y)rec(′π,折叠(a,b))f=Pπ(λx记录_(f x))rec(′w,折叠(a,b))(折叠(x,f))=Pw(λy记录_(f y))--guardedness-preserving-type构造函数扩展基于对∞的操作性理解/♯_; 目前尚不清楚这个扩展是一致的。*合格的施工人员。现在可以根据数据类型引用限定的构造函数。例如,给定data Nat:设置位置零:自然例如:Nat国家数据Fin:Nat设置位置零:∀{n}翅片(例如)例如:∀{n}财务n翅片(例如)可以明确地将构造函数称为Nat.zero,Nat.suc、Fin.zero和Fin.suc(Nat和Fin是包含以下内容的模块各施工单位)。例子:注射:(n:Nat)Nat.suc n≡suc mn选minj.m m refl=回流以前你必须写一些像注射:(n:Nat)→选择{自然}(例如n)(例如m)n≡m使类型检查器能够确定您想要在这种情况下是自然数suc。*反思。有两种新的反射结构:-引用e中的目标x在e中,x的值表示目标类型(整个表达式所需的类型)作为Agda术语的数据类型(见下文)。例如,例子:example=quoteGoal x in{!at this point x=def(引号ℕ) [] !}-引号x:名称如果x是定义的名称(函数、数据类型、记录或构造函数),引用x将x表示为基本类型Name中的值(请参见下文)。引用的术语使用以下内置和原语(可用来自标准库模块Reflection):--Agda名称的类型。假设名称:集合{-#BUILTIN QNAME名称#-}primitive primQNameEquality:名称姓名布尔--参数。显式?=布尔数据参数A:设置位置arg:显式?A类精氨酸A{-#构建参数#-}{-#内置ARGARG参数#-}--Agda术语的类型。data Term:设置位置var(变量):ℕ → 列表(参数术语)期限con:姓名列表(参数术语)期限def:名称列表(精氨酸术语)期限林:明确?期限期限pi:精氨酸术语期限期限排序:术语未知:术语{-#BUILTIN AGDATERM术语#-}{-#BUILTIN AGDATERMVAR变量#-}{-#BUILTIN AGDATERMCON con#-}{-#BUILTIN AGDATERMDEF定义#-}{-#构建AGDATERMLAM lam#-}{-#构建AGDATERMPI pi#-}{-#BUILTIN AGDATERMSORT排序#-}{-#BUILTIN AGDATERMUNSUPPORTED未知#-}在处理内部决策时,反思可能很有用过程,例如标准库的环解算器。*轻微的记录定义改进。记录类型的定义现在在类型检查时可用记录模块定义。这意味着你可以定义事物如下所示:记录类别:设置哪里领域对象:集合_=>_:对象对象设置-- ...--在以下情况之前不可能:op:类别op=记录{Obj=Obj;_=>_=λA BB=>A}工具-----*“Goal type and context”命令现在显示之前的目标类型上下文,上下文以相反的顺序显示。“目标类型、上下文和推断类型“命令已在类似的方式。*显示模块内容命令。给定模块名M,Emacs模式现在可以显示所有M中的顶级模块和名称,以及名称。使用C-C C-o或菜单激活该命令。*自动命令。添加了搜索类型居民的命令。这个通过按C-C C-a(或使用目标菜单)调用命令。有几个标志和参数,例如“-c”可以启用搜索过程中的案件分割。有关更多信息,请参阅Agda维基:http://wiki.portal.chalmers.se/agda/pmwiki.php?n=Main.Auto*对于未解决的模块,现在可以生成HTML元变量,前提是--allow-unsolved-meta标志为已使用。--------------------------------------------------------------------------Agda 2版本2.2.6的发行说明------------------------------------------------------------------------自2.2.4以来的重要变化:语言--------*宇宙多态性(实验扩展)。要启用universe多态性,请给出标志--命令行上的通用多态性或(推荐)作为OPTIONS杂注。启用universe多态性时,Set接受一个参数,该参数为宇宙层面。例如,宇宙多态的类型身份是id:{a:Level}{a:Seta}A类答:。类型Level与一元自然数同构,应为使用BUILTINs LEVEL、LEVELZERO和LEVELSUC指定:数据级别:设置位置zero:级别suc:级别水平{-#构建级别#-}{-#BUILTIN LEVELZERO零#-}{-#构建级别suc#-}还有一个额外的BUILTIN LEVELMAX,最多可使用两个水平:max:级别级别水平最大零m=m最大(sucn)零=sucn最大(suc n)(suc m)=suc(max n m){-#内置水平最大值#-}非多态宇宙级别Set,Set糖等等用于Set zero、Set(suc zero)等。目前没有自动将类型从一个级别提升到另一个。它仍然可以通过定义类型来完成(相当笨拙)如下所示:提升的数据{a}(a:集合a):集合(例如a),其中升程:A举起的A然而,在一些指向未来。*多个构造函数、记录字段、假设或基元可以使用单一类型签名声明:data Bool:设置位置假真:布尔假设A B:设置*记录字段可以是隐式的:记录R:设置哪里领域{A} :设置f:答A类{B C}D{E}:设置克:乙C类E类默认情况下,不打印隐式字段。*可以定义记录构造函数:记录∑(A:设置)(B:ASet):设置位置构造函数__领域项目₁ : A类项目₂ : B项目在本例中,_获取类型(项目:A)B项目₁ → ∑A B。对于隐式字段,相应的构造函数参数变为隐性的。请注意,构造函数是在/eouter/scope中定义的,因此固定性声明必须在记录定义之外给出。构造函数不在记录模块内的范围内。还要注意,尚未实现记录的模式匹配然而。*构建挂钩以实现平等。数据类型数据选择{A:Set}(x:A):A设置位置ref:x≡x可以使用以下命令指定为内置相等类型杂注:{-#构建等式_≡_#-}{-#内置REFL ref#-}内置等式用于新的重写构造下面描述的primTrustMe原语。*新的重写构造。如果eqn:a≡b,其中_≡_是内置等式(见上文)现在可以写了f ps重写eqn=rhs而不是f ps与a|eqn... | ._ | ref=相对湿度重写构造具有重写目标和上下文由给定的等式(从左到右)决定。您可以使用几个等式(按顺序)进行重写,方法是将它们带有竖线(|):f ps重写eqn₁ | 当量(eqn)₂ | … = 相对湿度重写后还可以添加子句:fps用e重写eqns…|p=rhs请注意,如果您想,模式匹配会在重写之前进行重写,然后进行模式匹配,可以在重写。有关一些示例,请参阅test/success/Rewrite.agda。*添加了一个新的原语primTrustMe:primTrustMe:{A:Set}{xy:A}x≡y这里_≡_是内置等式(参见builtin hooks for equality,以上)。如果x和y在定义上相等,那么primTrustMe{x=x}{y=y}减少为refl。请注意,编译器将primTrustMe的所有用法替换为REFL内置,不检查定义是否相等。不正确使用primTrustMe可能会导致分段错误或类似错误问题。有关primTrustMe的使用示例,请参阅数据。版本中的字符串标准库的0.3,用于实现可判定使用基本布尔等式对字符串进行等式。*对IMPORT杂注的语法和语义的更改,包括哈斯克尔外国金融机构使用。这样的杂注现在必须具有以下内容形式:{-#IMPORT<模块名称>#-}这些杂注被解释为/qualified/imports,因此Haskell名字需要限定(除非它们来自Haskell前奏)。*水平制表符(U+0009)不再被视为白色空间。*不再支持行杂注。*--include-path标志不能再用作杂注。*证明无关性的实验性和不完全支持已禁用。工具-----*Emacs模式中的新“intro”命令。当有一种规范的方式时构建目标类型的东西(例如,如果目标类型是一对),可以用这种方式细化目标。命令适用于以下目标类型:-一种数据类型,其中只有一个构造函数可以用于构造一个目标类型的元素。(例如,如果目标是一个非空向量,将引入“cons”。)-记录类型。将引入一个记录值。隐性的除非显示隐式参数,否则将不包括字段已打开。-一种函数类型。lambda绑定尽可能多的变量将介绍。变量名称将从目标类型,如果其正规形式是从属函数类型,否则,它们将是“x”的变体。隐式lambdas将仅当隐式参数的显示被切换时才插入上的。可以使用refine命令(C-C C-r)调用此命令当目标为空时。(中refine命令的旧行为这种情况是使用minibuffer请求表达式。)*如果当前文件类型检查成功,没有任何警告。*如果加载了文件F,并且该文件定义了模块M,则它是一个如果F不是根据include定义M的文件,则出错路径。注意,命令行工具和Emacs模式定义了相对包含路径的含义不同:命令行工具相对于当前工作目录解释它们,而Emacs模式相对于当前项目。(例如,如果模块A.B.C从文件<some-path>/A/B/C.agda,则根目录为<some-path>)*如果包含路径上有多个文件匹配给定的模块名称。*接口文件是可重定位的。您可以在源树周围移动只要以相应的方式更新包含路径。注释如果模块M的时间戳严格为比相应接口文件(M.agdai)更新。*当存在最新的接口时,不再进行类型检查。(以前,最初的模块总是经过类型检查。)*Emacs(.agda.el)的语法高亮文件不再使用。--emacs标志已被删除。(语法突出显示信息缓存在接口文件中。)*阿加特和阿隆佐的编纂者已经退休。选项--玛瑙、--alonzo和--malonzo已被去除。*MAlonzo输出的默认目录是项目的根目录目录。--malonzo-dir标志已重命名为--compile-dir。*Emacs模式:C-C C-x C-d不再重置类型检查状态。C-C C-x C-r可用于更完整的重置。C-C C-x C-s公司(用于重新加载语法突出显示信息)已删除。可以使用C-C C-l代替。*Emacs模式用于定义一些“缩写”,除非用户显式关闭了此功能。新的默认设置是/not/to添加任何缩写。可以通过自定义获取旧的默认值agda2-mode-abbrevs-use-defaults(自定义缓冲区可以是通过在Agda文件后键入M-x customize-group agda2 RET获得已加载)。--------------------------------------------------------------------------Agda 2版本2.2.4的发行说明------------------------------------------------------------------------自2.2.2以来的重要变化:*更改为“open-import”和“open-module”的语义。这个宣言打开导入M<使用/隐藏/重命名>现在转换为导入A打开A<使用/隐藏/重命名>而不是导入A<使用/隐藏/重命名>打开A。相同的翻译用于“开放模块M=E…”。声明包含关键字as或public的方式(“as”总是与import一起使用,“public”总是与open一起使用)。此更改意味着导入指令不会影响符合条件的使用open-import/module时的名称。要养成你的老习惯可以使用上面的扩展版本。*在参数化模块中公开打开的名称不再继承模块参数。例子:模块A,其中假设X:集合模块B(Y:设置),其中公开公开在Agda 2.2.2 B.X中,X具有类型(Y:设置)设置,而在Agda 2.2.4中B.X的类型为Set。*以前无法导出给定的构造函数名称通过同一模块中的两个不同的“openpublic”语句。现在这是可能的。*Unicode下标数字现在可以用于universes(集合₀, 设置₁, …): 设置等于Set1。--------------------------------------------------------------------------Agda 2版本2.2.2的发行说明------------------------------------------------------------------------自2.2.0以来的重要变化:工具-----*--malonzodir选项已重命名为--malonzzo-dir。*默认情况下,agda--html的输出放在名为“html”。基础设施--------------*Emacs模式包含在Agda Cabal软件包中,并已安装通过电缆安装。启用Emacs模式的推荐方法是在.emacs中包含以下代码:(加载文件(let((coding-system-for-read'utf-8))(外壳命令到字符串“agda-mode locate”))--------------------------------------------------------------------------Agda 2版本2.2.0的发行说明------------------------------------------------------------------------自2.1.2(2007年8月16日发布)以来的重要变化:语言--------*详尽的模式检查。Agda投诉是否有人失踪函数定义中的子句。*支持共导类型。此功能位于开发/评估,可能会发生变化。http://wiki.portal.chalmers.se/agda/agda.php?n=ReferenceManual.Codatatypes*另一个实验功能:尺寸大小的类型,这可以让它更容易解释代码终止的原因。*改进了以构造函数为首的函数的约束求解右侧。http://wiki.portal.chalmers.se/agda/agda.php?n=ReferenceManual.FindingTheValuesOfImplicitArguments(参考手册查找隐式参数的值)*一个简单、类型良好的外部函数接口,允许使用Agda代码中的Haskell函数。http://wiki.portal.chalmers.se/agda/pmwiki.php?n=Docs.FFI*所有、->和\的标记可以写为∀,和λ。*荒谬的λ:λ()和λ{}。http://thread.gmane.org/gmane.comp.lang.agda/440*可以省略其值可以推断的记录字段。*如果Agda发现无法到达的子句或模式,它会抱怨变量“隐藏”匹配类型的隐藏构造函数。http://thread.gmane.org/gmane.comp.lang.agda/720工具-----*案例拆分:用户界面可以将模式变量替换为相应的构造函数模式。你有一个新左手为每一个可能的构造函数提供支持。http://wiki.portal.chalmers.se/agda/pmwiki.php?n=Main.QuickGuideToEditingTypeCheckingAndCompilingAgdaCode*MAlonzo编译器。http://wiki.portal.chalmers.se/agda/pmwiki.php?n=Docs.MAlonzo*一个新的Emacs输入方法,其中包含许多Unicode的绑定符号,默认情况下在Emacs模式下激活。http://wiki.portal.chalmers.se/agda/pmwiki.php?n=Docs.UnicodeInput*突出显示的超链接HTML可以从Agda源代码生成代码。http://wiki.portal.chalmers.se/agda/pmwiki.php?n=Main.HowToGenerateWebPagesFromSourceCode*不再支持命令行交互模式(agda-I),但应该仍然有效。http://thread.gmane.org/gmane.comp.lang.agda/245*处理大型项目时的重新加载时间现在相当长更好。http://thread.gmane.org/gmane.comp.lang.agda/551图书馆---------*标准库正在开发中。http://wiki.portal.chalmers.se/agda/pmwiki.php?n=Librarys.StandardLibrary文档-------------*Agda维基组织得更好。对于新来者现在可以找到相关信息。http://wiki.portal.chalmers.se/agda/基础设施--------------*易于安装的Windows和Debian/Uubuntu软件包准备好了。http://wiki.portal.chalmers.se/agda/pmwiki.php?n=Main.下载*Agda 2.2.0可从Hackage获得。http://hackage.haskell.org/