一種基于形式化驗(yàn)證的同步數(shù)據(jù)流程序的可信排序方法
【專利摘要】本發(fā)明公開一種基于形式化驗(yàn)證的同步數(shù)據(jù)流程序的可信排序方法,包括Lustre并行程序和由Lustre并行程序排序后得到的串行C程序,通過對(duì)任意兩個(gè)滿足拓?fù)渑判虻腖ustre程序,證明其拓?fù)渑判蚯暗腖ustre程序和拓?fù)渑判蚝蟮腖ustre程序執(zhí)行語(yǔ)義等價(jià),得到排序后的C程序與排序前的Lustre程序在語(yǔ)義上執(zhí)行等價(jià)。本發(fā)明以“入度為零的頂點(diǎn)拓?fù)渑判蛩惴ā睘槔碚摶A(chǔ),基于形式化語(yǔ)言進(jìn)行開發(fā)實(shí)現(xiàn),通過對(duì)任意兩個(gè)滿足拓?fù)渑判蛐再|(zhì)的程序在串行語(yǔ)義中執(zhí)行是等價(jià)的證明,在形式化驗(yàn)證時(shí)考慮了并行語(yǔ)言在轉(zhuǎn)化成串行語(yǔ)言過程中的所有情況,并分別對(duì)每種情況都做了證明,得到排序后的程序滿足拓?fù)渑判虻男再|(zhì),從而保證方案的正確性,提高整個(gè)軟件系統(tǒng)的安全性和可靠性。
【專利說(shuō)明】一種基于形式化驗(yàn)證的同步數(shù)據(jù)流程序的可信排序方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)安全領(lǐng)域,具體涉及針對(duì)編譯器的安全性而利用形式化驗(yàn)證的同步數(shù)據(jù)流程序的可信排序方法。
【背景技術(shù)】
[0002]隨著計(jì)算機(jī)技術(shù)越來(lái)越多地應(yīng)用于航空航天、核電、高速鐵路等安全關(guān)鍵系統(tǒng)(SCS, Safety-Critical System),對(duì)其系統(tǒng)中核心軟件的安全性要求也越來(lái)越高。安全關(guān)鍵系統(tǒng)中的絲毫錯(cuò)誤都可能引發(fā)巨大的災(zāi)難,如何為安全關(guān)鍵系統(tǒng)構(gòu)造一個(gè)基礎(chǔ)的安全軟件環(huán)境是需要面對(duì)的首要問題,尤其是對(duì)操作系統(tǒng)、編譯器等基礎(chǔ)核心軟件。
[0003]編譯器的可信性很早就受到學(xué)術(shù)界和工業(yè)界的重視,從McCarthy和Painter的開創(chuàng)性工作開始,如何提高編譯器正確性和可靠性一直是計(jì)算機(jī)科學(xué)研究領(lǐng)域的熱點(diǎn);但一致進(jìn)展緩慢,在工業(yè)界的應(yīng)用有限。最有突破性進(jìn)展的是Xavier Leroy等人基于Coq輔助定理證明工具研究開發(fā)的Compcert編譯器,它是一個(gè)完整的使用形式化方法證明了產(chǎn)生的可執(zhí)行代碼的行為與源程序的語(yǔ)義完全保持的C編譯器,得到了業(yè)界的廣泛認(rèn)可。
[0004]我國(guó)經(jīng)濟(jì)高速發(fā)展,對(duì)能源的需要日益高漲,尤其是對(duì)新能源的需求。因此核電站在我國(guó)將迎來(lái)快速發(fā)展。Lustre是一種同步數(shù)據(jù)流語(yǔ)言,主要用于核電、航空航天等高可信要求的工業(yè)自動(dòng)化領(lǐng)域中。
[0005]需要將Lustre程序轉(zhuǎn)換成相應(yīng)環(huán)境下的語(yǔ)言,如將Lustre轉(zhuǎn)換為C代碼。這個(gè)轉(zhuǎn)換目前大多使用國(guó)際著名工具SCADE來(lái)將Lustre編譯成C代碼。Scade是目前為止最成熟的Lustre編譯器,它已通過了多個(gè)工業(yè)標(biāo)準(zhǔn)的安全級(jí)認(rèn)證,其代碼生成器KCG獲得了民用航空軟件生產(chǎn)許可。在因果分析時(shí)它只在靜態(tài)語(yǔ)義層面進(jìn)行檢查,通過模塊化和獨(dú)立編譯以及更嚴(yán)格地定義依賴關(guān)系來(lái)解決因果分析的問題。它禁止node的輸入依賴于node的輸出,從而使每個(gè)node能夠單獨(dú)編譯。SCADE工具雖然已通過多個(gè)安全級(jí)工業(yè)標(biāo)準(zhǔn)的認(rèn)證,但它是通過大規(guī)模測(cè)試來(lái)保證其安全性,未經(jīng)過嚴(yán)格的形式化驗(yàn)證。由于測(cè)試無(wú)法做到完全覆蓋,故未經(jīng)驗(yàn)證的編譯器中隱藏的誤編譯錯(cuò)誤很難被發(fā)現(xiàn)。另一方面,SCADE是商業(yè)公司推出的軟件產(chǎn)品,相關(guān)技術(shù)細(xì)節(jié)沒有公開,很難了解到為提升軟件的可靠性和可信性在哪些方面做了技術(shù)性工作。
[0006]此外在對(duì)編譯器的驗(yàn)證方面,目前還有如下一些方式=CompCert項(xiàng)目實(shí)現(xiàn)了 C的子集Clight到匯編的翻譯過程,并用交互式定理證明器證明每個(gè)步驟在對(duì)應(yīng)的語(yǔ)義中執(zhí)行等價(jià)。相比普通的驗(yàn)證技術(shù),形式化驗(yàn)證能在數(shù)學(xué)的層面對(duì)軟件的邏輯進(jìn)行抽象和證明,因此具備更高的安全性,Compcert項(xiàng)目雖然利用形式化驗(yàn)證技術(shù)對(duì)部分子模塊進(jìn)行驗(yàn)證,但是其實(shí)現(xiàn)的是串行語(yǔ)言(C語(yǔ)言)到串行語(yǔ)言(匯編語(yǔ)言)的轉(zhuǎn)換,并不適用于并行語(yǔ)言(Lustre語(yǔ)言)到串行語(yǔ)言(C語(yǔ)言)的轉(zhuǎn)換。Mike Gemunde等通過模型檢查的方式對(duì)Lustre程序進(jìn)行因果分析。他建立了一個(gè)形式化的因果分析定義并能夠保守迅速地檢查系統(tǒng)中的因果循環(huán)。模型檢查的方式相對(duì)于基于語(yǔ)義的形式化驗(yàn)證還是有局限性。A.Bertails等用形式化驗(yàn)證的方法完成了對(duì)Lustre程序的類型檢查和時(shí)鐘演算的驗(yàn)證,準(zhǔn)備開始因果分析工作和后續(xù)的翻譯工作,到目前為止還未完成。他們雖然準(zhǔn)備通過形式化驗(yàn)證的方式來(lái)進(jìn)行因果分析,但驗(yàn)證還是停留在語(yǔ)法層面,并未在語(yǔ)義執(zhí)行的層面進(jìn)行驗(yàn)證,而且后續(xù)到C的翻譯工作也還沒有完成。
[0007]為有效提高編譯器的可靠性,系統(tǒng)中每個(gè)環(huán)節(jié)的可靠性都不容忽視,將同步數(shù)據(jù)流語(yǔ)言的程序轉(zhuǎn)換為串行C語(yǔ)言程序是L2C編譯器的重要組成部分。這一功能是為了保證兩個(gè)程序執(zhí)行的功能是相同的,保證程序的正確邏輯。
【發(fā)明內(nèi)容】
[0008]為解決現(xiàn)有技術(shù)中在對(duì)Lustre程序轉(zhuǎn)換為C語(yǔ)言程序時(shí)無(wú)法驗(yàn)證編譯器安全性的問題,本發(fā)明提供一種形式化驗(yàn)證的同步數(shù)據(jù)流程序的可信排序方法。具體方案如下:一種基于形式化驗(yàn)證的同步數(shù)據(jù)流程序的可信排序方法,包括Lustre并行程序和由Lustre并行程序排序后得到的串行C程序,其特征在于,包括如下步驟:
[0009]步驟1、將源Lustre程序利用詞法語(yǔ)法分析工具進(jìn)行分析,得到該Lustre程序的抽象語(yǔ)法樹,利用基于形式化方法的驗(yàn)證工具Coq對(duì)所得抽象語(yǔ)法樹進(jìn)行類型分析和靜態(tài)語(yǔ)義檢查,得到符合well-typed條件的抽象語(yǔ)法樹Lustre-W ;
[0010]步驟2、對(duì)Lustre-W中所有變量的時(shí)鐘周期進(jìn)行歸一化處理,使所有變量的時(shí)鐘周期統(tǒng)一于標(biāo)準(zhǔn)周期;
[0011]步驟3、對(duì)歸一化后的Lustre-W進(jìn)行因果分析和拓?fù)渑判?、翻譯后生成串行C程序;
[0012]步驟4、對(duì)任意兩個(gè)`滿足拓?fù)渑判虻腖ustre程序,證明其拓?fù)渑判蚯暗腖ustre程序和拓?fù)渑判蚝蟮腖ustre程序執(zhí)行語(yǔ)義等價(jià),驗(yàn)證過程如下:
[0013](I)首先建立Lustre并行程序中存儲(chǔ)node名稱的全局環(huán)境和存儲(chǔ)各node函數(shù)執(zhí)行周期中變量的局部環(huán)境,同時(shí)確保全局環(huán)境中node的名稱不重復(fù)和局部環(huán)境中等式左值ID不為空;
[0014](2)建立一個(gè)與驗(yàn)證程序A的全局環(huán)境相同且與驗(yàn)證程序B的局部環(huán)境相同的驗(yàn)證程序C ;
[0015](3)利用驗(yàn)證程序A和驗(yàn)證程序C中node名一一對(duì)應(yīng)的方式,可得到兩者執(zhí)行后語(yǔ)義等價(jià)的結(jié)果;
[0016](4)以驗(yàn)證程序C為基礎(chǔ),以僅有一步為區(qū)別的方式細(xì)化出中間驗(yàn)證程序Cl、C2、C3……Cn,其中驗(yàn)證程序Cn與驗(yàn)證程序B僅有一步區(qū)別,對(duì)比兩個(gè)程序執(zhí)行后其局部環(huán)境的值可得到兩者語(yǔ)義執(zhí)行是否等價(jià)的結(jié)果,再依次反推直至得到驗(yàn)證程序C和驗(yàn)證程序B之間語(yǔ)義執(zhí)行是否等價(jià)的結(jié)論;
[0017](5)結(jié)合(3)和(4)的結(jié)果,得到拓?fù)渑判蚯暗腖ustre程序和拓?fù)渑判蚝蟮腖ustre程序執(zhí)行語(yǔ)義等價(jià)的結(jié)論;
[0018]步驟5、由此得到Lustre程序和其經(jīng)過因果分析和拓?fù)渑判蚝笊傻腃程序在執(zhí)行語(yǔ)義上是等價(jià)的證明。
[0019]優(yōu)選的:在步驟I的Coq靜態(tài)語(yǔ)義檢查中,通過分析node列表中不存在依賴環(huán)能夠證明node列表在拓?fù)渑判蚯昂笙嗷ナ峭粋€(gè)排列,其證明過程包括如下步驟:
[0020](I)首先證明拓?fù)渑判蚯昂蟮腖ustre程序中“入度為零”的node名都是同一個(gè)排列;
[0021](2)然后證明拓?fù)渑判蚯昂蟮腖ustre程序中具有依賴關(guān)系的node名都是同一個(gè)排列;
[0022](3)最后證明將上述兩種結(jié)構(gòu)合并到一起后的node列表的全局環(huán)境和局部環(huán)境與拓?fù)渑判蚯跋嗷ナ且粋€(gè)排列。
[0023]優(yōu)選的:所述步驟2中的歸一化處理是指,將所有不同長(zhǎng)度的時(shí)鐘周期按其中最快的時(shí)鐘周期為單位進(jìn)行拆分,然后按進(jìn)行周期劃分所有的變量。
[0024]優(yōu)選的:所述步驟4的(4)中,所述驗(yàn)證程序Cn與驗(yàn)證程序B僅有一步區(qū)別包括四種類型:
[0025](I)這個(gè)區(qū)別點(diǎn)是主node ;
[0026](2)這個(gè)區(qū)別點(diǎn)不是主node ;
[0027](3)區(qū)別點(diǎn)是主node時(shí),執(zhí)行的兩個(gè)主node不相等,即兩個(gè)主節(jié)點(diǎn)的等式列表互相是一個(gè)排序,但其他信息相同;
[0028](4)區(qū)別點(diǎn)是主node時(shí),兩個(gè)主node所處的主節(jié)點(diǎn)位置不同,且兩個(gè)主節(jié)點(diǎn)的全局環(huán)境也不同;
[0029]針對(duì)上述區(qū)別,再次對(duì)其化簡(jiǎn),使最終的區(qū)別點(diǎn)統(tǒng)一為:不同主node下兩個(gè)不相依賴的等式。
[0030]優(yōu)選的:中兩個(gè)不依賴的等式根據(jù)其中是否有call表達(dá)式,分為下面三種情況分別進(jìn)行證明:
[0031](I)兩個(gè)等式中都沒有call表達(dá)式;
[0032](2)兩個(gè)等式中有一個(gè)有call表達(dá)式;
[0033]( 3 )兩個(gè)等式都有cal I表達(dá)式。
[0034]本發(fā)明以“入度為零的頂點(diǎn)拓?fù)渑判蛩惴ā睘槔碚摶A(chǔ),基于形式化語(yǔ)言進(jìn)行開發(fā)實(shí)現(xiàn),最后用形式化驗(yàn)證的方法對(duì)系統(tǒng)設(shè)計(jì)模型進(jìn)行驗(yàn)證。形式化驗(yàn)證能在數(shù)學(xué)的層面對(duì)軟件的邏輯進(jìn)行抽象和證明,因此具備更高的安全性。本發(fā)明通過對(duì)任意兩個(gè)滿足拓?fù)渑判蛐再|(zhì)的程序在串行語(yǔ)義中執(zhí)行是等價(jià)的證明,在形式化驗(yàn)證時(shí)考慮了并行語(yǔ)言在轉(zhuǎn)化成串行語(yǔ)言過程中的所有情況,并分別對(duì)每種情況都做了證明,得到排序后的程序滿足拓?fù)渑判虻男再|(zhì),從而保證方案的正確性,提高整個(gè)軟件系統(tǒng)的安全性和可靠性。
【專利附圖】
【附圖說(shuō)明】
[0035]圖1本發(fā)明的工作過程示意圖;
[0036]圖2本發(fā)明的證明過程流程圖;
[0037]圖3本發(fā)明中環(huán)境結(jié)構(gòu)示意圖;
[0038]圖4本發(fā)明中等式間依賴關(guān)系示意圖;
[0039]圖5本發(fā)明中元素和集合的示意圖;
[0040]圖6本發(fā)明中元素和集合的化簡(jiǎn)示意圖;
[0041]圖7本發(fā)明中元素和集合的另一化簡(jiǎn)示意圖;
[0042]圖8本發(fā)明中元素和集合的另一化簡(jiǎn)示意圖;
[0043]圖9本發(fā)明中元素和集合的另一化簡(jiǎn)示意圖;[0044]圖10本發(fā)明中元素和集合的另一化簡(jiǎn)示意圖;
[0045]圖11本發(fā)明中元素和集合的另一化簡(jiǎn)示意圖;
[0046]圖12本發(fā)明的拓?fù)渑判蚍纸庾C明示意圖;
[0047]圖13本發(fā)明的拓?fù)渑判蚍纸庾C明另一示意圖;
[0048]圖14本發(fā)明的拓?fù)渑判蚍纸庾C明另一示意圖;
[0049]圖15本發(fā)明的拓?fù)渑判蚍纸庾C明另一示意圖;
[0050]圖16本發(fā)明的拓?fù)渑判蚍纸庾C明另一示意圖。
【具體實(shí)施方式】
[0051]由于Lustre是同步數(shù)據(jù)流語(yǔ)言,是在無(wú)限周期中進(jìn)行計(jì)算,具有復(fù)雜多變的時(shí)鐘演算和計(jì)算歷史流數(shù)據(jù)的時(shí)態(tài)運(yùn)算,其程序與C程序差異太大,直接將其翻譯到C,轉(zhuǎn)換過程十分復(fù)雜,驗(yàn)證起來(lái)也會(huì)非常困難,本發(fā)明將整個(gè)轉(zhuǎn)換過程分為多步執(zhí)行,每一步只做一個(gè)類型的化簡(jiǎn),并將其化簡(jiǎn)的結(jié)果稱之為中間語(yǔ)言,保持每步之間的相互獨(dú)立,便于協(xié)作開發(fā)和提高效率,同時(shí)也簡(jiǎn)化了形式化驗(yàn)證的難度。
[0052]如圖1所示,101、本發(fā)明的基于形式化驗(yàn)證的同步數(shù)據(jù)流程序的可信排序方法,包括Lustre并行程序和由Lustre并行程序排序后得到的串行C程序;
[0053]如圖2所示,102、將源Lustre程序利用詞法語(yǔ)法分析工具進(jìn)行分析,得到該Lustre程序的抽象語(yǔ)法樹,利用基于形式化方法的驗(yàn)證工具Coq對(duì)所得抽象語(yǔ)法樹進(jìn)行類型分析和靜態(tài)語(yǔ)義檢查,得到符合well-typed條件的抽象語(yǔ)法樹Lustre-W ;
[0054]本發(fā)明中對(duì)于Lustre語(yǔ)言的詞法語(yǔ)法分析采用行業(yè)認(rèn)可的詞法語(yǔ)法分析工具Flex和Bison對(duì)Lustre語(yǔ)言進(jìn)行分析,得到Lustre語(yǔ)言的抽象語(yǔ)法樹,由于該步驟相對(duì)簡(jiǎn)單且在現(xiàn)有技術(shù)中已經(jīng)有嚴(yán)格的規(guī)則進(jìn)行約束,故這里沒有再進(jìn)行形式化驗(yàn)證。
[0055]Lustre程序的抽象語(yǔ)法樹分為:programS、nodeS、equations和exprS四個(gè)層次;分別對(duì)應(yīng)程序、節(jié)點(diǎn)、等式和表達(dá)式;其中
[0056]programs表示整個(gè)程序,由類型定義列表、nodeS列表和主node的id三部分組成。程序執(zhí)行時(shí)會(huì)通過主node的id定位nodeS列表中的主node,并執(zhí)行主node。
[0057]nodeS為L(zhǎng)ustre程序的程序執(zhí)行節(jié)點(diǎn),相當(dāng)于C程序的函數(shù)。nodeS主要由node名、輸入?yún)?shù)、輸出參數(shù)、局部變量和equations列表五部分構(gòu)成。
[0058]equations為等式,由左值列表Ihsl和表達(dá)式exprS兩部分組成。每個(gè)等式都相當(dāng)于是給一個(gè)或者多個(gè)左值賦值,每個(gè)變量最多被賦值一次。
[0059]exprS為表達(dá)式,分為:表達(dá)式列表、call表達(dá)式、一兀操作表達(dá)式、二兀操作表達(dá)式、時(shí)態(tài)操作表達(dá)式、原子表達(dá)式和普通表達(dá)式。為簡(jiǎn)化排序的證明,做排序前已經(jīng)對(duì)時(shí)態(tài)表達(dá)式進(jìn)行了處理,使得時(shí)態(tài)表達(dá)式的子表達(dá)式只能是原子表達(dá)式。
[0060]Lustre程序的抽象語(yǔ)法樹構(gòu)建在形式化驗(yàn)證和開發(fā)工具Coq中,現(xiàn)有技術(shù)中已經(jīng)用形式化語(yǔ)言實(shí)現(xiàn)了對(duì)其形式化的描述,在此不再贅述。
[0061]對(duì)生成的語(yǔ)法樹,在Coq中進(jìn)行靜態(tài)檢查,檢查的內(nèi)容分為兩部分,一是檢查語(yǔ)法樹中的類型,以得到Well-typed的抽象語(yǔ)法樹Lustre-W,并證明整個(gè)過程;二是檢查后續(xù)翻譯證明中所需的性質(zhì)是否得到滿足,并證明這些性質(zhì)。
[0062]Coq靜態(tài)語(yǔ)義檢查中通過分析node列表中不存在依賴環(huán),證明node列表在拓?fù)渑判蚯昂笙嗷ナ峭粋€(gè)排列,其證明過程包括如下步驟:
[0063](I)首先證明拓?fù)渑判蚯昂蟮腖ustre程序中“入度為零”的node名都是同一個(gè)排列;
[0064](2)然后證明拓?fù)渑判蚯昂蟮腖ustre程序中具有依賴關(guān)系的node名都是同一個(gè)排列;
[0065](3)最后證明將上述兩種結(jié)構(gòu)合并到一起后的node列表的全局環(huán)境和局部環(huán)境與拓?fù)渑判蚯跋嗷ナ且粋€(gè)排列。
[0066]具體的實(shí)例如下:
[0067]
Theorem toposort cqs pcrmutalion:1oralI (cqs: list equations),
Permutation cqs (toposort_cqs cqs).Theorem loposorl nodcs pcrmulalion: forall (1: list nodeS),
Permutation I (loposort_nodcs I).[0068]這一部分主要利用Coq庫(kù)中List數(shù)據(jù)結(jié)構(gòu)有關(guān)Permutation和map的基本性質(zhì)來(lái)證明,因?yàn)榕判虻倪^程是多個(gè)步驟的嵌套,直接進(jìn)行歸納證明比較難,而利用List的性質(zhì)可以化簡(jiǎn)排序的步驟,簡(jiǎn)化證明。證明過程惟一的難點(diǎn)在于證明對(duì)依賴關(guān)系的排序前后是個(gè)排列,因?yàn)椴荒苤苯訉?duì)依賴關(guān)系列表作歸納來(lái)證明,需要先對(duì)輔助參數(shù)Ien做elim歸納,再對(duì)依賴關(guān)系列表1作歸納。
[0069]Theorem toposort_depList_permutation:forall(len:nat)(1: list dependT),
[0070]length K=Ien —
[0071]Permutation I(toposort_depList Ien I).[0072]其中,Permutation I是Coq庫(kù)中List數(shù)據(jù)庫(kù)提供的相關(guān)定義。
[0073]103、對(duì)Lustre-W中所有變量的時(shí)鐘周期進(jìn)行歸一化處理,使所有變量的時(shí)鐘周期統(tǒng)一于標(biāo)準(zhǔn)周期;
[0074]由于Lustre語(yǔ)言是同步數(shù)據(jù)流語(yǔ)言,程序在無(wú)窮周期中執(zhí)行。每個(gè)變量都有一個(gè)時(shí)鐘,在無(wú)窮周期中為一個(gè)無(wú)限時(shí)鐘流。時(shí)鐘在每個(gè)周期中的值為VtrueL或VfalseL,變量在時(shí)鐘的值為VtrueL時(shí)才有值。這種復(fù)雜的時(shí)鐘如果帶入后續(xù)驗(yàn)證步驟,不但使后續(xù)的語(yǔ)義變得非常復(fù)雜,還將使后續(xù)證明難度增大。本發(fā)明先將攜帶普通時(shí)鐘的Lustre-W程序經(jīng)過翻譯轉(zhuǎn)換成只攜帶全局基本時(shí)鐘(每個(gè)周期時(shí)鐘都為VtrueL)的Lustre-K程序,以有效簡(jiǎn)化后續(xù)的翻譯和驗(yàn)證工作。其具體作法是,根據(jù)時(shí)鐘的長(zhǎng)度I秒、2秒、3秒……,最終
以基本時(shí)鐘為標(biāo)準(zhǔn),一般是最快的時(shí)鐘作為標(biāo)準(zhǔn),如以I秒為標(biāo)準(zhǔn),而2秒、3秒......則被分
成相應(yīng)的多個(gè)1秒,經(jīng)過化簡(jiǎn)后,全局時(shí)鐘每個(gè)周期都是VtureL,程序中每個(gè)周期都進(jìn)行運(yùn)算,因此時(shí)鐘歸一化后的程序已不需要時(shí)鐘的概念,可大大簡(jiǎn)化后續(xù)證明的難度。
[0075]104、對(duì)歸一化后的Lustre-W進(jìn)行因果分析和拓?fù)渑判?、翻譯后生成串行C程序;
[0076]Lustre程序是并發(fā)執(zhí)行的,所以將其翻譯到C程序之前先要對(duì)wel 1-typedLustre-W進(jìn)行因果分析和拓?fù)渑判颍詫⑵浯谢?,最后再?duì)整個(gè)過程進(jìn)行可信的形式化證明。拓?fù)渑判虻倪^程是指在任意兩個(gè)滿足拓?fù)渑判虻某绦驁?zhí)行等價(jià)。而C語(yǔ)言需要的是一個(gè)經(jīng)過分析變量之間的依賴關(guān)系的串行程序,通過對(duì)Lustre程序的中各node之間的依賴關(guān)系分析,根據(jù)設(shè)定的標(biāo)準(zhǔn),按不同node之間依賴關(guān)系的大小進(jìn)行排序,其中入度為零的無(wú)依賴關(guān)系的node放置在程序的前面。在符合拓?fù)渑判蜿P(guān)系定義的情況下,無(wú)依賴關(guān)系的node列表滿足拓?fù)渑判蜿P(guān)系;如果一個(gè)node的依賴關(guān)系不依賴自身以及后續(xù)所有的依賴關(guān)系列表,且后續(xù)的依賴關(guān)系列表滿足拓?fù)渑判蜿P(guān)系,那么這個(gè)node和具有依賴關(guān)系的node列表之間也滿足拓?fù)渑判虻年P(guān)系。
[0077]在證明過程中,先證明經(jīng)過因果分析檢查的程序的依賴關(guān)系列表中不存在環(huán),再證明無(wú)環(huán)的依賴關(guān)系列表滿足拓?fù)渑判虻亩x。如圖4所示,如果依賴關(guān)系Dl的右值的id列表存在于依賴關(guān)系D2的左值的id列表中,說(shuō)明Dl依賴D2,然后遞歸的定義拓?fù)渑判虻年P(guān)系。圖4中是否存在從依賴關(guān)系X到y(tǒng)的依賴路徑,如果X依賴于I中的第一個(gè)元素,I中的每一個(gè)元素又依賴于其后續(xù)的元素,I的最后一個(gè)元素又依賴y,則存在依賴路徑;只要整條路徑中有一個(gè)元素不依賴于其后續(xù)的元素,則不存在依賴路徑。依賴路徑主要是用于表示拓?fù)潢P(guān)系圖中的一條路徑,存在路徑,就是在圖中從X到I有通路I。相應(yīng)程序代碼如下:
[0078]
【權(quán)利要求】
1.一種基于形式化驗(yàn)證的同步數(shù)據(jù)流程序的可信排序方法,包括Lustre并行程序和由Lustre并行程序排序后得到的串行C程序,其特征在于,包括如下步驟: 步驟1、將源Lustre程序利用詞法語(yǔ)法分析工具進(jìn)行分析,得到該Lustre程序的抽象語(yǔ)法樹,利用基于形式化方法的驗(yàn)證工具Coq對(duì)所得抽象語(yǔ)法樹進(jìn)行類型分析和靜態(tài)語(yǔ)義檢查,得到符合well-typed條件的抽象語(yǔ)法樹Lustre-W ; 步驟2、對(duì)Lustre-W中所有變量的時(shí)鐘周期進(jìn)行歸一化處理,使所有變量的時(shí)鐘周期統(tǒng)一于標(biāo)準(zhǔn)周期; 步驟3、對(duì)歸一化后的Lustre-W進(jìn)行因果分析和拓?fù)渑判?、翻譯后生成串行C程序; 步驟4、對(duì)任意兩個(gè)滿足拓?fù)渑判虻腖ustre程序,證明其拓?fù)渑判蚯暗腖ustre程序和拓?fù)渑判蚝蟮腖ustre程序執(zhí)行語(yǔ)義等價(jià),驗(yàn)證過程如下: (1)首先建立Lustre并行程序中存儲(chǔ)node名稱的全局環(huán)境和存儲(chǔ)各node函數(shù)執(zhí)行周期中變量的局部環(huán)境,同時(shí)確保全局環(huán)境中node的名稱不重復(fù)和局部環(huán)境中等式左值ID不為空; (2)建立一個(gè)與驗(yàn)證程序A的全局環(huán)境相同且與驗(yàn)證程序B的局部環(huán)境相同的驗(yàn)證程序C ; (3)利用驗(yàn)證程序A和驗(yàn)證程序C中node名一一對(duì)應(yīng)的方式,可得到兩者執(zhí)行后語(yǔ)義等價(jià)的結(jié)果; (4)以驗(yàn)證程序C為基 礎(chǔ),以僅有一步為區(qū)別的方式細(xì)化出中間驗(yàn)證程序Cl、C2、C3……Cn,其中驗(yàn)證程序Cn與驗(yàn)證程序B僅有一步區(qū)別,對(duì)比兩個(gè)程序執(zhí)行后其局部環(huán)境的值可得到兩者語(yǔ)義執(zhí)行是否等價(jià)的結(jié)果,再依次反推直至得到驗(yàn)證程序C和驗(yàn)證程序B之間語(yǔ)義執(zhí)行是否等價(jià)的結(jié)論; (5)結(jié)合(3)和(4)的結(jié)果,得到拓?fù)渑判蚯暗腖ustre程序和拓?fù)渑判蚝蟮腖ustre程序執(zhí)行語(yǔ)義等價(jià)的結(jié)論; 步驟5、由此得到Lustre程序和其經(jīng)過因果分析和拓?fù)渑判蚝笊傻腃程序在執(zhí)行語(yǔ)義上是等價(jià)的證明。
2.如權(quán)利要求1所述的可信排序方法,其特征在于,在步驟I的Coq靜態(tài)語(yǔ)義檢查中,通過分析node列表中不存在依賴環(huán)能夠證明node列表在拓?fù)渑判蚯昂笙嗷ナ峭粋€(gè)排列,其證明過程包括如下步驟: (O首先證明拓?fù)渑判蚯昂蟮腖ustre程序中“入度為零”的node名都是同一個(gè)排列; (2)然后證明拓?fù)渑判蚯昂蟮腖ustre程序中具有依賴關(guān)系的node名都是同一個(gè)排列; (3)最后證明將上述兩種結(jié)構(gòu)合并到一起后的node列表的全局環(huán)境和局部環(huán)境與拓?fù)渑判蚯跋嗷ナ且粋€(gè)排列。
3.如權(quán)利要求1所述的可信排序方法,其特征在于,所述步驟2中的歸一化處理是指,將所有不同長(zhǎng)度的時(shí)鐘周期按其中最快的時(shí)鐘周期為單位進(jìn)行拆分,然后按進(jìn)行周期劃分所有的變量。
4.如權(quán)利要求1所述的可信排序方法,其特征在于,所述步驟4的(4)中,所述驗(yàn)證程序Cn與驗(yàn)證程序B僅有一步區(qū)別包括四種類型: (I)這個(gè)區(qū)別點(diǎn)是主node;(2)這個(gè)區(qū)別點(diǎn)不是主node; (3)區(qū)別點(diǎn)是主node時(shí),執(zhí)行的兩個(gè)主node不相等,即兩個(gè)主節(jié)點(diǎn)的等式列表互相是一個(gè)排序,但其他信息相同; (4)區(qū)別點(diǎn)是主node時(shí),兩個(gè)主node所處的主節(jié)點(diǎn)位置不同,且兩個(gè)主節(jié)點(diǎn)的全局環(huán)境也不同; 針對(duì)上述區(qū)別,再次對(duì)其化簡(jiǎn),使最終的區(qū)別點(diǎn)統(tǒng)一為:不同主node下兩個(gè)不相依賴的等式。
5.如權(quán)利要求4所述的可信排序方法,其特征在于,兩個(gè)不依賴的等式根據(jù)其中是否有call表達(dá)式,分為下面三種情況分別進(jìn)行證明: (1)兩個(gè)等式中都沒有call表達(dá)式; (2)兩個(gè)等式中有一個(gè)有call表達(dá)式; (3)兩個(gè)等式都有 call表 達(dá)式。
【文檔編號(hào)】G06F21/12GK103646194SQ201310631729
【公開日】2014年3月19日 申請(qǐng)日期:2013年11月29日 優(yōu)先權(quán)日:2013年11月29日
【發(fā)明者】張雁, 楊晨, 任保華, 張智慧 申請(qǐng)人:北京廣利核系統(tǒng)工程有限公司, 中國(guó)廣核集團(tuán)有限公司