矩阵生成装置、矩阵生成方法和矩阵生成程序与流程

文档序号:12167453阅读:571来源:国知局
矩阵生成装置、矩阵生成方法和矩阵生成程序与流程

本发明涉及矩阵生成装置、矩阵生成方法和矩阵生成程序。本发明例如涉及生成加密和解密中使用的密钥共享矩阵的装置、方法和程序。



背景技术:

在密钥共享方式中,密钥信息被分成若干个共享信息。在复原密钥信息时,必须收集特定组合的共享信息。能够利用使用逻辑或或逻辑与等的逻辑式来定义收集什么样的组合的共享信息即可。密钥共享矩阵是将该逻辑式转换成矩阵形式而得到的。对密钥共享矩阵的各行分配逻辑式中包含的要素。密钥共享矩阵被设计成,满足逻辑式的要素的行的和或积成为期望值。不管如何组合不满足逻辑式的要素的行,都无法得到期望值。

例如,设逻辑式F是变量P与变量Q的逻辑与,对密钥共享矩阵M的第一行分配变量P,对第二行分配变量Q。该情况下,如果变量P和变量Q双方为真,则逻辑式F为真。即,变量P和变量Q的组合满足逻辑式F。变量P和变量Q中的任意变量单独均不满足逻辑式F。由此,密钥共享矩阵M被设计成,第一行和第二行均不是期望值,第一行与第二行的和或积成为期望值。

密钥共享矩阵用于函数型加密(例如参照专利文献1)。

以往,提出了一些用于生成密钥共享矩阵的方法(例如参照非专利文献1、2)。

现有技术文献

专利文献

专利文献1:国际公开第2011/135895号

非专利文献

非专利文献1:A.Lewko,B.Waters,“Decentralizing Attribute-Based Encryption”,Advances in Cryptology-EUROCRYPT 2011,Lecture Notes in Computer Science Volume 6632,2011,pp 568-588

非专利文献2:Z.Liu,Z.Cao,“On Efficiently Transferring the Linear Secret-Sharing Scheme Matrix in Ciphertext-Policy Attribute-Based Encryption”,IACR Cryptology ePrint Archive,374,2010



技术实现要素:

发明要解决的课题

在非专利文献1所记载的方法中,必须使用1、-1、0这3个值作为矩阵的元素。在非专利文献2所记载的方法中也使用多个值。在现有的方法中,无法高效地生成密钥共享矩阵。

本发明的目的在于,例如根据逻辑式高效地生成矩阵。

用于解决课题的手段

本发明的一个方式的矩阵生成装置具有:树构造生成部,其接受逻辑式的输入,生成表现所述逻辑式的树构造数据;根处理部,其判定所述逻辑式的要素中的、由所述树构造生成部生成的树构造数据的根表现的要素的种类,生成与判定出的种类对应的矩阵;以及节点处理部,其在存储器中存储由所述根处理部生成的矩阵,并且,依次选择由所述树构造生成部生成的树构造数据的所述根以外的节点,在选择了具有子节点的节点的情况下,对所述存储器中存储的矩阵进行与所述逻辑式的要素中的由选择出的节点表现的要素的种类对应的操作,在选择了不具有子节点的节点的情况下,将所述逻辑式的要素中的由选择出的节点表现的要素即变量与所述存储器中存储的矩阵的一行对应起来,在该树构造数据的节点的选择结束后,输出所述存储器中存储的矩阵和表示与该矩阵的各行对应的变量的信息。

发明效果

在本发明中,最初,生成与由树构造数据的根表现的要素的种类对应的矩阵。然后,对矩阵进行与由树构造数据的各节点表现的要素的种类对应的操作。关于表现变量的节点,将该变量与矩阵的一行对应起来。最终,得到变量与各行对应的矩阵。这样,根据本发明,能够根据表现逻辑式的树构造数据高效地生成矩阵。

附图说明

图1是示出实施方式1中最终生成的矩阵的一例的图。

图2是示出实施方式1的矩阵生成装置的结构的框图。

图3是示出实施方式1的矩阵生成装置的树构造生成部的结构的框图。

图4是示出实施方式1中生成的二叉树的一例的图。

图5是示出图4的二叉树的递归构造的图。

图6是示出实施方式1的矩阵生成装置的根处理部的结构的框图。

图7是示出实施方式1的矩阵生成装置的节点处理部的结构的框图。

图8是示出实施方式1的矩阵生成装置的根处理部的动作的流程图。

图9是示出实施方式1的矩阵生成装置的节点处理部的动作的流程图。

图10是示出实施方式1中生成矩阵的例子的图。

图11是示出本发明的实施方式的矩阵生成装置的硬件结构的一例的图。

具体实施方式

下面,使用附图对本发明的实施方式进行说明。

在实施方式的说明中,使用以下的记法。

在逻辑式F的变量P的内容是某个种类A的值为a这样的事象的情况下,利用下式表示变量P。

