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 |