(*标题:HOL/HOL.thy作者:托比亚斯·尼普科、马库斯·温泽尔和拉里·保尔森*)标头{*高阶逻辑的基础*}理论HOL_BASIC进口纯关键字“尝试”“solve_direct”“快速检查”“打印操作”“打印操作_maps”“打印激光”“打印管道规则”::diag和“quickcheck_params”::thy_decl开始分段{*原始逻辑*}子子集{*核心语法*}类类型default_sort类型设置{*Object_Logic.add_base_sort@{sort-type}*}算术“fun”::(类型,类型)类型自身::(类型)类型typedecl布尔判断Trueprop::“bool=>prop”(“(_)”5)公理化暗示:“[bool,bool]=>bool”(infixr“-->”25)和公式::“['a,'a]=>bool”(中缀“=”50)和::“('a=>bool)=>'a”常数真::bool错误::bool不是:“bool=>bool”(“~_”[40]40)conj::“[bool,bool]=>bool”(infixr“&”35)disj::“[bool,bool]=>bool”(infixr“|”30)全部::“('a=>bool)=>boo1”(binder“All”10)例如:“('a=>bool)=>boo1”(活页夹“Ex”10)示例1::“('a=>bool)=>boo1”(活页夹“EX!”10)子子集{*其他具体语法*}符号(输出)eq(中缀“=”50)缩写not_equal::“['a,'a]=>bool”(中缀“~=”50)其中“x~=y==~(x=y)”符号(输出)不相等(中缀“~=”50)符号(xsymbols)不是(“\_“[40]40)和conj(infixr“\“35)和disj(中篇)\“30)和暗示(infixr“\“25)和不相等(中缀“\" 50)表示法(xsymbols输出)不相等(中缀“\" 50)表示法(HTML输出)不是(“\_“[40]40)和conj(infixr“\“35)和disj(infixr“\“30)和不相等(中缀“\" 50)缩写(iff)iff::“[bool,bool]=>bool”(infixr“<->”25)其中“A<->B==A=B”符号(xsymbols)iff(infixr“\" 25)语法“_The”::“[pttrn,bool]=>'a”(“(3THE_./_)”[0,10]10)translations“THE x.P”==“CONST THE(%x.P)”打印_翻译{*[(@{const_syntax The},fn[Abs Abs]=>let val(x,t)=语法_Trans.atomic_abs_tr'abs在Syntax.const@{Syntax_const“_The”}$x$t结尾)]*}--{*避免eta压缩身体*}非终结符letbind和letbind语法“_bind”::“[pttrn,'a]=>letbind”(“(2_=/_)”10)“::”letbind=>letbind“(”_“)“_binds”::“[letbind,letbinds]=>letbinds”(“_;/_”)“Let”::“[letbinds,'a]=>'a”(“(Let(_)/in(_))”[0,10]10)非终结case_syn和cases_syn语法“_case_syntax”::“['a,cases_syn]=>'b”(“(第_个案例,共_个案例)”10)“_case1”::“['a,'b]=>案例_同步”(“(2_=>/_)”10)“”::“case_syn=>cases_syn”(“_”)“_case2”::“[案例同步,案例同步]=>案例同步”(“_/|_”)语法(xsymbols)“_case1”::“['a,'b]=>案例同步”(“(2_\/ _)" 10)符号(xsymbols)全部(活页夹“\“10)和Ex(活页夹“\“10)和Ex1(粘合剂)\!" 10)表示法(HTML输出)全部(活页夹“\“10)和Ex(活页夹“\“10)和Ex1(粘合剂)\!" 10)符号(HOL)所有(活页夹“!”10)和Ex(活页夹“?”10)和Ex1(活页夹“?!”10)子集{*公理和基本定义*}公理化,其中ref:“t=(t::'a)”和subst:“s=t\P秒\P t”和扩展名:“(!!x::'a.(fx::bb)=g x)==>(%x.f x)=(%x.g x)”--{*扩展性内置于元逻辑中,该规则表示相关财产。它是传统的eta扩展版规则,与HOL*}和_eq_trivial:“(x x=a)=(a::'a)”公理化,其中impI:“(P==>Q)==>P-->Q”和mp:“[|P-->Q;P|]=>Q”和iff:“(P-->Q)-->(Q-->P)-->”和真或假:“(P=真)|(P=假)”定义True_def:“真==((%x::bool.x)=(%x.x)”All_def:“全部(P)==(P=(%x.真))”Ex_def:“Ex(P)==!Q(!x.P x-->Q)-->Q”False_def:“False==(!P.P)”not_def:“~P==P-->假”and_def:“P&Q==!R(P-->Q-->R)-->R”或_def:“P|Q==!R(P-->R)-->(Q-->R)-->R”Ex1_def:“Ex1(P)==?x.P(x)&(!y.P(y)-->y=x)”定义If::“bool\“a\“a\“a”(“(if(_)/then(_)/else(_))“[0,0,10]10)其中“如果P x y\(z::'a.(P=真-->z=x)&(P=假-->z=y))“definition Let::“'\('a)\“b)”\“b”其中“让我们f\f s“翻译“_设置(_binds b bs)e”==“_设置b(_设置bs e)”“让x=a在e中”==“CONST让a(%x.e)”未定义公理化::'aclass default=修复default::'a子小节{*原子化元级连接符*}公理化,其中eq_reflection:“x=y\x个\y”(*容许公理*)(*摘自Hilbert_Choice.thy*)分段{*Hilbertε}公理化Eps::“('a=>bool)=>'a”其中someI:“P x==>P(Eps P)”语法(epsilon)“_Eps”::“[ppttrn,bool]=>'a”(“(3\_./ _)" [0, 10] 10)语法(HOL)“_Eps”::“[pttrn,bool]=>'a”(“(3@_./_)”[0,10]10)语法“_Eps”::“[pttrn,bool]=>'a”(“(3SOME_./_)”[0,10]10)翻译“一些x.P”==“CONST Eps(%x.P)”打印_翻译{*[(@{const_syntax Eps},fn[Abs Abs]=>let val(x,t)=语法_Trans.atomic_abs_tr'abs在Syntax.const@{Syntax_const“_Eps”}$x$t结尾)]*}——{*以避免身体的eta收缩*}(*已有旧的定义*)常数EXold::“('a=>bool)=>bool”(活页夹“EXold”10)定义EXold_def:“EXold(P)==P(Eps P)”结束