A=a

作为一例,如果种类A为“性别”,则值a为“男性”或“女性”。

在逻辑式F的变量P的内容是某个种类A的值不是a这样的事象的情况下,利用下式表示变量P。

A!=a

矩阵M的行从上向下以升序进行计数(即,被分配序数)。例如,最上侧的行是第一行。接着第一行的下侧的行是第二行。

矩阵M的列从左向右以升序进行计数(即,被分配序数)。例如,最左侧的列是第一列。接着第一列的右侧的列是第二列。

在矩阵M的行编号(即序数)与逻辑式F的变量之间,映射成立。如下式那样记述在行编号ROW与变量P之间映射ρ成立的情况。

ρ(ROW)=P

如下所述记述定义了ρ(1)=p1、ρ(2)=p2的映射ρ的情况。

ρ:{(1,p1),(2,p2)}

实施方式1

图1是示出本实施方式中最终生成的矩阵M的一例的图。

在图1中,矩阵M是L行×r列的密钥共享矩阵。映射ρ将矩阵M的各行与变量的集合{p1,…,pn}中包含的一个变量对应起来。即,矩阵M的全部行通过映射ρ而与一个变量对应起来。

在图1的例子中,L=4、r=3。即,矩阵M是四行三列的矩阵。并且,n=4。变量p1~p4分别是A!=10、B=20、C!=30、D=40。即,变量的集合是{A!=10,B=20,C!=30,D=40}。

映射ρ能够如下所述定义。

ρ:{(1,(A!=10)),(2,(B=20)),(3,(C!=30)),(4,(D=40))}

在本实施方式中,矩阵M和映射ρ成为最终的输出。该输出例如用于函数型加密。

另外,在本实施方式中,矩阵M也可以是密钥共享矩阵以外的矩阵。行数L、列数r、变量的数量n能够适当变更。各变量的内容也能够适当变更。

图2是示出本实施方式的矩阵生成装置100的结构的框图。

在图2中,矩阵生成装置100具有树构造生成部110、根处理部120、节点处理部130。

树构造生成部110接受逻辑式F的输入,生成表现逻辑式F的二叉树T。

逻辑式F是组合逻辑与(and)、逻辑或(or)、逻辑非(not)这样的运算符和变量而生成的。运算符和变量分别是逻辑式F的要素。逻辑式F例如是定义以密钥共享方式共享的信息的组合的逻辑式。

二叉树T是树构造数据的一例。二叉树T具有逻辑式F的要素作为节点。对各节点分配节点编号。在本实施方式中,根的节点编号为1,以左侧的子节点优先的方式依次对各节点分配节点编号。例如,如果根在左侧具有子节点,则该子节点的节点编号为2。如果节点编号为2的节点在左侧具有子节点(即,根的孙节点),则该子节点的节点编号为3。如果节点编号为2的节点不具有子节点且根在右侧具有子节点,则该子节点的节点编号为3。另外,节点编号的分配方法能够适当变更。

树构造生成部110将生成的二叉树T和该二叉树T的节点数N输出到根处理部120和节点处理部130。

根处理部120接受由树构造生成部110生成的二叉树T和该二叉树T的节点数N的输入,判定逻辑式F的要素中的由二叉树T的根表现的要素的种类。根处理部120生成与判定出的种类对应的矩阵M。

例如,如果由根表现的要素的种类为逻辑与运算符,则根处理部120执行逻辑与处理。在逻辑与处理中,生成与逻辑与运算符对应的矩阵M。并且,计算根的节点编号的下一个节点编号I。

如果由根表现的要素的种类为逻辑或运算符,则根处理部120执行逻辑或处理。在逻辑或处理中,生成与逻辑或运算符对应的矩阵M。并且,计算根的节点编号的下一个节点编号I。

如果由根表现的要素的种类为变量(即,节点数N为1的情况),则根处理部120执行变量处理。在变量处理中,生成与变量对应的矩阵M。并且,计算根的节点编号的下一个节点编号I。进而,通过映射ρ将变量与矩阵M的一行对应起来。

根处理部120将生成的矩阵M输出到节点处理部130。根处理部120还将计算出的节点编号I输出到节点处理部130。如果生成映射ρ,则根处理部120还将映射ρ输出到节点处理部130。

节点处理部130接受由树构造生成部110生成的二叉树T和该二叉树T的节点数N、由根处理部120生成的矩阵M和映射ρ(如果存在)、节点编号I的输入,在存储器(未图示)中存储二叉树T、节点数N、矩阵M、节点编号I、映射ρ。

节点处理部130依次选择二叉树T的根以外的节点。具体而言,节点处理部130选择与节点编号I对应的节点。节点编号I每次增加1,直到超过节点数N为止。

节点处理部130在选择了具有子节点的节点的情况下,对存储器中存储的矩阵M进行与逻辑式F的要素中的由选择出的节点表现的要素的种类对应的操作。

