minsort Cons x xs appmin x xs Cons x xs minsort Nil Nil appmin min Cons x xs xs' appmin[Ite][True][Ite] < x min min Cons x xs xs' appmin min Nil xs Cons min minsort remove min xs notEmpty Cons x xs True notEmpty Nil False remove x' Cons x xs remove[Ite] !EQ x' x x' Cons x xs !EQ S x S y !EQ x y !EQ 0 S y False !EQ S x 0 False !EQ 0 0 True < S x S y < x y < 0 S y True < x 0 False remove[Ite] False x' Cons x xs Cons x remove x' xs appmin[Ite][True][Ite] True min Cons x xs xs' appmin x xs xs' remove[Ite] True x' Cons x xs xs appmin[Ite][True][Ite] False min Cons x xs xs' appmin min xs xs' minsort 1 True 0 Nil 0 appmin 3 remove[Ite] 3 !EQ 2 < 2 S 1 Cons 2 appmin[Ite][True][Ite] 4 0 0 remove 2 notEmpty 1 False 0 INNERMOST