版本-2-3-2

--------------------------------------------------------------------------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:ℕ->\8469»f z=zf(suc z)=ss zf(ss n)=n模式同义词通过在抽象上进行替换来实现语法,所以定义是范围检查的,而不是类型检查的。他们对宇宙构建特别有用。*合格的mixfix操作员现在可以通过限定第一个操作符来使用限定的mixfix操作符名称的一部分。例如导入数据。Nat作为Nat导入数据。Bool作为Bool2=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=零两个=一个目标和错误显示======================*隐藏参数“arg”引入的元变量现在打印为arg_number,而不是number。[第526期]*Agda在打印时扩展匿名模块中的标识符。应该让一些目标更易于阅读。[第721期]*当模块标识符不明确时,Agda会告诉您其中是一个数据类型模块。[第318、705期]类型检查=============*改进的覆盖检查程序。覆盖范围检查器打开具有构造函数或文字模式的参数,提交向最左翼分裂,取得进展。考虑向量的查找函数:数据Fin:Nat→设置位置零:{n:Nat}→Fin(例如n)suc:{n:Nat}→Fin n→Fin(suc n)数据Vec(A:设置):Nat→设置位置[]:Vec A零_●_:{n:Nat}→A→Vec A n→Vec B(例如)_!!_ : {A:Set}{n:Nat}→Vec A n→Fin n→A(x|xs)!!零=x(x|xs)!!suc i=xs!!在2.3.0之前的Agda中,此定义被拒绝,除非我们添加荒谬的条款[] !! ()这是因为覆盖率检查器在拆分时提交尽管这不可避免地导致覆盖失败,因为缺少空向量[]的事例。覆盖率检查器的改进包括提交只有在有机会覆盖的裂缝上,因为一切都有可能存在构造函数模式。因此,阿格达现在将分裂首先是Fin参数,因为零和suc的情况都是存在。然后,它可以在Vec参数上分裂,因为通过将n实例化为suc,已经排除了空向量。*实例参数解析现在将考虑以下候选项仍然需要隐藏的参数。例如:记录等式(A:设置):设置其中字段eq:A→A→Bool打开等式{{…}}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=_在(x:A)(y:Bx)->x(x,y)lect(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公司。例如,在测试:Bool->{ABC:Set}->Set测试真{A}=A测试错误{B=B}=BAgda将在所有子句中引入参数A和B,导致测试: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:单位)→T u带单元的测试单元…|_=λ{v}→v此前,Agda会热切地将隐藏参数{v}引入为未命名的左侧参数,无法引用它。相关问题655也已得到解决。现在可以了定义同义词名称=表达式即使表达式类型以隐藏量词开头。简单示例:id2=id这导致在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′)test:(y:Bool)→not y≡not′y测试y=反射与记录或荒谬模式匹配不算“使用”,所以我们得到了某种形式的无关性证明:data:设置位置record⊤:设置位置构造函数琐碎data Bool:设置位置对错:布尔真:Bool→Set真真=⊤真假=趣味:(b:Bool)→True b→Boolfun true triffy=真fun false()测试:(b:Bool)→(xy:True b)→fun b x≡fun b y测试b x y=reftest/success/NonvariantPolarity.agda中的更多示例。虚参数:考虑记录和数据类型的参数`“使用”,即使它们实际上没有被使用。考虑:错误:Nat→Set假零=假(sucn)=假n模块不变量,其中记录Bla(n:Nat)(p:False n):设置位置模块非变量,其中Bla:(n:Nat)→False n→设置Blan p=⊤即使记录“Bla”不使用其参数n和p被视为已使用,允许使用“幻影类型”技术。相反,函数“Bla”的自变量被识别为未使用。如果我们打开了Invariant但没有解决,那么下面的代码会进行类型检查如果打开Nonvariant,则返回meta。drop-suc:{n:Nat}{p:False n}→Bla(sucn)p→Bla n p下降-成功_=_bla:(n:Nat)→{p:False n}→bla n p→bla零{()}bbla(sucn)b=bla n(drop-suc b)如果“Bla”被视为不变量,则递归中的隐藏参数调用可以推断为“p”。如果它被视为非变量,那么`Blan X=Blan p'不包含“X=p”和隐藏参数仍未解决。由于“bla”实际上并不使用其隐藏参数,它的价值并不重要,可以搜索。不幸的是,“bla”的极性分析只发生在type之后因此,检查“bla”在“p”中是非变量的信息是求解元变量时尚不可用。(参见test/fail/BrokenInferenceDueToNonvariantPolarity.agda)*Agda现在扩展了简单的定义(一个子句,终止)检查函数是否以构造函数开头。[第747期]例如,以下操作现在也有效:MyPair:设置->设置->设置MyPair A B=A B对Vec:设置->自然->设置Vec A零=单位Vec A(sucn)=我的配对A(Vec A n)这里,Unit和Pair是数据或记录类型。编译器后端=================*-Werror现在可重写。为了能够编译包含警告的Haskell模块-MAlonzo后端的Werror标志已被重写。如果,例如,编译时传递了--ghc-flag=-Wwarn,可以获取放弃以下内容:data PartialBool:设置位置true:PartialBool{-#COMPILED_DATA PartialBool Bool True#-}默认行为保持原样,并拒绝上述行为程序。工具=====Emacs模式----------*异步Emacs模式。现在可以在对缓冲区进行类型检查时使用Emacs。如果缓冲区在type-checker运行时进行编辑,然后语法高亮显示将类型检查完成后不更新。*交互式语法突出显示。在对缓冲区进行类型检查时,会更新语法高亮显示:首先,缓冲区被粗略地突出显示(没有过载的定义信息施工人员)。如果突出显示级别为“交互式”,则代码段当前正在进行类型检查的内容也被突出显示出来。默认值为“非交互”。)当对共同块进行类型检查时,它会突出显示正确(此突出显示包括潜在的警告非终止)。可通过新配置控制突出显示级别可变agda2-highlight-level。*现在可以一次执行多个案例分割。考虑以下示例:_==_:布尔→布尔→布尔b₁==b⁄={!!}如果在“b₁b⁄”上拆分,则会得到以下代码:_==_:布尔→布尔→布尔true==true={!!}真==假={!!}false==true={!!}false==false={!!}变量的顺序很重要。考虑以下代码:查找:{a n}{a:Set a}→Vec a n→Fin n→a查找xsi={!!}如果在“xsi”上拆分,则会得到以下代码:查找:{an}{a:Set a}→Vec a n→Fin n→a查找[]()查找(xxs)零={!!}查找(xŞxs)(suc i)={!!}然而,如果在“ixs”上拆分,则会得到以下代码而是:查找:{an}{a:Set a}→Vec a n→Fin n→a查找(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}dataℕ:设置位置零:ℕsuc:ℕ→ℕ_+_ : ℕ → ℕ → ℕ零+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}\Agda数据类型{ℕ}\AgdaSymbol{:}\AgdaPrimitiveType{设置}\AgdaKeyword{其中}这些latex命令在agda.sty中定义(由\usepackage{agda})并导致高亮显示。*latex后端检查乳胶是否找到agda.sty环境,如果它不是默认的agda.sty是从agda的数据dir到工作目录中(因此可供乳胶环境)。如果默认agda.sty不令人满意(颜色、字体、间距、,等)然后用户可以修改它并将其放置在乳胶环境可以找到它。希望大多数方面都应该可通过agda.sty修改,而不必调整实施。*--latex-dir可用于更改默认输出目录。
页面上次修改时间:2013年6月11日上午10:59
技术支持私人维基