例如,如果由选择出的节点表现的要素的种类为逻辑与运算符,则节点处理部130执行逻辑与处理。在逻辑与处理中,对矩阵M进行与逻辑与运算符对应的操作。

如果由选择出的节点表现的要素的种类为逻辑或运算符,则节点处理部130执行逻辑或处理。在逻辑或处理中,对矩阵M进行与逻辑或运算符对应的操作。

节点处理部130在选择了不具有子节点的节点(即叶节点)的情况下,将逻辑式F的要素中的由选择出的节点表现的要素即变量与存储器中存储的矩阵M的一行对应起来。

即,如果由选择出的节点表现的要素的种类为变量,则节点处理部130执行变量处理。在变量处理中,通过映射ρ将变量与矩阵M的一行对应起来。

节点处理部130在二叉树T的节点的选择结束后,输出存储器中存储的矩阵M和映射ρ。映射ρ是表示与矩阵M的各行对应的变量的信息。

下面,对树构造生成部110进行详细说明。

图3是示出树构造生成部110的结构的框图。图4是示出本实施方式中生成的二叉树T的一例的图。

在图3中,树构造生成部110具有逻辑式输入部111、二叉树生成部112、二叉树输出部113。

下面,使用图4的例子对树构造生成部110的各部的动作进行说明。

逻辑式输入部111接受组合逻辑与(and)、逻辑或(or)、逻辑非(not)而成的以下逻辑式F的输入。

A!=10and((B=20and C!=30)or D=40)

在A不是10、B是20且C不是30的情况下,或A不是10且D是40的情况下,该逻辑式F成立。

二叉树生成部112将由逻辑式输入部111得到的逻辑式F转换成二叉树T。

逻辑式F中的运算的优先顺位是括弧内的逻辑式、逻辑与(and)、逻辑或(or)的顺序。由此,逻辑式F的运算顺序成为括弧内的逻辑与(and)、括弧内的逻辑或(or)、括弧外的逻辑与(and)的顺序。二叉树生成部112在将逻辑式F转换成二叉树T时,按照逻辑式F的运算顺序的相反顺序,从根开始配置逻辑式F的要素。具体而言,首先,二叉树生成部112在根配置最后运算的运算符X(在图4的例子中为括弧外的逻辑与)。二叉树生成部112在运算符X的左侧的子节点配置运算符X的左侧的逻辑式中最后运算的运算符Y1或变量Y2(在图4的例子中为A!=10)。二叉树生成部112在运算符X的右侧的子节点同样配置运算符X的右侧的逻辑式中最后运算的运算符Z1(在图4的例子中为括弧内的逻辑或)或变量Z2。接着,二叉树生成部112着眼于运算符X的左侧的子节点。如果运算符X的左侧的子节点为运算符Y1,则二叉树生成部112在运算符Y1的左侧的子节点配置运算符Y1的左侧的逻辑式中最后运算的运算符或变量。二叉树生成部112在运算符Y1的右侧的子节点同样配置运算符Y1的右侧的逻辑式中最后运算的运算符或变量。然后,二叉树生成部112对运算符X的右侧的子节点进行同样的处理。另一方面,如果运算符X的左侧的子节点为变量Y2,则二叉树生成部112直接进行运算符X的右侧的子节点的处理。二叉树生成部112交替反复进行左侧的子节点的处理和右侧的子节点的处理,直到在全部叶节点中配置变量结束为止。

如果二叉树T已完成,则二叉树生成部112对各节点赋予节点编号。对根赋予1。以左侧优先的方式对其他节点赋予2以后的编号。二叉树生成部112记录节点编号的最大值作为节点数N。

在图4的例子中,生成具有以下7个节点的二叉树T。

·节点编号1(根):逻辑与(and)

·节点编号2(叶节点):A!=10

·节点编号3:逻辑或(or)

·节点编号4:逻辑与(and)

·节点编号5(叶节点):B=20

·节点编号6(叶节点):C!=30

·节点编号7(叶节点):D=40

二叉树输出部113输出由二叉树生成部112生成的二叉树T和由二叉树生成部112记录的节点数N。

下面,对根处理部120和节点处理部130进行详细说明。使用图5所示的递归构造进行处理。

图6是示出根处理部120的结构的框图。图7是示出节点处理部130的结构的框图。图8是示出根处理部120的动作的流程图。图9是示出节点处理部130的动作的流程图。

在图6中,根处理部120具有根判定部121、逻辑与处理部122a、逻辑或处理部122b、变量处理部122c、处理结果输出部123。

在图7中,节点处理部130具有节点判定部131、逻辑与处理部132a、逻辑或处理部132b、变量处理部132c、处理数判定部133、处理结果输出部134。

下面,参照图8对根处理部120的各部的动作进行说明。

在S21中,根判定部121接受二叉树T和节点数N的输入。

在S22中,根判定部121对从行编号到变量的映射ρ进行初始化。

