blob: 559b6e364a974db0e8626e5f75fcbae0e162a299 [file] [log] [blame] [edit]
{-
This build info header is now disabled by --fno-gen-header.
--------------------------------------------------------------------------------
We strongly discourage users from generating individual files for Isabelle
proofs, as it will end up with an inconsistent collection of output files (i.e.
Isabelle input files).
-}
{-# LANGUAGE DisambiguateRecordFields #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE PartialTypeSignatures #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Search_Shallow_Desugar where
import Data.Bits ((.&.), (.|.), complement, xor, shiftL, shiftR)
import Data.Word (Word8, Word16, Word32, Word64)
import Prelude (not, div, mod, fromIntegral, undefined, (+), (-), (*), (&&), (||), (>), (>=), (<), (<=), (==), (/=), Char, String, Int, Bool(..))
import qualified Prelude as P
import Data.Foldable (foldl')
import Debug.Trace
import Util
word64Max :: Word64
word64Max = (18446744073709551615 :: Word64)
word32Max :: Word32
word32Max = (4294967295 :: Word32)
type SysState = ()
type CString = [Char]
type Buffer = [Word8]
type WordArrayIndex = Word32
type Seq64_bodyParam acc obsv rbrk = R0 acc obsv Word64
type Seq32_stepParam = Word32 -> Word32
type Seq32_simple_bodyParam acc = acc
type Seq32_simple_body acc = acc -> acc
type Seq32_bodyParam acc obsv rbrk = R0 acc obsv Word32
type Seq32SimpleParam acc = R6 Word32 Word32 Word32 (acc -> acc) acc
type RR c a b = R12 c (V16 b a)
type R a b = V16 b a
type Result a b = V16 b a
type Option a = V17 () a
type OptElemAO a acc obsv = R11 (V17 () a) acc obsv
type OptElemA a acc = R10 (V17 () a) acc
type LoopResult a b = V15 b a
type LRR acc brk = R12 acc (V15 brk ())
type Seq32_body acc obsv rbrk = R0 acc obsv Word32 -> R12 acc (V15 rbrk ())
type Seq32Param acc obsv rbrk = R7 Word32 Word32 Word32 (R0 acc obsv Word32 -> R12 acc (V15 rbrk ())) acc obsv
type Seq32StepFParam acc obsv rbrk = R8 Word32 Word32 (Word32 -> Word32) (R0 acc obsv Word32 -> R12 acc (V15 rbrk ())) acc obsv
type Seq64_body acc obsv rbrk = R0 acc obsv Word64 -> R12 acc (V15 rbrk ())
type Seq64Param acc obsv rbrk = R7 Word64 Word64 Word64 (R0 acc obsv Word64 -> R12 acc (V15 rbrk ())) acc obsv
type Index = Word32
type FreeF a = R12 SysState a -> SysState
type FreeAccF a acc obsv = R14 SysState a acc obsv -> R12 SysState acc
type ErrCode = Word32
type ElemB a rbrk = R5 a rbrk
type ElemAO a acc obsv = R4 a acc obsv
type ElemA a acc = R3 a acc
type Node = R9 Word32 CString
type ArrB a rbrk = R2 a rbrk
type ArrA a acc = R1 a acc
u8_to_u64 :: Word8 -> Word64
u8_to_u64 = undefined
u8_to_u32 :: Word8 -> Word32
u8_to_u32 = fromIntegral
u8_to_u16 :: Word8 -> Word16
u8_to_u16 = undefined
u64_to_u32 :: Word64 -> Word32
u64_to_u32 = undefined
u64_to_u16 :: Word64 -> Word16
u64_to_u16 = undefined
u32_to_u8 :: Word32 -> Word8
u32_to_u8 = undefined
u32_to_u64 :: Word32 -> Word64
u32_to_u64 = undefined
u32_to_u16 :: Word32 -> Word16
u32_to_u16 = undefined
u16_to_u8 :: Word16 -> Word8
u16_to_u8 = undefined
u16_to_u32 :: Word16 -> Word32
u16_to_u32 = undefined
random_u32 :: () -> Word32
random_u32 = undefined
cogent_log2 :: Word32 -> Word32
cogent_log2 = undefined
seq32_simple :: R6 Word32 Word32 Word32 (acc -> acc) acc -> acc
seq32_simple = undefined
seq32 :: forall acc obsv rbrk. R7 Word32 Word32 Word32 (R0 acc obsv Word32 -> R12 acc (V15 rbrk ())) acc obsv -> R12 acc (V15 rbrk ())
seq32 R7 {..} = let (acc',r') = seq32' (fromIntegral frm) (fromIntegral to) (fromIntegral step) acc obsv f'
in R12 acc' r'
where seq32' :: Int -> Int -> Int -> acc -> obsv -> (acc -> obsv -> Int -> (acc, V15 rbrk ())) -> (acc, V15 rbrk ())
seq32' fr to stp acc obsv f = let itr = [fr, fr + stp .. (to - 1)]
in foldl' (\(a,r) idx -> case r of Iterate _ -> f a obsv idx; Break b -> (a,r)) (acc, Iterate ()) itr
f' :: acc -> obsv -> Int -> (acc, V15 rbrk ())
f' acc obsv idx = let R12 {..} = f (R0 acc obsv (fromIntegral idx)) in (p1, p2)
seq32_rev :: R7 Word32 Word32 Word32 (R0 acc obsv Word32 -> R12 acc (V15 rbrk ())) acc obsv -> R12 acc (V15 rbrk ())
seq32_rev = undefined
seq32_stepf :: R8 Word32 Word32 (Word32 -> Word32) (R0 acc obsv Word32 -> R12 acc (V15 rbrk ())) acc obsv -> R12 acc (V15 rbrk ())
seq32_stepf = undefined
seq64 :: R7 Word64 Word64 Word64 (R0 acc obsv Word64 -> R12 acc (V15 rbrk ())) acc obsv -> R12 acc (V15 rbrk ())
seq64 = undefined
free_Node :: R12 SysState (R9 Word32 CString) -> SysState
free_Node _ = ()
malloc_Node :: SysState -> R12 SysState (V16 Word32 (R9 Word32 CString))
malloc_Node _ = R12 {p1 = (), p2 = Success (R9 undefined undefined)}
array_print :: R12 SysState CString -> SysState
array_print = undefined
free_CString :: R12 SysState CString -> SysState
free_CString _ = ()
string_cmp :: R12 CString CString -> Bool
string_cmp (R12 {..}) = p1 == p2
deserialise_CString :: R14 SysState Buffer Word32 Word32 -> R12 SysState (V16 Word32 (R12 CString Word32))
deserialise_CString (R14 {..}) =
let buf = P.drop (fromIntegral p3) p2
in if fromIntegral p4 > P.length buf
then R12 () (Error (fromIntegral 1))
else let s = P.take (fromIntegral p4) buf
s' = P.map (P.toEnum P.. fromIntegral) s
in R12 () (Success (R12 s' (p4 + p3)))
deserialise_U32 :: R13 SysState Buffer Word32 -> R13 SysState Word32 Word32
deserialise_U32 (R13 {..}) =
let buf = P.drop (fromIntegral p3) p2
in case buf of (b0:b1:b2:b3:bs) -> R13 {p1 = (), p2 = let len = buildWord32 b0 b1 b2 b3 in len, p3 = p3 + fromIntegral 4}
u16_to_u64 :: Word16 -> Word64
u16_to_u64 __ds_var_0 = let x = __ds_var_0 in u32_to_u64 (u16_to_u32 x)
to_u64 :: Word64 -> Word64
to_u64 __ds_var_0 = let x = __ds_var_0 in x
to_u32 :: Word32 -> Word32
to_u32 __ds_var_0 = let x = __ds_var_0 in x
to_u16 :: Word16 -> Word16
to_u16 __ds_var_0 = let x = __ds_var_0 in x
min_u64 :: R12 Word64 Word64 -> Word64
min_u64 __ds_var_0
= let __ds_var_1 = __ds_var_0
a = let R12{p1 = __shallow_v18, p2 = __shallow_v19} = __ds_var_0 in __shallow_v18
in
let __ds_var_2 = __ds_var_1
b = let R12{p1 = __shallow_v20, p2 = __shallow_v21} = __ds_var_1 in __shallow_v21
in if (a < b) then a else b
min_u32 :: R12 Word32 Word32 -> Word32
min_u32 __ds_var_0
= let __ds_var_1 = __ds_var_0
a = let R12{p1 = __shallow_v22, p2 = __shallow_v23} = __ds_var_0 in __shallow_v22
in
let __ds_var_2 = __ds_var_1
b = let R12{p1 = __shallow_v24, p2 = __shallow_v25} = __ds_var_1 in __shallow_v25
in if (a < b) then a else b
in_range_u32 :: R13 Word32 Word32 Word32 -> Bool
in_range_u32 __ds_var_0
= let __ds_var_1 = __ds_var_0
needle = let R13{p1 = __shallow_v26, p2 = __shallow_v27, p3 = __shallow_v28} = __ds_var_0 in __shallow_v26
in
let __ds_var_2 = __ds_var_1
from = let R13{p1 = __shallow_v29, p2 = __shallow_v30, p3 = __shallow_v31} = __ds_var_1 in __shallow_v30
in
let __ds_var_3 = __ds_var_2
to = let R13{p1 = __shallow_v32, p2 = __shallow_v33, p3 = __shallow_v34} = __ds_var_2 in __shallow_v34
in if ((needle >= from) && (needle < to)) then True else False
cogent_low_16_bits :: Word32 -> Word16
cogent_low_16_bits __ds_var_0 = let x = __ds_var_0 in u32_to_u16 (x .&. (fromIntegral (65535 :: Word16) :: Word32))
cogent_high_16_bits :: Word32 -> Word16
cogent_high_16_bits __ds_var_0 = let x = __ds_var_0 in u32_to_u16 ((x .&. (4294901760 :: Word32)) `shiftR` fromIntegral (u8_to_u32 (16 :: Word8)))
align64 :: R12 Word64 Word64 -> Word64
align64 __ds_var_0
= let __ds_var_1 = __ds_var_0
x = let R12{p1 = __shallow_v35, p2 = __shallow_v36} = __ds_var_0 in __shallow_v35
in
let __ds_var_2 = __ds_var_1
powof2 = let R12{p1 = __shallow_v37, p2 = __shallow_v38} = __ds_var_1 in __shallow_v38
in ((x + (powof2 - (fromIntegral (1 :: Word8) :: Word64))) .&. complement (powof2 - (fromIntegral (1 :: Word8) :: Word64)))
align32 :: R12 Word32 Word32 -> Word32
align32 __ds_var_0
= let __ds_var_1 = __ds_var_0
x = let R12{p1 = __shallow_v39, p2 = __shallow_v40} = __ds_var_0 in __shallow_v39
in
let __ds_var_2 = __ds_var_1
powof2 = let R12{p1 = __shallow_v41, p2 = __shallow_v42} = __ds_var_1 in __shallow_v42
in ((x + (powof2 - (fromIntegral (1 :: Word8) :: Word32))) .&. complement (powof2 - (fromIntegral (1 :: Word8) :: Word32)))
safe_add32 :: R12 Word32 Word32 -> V16 () Word32
safe_add32 __ds_var_0
= let __ds_var_1 = __ds_var_0
a = let R12{p1 = __shallow_v43, p2 = __shallow_v44} = __ds_var_0 in __shallow_v43
in
let __ds_var_2 = __ds_var_1
b = let R12{p1 = __shallow_v45, p2 = __shallow_v46} = __ds_var_1 in __shallow_v46
in let r = (a + b) in if ((r < a) || (r < b)) then Error () else Success r
safe_add64 :: R12 Word64 Word64 -> V16 () Word64
safe_add64 __ds_var_0
= let __ds_var_1 = __ds_var_0
a = let R12{p1 = __shallow_v47, p2 = __shallow_v48} = __ds_var_0 in __shallow_v47
in
let __ds_var_2 = __ds_var_1
b = let R12{p1 = __shallow_v49, p2 = __shallow_v50} = __ds_var_1 in __shallow_v50
in let r = (a + b) in if ((r < a) || (r < b)) then Error () else Success r
safe_sub32 :: R12 Word32 Word32 -> V16 () Word32
safe_sub32 __ds_var_0
= let __ds_var_1 = __ds_var_0
a = let R12{p1 = __shallow_v51, p2 = __shallow_v52} = __ds_var_0 in __shallow_v51
in
let __ds_var_2 = __ds_var_1
b = let R12{p1 = __shallow_v53, p2 = __shallow_v54} = __ds_var_1 in __shallow_v54
in let r = (a - b) in if (r > a) then Error () else Success r
safe_sub64 :: R12 Word64 Word64 -> V16 () Word64
safe_sub64 __ds_var_0
= let __ds_var_1 = __ds_var_0
a = let R12{p1 = __shallow_v55, p2 = __shallow_v56} = __ds_var_0 in __shallow_v55
in
let __ds_var_2 = __ds_var_1
b = let R12{p1 = __shallow_v57, p2 = __shallow_v58} = __ds_var_1 in __shallow_v58
in let r = (a - b) in if (r > a) then Error () else Success r
deserialise_Node :: R13 SysState Buffer Word32 -> R12 SysState (V16 Word32 (R12 (R9 Word32 CString) Word32))
deserialise_Node __ds_var_0
= let __ds_var_1 = __ds_var_0
ex = let R13{p1 = __shallow_v59, p2 = __shallow_v60, p3 = __shallow_v61} = __ds_var_0 in __shallow_v59
in
let __ds_var_2 = __ds_var_1
buf = let R13{p1 = __shallow_v62, p2 = __shallow_v63, p3 = __shallow_v64} = __ds_var_1 in __shallow_v63
in
let __ds_var_3 = __ds_var_2
idx = let R13{p1 = __shallow_v65, p2 = __shallow_v66, p3 = __shallow_v67} = __ds_var_2 in __shallow_v67
in
let __ds_var_4 = malloc_Node ex
ex68 = let R12{p1 = __shallow_v69, p2 = __shallow_v70} = malloc_Node ex in __shallow_v69
in
let __ds_var_5 = __ds_var_4
r = let R12{p1 = __shallow_v71, p2 = __shallow_v72} = __ds_var_4 in __shallow_v72
in
case r of
Success node ->
let __ds_var_7 = deserialise_U32 R13{p1 = ex68, p2 = buf, p3 = idx}
ex73 = let R13{p1 = __shallow_v74, p2 = __shallow_v75, p3 = __shallow_v76} = deserialise_U32 R13{p1 = ex68, p2 = buf, p3 = idx} in __shallow_v74
in
let __ds_var_8 = __ds_var_7
l = let R13{p1 = __shallow_v77, p2 = __shallow_v78, p3 = __shallow_v79} = __ds_var_7 in __shallow_v78
in
let __ds_var_9 = __ds_var_8
idx' = let R13{p1 = __shallow_v80, p2 = __shallow_v81, p3 = __shallow_v82} = __ds_var_8 in __shallow_v82
in
let __ds_var_10 = deserialise_CString R14{p1 = ex73, p2 = buf, p3 = idx', p4 = l} in
let __ds_var_11 = __ds_var_10
ex83 = let R12{p1 = __shallow_v84, p2 = __shallow_v85} = __ds_var_10 in __shallow_v84
in
let __ds_var_12 = __ds_var_11
r86 = let R12{p1 = __shallow_v87, p2 = __shallow_v88} = __ds_var_11 in __shallow_v88
in
case r86 of
Success __ds_var_13 ->
let __ds_var_15 = __ds_var_13
key = let R12{p1 = __shallow_v89, p2 = __shallow_v90} = __ds_var_13 in __shallow_v89
in
let __ds_var_16 = __ds_var_15
idx'' = let R12{p1 = __shallow_v91, p2 = __shallow_v92} = __ds_var_15 in __shallow_v92
in R12{p1 = ex83, p2 = Success R12{p1 = ((node :: R9 Word32 CString){len = l} :: R9 Word32 CString){key = key}, p2 = idx''}}
__ds_var_14 ->
let err = (\ (Error __shallow_v93) -> __shallow_v93) __ds_var_14 in let ex94 = free_Node R12{p1 = ex83, p2 = node} in R12{p1 = ex94, p2 = Error err}
__ds_var_6 ->
let err = (\ (Error __shallow_v95) -> __shallow_v95) __ds_var_6 in R12{p1 = ex68, p2 = Error err}
cmp_inc :: R0 (R12 SysState Word32) (R12 Buffer CString) Word32 -> R12 (R12 SysState Word32) (V15 (R9 Word32 CString) ())
cmp_inc __ds_var_0
= let __ds_var_1 = __ds_var_0
__ds_var_2 = let R0{acc = __shallow_v96, obsv = __shallow_v97, idx = __shallow_v98} = __ds_var_0 in __shallow_v96
in
let __ds_var_3 = __ds_var_2
ex = let R12{p1 = __shallow_v99, p2 = __shallow_v100} = __ds_var_2 in __shallow_v99
in
let __ds_var_4 = __ds_var_3
idx = let R12{p1 = __shallow_v101, p2 = __shallow_v102} = __ds_var_3 in __shallow_v102
in
let r = __ds_var_1
__ds_var_5 = let R0{acc = __shallow_v103, obsv = __shallow_v104, idx = __shallow_v105} = __ds_var_1 in __shallow_v104
in
let __ds_var_6 = __ds_var_5
buf = let R12{p1 = __shallow_v106, p2 = __shallow_v107} = __ds_var_5 in __shallow_v106
in
let __ds_var_7 = __ds_var_6
str = let R12{p1 = __shallow_v108, p2 = __shallow_v109} = __ds_var_6 in __shallow_v109
in
let __ds_var_8 = deserialise_Node R13{p1 = ex, p2 = buf, p3 = idx}
ex110 = let R12{p1 = __shallow_v111, p2 = __shallow_v112} = deserialise_Node R13{p1 = ex, p2 = buf, p3 = idx} in __shallow_v111
in
let __ds_var_9 = __ds_var_8
r113 = let R12{p1 = __shallow_v114, p2 = __shallow_v115} = __ds_var_8 in __shallow_v115
in
case r113 of
Success __ds_var_10 ->
let __ds_var_12 = __ds_var_10
node = let R12{p1 = __shallow_v116, p2 = __shallow_v117} = __ds_var_10 in __shallow_v116
in
let __ds_var_13 = __ds_var_12
idx' = let R12{p1 = __shallow_v118, p2 = __shallow_v119} = __ds_var_12 in __shallow_v119
in
let __ds_var_14 = string_cmp R12{p1 = let R9{len = __shallow_v120, key = __shallow_v121} = node in __shallow_v121, p2 = str} in
if __ds_var_14 then R12{p1 = R12{p1 = ex110, p2 = idx'}, p2 = Break node} else
let __ds_var_15 = node
len = let R9{len = __shallow_v122, key = __shallow_v123} = node in __shallow_v122
in
let node124 = __ds_var_15
key = let R9{len = __shallow_v125, key = __shallow_v126} = __ds_var_15 in __shallow_v126
in let ex127 = free_Node R12{p1 = ex110, p2 = node124} in R12{p1 = R12{p1 = ex127, p2 = idx'}, p2 = Iterate ()}
__ds_var_11 ->
let err = (\ (Error __shallow_v128) -> __shallow_v128) __ds_var_11 in R12{p1 = R12{p1 = ex110, p2 = idx}, p2 = Iterate ()}
find_str :: R13 SysState Buffer CString -> R12 SysState (V17 () (R9 Word32 CString))
find_str __ds_var_0
= let __ds_var_1 = __ds_var_0
ex = let R13{p1 = __shallow_v129, p2 = __shallow_v130, p3 = __shallow_v131} = __ds_var_0 in __shallow_v129
in
let __ds_var_2 = __ds_var_1
buf = let R13{p1 = __shallow_v132, p2 = __shallow_v133, p3 = __shallow_v134} = __ds_var_1 in __shallow_v133
in
let __ds_var_3 = __ds_var_2
s = let R13{p1 = __shallow_v135, p2 = __shallow_v136, p3 = __shallow_v137} = __ds_var_2 in __shallow_v137
in
let __ds_var_5
= seq32
R7{frm = u8_to_u32 (0 :: Word8), to = u8_to_u32 (3 :: Word8), step = u8_to_u32 (1 :: Word8), f = cmp_inc, acc = R12{p1 = ex, p2 = fromIntegral (0 :: Word8) :: Word32}, obsv = R12{p1 = buf, p2 = s}}
__ds_var_4
= let R12{p1 = __shallow_v138, p2 = __shallow_v139}
= seq32
R7{frm = u8_to_u32 (0 :: Word8), to = u8_to_u32 (3 :: Word8), step = u8_to_u32 (1 :: Word8), f = cmp_inc, acc = R12{p1 = ex, p2 = fromIntegral (0 :: Word8) :: Word32},
obsv = R12{p1 = buf, p2 = s}}
in __shallow_v138
in
let __ds_var_6 = __ds_var_5
r = let R12{p1 = __shallow_v140, p2 = __shallow_v141} = __ds_var_5 in __shallow_v141
in
let __ds_var_8 = __ds_var_4
ex142 = let R12{p1 = __shallow_v143, p2 = __shallow_v144} = __ds_var_4 in __shallow_v143
in
let __ds_var_9 = __ds_var_8
__ds_var_7 = let R12{p1 = __shallow_v145, p2 = __shallow_v146} = __ds_var_8 in __shallow_v146
in
let __ds_var_10 = __ds_var_7 in
case r of
Iterate __ds_var_11 ->
let __ds_var_13 = __ds_var_11 in R12{p1 = ex142, p2 = None ()}
__ds_var_12 ->
let node = (\ (Break __shallow_v147) -> __shallow_v147) __ds_var_12 in R12{p1 = ex142, p2 = Some node}
data R0 t1 t2 t3 = R0{acc :: t1, obsv :: t2, idx :: t3}
data R1 t1 t2 = R1{arr :: t1, acc :: t2}
data R2 t1 t2 = R2{arr :: t1, rbrk :: t2}
data R3 t1 t2 = R3{elem :: t1, acc :: t2}
data R4 t1 t2 t3 = R4{elem :: t1, acc :: t2, obsv :: t3}
data R5 t1 t2 = R5{elem :: t1, rbrk :: t2}
data R6 t1 t2 t3 t4 t5 = R6{frm :: t1, to :: t2, step :: t3, f :: t4, acc :: t5}
data R7 t1 t2 t3 t4 t5 t6 = R7{frm :: t1, to :: t2, step :: t3, f :: t4, acc :: t5, obsv :: t6}
data R8 t1 t2 t3 t4 t5 t6 = R8{frm :: t1, to :: t2, stepf :: t3, f :: t4, acc :: t5, obsv :: t6}
data R9 t1 t2 = R9{len :: t1, key :: t2} deriving (P.Show, P.Eq)
data R10 t1 t2 = R10{oelem :: t1, acc :: t2}
data R11 t1 t2 t3 = R11{oelem :: t1, acc :: t2, obsv :: t3}
data R12 t1 t2 = R12{p1 :: t1, p2 :: t2} deriving P.Show
data R13 t1 t2 t3 = R13{p1 :: t1, p2 :: t2, p3 :: t3}
data R14 t1 t2 t3 t4 = R14{p1 :: t1, p2 :: t2, p3 :: t3, p4 :: t4}
data V15 t1 t2 = Break t1
| Iterate t2
data V16 t1 t2 = Error t1
| Success t2
data V17 t1 t2 = None t1
| Some t2
deriving P.Show