欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種基于圖的鄰接矩陣的形式化驗證方法與流程

文檔序號:11919701閱讀:388來源:國知局
一種基于圖的鄰接矩陣的形式化驗證方法與流程
本發(fā)明主要涉及一種形式化驗證方法,特別涉及一種基于圖的鄰接矩陣的形式化驗證方法。
背景技術
:形式化驗證技術使用嚴格的數(shù)學模型分析和驗證系統(tǒng)的正確性,在計算機硬件、通信協(xié)議、控制系統(tǒng)、安全認證協(xié)議等方面有許多成功的應用。模型檢測是基于模型的形式化驗證的基本方法,是一種對待檢測系統(tǒng)進行建模并自動分析驗證的技術,最早由E.M.Clarke和E.A.Emerson以及J.P.Queille和J.Sifakis分別獨立提出。模型檢測的基本問題是:把待測系統(tǒng)的行為用嚴格的形式化語言描述出來,建成待檢測系統(tǒng)的抽象模型;針對待檢測系統(tǒng)提取出待檢測需求,再把待檢測需求形式化為用邏輯公式表達的屬性規(guī)范;再利用模型檢測工具驗證抽象模型是否滿足規(guī)范,若不滿足,給出違反屬性規(guī)范的反例。因此模型檢測方法要解決的問題是:如何建立抽象模型,如何對抽象模型進行驗證。傳統(tǒng)的模型檢測方法是基于Kripke結(jié)構(gòu)的。一個Kripke結(jié)構(gòu)M=(S,R,L)是一個由狀態(tài)集S,和轉(zhuǎn)移關系R(S上的二元關系),以及使得每個Si∈S存在一個Si′∈S,滿足Si→Si′,和一個標記函數(shù)L:S→P(Atoms)組成的系統(tǒng)抽象。抽象模型是一個由Kripke結(jié)構(gòu)描述的狀態(tài)轉(zhuǎn)換系統(tǒng),屬性規(guī)范是若干時序邏輯公式。Kripke結(jié)構(gòu)描述的是一個非限定狀態(tài)轉(zhuǎn)換系統(tǒng),可以用一個圖來表示,圖中的節(jié)點表示系統(tǒng)可以達到的狀態(tài),有向邊表示狀態(tài)的遷移。Kripke結(jié)構(gòu)還定義了一個標記函數(shù),標記出每個狀態(tài)下為真的所有原子命題的集。時序邏輯公式的語義就是基于Kripke結(jié)構(gòu)進行解釋,Kripke結(jié)構(gòu)在模型檢測中負責描述待檢測系統(tǒng)的行為。從Kripke狀態(tài)轉(zhuǎn)換圖的初始節(jié)點出發(fā),將該結(jié)構(gòu)展開成一棵無限高度的樹,樹中的每一條路徑就是待檢測系統(tǒng)的一條狀態(tài)轉(zhuǎn)換序列,它表示待檢測系統(tǒng)可能的一次運行狀況。這棵樹包含了所有可能的路徑。實際應用時,待檢測系統(tǒng)的路徑往往很多很復雜,展開樹的分支比較多,計算機的主要工作就是展開這個樹,并遍歷所有可能的路徑,找出是否存在違反屬性規(guī)范的路徑。若存在違反屬性規(guī)范的路徑,則給出該路徑。為了使用模型檢測工具進行分析和驗證,建模中需要建立待檢測系統(tǒng)的Kripke結(jié)構(gòu)模型,并在模型的基礎上提出用時序邏輯公式描述的待檢測屬性。建模者需要將待檢測系統(tǒng)運行生命周期可能到達的階段劃分為若干個狀態(tài),并明確標示出所有狀態(tài)下系統(tǒng)的相應屬性。這樣,計算機才能完成自動搜索并分析驗證的工作?;趥鹘y(tǒng)模型檢測方法的工具,在建模具體實現(xiàn)時,用的數(shù)據(jù)結(jié)構(gòu)為OBDD(OrderBinaryDecisionDiagram),即將元素按一定的順序排列好后并可以得到最簡形式的二叉決策圖。它的本質(zhì)是真值表的簡化。如一個公式(x∨y的結(jié)果取非)可以得到如圖1所示的BDD結(jié)構(gòu),圖中虛線表示該節(jié)點取0的值,實線表示該節(jié)點取1的值,最下面的1和0表示所有操作數(shù)根據(jù)不同取值后得到的真值。BDD結(jié)構(gòu)是真值表的一個變形。在將x,y的順序固定后,可以將其再次化簡以縮小空間,如圖2所示的OBDD結(jié)構(gòu)。一個固定順序的布爾值,最終不同取值的結(jié)果將會在根節(jié)點處展現(xiàn)。這樣做的目的是,OBDD可以很好的將每一個驗證步驟中的狀態(tài)集和結(jié)果通過真值表簡化的結(jié)果所表示出來。但也存在一些不足,每進行一次布爾操作,其表達式的真值表都會改變。進而對整個二叉決策圖的結(jié)果以及構(gòu)成也會改變。再簡單一個操作,只要引起了真值表的改變,整個表達式的OBDD就得全部重新構(gòu)建,重新化簡,去除冗余,整個過程非常繁瑣、冗余。在傳統(tǒng)的驗證方法中,就是將狀態(tài)集中的每個狀態(tài),寫為原子命題的表示,再將其結(jié)果根據(jù)原子命題的真值構(gòu)建OBDD結(jié)構(gòu)。如一個狀態(tài)集{s0,s1},s0的原子命題為s1&的原子命題為那么該狀態(tài)集為其OBDD構(gòu)成如圖3所示。該結(jié)構(gòu)圖雖然簡化了空間,但顯得很不直觀,無法很清楚的明白其狀態(tài)集所表示的意義,即該狀態(tài)集包含哪些狀態(tài)。而且當集中的狀態(tài)發(fā)生變化時,表達式改變,整個圖也會重新變化。這是一個隱式的不可見的驗證過程。特別元素個數(shù)的變多時,整個OBDD的深度也會變多,化簡的過程難度也會隨之上升。而將此數(shù)據(jù)結(jié)構(gòu)運用于驗證的規(guī)范過程時,每進行一個驗證的操作,會存在多個狀態(tài)標記的過程,而每一個狀態(tài)的標記,都會影響到OBDD的重建,這是相當影響效率的一個過程。技術實現(xiàn)要素:本發(fā)明的發(fā)明目的在于:針對上述存在的問題,提供一種建模與驗證過程數(shù)據(jù)結(jié)構(gòu)不是基于現(xiàn)有的OBDD,而是基于圖的鄰接矩陣的形式化驗證方法。本發(fā)明的基于圖的鄰接矩陣的形式化驗證方法,包括下列步驟:步驟1:輸入待測系統(tǒng)模型,進行狀態(tài)編碼。根據(jù)待測系統(tǒng)和待測需求的特點定義待檢測系統(tǒng)的狀態(tài),這個狀態(tài)即為待檢測系統(tǒng)的抽象模型的狀態(tài)。一個狀態(tài)是一個多元組,每一個元可以當做一個原子命題,即一個待測系統(tǒng),可以劃分為一個由同一組原子命題組合成的狀態(tài)集。若將原子命題的順序固定,則按照一定的方式,可以將狀態(tài)集編碼。每一個原子命題,它都是一個邏輯命題。在邏輯上,可以用“1”代表邏輯“真”,用“0”代表邏輯“假”。所以每一個編碼后的狀態(tài),都可以被僅由“0”和“1”組成的數(shù)字序列所表示。若將原子命題的順序固定,那么每一個狀態(tài)根據(jù)固定原子命題順序以及命題真假,所編碼的結(jié)果將是固定的。由于編碼的結(jié)果是一串由0和1組成的數(shù)字,可以將其結(jié)果看成一串二進制數(shù),將其大小按從小到大排列,從而得到狀態(tài)的排序。并將二進制數(shù)轉(zhuǎn)換成十進制數(shù)的值,作為狀態(tài)的下標元素。如一個由4個原子命題組成的系統(tǒng)。編碼為0000的狀態(tài),對應的狀態(tài)編號為0,例如標記為S0,同理,編碼為0001的狀態(tài)可標記為S1,編碼為0100的狀態(tài)可標記為S4。關于原子命題,有如下性質(zhì):一個由3個原子命題構(gòu)成的系統(tǒng),設3個原子命題分別為x1,x2,x3,并設置其編碼序列為x1,x2,x3的順序排列,用“1”代表邏輯“真”,用“0”代表邏輯“假”??傻玫饺缦略用}編碼表格:表1原子命題編碼表x1x2x3coded00000011010201131004101511061117表1前三列為三個不同的原子命題的真假,第四列為狀態(tài)編號。從上表中不同原子命題的真值編碼得到的結(jié)果中。由表1可知,對于一個有n個原子命題的系統(tǒng),對于其在編碼序列中的第m個原子命題,有如下性質(zhì):xm為真時,能被劃分標記的狀態(tài),2n-m個一組,有2m-1個組,組間相隔為2n-1,組內(nèi)相鄰出現(xiàn),并且從數(shù)字2n-1開始。其編碼序號可用公式表示為:2n-m+j+k*2m-1,0≤j≤2n-m-1,0≤k<2m-1-1(1)其中,j為從1到2m-1中的每一個數(shù)。公式(1)用于快速查找某個原子命題為“真”的狀態(tài)編號,從而得到包括任意規(guī)范的狀態(tài)集集s(f),其中f表示規(guī)范符號的表達式。例如f對應表1中的x2時,s(f)={2,3,6,7}。步驟2:將編碼與狀態(tài)轉(zhuǎn)移關系結(jié)合,建立鄰接矩陣。待驗證系統(tǒng)可以被一個有向圖來描述。其中,系統(tǒng)中的狀態(tài)作為有向圖的頂點,狀態(tài)間的轉(zhuǎn)移關系,作為連接各頂點的有向邊。一個有n個原子命題的系統(tǒng),就有2n個狀態(tài),那么轉(zhuǎn)換成有向圖,就是一個有2n個頂點的有向圖。將2n個狀態(tài)按編碼后的順序?qū)删仃囍械男泻土校俑鶕?jù)鄰接矩陣的定義,若狀態(tài)Si到狀態(tài)Sj存在轉(zhuǎn)移關系,則鄰接矩陣Am中,Am[i][j]=1,其余未有轉(zhuǎn)移關系的為0。此時,可根據(jù)Kripke結(jié)構(gòu)中的轉(zhuǎn)移關系R,建立有向圖和鄰接矩陣。由于一個系統(tǒng)中存在很多無效狀態(tài),即在狀態(tài)轉(zhuǎn)移關系中,從來不會到達,從來不會出現(xiàn)的狀態(tài)。這些狀態(tài)在鄰接矩陣中的性質(zhì)是:對應的行和列全為0。所以為了進一步簡化計算復雜度,還可以在矩陣建立之后,將其行和列全為0的狀態(tài)去掉,精簡后的矩陣是一個全為有效狀態(tài)的矩陣。由于對編碼后的鄰接矩陣進行了無效狀態(tài)的剔除,所以要通過剔除前的映射表,將待測系統(tǒng)的狀態(tài)集,重新對應至剔除后的矩陣中,即記錄精簡處理前鄰接矩陣Am中的元素值為“1”的元素對應的狀態(tài)編號(存在狀態(tài)轉(zhuǎn)移的兩個狀態(tài)編號),以備驗證處理時映射到對應的狀態(tài)。步驟3:將待求規(guī)范轉(zhuǎn)化為規(guī)范語法樹并取反。待求規(guī)范是用戶輸入的一個字符串,要想實現(xiàn)自動化的驗證,必須將其轉(zhuǎn)換成高級語言能夠識別的數(shù)據(jù)結(jié)構(gòu)——規(guī)范語法樹。語法樹是句子結(jié)構(gòu)的圖形表示,它代表了句子的推導結(jié)果,有利于理解句子語法結(jié)構(gòu)的層次。簡單說,語法樹就是按照某一規(guī)則進行推導時所形成的樹。在語法樹中采用遞歸原理,就可以將語法樹執(zhí)行了。從規(guī)范語法樹的根節(jié)點開始進行,先判斷該節(jié)點的左右子樹,可得出是否往下還有計算子樹,若有,則繼續(xù)遞歸,直到計算至葉子節(jié)點為止。通常,葉子節(jié)點都為CTL規(guī)范(計算樹邏輯)中的原子節(jié)點。步驟4:結(jié)合鄰接矩陣Am對取反后的規(guī)范語法樹進行驗證處理,保存滿足反規(guī)范的狀態(tài),得到最終狀態(tài)集。語法樹中的操作算子有邏輯算子和時態(tài)算子兩種。邏輯算子有(非),∨(或),∧(與)以及→(條件)和(蘊含)。時態(tài)算子分為2類。一類是范圍描述,包括A、E,其中A代表all,所有路徑,E代表exist,存在一條路徑;另一類是行為描述,包括X、F、G、U,其中X代表next,下一狀態(tài);F代表future,以后的某一狀態(tài);G代表global,全時刻全局的狀態(tài);U代表until,直到出現(xiàn)某個狀況的狀態(tài)。將兩類時態(tài)算子組合起來,就是CTL算子(計算樹邏輯算子)。如AF,就代表所有路徑的未來某一時刻;EG代表存在一條全局都滿足的路徑上的狀態(tài)集。用符號|=來表示滿足關系。該符號左邊為一個狀態(tài),右邊為一個規(guī)范表達式。如Si|=f=1表示:狀態(tài)Si滿足公式f。若待驗證對象為邏輯算子,則直接進行邏輯計算,完成驗證操作,具體如下:(1)Not:(2)Or:(3)And:(4)Other:若待驗證對象為計算樹邏輯CTL算子,則繼續(xù)判斷待驗證對象包括的CTL算子是否屬于基本CTL算子集,若是,則直接進行CTL算子驗證;否則對待驗證對象進行CTL算子轉(zhuǎn)換(具體的轉(zhuǎn)換關系為現(xiàn)有技術,本發(fā)明不再詳述),用基本CTL算子集中的CTL算子進行表達后,再進行CTL算子驗證。其中,基本CTL算子集包括的CTL算子為:EX、EF、EU、EG,各CTL算子的驗證操作具體如下:(1)EX對于待驗證對象EX(f),在鄰接矩陣Am中,對于任意i,j∈s,若Am[i][j]=1,則狀態(tài)Si能被EX(f)標記,其中f為CTL規(guī)范表達式,s表示對應系統(tǒng)模型的狀態(tài)集S的狀態(tài)編碼集;即對于狀態(tài)集S中任意狀態(tài)Si、Sj,若Am[i][j]=1,則Si能被EX(f)標記,i,j為Si、Sj的狀態(tài)編碼。用Am表示系統(tǒng)的鄰接矩陣,可用如下公式來表示S中狀態(tài)的滿足EX的情況:公式(2)中,i,j∈s。(2)EF對于待驗證對象EF(f),先計算鄰接矩陣Am的可達矩陣Rm;在可達矩陣Rm中,對于任意i∈s,j∈s(f),若Rm[i][j]=1,則Si能被EF(f)標記,其中s(f)表示包括規(guī)范符號的表達式f的狀態(tài)編號集??捎萌缦鹿絹肀硎維中狀態(tài)的滿足EF的情況:公式(3)中,i∈s,j∈s(f)。(3)EU對于待驗證對象E[f1Uf2],執(zhí)行下列步驟:(3a)對于s(f1)中的每個狀態(tài)編號i,s(f2)中的每個狀態(tài)編號j,在鄰接矩陣Am中,若Am[i][j]=1,則將狀態(tài)編號i記入集合I。當統(tǒng)計完所有的i、j后,若集合I為空,則Si不能被E[f1Uf2]標記,即Si能被E[f1Uf2]標記,其中i∈I,其中s(f1)、s(f2)分別表示包括規(guī)范符號的表達式f1、f2的狀態(tài)編號集;(3b)剔除鄰接矩陣Am中不能被f1標記的所有狀態(tài),得到子鄰接矩陣Am′,并計算Am′的可達矩陣Rm′;在可達矩陣Rm′中,對任意i∈s(f1),k∈I,若Rm′[i][k]=1,則Si能被E[f1Uf2]標記。可用如下公式來表示S中狀態(tài)的滿足情況:公式(4)中,在Rm′[i][k]中的i和k分別為:i∈s(f1),k∈I。(4)EG對于待驗證對象EG(f),執(zhí)行下列步驟:(4a)從鄰接矩陣Am中剔除所有不能被規(guī)范符號的表達式f標記的所有狀態(tài),得到子鄰接矩陣Am″,將對應子鄰接矩陣Am″對應的狀態(tài)編號集記為s″,并計算子鄰接矩陣Am″的可達矩陣Rm″,子鄰接矩陣Am″的強連通矩陣SCC″,并將強連通矩陣SCC″對應的狀態(tài)編號集記為scc″,即符號&表示按位與;(4b)在可達矩陣Rm″中,對任意i∈s″,j∈scc″,若Rm″[i][j]=1,則狀態(tài)Si能被EG(f)標記。可用如下公式來表示狀態(tài)Si的滿足情況:公式(3)中,i∈s″,j∈scc″。步驟5:判斷初始狀態(tài)是否在最終狀態(tài)集中,若否,則驗證通過;若是,則從初始狀態(tài)開始,查找一條滿足反規(guī)范的路徑并輸出。由于求的是反規(guī)范的驗證結(jié)果,所以,若初始狀態(tài)不在最終狀態(tài)集里面,則說明原規(guī)范正確,輸出true。若初始狀態(tài)在反規(guī)范里面,則原規(guī)范是錯誤的,從初始狀態(tài)開始,找一條滿足反規(guī)范的路徑,那么該路徑就是一條與原規(guī)范相斥的反例。綜上所述,由于采用了上述技術方案,本發(fā)明的有益效果是:本發(fā)明基于圖的鄰接矩陣實現(xiàn)形式化驗證處理,根據(jù)鄰接矩陣的定義,矩陣的行和列直接表示了一個轉(zhuǎn)移關系中的兩個狀態(tài),所以每次驗證步驟的結(jié)果的改變,都可以根據(jù)矩陣很清楚明白的體現(xiàn),是一個顯示的驗證過程。而且矩陣中的查找和計算操作,比OBDD構(gòu)建和化簡要簡單,可以提高其驗證效率。附圖說明圖1是BDD結(jié)構(gòu)示意圖。圖2是OBDD結(jié)構(gòu)示意圖一。圖3是OBDD結(jié)構(gòu)示意圖二。圖4是具體實施方式的實現(xiàn)過程示意圖。圖5是實施例的模型圖。具體實施方式為使本發(fā)明的目的、技術方案和優(yōu)點更加清楚,下面結(jié)合實施方式和附圖,對本發(fā)明作進一步地詳細描述。將本發(fā)明的驗證方法作為一個形式化驗證工具進行應用實施。一個形式化驗證工具需要有如下幾個模塊:系統(tǒng)建模模塊、規(guī)范語法樹模塊、驗證模塊,輸出反例模塊。其中,系統(tǒng)建模模塊用于將待測系統(tǒng)的Kripke結(jié)構(gòu)轉(zhuǎn)化為一個能表達出系統(tǒng)狀態(tài)關系的鄰接矩陣;規(guī)范語法樹模塊用于將表達待測規(guī)范的字符串轉(zhuǎn)化為能被機器語言能識別的語法樹;驗證模塊用于將輸入的規(guī)范語法樹與狀態(tài)鄰接矩陣按照已有的驗證算法,進行系統(tǒng)驗證;。輸出反例模塊用于正確規(guī)范和錯誤規(guī)范的結(jié)果輸出。參見圖1,本發(fā)明基于輸入的待測系統(tǒng)的Kripke結(jié)構(gòu)和待測的CTL規(guī)范,通過系統(tǒng)建模模塊實現(xiàn)Kripke結(jié)構(gòu)、的鄰接矩陣建立、通過規(guī)范語法樹模塊實現(xiàn)規(guī)范語法樹的建立和取反、通過驗證模塊實現(xiàn)規(guī)范驗證,若通過驗證,則輸出TRUE;否則通過輸出反例模塊輸出一條路徑作為反例。各部分的具體實現(xiàn)步驟如下:一、將待測系統(tǒng)的Kripke結(jié)構(gòu)轉(zhuǎn)化為鄰接矩陣具體包括如下步驟:步驟101:提取Kripke結(jié)構(gòu)的狀態(tài)集S和原子命題集L,對原子命題進行排列和編碼,從而得到狀態(tài)編碼,將二進制的狀態(tài)編碼所對應的十進制的值作為狀態(tài)編號,再將狀態(tài)編號對應進同樣規(guī)模大小的鄰接矩陣中。步驟101-1:確定原子命題集L中的每個原子命題的編碼序列,如將n(L的元素個數(shù))個原子命題的編碼序列設置為x0,x1,x2,x3,...,xn-1。每個原子命題可以取0或1,每組不同取值的原子命題集,對應了一個狀態(tài),即每個狀態(tài)由n個“0”或“1”組成的數(shù)字表示。并將每個狀態(tài)的二進制串所對應的十進制的值作為狀態(tài)編號,得到2n個狀態(tài)編號:0,1,……,N-1,其中N=2n。用s表示狀態(tài)編號集,即s={0,1,…,N-1},對應的狀態(tài)集S={S0,…,SN-1}。步驟101-2:對于包括n個原子命題的待測系統(tǒng),其對應的狀態(tài)數(shù)目有2n個狀態(tài),所以建立一個2n階的方陣A,將狀態(tài)序列S0,S1,S2,...,SN-1對應進方陣的行和列中,即狀態(tài)Si對應到矩陣的第i行或第i列(i=0,1,,...,2n),得到鄰接矩陣Am。步驟102:將Kripke中的狀態(tài)轉(zhuǎn)移關系R與鄰接矩陣Am相結(jié)合,將存在轉(zhuǎn)移關系的狀態(tài),在矩陣Am的對應位置處置為1。步驟102-1:找出狀態(tài)轉(zhuǎn)移關系R中存在轉(zhuǎn)移關系的2個狀態(tài),根據(jù)該狀態(tài)的原子命題的真?zhèn)危瑏碚业剿麄冊跔顟B(tài)集排序中的位置,如Si→Sj。步驟102-2:根據(jù)鄰接矩陣的定義,若從一個點i到另一個點j存在轉(zhuǎn)移關系,那么矩陣中i行j列位置置為1,即若存在狀態(tài)Si可達狀態(tài)Sj,則在鄰近矩陣Am中,有Am[i][j]=1,其中i、j表示鄰近矩陣Am的行、列編號。步驟102-3:重復102-1,102-2步驟,直到所有R中的轉(zhuǎn)移關系處理完為止。步驟103:建立好的鄰接矩陣Am包括了很多無效狀態(tài),由于一個系統(tǒng)中存在很多無效狀態(tài),即在狀態(tài)轉(zhuǎn)移關系中,從來不會到達,從來不會出現(xiàn)的狀態(tài)。這些狀態(tài)在鄰接矩陣中的性質(zhì)是:對應的行和列全為0。所以在矩陣建立之后,將其行和列全為0的狀態(tài)去掉,精簡后的矩陣是一個全為有效狀態(tài)的矩陣,以便于簡化后續(xù)的驗證過程。步驟103-1:找出矩陣Am中全為0的行和列,表示沒有一個狀態(tài)會導致它發(fā)生,且它也不會導致其他狀態(tài)轉(zhuǎn)移,這類狀態(tài)就是無效狀態(tài),將該行和該列從矩陣Am中刪除。步驟103-2:重復103-1,直到矩陣Am中不存在這樣的行和列為止。二、將待測規(guī)范的字符串轉(zhuǎn)化為能被機器語言能識別的語法樹,包括下列步驟。步驟201:將用戶輸入的待測規(guī)范(包括操作符、符號、單詞等),轉(zhuǎn)換語法分析器能識別的單詞表示符。步驟201-2:,在詞法分析器中編寫關鍵詞,如“EX”,“AG”等規(guī)范描述詞和“!”“&”等邏輯符號詞以及小括號,中括號等。步驟201-2:基于關鍵詞對用戶輸入信息進行匹配,并將匹配到的關鍵詞替換為語法分析器能識別的單詞表示符(token)。原規(guī)范就成為一組很正式的單詞了。步驟202:將詞法分析轉(zhuǎn)換好的單詞組進行語法分析,通過判斷操作符的優(yōu)先級來決定處理順序,即在語法樹中的位置。優(yōu)先級最高的,越靠近根節(jié)點。葉子節(jié)點必然是原子命題。步驟202-1:在詞法分析器中設置操作符的優(yōu)先級,如時態(tài)邏輯操作符大于布爾邏輯操作符,大于原子節(jié)點等。步驟202-2:在每個優(yōu)先級中,設置節(jié)點插入操作通過二叉節(jié)點的合理操作,可將語法節(jié)點構(gòu)成語法樹。如新的節(jié)點的左兒子指向當前的根節(jié)點。步驟202-3:執(zhí)行202-1、202-2的操作,使得最后步驟201執(zhí)行完的單詞組構(gòu)建成一個具有待求規(guī)范優(yōu)先級順序的語法樹,即規(guī)范語法樹。步驟203:對得到的語法樹取反,為的是后續(xù)驗證過程的需要,驗證一個反的規(guī)范,若它是正確的,則原規(guī)范錯誤,若反規(guī)范是正確的,那么它的一條路徑,就是原規(guī)范的反例。步驟203-1:設置每個操作符取反的操作,包括左右子樹應該如何操作,是否取反,原操作符替換等。步驟203-2:從根節(jié)點開始帶入203-1設置的操作方式,將其遞歸進行取反操作,直到原子節(jié)點位置。整個語法樹取反就完成了。三、驗證過程具體為:將規(guī)范語法樹的根節(jié)點傳入語法樹遞歸模塊,進行后序遞歸遍歷,遍歷到葉子節(jié)點時調(diào)用驗證算法函數(shù),進行驗證。步驟301:對每棵樹的根節(jié)點,用一個數(shù)組存放滿足當前子規(guī)范的狀態(tài)集,存放的數(shù)字為排序后的狀態(tài)下標,如“2”代表狀態(tài)S2滿足當前規(guī)范。若該節(jié)點為雙目操作符,如AND,左右子樹的節(jié)點代表了該操作符的左右兩個操作數(shù),若為單目操作符如EX,左子樹為它的單操作數(shù),右子樹為空。從跟節(jié)點開始后序遍歷直到左右孩子都為空的節(jié)點為止,即葉子節(jié)點,開始計算,從最底層的子規(guī)范開始,逐漸驗證到最高層的原始規(guī)范。每次遞歸回溯到操作符時,調(diào)用預設置的驗證算法,進行驗證計算。步驟302:遞歸過程傳遞過來的節(jié)點,通過判斷節(jié)點的TYPE屬性,可以知道是什么操作符,根據(jù)TYPE來調(diào)用所需操作,同時決定左右子樹的調(diào)用情況,在操作函數(shù)中進行計算,并將該步的計算結(jié)果存放在節(jié)點的結(jié)果(result)向量中,供上一層遞歸節(jié)點所使用。步驟303:重復302所有遞歸操作,遞歸完成后,將最終結(jié)果向量傳給下一步輸出結(jié)果模塊。四、輸出驗證結(jié)果包括如下步驟:步驟401:對驗證結(jié)果進行判斷,根據(jù)判斷結(jié)果進行不同的處理:判斷初始狀態(tài)是否在最終結(jié)果中,若不在,則說明原規(guī)范是真,輸出結(jié)果;若在最終結(jié)果中,則說明初始狀態(tài)是滿足反規(guī)范的,原規(guī)范不滿足,為假。此時進入步驟402,進行反例路徑找尋。步驟402:,從根節(jié)點開始遍歷,查找驗證過程中每一步所保存的狀態(tài)集。第一步在根節(jié)點選擇初始狀態(tài),再往下走。每往下一個節(jié)點,根據(jù)節(jié)點的操作符類型,找出滿足的狀態(tài),并輸出,每條路徑走到布爾操作符為止。最后,輸出的查找路徑,就是不滿足原規(guī)范的反例。對比驗證過程的數(shù)據(jù)結(jié)構(gòu),本發(fā)明舍棄了用OBDD數(shù)據(jù)結(jié)構(gòu)建模,使得每步驗證結(jié)果不直觀不可見的建模方法。而采用了用鄰接矩陣建模,使得每個驗證步驟能顯式而直觀的表示出運算結(jié)果。同時,由于本發(fā)明的驗證過程是一個顯式的可見的過程,所以每個過程的計算結(jié)果可以直觀的表出,并且可以存入每個操作符在語法樹中的節(jié)點里,使得在進行查找反例路徑時,有所根據(jù),更加方便、簡潔。實施例為了更加清晰明白的說明上述驗證過程,以下基于一個示例進行描述。待測系統(tǒng)為一個簡易的微波爐模型,其包括4個原子命題(Start,Close,Heat,Error),對應了啟動,關門,加熱,報錯四個狀態(tài)。圖5給出了各個有效狀態(tài)操作和遷移關系?,F(xiàn)在給出規(guī)范公式AG(Start→AFHeat)來進行驗證。首先根據(jù)其公式的等價關系,可以得到如下等價公式根據(jù)本發(fā)明的驗證方法,設置4個原子命題的編碼序列為(Start,Close,Heat,Error),用“1”代表邏輯“真”,用“0”代表邏輯“假”,從而得到狀態(tài)編號:S0,S1,S2,...,S15,建立一個16*16的方陣,同時根據(jù)圖5中的轉(zhuǎn)移關系,可得到如下鄰接矩陣Am:去掉其無效狀態(tài)后對于首先驗證其原子節(jié)點,根據(jù)公式(1)和去除無效狀態(tài)時兩個矩陣的映射關系,可得狀態(tài)編號s(Start)={1,4,5,6};s(Heat)={3,6};再根據(jù)布爾邏輯(非)計算方法,得出將狀態(tài)編號集{0,1,2,4,5}與矩陣Am,帶入公式(5)可得再根據(jù)布爾邏輯∧計算方法,得出再將狀態(tài)編號集{1,4}與矩陣Am,帶入公式(3)可得再根據(jù)布爾邏輯(非)計算方法,得出因為初始狀態(tài)S0不在最終的驗證集里面,則說明原規(guī)范是真,輸出結(jié)果。當前第1頁1 2 3 
當前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
寻甸| 铅山县| 基隆市| 永城市| 逊克县| 喀喇沁旗| 甘泉县| 磐安县| 福海县| 文水县| 闽侯县| 界首市| 九江县| 鸡西市| 绿春县| 永年县| 合山市| 屏南县| 康保县| 贵阳市| 卓资县| 北安市| 昭平县| 临城县| 句容市| 澳门| 荔波县| 洪雅县| 乌拉特前旗| 奉新县| 本溪市| 读书| 横山县| 边坝县| 任丘市| 重庆市| 漯河市| 南昌县| 满洲里市| 赞皇县| 交口县|