在S23中,根判定部121判定二叉树T的根是逻辑与还是逻辑或还是变量。如果根是逻辑与,则流程进入S24a。如果根是逻辑或,则流程进入S24b。如果根是变量,则流程进入S24c。

在S24a中,逻辑与处理部122a从根判定部121接受二叉树T的输入,生成以下的矩阵M。流程进入S25a。

【数式1】

在S25a中,逻辑与处理部122a在二叉树T的根的节点编号中加上1,得到节点编号I。流程进入S26。

在S24b中,逻辑或处理部122b从根判定部121接受二叉树T的输入,生成以下的矩阵M。流程进入流程はS25b。

【数式2】

在S25b中,逻辑或处理部122b在二叉树T的根的节点编号中加上1,得到节点编号I。流程进入S26。

在S24c中,变量处理部122c从根判定部121接受二叉树T和映射ρ的输入,生成以下的矩阵M。流程进入S25c。

(1)

在S25c中,变量处理部122c在二叉树T的根的节点编号中加上1,得到节点编号I。并且,变量处理部122c定义以下的映射ρ。

ρ(1)=p1

即,变量处理部122c如下所述对映射ρ进行更新。流程进入S26。

ρ:{(1,p1)}

在S26中,处理结果输出部123输出由逻辑与处理部122a、逻辑或处理部122b、变量处理部122c中的任意一方生成的矩阵M。处理结果输出部123还输出由逻辑与处理部122a、逻辑或处理部122b、变量处理部122c中的任意一方计算出的节点编号I。处理结果输出部123还输出初始状态的映射ρ或由变量处理部122c更新后的映射ρ。

下面,参照图9对节点处理部130的各部的动作进行说明。

在S31中,节点判定部131接受二叉树T、节点数N、矩阵M、节点编号I、映射ρ的输入。

在S32中,节点判定部131将处理行编号CR设定为1。矩阵M的第CR行是接着与变量对应的行。

在S33中,处理数判定部133判定节点编号I是否大于节点数N。在节点编号I小于节点数N或与节点数N相同(即,I≦N)的情况下,流程进入S34。在节点编号I大于节点数N(即,I>N)的情况下,二叉树T中没有进一步要选择的节点,因此,流程进入S36。

在S34中,节点判定部131选择与节点编号I对应的节点。节点判定部131判定选择出的节点是逻辑与还是逻辑或还是变量。如果节点(该情况下为具有子节点的节点)为逻辑与,则流程进入S35a。如果节点(该情况下为具有子节点的节点)为逻辑或,则流程进入S35b。如果节点(该情况下为叶节点)为变量,则流程进入S35c。

在S35a中,逻辑与处理部132a从节点判定部131接受二叉树T、矩阵M、处理行编号CR、节点编号I、映射ρ的输入,执行逻辑与处理。在逻辑与处理中,对矩阵M和节点编号I进行更新。逻辑与处理将在后面详细叙述。流程返回S33。

在S35b中,逻辑或处理部132b从节点判定部131接受二叉树T、矩阵M、处理行编号CR、节点编号I、映射ρ的输入,执行逻辑或处理。在逻辑或处理中,对矩阵M和节点编号I进行更新。逻辑或处理将在后面详细叙述。流程返回S33。

在S35c中,变量处理部132c从节点判定部131接受二叉树T、矩阵M、处理行编号CR、节点编号I、映射ρ的输入,执行变量处理。在变量处理中,对矩阵M、处理行编号CR、节点编号I、映射ρ进行更新。变量处理将在后面详细叙述。流程返回S33。

流程返回S33,在再次进入S34的情况下,处理数判定部133将由逻辑与处理部132a、逻辑或处理部132b、变量处理部132c中的任意一方更新后的矩阵M和节点编号I交给节点判定部131。如果由变量处理部132c对处理行编号CR和映射ρ进行了更新,则处理数判定部133还将更新后的处理行编号CR和映射ρ交给节点判定部131。

在S36中,处理结果输出部134从处理数判定部133接受矩阵M和映射ρ的输入,输出矩阵M和映射ρ。

下面,对S35a中执行的逻辑与处理进行详细说明。

作为输入,逻辑与处理部132a受理二叉树T、L’×r’的矩阵M、处理行编号CR、节点编号I、映射ρ。

逻辑与处理部132a在L’×r’的矩阵M中追加元素全部为0的行作为第(L’+1)行。由于追加了行,因此,矩阵M成为(L’+1)×r’的矩阵。

逻辑与处理部132a在(L’+1)×r’的矩阵M中追加元素全部为0的列作为第(r’+1)列。由于追加了列,因此,矩阵M成为(L’+1)×(r’+1)的矩阵。

逻辑与处理部132a在(L’+1)×(r’+1)的矩阵M中,将第CR行的最左侧存在1的列定义为第CL列。

