使用基于枚举模式的注释进行程序合成的制作方法

文档序号:22082712发布日期:2020-09-01 19:39阅读:186来源:国知局
使用基于枚举模式的注释进行程序合成的制作方法



背景技术:

本发明一般地涉及人工智能和机器学习,并且更具体地,涉及使用基于枚举模式的注释进行程序合成。

从声明性地编写的形式表达式合成可计算表达式(例如,程序、函数、数据)的尝试可以在不同层级完成(例如,编译器、解释器、特定领域语言(domain-specificlanguage,dsl)、来自配置文件的代码片段)。在程序合成中,当谓词(predicate)在计算中被不同地使用时,即使谓词具有相同的含义,逻辑公式也可以用不同的谓词来描述。在这样的框架中,可以被转换成程序的声明性描述被限制于以关于在计算中如何使用逻辑表达式的更有意识的方式描述的那些描述中。



技术实现要素:

根据本发明的实施例,提供了一种用于使用基于枚举模式的注释进行程序合成的系统。该系统包括用于存储程序代码的存储器设备,和至少一个处理器设备,其可操作地耦合到存储器设备。该至少一个处理器设备被配置为运行存储在存储器设备上的程序代码以:获得注释的项的集合,该集合包括一个或多个项,每个项都用枚举模式注释;使用自然语言处理将问题文本翻译成形式规范(formalspecification),该形式规范被描述为与谓词相关联的规则的集合;和基于注释的项的集合,合成满足形式规范的规则的集合的一个或多个项,以生成计算机程序。

根据本发明的另一个实施例,提供了一种用于使用基于枚举模式的注释进行程序合成的计算机实施方法。该方法包括:获得注释的项的集合,该集合包括一个或多个项,每个项都用枚举模式注释;使用自然语言处理将问题文本翻译成形式规范,该形式规范被描述为与谓词相关联的规则的集合;和基于注释的项的集合,合成满足形式规范的规则的集合的一个或多个项,以生成计算机程序。

这些和其他特征和优点将从下面结合附图阅读的对其说明性实施例的详细描述中变得显而易见。

附图说明

以下描述将参考以下附图提供优选实施例的细节,其中:

图1是根据本发明实施例的用于程序合成的系统/方法的概述的框图/流程图;

图2是根据本发明实施例的用于使用基于枚举模式的注释进行程序合成系统的框图;

图3是根据本发明实施例的用于使用基于枚举模式的注释进行程序合成的系统/方法的框图/流程图;

图4是根据本发明实施例的处理系统的框图;

图5是根据本发明的实施例的具有云消费者使用的本地计算设备与其进行通信的一个或多个云计算节点的说明性云计算环境的框图;和

图6是根据本发明实施例的由云计算环境提供的功能抽象层的集合的框图。

具体实施方式

这里描述的实施例提供了用于使用基于枚举模式的注释进行程序合成的系统和方法。在任何可能的技术细节结合层面,本发明可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本发明的各个方面的计算机可读程序指令。

计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的示例(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)、便携式压缩盘只读存储器(cd-rom)、数字多功能盘(dvd)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。

这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。

用于执行本发明操作的计算机程序指令可以是汇编指令、指令集架构(isa)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如smalltalk、c++等,以及常规的过程式编程语言—诸如“c”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(fpga)或可编程逻辑阵列(pla),该电子电路可以执行计算机可读程序指令,从而实现本发明的各个方面。

这里参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本发明的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。

这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。

也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。

附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

说明书中对本发明的“一个实施例”或“实施例”及其其他变型的引用意味着结合该实施例描述的特定特征、结构、特性等被包括在本发明的至少一个实施例中。因此,在整个说明书的不同地方出现的短语“在一个实施例中”或“在实施例中”以及任何其他变化不一定都指同一实施例。

应当理解,使用以下“/”、“和/或”和“至少一个”中的任何一个,例如,在“a/b”、“a和/或b”和“a和b中的至少一个”的情况下,意在包括仅选择第一个列出的选项(a)、或者仅选择第二个列出的选项(b)、或者选择选项(a和b)两者(除非这里中另有定义)。作为另一个示例,在“a、b和/或c”和“a、b和c中的至少一个”的情况下,这种措辞意在包括仅选择第一个列出的选项(a)、或者仅选择第二个列出的选项(b)、或者仅选择第三个列出的选项(c)、或者仅选择第一个和第二个列出的选项(a和b)、或者仅选择第一个和第三个列出的选项(a和c)、或者仅选择第二个和第三个列出的选项(b和c)、或者选择所有三个选项(a和b和c)(除非在此另有定义)。正如本领域和相关领域的普通技术人员容易明白的那样,对于所列出的许多项目,这可以被扩展。

现在参考附图,其中相同的数字代表相同或相似的元素,并且首先参考图1,提供了示出用于使用基于枚举模式的注释进行程序合成的系统/方法100的概述的框图/流程图。

在框110,一个或多个外部谓词可以被映射到一个或多个对应的可计算项(term)。外部谓词是由用户独立定义的谓词。对于解释外部谓词的机器,用户可以提供将外部谓词连接到可计算项的信息。这种信息可以包括能够将每个外部谓词映射到其对应的可计算项的注释或断言(例如,表或函数)。

在框120,基于映射生成计算机程序。

关于图1的系统/方法100的进一步细节将在下面参考图2-6进一步详细描述。

