(* Sample arithmetical functions *) (* Author: Adam Poswolsky, Carsten Schuermann *) sig nat>; params = .; fun plus : -> -> = fn => (fn => ) | => (fn => @ (plus )) ; val p0 = plus ; val p1 = plus ; val p2 = plus ; fun mult : -> -> = fn => (fn => ) | => (fn => plus (mult ) ); val m0 = mult ; val m1 = mult ; val m2 = mult ; fun factorial : -> = fn => | => mult (factorial ) ; val f1 = factorial ; val f2 = factorial ; val f3 = factorial ; val f4 = factorial ; val f5 = factorial ; val f6 = factorial ; (* f7 = factorial ; *) fun ex : -> -> = fn => | => mult (ex ) ; val e0 = ex ; val e1 = ex ; val e1a = ex ; val e2 = ex ; fun minus : -> -> = fn => | => | => minus ; val mi0 = minus ; val mi1 = minus ; val mi2 = minus ; fun acker : -> -> = fn => | => acker | => acker (acker ) ; val a0 = acker ; val a1 : = acker ; val a2 : = acker ; (* Conversion to the built-in rational numbers *) fun add = fn => fn => ; fun nat2rat : -> = fn => <0> | => add (nat2rat ) <1>; val ratf1 : = nat2rat (f1) ; val ratf2 : = nat2rat (f2) ; val ratf3 : = nat2rat (f3) ; val ratf4 : = nat2rat (f4) ; val ratf5 : = nat2rat (f5) ; val ratf6 : = nat2rat (f6) ; val ratacker0 : = nat2rat (a0) ; val ratacker1: = nat2rat (a1) ; val ratacker2: = nat2rat (a2) ;