逻辑与处理部132a将i设为r’~CL的值,在(L’+1)×(r’+1)的矩阵M中,利用第i列覆盖第(i+1)列。即,逻辑与处理部132a将第r’列复制到第(r’+1)列,将第(r’-1)列复制到第r’列,…,最后,将第CL列复制到第(CL+1)列。

逻辑与处理部132a将j设为L’~CR的值,在(L’+1)×(r’+1)的矩阵M中,利用第j行覆盖第(j+1)行。即,逻辑与处理部132a将第L’行复制到第(L’+1)行,将第(L’-1)行复制到第L’行,…,最后,将第CR行复制到第(CR+1)行。

逻辑与处理部132a在(L’+1)×(r’+1)的矩阵M中,将第CR行第CL列的元素改写为1,将第CR行第(CL+1)列的元素改写为0,将第(CR+1)行第CL列的元素改写为0,将第(CR+1)行第(CL+1)列的元素改写为1。

逻辑与处理部132a在节点编号I中加上1。

逻辑与处理部132a输出二叉树T、(L’+1)×(r’+1)的矩阵M、处理行编号CR、节点编号I、映射ρ。

下面,对S35b中执行的逻辑或处理进行详细说明。

作为输入,逻辑或处理部132b受理二叉树T、L’×r’的矩阵M、处理行编号CR、节点编号I、映射ρ。

逻辑或处理部132b在L’×r’的矩阵M中追加元素全部为0的行作为第(L’+1)行。由于追加了行,因此,矩阵M成为(L’+1)×r’的矩阵。

逻辑或处理部132b将j设为L’~CR的值,在(L’+1)×r’的矩阵M中,利用第j行覆盖第(j+1)行。即,逻辑与处理部132a将第L’行复制到第(L’+1)行,将第(L’-1)行复制到第L’行,…,最后,将第CR行复制到第(CR+1)行。

逻辑或处理部132b在节点编号I中加上1。

逻辑或处理部132b输出二叉树T、(L’+1)×r’的矩阵M、处理行编号CR、节点编号I、映射ρ。

下面,对S35c中执行的变量处理进行详细说明。

作为输入,变量处理部132c受理二叉树T、L’×r’的矩阵M、处理行编号CR、节点编号I、映射ρ。

变量处理部132c在处理行编号CR与节点编号I的叶节点的变量pk之间定义以下的映射ρ。

ρ(CR)=pk

即,变量处理部132c在映射ρ中追加(CR,pk)。

变量处理部132c在节点编号I中加上1。

变量处理部132c在处理行编号CR中加上1。

变量处理部132c输出二叉树T、L’×r’的矩阵M、处理行编号CR、节点编号I、映射ρ。

在本实施方式中,关于由节点处理部130输出的矩阵M的行中的、对相同列的元素进行相加的情况下全部列的相加结果为1的行的组合,如果与各行对应的变量为真,则逻辑式F为真。相反,关于由节点处理部130输出的矩阵M的行中的、对相同列的元素进行相加的情况下至少一列的相加结果不为1的行的组合,即使与各行对应的变量为真,逻辑式F也为假。为了生成具有这种性质的矩阵M,在本实施方式中,进行所述根处理和节点处理。

例如,根处理部120在逻辑式F的要素中的由二叉树T的根表现的要素的种类为逻辑与运算符的情况下,进行S24a的处理。即,根处理部120生成第一行第一列和第二行第二列的元素为1、第一行第二列和第二行第一列的元素为0的二行二列的矩阵,作为与逻辑与运算符对应的矩阵M。

例如,根处理部120在逻辑式F的要素中的由二叉树T的根表现的要素的种类为逻辑或运算符的情况下,进行S24b的处理。即,根处理部120生成全部元素为1的二行一列的矩阵,作为与逻辑或运算符对应的矩阵M。

例如,节点处理部130在逻辑式F的要素中的由具有子节点的节点表现的要素的种类为逻辑与运算符的情况下,进行S35a的处理。即,节点处理部130对矩阵M进行如下的操作,作为与逻辑与运算符对应的操作:追加新的行和列,并且将接着与变量对应的行设为第CR行,将第CR行的元素为1的列中的序数最小的列设为第CL列,将第CR行第CL列和第(CR+1)行第(CL+1)列的元素设定为1,将第CR行第(CL+1)列和第(CR+1)行第CL列的元素设定为0。

在S35a的处理中,实质上将第CR行扩展成二行,将第(CR+1)行以后逐行向下偏移。并且,将第CL列扩展成二列,将第(CL+1)列以后逐列向右偏移。由此,能够将扩展前的第CR行第CL列的元素转换成与通过S24a的处理而生成的矩阵相同的二行二列的部分矩阵,并且,能够避免扩展(即,与逻辑与运算符对应的操作)的影响波及其他元素。因此,能够在矩阵M中适当反映由选择出的节点表现的逻辑与运算符。

