本發明涉及矩陣生成裝置、矩陣生成方法和矩陣生成程序。本發明例如涉及生成加密和解密中使用的密鑰共享矩陣的裝置、方法和程序。
背景技術:
在密鑰共享方式中,密鑰信息被分成若干個共享信息。在復原密鑰信息時,必須收集特定組合的共享信息。能夠利用使用邏輯或或邏輯與等的邏輯式來定義收集什么樣的組合的共享信息即可。密鑰共享矩陣是將該邏輯式轉換成矩陣形式而得到的。對密鑰共享矩陣的各行分配邏輯式中包含的要素。密鑰共享矩陣被設計成,滿足邏輯式的要素的行的和或積成為期望值。不管如何組合不滿足邏輯式的要素的行,都無法得到期望值。
例如,設邏輯式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:處理裝置。