src/CCL/Wfd.thy
changeset 36319 8feb2c4bef1a
parent 33317 b4534348b8fd
child 38500 d5477ee35820
equal deleted inserted replaced
36318:3567d0571932 36319:8feb2c4bef1a
   571   unfolding data_defs by eval+
   571   unfolding data_defs by eval+
   572 
   572 
   573 
   573 
   574 subsection {* Factorial *}
   574 subsection {* Factorial *}
   575 
   575 
   576 lemma
   576 schematic_lemma
   577   "letrec f n be ncase(n,succ(zero),%x. nrec(n,zero,%y g. nrec(f(x),g,%z h. succ(h))))  
   577   "letrec f n be ncase(n,succ(zero),%x. nrec(n,zero,%y g. nrec(f(x),g,%z h. succ(h))))  
   578    in f(succ(succ(zero))) ---> ?a"
   578    in f(succ(succ(zero))) ---> ?a"
   579   by eval
   579   by eval
   580 
   580 
   581 lemma
   581 schematic_lemma
   582   "letrec f n be ncase(n,succ(zero),%x. nrec(n,zero,%y g. nrec(f(x),g,%z h. succ(h))))  
   582   "letrec f n be ncase(n,succ(zero),%x. nrec(n,zero,%y g. nrec(f(x),g,%z h. succ(h))))  
   583    in f(succ(succ(succ(zero)))) ---> ?a"
   583    in f(succ(succ(succ(zero)))) ---> ?a"
   584   by eval
   584   by eval
   585 
   585 
   586 subsection {* Less Than Or Equal *}
   586 subsection {* Less Than Or Equal *}
   587 
   587 
   588 lemma
   588 schematic_lemma
   589   "letrec f p be split(p,%m n. ncase(m,true,%x. ncase(n,false,%y. f(<x,y>))))
   589   "letrec f p be split(p,%m n. ncase(m,true,%x. ncase(n,false,%y. f(<x,y>))))
   590    in f(<succ(zero), succ(zero)>) ---> ?a"
   590    in f(<succ(zero), succ(zero)>) ---> ?a"
   591   by eval
   591   by eval
   592 
   592 
   593 lemma
   593 schematic_lemma
   594   "letrec f p be split(p,%m n. ncase(m,true,%x. ncase(n,false,%y. f(<x,y>))))
   594   "letrec f p be split(p,%m n. ncase(m,true,%x. ncase(n,false,%y. f(<x,y>))))
   595    in f(<succ(zero), succ(succ(succ(succ(zero))))>) ---> ?a"
   595    in f(<succ(zero), succ(succ(succ(succ(zero))))>) ---> ?a"
   596   by eval
   596   by eval
   597 
   597 
   598 lemma
   598 schematic_lemma
   599   "letrec f p be split(p,%m n. ncase(m,true,%x. ncase(n,false,%y. f(<x,y>))))
   599   "letrec f p be split(p,%m n. ncase(m,true,%x. ncase(n,false,%y. f(<x,y>))))
   600    in f(<succ(succ(succ(succ(succ(zero))))), succ(succ(succ(succ(zero))))>) ---> ?a"
   600    in f(<succ(succ(succ(succ(succ(zero))))), succ(succ(succ(succ(zero))))>) ---> ?a"
   601   by eval
   601   by eval
   602 
   602 
   603 
   603 
   604 subsection {* Reverse *}
   604 subsection {* Reverse *}
   605 
   605 
   606 lemma
   606 schematic_lemma
   607   "letrec id l be lcase(l,[],%x xs. x$id(xs))  
   607   "letrec id l be lcase(l,[],%x xs. x$id(xs))  
   608    in id(zero$succ(zero)$[]) ---> ?a"
   608    in id(zero$succ(zero)$[]) ---> ?a"
   609   by eval
   609   by eval
   610 
   610 
   611 lemma
   611 schematic_lemma
   612   "letrec rev l be lcase(l,[],%x xs. lrec(rev(xs),x$[],%y ys g. y$g))  
   612   "letrec rev l be lcase(l,[],%x xs. lrec(rev(xs),x$[],%y ys g. y$g))  
   613    in rev(zero$succ(zero)$(succ((lam x. x)`succ(zero)))$([])) ---> ?a"
   613    in rev(zero$succ(zero)$(succ((lam x. x)`succ(zero)))$([])) ---> ?a"
   614   by eval
   614   by eval
   615 
   615 
   616 end
   616 end