例如,节点处理部130在逻辑式F的要素中的由具有子节点的节点表现的要素的种类为逻辑或运算符的情况下,进行S35b的处理。即,节点处理部130对矩阵M进行如下的操作,作为与逻辑或运算符对应的操作:追加新的行,并且将接着与变量对应的行设为第CR行,将第(CR+1)行的各元素设定为与第CR行的各元素相同的值。

在S35b的处理中,实质上将第CR行扩展成二行,将第(CR+1)行以后逐行向下偏移。由此,能够将扩展前的第CR行中值为1的元素转换成与通过S24b的处理而生成的矩阵相同的二行一列的部分矩阵,并且,能够避免扩展(即,与逻辑或运算符对应的操作)的影响波及其他元素。因此,能够在矩阵M中适当反映由选择出的节点表现的逻辑或运算符。

这样,根据本实施方式,能够根据表示逻辑式F的二叉树T高效地生成矩阵M。

在本实施方式中,节点处理部130通过递归调用来执行二叉树T的每个节点的处理。因此,能够更加高效地生成矩阵M。

如以上说明的那样,本实施方式的矩阵生成方法包括接受逻辑式F的输入的步骤、生成与逻辑式F等价的树构造的步骤、对树构造的根进行处理的步骤、判定树构造的节点是否具有子节点的步骤、在节点具有子节点的情况下通过递归调用对子节点进行处理的步骤、在节点不具有子节点的情况下将变量与行对应起来并返回母节点的步骤。

在该矩阵生成方法中,生成的矩阵M的元素为0或1。当对由逻辑式F成立的行构成的部分矩阵的行向量进行线性耦合时,能够生成全部由1构成的向量。即使对由逻辑式F不成立的行构成的部分矩阵的行向量进行线性耦合,也无法生成全部由1构成的向量。

并且,在该矩阵生成方法中,在节点为逻辑与(and)的情况下,在矩阵M中生成表示逻辑与(and)的部分矩阵。在节点为逻辑或(or)的情况下,在矩阵M中追加与处理行相同的行。

通过使用该矩阵生成方法,能够减小矩阵M的尺寸。并且,能够高效地进行从逻辑式F到矩阵M的转换处理。进而,能够减小安装时的程序尺寸。

另外,在本实施方式中,能够根据需要进行各种变更。

例如,在本实施方式中,通过S24a、S35a的逻辑与处理生成以下的矩阵(或部分矩阵)。

【数式3】

但是,也可以通过S24a、S35a的逻辑与处理,生成以下的矩阵(或部分矩阵)。

【数式4】

并且,在本实施方式中,矩阵M由0和1构成,但是,矩阵M也可以由0和1以外的整数值或实数值构成。

图10是示出本实施方式中生成矩阵M的例子的图。

在图10的例子中,应用图4的例子。

下面,参照图8对图10的例子中的根处理部120的各部的动作进行说明。

在S21中,根判定部121接受表现以下的逻辑式F的二叉树T和节点数N的输入。

A!=10and((B=20and C!=30)or D=40)

具有节点的节点数N为7。二叉树T具有以下的7个节点。

·节点编号1(根):逻辑与(and)

·节点编号2(叶节点):A!=10

·节点编号3:逻辑或(or)

·节点编号4:逻辑与(and)

·节点编号5(叶节点):B=20

·节点编号6(叶节点):C!=30

·节点编号7(叶节点):D=40

在S22中,根判定部121对映射ρ进行初始化。

在S23中,根判定部121判定为二叉树T的根为逻辑与。流程进入S24a。

在S24a中,逻辑与处理部122a生成以下的矩阵M。流程进入S25a。

【数式5】

在S25a中,逻辑与处理部122a将节点编号从1更新为2。流程进入S26。

在S26中,处理结果输出部123输出矩阵M、节点编号I、映射ρ。

下面,参照图9对图10的例子中的节点处理部130的各部的动作进行说明。

在S31中,节点判定部131接受二叉树T、节点数N、矩阵M、节点编号I、映射ρ的输入。节点数N为7。节点编号I为2。

在S32中,节点判定部131将处理行编号CR设定为1。

在S33中,处理数判定部133判定为节点编号I小于节点数N(即,由于I=2、N=7,因此I≦N)。流程进入S34。

在S34中,节点判定部131选择与节点编号I对应的节点。节点判定部131判定为选择出的节点为变量(A!=10)。流程进入S35c。

在S35c中,作为输入,变量处理部132c接受二叉树T、2×2的矩阵M、处理行编号CR、节点编号I、映射ρ。处理行编号CR为1。节点编号I为2。

变量处理部132c在处理行编号CR与节点编号I的叶节点的变量(A!=10)之间定义以下的映射ρ。

ρ(1)=(A!=10)

即,变量处理部132c在映射ρ中追加(1,(A!=10))。

变量处理部132c将节点编号I从2更新为3。

变量处理部132c将处理行编号CR从1更新为2。

变量处理部132c输出二叉树T、2×2的矩阵M、处理行编号CR、节点编号I、映射ρ。流程返回S33。