参考图2,提供了示出计算机系统200的框图。在一个实施例中,计算机系统200包括演绎数据库系统(deductivedatabasesystem)。演绎数据库系统可以指能够基于存储在数据库中的规则和/或事实进行演绎的数据库系统。演绎数据库系统可以在各种计算机相关操作中实施,包括但不限于数据集成、信息提取、联网、程序分析、安全和云计算。

系统200可以使用自然语言处理将句子转换成包括外部谓词的逻辑表达式,并且通过使用现有项将逻辑表达式转换成可计算项来从逻辑表达式生成程序。逻辑表达式可以以意识到逻辑表达式在逻辑公式到项转换系统的程序合成中是如何使用的方式来表达。系统200可以通过组合用枚举模式注释的现有项来确定是否可以将包括一个或多个外部谓词的给定逻辑公式转换成计算项。如果声明性描述是自动地或半自动地生成的使得声明性描述中使用的要进行转换的谓词不一定是便于程序转换的格式,则系统200可以使程序能够合成更宽的逻辑表达式,该逻辑表达式可以以更灵活的方式使用外部谓词。

更具体地,系统200可以使用逻辑编程语言来指定演绎数据库系统中的事实、规则和/或查询。说明性地,逻辑编程语言可以是datalog,尽管也考虑了其他逻辑编程语言。datalog可以执行从逻辑表达式到包含元组数据的表的程序合成,其中逻辑表达式中的基元谓词(primitivepredicate)指示该表。

以下描述了示例性的外部谓词、注释和逻辑表达式:

外部谓词:succ(n,m)(谓词意思是m比n大1,其中m和n是整数);

注释:succ(n,m)=>n+1=m(从succ映射到取n并计算m的函数),其中“=>”表示映射;

逻辑表达式:ans(k):-n=3,succ(n,a),succ(k,a*2)(求出k作为解,使3+1=a并且k+1=a*2),其中“*”表示乘法。

上述示例目前不能由datalog系统处理,因为succ(n,m)只能在m从n计算的上下文中被转换成可计算项。因此,部分n=3,succ(n,a)可以被转换成可计算项,但是succk,4*2)不能被转换成可计算项。

在datalog中,公式可以使用两个不同的外部谓词来描述。例如,外部谓词可以包括plus1(n,m)和minus1(n,m)。在该示例中,注释可以表示为plus1(n,m)=>n+1=m和minus1(n,m)=>n-1=m,并且得到的逻辑表达式可以表示为ans(k):-n=3,plus1(n,a),minus1(a*2,k)。这可以转换成可计算项(3+1)*2-1,作为逻辑表达式ans(k)的解k。因此,根据这里描述的实施例,可以转换具有用于逻辑表达式的外部谓词的datalog公式。

在一个实施例中,系统200包括自动化程序和/或问题解决系统,其接收自然语言描述作为输入,并返回生成的程序和/或运行问题解决。例如,输入可以是表达要使用系统200解决的问题的文本和/或语音。更具体地,系统200可以包括与执行来将接收的输入转换成逻辑公式的自然语言处理相关联的前端部分,以及与将逻辑公式转换成项(例如,程序或数据)相关联的后端部分。自动化程序和/或问题解决系统可以集成在软件代理、机器人等中。使用自动化程序和/或问题解决系统执行任务。

如所示的,系统200包括与经由至少一个通信网络(“网络”)230互连的处理设备(例如,服务器)220进行通信的计算设备210,该计算设备210能够从(声明性的)形式规范(formalspecification)进行程序或数据合成。

在该说明性实施例中,为了简洁,仅示出了一个计算设备210和处理设备220。然而,根据这里描述的实施例,系统200可以包括多个计算设备和/或处理设备。因此,应当理解,图2仅提供了一种实施方式的图示,并不意味着对其中可以实施不同实施例的环境的任何限制,并且应当理解,可以基于设计和实施方式要求对所描绘的环境进行许多修改。

网络230可以包括各种类型的通信网络,诸如广域网(wideareanetwork,wan)、局域网(localareanetwork,lan)、电信网络、无线网络、公共交换网络和/或卫星网络。网络230可以包括连接,诸如有线、无线通信链路或光缆。

计算设备210可以包括处理器212和能够托管和运行软件程序216和逻辑转换程序218a的数据存储设备214,并经由网络230与处理设备220进行通信。计算设备210可以是例如移动设备、电话、个人数字助理、上网本、膝上型计算机、平板计算机、台式计算机或能够运行程序并访问网络的任何类型的计算设备。

处理设备220可以是膝上型计算机、上网本计算机、个人计算机(pc)、台式计算机或任何可编程电子设备或能够托管和运行逻辑转换程序218b和数据库222的任何可编程电子设备的网络。处理设备220还可以在云计算服务模型中操作,诸如,软件即服务(softwareasaservice,saas)、平台即服务(platformasaservice,paas)或基础设施即服务(infrastructureasaservice,iaas)。

软件程序216可以表示调用逻辑转换程序218a、218b或与逻辑转换程序218a、218b进行通信的任何程序或程序套件。逻辑转换程序218a、218b可用于从包括谓词的逻辑公式生成程序。更具体地,逻辑转换程序218a、218b可以将作为规范(例如,规则)的逻辑公式转换成满足规范的项(程序或数据)。可以基于注释的项的集合更加声明性地描述该规范(例如,使用相同的谓词来描述具有相同含义的关系,而不管这些关系在程序合成中是如何实现的)。例如,系统200可以使用谓词来实施datalog以形式化问题,这可以通过更灵活地处理外部谓词来提高实施演绎数据库系统的能力(例如,使用谓词不仅作为单向操作,而且作为关系)。应当理解和认识到,根据这里描述的实施例,系统200可以实施除了datalog之外的其他逻辑编程语言。

