×

Sparcl公司:一种用于部分可逆计算的语言。 (英语) Zbl 07834330号

摘要:可逆性是计算机科学中的一个基本概念,在软件开发中有各种表现形式(序列化器/反序列化器、解析器/打印机、重做/撤消、压缩器/解压缩器等)。完全可逆必然需要双射性,但用构造双射函数来开发可逆程序的直接方法限制性太强,不实用。在本文中,我们采取了不同的方法,重点关注部分可逆的函数&如果某些参数是固定的,那么函数将变为可逆的。最简单的例子是加法,当固定一个操作数时,加法是可逆的。更复杂的示例包括基于熵的压缩方法(例如,哈夫曼编码),该方法携带输入符号的出现频率(以某些格式,如哈夫曼树),固定该频率信息使压缩方法可逆。
我们发展了一种语言斯巴克尔对于以自然的方式编写此类函数,其中部分可逆性是规范,双客体是特例,因此在不影响正确性的情况下获得了显著的表达能力。设计这种语言的挑战是允许普通编程(“部分”部分)与可逆部分自由交互,同时通过构造保证可逆性。语言斯巴克尔是线性类型的,并且有一个类型构造函数来区分受可逆计算影响的数据和不受可逆计算限制的数据。我们给出了该语言的语法、类型系统和语义,并证明了斯巴克尔正确保证其程序的可逆性。我们展示了斯巴克尔示例包括从预序和中序遍历重建树、哈夫曼编码、算术编码和LZ77压缩。

MSC公司:

68甲18 函数编程和lambda演算

软件:

FliPpr公司
PDF格式BibTeX公司 XML格式引用
全文: 内政部

参考文献:

