%%% Integers, floor and ceiling %%% Authors: Frank Pfenning, Roberto Virga %% integer membership integer : rational -> type. i0 : integer N <- N >= 0 <- split N 10 _ 0. i1 : integer N <- 0 > N <- split (~ N) 10 _ 0. %% floor for residuals of splits floor_residual : rational -> rational -> type. flr0 : floor_residual X 0 <- X >= 0 <- 1 > X. %% ceiling for residuals of splits ceiling_residual : rational -> rational -> type. clr0 : ceiling_residual 0 0. clr1 : ceiling_residual X 1 <- X > 0 <- 1 > X. %% floor floor : rational -> rational -> type. fl0 : floor X (N + R) <- X >= 0 <- split X 10 L R' <- split N 10 L 0 <- floor_residual R' R. fl1 : floor X (~ (N + R)) <- 0 > X <- split (~ X) 10 L R' <- split N 10 L 0 <- ceiling_residual R' R. %% ceiling ceiling : rational -> rational -> type. cl0 : ceiling X (N + R) <- X >= 0 <- split X 10 L R' <- split N 10 L 0 <- ceiling_residual R' R. cl1 : ceiling X (~ (N + R)) <- 0 > X <- split (~ X) 10 L R' <- split N 10 L 0 <- floor_residual R' R.