在S33中,处理数判定部133判定为节点编号I小于节点数N(即,由于I=3、N=7,因此I≦N)。流程进入S34。

在S34中,节点判定部131选择与节点编号I对应的节点。节点判定部131判定为选择出的节点为逻辑或。流程进入S35b。

在S35b中,作为输入,逻辑或处理部132b接受二叉树T、2×2的矩阵M、处理行编号CR、节点编号I、映射ρ。处理行编号CR为2。节点编号I为3。映射ρ为{(1,(A!=10))}。

逻辑或处理部132b在2×2的矩阵M中追加元素全部为0的行作为第三行。由于追加了行,因此,矩阵M成为以下的3×2的矩阵。

【数式6】

逻辑或处理部132b在3×2的矩阵M中,将第二行复制到第三行。其结果是,矩阵M成为以下的矩阵。

【数式7】

逻辑或处理部132b将节点编号I从3更新为4。

逻辑或处理部132b输出二叉树T、3×2的矩阵M、处理行编号CR、节点编号I、映射ρ。流程返回S33。

在S33中,处理数判定部133判定为节点编号I小于节点数N(即,由于I=4、N=7,因此I≦N)。流程进入S34。

在S36中,处理结果输出部134从处理数判定部133接受矩阵M和映射ρ的输入,输出矩阵M和映射ρ。

在S34中,节点判定部131选择与节点编号I对应的节点。节点判定部131判定为选择出的节点为逻辑与。流程进入S35a。

在S35a中,作为输入,逻辑与处理部132a受理二叉树T、3×2的矩阵M、处理行编号CR、节点编号I、映射ρ。处理行编号CR为2。节点编号I为4。映射ρ为{(1,(A!=10))}。

逻辑与处理部132a在3×2的矩阵M中追加元素全部为0的行作为第四行。由于追加了行,因此,矩阵M成为以下的4×2的矩阵。

【数式8】

逻辑与处理部132a在4×2的矩阵M中追加元素全部为0的列作为第三列。由于追加了列,因此,矩阵M成为以下的4×3的矩阵。

【数式9】

逻辑与处理部132a在4×3的矩阵M中,将第CR行的最左侧存在1的列定义为第CL列。即,逻辑与处理部132a将CL设定为2。

逻辑与处理部132a在4×3的矩阵M中,将第二列复制到第三列。其结果是,矩阵M成为以下的矩阵。

【数式10】

逻辑与处理部132a在4×3的矩阵M中,将第三行复制到第四行,将第二行复制到第三行。其结果是,矩阵M成为以下的矩阵。

【数式11】

逻辑与处理部132a在4×3的矩阵M中,将第CR行第CL列的元素改写为1,将第CR行第(CL+1)列的元素改写为0,将第(CR+1)行第CL列的元素改写为0,将第(CR+1)行第(CL+1)列的元素改写为1。即,逻辑与处理部132a将第二行第二列和第三行第三列的元素设定为1,将第二行第三列和第三行第二列的元素设定为0。其结果是,矩阵M成为以下的矩阵。

【数式12】

逻辑与处理部132a将节点编号I从4更新为5。

逻辑与处理部132a输出二叉树T、4×3的矩阵M、处理行编号CR、节点编号I、映射ρ。流程返回S33。

在S33中,处理数判定部133判定为节点编号I小于节点数N(即,由于I=5、N=7,因此I≦N)。流程进入S34。

在S34中,节点判定部131选择与节点编号I对应的节点。节点判定部131判定为选择出的节点为变量(B=20)。流程进入S35c。

在S35c中,作为输入,变量处理部132c接受二叉树T、4×3的矩阵M、处理行编号CR、节点编号I、映射ρ。处理行编号CR为2。节点编号I为5。映射ρ为{(1,(A!=10))}。

变量处理部132c在处理行编号CR与节点编号I的叶节点的变量(B=20)之间定义以下的映射ρ。

ρ(2)=(B=20)

即,变量处理部132c在映射ρ中追加(2,(B=20))。

变量处理部132c将节点编号I从5更新为6。

变量处理部132c将处理行编号CR从2更新为3。

变量处理部132c输出二叉树T、4×3的矩阵M、处理行编号CR、节点编号I、映射ρ。流程返回S33。

在S33中,处理数判定部133判定为节点编号I小于节点数N(即,由于I=6、N=7,因此I≦N)。流程进入S34。

在S34中,节点判定部131选择与节点编号I对应的节点。节点判定部131判定为选择出的节点为变量(C!=30)。流程进入S35c。

在S35c中,作为输入,变量处理部132c接受二叉树T、4×3的矩阵M、处理行编号CR、节点编号I、映射ρ。处理行编号CR为3。节点编号I为6。映射ρ为{(1,(A!=10)),(1,(B=20))}。

变量处理部132c在处理行编号CR与节点编号I的叶节点的变量(C!=30)之间定义以下的映射ρ。

