packages feed

ivor-0.1.5: examplett/ack.tt

Load "nat.tt";

Primitives;

natToInt : (x:Nat)Int;
intros;
induction x;
fill 0;
intros;
fill addInt 1 k_IH;
Qed;

ack:(x,y:Nat)<ack x y: Nat>;
intro x;
induction x;
intros;
return;
fill (S y);
intros;
induction y0;
return;
call ack k (S O);
intros;
refine k_IH;
fill call <ack (S k) k0> k_IH0;
Qed;

runack = [x,y:Int](natToInt (call <ack (intToNat x) (intToNat y)>
            (ack (intToNat x) (intToNat y))));

Eval runack 2 6; {- 15 -}
Eval runack 3 4; {- 125 -}
Eval runack 3 5; {- 253 -}

Eval runack 4 4; {- no chance -}