现在将参考图3描述关于系统200(包括逻辑转换程序218a、218b)的操作的进一步细节。

参考图3,提供了示出用于使用基于枚举模式的注释进行用于外部谓词的程序合成的系统/方法300的框图/流程图。如将进一步详细描述的,系统/方法300可以基于注释的项的集合来推断满足给定规则集合的项。谓词p(x,y)的示例性枚举模式(例如,二项式枚举模式)提供如下:

(1)p(x,y|-),其中,如这里使用的“|”符号指的是“全部”枚举,而“-”符号指的是一个空的变量序列。也就是说,用这种枚举模式注释的项是枚举满足p(x,y)的所有x和y的数据集(例如,项是返回满足p(x,y)的所有x的集合和所有y的集合的函数);

(2)p(x,y<|-),其中,如这里使用的“<|”符号是指“部分”枚举。也就是说,用这种枚举模式注释的项是枚举满足p(x,y)的一些x和y的数据集(例如,该项是返回满足p(x,y)的一些x的集合和一些y的集合的函数);

(3)p(x<|y),p(y<|x)。用该模式注释的项是在给定x(或y)时枚举满足p(x,y)的一些y(或一些x)的函数(例如,该项是为每个给定x(或y)返回满足p(x,y)的一些y(或一些x)的集合的函数);

(4)p(x|y),p(y|x)。用该模式注释的项是当给定x(或y)时枚举满足p(x,y)的所有y(或x)的函数(例如,该项是为每个给定x(或y)返回满足p(x,y)的所有y的集合(或所有x的集合)的函数);和

(5)p(true|x,y),p(false|x,y)。用这种枚举模式注释的项是如果x,y满足p(x,y)则返回真/假的函数。

n元谓词的枚举模式可以类似地定义。根据需要,类型可以是附加的谓词参数。例如,与类型t1和t2以及谓词p相关联的枚举模式可以是p(x:t1|y:t2)。

在框310,生成注释的项的集合。该注释的项的集合中的每个项,在这里也称为集合a,可以用每个谓词的枚举模式来注释。生成注释的项的集合可以包括准备项(例如,表数据和/或函数代码)作为构建块,并且使用可以在可能的形式规范中使用的谓词来为每个项注释枚举模式。在一些实施例中,该注释的项的集合可以由工程师生成。

该注释的项的集合表示关于如何能将每个谓词实现或实施为项的知识库。例如,数据集(或表数据)可以解释为用谓词p的枚举模式p(x|-)注释的项,以及函数可以解释为用谓词q的q(x|z)注释的项

在框320,问题文本被翻译成形式规范。根据这里描述的实施例,可以使用任何合适的自然语言处理技术来执行翻译。例如,形式规范可以由工程师描述,或者可以从另一个系统生成和接收。

形式规范描述了与谓词相关联的规则的集合。例如,形式规范可以被描述为包括谓词和标签(例如,@partial,@given,@all)的datalog规则。

如这里所使用,@partial表示需要求出一些(不是全部)元素,@given表示在给定标记变量的值的条件下,形式规范需要满足p(x,y)的项(该项必须是函数),以及@all表示需要求出所有元素。例如,对于形式规范p(x@all,y@given):-r(y,z),q(z,x),可以合成从y返回满足r(y,z)和q(z,x)的x的函数。

让包括扩展的规则(例如,扩展的datalog规则)的集合的规则集合(例如,逻辑公式)被定义为rs。规则集合rs可以包括目标关系(例如,扩展的datalog规则的集合)。例如,规则集合rs的扩展的datalog规则可以是以下形式:

head:-body1,...,bodyn,

head::=hr(x1@tag1,...,xk@tagk,y1,..,ym),

body::=l|not-l,and

l::=r(x1,...,xn)

其中“head”是指代头部关系(hr)的原子符号,每个bodyk(1≤k≤n)是指代文字(literal)l或文字否定not-l的原子符号。也就是说,hr可以包括目标标签,并且“body1,...,bodyn”是指代一系列的文字l或文字否定not-l。每个文字l可以指代身体(body)关系r(x1,…,xn),并且当在集合a中定义使用关系的枚举模式的项时,身体关系r(x1,…,xn)可以是谓词。总之,“head:-body1,...,bodyn”表示当所有关系“body1,...,bodyn”(例如,“body1,...,bodyn”指代的关系系列中的所有关系)成立时,关系a成立(“head”指代的关系)。

在框330,基于注释的项的集合合成满足形式规范的至少一个项,以生成计算机程序。该至少一个合成的项可以包括,例如,表数据或程序。更具体地,该至少一个合成的项可以被包括在可以满足集合a下的规则集合rs的目标关系的项的集合ts中。该合成可以通过使用注释到每个项的枚举模式的信息在知识库中搜索可接受的项的组合来执行。在一个实施例中,合成满足形式规范的至少一个项包括给形式规范中的每个谓词p分配用使用谓词p的枚举模式注释的项t来获得项组合,并且通过使用注释到所分配的项的枚举模式来检查项组合满足逻辑公式。

