definition div :: "[i,i]\i" (infixr‹##› 60) where "a ## b ==
letrec div x y be if x #< y then zero else succ(div(x#-y,y)) in div(a,b)"
definition ackermann :: "[i,i]\i" where "ackermann(a,b) ==
letrec ack n m be ncase(n, succ(m), λx.
ncase(m,ack(x,succ(zero)), λy. ack(x,ack(succ(x),y)))) in ack(a,b)"
lemma addT: "\a:Nat; b:Nat\ \ a #+ b : Nat" apply (unfold add_def) apply typechk done
lemma multT: "\a:Nat; b:Nat\ \ a #* b : Nat" apply (unfold add_def mult_def) apply typechk done
(* Defined to return zero if a<b *) lemma subT: "\a:Nat; b:Nat\ \ a #- b : Nat" apply (unfold sub_def) apply typechk apply clean_ccs apply (erule NatPRI [THEN wfstI, THEN NatPR_wf [THEN wmap_wf, THEN wfI]]) done
lemmaleT: "\a:Nat; b:Nat\ \ a #<= b : Bool" apply (unfold le_def) apply typechk apply clean_ccs apply (erule NatPRI [THEN wfstI, THEN NatPR_wf [THEN wmap_wf, THEN wfI]]) done
lemma ltT: "\a:Nat; b:Nat\ \ a #< b : Bool" apply (unfold not_def lt_def) apply (typechk leT) done
subsection‹Termination Conditions for Ackermann's Function\
lemmas relI = NatPR_wf [THEN NatPR_wf [THEN lex_wf, THEN wfI]]
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.