tailup :: (Int -> Int -> Int) -> Int -> Int -> Int -> Int tailup(F, i, y, a) -> a | i > y tailup(F, i, y, a) -> tailup(F, i + 1, y, F(i, a)) | i ≤ y taildown :: (Int -> Int -> Int) -> Int -> Int -> Int -> Int taildown(F, x, i, a) -> a | i < x taildown(F, x, i, a) -> taildown(F, x, i - 1, F(a,i)) | i ≥ x recup :: (Int -> Int -> Int) -> Int -> Int -> Int -> Int recup(F, i, y, z) -> z | i > y recup(F, i, y, z) -> F(recup(F, i + 1, y, z), i) | i ≤ y recdown :: (Int -> Int -> Int) -> Int -> Int -> Int -> Int recdown(F, x, i, z) -> z | i < x recdown(F, x, i, z) -> F(i, recdown(F, x, i - 1, z)) | i ≥ x f :: Int -> Int -> Int f(x, y) -> x | x > 100000 g :: Int -> Int -> Int g(x, y) -> x | x > 100000