形式化された定理の証明では...
適当な tactics を用いて論理記号を外し,atomic formula に分解する作業にそれほどの困難はありません.問題は,そのあと,定数,変数,関数,述語記号などからなる式を「計算」により証明する部分にあります.
実際,各種の「検証」で高名な HOL4 も他の証明系と同じく,有理数以降の代数処理はかなり窮屈で,例えば
val POW_3 = METIS_PROVE [pow,POW_1,REAL_MUL_ASSOC,ARITH_CONV``3=SUC(SUC 1)``]``!x:real. x pow 3=x*x*x``; METIS_PROVE [ SIMP_CONV (real_ss ++ REAL_ARITH_ss) [POW_3] ``!a b c:real. (a pow 3+b pow 3+c pow 3=3*a*b*c)<=>((a+b+c)*(a*a+b*b+c*c-a*b-b*c-c*a)=0)``, SIMP_CONV (real_ss ++ REAL_ARITH_ss) [REAL_ENTIRE] ``!a b c:real. ((a+b+c)*(a*a+b*b+c*c-a*b-b*c-c*a)=0)<=>(a+b+c=0:real)\/((a-b)*(a-b)+(b-c)*(b-c)+(c-a)*(c-a)=0)``, METIS_PROVE [REAL_LE_SQUARE, REAL_LE_LT, REAL_POS_NZ, REAL_LET_ADD, REAL_LTE_ADD, REAL_LT_ADD, REAL_LE_ADD, REAL_ADD_RID, REAL_SUB_0, REAL_MUL_RZERO, REAL_ENTIRE] ``!a b c:real. ((a-b)*(a-b)+(b-c)*(b-c)+(c-a)*(c-a)=0)<=>(a=b)/\(b=c)/\(c=a)`` ]``!a b c:real. (a+b+c=0)\/(a=b)/\(b=c)/\(c=a) <=> (a pow 3+b pow 3+c pow 3=3*a*b*c)``; r[+0+7]+0+0+1+2+2+0+1+0+5# > val POW_3 = [] |- ∀x. x pow 3 = x * x * x : thm - metis: r[+0+20]+1+1+0+0+0+0+0+0+0+0+0+0+0# r[+0+18]+0+0+0+0+0+0+0+0+0+0+0+0+0+2+0+2+0+2+3+3+2+2+1+3+0+2+1+2+1+1+1+1# r[+0+18]+0+0+0+0+0+0+0+0+0+0+0+0+0+0+2+0+2+2+4+3+2+2+1+1+1+2+0+0+1+1# r[+0+18]+0+0+0+0+0+0+0+0+0+0+0+0+0+2+0+2+2+0+3+3+2+2+1+1# metis: r[+0+13]+0+0+0+0+0+0+0+0+4+14+18r+9+18+6+17r+7+15r+15+1+5+15r+15+4+0+0+8+0+15r+1# r[+0+14]+1+1+0+0+0+0+0+0+4+6+16+19r+12+14+15r+15r+2# r[+0+12]+0+0+0+0+0+0+0+4+14+6+15r+23+1# > val it = [] |- ∀a b c. (a + b + c = 0) ∨ (a = b) ∧ (b = c) ∧ (c = a) ⇔ (a pow 3 + b pow 3 + c pow 3 = 3 * a * b * c) : thm
のように手間が掛かります.
ところが,HOL Light は,何と申しますか証明系にあるまじき強力な代数proverを備えおり,同じ定理もご覧の通りです.
# MESON [REAL_SOS`a pow 3+b pow 3+c pow 3= &3*a*b*c <=> a+b+c= &0 \/ (a-b) pow 2+(b-c) pow 2+(c-a) pow 2= &0`; REAL_SOS`(a-b) pow 2+(b-c) pow 2+(c-a) pow 2= &0<=>a=b /\ b=c /\ c=a`] `!a b c:real. a+b+c= &0 \/ a=b /\ b=c /\ c=a <=> a pow 3+b pow 3+c pow 3= &3*a*b*c` ;; Searching with depth limit 0 Searching with depth limit 1 Searching with depth limit 2 Translating proof certificate to HOL Searching with depth limit 0 Searching with depth limit 1 Searching with depth limit 2 Translating proof certificate to HOL Searching with depth limit 0 Searching with depth limit 1 Searching with depth limit 2 Translating proof certificate to HOL Searching with depth limit 0 Searching with depth limit 1 Searching with depth limit 2 Translating proof certificate to HOL Searching with depth limit 0 Searching with depth limit 1 Searching with depth limit 2 Translating proof certificate to HOL Searching with depth limit 0 Searching with depth limit 1 Searching with depth limit 2 Translating proof certificate to HOL Searching with depth limit 0 Searching with depth limit 1 Searching with depth limit 2 Searching with depth limit 3 Translating proof certificate to HOL Searching with depth limit 0 Searching with depth limit 1 Searching with depth limit 2 Searching with depth limit 3 Translating proof certificate to HOL Searching with depth limit 0 Searching with depth limit 1 Searching with depth limit 2 Searching with depth limit 3 Translating proof certificate to HOL Searching with depth limit 0 Searching with depth limit 1 Searching with depth limit 2 Searching with depth limit 3 Translating proof certificate to HOL Searching with depth limit 0 Searching with depth limit 1 Searching with depth limit 2 Searching with depth limit 3 Translating proof certificate to HOL Searching with depth limit 0 Searching with depth limit 1 Searching with depth limit 2 Searching with depth limit 3 Translating proof certificate to HOL 0..0..1..solved at 5 0..0..1..7..30..119..solved at 183 0..0..2..10..42..solved at 93 0..0..2..10..42..solved at 76 0..0..2..10..42..solved at 59 val it : thm = |- !a b c. a + b + c = &0 \/ a = b /\ b = c /\ c = a <=> a pow 3 + b pow 3 + c pow 3 = &3 * a * b * c