更具体地,合成至少一个项可以还包括,在框332,基于解释过程,将实现类型和项以给定规则分配给谓词的每个实例。例如,实现类型可以是rt1,..,rtk的形式,以及项的集合ts可以是t1,...,tk的形式。该分配可以生成实现语句(statement)。

实现类型可以是[x/y|z]或[b|z]的形式,其中b为真或假。这里,这里使用的语法“x/y”将与x(例如,x1,...,xn)相关联的变量从与y相关联的变量(例如,y1,...,ym)分离。

形式为[x/y|z]的实现类型是指取z并返回包括所有x和一些y的集合的函数。更具体地,实现类型[x/y|z]可以意味着实现语句a|-r1,..,rn|>t:[x1,...,xn/y1,...,ym|z]中的每个项t枚举给定z时满足r1,...,rn的x1,...,xn的所有值和y1,...,ym的一些值。如这里使用的语法“a|-b”意味着“在a、b成立下”,以及如这里使用的语法“r1,...,rn|>t:r”意味着“根据实现类型r,由项t实现r1,...,rn”。

形式为[b|z]的实现类型是指取z并返回真或假的函数,因为b可以是真或假。更具体地,实现类型可以是[x1,..,xn/y1,..,ym|z1,..,zk]或[b|z1,..,zk]的形式,其中x1,..,xn,y1,..,ym和z1,..,zk是变量。

当项t和实现类型rt可以被分配给一系列关系r1,..,rn并且集合包括规则集合rs中出现的谓词p的所有实例的实现语句时,可以编写实现语句“a|-r1,..,rn|>t:rt”。

实现语句a|-r1,..,rn|>t:[x1,..,xn/y1,..,ym|z1,..,zk]意味着,给定z1,..,zk,t(z1,..,zk)枚举所有x1,..,xn和一些y1,..,ym以使x1,..,xn,y1,..,ym和z1,..,zk满足r1,..,rn。

实现语句a|-r1,..,rn|>t:[b|z1,..,zk]意味着,给定z1,..,zk,如果z1,..,zk满足r1,..,rn,t(z1,..,zk)返回b(真或假)。

实现语句a|-r1,..,rn|>t:[x1,..,xn/y1,..,ym|-]意味着,t枚举所有x1,..,xn和一些y1,..,ym以使x1,..,xn,y1,..,ym满足r1,..,rn。

合成至少一个项还可以包括,在框334,基于解释过程执行与文字相关联的合并过程。执行合并过程可以包括基于解释过程合并文字或每个规则中文字的实现语句。例如,如果目标实现类型可以合并,谓词和实现类型可以基于解释过程同时合并。如果实现类型不能合并,系统/方法可以尝试合并其他文字。如果系统/方法在该分配下未能合并任何文字的组合,系统/方法可以放弃该分配。可以执行合并,直到基于合并获得所有可能的实现语句。

例如,假设在框532已经获得了以下实现语句:a|-p1|>t1:[x,y/-|-]和a|-p2|>t2:[y/-|z],其指代用于p2的函数,该函数取z并返回y,并且假设所有数据集(x,y)满足p1。这里,对于规则hr(x,z@given):-p1(x,y),p2(y,z),文字p1(x,y)和p2(y,z)可以合并以获得实现语句a|-p1,p2|>λz.{x|<x,y>int1andy=t2(z)}:[x/-|z],其中λz.{x|<x,y>int1andy=t2(z)}是一个函数,其取z并返回x的集合以使元组<x,y>被包括在t1中,并且y=t2(z)(在该函数取z并返回x的意义上满足p1、p2的函数,其中x、z满足p1(x,y)和p2(y,z))。

作为另一个示例,考虑形式规范p(y@all,x@given):-r(y,w),q(w,z),s(z,y)。可以分配给谓词r、q和s的实现类型的示例如下:

r(y,w)|>tr:[true|y,w],

q(w,z)|>tq:[z|-/w],

s(z,x)|>ts:[z|-/x].

该系统/方法可以尝试合并r和q,然后是q和s,然后是r和s。但是,该合并尝试的结果是所有合并尝试都失败。因此,该系统/方法可以放弃该分配。相反,可以分配给谓词r、q和s的实现类型的另一个示例如下:

r(y,w)|>tr:[y|-/w],

q(w,z)|>tq:[w|-/z],

s(z,x)|>ts:[z|-/x].

该系统/方法可以尝试合并r和q并获得r(y,w),q(w,z)|>λz.{<y,w>|w=tq(z),tr(w)=y}:[y|-/z]。这里,r和q可以合并,并且实现类型[y|-/w]和[w|-/z]可以合并到[y,w|-/z]。该系统/方法然后可以合并r、q和s,并且实现类型[y|-/w]和[z|-/x]也可以被合并。因此,可以获得“r(y,w),q(w,z),s(z,x)|>t:[y,w,z|-/x]”,其中t=λx.{<y,w,z>|w=tq(z),tr(w)=y,z=ts(x)}。

合成至少一个项还可以包括,在框336,获得规则集合rs中的每个头部语句的实现语句。

例如,对于规则hr(x1,...,xk):-l1,...,ln(目标标签与此处的步骤无关),对于语句a|-l1,...,ln:t|>rt,可以获得语句a|-hr(x1,...,xk)|>t|>rt。换句话说,如果在rt的意义上项t满足l1,...,ln,然后在rt的意义上项t也满足hr。例如,对于规则hr(x,z@given):-p1(x,y),p2(y,z),可以获得下面的实现语句:a|-hr(x,z@given)|>λz.{x|<x,y>int1andy=t2(z)}|[x/-|z]。

