用計算機程序驗證數(shù)學證明合法性的方法
【技術領域】
[0001 ]本發(fā)明涉及計算機語言,數(shù)學證明,使用計算機程序?qū)?shù)學證明合法性的驗證。
【背景技術】
[0002]目前,數(shù)學證明日益復雜,導致要嚴格的對一個數(shù)學證明的合法性進行驗證非常困難,一些數(shù)學證明的驗證需要多個數(shù)學家用長達數(shù)月的時間進行驗證,才能驗證證明的正確性;數(shù)學公式采用圖形化的方式描述,使得數(shù)學證明的驗證非常困難,數(shù)學證明的表達也不嚴格;數(shù)學沒有一個完全形式化的,表達能力足夠的,對數(shù)學家足夠直觀的,能使用計算機進行分析的計算機化的數(shù)學語言。
【發(fā)明內(nèi)容】
[0003]本發(fā)明的目的是解決當前數(shù)學證明的不完全嚴格性,不利于使用計算機進行分析的弊端;本發(fā)明提出一種包含一階邏輯的計算機化的語言,使得數(shù)學證明能用這種語言表達,用計算機迅速的判斷出證明的合法性。
[0004]本發(fā)明的目是這樣實現(xiàn)的:先按照一階邏輯的形式化定義,用上下文無關語法明確定義構建常量、變量,聲明函詞、聲明謂詞、定義函詞、定義謂詞,構成合式公式、推理的語法、引入公理的語法;然后定義了什么是合法的證明,然后通過編譯器來檢驗證明是否合法。
[0005]依據(jù)以上語法,定義一個包含一階邏輯的計算機語言,把這個語言稱為a語言,a語言的語法定義如下。
[0006]a語言使用Unicode字符集,包含目前常用的數(shù)學符號,也包含目前世界上大多數(shù)國家的語言。
[0007]a語言使用“const regex;”來聲明常量,regex是一個正則表達式,regex中不能包含分號,表不與regex匹配的字符串都是常量。
[0008]a語言中的變量用命名字符串來表示,變量一般不用事先聲明,常量和已經(jīng)是其他類型的名稱的字符串不是變量名,命名字符串不能以數(shù)字開頭,命名字符串是不包含小括號、空格、分號、逗號等特殊字符的字符串。
[0009]a語言使用“op digit, string;”來聲明左綴函詞,digit是一個數(shù)字,string是一個命名字符串。
[0010]a語言使用“mid string;”來聲明中綴函詞,string是一個命名字符串,表示要聲明的函詞的元數(shù);中綴函詞都是二元的,中綴函詞都是左結合的;如“mid +;”聲明加法函
Τ.κ| ο
[0011]a語言使用“pair digit, stringl, stringl來聲明配對函詞,digit是一個數(shù)字,表示要聲明的函詞的元數(shù);stringl和string2是一個命名字符串;如我們可以使用“pair 2,〈,>;”來聲明集合論中常用的有序?qū)Α碭,y>函詞。
[0012I a語言使用“pred digit, string;”來聲明左綴謂詞,digit是一個數(shù)字,表示要聲明的謂詞的元數(shù);S tr i ng是一個命名字符串。
[0013]a語言使用“relat1n string;”來聲明中綴謂詞,string是一個命名字符串;中綴謂詞都是二元的,中綴謂詞都是左結合的。
[0014]聲明的函詞都是函詞,且只有聲明過的函詞才是函詞;聲明的謂詞都是謂詞,且只有聲明過的謂詞才是謂詞。
[0015]按下面方法遞歸構成項:如果χ1、χ2、...χη,是項,fn是η元左綴函詞,則fn(xl, x2,???xn)是項,xl,x2是項,op是中綴函詞,貝Ij xl op x2是項,如果left ,right是η元配對函詞,則left xl, χ2,…xn right是項,如果χ是項,則(χ)是項,常量和變量是項。
[0016]按下面方法遞歸構成原子公式:如果χ?,χ2...χη,是項,ρη是η元左綴謂詞,op是中綴謂詞,則pn(xl, x2, "in)是原子公式,xl op x2是原子公式,xl = x2是原子公式。
[0017]按下面方法遞歸構成公式:原子公式是公式,如果f是公式,χ是變量,則(f)、xf、xf、xf、π f是公式,是全稱量詞,是存在量詞,是存在唯一量詞;如f I和f 2是公式,則flf2、flA f2、flV f2、fl ^ f2是公式。
[0018]按下面方法構成公式序列:fl、f2、…fn是公式,n>=0,則“fl,f2,…色”是公式序列。
[0019]按下面構成推導:S1、S2是公式序列,則SIhS2是推導,SI # S2是推導;SI卜S2是表示SI中的公式都成立,則可以推導出S2中最少有一個成立;SI # S2表示SI # S2和S2 # S3同時成立;如果T是推導,N是命名字符串,則N’ T是推導,這里的N稱為推導的標號,例如:“rl’ χ nx^d h ny^d; ”是推導,rl’的作用是給T 一個臨時標號;如果T是推導,NI,Ν2...Νη是標號,或者推導名,或者推導,或者形如NUMBER’,其中NUMBER是正整數(shù),則“...Ν1,Ν2...Νη: Τ”是推導,這里NI,Ν2...Νη的作用是一個提示,表示是從NI,Ν2...Νη得到的Τ,形如的服]|^1?’字符串,如1’表示上一個推導,2’表示上上個推導,“:附』2"_他:”稱為推導的說明,推導去掉標號和說明后的剩余部分叫做有效部分;推導的說明部分給閱讀證明的人和檢查證明的計算機提示,本推導是怎么推理來的,能使計算機更快的檢查證明是否合法,也能避免計算機程序找不到當前推導的前提的情況出現(xiàn)。。
[0020]按下面方法給推導命名:S是推導,“name sname: S;”給推導命名,sname是一個命名字符串,是推導的名稱,名稱后必須跟冒號。
[0021 ] 按下面方法構成導入公理:SI推導或推導名,則“ax1m SI;”是公理導入規(guī)則,公理導入規(guī)則“import SI;”表示推導SI成為了公理,SI不能包含自由變量。
[0022]可以按下面方法對左綴函詞定義:如果11^2-^,111+1是變量,5是公式序列,?是公式,3的所有公式的自由變量包含在11,12"111,111+1中,S[~xlx2xn xn+1 F已證,貝Ijdefine funct1n(xl,χ2...χη) S 卜 xn+1 F定義了函詞funct1n,funct1n 是一個聲明過的η元左綴函詞。
[0023]可以按下面方法對配對函詞定義:如果11^2-^,111+1是變量,5是公式序列,?是公式,S的所有公式的自由變量包含在χ?,χ2...χη,xn+1中,S[~xlx2xn xn+1 F已證,貝Ijdefine R xl,x2…xn L S |- xn+1 F定義了配對函詞R和L,R和L是聲明過的配對η元函
Τ.κ| ο
[0024]可以按下面方法對中綴函詞定義:如果xl,χ2,χ3是變量,S是公式序列,F(xiàn)是公式,S的所有公式的自由變量包含在xl,χ2,χ3中,Shxlx2 x3 F已證,則define xl M x2 Sh x3 F定義了函詞M,M是聲明過的中綴函詞。
[0025]可以按下面方法對左綴函詞定義:如果χ?,χ2...χη是變量,f I是項,f I中的變量包含在 xl,χ2...χη 中,則 define funct1n(xl,χ2...χη) fl 定義了函詞 funct1n,funct1n 是一個聲明過的η元左綴函詞。
[0026]可以按下面方法對配對函詞定義:如果χ I,χ2是變量,fl是項,fl中的變量包含在xl,x2…xn中,貝Ijdefine R xl,x2…xn L fl定義了配對函詞R和L,R和L是聲明過的配對η元函詞。
[0027]可以按下面方法對中綴函詞定義:如果xl,χ2是變量,fl是項,fl的變量包含在xl,x2中,貝Ij define xl M x2 fl定義了函詞M,M是聲明過的中綴函詞。
[0028]可以按下面方法對左綴謂詞定義:如果χ1、χ2、...、χη是變量,fl是公式,fl中的自由變量包含在 xl,x2,…,xn 中,則 define predicate (xl,x2,…,xn) f l(xl,x2,…,xn)定義了謂詞predicate ,predicate是一個聲明過的n元左綴謂詞。
[0029]可以按下面方法對中綴謂詞定義:如果xl、x2是變量,fl是公式,fl中的變量包含在xl,x2中,貝Ijdefine xl R x2 fl(xl,x2)定義了謂詞R,R是聲明過的中綴謂詞。
[0030]a語言的一串推導Τ1、Τ2、...Τη,如果在Tn后添加字符“”,則構成一個證明,Tn成為被證明的推導。
[0031]上面是a語言的語法定義,下面說明什么證明是合法的,由一串推導Τ1、Τ2、…Tn構成的證明,如果符合以下規(guī)則,則證明是合法的。
[0032]關于自由變量和可代入的說明:公式為tA、tA或者tA,稱A為變量t的轄域;t在公式B中的出現(xiàn),如果是在t的轄域中,則稱為約束出現(xiàn),否則稱為自由出現(xiàn);如果一個變量t在B中的所有出現(xiàn)都是自由出現(xiàn),則稱t在B中自由;如果一個變量s的所有出現(xiàn)都不是在t的轄域里,則稱s在B中可替換t。
[0033]在下面關于合法證明規(guī)則的說明中,A、B、C、D指示公式,Γ、Δ、Π、Σ指示公式序列,也叫做上下文;x、y、s、t指示變量;m,n指示項;A[t]指示一個公式A,在其中變量t在公式A中自由;A[s/t]指示在A中s可代入t,并且把在A[t]中的t的所有出現(xiàn)代換為s的公式。
[0034]對一個證明是否合法,采用下面方法判斷。
[0035]a語言的一串推導Τ1、Τ2、...Τη;如果對任意的Tz ζ<=η,Τζ滿足如下的條件:
Tz的有效部分是公理;
或Tz的有效部分是以下等值邏輯公理:
1:Α 樸 Α,
2:Α 卄 π -\Α,
3:A^B 卄 nAVB,
4: π (AVB)卄 ~|ΑΛπΒ,
5: (A^B) Λ (B^A)樸 Α?Β,
6:Α-Β 樸(ΠΑ) - (ΠΒ),
7:Α?Β 卄 Β?Α,
8:AVB 卄 BVA,
9:(AVB)VC 樸 AV(BVC),
10:ΑΛΒ 樸 ΒΛΑ, Il-(AAB)AC 樸 ΑΛ(ΒΛ。),
12:χΑ 卄 ~ιχπΑ,
13:CA (AVB)=(CAA) V (CAB),
14:CV (AAB) = (CVA)A(CVB);
或Tz的有效部分是以下蘊含公理:
1:A h A,
2: |- ~|AVA,
3: xA 卜 xA,
4:xA 卜 A[e/x],
5:A[x] |- eA[e/x];
或?qū)z存在Ty; y<z滿足下面條件之一:
l:Ty的有效部分是A # B;Tz的有效部分是C # D,其中D是把C中的A替換為B得到的,并且A # B是邏輯等值公理,
2: Ty的有效部分是Γ Δ ;Tz的有效部分是Γ h A,
3: Ty的有效部分是Γ|~ xA;Tz的有效部分是Γ,A[t/x] AA[y/x]卜t = y,
4: Ty的有效部分是Γ h B;Tz的有效部分是Γ h A—B,
5:Ty的有效部分是Γ,Ah B;Tz的有效部分是Γ,ΠΑ,
6:Ty的有效部分是Γ ,A h Δ ;Tz的有效部分是Γ ,ΑΛΒ卜Δ,
7: Ty的有效部分是Γ ,BhA ;Tz的有效部分是Γ ,ΑΛΒ卜Δ,
8: Ty的有效部分是Γ hA,Δ ;Τζ的有效部分是Γ hAVB,Δ,
9: Ty的有效部分是Γ hB,Δ ;Tz的有效部分是Γ hAVB,Δ,
10:Ty的有效部分是r hA,Δ ;Tz的有效部分是Γ,nAh A ,
11: Ty的有效部分是Γ , Ah A ;Tz的有效部分是Γ卜ΠΑ, Δ ,
12: Ty的有效部分是Γ,A[t] h A ;Tz的有效部分是Γ,xA[x/t