swh:1:snp:aeaf3dbb58f5be84b565e73b5ade1503ee8cb6d6
Raw File
Tip revision: b6407e0f026cf5491ca5ed0a35ea5cf316ebe8ca authored by Anish Tondwalkar on 21 May 2021, 03:15:25 UTC
formatted for submission
Tip revision: b6407e0
mochi-d3.hs
assume as b:Bool -> {v:Int | b == True}
assume = 0

assert as {b:Bool | b == True} -> Int
assert = 0

bool as Bool
bool = 0

succ :: b:Int ~> ({u:Int | b <= u} -> Int) -> {u:Int | b <= u} -> Int
succ = \f x -> f (x + 1)

app3 :: a:Int ~> ({u:Int | a <= u} -> Int) -> b:Int ~> (c:Int ~> ({u:Int | a <= u} -> Int) -> Int) -> Int
app3 = \f g -> if bool then app3 (succ f) g else g f

app :: x:Int -> a:Int ~> ({u:Int | x <= u} -> Int) -> Int
app = \x f -> f x

check :: x:Int -> {u:Int | x <= u} -> Int
check = \x y -> if x <= y then 1 else assert False

main :: Int -> Int
main = \i -> app3 (check i) (app i)
back to top