合成至少一个项还可以包括,在框338,检查每个实现语句的目标标签。

例如,对于规则“hr(x1@all...xk@all,y1@partial,...,yn@partial,z1@given,...,zm@given):-l1,...,ln”或语句“a|-hr(....)|>t:[x1...xk/y1...yn|z1...zm]”,项t可以作为满足hr(...)的程序或数据被输出。对于语句“a|-hr(x,z@given)|>λz.{x|<x,y>int1andy=t2(z)}|[x/-|z]”,项λz.{x|<x,y>int1andy=t2(z)}可以作为满足hr(x,z@given)的函数被输出。

该过程可以返回到框334,以获得其他实现语句来生成计算机程序。

在框340,输出计算机程序。计算机程序可以按照任何合适的方式输出。例如,计算机程序可以存储在数据库中,通过网络传输或发送给一个或多个实体,等等。

解释程序的解释规则可以定义如何推断实现语句。

解释规则[基本规则]为实现语句分配谓词(即在a中的枚举模式中使用的关系)。例如,如果在a中p(true|x1,..,xk),然后可以推断出a|-p(x1,..,xk)|>[true|x1,..,xk]。

解释规则[规则:v-v]融合了两个系列的关系其中已经被推断出,并且两者都是[x1,..,xn/y1,..,ym|z1,..,zk]的形式。这个解释规则产生了两种可能的实现语句。

解释规则[规则:t-t]合并了两个系列的关系其中已经被推断出,并且两者都是[b|z1,..,zk]的形式。例如,从a|-r1(x,z)|>t1:[true|x,z]和a|-r2(y,z)|>t2:[false|y,z],我们得到a|-r1(x,z),r2(y,z)|>t12:[true&false|x,y,z],其中t12=λx,y,z(true=t1(x,z)andfalse=t2(y,z))。也就是说,t12函数取x、y、z以及计算true=t1(x,z)和false=t2(y,z),并返回作为结果的布尔值。

解释规则[规则:t-v]合并了两个系列的关系其中已经被推断出,是[x1,..,xn/y1,..,ym|z1,..,zk]的形式,并且是[b|z1,..,zk]的形式。

解释规则[弱规则:w-c]意味着我们可以从获得因此,这个解释规则意味着关系的顺序可以改变。

解释规则[弱规则:w-p]意味着我们可以从获得因此,这个解释规则意味着如果用于的元素被声明为全部枚举,则可以声明它们中的一些被枚举。