[1] Abel,A.和Chapman,J.(2014)《通过延迟单体中的评估进行归一化:通过共模式和大小类型进行共聚的案例研究》。在《数学结构函数编程第五次研讨会论文集》中,MSFP@ETAPS2014年4月12日,法国格勒诺布尔,第51-67页·Zbl 1464.68050号
[2] Abramov,S.M.,Glück,R.&Klimov,Y.A.(2006)惰性语言逆计算的通用解析算法。《系统信息学的观点》,第六届安德烈·埃尔肖夫国际纪念会议,2006年6月27日至30日,俄罗斯新西伯利亚,PSI 2006。论文,修订版,Virbitskaite,I.和Voronkov,A.(编辑),《计算机科学讲义》,第4378卷。斯普林格,第27-40页·Zbl 1185.68328号
[3] Abramsky,S.(2005)可逆计算的结构方法。理论。计算。科学347(3),441-464·Zbl 1081.68019号
[4] Abramsky,S.,Haghverdi,E.&Scott,P.J.(2002)交互几何与线性组合代数。数学。结构。计算。科学12(5),625-665·Zbl 1014.03056号
[5] Almendros-Jiménez,J.M.&Vidal,G.(2006)《感应序列函数的自动部分反演》。《函数语言的实现和应用》,第18届国际研讨会,IFL 2006,匈牙利布达佩斯,2006年9月4日至6日,修订论文集。施普林格,第253-270页·Zbl 1226.68024号
[6] Altenkirch,T.,Chapman,J.&Uustalu,T.(2010)单子不一定是内函子。2010年3月20日至28日,在《软件科学和计算结构基础》第13届国际会议上,FOSSACS 2010,作为欧洲软件理论与实践联合会议的一部分,ETAPS 2010,塞浦路斯帕福斯。诉讼程序。施普林格,第297-311页·Zbl 1284.18010号
[7] Altenkirch,T.&Grattage,J.(2005)函数量子编程语言。2005年6月26-29日,第20届IEEE计算机科学逻辑研讨会(LICS 2005),美国伊利诺伊州芝加哥,会议记录。IEEE计算机学会,第249-258页。
[8] Antoy,S.、Echahed,R.和Hanus,M.(2000)A需要缩小战略。《美国临床医学杂志》第47卷第4期,第776-822页·Zbl 1327.68141号
[9] Axelsen,H.B.,Glück,R.&Yokoyama,T.(2007)可逆机器代码及其抽象处理器架构。计算机科学-理论与应用,第二届俄罗斯计算机科学国际研讨会,CSR 2007,俄罗斯叶卡捷琳堡,2007年9月3-7日,会议记录。施普林格,第56-69页·Zbl 1188.68108号
[10] Baker,H.G.(1992)《财富的历史——垃圾收集的热力学》。内存管理,国际研讨会IWMM 92,法国圣马洛,1992年9月17日至19日,会议记录。施普林格,第507-524页。
[11] Bennett,C.H.(1973)计算的逻辑可逆性。IBM J.Res.Dev.17(6),525-532·Zbl 0267.68024号
[12] Bernardy,J.、Boespflug,M.、Newton,R.R.、Peyton Jones,S.和Spiwack,A.(2018)Linear haskell:高阶多态语言中的实用线性。PACMPL2(POPL),5:1-5:29。
[13] Capretta,V.(2005)通过共导类型的一般递归。逻辑方法计算。科学。1(2),第1条。请提供“Capretta(2005)”的页码·兹比尔1125.68038
[14] Chen,C.&Sabry,A.(2021)紧闭范畴的计算解释:负型和分数型可逆规划。程序。ACM计划。语言5(POPL),1-29。
[15] Chin,W.(1993)走向自动元组策略。1993年6月14日至16日在丹麦哥本哈根举行的ACM SIGPLAN部分评估和基于语义的程序操作研讨会会议记录。ACM,第119-132页。
[16] Davies,R.&Pfenning,F.(2001)阶段计算的模态分析。美国医学会杂志48(3),555-604·Zbl 1323.68107号
[17] Dershowitz,N.和Mitra,S.(1999)《危险》。《重写技术与应用》,第十届国际会议,RTA-99,意大利特伦托,1999年7月2-4日,会议记录。斯普林格,第16-29页·Zbl 0916.00018号
[18] Eppstein,D.(1985)程序反转的启发式方法。在IJCAI中,第219-221页。
[19] Foster,J.N.、Greenwald,M.B.、Moore,J.T.、Pierce,B.C.和Schmitt,A.(2007)《双向树转换的组合器:视图更新问题的语言学方法》。ACM事务处理。程序。语言系统29(3),第17条。请提供“Foster等人(2007)”的页码。
[20] Frank,M.P.(1997)R编程语言和编译器。麻省理工学院可逆计算项目备忘录#M8,麻省理工大人工智能实验室。网址:https://github.com/mikepfrank/Rlang-compiler/blob/master/docs/MIT-RCP-MemoM8-RProgLang.pdf。
[21] Gibbons,J.(2002)计算函数程序。《程序构造数学中的代数和余代数方法》,Backhouse,R.,Crole,R.&Gibbons,J.(eds)。计算机科学讲义,第2297卷。Springer-Verlag,第148-203页。网址:http://www.cs.ox.ac.uk/people/jeremy.gibbons/publications/acmmpc-calcfp.pdf。
[22] Glück,R.和Kawabe,M.(2003)一种具有等式和构造函数的函数语言的程序反相器。《程序设计语言与系统》,第一届亚洲研讨会,2003年11月27日至29日,中国北京,APLAS,2003,会议记录,Ohori,A.(ed)。计算机科学讲义,第2895卷。施普林格,第246-264页·兹比尔1254.68057
[23] Glück,R.&Kawabe,M.(2004)基于LR解析的确定性逆程序推导。在FLOPS中。施普林格,第291-306页·Zbl 1122.68394号
[24] Glück,R.&Yokoyama,T.(2016)可逆祈使语的线性时间自我解释者。计算。软33(3),3_108-3_128。
[25] Glück,R.&Yokoyama,T.(2019)通过可逆递归和迭代从其遍历构造二叉树。信息处理。第147、32-37页·兹比尔1473.68214
[26] Gomard,C.K.&Jones,N.D.(1991)非类型λ-演算的部分评估者。J.功能。程序.1(1),21-69·Zbl 1155.68350号
[27] Hidaka,S.,Hu,Z.,Inaba,K.,Kato,H.,Matsuda,K.&Nakano,K.(2010)双向图变换。2010年9月27日至29日,在美国马里兰州巴尔的摩举行的第15届ACM SIGPLAN功能编程国际会议上。ACM,第205-216页·Zbl 1323.68075号
[28] Hu,Z.,Iwasaki,H.,Takeichi,M.&Takano,A.(1997)Tupling计算消除了多次数据遍历。1997年6月9日至11日在荷兰阿姆斯特丹举行的1997年ACM SIGPLAN功能编程国际会议(ICFP'97)的会议记录。ACM,第164-175页·Zbl 1369.68142号
[29] Hu,Z.,Mu,S.&Takeichi,M.(2004)基于双向转换开发结构化文档的可编程编辑器。2004年8月24日至25日,意大利维罗纳,2004年ACM SIGPLAN部分评估和基于语义的程序操作研讨会论文集。ACM,第178-189页。
[30] Jacobsen,P.A.H.,Kaarsgaard,R.&Thomsen,M.K.(2018)《核心乐趣:一种类型化的函数可逆核心语言》。《可逆计算——第十届国际会议》,RC 2018,英国莱斯特,2018年9月12日至14日,会议记录。施普林格,第304-321页·Zbl 1515.68091号
[31] James,R.P.和Sabry,A.(2012)《信息效应》。2012年1月22日至28日,美国宾夕法尼亚州费城,第39届ACM SIGPLAN-SIGACT编程语言原理研讨会论文集,2012年POPL。ACM,第73-84页·Zbl 1321.68267号
[32] Jones,M.P.(1995)《合格类型:理论与实践》。美国纽约:剑桥大学出版社。
[33] Jones,N.D.、Gomard,C.K.和Sestoft,P.(1993)部分评估和自动程序生成。普伦蒂斯·霍尔计算机科学国际系列。普伦蒂斯·霍尔·Zbl 0875.68290号
[34] Joyal,A.,Street,R.和Verity,D.(1996)追踪单体类。数学。程序。剑桥菲洛斯。Soc.119(3),447-468·Zbl 0845.18005号
[35] Kennedy,A.J.和Vytiniotis,D.(2012)每一位都很重要:键入数据和程序的二进制表示。J.功能。程序.22(4-5),529-573·Zbl 1252.68086号
[36] Kirkeby,M.H.&Glück,R.(2019)条件构造器项重写系统的半嵌入。在基于逻辑的程序合成和转换第29届国际研讨会上,2019年10月8日至10日,葡萄牙波尔图,LOPSTR 2019,修订论文集。施普林格,第243-259页·Zbl 1502.68152号
[37] Kirkeby,M.H.&Glück,R.(2020)《反演框架:条件项重写系统反演的推理》。在2020年9月9日至10日于意大利博洛尼亚举行的第22届国际声明性编程原则与实践研讨会上。ACM,第9:1-9:14页。
[38] Kristensen,J.T.,Kaarsgaard,R.&Thomsen,M.K.(2022a)通过可用的隐式参数分析在危险中分支执行对称。CoRR.abs/2212.03161。
[39] Kristensen,J.T.,Kaarsgaard,R.&Thomsen,M.K.(2022b)《危险:可逆函数编程语言》。CoRR.abs/2209.02422.公司。
[40] Kühnemann,A.、Glück,R.和Kakehi,K.(2001)《关于累积和非累积功能程序》。在RTA中。斯普林格,第154-168页·Zbl 1018.68017号
[41] Landauer,R.(1961)计算过程中的不可逆性和发热。IBM J.Res.Dev.5(3),183-191年·Zbl 1160.68305号
[42] Launchbury,J.&Jones,S.L.P.(1994)《惰性功能状态线程》。1994年6月20日至24日,美国佛罗里达州奥兰多,ACM SIGPLAN’94编程语言设计与实现(PLDI)会议记录。ACM,第24-35页。
[43] Lutz,C.(1986)Janus:一种时间可逆的语言。给R.Landauer的信。可用时间:http://tetsuo.jp/ref/janus.pdf。
[44] Mac Lane,S.(1998)《工作数学家的类别》,第二版,《数学研究生教材》,第5卷。斯普林格·Zbl 0906.18001号
[45] Matsuda,K.(2020)多重注释箭头的线性类型的模块化推理。编程语言和系统——第29届欧洲编程研讨会,ESOP 2020,作为欧洲软件理论与实践联合会议的一部分,ETAPS 2020,爱尔兰都柏林,2020年4月25日至30日,会议记录。斯普林格。第456-483页。完整版本位于:http://arxiv.org/abs/1991.00268v2。 ·Zbl 1522.68125号
[46] Matsuda,K.、Hu,Z.、Nakano,K.,Hamana,M.和Takeichi,M..(2007)基于视图补码函数自动派生的双向转换。2007年10月1日至3日在德国弗莱堡举行的第十二届ACM SIGPLAN功能编程国际会议记录,ICFP 2007。ACM,第47-58页·Zbl 1291.68147号
[47] Matsuda,K.、Inaba,K.和Nakano,K.(2012)具有多个数据遍历的累积函数的多项式时间反演计算。高阶符号。计算25(1),3-38·兹比尔1360.68366
[48] Matsuda,K.、Mu,S.-C.、Hu,Z.和Takeichi,M.(2010)基于语法的可逆程序方法。在员工持股计划中。施普林格,第448-467页·Zbl 1260.68106号
[49] Matsuda,K.和Wang,M.(2013)《FliPpr:一种更漂亮的可逆打印系统》。在员工持股计划中。斯普林格,第101-120页·Zbl 1381.68027号
[50] Matsuda,K.和Wang,M.(2015a)《透镜应用双向编程》。在ICFP中。ACM,第62-74页·Zbl 1360.68335号
[51] Matsuda,K.和Wang,M.(2015b),单态变换的“免费双向化”。科学。计算。程序11179-109。
[52] Matsuda,K.和Wang,M.(2018a)应用双向编程:混合镜头和语义双向化。J.功能。方案28,e15。
[53] Matsuda,K.和Wang,M.(2018b)用活页夹嵌入可逆语言:FliPr语言的一个例子。在第11届ACM SIGPLAN Haskell国际研讨会的会议记录中,哈斯克尔@ICFP2018年9月27日至17日,美国密苏里州圣路易斯。ACM,第158-171页。
[54] Matsuda,K.和Wang,M.(2018c)HOBiT:不使用镜头组合器编程镜头。在员工持股计划中。施普林格,第31-59页。
[55] Matsuda,K.和Wang,M.(2020)《Sparcl:部分不可逆计算语言》。程序。ACM计划。语言4(ICFP),118:1-118:31。
[56] Mazurak,K.、Zhao,J.和Zdancewic,S.(2010)系统自由度中的轻量级线性类型。在TLDI中。ACM,第77-88页。
[57] Mcbride,C.&Paterson,R.(2008)《应用程序设计与效果》。J.功能。程序.18(1),1-13·Zbl 1128.68020号
[58] Mogensen,T.Æ。(2005)防护方程的半隐式。生成性编程和组件工程,第四届国际会议,GPCE 2005,爱沙尼亚塔林,2005年9月29日至10月1日,会议记录。施普林格,第189-204页。
[59] Mogensen,T.Æ。(2006)关于半逆变器实施的报告。《系统信息学的观点》,第六届安德烈·埃尔肖夫国际纪念会议,2006年6月27日至30日,俄罗斯新西伯利亚,PSI 2006。修订论文,Virbitskaite,I.&Voronkov,A.(eds)。计算机科学讲义,第4378卷。施普林格,第322-334页。
[60] Mogensen,T.Æ。(2008)功能参数的半输入。2008年1月7日至8日在美国加利福尼亚州旧金山举行的2008年ACM SIGPLAN部分评估和基于语义的程序操作研讨会会议记录。ACM,第21-29页。
[61] Moggi,E.(1998)Functor类别和两级语言。1998年3月28日至4月4日,作为欧洲软件理论与实践联合会议的一部分,在《软件科学与计算结构基础》第一届国际会议FoSSaCS’98中,ETAPS’98,葡萄牙里斯本,会议记录。施普林格,第211-225页·Zbl 0904.03017号
[62] Morris,J.G.(2016)《两全其美:线性函数规划》。2016年9月18日至22日在日本奈良举行的第21届ACM SIGPLAN功能编程国际会议记录,ICFP 2016。ACM,第448-461页·Zbl 1360.68336号
[63] Mu,S.&Bird,R.S.(2003)《从遍历中重建树:程序反转的案例研究》。《程序设计语言与系统》,第一届亚洲研讨会,2003年11月27日至29日,中国北京,APLAS,2003,会议记录,Ohori,A.(ed)。计算机科学讲义,第2895卷。施普林格,第265-282页·Zbl 1254.68083号
[64] Mu,S.,Hu,Z.&Takeichi,M.(2004a)双向更新的代数方法。《程序设计语言与系统:第二届亚洲研讨会》,2004年11月4日至6日,台湾台北,APLAS 2004。诉讼程序。斯普林格,第2-20页·兹伯利1116.68411
[65] Mu,S.,Hu,Z.&Takeichi,M.(2004b)可逆计算的内射语言。2004年7月12日至14日在英国苏格兰斯特林举行的第七届国际会议《程序构建数学》。施普林格,第289-313页·兹比尔1106.68345
[66] 尼尔森,F.和尼尔森,H.R.(1992)《两级函数语言》。剑桥理论计算机科学丛书。剑桥大学·Zbl 0763.68023号
[67] Nishida,N.,Sakai,M.&Sakabe,T.(2005)构造器项重写系统的部分反转。《术语改写与应用》,第16届国际会议,RTA 2005,日本奈良,2005年4月19日至21日,会议记录。施普林格,第264-278页·Zbl 1078.68662号
[68] Nishida,N.和Vidal,G.(2011)尾递归函数的程序反转。在RTA中。达格斯图尔-莱布尼茨-泽特鲁姆-福尔信息宫(Schloss Dagstuhl-Leibniz-Zentrum fuer Informatik),第283-298页·Zbl 1236.68144号
[69] Ohori,A.(ed)(2003)《编程语言与系统》,第一届亚洲研讨会,2003年APLAS,中国北京,2003年11月27日至29日,会议记录。计算机科学讲义,第2895卷。斯普林格·Zbl 1029.00062号
[70] Paterson,R.(2012)构建应用函子。在MPC中。施普林格,第300-323页·Zbl 1358.68061号
[71] Rendel,T.&Ostermann,K.(2010)可逆语法描述:统一解析和漂亮打印。在哈斯克尔。ACM,第1-12页。
[72] Reynolds,J.C.(1998)高阶编程语言的定义解释。高阶符号。计算11(4),363-397·Zbl 0934.68034号
[73] Rios,F.&Selinger,P.(2017)量子电路描述语言的分类模型。《第14届量子物理与逻辑国际会议论文集》,QPL 2017,荷兰奈梅亨,2017年7月3-7日,第164-178页·Zbl 1486.81067号
[74] Romanenko,A.(1991)《反演与元计算》。1991年6月17日至19日,美国康涅狄格州纽黑文耶鲁大学,《部分评估和基于语义的程序操作研讨会论文集》,PEPM’91。ACM,第12-22页。
[75] Rondon,P.M.、Kawaguchi,M.&Jhala,R.(2008)《液体类型》。2008年6月7日至13日,美国亚利桑那州图森市,ACM SIGPLAN 2008编程语言设计与实现会议论文集。ACM,第159-169页。
[76] Salomon,D.(2008)《数据压缩简介》。计算机科学本科专题。斯普林格·兹比尔1147.68021
[77] Selinger,P.和Valiron,B.(2006)经典控制量子计算的lambda演算。数学。结构。计算。科学16(3),527-552·Zbl 1122.68033号
[78] Srivastava,S.、Gulwani,S.,Chaudhuri,S.和Foster,J.S.(2011)程序反转的基于路径的归纳合成。2011年6月4日至8日,美国加利福尼亚州圣何塞市,2011年PLDI第32届ACM SIGPLAN编程语言设计与实现会议记录。ACM,第492-503页。
[79] 特雷斯。(2003)术语重写系统。《剑桥理论计算机科学导论》,第55卷。剑桥大学·Zbl 1030.68053号
[80] Tov,J.A.和Pucella,R.(2011)实用仿射类型。2011年1月26日至28日,美国德克萨斯州奥斯汀,第38届ACM SIGPLAN-SIGACT编程语言原理研讨会论文集,POPL 2011。ACM,第447-458页·Zbl 1284.68109号
[81] Virbitskaite,I.和Voronkov,A.(eds)(2007),《系统信息学的观点》,第六届国际安德烈·埃尔肖夫纪念会议,PSI 2006,俄罗斯新西伯利亚,2006年6月27日至30日。修订论文。计算机科学讲义,第4378卷。斯普林格。
[82] Vytiniotis,D.,Peyton Jones,S.L.,Schrijvers,T.&Sulzmann,M.(2011)OutsideIn(X)模块式推理与局部假设。J.功能。程序.21(4-5),333-412·Zbl 1262.68034号
[83] Wadler,P.(1993)线性逻辑的尝试。1993年8月30日至9月3日,波兰格但斯克,MFCS'93,第18届国际研讨会,《计算机科学数学基础》。施普林格,第185-210页·Zbl 0925.03040号
[84] Walker,D.(2004)《亚结构型系统》。在类型和编程语言高级主题中,Pierce,B.C.(ed)。麻省理工学院,第3-43页。
[85] Wang,M.,Gibbons,J.,Matsuda,K.&Hu,Z.(2013)重构模式匹配。科学。计算。程序。78(11), 2216-2242. 项目建设数学专题(MPC 2010)和Interaccion 2011互动系统方法开发专题。
[86] Xi,H.&Pfenning,F.(1998)通过依赖类型消除数组绑定检查。1998年6月17日至19日,加拿大蒙特利尔,ACM SIGPLAN’98编程语言设计与实现(PLDI)会议记录。ACM,第249-257页。
[87] Yokoyama,T.,Axelsen,H.B.&Glück,R.(2008)可逆编程语言的原理。2008年5月5日至7日在意大利伊斯基亚举行的第五届计算机前沿会议记录。ACM,第43-54页。
[88] Yokoyama,T.,Axelsen,H.B.和Glück,R.(2011)走向可逆函数语言。在RC中。施普林格,第14-29页·Zbl 1407.68075号
[89] Yokoyama,T.,Axelsen,H.B.&Glück,R.(2012)内射函数的优化可逆模拟。多值逻辑软计算。18(1),5-24·Zbl 1236.68068号
[90] Ziv,J.&Lempel,A.(1977)序列数据压缩的通用算法。IEEE传输。《信息论》23(3),337-343·兹伯利0379.94010
此参考列表基于出版商或数字数学图书馆提供的信息。它的项目与zbMATH标识符启发式匹配,并且可能包含数据转换错误。在某些情况下,zbMATH Open的数据对这些数据进行了补充/增强。这试图尽可能准确地反映原始论文中列出的参考文献,而不要求完整或完全匹配。