ρ(3)=(C!=30)

即,变量处理部132c在映射ρ中追加(3,(C!=30))。

变量处理部132c将节点编号I从6更新为7。

变量处理部132c将处理行编号CR从3更新为4。

变量处理部132c输出二叉树T、4×3的矩阵M、处理行编号CR、节点编号I、映射ρ。流程返回S33。

在S33中,处理数判定部133判定为节点编号I与节点数N相同(即,由于I=7、N=7,因此I≦N)。流程进入S34。

在S34中,节点判定部131选择与节点编号I对应的节点。节点判定部131判定为选择出的节点为变量(D=40)。流程进入S35c。

在S35c中,作为输入,变量处理部132c接受二叉树T、4×3的矩阵M、处理行编号CR、节点编号I、映射ρ。处理行编号CR为3。节点编号I为7。映射ρ为{(1,(A!=10)),(1,(B=20)),(3,(C!=30))}。

变量处理部132c在处理行编号CR与节点编号I的叶节点的变量(D=40)之间定义以下的映射ρ。

ρ(4)=(D=40)

即,变量处理部132c在映射ρ中追加(4,(D=40))。

变量处理部132c将节点编号I从7更新为8。

变量处理部132c将处理行编号CR从4更新为5。

变量处理部132c输出二叉树T、4×3的矩阵M、处理行编号CR、节点编号I、映射ρ。流程返回S33。

在S33中,处理数判定部133判定为节点编号I大于节点数N(即,由于I=8、N=7,因此I>N)。流程进入S36。

在S36中,处理结果输出部134输出4×3的矩阵M和映射ρ。映射ρ为{(1,(A!=10)),(1,(B=20)),(3,(C!=30)),(4,(D=40))}。

图11是示出本发明的实施方式的矩阵生成装置100的硬件结构的一例的图。

在图11中,矩阵生成装置100是计算机,具有输出装置910、输入装置920、存储装置930、处理装置940这样的硬件。通过矩阵生成装置100的各部(在本发明的实施方式的说明中作为“部”进行说明的部分)来利用硬件。

输出装置910例如是LCD(Liquid Crystal Display)等显示装置、打印机、通信模块(通信电路等)。输出装置910用于供本发明的实施方式的说明中作为“部”进行说明的部分进行数据、信息、信号的输出(发送)。

输入装置920例如是键盘、鼠标、触摸面板、通信模块(通信电路等)。输入装置920用于供本发明的实施方式的说明中作为“部”进行说明的部分进行数据、信息、信号的输入(接收)。

存储装置930例如是ROM(Read Only Memory)、RAM(Random Access Memory)、HDD(Hard Disk Drive)、SSD(Solid State Drive)。在存储装置930中存储有程序931、文件932。在程序931中包含执行本发明的实施方式的说明中作为“部”进行说明的部分的处理(功能)的程序。在文件932中包含通过本发明的实施方式的说明中作为“部”进行说明的部分进行运算、加工、读取、写入、利用、输入、输出等的数据、信息、信号(值)等。

处理装置940例如是CPU(Central Processing Unit)。处理装置940经由总线等与其他硬件设备连接,对这些硬件设备进行控制。处理装置940从存储装置930中读出程序931,执行程序931。处理装置940用于供本发明的实施方式的说明中作为“部”进行说明的部分进行运算、加工、读取、写入、利用、输入、输出等。

关于本发明的实施方式的说明中作为“部”进行说明的部分,也可以将“部”改写为“电路”、“装置”、“设备”。并且,关于本发明的实施方式的说明中作为“部”进行说明的部分,也可以将“部”改写为“工序”、“步骤”、“处理”。即,本发明的实施方式的说明中作为“部”进行说明的部分仅通过软件来实现,仅通过硬件来实现,或者通过软件和硬件的组合来实现。软件作为程序931存储在存储装置930中。程序931使计算机作为本发明的实施方式的说明中作为“部”进行说明的部分发挥功能。或者,程序931使计算机执行本发明的实施方式的说明中作为“部”进行说明的部分的处理。

以上说明了本发明的实施方式,但是,也可以实施该实施方式的一部分。例如,可以仅采用该实施方式的说明中作为“部”进行说明的部分中的任意一方,也可以采用若干个任意的组合。另外,本发明不限于该实施方式,能够根据需要进行各种变更。

标号说明

100:矩阵生成装置;110:树构造生成部;111:逻辑式输入部;112:二叉树生成部;113:二叉树输出部;120:根处理部;121:根判定部;122a:逻辑与处理部;122b:逻辑或处理部;122c:变量处理部;123:处理结果输出部;130:节点处理部;131:节点判定部;132a:逻辑与处理部;132b:逻辑或处理部;132c:变量处理部;133:处理数判定部;134:处理结果输出部;910:输出装置;920:输入装置;930:存储装置;931:程序;932:文件;940:处理装置。

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