解释规则[弱规则:w-g]意味着我们可以从获得其中函数t'取x和y作为输入,计算t(zs)并收集以使在t(zs)中,和x=vx,y=vy,并返回的集合。这条规则意味着,如果在的意义上,t实现了r1,..,rn(例如,t列举了满足r1,..,rn的所有x和一些y),则可以获得项t',这在的意义上实现了r1,..,rn(例如,t'取x和y以及zs,并返回满足r1,..,rn的数据集)。这里,枚举用于的所有元素,并枚举用于的一些元素。

这些示例解释规则可用于实施框332和/或338。

解释规则[头部规则:h],其可以从用于其身体的实现语句(例如,身体关系系列)中推断出用于头部关系的实现语句,并且可以用于实施框336和/或338。

例如,考虑谓词“primebaserep(q,l)”,这意味着自然数列表l是自然数q>2的素数基表示(“primebaserepresentation,pbr”)。q的素数基表示可以由自然数的列表[pk,ek,...,p1,e1]给出使得并且pi(1≤i≤k)是素数,以及ei(1≤i≤k)是正整数并且对于(1≤i<j≤k),pj>pi。例如,q=12的素数基表示可以由[3,1,2,2]给出,因为31×22=3×4=12。假设有两个程序convertpbr(q)和primenumberof(l)分别用于计算素数q的素数基表示和素数基表示l的素数,则可以用如下枚举模式来注释convertpbr(q)和primenumberof(l):

converttopbr(q)>>primebaserep(l|q),

primenumberof(l)>>primebaserep(q|l).

这些注释的项可以被包括为包括数据集的知识库。

现在,考虑形式规范“solution(nlst@given,mlst):-primebaserep(y,nlst),primebaserep(y-1,mlst)”,其可以作为输入被接收。这里,nlst和mlst是变量名,其中nlst是表示素数基表示的列表,并且mlst是表示将由系统/方法获得的素数基表示的列表。也就是说,这个特定的形式规范对应于对合成一个函数的请求,该函数在给定nlst时取mlst,其中mlst和nlst满足primebaserep(y,nlst)和primebaserep(y-1,mlst)。形式规范可以基于知识库使用自然语言处理从自然描述中自动生成,该自然语言描述为诸如,“对于给定的素数基表示l,取y-1的素数基表示,其中y的素数基表示是l”。注意,句子形式“x的素数基表示是y”可以使用自然语言处理被翻译成谓词primebaserep(x,y)。

一般来说,实现类型[x/y|z]可以以抽象的方式表示项,使得当给定z时,项可以生成x的所有值和y的一些值,其中x、y和z在形式规范中是变量名。在这个说明性的示例中,形式规范的项被系统/方法抽象为目标实现类型[mlst/-|nlst]。

为了确定目标实现类型可接受的实现类型,系统/方法可以通过将相应的函数分配给形式规范的谓词来获得一个或多个实现类型。

例如,函数converttopbr可以被分配给谓词primebaserep(y,nlst)和primebaserep(y-1,mlst)两者,并且系统/方法可以使用函数converttopbr的注释的枚举模式获得第一实现类型[y/-|nlst],[y-1/-|mlst]。第一实现类型的第一项可以从nlst生成y,并且第一实现类型的第二项可以从mlst生成y-1。然而,第一实现类型对于目标实现类型[mlst/-|nlst]是不可接受的。因此,系统/方法可以尝试找到另一个分配。

例如,如果函数primenumberof被分配给第一谓词primebaserep(y,nlst),并且converttorpb被分配给第二谓词primebaserep(y-1,mlst),则系统/方法可以使用函数converttopbr:[y/-|nlst],[mlst/-|y-1]的注释的枚举模式来获得第二实现类型第二实现类型可以包括能够从nlst生成y的第一项和能够从y-1生成mlst的第二项。第二实现类型指示系统/方法可以合成满足由目标实现类型[mlst/-|nlst]表示的目标情况的程序,因为y可以通过使用第一分配的项从给定nlst生成,并且mlst可以通过第二分配的项从y生成并计算y-1。因此,该系统/方法可以合成具有输入“nlst”和输出“当converttopbr(primenumberof(nlst)-1)时的mlst”的程序。

作为另一个示例,让表示关于如何从逻辑公式生成程序的部分知识的数据库的注释的项的集合a,由下式给出:

{λz,w.le_int(z,w)>>lessthan(true|x,y),

λz.makelistto(0,z-1)>>lessthan(y|x),

λz.z+1>>lessthan(y<|x),

λz,if(z%2=0)thentrueelsefalse>>even(true|x)}.

这里,λx,y,z.f(x,y,z)指的是以x,y,z作为输入,f(x,y,z)作为输出的函数(λ-演算语法),以及le_int(z,w)指的是仅当(“iff”)z<w时返回真的函数。然后,lessthan(true|x,y)等可以表示基元谓词lessthan(x:int,y:int)的枚举模式,其中lessthan(x:int,y:int)表示整数x小于整数y。

给定目标谓词p和导出目标谓词p的逻辑公式fs(在命题逻辑中),我们通常可以将它们转换成规则(例如,datalog规则)。让rs成为规则的集合。我们希望生成满足目标谓词的可能项(例如,数据或程序),并且从而满足rs。问题可以用a|-rs~>ts(在知识库a下生成满足rs的项ts)来表示。

例如,让rs={q(x@all,y@all):-lessthan(x,y),mydata(x,y),p(z@partial):-lessthan(y,z),mydata(x,y)},并假设注释的项集合a包含以下三个注释的项:

λz,w.le_int(z,w)>>lessthan(true|x,y),

λx.x+1>>lessthan(y<|x),

{(1,2),(5,5),(9,8)}>>mydata(x,y|-),

其中le_int(z,w)是iffz<w则返回真的函数。对于谓词lessthan(x:int,y:int),y=x+1是一个满足lessthan(x,y)的可能整数,这就是为什么对于lessthan(y<|x)使用“<|”而不是“|”。对于目标项t的解例如可以根据这里描述的实施例通过以下方式获得:

q(x,y)={(x,y)|le_int(y,x)=trueand(x,y)in{(1,2),(5,5),(9,8)},

p(z@partial)={z|y+1and(x,y)in{(1,2),(5,5),(9,8)}},

其中解t可以对于q(x,y)获得为{(1,2)}并且对于p(z)获得为{3,6,9}。

作为另一个示例,考虑问题文本“取所有整数z,使得对于数据集s中包含的整数对x,y,x的两倍(double)是z并且z的两倍是y”。系统/方法可以将该问题文本转换成逻辑表达式,并从该逻辑表达式生成程序。例如,当问题文本转换为逻辑表达式时,可以获得以下逻辑公式(datalog规则):answer(z@all):-s(x,y),double(x,z),double(z,y)。这里,s(x,y)表示整数对x,y包含在数据集s中,而double(a,b)表示两倍或两次a等于b。

现在,假设注释的项的集合a包括谓词double(a,b)的以下注释的项:

t1>>double(b|a),wheret1=λa.{2a},

t2>>double(a|b),wheret2=λb.if(bmod2==0)then{b/2}else{}.

第一项t1是指取整数a并且返回仅包含整数2a的集合的函数,以及第二项t2是指取整数b并且iffb/2是整数则返回仅包含整数b/2的集合的函数,否则返回空集。

此外,假设集合a还包括谓词s(x,y)的以下注释的项s(x,y):{<1,4>,<2,4>,<3,4>,<2,8>}>>s(x,y|-)(这意味着我们有s的数据集)。

根据这里描述的实施例,可以推断出以下实现语句:

a|-s(x,y),double(x,z),double(z,y)|>t:[x,y,z|-/-],

wheret={<vx,vy,vz>|<vx,vy>ins(x,y)andvzint1(vx)andvyint2(vz)}.

计算t时,可以得到“a|-r(x,y,z)|>{<1,4,2>,<2,8,4>}:[x,y,z|/-]forr(x,y,z)=s(x,y),double(x,z),double(z,y)”,从其可以得到“a|-answer(z@all)|>{<2>,<4>}:[z|/-]”。因此,根据规则answer(z@all):-r(x,y,z)的答案是{<2>,<4>}。

以本例中描述的方式处理谓词比在其他系统/方法中更灵活。例如,其他系统/方法可能需要使用不同的运算符(例如,针对answer(z@all):-s(x,y),z=2x,z=y/2,乘以2再除以2)来获得解,以将相同的句子“doubleof_is_”形式化。

这里描述的实施例提供了程序合成或生成框架。在这个框架中,没有预先定义基于规则(例如,datalog规则)的每个谓词的解释。相反,可以根据其中谓词出现在规则的逻辑表达式中的上下文,从注释的项的集合a中动态选择每个谓词的解释。这一特性允许灵活使用用户定义的外部谓词(例如,不仅以诸如单向函数的特定形式,而且以各种可能的推理方向),而不是使用分配了特定解释的内置谓词。

根据这里描述的实施例,谓词不仅仅表示表数据,而是可以取决于其出现位置和背景知识(例如,注释的项的集合a)进行不同的解释。这使得可以更加声明性地描述规范(例如,datalog规则),以便使用相同的谓词来描述具有相同含义的关系,而不管这些关系在程序合成中是如何实现的。

参照图4,示出了根据一个实施例的可应用本发明的示例性处理系统400。处理系统400包括经由系统总线402可操作地耦合到其他组件的至少一个处理器(cpu)104。高速缓存406、只读存储器(readonlymemory,rom)408、随机存取存储器(randomaccessmemory,ram)410、输入/输出(input/output,i/o)适配器420、声音适配器430、网络适配器440、用户接口适配器450和显示适配器460可操作地耦合到系统总线402。

第一存储设备422和第二存储设备424通过i/o适配器420可操作地耦合到系统总线402。存储设备422和424可以是磁盘存储设备(例如,磁盘或光盘存储设备)、固态磁性设备等中的任何一个。存储设备422和424可以是相同类型的存储设备或不同类型的存储设备。

扬声器432通过声音适配器430可操作地耦合到系统总线402。收发器442通过网络适配器440可操作地耦合到系统总线402。显示设备462通过显示适配器460可操作地耦合到系统总线402。

第一用户输入设备452、第二用户输入设备454和第三用户输入设备456通过用户接口适配器450可操作地耦合到系统总线402。用户输入设备452、454和456可以是键盘、鼠标、小键盘、图像捕捉设备、运动感测设备、麦克风、结合至少两个前述设备的功能的设备等中的任何一个。当然,也可以使用其他类型的输入设备,同时保持本发明的精神。用户输入设备452、454和456可以是相同类型的用户输入设备或不同类型的用户输入设备。用户输入设备452、454和456用于向系统400输入信息和从系统400输出信息。

程序合成(programsynthesis,ps)组件470可操作地耦合到系统总线402。ps组件470被配置为执行上面参考图3描述的一个或多个操作。ps组件470可以被实施为独立的专用硬件设备,或者可以被实施为存储在存储设备上的软件。在其中ps组件470是软件实施的实施例中,尽管异常检测器被示为计算机系统400的独立组件,但是ps组件470可以存储在例如第一存储设备422和/或第二存储设备424上。可替换地,ps组件470可以存储在单独的存储设备(未示出)上。

当然,处理系统400也可以包括本领域技术人员容易想到的其他元件(未示出),以及省略某些元件。例如,如本领域普通技术人员容易理解的,取决于处理系统400的特定实施方式,处理系统400中可以包括各种其他输入设备和/或输出设备。例如,可以使用各种类型的无线和/或有线输入和/或输出设备。此外,如本领域普通技术人员容易理解的,在各种配置中还可以利用附加处理器、控制器、存储器等。根据这里提供的本发明的教导,本领域普通技术人员容易想到处理系统400的这些和其他变化。

应当理解,尽管本公开包括对云计算的详细描述,但是这里所述教导的实施方式不限于云计算环境。相反,本发明的实施例能够结合现在已知或以后开发的任何其他类型的计算环境来实施。

云计算是一种服务交付模式,用于对共享的可配置计算资源池进行方便、按需的网络访问。可配置计算资源是能够以最小的管理成本或与服务提供者进行最少的交互就能快速部署和释放的资源,例如可以是网络、网络带宽、服务器、处理、内存、存储、应用、虚拟机和服务。这种云模式可以包括至少五个特征、至少三个服务模型和至少四个部署模型。

特征包括:

按需自助式服务:云的消费者在无需与服务提供者进行人为交互的情况下能够单方面自动地按需部署诸如服务器时间和网络存储等的计算能力。

广泛的网络接入:计算能力可以通过标准机制在网络上获取,这种标准机制促进了通过不同种类的瘦客户机平台或厚客户机平台(例如移动电话、膝上型电脑、个人数字助理pda)对云的使用。

资源池:提供者的计算资源被归入资源池并通过多租户(multi-tenant)模式服务于多重消费者,其中按需将不同的实体资源和虚拟资源动态地分配和再分配。一般情况下,消费者不能控制或甚至并不知晓所提供的资源的确切位置,但可以在较高抽象程度上指定位置(例如国家、州或数据中心),因此具有位置无关性。

迅速弹性:能够迅速、有弹性地(有时是自动地)部署计算能力,以实现快速扩展,并且能迅速释放来快速缩小。在消费者看来,用于部署的可用计算能力往往显得是无限的,并能在任意时候都能获取任意数量的计算能力。

可测量的服务:云系统通过利用适于服务类型(例如存储、处理、带宽和活跃用户帐号)的某种抽象程度的计量能力,自动地控制和优化资源效用。可以监测、控制和报告资源使用情况,为服务提供者和消费者双方提供透明度。

服务模型如下:

软件即服务(saas):向消费者提供的能力是使用提供者在云基础架构上运行的应用。可以通过诸如网络浏览器的瘦客户机接口(例如基于网络的电子邮件)从各种客户机设备访问应用。除了有限的特定于用户的应用配置设置外,消费者既不管理也不控制包括网络、服务器、操作系统、存储、乃至单个应用能力等的底层云基础架构。

平台即服务(paas):向消费者提供的能力是在云基础架构上部署消费者创建或获得的应用,这些应用利用提供者支持的程序设计语言和工具创建。消费者既不管理也不控制包括网络、服务器、操作系统或存储的底层云基础架构,但对其部署的应用具有控制权,对应用托管环境配置可能也具有控制权。

基础架构即服务(iaas):向消费者提供的能力是消费者能够在其中部署并运行包括操作系统和应用的任意软件的处理、存储、网络和其他基础计算资源。消费者既不管理也不控制底层的云基础架构,但是对操作系统、存储和其部署的应用具有控制权,对选择的网络组件(例如主机防火墙)可能具有有限的控制权。

部署模型如下:

私有云:云基础架构单独为某个组织运行。云基础架构可以由该组织或第三方管理并且可以存在于该组织内部或外部。

共同体云:云基础架构被若干组织共享并支持有共同利害关系(例如任务使命、安全要求、政策和合规考虑)的特定共同体。共同体云可以由共同体内的多个组织或第三方管理并且可以存在于该共同体内部或外部。

公共云:云基础架构向公众或大型产业群提供并由出售云服务的组织拥有。

混合云:云基础架构由两个或更多部署模型的云(私有云、共同体云或公共云)组成,这些云依然是独特的实体,但是通过使数据和应用能够移植的标准化技术或私有技术(例如用于云之间的负载平衡的云突发流量分担技术)绑定在一起。

云计算环境是面向服务的,特点集中在无状态性、低耦合性、模块性和语意的互操作性。云计算的核心是包含互连节点网络的基础架构。

现在参考图5,其中显示了示例性的云计算环境550。如图所示,云计算环境550包括一个或多个云计算节点510,由云消费者使用的本地计算设备(诸如,例如,个人数字助理(personaldigitalassistant,pda)或移动电话554a、台式计算机554b、膝上型计算机554c、和/或汽车计算机系统554n)可以与该云计算节点510通信。节点510之间可以相互通信。可以在包括但不限于如上所述的私有云、共同体云、公共云或混合云或者它们的组合的一个或者多个网络中将云计算节点510进行物理或虚拟分组(图中未显示)。这允许云计算环境550提供基础设施、平台和/或软件作为对其云消费者不需要维护本地计算设备上的资源的服务。应当理解,图5中所示的计算设备554a-n的类型意在仅仅是示意性的,云计算节点510以及云计算环境550可以与任意类型网络上和/或网络可寻址连接的任意类型的计算设备(例如使用网络浏览器)通信。

现在参考图6,示出了由云计算环境650(图6)提供的一组功能抽象层。首先应当理解,图6所示的组件、层以及功能都仅仅是示意性的,本发明的实施例不限于此。如图所示,提供下列层和对应功能:

硬件和软件层660包括硬件和软件组件。硬件组件的示例包括:主机661;基于risc(精简指令集计算机)体系结构的服务器662;服务器663;刀片服务器664;存储设备665;以及网络和联网组件666。在一些实施例中,软件组件包括网络应用服务器软件667和数据库软件668。

虚拟化层670提供一个抽象层,从该抽象层可以提供虚拟实体的以下示例:虚拟服务器671;虚拟存储672;虚拟网络673,包括虚拟专用网;虚拟应用和操作系统674;和虚拟客户端675。

在一个示例中,管理层680可以提供下面描述的功能。资源供应681:提供用于在云计算环境中执行任务的计算资源和其它资源的动态获取;。计量和定价682:在云计算环境内对资源的使用进行成本跟踪,并为此提供帐单和发票。在一个示例中,该资源可以包括应用软件许可。安全功能:为云的消费者和任务提供身份认证,为数据和其它资源提供保护。用户门户683:为消费者和系统管理员提供对云计算环境的访问。服务水平管理功能84:提供云计算资源的分配和管理,以满足必需的服务水平。服务水平协议(sla)计划和履行685:为根据sla预测的对云计算资源未来需求提供预先安排和供应。

工作负载层690提供了可以利用云计算环境的功能的示例。可以从该层提供的工作负载和功能的示例包括:映射和导航691;软件开发和生命周期管理692;虚拟课堂教育交付693;数据分析处理694;交易处理695;和计算机程序合成696。

已经描述了使用基于枚举模式的注释的外部谓词的程序合成的优选实施例(意在说明性的而非限制性的),注意,根据上述教导,本领域技术人员可以进行修改和变化。因此,应当理解,在所附权利要求所概述的本发明的范围内,可以对所公开的特定实施例进行改变。已经如此描述了本发明的各方面,具有专利法所要求的细节和特殊性,在所附权利要求中阐述了专利证书所要求保护和期望保护的内容。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1