/export/starexec/sandbox2/solver/bin/starexec_run_standard /export/starexec/sandbox2/benchmark/theBenchmark.hs /export/starexec/sandbox2/output/output_files -------------------------------------------------------------------------------- MAYBE proof of /export/starexec/sandbox2/benchmark/theBenchmark.hs # AProVE Commit ID: 794c25de1cacf0d048858bcd21c9a779e1221865 marcel 20200619 unpublished dirty H-Termination with start terms of the given HASKELL could not be shown: (0) HASKELL (1) LR [EQUIVALENT, 0 ms] (2) HASKELL (3) CR [EQUIVALENT, 0 ms] (4) HASKELL (5) IFR [EQUIVALENT, 14 ms] (6) HASKELL (7) BR [EQUIVALENT, 0 ms] (8) HASKELL (9) COR [EQUIVALENT, 13 ms] (10) HASKELL (11) LetRed [EQUIVALENT, 37 ms] (12) HASKELL (13) NumRed [SOUND, 62 ms] (14) HASKELL ---------------------------------------- (0) Obligation: mainModule Main module Main where { import qualified Prelude; } ---------------------------------------- (1) LR (EQUIVALENT) Lambda Reductions: The following Lambda expression "\nd->n * radix + d" is transformed to "readInt0 radix n d = n * radix + d; " The following Lambda expression "\vu77->case vu77 of { (ds,r) -> (foldl1 (readInt0 radix) (map (fromIntegral . digToInt) ds),r) : []; _ -> []} " is transformed to "readInt1 radix digToInt vu77 = case vu77 of { (ds,r) -> (foldl1 (readInt0 radix) (map (fromIntegral . digToInt) ds),r) : []; _ -> []} ; " The following Lambda expression "\vu54->case vu54 of { (ch,''' : t) -> if ch /= ''' : [] then (''' : ch ++ ''' : [],t) : [] else []; _ -> []} " is transformed to "lex0 vu54 = case vu54 of { (ch,''' : t) -> if ch /= ''' : [] then (''' : ch ++ ''' : [],t) : [] else []; _ -> []} ; " The following Lambda expression "\vu56->case vu56 of { (str,u) -> (ch ++ str,u) : []; _ -> []} " is transformed to "lexString0 ch vu56 = case vu56 of { (str,u) -> (ch ++ str,u) : []; _ -> []} ; " The following Lambda expression "\vu57->case vu57 of { (ch,t) -> concatMap (lexString0 ch) (lexString t); _ -> []} " is transformed to "lexString1 vu57 = case vu57 of { (ch,t) -> concatMap (lexString0 ch) (lexString t); _ -> []} ; " The following Lambda expression "\vu58->case vu58 of { '\' : t -> ([],t) : []; _ -> []} " is transformed to "lexStrItem0 vu58 = case vu58 of { '\' : t -> ([],t) : []; _ -> []} ; " The following Lambda expression "\vu55->case vu55 of { (str,t) -> ('"' : str,t) : []; _ -> []} " is transformed to "lex1 vu55 = case vu55 of { (str,t) -> ('"' : str,t) : []; _ -> []} ; " The following Lambda expression "\vu63->case vu63 of { (e,u) -> ('.' : ds ++ e,u) : []; _ -> []} " is transformed to "lexFracExp0 ds vu63 = case vu63 of { (e,u) -> ('.' : ds ++ e,u) : []; _ -> []} ; " The following Lambda expression "\vu64->case vu64 of { (ds,t) -> concatMap (lexFracExp0 ds) (lexExp t); _ -> []} " is transformed to "lexFracExp1 vu64 = case vu64 of { (ds,t) -> concatMap (lexFracExp0 ds) (lexExp t); _ -> []} ; " The following Lambda expression "\vu65->case vu65 of { (ds,u) -> (e : c : ds,u) : []; _ -> []} " is transformed to "lexExp0 e c vu65 = case vu65 of { (ds,u) -> (e : c : ds,u) : []; _ -> []} ; " The following Lambda expression "\vu66->case vu66 of { c : t -> if c `elem` '+' : '-' : [] then concatMap (lexExp0 e c) (lexDigits t) else []; _ -> []} " is transformed to "lexExp1 e vu66 = case vu66 of { c : t -> if c `elem` '+' : '-' : [] then concatMap (lexExp0 e c) (lexDigits t) else []; _ -> []} ; " The following Lambda expression "\vu67->case vu67 of { (ds,t) -> (e : ds,t) : []; _ -> []} " is transformed to "lexExp2 e vu67 = case vu67 of { (ds,t) -> (e : ds,t) : []; _ -> []} ; " The following Lambda expression "\vu59->case vu59 of { (sym,t) -> (c : sym,t) : []; _ -> []} " is transformed to "lex2 c vu59 = case vu59 of { (sym,t) -> (c : sym,t) : []; _ -> []} ; " The following Lambda expression "\vu60->case vu60 of { (nam,t) -> (c : nam,t) : []; _ -> []} " is transformed to "lex3 c vu60 = case vu60 of { (nam,t) -> (c : nam,t) : []; _ -> []} ; " The following Lambda expression "\vu61->case vu61 of { (fe,t) -> (c : ds ++ fe,t) : []; _ -> []} " is transformed to "lex4 c ds vu61 = case vu61 of { (fe,t) -> (c : ds ++ fe,t) : []; _ -> []} ; " The following Lambda expression "\vu62->case vu62 of { (ds,s) -> concatMap (lex4 c ds) (lexFracExp s); _ -> []} " is transformed to "lex5 c vu62 = case vu62 of { (ds,s) -> concatMap (lex4 c ds) (lexFracExp s); _ -> []} ; " The following Lambda expression "\ab->(a,b)" is transformed to "zip0 a b = (a,b); " The following Lambda expression "\vu68->case vu68 of { (cs@(_ : _),t) -> (cs,t) : []; _ -> []} " is transformed to "nonnull0 vu68 = case vu68 of { (cs@(_ : _),t) -> (cs,t) : []; _ -> []} ; " The following Lambda expression "\vu88->case vu88 of { (k,t) -> (`negate` k,t) : []; _ -> []} " is transformed to "readExp'0 vu88 = case vu88 of { (k,t) -> (`negate` k,t) : []; _ -> []} ; " The following Lambda expression "\vu86->case vu86 of { (ds',t) -> (read (ds ++ ds'),length ds',t) : []; _ -> []} " is transformed to "readFix0 ds vu86 = case vu86 of { (ds',t) -> (read (ds ++ ds'),length ds',t) : []; _ -> []} ; " The following Lambda expression "\vu87->case vu87 of { (ds,d) -> concatMap (readFix0 ds) (lexFrac d); _ -> []} " is transformed to "readFix1 vu87 = case vu87 of { (ds,d) -> concatMap (readFix0 ds) (lexFrac d); _ -> []} ; " The following Lambda expression "\vu82->case vu82 of { (k,t) -> (fromRational (n % 1 * 10 ^^ (k - d)),t) : []; _ -> []} " is transformed to "readFloat0 n d vu82 = case vu82 of { (k,t) -> (fromRational (n % 1 * 10 ^^ (k - d)),t) : []; _ -> []} ; " The following Lambda expression "\vu83->case vu83 of { (n,d,s) -> concatMap (readFloat0 n d) (readExp s); _ -> []} " is transformed to "readFloat1 vu83 = case vu83 of { (n,d,s) -> concatMap (readFloat0 n d) (readExp s); _ -> []} ; " The following Lambda expression "\vu84->case vu84 of { ('N' : 'a' : 'N' : [],t) -> (0 / 0,t) : []; _ -> []} " is transformed to "readFloat2 vu84 = case vu84 of { ('N' : 'a' : 'N' : [],t) -> (0 / 0,t) : []; _ -> []} ; " The following Lambda expression "\vu85->case vu85 of { ('I' : 'n' : 'f' : 'i' : 'n' : 'i' : 't' : 'y' : [],t) -> (1 / 0,t) : []; _ -> []} " is transformed to "readFloat3 vu85 = case vu85 of { ('I' : 'n' : 'f' : 'i' : 'n' : 'i' : 't' : 'y' : [],t) -> (1 / 0,t) : []; _ -> []} ; " The following Lambda expression "\vu89->case vu89 of { ([],[]) -> x : []; _ -> []} " is transformed to "readIO0 x vu89 = case vu89 of { ([],[]) -> x : []; _ -> []} ; " The following Lambda expression "\vu90->case vu90 of { (x,t) -> concatMap (readIO0 x) (lex t); _ -> []} " is transformed to "readIO1 vu90 = case vu90 of { (x,t) -> concatMap (readIO0 x) (lex t); _ -> []} ; " The following Lambda expression "\(_,zs)->zs" is transformed to "zs0 (_,zs) = zs; " The following Lambda expression "\(ys,_)->ys" is transformed to "ys0 (ys,_) = ys; " The following Lambda expression "\vu46->case vu46 of { ([],[]) -> x : []; _ -> []} " is transformed to "read0 x vu46 = case vu46 of { ([],[]) -> x : []; _ -> []} ; " The following Lambda expression "\vu47->case vu47 of { (x,t) -> concatMap (read0 x) (lex t); _ -> []} " is transformed to "read1 vu47 = case vu47 of { (x,t) -> concatMap (read0 x) (lex t); _ -> []} ; " The following Lambda expression "\vu48->case vu48 of { (')' : [],u) -> (x,u) : []; _ -> []} " is transformed to "mandatory0 x vu48 = case vu48 of { (')' : [],u) -> (x,u) : []; _ -> []} ; " The following Lambda expression "\vu49->case vu49 of { (x,t) -> concatMap (mandatory0 x) (lex t); _ -> []} " is transformed to "mandatory1 vu49 = case vu49 of { (x,t) -> concatMap (mandatory0 x) (lex t); _ -> []} ; " The following Lambda expression "\vu50->case vu50 of { ('(' : [],s) -> concatMap mandatory1 (optional s); _ -> []} " is transformed to "mandatory2 vu50 = case vu50 of { ('(' : [],s) -> concatMap mandatory1 (optional s); _ -> []} ; " The following Lambda expression "\vu80->case vu80 of { (n,[]) -> (n,s) : []; _ -> []} " is transformed to "read''0 s vu80 = case vu80 of { (n,[]) -> (n,s) : []; _ -> []} ; " The following Lambda expression "\vu81->case vu81 of { (str,s) -> concatMap (read''0 s) (readPos str); _ -> []} " is transformed to "read''1 readPos vu81 = case vu81 of { (str,s) -> concatMap (read''0 s) (readPos str); _ -> []} ; " The following Lambda expression "\vu78->case vu78 of { (x,t) -> (`negate` x,t) : []; _ -> []} " is transformed to "read'0 vu78 = case vu78 of { (x,t) -> (`negate` x,t) : []; _ -> []} ; " The following Lambda expression "\vu79->case vu79 of { ('-' : [],s) -> concatMap read'0 (read'' s); _ -> []} " is transformed to "read'1 vu79 = case vu79 of { ('-' : [],s) -> concatMap read'0 (read'' s); _ -> []} ; " The following Lambda expression "\n_->n + 1" is transformed to "length0 n _ = n + 1; " The following Lambda expression "\d->fromEnum d - fromEnum_0" is transformed to "readDec0 d = fromEnum d - fromEnum_0; " The following Lambda expression "\vu69->case vu69 of { ([],s') -> (mne,s') : []; _ -> []} " is transformed to "lexEsc0 mne vu69 = case vu69 of { ([],s') -> (mne,s') : []; _ -> []} ; " The following Lambda expression "\vu70->case vu70 of { (c,mne) -> concatMap (lexEsc0 mne) (lexmatch mne s : []); _ -> []} " is transformed to "lexEsc1 s vu70 = case vu70 of { (c,mne) -> concatMap (lexEsc0 mne) (lexmatch mne s : []); _ -> []} ; " ---------------------------------------- (2) Obligation: mainModule Main module Main where { import qualified Prelude; } ---------------------------------------- (3) CR (EQUIVALENT) Case Reductions: The following Case expression "case vu90 of { (x,t) -> concatMap (readIO0 x) (lex t); _ -> []} " is transformed to "readIO10 (x,t) = concatMap (readIO0 x) (lex t); readIO10 _ = []; " The following Case expression "case vu89 of { ([],[]) -> x : []; _ -> []} " is transformed to "readIO00 x ([],[]) = x : []; readIO00 x _ = []; " The following Case expression "case vu55 of { (str,t) -> ('"' : str,t) : []; _ -> []} " is transformed to "lex10 (str,t) = ('"' : str,t) : []; lex10 _ = []; " The following Case expression "case vu57 of { (ch,t) -> concatMap (lexString0 ch) (lexString t); _ -> []} " is transformed to "lexString10 (ch,t) = concatMap (lexString0 ch) (lexString t); lexString10 _ = []; " The following Case expression "case vu56 of { (str,u) -> (ch ++ str,u) : []; _ -> []} " is transformed to "lexString00 ch (str,u) = (ch ++ str,u) : []; lexString00 ch _ = []; " The following Case expression "case vu58 of { '\' : t -> ([],t) : []; _ -> []} " is transformed to "lexStrItem00 ('\' : t) = ([],t) : []; lexStrItem00 _ = []; " The following Case expression "case vu59 of { (sym,t) -> (c : sym,t) : []; _ -> []} " is transformed to "lex20 c (sym,t) = (c : sym,t) : []; lex20 c _ = []; " The following Case expression "case vu67 of { (ds,t) -> (e : ds,t) : []; _ -> []} " is transformed to "lexExp20 e (ds,t) = (e : ds,t) : []; lexExp20 e _ = []; " The following Case expression "case vu65 of { (ds,u) -> (e : c : ds,u) : []; _ -> []} " is transformed to "lexExp00 e c (ds,u) = (e : c : ds,u) : []; lexExp00 e c _ = []; " The following Case expression "case vu62 of { (ds,s) -> concatMap (lex4 c ds) (lexFracExp s); _ -> []} " is transformed to "lex50 c (ds,s) = concatMap (lex4 c ds) (lexFracExp s); lex50 c _ = []; " The following Case expression "case vu66 of { c : t -> if c `elem` '+' : '-' : [] then concatMap (lexExp0 e c) (lexDigits t) else []; _ -> []} " is transformed to "lexExp10 e (c : t) = if c `elem` '+' : '-' : [] then concatMap (lexExp0 e c) (lexDigits t) else []; lexExp10 e _ = []; " The following Case expression "case vu60 of { (nam,t) -> (c : nam,t) : []; _ -> []} " is transformed to "lex30 c (nam,t) = (c : nam,t) : []; lex30 c _ = []; " The following Case expression "case vu61 of { (fe,t) -> (c : ds ++ fe,t) : []; _ -> []} " is transformed to "lex40 c ds (fe,t) = (c : ds ++ fe,t) : []; lex40 c ds _ = []; " The following Case expression "case vu63 of { (e,u) -> ('.' : ds ++ e,u) : []; _ -> []} " is transformed to "lexFracExp00 ds (e,u) = ('.' : ds ++ e,u) : []; lexFracExp00 ds _ = []; " The following Case expression "case vu64 of { (ds,t) -> concatMap (lexFracExp0 ds) (lexExp t); _ -> []} " is transformed to "lexFracExp10 (ds,t) = concatMap (lexFracExp0 ds) (lexExp t); lexFracExp10 _ = []; " The following Case expression "case vu47 of { (x,t) -> concatMap (read0 x) (lex t); _ -> []} " is transformed to "read10 (x,t) = concatMap (read0 x) (lex t); read10 _ = []; " The following Case expression "case vu46 of { ([],[]) -> x : []; _ -> []} " is transformed to "read00 x ([],[]) = x : []; read00 x _ = []; " The following Case expression "case vu68 of { (cs@(_ : _),t) -> (cs,t) : []; _ -> []} " is transformed to "nonnull00 (cs@(_ : _),t) = (cs,t) : []; nonnull00 _ = []; " The following Case expression "case vu84 of { ('N' : 'a' : 'N' : [],t) -> (0 / 0,t) : []; _ -> []} " is transformed to "readFloat20 ('N' : 'a' : 'N' : [],t) = (0 / 0,t) : []; readFloat20 _ = []; " The following Case expression "case vu85 of { ('I' : 'n' : 'f' : 'i' : 'n' : 'i' : 't' : 'y' : [],t) -> (1 / 0,t) : []; _ -> []} " is transformed to "readFloat30 ('I' : 'n' : 'f' : 'i' : 'n' : 'i' : 't' : 'y' : [],t) = (1 / 0,t) : []; readFloat30 _ = []; " The following Case expression "case vu82 of { (k,t) -> (fromRational (n % 1 * 10 ^^ (k - d)),t) : []; _ -> []} " is transformed to "readFloat00 n d (k,t) = (fromRational (n % 1 * 10 ^^ (k - d)),t) : []; readFloat00 n d _ = []; " The following Case expression "case vu88 of { (k,t) -> (`negate` k,t) : []; _ -> []} " is transformed to "readExp'00 (k,t) = (`negate` k,t) : []; readExp'00 _ = []; " The following Case expression "case vu86 of { (ds',t) -> (read (ds ++ ds'),length ds',t) : []; _ -> []} " is transformed to "readFix00 ds (ds',t) = (read (ds ++ ds'),length ds',t) : []; readFix00 ds _ = []; " The following Case expression "case vu83 of { (n,d,s) -> concatMap (readFloat0 n d) (readExp s); _ -> []} " is transformed to "readFloat10 (n,d,s) = concatMap (readFloat0 n d) (readExp s); readFloat10 _ = []; " The following Case expression "case vu87 of { (ds,d) -> concatMap (readFix0 ds) (lexFrac d); _ -> []} " is transformed to "readFix10 (ds,d) = concatMap (readFix0 ds) (lexFrac d); readFix10 _ = []; " The following Case expression "case concatMap readIO1 (reads s) of { x : [] -> return x; [] -> ioError (userError ('N' : 'P' : [])); _ -> ioError (userError ('A' : 'P' : []))} " is transformed to "readIO2 (x : []) = return x; readIO2 [] = ioError (userError ('N' : 'P' : [])); readIO2 _ = ioError (userError ('A' : 'P' : [])); " The following Case expression "case vu77 of { (ds,r) -> (foldl1 (readInt0 radix) (map (fromIntegral . digToInt) ds),r) : []; _ -> []} " is transformed to "readInt10 radix digToInt (ds,r) = (foldl1 (readInt0 radix) (map (fromIntegral . digToInt) ds),r) : []; readInt10 radix digToInt _ = []; " The following Case expression "case concatMap read1 (reads s) of { x : [] -> x; [] -> error []; _ -> error []} " is transformed to "read2 (x : []) = x; read2 [] = error []; read2 _ = error []; " The following Case expression "case vu54 of { (ch,''' : t) -> if ch /= ''' : [] then (''' : ch ++ ''' : [],t) : [] else []; _ -> []} " is transformed to "lex00 (ch,''' : t) = if ch /= ''' : [] then (''' : ch ++ ''' : [],t) : [] else []; lex00 _ = []; " The following Case expression "case vu48 of { (')' : [],u) -> (x,u) : []; _ -> []} " is transformed to "mandatory00 x (')' : [],u) = (x,u) : []; mandatory00 x _ = []; " The following Case expression "case vu49 of { (x,t) -> concatMap (mandatory0 x) (lex t); _ -> []} " is transformed to "mandatory10 (x,t) = concatMap (mandatory0 x) (lex t); mandatory10 _ = []; " The following Case expression "case vu50 of { ('(' : [],s) -> concatMap mandatory1 (optional s); _ -> []} " is transformed to "mandatory20 ('(' : [],s) = concatMap mandatory1 (optional s); mandatory20 _ = []; " The following Case expression "case vu79 of { ('-' : [],s) -> concatMap read'0 (read'' s); _ -> []} " is transformed to "read'10 ('-' : [],s) = concatMap read'0 (read'' s); read'10 _ = []; " The following Case expression "case vu78 of { (x,t) -> (`negate` x,t) : []; _ -> []} " is transformed to "read'00 (x,t) = (`negate` x,t) : []; read'00 _ = []; " The following Case expression "case vu80 of { (n,[]) -> (n,s) : []; _ -> []} " is transformed to "read''00 s (n,[]) = (n,s) : []; read''00 s _ = []; " The following Case expression "case vu81 of { (str,s) -> concatMap (read''0 s) (readPos str); _ -> []} " is transformed to "read''10 readPos (str,s) = concatMap (read''0 s) (readPos str); read''10 readPos _ = []; " The following Case expression "case concatMap (lexEsc1 s) table of { pr : _ -> pr : []; [] -> []} " is transformed to "lexEsc2 (pr : _) = pr : []; lexEsc2 [] = []; " The following Case expression "case vu69 of { ([],s') -> (mne,s') : []; _ -> []} " is transformed to "lexEsc00 mne ([],s') = (mne,s') : []; lexEsc00 mne _ = []; " The following Case expression "case vu70 of { (c,mne) -> concatMap (lexEsc0 mne) (lexmatch mne s : []); _ -> []} " is transformed to "lexEsc10 s (c,mne) = concatMap (lexEsc0 mne) (lexmatch mne s : []); lexEsc10 s _ = []; " ---------------------------------------- (4) Obligation: mainModule Main module Main where { import qualified Prelude; } ---------------------------------------- (5) IFR (EQUIVALENT) If Reductions: The following If expression "if c `elem` '+' : '-' : [] then concatMap (lexExp0 e c) (lexDigits t) else []" is transformed to "lexExp100 e c t True = concatMap (lexExp0 e c) (lexDigits t); lexExp100 e c t False = []; " The following If expression "if primGEqNatS x y then Succ (primDivNatS (primMinusNatS x y) (Succ y)) else Zero" is transformed to "primDivNatS0 x y True = Succ (primDivNatS (primMinusNatS x y) (Succ y)); primDivNatS0 x y False = Zero; " The following If expression "if ch /= ''' : [] then (''' : ch ++ ''' : [],t) : [] else []" is transformed to "lex000 ch t True = (''' : ch ++ ''' : [],t) : []; lex000 ch t False = []; " The following If expression "if n >= 0 then x ^ n else recip (x ^ (`negate` n))" is transformed to "prPr0 x n True = x ^ n; prPr0 x n False = recip (x ^ (`negate` n)); " The following If expression "if b then mandatory else optional" is transformed to "readParen0 True = mandatory; readParen0 False = optional; " The following If expression "if primGEqNatS x y then primModNatS (primMinusNatS x y) (Succ y) else Succ x" is transformed to "primModNatS0 x y True = primModNatS (primMinusNatS x y) (Succ y); primModNatS0 x y False = Succ x; " ---------------------------------------- (6) Obligation: mainModule Main module Main where { import qualified Prelude; } ---------------------------------------- (7) BR (EQUIVALENT) Replaced joker patterns by fresh variables and removed binding patterns. Binding Reductions: The bind variable of the following binding Pattern "xs@(vux : vuy)" is replaced by the following term "vux : vuy" The bind variable of the following binding Pattern "xs@(vvw : vvx)" is replaced by the following term "vvw : vvx" The bind variable of the following binding Pattern "cs@(vww : vwx)" is replaced by the following term "vww : vwx" The bind variable of the following binding Pattern "s@(vzw : vzx)" is replaced by the following term "vzw : vzx" ---------------------------------------- (8) Obligation: mainModule Main module Main where { import qualified Prelude; } ---------------------------------------- (9) COR (EQUIVALENT) Cond Reductions: The following Function with conditions "takeWhile p [] = []; takeWhile p (x : xs)|p xx : takeWhile p xs|otherwise[]; " is transformed to "takeWhile p [] = takeWhile3 p []; takeWhile p (x : xs) = takeWhile2 p (x : xs); " "takeWhile1 p x xs True = x : takeWhile p xs; takeWhile1 p x xs False = takeWhile0 p x xs otherwise; " "takeWhile0 p x xs True = []; " "takeWhile2 p (x : xs) = takeWhile1 p x xs (p x); " "takeWhile3 p [] = []; takeWhile3 wwv www = takeWhile2 wwv www; " The following Function with conditions "gcd' x 0 = x; gcd' x y = gcd' y (x `rem` y); " is transformed to "gcd' x wwx = gcd'2 x wwx; gcd' x y = gcd'0 x y; " "gcd'0 x y = gcd' y (x `rem` y); " "gcd'1 True x wwx = x; gcd'1 wwy wwz wxu = gcd'0 wwz wxu; " "gcd'2 x wwx = gcd'1 (wwx == 0) x wwx; gcd'2 wxv wxw = gcd'0 wxv wxw; " The following Function with conditions "gcd 0 0 = error []; gcd x y = gcd' (abs x) (abs y) where { gcd' x 0 = x; gcd' x y = gcd' y (x `rem` y); } ; " is transformed to "gcd wxx wxy = gcd3 wxx wxy; gcd x y = gcd0 x y; " "gcd0 x y = gcd' (abs x) (abs y) where { gcd' x wwx = gcd'2 x wwx; gcd' x y = gcd'0 x y; ; gcd'0 x y = gcd' y (x `rem` y); ; gcd'1 True x wwx = x; gcd'1 wwy wwz wxu = gcd'0 wwz wxu; ; gcd'2 x wwx = gcd'1 (wwx == 0) x wwx; gcd'2 wxv wxw = gcd'0 wxv wxw; } ; " "gcd1 True wxx wxy = error []; gcd1 wxz wyu wyv = gcd0 wyu wyv; " "gcd2 True wxx wxy = gcd1 (wxy == 0) wxx wxy; gcd2 wyw wyx wyy = gcd0 wyx wyy; " "gcd3 wxx wxy = gcd2 (wxx == 0) wxx wxy; gcd3 wyz wzu = gcd0 wyz wzu; " The following Function with conditions "lexString ('"' : s) = ('"' : [],s) : []; lexString s = concatMap lexString1 (lexStrItem s); " is transformed to "lexString (wzw : s) = lexString4 (wzw : s); lexString s = lexString2 s; " "lexString2 s = concatMap lexString1 (lexStrItem s); " "lexString3 True (wzw : s) = ('"' : [],s) : []; lexString3 wzx wzy = lexString2 wzy; " "lexString4 (wzw : s) = lexString3 (wzw == '"') (wzw : s); lexString4 wzz = lexString2 wzz; " The following Function with conditions "lexStrItem ('\' : '&' : s) = ('\' : '&' : [],s) : []; lexStrItem ('\' : c : s)|isSpace cconcatMap lexStrItem0 (dropWhile isSpace s : []); lexStrItem s = lexLitChar s; " is transformed to "lexStrItem (xvx : xwv) = lexStrItem7 (xvx : xwv); lexStrItem (xuv : xuy) = lexStrItem4 (xuv : xuy); lexStrItem s = lexStrItem1 s; " "lexStrItem1 s = lexLitChar s; " "lexStrItem2 xuv c s True = concatMap lexStrItem0 (dropWhile isSpace s : []); lexStrItem2 xuv c s False = lexStrItem1 (xuv : c : s); " "lexStrItem3 True (xuv : c : s) = lexStrItem2 xuv c s (isSpace c); lexStrItem3 xuz xvu = lexStrItem1 xvu; " "lexStrItem4 (xuv : xuy) = lexStrItem3 (xuv == '\') (xuv : xuy); lexStrItem4 xvv = lexStrItem1 xvv; " "lexStrItem5 True (xvx : xvz : s) = ('\' : '&' : [],s) : []; lexStrItem5 xww xwx = lexStrItem4 xwx; " "lexStrItem6 True (xvx : xvz : s) = lexStrItem5 (xvz == '&') (xvx : xvz : s); lexStrItem6 xwy xwz = lexStrItem4 xwz; " "lexStrItem7 (xvx : xwv) = lexStrItem6 (xvx == '\') (xvx : xwv); lexStrItem7 xxu = lexStrItem4 xxu; " The following Function with conditions "lexStrItem00 ('\' : t) = ([],t) : []; lexStrItem00 vy = []; " is transformed to "lexStrItem00 (xxw : t) = lexStrItem002 (xxw : t); lexStrItem00 vy = lexStrItem000 vy; " "lexStrItem000 vy = []; " "lexStrItem001 True (xxw : t) = ([],t) : []; lexStrItem001 xxx xxy = lexStrItem000 xxy; " "lexStrItem002 (xxw : t) = lexStrItem001 (xxw == '\') (xxw : t); lexStrItem002 xxz = lexStrItem000 xxz; " The following Function with conditions "lexExp (e : s)|e `elem` 'e' : 'E' : []concatMap (lexExp1 e) (s : []) ++ concatMap (lexExp2 e) (lexDigits s); lexExp s = ([],s) : []; " is transformed to "lexExp (e : s) = lexExp5 (e : s); lexExp s = lexExp3 s; " "lexExp3 s = ([],s) : []; " "lexExp4 e s True = concatMap (lexExp1 e) (s : []) ++ concatMap (lexExp2 e) (lexDigits s); lexExp4 e s False = lexExp3 (e : s); " "lexExp5 (e : s) = lexExp4 e s (e `elem` 'e' : 'E' : []); lexExp5 xyv = lexExp3 xyv; " The following Function with conditions "lexFracExp ('.' : c : cs)|isDigit cconcatMap lexFracExp1 (lexDigits (c : cs)); lexFracExp s = lexExp s; " is transformed to "lexFracExp (xyx : xzu) = lexFracExp5 (xyx : xzu); lexFracExp s = lexFracExp2 s; " "lexFracExp2 s = lexExp s; " "lexFracExp3 xyx c cs True = concatMap lexFracExp1 (lexDigits (c : cs)); lexFracExp3 xyx c cs False = lexFracExp2 (xyx : c : cs); " "lexFracExp4 True (xyx : c : cs) = lexFracExp3 xyx c cs (isDigit c); lexFracExp4 xzv xzw = lexFracExp2 xzw; " "lexFracExp5 (xyx : xzu) = lexFracExp4 (xyx == '.') (xyx : xzu); lexFracExp5 xzx = lexFracExp2 xzx; " The following Function with conditions "lex [] = ([],[]) : []; lex (c : s)|isSpace clex (dropWhile isSpace s); lex (''' : s) = concatMap lex0 (lexLitChar s); lex ('"' : s) = concatMap lex1 (lexString s) where { lex1 vu55 = lex10 vu55; ; lex10 (str,t) = ('"' : str,t) : []; lex10 vz = []; ; lexStrItem ('\' : '&' : s) = ('\' : '&' : [],s) : []; lexStrItem ('\' : c : s)|isSpace cconcatMap lexStrItem0 (dropWhile isSpace s : []); lexStrItem s = lexLitChar s; ; lexStrItem0 vu58 = lexStrItem00 vu58; ; lexStrItem00 ('\' : t) = ([],t) : []; lexStrItem00 vy = []; ; lexString ('"' : s) = ('"' : [],s) : []; lexString s = concatMap lexString1 (lexStrItem s); ; lexString0 ch vu56 = lexString00 ch vu56; ; lexString00 ch (str,u) = (ch ++ str,u) : []; lexString00 ch vw = []; ; lexString1 vu57 = lexString10 vu57; ; lexString10 (ch,t) = concatMap (lexString0 ch) (lexString t); lexString10 vx = []; } ; lex (c : s)|isSingle c(c : [],s) : []|isSym cconcatMap (lex2 c) (span isSym s : [])|isAlpha cconcatMap (lex3 c) (span isIdChar s : [])|isDigit cconcatMap (lex5 c) (span isDigit s : [])|otherwise[] where { isIdChar c = isAlphaNum c || c `elem` '_' : ''' : []; ; isSingle c = c `elem` ',' : ';' : '(' : ')' : '[' : ']' : '{' : '}' : '_' : '`' : []; ; isSym c = c `elem` '!' : '@' : '#' : '$' : '%' : '&' : '*' : '+' : '.' : '/' : '<' : '=' : '>' : '?' : '\' : '^' : '|' : ':' : '-' : '~' : []; ; lex2 c vu59 = lex20 c vu59; ; lex20 c (sym,t) = (c : sym,t) : []; lex20 c xv = []; ; lex3 c vu60 = lex30 c vu60; ; lex30 c (nam,t) = (c : nam,t) : []; lex30 c xw = []; ; lex4 c ds vu61 = lex40 c ds vu61; ; lex40 c ds (fe,t) = (c : ds ++ fe,t) : []; lex40 c ds wz = []; ; lex5 c vu62 = lex50 c vu62; ; lex50 c (ds,s) = concatMap (lex4 c ds) (lexFracExp s); lex50 c xu = []; ; lexExp (e : s)|e `elem` 'e' : 'E' : []concatMap (lexExp1 e) (s : []) ++ concatMap (lexExp2 e) (lexDigits s); lexExp s = ([],s) : []; ; lexExp0 e c vu65 = lexExp00 e c vu65; ; lexExp00 e c (ds,u) = (e : c : ds,u) : []; lexExp00 e c wu = []; ; lexExp1 e vu66 = lexExp10 e vu66; ; lexExp10 e (c : t) = lexExp100 e c t (c `elem` '+' : '-' : []); lexExp10 e ww = []; ; lexExp100 e c t True = concatMap (lexExp0 e c) (lexDigits t); lexExp100 e c t False = []; ; lexExp2 e vu67 = lexExp20 e vu67; ; lexExp20 e (ds,t) = (e : ds,t) : []; lexExp20 e wv = []; ; lexFracExp ('.' : c : cs)|isDigit cconcatMap lexFracExp1 (lexDigits (c : cs)); lexFracExp s = lexExp s; ; lexFracExp0 ds vu63 = lexFracExp00 ds vu63; ; lexFracExp00 ds (e,u) = ('.' : ds ++ e,u) : []; lexFracExp00 ds wy = []; ; lexFracExp1 vu64 = lexFracExp10 vu64; ; lexFracExp10 (ds,t) = concatMap (lexFracExp0 ds) (lexExp t); lexFracExp10 wx = []; } ; " is transformed to "lex [] = lex19 []; lex (c : s) = lex18 (c : s); lex (yuz : s) = lex16 (yuz : s); lex (yuu : s) = lex14 (yuu : s); lex (c : s) = lex12 (c : s); " "lex12 (c : s) = lex11 c s (isSingle c) where { isIdChar c = isAlphaNum c || c `elem` '_' : ''' : []; ; isSingle c = c `elem` ',' : ';' : '(' : ')' : '[' : ']' : '{' : '}' : '_' : '`' : []; ; isSym c = c `elem` '!' : '@' : '#' : '$' : '%' : '&' : '*' : '+' : '.' : '/' : '<' : '=' : '>' : '?' : '\' : '^' : '|' : ':' : '-' : '~' : []; ; lex11 c s True = (c : [],s) : []; lex11 c s False = lex9 c s (isSym c); ; lex2 c vu59 = lex20 c vu59; ; lex20 c (sym,t) = (c : sym,t) : []; lex20 c xv = []; ; lex3 c vu60 = lex30 c vu60; ; lex30 c (nam,t) = (c : nam,t) : []; lex30 c xw = []; ; lex4 c ds vu61 = lex40 c ds vu61; ; lex40 c ds (fe,t) = (c : ds ++ fe,t) : []; lex40 c ds wz = []; ; lex5 c vu62 = lex50 c vu62; ; lex50 c (ds,s) = concatMap (lex4 c ds) (lexFracExp s); lex50 c xu = []; ; lex6 c s True = []; ; lex7 c s True = concatMap (lex5 c) (span isDigit s : []); lex7 c s False = lex6 c s otherwise; ; lex8 c s True = concatMap (lex3 c) (span isIdChar s : []); lex8 c s False = lex7 c s (isDigit c); ; lex9 c s True = concatMap (lex2 c) (span isSym s : []); lex9 c s False = lex8 c s (isAlpha c); ; lexExp (e : s) = lexExp5 (e : s); lexExp s = lexExp3 s; ; lexExp0 e c vu65 = lexExp00 e c vu65; ; lexExp00 e c (ds,u) = (e : c : ds,u) : []; lexExp00 e c wu = []; ; lexExp1 e vu66 = lexExp10 e vu66; ; lexExp10 e (c : t) = lexExp100 e c t (c `elem` '+' : '-' : []); lexExp10 e ww = []; ; lexExp100 e c t True = concatMap (lexExp0 e c) (lexDigits t); lexExp100 e c t False = []; ; lexExp2 e vu67 = lexExp20 e vu67; ; lexExp20 e (ds,t) = (e : ds,t) : []; lexExp20 e wv = []; ; lexExp3 s = ([],s) : []; ; lexExp4 e s True = concatMap (lexExp1 e) (s : []) ++ concatMap (lexExp2 e) (lexDigits s); lexExp4 e s False = lexExp3 (e : s); ; lexExp5 (e : s) = lexExp4 e s (e `elem` 'e' : 'E' : []); lexExp5 xyv = lexExp3 xyv; ; lexFracExp (xyx : xzu) = lexFracExp5 (xyx : xzu); lexFracExp s = lexFracExp2 s; ; lexFracExp0 ds vu63 = lexFracExp00 ds vu63; ; lexFracExp00 ds (e,u) = ('.' : ds ++ e,u) : []; lexFracExp00 ds wy = []; ; lexFracExp1 vu64 = lexFracExp10 vu64; ; lexFracExp10 (ds,t) = concatMap (lexFracExp0 ds) (lexExp t); lexFracExp10 wx = []; ; lexFracExp2 s = lexExp s; ; lexFracExp3 xyx c cs True = concatMap lexFracExp1 (lexDigits (c : cs)); lexFracExp3 xyx c cs False = lexFracExp2 (xyx : c : cs); ; lexFracExp4 True (xyx : c : cs) = lexFracExp3 xyx c cs (isDigit c); lexFracExp4 xzv xzw = lexFracExp2 xzw; ; lexFracExp5 (xyx : xzu) = lexFracExp4 (xyx == '.') (xyx : xzu); lexFracExp5 xzx = lexFracExp2 xzx; } ; " "lex13 True (yuu : s) = concatMap lex1 (lexString s) where { lex1 vu55 = lex10 vu55; ; lex10 (str,t) = ('"' : str,t) : []; lex10 vz = []; ; lexStrItem (xvx : xwv) = lexStrItem7 (xvx : xwv); lexStrItem (xuv : xuy) = lexStrItem4 (xuv : xuy); lexStrItem s = lexStrItem1 s; ; lexStrItem0 vu58 = lexStrItem00 vu58; ; lexStrItem00 (xxw : t) = lexStrItem002 (xxw : t); lexStrItem00 vy = lexStrItem000 vy; ; lexStrItem000 vy = []; ; lexStrItem001 True (xxw : t) = ([],t) : []; lexStrItem001 xxx xxy = lexStrItem000 xxy; ; lexStrItem002 (xxw : t) = lexStrItem001 (xxw == '\') (xxw : t); lexStrItem002 xxz = lexStrItem000 xxz; ; lexStrItem1 s = lexLitChar s; ; lexStrItem2 xuv c s True = concatMap lexStrItem0 (dropWhile isSpace s : []); lexStrItem2 xuv c s False = lexStrItem1 (xuv : c : s); ; lexStrItem3 True (xuv : c : s) = lexStrItem2 xuv c s (isSpace c); lexStrItem3 xuz xvu = lexStrItem1 xvu; ; lexStrItem4 (xuv : xuy) = lexStrItem3 (xuv == '\') (xuv : xuy); lexStrItem4 xvv = lexStrItem1 xvv; ; lexStrItem5 True (xvx : xvz : s) = ('\' : '&' : [],s) : []; lexStrItem5 xww xwx = lexStrItem4 xwx; ; lexStrItem6 True (xvx : xvz : s) = lexStrItem5 (xvz == '&') (xvx : xvz : s); lexStrItem6 xwy xwz = lexStrItem4 xwz; ; lexStrItem7 (xvx : xwv) = lexStrItem6 (xvx == '\') (xvx : xwv); lexStrItem7 xxu = lexStrItem4 xxu; ; lexString (wzw : s) = lexString4 (wzw : s); lexString s = lexString2 s; ; lexString0 ch vu56 = lexString00 ch vu56; ; lexString00 ch (str,u) = (ch ++ str,u) : []; lexString00 ch vw = []; ; lexString1 vu57 = lexString10 vu57; ; lexString10 (ch,t) = concatMap (lexString0 ch) (lexString t); lexString10 vx = []; ; lexString2 s = concatMap lexString1 (lexStrItem s); ; lexString3 True (wzw : s) = ('"' : [],s) : []; lexString3 wzx wzy = lexString2 wzy; ; lexString4 (wzw : s) = lexString3 (wzw == '"') (wzw : s); lexString4 wzz = lexString2 wzz; } ; lex13 yuv yuw = lex12 yuw; " "lex14 (yuu : s) = lex13 (yuu == '"') (yuu : s); lex14 yux = lex12 yux; " "lex15 True (yuz : s) = concatMap lex0 (lexLitChar s); lex15 yvu yvv = lex14 yvv; " "lex16 (yuz : s) = lex15 (yuz == ''') (yuz : s); lex16 yvw = lex14 yvw; " "lex17 c s True = lex (dropWhile isSpace s); lex17 c s False = lex16 (c : s); " "lex18 (c : s) = lex17 c s (isSpace c); lex18 yvy = lex16 yvy; " "lex19 [] = ([],[]) : []; lex19 ywu = lex18 ywu; " The following Function with conditions "reduce x y|y == 0error []|otherwisex `quot` d :% (y `quot` d) where { d = gcd x y; } ; " is transformed to "reduce x y = reduce2 x y; " "reduce2 x y = reduce1 x y (y == 0) where { d = gcd x y; ; reduce0 x y True = x `quot` d :% (y `quot` d); ; reduce1 x y True = error []; reduce1 x y False = reduce0 x y otherwise; } ; " The following Function with conditions "signumReal x|x == 00|x > 01|otherwise-1; " is transformed to "signumReal x = signumReal3 x; " "signumReal2 x True = 0; signumReal2 x False = signumReal1 x (x > 0); " "signumReal1 x True = 1; signumReal1 x False = signumReal0 x otherwise; " "signumReal0 x True = -1; " "signumReal3 x = signumReal2 x (x == 0); " The following Function with conditions "undefined |Falseundefined; " is transformed to "undefined = undefined1; " "undefined0 True = undefined; " "undefined1 = undefined0 False; " The following Function with conditions "readExp (e : s)|e `elem` 'e' : 'E' : []readExp' s; readExp s = (0,s) : []; " is transformed to "readExp (e : s) = readExp2 (e : s); readExp s = readExp0 s; " "readExp0 s = (0,s) : []; " "readExp1 e s True = readExp' s; readExp1 e s False = readExp0 (e : s); " "readExp2 (e : s) = readExp1 e s (e `elem` 'e' : 'E' : []); readExp2 yww = readExp0 yww; " The following Function with conditions "readExp' ('-' : s) = concatMap readExp'0 (readDec s); readExp' ('+' : s) = readDec s; readExp' s = readDec s; " is transformed to "readExp' (yxx : s) = readExp'5 (yxx : s); readExp' (ywy : s) = readExp'3 (ywy : s); readExp' s = readExp'1 s; " "readExp'1 s = readDec s; " "readExp'2 True (ywy : s) = readDec s; readExp'2 ywz yxu = readExp'1 yxu; " "readExp'3 (ywy : s) = readExp'2 (ywy == '+') (ywy : s); readExp'3 yxv = readExp'1 yxv; " "readExp'4 True (yxx : s) = concatMap readExp'0 (readDec s); readExp'4 yxy yxz = readExp'3 yxz; " "readExp'5 (yxx : s) = readExp'4 (yxx == '-') (yxx : s); readExp'5 yyu = readExp'3 yyu; " The following Function with conditions "lexFrac ('.' : s) = lexDigits s; lexFrac s = ([],s) : []; " is transformed to "lexFrac (yyw : s) = lexFrac2 (yyw : s); lexFrac s = lexFrac0 s; " "lexFrac0 s = ([],s) : []; " "lexFrac1 True (yyw : s) = lexDigits s; lexFrac1 yyx yyy = lexFrac0 yyy; " "lexFrac2 (yyw : s) = lexFrac1 (yyw == '.') (yyw : s); lexFrac2 yyz = lexFrac0 yyz; " The following Function with conditions "readFloat20 ('N' : 'a' : 'N' : [],t) = (0 / 0,t) : []; readFloat20 zx = []; " is transformed to "readFloat20 (yzw : zuz,t) = readFloat204 (yzw : zuz,t); readFloat20 zx = readFloat200 zx; " "readFloat200 zx = []; " "readFloat201 True (yzw : yzy : zuu : [],t) = (0 / 0,t) : []; readFloat201 zvu zvv = readFloat200 zvv; " "readFloat202 True (yzw : yzy : zuu : zuv,t) = readFloat201 (zuu == 'N') (yzw : yzy : zuu : zuv,t); readFloat202 zvw zvx = readFloat200 zvx; " "readFloat203 True (yzw : yzy : zux,t) = readFloat202 (yzy == 'a') (yzw : yzy : zux,t); readFloat203 zvy zvz = readFloat200 zvz; " "readFloat204 (yzw : zuz,t) = readFloat203 (yzw == 'N') (yzw : zuz,t); readFloat204 zwu = readFloat200 zwu; " The following Function with conditions "readFloat30 ('I' : 'n' : 'f' : 'i' : 'n' : 'i' : 't' : 'y' : [],t) = (1 / 0,t) : []; readFloat30 zz = []; " is transformed to "readFloat30 (zwx : vuvw,t) = readFloat309 (zwx : vuvw,t); readFloat30 zz = readFloat300 zz; " "readFloat300 zz = []; " "readFloat301 True (zwx : zwz : zxv : zxx : zxz : zyv : zyx : zyz : [],t) = (1 / 0,t) : []; readFloat301 vuvx vuvy = readFloat300 vuvy; " "readFloat302 True (zwx : zwz : zxv : zxx : zxz : zyv : zyx : zyz : zzu,t) = readFloat301 (zyz == 'y') (zwx : zwz : zxv : zxx : zxz : zyv : zyx : zyz : zzu,t); readFloat302 vuvz vuwu = readFloat300 vuwu; " "readFloat303 True (zwx : zwz : zxv : zxx : zxz : zyv : zyx : zzw,t) = readFloat302 (zyx == 't') (zwx : zwz : zxv : zxx : zxz : zyv : zyx : zzw,t); readFloat303 vuwv vuww = readFloat300 vuww; " "readFloat304 True (zwx : zwz : zxv : zxx : zxz : zyv : zzy,t) = readFloat303 (zyv == 'i') (zwx : zwz : zxv : zxx : zxz : zyv : zzy,t); readFloat304 vuwx vuwy = readFloat300 vuwy; " "readFloat305 True (zwx : zwz : zxv : zxx : zxz : vuuu,t) = readFloat304 (zxz == 'n') (zwx : zwz : zxv : zxx : zxz : vuuu,t); readFloat305 vuwz vuxu = readFloat300 vuxu; " "readFloat306 True (zwx : zwz : zxv : zxx : vuuw,t) = readFloat305 (zxx == 'i') (zwx : zwz : zxv : zxx : vuuw,t); readFloat306 vuxv vuxw = readFloat300 vuxw; " "readFloat307 True (zwx : zwz : zxv : vuuy,t) = readFloat306 (zxv == 'f') (zwx : zwz : zxv : vuuy,t); readFloat307 vuxx vuxy = readFloat300 vuxy; " "readFloat308 True (zwx : zwz : vuvu,t) = readFloat307 (zwz == 'n') (zwx : zwz : vuvu,t); readFloat308 vuxz vuyu = readFloat300 vuyu; " "readFloat309 (zwx : vuvw,t) = readFloat308 (zwx == 'I') (zwx : vuvw,t); readFloat309 vuyv = readFloat300 vuyv; " The following Function with conditions "g x n|even ng (x * x) (n `quot` 2)|otherwisef x (n - 1) (x * y); " is transformed to "g x n = g2 x n; " "g0 x n True = f x (n - 1) (x * y); " "g1 x n True = g (x * x) (n `quot` 2); g1 x n False = g0 x n otherwise; " "g2 x n = g1 x n (even n); " The following Function with conditions "f vuu 0 y = y; f x n y = g x n where { g x n|even ng (x * x) (n `quot` 2)|otherwisef x (n - 1) (x * y); } ; " is transformed to "f vuu vuyw y = f4 vuu vuyw y; f x n y = f0 x n y; " "f0 x n y = g x n where { g x n = g2 x n; ; g0 x n True = f x (n - 1) (x * y); ; g1 x n True = g (x * x) (n `quot` 2); g1 x n False = g0 x n otherwise; ; g2 x n = g1 x n (even n); } ; " "f3 True vuu vuyw y = y; f3 vuyx vuyy vuyz vuzu = f0 vuyy vuyz vuzu; " "f4 vuu vuyw y = f3 (vuyw == 0) vuu vuyw y; f4 vuzv vuzw vuzx = f0 vuzv vuzw vuzx; " The following Function with conditions "^ x 0 = 1; ^ x n|n > 0f x (n - 1) x where { f vuu 0 y = y; f x n y = g x n where { g x n|even ng (x * x) (n `quot` 2)|otherwisef x (n - 1) (x * y); } ; } ; ^ vuv vuw = error []; " is transformed to "^ x vvuu = pr4 x vvuu; ^ x n = pr2 x n; ^ vuv vuw = pr0 vuv vuw; " "pr0 vuv vuw = error []; " "pr2 x n = pr1 x n (n > 0) where { f vuu vuyw y = f4 vuu vuyw y; f x n y = f0 x n y; ; f0 x n y = g x n where { g x n = g2 x n; ; g0 x n True = f x (n - 1) (x * y); ; g1 x n True = g (x * x) (n `quot` 2); g1 x n False = g0 x n otherwise; ; g2 x n = g1 x n (even n); } ; ; f3 True vuu vuyw y = y; f3 vuyx vuyy vuyz vuzu = f0 vuyy vuyz vuzu; ; f4 vuu vuyw y = f3 (vuyw == 0) vuu vuyw y; f4 vuzv vuzw vuzx = f0 vuzv vuzw vuzx; ; pr1 x n True = f x (n - 1) x; pr1 x n False = pr0 x n; } ; pr2 vuzy vuzz = pr0 vuzy vuzz; " "pr3 True x vvuu = 1; pr3 vvuv vvuw vvux = pr2 vvuw vvux; " "pr4 x vvuu = pr3 (vvuu == 0) x vvuu; pr4 vvuy vvuz = pr2 vvuy vvuz; " The following Function with conditions "dropWhile p [] = []; dropWhile p (vux : vuy)|p vuxdropWhile p vuy|otherwisevux : vuy; " is transformed to "dropWhile p [] = dropWhile3 p []; dropWhile p (vux : vuy) = dropWhile2 p (vux : vuy); " "dropWhile0 p vux vuy True = vux : vuy; " "dropWhile1 p vux vuy True = dropWhile p vuy; dropWhile1 p vux vuy False = dropWhile0 p vux vuy otherwise; " "dropWhile2 p (vux : vuy) = dropWhile1 p vux vuy (p vux); " "dropWhile3 p [] = []; dropWhile3 vvvw vvvx = dropWhile2 vvvw vvvx; " The following Function with conditions "lex00 (ch,''' : t) = lex000 ch t (ch /= ''' : []); lex00 vvv = []; " is transformed to "lex00 (ch,vvwu : t) = lex003 (ch,vvwu : t); lex00 vvv = lex001 vvv; " "lex001 vvv = []; " "lex002 True (ch,vvwu : t) = lex000 ch t (ch /= ''' : []); lex002 vvwv vvww = lex001 vvww; " "lex003 (ch,vvwu : t) = lex002 (vvwu == ''') (ch,vvwu : t); lex003 vvwx = lex001 vvwx; " The following Function with conditions "span p [] = ([],[]); span p (vvw : vvx)|p vvw(vvw : ys,zs)|otherwise([],vvw : vvx) where { vu43 = span p vvx; ; ys = ys0 vu43; ; ys0 (ys,vvz) = ys; ; zs = zs0 vu43; ; zs0 (vvy,zs) = zs; } ; " is transformed to "span p [] = span3 p []; span p (vvw : vvx) = span2 p (vvw : vvx); " "span2 p (vvw : vvx) = span1 p vvw vvx (p vvw) where { span0 p vvw vvx True = ([],vvw : vvx); ; span1 p vvw vvx True = (vvw : ys,zs); span1 p vvw vvx False = span0 p vvw vvx otherwise; ; vu43 = span p vvx; ; ys = ys0 vu43; ; ys0 (ys,vvz) = ys; ; zs = zs0 vu43; ; zs0 (vvy,zs) = zs; } ; " "span3 p [] = ([],[]); span3 vvxu vvxv = span2 vvxu vvxv; " The following Function with conditions "lexmatch (x : xs) (y : ys)|x == ylexmatch xs ys; lexmatch xs ys = (xs,ys); " is transformed to "lexmatch (x : xs) (y : ys) = lexmatch2 (x : xs) (y : ys); lexmatch xs ys = lexmatch0 xs ys; " "lexmatch0 xs ys = (xs,ys); " "lexmatch1 x xs y ys True = lexmatch xs ys; lexmatch1 x xs y ys False = lexmatch0 (x : xs) (y : ys); " "lexmatch2 (x : xs) (y : ys) = lexmatch1 x xs y ys (x == y); lexmatch2 vvxy vvxz = lexmatch0 vvxy vvxz; " The following Function with conditions "absReal x|x >= 0x|otherwise`negate` x; " is transformed to "absReal x = absReal2 x; " "absReal0 x True = `negate` x; " "absReal1 x True = x; absReal1 x False = absReal0 x otherwise; " "absReal2 x = absReal1 x (x >= 0); " The following Function with conditions "mandatory20 ('(' : [],s) = concatMap mandatory1 (optional s); mandatory20 vyu = []; " is transformed to "mandatory20 (vvyw : vvyx,s) = mandatory202 (vvyw : vvyx,s); mandatory20 vyu = mandatory200 vyu; " "mandatory200 vyu = []; " "mandatory201 True (vvyw : [],s) = concatMap mandatory1 (optional s); mandatory201 vvyy vvyz = mandatory200 vvyz; " "mandatory202 (vvyw : vvyx,s) = mandatory201 (vvyw == '(') (vvyw : vvyx,s); mandatory202 vvzu = mandatory200 vvzu; " The following Function with conditions "mandatory00 x (')' : [],u) = (x,u) : []; mandatory00 x vyv = []; " is transformed to "mandatory00 x (vvzx : vvzy,u) = mandatory002 x (vvzx : vvzy,u); mandatory00 x vyv = mandatory000 x vyv; " "mandatory000 x vyv = []; " "mandatory001 True x (vvzx : [],u) = (x,u) : []; mandatory001 vvzz vwuu vwuv = mandatory000 vwuu vwuv; " "mandatory002 x (vvzx : vvzy,u) = mandatory001 (vvzx == ')') x (vvzx : vvzy,u); mandatory002 vwuw vwux = mandatory000 vwuw vwux; " The following Function with conditions "read'10 ('-' : [],s) = concatMap read'0 (read'' s); read'10 vyz = []; " is transformed to "read'10 (vwvu : vwvv,s) = read'102 (vwvu : vwvv,s); read'10 vyz = read'100 vyz; " "read'100 vyz = []; " "read'101 True (vwvu : [],s) = concatMap read'0 (read'' s); read'101 vwvw vwvx = read'100 vwvx; " "read'102 (vwvu : vwvv,s) = read'101 (vwvu == '-') (vwvu : vwvv,s); read'102 vwvy = read'100 vwvy; " The following Function with conditions "lexEsc (c : s)|c `elem` 'a' : 'b' : 'f' : 'n' : 'r' : 't' : 'v' : '\' : '"' : ''' : [](c : [],s) : []; lexEsc ('^' : c : s)|c >= '@' && c <= '_'('^' : c : [],s) : []; lexEsc ('o' : s) = prefix 'o' (span isOctDigit s) : []; lexEsc ('x' : s) = prefix 'x' (span isHexDigit s) : []; lexEsc (vzw : vzx)|isDigit vzwspan isDigit (vzw : vzx) : []|isUpper vzwlexEsc2 (concatMap (lexEsc1 (vzw : vzx)) table); lexEsc vzy = []; " is transformed to "lexEsc (c : s) = lexEsc16 (c : s); lexEsc (vwyu : vwyx) = lexEsc14 (vwyu : vwyx); lexEsc (vwxv : s) = lexEsc11 (vwxv : s); lexEsc (vwww : s) = lexEsc8 (vwww : s); lexEsc (vzw : vzx) = lexEsc6 (vzw : vzx); lexEsc vzy = lexEsc3 vzy; " "lexEsc3 vzy = []; " "lexEsc5 vzw vzx True = span isDigit (vzw : vzx) : []; lexEsc5 vzw vzx False = lexEsc4 vzw vzx (isUpper vzw); " "lexEsc4 vzw vzx True = lexEsc2 (concatMap (lexEsc1 (vzw : vzx)) table); lexEsc4 vzw vzx False = lexEsc3 (vzw : vzx); " "lexEsc6 (vzw : vzx) = lexEsc5 vzw vzx (isDigit vzw); lexEsc6 vwwu = lexEsc3 vwwu; " "lexEsc7 True (vwww : s) = prefix 'x' (span isHexDigit s) : []; lexEsc7 vwwx vwwy = lexEsc6 vwwy; " "lexEsc8 (vwww : s) = lexEsc7 (vwww == 'x') (vwww : s); lexEsc8 vwwz = lexEsc6 vwwz; " "lexEsc9 True (vwxv : s) = prefix 'o' (span isOctDigit s) : []; lexEsc9 vwxw vwxx = lexEsc8 vwxx; " "lexEsc11 (vwxv : s) = lexEsc9 (vwxv == 'o') (vwxv : s); lexEsc11 vwxy = lexEsc8 vwxy; " "lexEsc12 vwyu c s True = ('^' : c : [],s) : []; lexEsc12 vwyu c s False = lexEsc11 (vwyu : c : s); " "lexEsc13 True (vwyu : c : s) = lexEsc12 vwyu c s (c >= '@' && c <= '_'); lexEsc13 vwyy vwyz = lexEsc11 vwyz; " "lexEsc14 (vwyu : vwyx) = lexEsc13 (vwyu == '^') (vwyu : vwyx); lexEsc14 vwzu = lexEsc11 vwzu; " "lexEsc15 c s True = (c : [],s) : []; lexEsc15 c s False = lexEsc14 (c : s); " "lexEsc16 (c : s) = lexEsc15 c s (c `elem` 'a' : 'b' : 'f' : 'n' : 'r' : 't' : 'v' : '\' : '"' : ''' : []); lexEsc16 vwzw = lexEsc14 vwzw; " The following Function with conditions "lexLitChar [] = []; lexLitChar (c : s)|c /= '\'(c : [],s) : []|otherwisemap (prefix '\') (lexEsc s) where { lexEsc (c : s)|c `elem` 'a' : 'b' : 'f' : 'n' : 'r' : 't' : 'v' : '\' : '"' : ''' : [](c : [],s) : []; lexEsc ('^' : c : s)|c >= '@' && c <= '_'('^' : c : [],s) : []; lexEsc ('o' : s) = prefix 'o' (span isOctDigit s) : []; lexEsc ('x' : s) = prefix 'x' (span isHexDigit s) : []; lexEsc (vzw : vzx)|isDigit vzwspan isDigit (vzw : vzx) : []|isUpper vzwlexEsc2 (concatMap (lexEsc1 (vzw : vzx)) table); lexEsc vzy = []; ; lexEsc0 mne vu69 = lexEsc00 mne vu69; ; lexEsc00 mne ([],s') = (mne,s') : []; lexEsc00 mne wuu = []; ; lexEsc1 s vu70 = lexEsc10 s vu70; ; lexEsc10 s (c,mne) = concatMap (lexEsc0 mne) (lexmatch mne s : []); lexEsc10 s wuv = []; ; lexEsc2 (pr : vzz) = pr : []; lexEsc2 [] = []; ; prefix c (t,s) = (c : t,s); ; table = ('\127','D' : 'E' : 'L' : []) : asciiTab; } ; " is transformed to "lexLitChar [] = lexLitChar3 []; lexLitChar (c : s) = lexLitChar2 (c : s); " "lexLitChar2 (c : s) = lexLitChar1 c s (c /= '\') where { lexEsc (c : s) = lexEsc16 (c : s); lexEsc (vwyu : vwyx) = lexEsc14 (vwyu : vwyx); lexEsc (vwxv : s) = lexEsc11 (vwxv : s); lexEsc (vwww : s) = lexEsc8 (vwww : s); lexEsc (vzw : vzx) = lexEsc6 (vzw : vzx); lexEsc vzy = lexEsc3 vzy; ; lexEsc0 mne vu69 = lexEsc00 mne vu69; ; lexEsc00 mne ([],s') = (mne,s') : []; lexEsc00 mne wuu = []; ; lexEsc1 s vu70 = lexEsc10 s vu70; ; lexEsc10 s (c,mne) = concatMap (lexEsc0 mne) (lexmatch mne s : []); lexEsc10 s wuv = []; ; lexEsc11 (vwxv : s) = lexEsc9 (vwxv == 'o') (vwxv : s); lexEsc11 vwxy = lexEsc8 vwxy; ; lexEsc12 vwyu c s True = ('^' : c : [],s) : []; lexEsc12 vwyu c s False = lexEsc11 (vwyu : c : s); ; lexEsc13 True (vwyu : c : s) = lexEsc12 vwyu c s (c >= '@' && c <= '_'); lexEsc13 vwyy vwyz = lexEsc11 vwyz; ; lexEsc14 (vwyu : vwyx) = lexEsc13 (vwyu == '^') (vwyu : vwyx); lexEsc14 vwzu = lexEsc11 vwzu; ; lexEsc15 c s True = (c : [],s) : []; lexEsc15 c s False = lexEsc14 (c : s); ; lexEsc16 (c : s) = lexEsc15 c s (c `elem` 'a' : 'b' : 'f' : 'n' : 'r' : 't' : 'v' : '\' : '"' : ''' : []); lexEsc16 vwzw = lexEsc14 vwzw; ; lexEsc2 (pr : vzz) = pr : []; lexEsc2 [] = []; ; lexEsc3 vzy = []; ; lexEsc4 vzw vzx True = lexEsc2 (concatMap (lexEsc1 (vzw : vzx)) table); lexEsc4 vzw vzx False = lexEsc3 (vzw : vzx); ; lexEsc5 vzw vzx True = span isDigit (vzw : vzx) : []; lexEsc5 vzw vzx False = lexEsc4 vzw vzx (isUpper vzw); ; lexEsc6 (vzw : vzx) = lexEsc5 vzw vzx (isDigit vzw); lexEsc6 vwwu = lexEsc3 vwwu; ; lexEsc7 True (vwww : s) = prefix 'x' (span isHexDigit s) : []; lexEsc7 vwwx vwwy = lexEsc6 vwwy; ; lexEsc8 (vwww : s) = lexEsc7 (vwww == 'x') (vwww : s); lexEsc8 vwwz = lexEsc6 vwwz; ; lexEsc9 True (vwxv : s) = prefix 'o' (span isOctDigit s) : []; lexEsc9 vwxw vwxx = lexEsc8 vwxx; ; lexLitChar0 c s True = map (prefix '\') (lexEsc s); ; lexLitChar1 c s True = (c : [],s) : []; lexLitChar1 c s False = lexLitChar0 c s otherwise; ; prefix c (t,s) = (c : t,s); ; table = ('\127','D' : 'E' : 'L' : []) : asciiTab; } ; " "lexLitChar3 [] = []; lexLitChar3 vwzz = lexLitChar2 vwzz; " ---------------------------------------- (10) Obligation: mainModule Main module Main where { import qualified Prelude; } ---------------------------------------- (11) LetRed (EQUIVALENT) Let/Where Reductions: The bindings of the following Let/Where expression "gcd' (abs x) (abs y) where { gcd' x wwx = gcd'2 x wwx; gcd' x y = gcd'0 x y; ; gcd'0 x y = gcd' y (x `rem` y); ; gcd'1 True x wwx = x; gcd'1 wwy wwz wxu = gcd'0 wwz wxu; ; gcd'2 x wwx = gcd'1 (wwx == 0) x wwx; gcd'2 wxv wxw = gcd'0 wxv wxw; } " are unpacked to the following functions on top level "gcd0Gcd'0 x y = gcd0Gcd' y (x `rem` y); " "gcd0Gcd'2 x wwx = gcd0Gcd'1 (wwx == 0) x wwx; gcd0Gcd'2 wxv wxw = gcd0Gcd'0 wxv wxw; " "gcd0Gcd' x wwx = gcd0Gcd'2 x wwx; gcd0Gcd' x y = gcd0Gcd'0 x y; " "gcd0Gcd'1 True x wwx = x; gcd0Gcd'1 wwy wwz wxu = gcd0Gcd'0 wwz wxu; " The bindings of the following Let/Where expression "reduce1 x y (y == 0) where { d = gcd x y; ; reduce0 x y True = x `quot` d :% (y `quot` d); ; reduce1 x y True = error []; reduce1 x y False = reduce0 x y otherwise; } " are unpacked to the following functions on top level "reduce2D vxuu vxuv = gcd vxuu vxuv; " "reduce2Reduce1 vxuu vxuv x y True = error []; reduce2Reduce1 vxuu vxuv x y False = reduce2Reduce0 vxuu vxuv x y otherwise; " "reduce2Reduce0 vxuu vxuv x y True = x `quot` reduce2D vxuu vxuv :% (y `quot` reduce2D vxuu vxuv); " The bindings of the following Let/Where expression "lexLitChar1 c s (c /= '\') where { lexEsc (c : s) = lexEsc16 (c : s); lexEsc (vwyu : vwyx) = lexEsc14 (vwyu : vwyx); lexEsc (vwxv : s) = lexEsc11 (vwxv : s); lexEsc (vwww : s) = lexEsc8 (vwww : s); lexEsc (vzw : vzx) = lexEsc6 (vzw : vzx); lexEsc vzy = lexEsc3 vzy; ; lexEsc0 mne vu69 = lexEsc00 mne vu69; ; lexEsc00 mne ([],s') = (mne,s') : []; lexEsc00 mne wuu = []; ; lexEsc1 s vu70 = lexEsc10 s vu70; ; lexEsc10 s (c,mne) = concatMap (lexEsc0 mne) (lexmatch mne s : []); lexEsc10 s wuv = []; ; lexEsc11 (vwxv : s) = lexEsc9 (vwxv == 'o') (vwxv : s); lexEsc11 vwxy = lexEsc8 vwxy; ; lexEsc12 vwyu c s True = ('^' : c : [],s) : []; lexEsc12 vwyu c s False = lexEsc11 (vwyu : c : s); ; lexEsc13 True (vwyu : c : s) = lexEsc12 vwyu c s (c >= '@' && c <= '_'); lexEsc13 vwyy vwyz = lexEsc11 vwyz; ; lexEsc14 (vwyu : vwyx) = lexEsc13 (vwyu == '^') (vwyu : vwyx); lexEsc14 vwzu = lexEsc11 vwzu; ; lexEsc15 c s True = (c : [],s) : []; lexEsc15 c s False = lexEsc14 (c : s); ; lexEsc16 (c : s) = lexEsc15 c s (c `elem` 'a' : 'b' : 'f' : 'n' : 'r' : 't' : 'v' : '\' : '"' : ''' : []); lexEsc16 vwzw = lexEsc14 vwzw; ; lexEsc2 (pr : vzz) = pr : []; lexEsc2 [] = []; ; lexEsc3 vzy = []; ; lexEsc4 vzw vzx True = lexEsc2 (concatMap (lexEsc1 (vzw : vzx)) table); lexEsc4 vzw vzx False = lexEsc3 (vzw : vzx); ; lexEsc5 vzw vzx True = span isDigit (vzw : vzx) : []; lexEsc5 vzw vzx False = lexEsc4 vzw vzx (isUpper vzw); ; lexEsc6 (vzw : vzx) = lexEsc5 vzw vzx (isDigit vzw); lexEsc6 vwwu = lexEsc3 vwwu; ; lexEsc7 True (vwww : s) = prefix 'x' (span isHexDigit s) : []; lexEsc7 vwwx vwwy = lexEsc6 vwwy; ; lexEsc8 (vwww : s) = lexEsc7 (vwww == 'x') (vwww : s); lexEsc8 vwwz = lexEsc6 vwwz; ; lexEsc9 True (vwxv : s) = prefix 'o' (span isOctDigit s) : []; lexEsc9 vwxw vwxx = lexEsc8 vwxx; ; lexLitChar0 c s True = map (prefix '\') (lexEsc s); ; lexLitChar1 c s True = (c : [],s) : []; lexLitChar1 c s False = lexLitChar0 c s otherwise; ; prefix c (t,s) = (c : t,s); ; table = ('\127','D' : 'E' : 'L' : []) : asciiTab; } " are unpacked to the following functions on top level "lexLitChar2LexEsc0 mne vu69 = lexLitChar2LexEsc00 mne vu69; " "lexLitChar2LexEsc10 s (c,mne) = concatMap (lexLitChar2LexEsc0 mne) (lexmatch mne s : []); lexLitChar2LexEsc10 s wuv = []; " "lexLitChar2LexEsc16 (c : s) = lexLitChar2LexEsc15 c s (c `elem` 'a' : 'b' : 'f' : 'n' : 'r' : 't' : 'v' : '\' : '"' : ''' : []); lexLitChar2LexEsc16 vwzw = lexLitChar2LexEsc14 vwzw; " "lexLitChar2LexEsc00 mne ([],s') = (mne,s') : []; lexLitChar2LexEsc00 mne wuu = []; " "lexLitChar2LexLitChar0 c s True = map (lexLitChar2Prefix '\') (lexLitChar2LexEsc s); " "lexLitChar2LexEsc11 (vwxv : s) = lexLitChar2LexEsc9 (vwxv == 'o') (vwxv : s); lexLitChar2LexEsc11 vwxy = lexLitChar2LexEsc8 vwxy; " "lexLitChar2LexEsc7 True (vwww : s) = lexLitChar2Prefix 'x' (span isHexDigit s) : []; lexLitChar2LexEsc7 vwwx vwwy = lexLitChar2LexEsc6 vwwy; " "lexLitChar2Table = ('\127','D' : 'E' : 'L' : []) : asciiTab; " "lexLitChar2LexEsc9 True (vwxv : s) = lexLitChar2Prefix 'o' (span isOctDigit s) : []; lexLitChar2LexEsc9 vwxw vwxx = lexLitChar2LexEsc8 vwxx; " "lexLitChar2LexEsc4 vzw vzx True = lexLitChar2LexEsc2 (concatMap (lexLitChar2LexEsc1 (vzw : vzx)) lexLitChar2Table); lexLitChar2LexEsc4 vzw vzx False = lexLitChar2LexEsc3 (vzw : vzx); " "lexLitChar2LexEsc1 s vu70 = lexLitChar2LexEsc10 s vu70; " "lexLitChar2LexEsc5 vzw vzx True = span isDigit (vzw : vzx) : []; lexLitChar2LexEsc5 vzw vzx False = lexLitChar2LexEsc4 vzw vzx (isUpper vzw); " "lexLitChar2LexEsc3 vzy = []; " "lexLitChar2Prefix c (t,s) = (c : t,s); " "lexLitChar2LexEsc15 c s True = (c : [],s) : []; lexLitChar2LexEsc15 c s False = lexLitChar2LexEsc14 (c : s); " "lexLitChar2LexEsc8 (vwww : s) = lexLitChar2LexEsc7 (vwww == 'x') (vwww : s); lexLitChar2LexEsc8 vwwz = lexLitChar2LexEsc6 vwwz; " "lexLitChar2LexEsc6 (vzw : vzx) = lexLitChar2LexEsc5 vzw vzx (isDigit vzw); lexLitChar2LexEsc6 vwwu = lexLitChar2LexEsc3 vwwu; " "lexLitChar2LexEsc2 (pr : vzz) = pr : []; lexLitChar2LexEsc2 [] = []; " "lexLitChar2LexEsc12 vwyu c s True = ('^' : c : [],s) : []; lexLitChar2LexEsc12 vwyu c s False = lexLitChar2LexEsc11 (vwyu : c : s); " "lexLitChar2LexEsc13 True (vwyu : c : s) = lexLitChar2LexEsc12 vwyu c s (c >= '@' && c <= '_'); lexLitChar2LexEsc13 vwyy vwyz = lexLitChar2LexEsc11 vwyz; " "lexLitChar2LexEsc (c : s) = lexLitChar2LexEsc16 (c : s); lexLitChar2LexEsc (vwyu : vwyx) = lexLitChar2LexEsc14 (vwyu : vwyx); lexLitChar2LexEsc (vwxv : s) = lexLitChar2LexEsc11 (vwxv : s); lexLitChar2LexEsc (vwww : s) = lexLitChar2LexEsc8 (vwww : s); lexLitChar2LexEsc (vzw : vzx) = lexLitChar2LexEsc6 (vzw : vzx); lexLitChar2LexEsc vzy = lexLitChar2LexEsc3 vzy; " "lexLitChar2LexLitChar1 c s True = (c : [],s) : []; lexLitChar2LexLitChar1 c s False = lexLitChar2LexLitChar0 c s otherwise; " "lexLitChar2LexEsc14 (vwyu : vwyx) = lexLitChar2LexEsc13 (vwyu == '^') (vwyu : vwyx); lexLitChar2LexEsc14 vwzu = lexLitChar2LexEsc11 vwzu; " The bindings of the following Let/Where expression "concatMap readFloat1 (readFix r) ++ concatMap readFloat2 (lex r) ++ concatMap readFloat3 (lex r) where { lexFrac (yyw : s) = lexFrac2 (yyw : s); lexFrac s = lexFrac0 s; ; lexFrac0 s = ([],s) : []; ; lexFrac1 True (yyw : s) = lexDigits s; lexFrac1 yyx yyy = lexFrac0 yyy; ; lexFrac2 (yyw : s) = lexFrac1 (yyw == '.') (yyw : s); lexFrac2 yyz = lexFrac0 yyz; ; readExp (e : s) = readExp2 (e : s); readExp s = readExp0 s; ; readExp' (yxx : s) = readExp'5 (yxx : s); readExp' (ywy : s) = readExp'3 (ywy : s); readExp' s = readExp'1 s; ; readExp'0 vu88 = readExp'00 vu88; ; readExp'00 (k,t) = (`negate` k,t) : []; readExp'00 yz = []; ; readExp'1 s = readDec s; ; readExp'2 True (ywy : s) = readDec s; readExp'2 ywz yxu = readExp'1 yxu; ; readExp'3 (ywy : s) = readExp'2 (ywy == '+') (ywy : s); readExp'3 yxv = readExp'1 yxv; ; readExp'4 True (yxx : s) = concatMap readExp'0 (readDec s); readExp'4 yxy yxz = readExp'3 yxz; ; readExp'5 (yxx : s) = readExp'4 (yxx == '-') (yxx : s); readExp'5 yyu = readExp'3 yyu; ; readExp0 s = (0,s) : []; ; readExp1 e s True = readExp' s; readExp1 e s False = readExp0 (e : s); ; readExp2 (e : s) = readExp1 e s (e `elem` 'e' : 'E' : []); readExp2 yww = readExp0 yww; ; readFix r = concatMap readFix1 (lexDigits r); ; readFix0 ds vu86 = readFix00 ds vu86; ; readFix00 ds (ds',t) = (read (ds ++ ds'),length ds',t) : []; readFix00 ds zu = []; ; readFix1 vu87 = readFix10 vu87; ; readFix10 (ds,d) = concatMap (readFix0 ds) (lexFrac d); readFix10 zv = []; ; readFloat0 n d vu82 = readFloat00 n d vu82; ; readFloat00 n d (k,t) = (fromRational (n % 1 * 10 ^^ (k - d)),t) : []; readFloat00 n d zw = []; ; readFloat1 vu83 = readFloat10 vu83; ; readFloat10 (n,d,s) = concatMap (readFloat0 n d) (readExp s); readFloat10 zy = []; ; readFloat2 vu84 = readFloat20 vu84; ; readFloat20 (yzw : zuz,t) = readFloat204 (yzw : zuz,t); readFloat20 zx = readFloat200 zx; ; readFloat200 zx = []; ; readFloat201 True (yzw : yzy : zuu : [],t) = (0 / 0,t) : []; readFloat201 zvu zvv = readFloat200 zvv; ; readFloat202 True (yzw : yzy : zuu : zuv,t) = readFloat201 (zuu == 'N') (yzw : yzy : zuu : zuv,t); readFloat202 zvw zvx = readFloat200 zvx; ; readFloat203 True (yzw : yzy : zux,t) = readFloat202 (yzy == 'a') (yzw : yzy : zux,t); readFloat203 zvy zvz = readFloat200 zvz; ; readFloat204 (yzw : zuz,t) = readFloat203 (yzw == 'N') (yzw : zuz,t); readFloat204 zwu = readFloat200 zwu; ; readFloat3 vu85 = readFloat30 vu85; ; readFloat30 (zwx : vuvw,t) = readFloat309 (zwx : vuvw,t); readFloat30 zz = readFloat300 zz; ; readFloat300 zz = []; ; readFloat301 True (zwx : zwz : zxv : zxx : zxz : zyv : zyx : zyz : [],t) = (1 / 0,t) : []; readFloat301 vuvx vuvy = readFloat300 vuvy; ; readFloat302 True (zwx : zwz : zxv : zxx : zxz : zyv : zyx : zyz : zzu,t) = readFloat301 (zyz == 'y') (zwx : zwz : zxv : zxx : zxz : zyv : zyx : zyz : zzu,t); readFloat302 vuvz vuwu = readFloat300 vuwu; ; readFloat303 True (zwx : zwz : zxv : zxx : zxz : zyv : zyx : zzw,t) = readFloat302 (zyx == 't') (zwx : zwz : zxv : zxx : zxz : zyv : zyx : zzw,t); readFloat303 vuwv vuww = readFloat300 vuww; ; readFloat304 True (zwx : zwz : zxv : zxx : zxz : zyv : zzy,t) = readFloat303 (zyv == 'i') (zwx : zwz : zxv : zxx : zxz : zyv : zzy,t); readFloat304 vuwx vuwy = readFloat300 vuwy; ; readFloat305 True (zwx : zwz : zxv : zxx : zxz : vuuu,t) = readFloat304 (zxz == 'n') (zwx : zwz : zxv : zxx : zxz : vuuu,t); readFloat305 vuwz vuxu = readFloat300 vuxu; ; readFloat306 True (zwx : zwz : zxv : zxx : vuuw,t) = readFloat305 (zxx == 'i') (zwx : zwz : zxv : zxx : vuuw,t); readFloat306 vuxv vuxw = readFloat300 vuxw; ; readFloat307 True (zwx : zwz : zxv : vuuy,t) = readFloat306 (zxv == 'f') (zwx : zwz : zxv : vuuy,t); readFloat307 vuxx vuxy = readFloat300 vuxy; ; readFloat308 True (zwx : zwz : vuvu,t) = readFloat307 (zwz == 'n') (zwx : zwz : vuvu,t); readFloat308 vuxz vuyu = readFloat300 vuyu; ; readFloat309 (zwx : vuvw,t) = readFloat308 (zwx == 'I') (zwx : vuvw,t); readFloat309 vuyv = readFloat300 vuyv; } " are unpacked to the following functions on top level "readFloatReadFloat30 (zwx : vuvw,t) = readFloatReadFloat309 (zwx : vuvw,t); readFloatReadFloat30 zz = readFloatReadFloat300 zz; " "readFloatReadFloat200 zx = []; " "readFloatReadFloat2 vu84 = readFloatReadFloat20 vu84; " "readFloatReadFloat309 (zwx : vuvw,t) = readFloatReadFloat308 (zwx == 'I') (zwx : vuvw,t); readFloatReadFloat309 vuyv = readFloatReadFloat300 vuyv; " "readFloatReadFloat301 True (zwx : zwz : zxv : zxx : zxz : zyv : zyx : zyz : [],t) = (1 / 0,t) : []; readFloatReadFloat301 vuvx vuvy = readFloatReadFloat300 vuvy; " "readFloatReadFix10 (ds,d) = concatMap (readFloatReadFix0 ds) (readFloatLexFrac d); readFloatReadFix10 zv = []; " "readFloatReadFloat20 (yzw : zuz,t) = readFloatReadFloat204 (yzw : zuz,t); readFloatReadFloat20 zx = readFloatReadFloat200 zx; " "readFloatReadFloat201 True (yzw : yzy : zuu : [],t) = (0 / 0,t) : []; readFloatReadFloat201 zvu zvv = readFloatReadFloat200 zvv; " "readFloatReadExp'1 s = readDec s; " "readFloatReadExp'0 vu88 = readFloatReadExp'00 vu88; " "readFloatReadFloat306 True (zwx : zwz : zxv : zxx : vuuw,t) = readFloatReadFloat305 (zxx == 'i') (zwx : zwz : zxv : zxx : vuuw,t); readFloatReadFloat306 vuxv vuxw = readFloatReadFloat300 vuxw; " "readFloatReadFloat304 True (zwx : zwz : zxv : zxx : zxz : zyv : zzy,t) = readFloatReadFloat303 (zyv == 'i') (zwx : zwz : zxv : zxx : zxz : zyv : zzy,t); readFloatReadFloat304 vuwx vuwy = readFloatReadFloat300 vuwy; " "readFloatReadExp'3 (ywy : s) = readFloatReadExp'2 (ywy == '+') (ywy : s); readFloatReadExp'3 yxv = readFloatReadExp'1 yxv; " "readFloatReadFloat203 True (yzw : yzy : zux,t) = readFloatReadFloat202 (yzy == 'a') (yzw : yzy : zux,t); readFloatReadFloat203 zvy zvz = readFloatReadFloat200 zvz; " "readFloatReadFloat300 zz = []; " "readFloatReadExp (e : s) = readFloatReadExp2 (e : s); readFloatReadExp s = readFloatReadExp0 s; " "readFloatReadFloat10 (n,d,s) = concatMap (readFloatReadFloat0 n d) (readFloatReadExp s); readFloatReadFloat10 zy = []; " "readFloatReadFix00 ds (ds',t) = (read (ds ++ ds'),length ds',t) : []; readFloatReadFix00 ds zu = []; " "readFloatReadFloat3 vu85 = readFloatReadFloat30 vu85; " "readFloatReadFloat00 n d (k,t) = (fromRational (n % 1 * 10 ^^ (k - d)),t) : []; readFloatReadFloat00 n d zw = []; " "readFloatReadFloat202 True (yzw : yzy : zuu : zuv,t) = readFloatReadFloat201 (zuu == 'N') (yzw : yzy : zuu : zuv,t); readFloatReadFloat202 zvw zvx = readFloatReadFloat200 zvx; " "readFloatLexFrac0 s = ([],s) : []; " "readFloatLexFrac1 True (yyw : s) = lexDigits s; readFloatLexFrac1 yyx yyy = readFloatLexFrac0 yyy; " "readFloatReadExp'5 (yxx : s) = readFloatReadExp'4 (yxx == '-') (yxx : s); readFloatReadExp'5 yyu = readFloatReadExp'3 yyu; " "readFloatReadFloat302 True (zwx : zwz : zxv : zxx : zxz : zyv : zyx : zyz : zzu,t) = readFloatReadFloat301 (zyz == 'y') (zwx : zwz : zxv : zxx : zxz : zyv : zyx : zyz : zzu,t); readFloatReadFloat302 vuvz vuwu = readFloatReadFloat300 vuwu; " "readFloatReadFloat1 vu83 = readFloatReadFloat10 vu83; " "readFloatLexFrac (yyw : s) = readFloatLexFrac2 (yyw : s); readFloatLexFrac s = readFloatLexFrac0 s; " "readFloatReadExp'4 True (yxx : s) = concatMap readFloatReadExp'0 (readDec s); readFloatReadExp'4 yxy yxz = readFloatReadExp'3 yxz; " "readFloatReadFix r = concatMap readFloatReadFix1 (lexDigits r); " "readFloatReadFloat308 True (zwx : zwz : vuvu,t) = readFloatReadFloat307 (zwz == 'n') (zwx : zwz : vuvu,t); readFloatReadFloat308 vuxz vuyu = readFloatReadFloat300 vuyu; " "readFloatReadFloat204 (yzw : zuz,t) = readFloatReadFloat203 (yzw == 'N') (yzw : zuz,t); readFloatReadFloat204 zwu = readFloatReadFloat200 zwu; " "readFloatReadExp'00 (k,t) = (`negate` k,t) : []; readFloatReadExp'00 yz = []; " "readFloatLexFrac2 (yyw : s) = readFloatLexFrac1 (yyw == '.') (yyw : s); readFloatLexFrac2 yyz = readFloatLexFrac0 yyz; " "readFloatReadExp1 e s True = readFloatReadExp' s; readFloatReadExp1 e s False = readFloatReadExp0 (e : s); " "readFloatReadFix1 vu87 = readFloatReadFix10 vu87; " "readFloatReadExp'2 True (ywy : s) = readDec s; readFloatReadExp'2 ywz yxu = readFloatReadExp'1 yxu; " "readFloatReadFloat305 True (zwx : zwz : zxv : zxx : zxz : vuuu,t) = readFloatReadFloat304 (zxz == 'n') (zwx : zwz : zxv : zxx : zxz : vuuu,t); readFloatReadFloat305 vuwz vuxu = readFloatReadFloat300 vuxu; " "readFloatReadExp0 s = (0,s) : []; " "readFloatReadExp2 (e : s) = readFloatReadExp1 e s (e `elem` 'e' : 'E' : []); readFloatReadExp2 yww = readFloatReadExp0 yww; " "readFloatReadFloat0 n d vu82 = readFloatReadFloat00 n d vu82; " "readFloatReadExp' (yxx : s) = readFloatReadExp'5 (yxx : s); readFloatReadExp' (ywy : s) = readFloatReadExp'3 (ywy : s); readFloatReadExp' s = readFloatReadExp'1 s; " "readFloatReadFloat303 True (zwx : zwz : zxv : zxx : zxz : zyv : zyx : zzw,t) = readFloatReadFloat302 (zyx == 't') (zwx : zwz : zxv : zxx : zxz : zyv : zyx : zzw,t); readFloatReadFloat303 vuwv vuww = readFloatReadFloat300 vuww; " "readFloatReadFix0 ds vu86 = readFloatReadFix00 ds vu86; " "readFloatReadFloat307 True (zwx : zwz : zxv : vuuy,t) = readFloatReadFloat306 (zxv == 'f') (zwx : zwz : zxv : vuuy,t); readFloatReadFloat307 vuxx vuxy = readFloatReadFloat300 vuxy; " The bindings of the following Let/Where expression "pr1 x n (n > 0) where { f vuu vuyw y = f4 vuu vuyw y; f x n y = f0 x n y; ; f0 x n y = g x n where { g x n = g2 x n; ; g0 x n True = f x (n - 1) (x * y); ; g1 x n True = g (x * x) (n `quot` 2); g1 x n False = g0 x n otherwise; ; g2 x n = g1 x n (even n); } ; ; f3 True vuu vuyw y = y; f3 vuyx vuyy vuyz vuzu = f0 vuyy vuyz vuzu; ; f4 vuu vuyw y = f3 (vuyw == 0) vuu vuyw y; f4 vuzv vuzw vuzx = f0 vuzv vuzw vuzx; ; pr1 x n True = f x (n - 1) x; pr1 x n False = pr0 x n; } " are unpacked to the following functions on top level "pr2F3 True vuu vuyw y = y; pr2F3 vuyx vuyy vuyz vuzu = pr2F0 vuyy vuyz vuzu; " "pr2F0 x n y = pr2F0G y x n; " "pr2F4 vuu vuyw y = pr2F3 (vuyw == 0) vuu vuyw y; pr2F4 vuzv vuzw vuzx = pr2F0 vuzv vuzw vuzx; " "pr2F vuu vuyw y = pr2F4 vuu vuyw y; pr2F x n y = pr2F0 x n y; " "pr2Pr1 x n True = pr2F x (n - 1) x; pr2Pr1 x n False = pr0 x n; " The bindings of the following Let/Where expression "concatMap lex1 (lexString s) where { lex1 vu55 = lex10 vu55; ; lex10 (str,t) = ('"' : str,t) : []; lex10 vz = []; ; lexStrItem (xvx : xwv) = lexStrItem7 (xvx : xwv); lexStrItem (xuv : xuy) = lexStrItem4 (xuv : xuy); lexStrItem s = lexStrItem1 s; ; lexStrItem0 vu58 = lexStrItem00 vu58; ; lexStrItem00 (xxw : t) = lexStrItem002 (xxw : t); lexStrItem00 vy = lexStrItem000 vy; ; lexStrItem000 vy = []; ; lexStrItem001 True (xxw : t) = ([],t) : []; lexStrItem001 xxx xxy = lexStrItem000 xxy; ; lexStrItem002 (xxw : t) = lexStrItem001 (xxw == '\') (xxw : t); lexStrItem002 xxz = lexStrItem000 xxz; ; lexStrItem1 s = lexLitChar s; ; lexStrItem2 xuv c s True = concatMap lexStrItem0 (dropWhile isSpace s : []); lexStrItem2 xuv c s False = lexStrItem1 (xuv : c : s); ; lexStrItem3 True (xuv : c : s) = lexStrItem2 xuv c s (isSpace c); lexStrItem3 xuz xvu = lexStrItem1 xvu; ; lexStrItem4 (xuv : xuy) = lexStrItem3 (xuv == '\') (xuv : xuy); lexStrItem4 xvv = lexStrItem1 xvv; ; lexStrItem5 True (xvx : xvz : s) = ('\' : '&' : [],s) : []; lexStrItem5 xww xwx = lexStrItem4 xwx; ; lexStrItem6 True (xvx : xvz : s) = lexStrItem5 (xvz == '&') (xvx : xvz : s); lexStrItem6 xwy xwz = lexStrItem4 xwz; ; lexStrItem7 (xvx : xwv) = lexStrItem6 (xvx == '\') (xvx : xwv); lexStrItem7 xxu = lexStrItem4 xxu; ; lexString (wzw : s) = lexString4 (wzw : s); lexString s = lexString2 s; ; lexString0 ch vu56 = lexString00 ch vu56; ; lexString00 ch (str,u) = (ch ++ str,u) : []; lexString00 ch vw = []; ; lexString1 vu57 = lexString10 vu57; ; lexString10 (ch,t) = concatMap (lexString0 ch) (lexString t); lexString10 vx = []; ; lexString2 s = concatMap lexString1 (lexStrItem s); ; lexString3 True (wzw : s) = ('"' : [],s) : []; lexString3 wzx wzy = lexString2 wzy; ; lexString4 (wzw : s) = lexString3 (wzw == '"') (wzw : s); lexString4 wzz = lexString2 wzz; } " are unpacked to the following functions on top level "lex13LexString10 (ch,t) = concatMap (lex13LexString0 ch) (lex13LexString t); lex13LexString10 vx = []; " "lex13LexStrItem002 (xxw : t) = lex13LexStrItem001 (xxw == '\') (xxw : t); lex13LexStrItem002 xxz = lex13LexStrItem000 xxz; " "lex13Lex1 vu55 = lex13Lex10 vu55; " "lex13LexStrItem2 xuv c s True = concatMap lex13LexStrItem0 (dropWhile isSpace s : []); lex13LexStrItem2 xuv c s False = lex13LexStrItem1 (xuv : c : s); " "lex13LexString2 s = concatMap lex13LexString1 (lex13LexStrItem s); " "lex13LexStrItem (xvx : xwv) = lex13LexStrItem7 (xvx : xwv); lex13LexStrItem (xuv : xuy) = lex13LexStrItem4 (xuv : xuy); lex13LexStrItem s = lex13LexStrItem1 s; " "lex13LexString4 (wzw : s) = lex13LexString3 (wzw == '"') (wzw : s); lex13LexString4 wzz = lex13LexString2 wzz; " "lex13LexStrItem0 vu58 = lex13LexStrItem00 vu58; " "lex13LexStrItem3 True (xuv : c : s) = lex13LexStrItem2 xuv c s (isSpace c); lex13LexStrItem3 xuz xvu = lex13LexStrItem1 xvu; " "lex13LexStrItem6 True (xvx : xvz : s) = lex13LexStrItem5 (xvz == '&') (xvx : xvz : s); lex13LexStrItem6 xwy xwz = lex13LexStrItem4 xwz; " "lex13LexString (wzw : s) = lex13LexString4 (wzw : s); lex13LexString s = lex13LexString2 s; " "lex13LexStrItem4 (xuv : xuy) = lex13LexStrItem3 (xuv == '\') (xuv : xuy); lex13LexStrItem4 xvv = lex13LexStrItem1 xvv; " "lex13LexString3 True (wzw : s) = ('"' : [],s) : []; lex13LexString3 wzx wzy = lex13LexString2 wzy; " "lex13LexString1 vu57 = lex13LexString10 vu57; " "lex13LexStrItem7 (xvx : xwv) = lex13LexStrItem6 (xvx == '\') (xvx : xwv); lex13LexStrItem7 xxu = lex13LexStrItem4 xxu; " "lex13Lex10 (str,t) = ('"' : str,t) : []; lex13Lex10 vz = []; " "lex13LexStrItem1 s = lexLitChar s; " "lex13LexStrItem00 (xxw : t) = lex13LexStrItem002 (xxw : t); lex13LexStrItem00 vy = lex13LexStrItem000 vy; " "lex13LexString00 ch (str,u) = (ch ++ str,u) : []; lex13LexString00 ch vw = []; " "lex13LexStrItem000 vy = []; " "lex13LexStrItem5 True (xvx : xvz : s) = ('\' : '&' : [],s) : []; lex13LexStrItem5 xww xwx = lex13LexStrItem4 xwx; " "lex13LexStrItem001 True (xxw : t) = ([],t) : []; lex13LexStrItem001 xxx xxy = lex13LexStrItem000 xxy; " "lex13LexString0 ch vu56 = lex13LexString00 ch vu56; " The bindings of the following Let/Where expression "span1 p vvw vvx (p vvw) where { span0 p vvw vvx True = ([],vvw : vvx); ; span1 p vvw vvx True = (vvw : ys,zs); span1 p vvw vvx False = span0 p vvw vvx otherwise; ; vu43 = span p vvx; ; ys = ys0 vu43; ; ys0 (ys,vvz) = ys; ; zs = zs0 vu43; ; zs0 (vvy,zs) = zs; } " are unpacked to the following functions on top level "span2Vu43 vxuw vxux = span vxuw vxux; " "span2Ys vxuw vxux = span2Ys0 vxuw vxux (span2Vu43 vxuw vxux); " "span2Ys0 vxuw vxux (ys,vvz) = ys; " "span2Zs vxuw vxux = span2Zs0 vxuw vxux (span2Vu43 vxuw vxux); " "span2Span1 vxuw vxux p vvw vvx True = (vvw : span2Ys vxuw vxux,span2Zs vxuw vxux); span2Span1 vxuw vxux p vvw vvx False = span2Span0 vxuw vxux p vvw vvx otherwise; " "span2Zs0 vxuw vxux (vvy,zs) = zs; " "span2Span0 vxuw vxux p vvw vvx True = ([],vvw : vvx); " The bindings of the following Let/Where expression "lex11 c s (isSingle c) where { isIdChar c = isAlphaNum c || c `elem` '_' : ''' : []; ; isSingle c = c `elem` ',' : ';' : '(' : ')' : '[' : ']' : '{' : '}' : '_' : '`' : []; ; isSym c = c `elem` '!' : '@' : '#' : '$' : '%' : '&' : '*' : '+' : '.' : '/' : '<' : '=' : '>' : '?' : '\' : '^' : '|' : ':' : '-' : '~' : []; ; lex11 c s True = (c : [],s) : []; lex11 c s False = lex9 c s (isSym c); ; lex2 c vu59 = lex20 c vu59; ; lex20 c (sym,t) = (c : sym,t) : []; lex20 c xv = []; ; lex3 c vu60 = lex30 c vu60; ; lex30 c (nam,t) = (c : nam,t) : []; lex30 c xw = []; ; lex4 c ds vu61 = lex40 c ds vu61; ; lex40 c ds (fe,t) = (c : ds ++ fe,t) : []; lex40 c ds wz = []; ; lex5 c vu62 = lex50 c vu62; ; lex50 c (ds,s) = concatMap (lex4 c ds) (lexFracExp s); lex50 c xu = []; ; lex6 c s True = []; ; lex7 c s True = concatMap (lex5 c) (span isDigit s : []); lex7 c s False = lex6 c s otherwise; ; lex8 c s True = concatMap (lex3 c) (span isIdChar s : []); lex8 c s False = lex7 c s (isDigit c); ; lex9 c s True = concatMap (lex2 c) (span isSym s : []); lex9 c s False = lex8 c s (isAlpha c); ; lexExp (e : s) = lexExp5 (e : s); lexExp s = lexExp3 s; ; lexExp0 e c vu65 = lexExp00 e c vu65; ; lexExp00 e c (ds,u) = (e : c : ds,u) : []; lexExp00 e c wu = []; ; lexExp1 e vu66 = lexExp10 e vu66; ; lexExp10 e (c : t) = lexExp100 e c t (c `elem` '+' : '-' : []); lexExp10 e ww = []; ; lexExp100 e c t True = concatMap (lexExp0 e c) (lexDigits t); lexExp100 e c t False = []; ; lexExp2 e vu67 = lexExp20 e vu67; ; lexExp20 e (ds,t) = (e : ds,t) : []; lexExp20 e wv = []; ; lexExp3 s = ([],s) : []; ; lexExp4 e s True = concatMap (lexExp1 e) (s : []) ++ concatMap (lexExp2 e) (lexDigits s); lexExp4 e s False = lexExp3 (e : s); ; lexExp5 (e : s) = lexExp4 e s (e `elem` 'e' : 'E' : []); lexExp5 xyv = lexExp3 xyv; ; lexFracExp (xyx : xzu) = lexFracExp5 (xyx : xzu); lexFracExp s = lexFracExp2 s; ; lexFracExp0 ds vu63 = lexFracExp00 ds vu63; ; lexFracExp00 ds (e,u) = ('.' : ds ++ e,u) : []; lexFracExp00 ds wy = []; ; lexFracExp1 vu64 = lexFracExp10 vu64; ; lexFracExp10 (ds,t) = concatMap (lexFracExp0 ds) (lexExp t); lexFracExp10 wx = []; ; lexFracExp2 s = lexExp s; ; lexFracExp3 xyx c cs True = concatMap lexFracExp1 (lexDigits (c : cs)); lexFracExp3 xyx c cs False = lexFracExp2 (xyx : c : cs); ; lexFracExp4 True (xyx : c : cs) = lexFracExp3 xyx c cs (isDigit c); lexFracExp4 xzv xzw = lexFracExp2 xzw; ; lexFracExp5 (xyx : xzu) = lexFracExp4 (xyx == '.') (xyx : xzu); lexFracExp5 xzx = lexFracExp2 xzx; } " are unpacked to the following functions on top level "lex12LexExp2 e vu67 = lex12LexExp20 e vu67; " "lex12Lex8 c s True = concatMap (lex12Lex3 c) (span lex12IsIdChar s : []); lex12Lex8 c s False = lex12Lex7 c s (isDigit c); " "lex12LexExp4 e s True = concatMap (lex12LexExp1 e) (s : []) ++ concatMap (lex12LexExp2 e) (lexDigits s); lex12LexExp4 e s False = lex12LexExp3 (e : s); " "lex12Lex9 c s True = concatMap (lex12Lex2 c) (span lex12IsSym s : []); lex12Lex9 c s False = lex12Lex8 c s (isAlpha c); " "lex12LexFracExp3 xyx c cs True = concatMap lex12LexFracExp1 (lexDigits (c : cs)); lex12LexFracExp3 xyx c cs False = lex12LexFracExp2 (xyx : c : cs); " "lex12Lex6 c s True = []; " "lex12LexExp00 e c (ds,u) = (e : c : ds,u) : []; lex12LexExp00 e c wu = []; " "lex12Lex20 c (sym,t) = (c : sym,t) : []; lex12Lex20 c xv = []; " "lex12LexFracExp10 (ds,t) = concatMap (lex12LexFracExp0 ds) (lex12LexExp t); lex12LexFracExp10 wx = []; " "lex12LexFracExp5 (xyx : xzu) = lex12LexFracExp4 (xyx == '.') (xyx : xzu); lex12LexFracExp5 xzx = lex12LexFracExp2 xzx; " "lex12LexFracExp1 vu64 = lex12LexFracExp10 vu64; " "lex12Lex50 c (ds,s) = concatMap (lex12Lex4 c ds) (lex12LexFracExp s); lex12Lex50 c xu = []; " "lex12LexExp1 e vu66 = lex12LexExp10 e vu66; " "lex12LexFracExp4 True (xyx : c : cs) = lex12LexFracExp3 xyx c cs (isDigit c); lex12LexFracExp4 xzv xzw = lex12LexFracExp2 xzw; " "lex12IsSym c = c `elem` '!' : '@' : '#' : '$' : '%' : '&' : '*' : '+' : '.' : '/' : '<' : '=' : '>' : '?' : '\' : '^' : '|' : ':' : '-' : '~' : []; " "lex12Lex4 c ds vu61 = lex12Lex40 c ds vu61; " "lex12Lex30 c (nam,t) = (c : nam,t) : []; lex12Lex30 c xw = []; " "lex12Lex3 c vu60 = lex12Lex30 c vu60; " "lex12LexFracExp0 ds vu63 = lex12LexFracExp00 ds vu63; " "lex12LexFracExp (xyx : xzu) = lex12LexFracExp5 (xyx : xzu); lex12LexFracExp s = lex12LexFracExp2 s; " "lex12Lex2 c vu59 = lex12Lex20 c vu59; " "lex12LexExp3 s = ([],s) : []; " "lex12Lex40 c ds (fe,t) = (c : ds ++ fe,t) : []; lex12Lex40 c ds wz = []; " "lex12LexExp (e : s) = lex12LexExp5 (e : s); lex12LexExp s = lex12LexExp3 s; " "lex12LexFracExp00 ds (e,u) = ('.' : ds ++ e,u) : []; lex12LexFracExp00 ds wy = []; " "lex12IsSingle c = c `elem` ',' : ';' : '(' : ')' : '[' : ']' : '{' : '}' : '_' : '`' : []; " "lex12LexExp100 e c t True = concatMap (lex12LexExp0 e c) (lexDigits t); lex12LexExp100 e c t False = []; " "lex12LexExp20 e (ds,t) = (e : ds,t) : []; lex12LexExp20 e wv = []; " "lex12LexExp0 e c vu65 = lex12LexExp00 e c vu65; " "lex12Lex5 c vu62 = lex12Lex50 c vu62; " "lex12LexExp5 (e : s) = lex12LexExp4 e s (e `elem` 'e' : 'E' : []); lex12LexExp5 xyv = lex12LexExp3 xyv; " "lex12LexFracExp2 s = lex12LexExp s; " "lex12Lex7 c s True = concatMap (lex12Lex5 c) (span isDigit s : []); lex12Lex7 c s False = lex12Lex6 c s otherwise; " "lex12IsIdChar c = isAlphaNum c || c `elem` '_' : ''' : []; " "lex12Lex11 c s True = (c : [],s) : []; lex12Lex11 c s False = lex12Lex9 c s (lex12IsSym c); " "lex12LexExp10 e (c : t) = lex12LexExp100 e c t (c `elem` '+' : '-' : []); lex12LexExp10 e ww = []; " The bindings of the following Let/Where expression "readParen0 b where { mandatory r = concatMap mandatory2 (lex r); ; mandatory0 x vu48 = mandatory00 x vu48; ; mandatory00 x (vvzx : vvzy,u) = mandatory002 x (vvzx : vvzy,u); mandatory00 x vyv = mandatory000 x vyv; ; mandatory000 x vyv = []; ; mandatory001 True x (vvzx : [],u) = (x,u) : []; mandatory001 vvzz vwuu vwuv = mandatory000 vwuu vwuv; ; mandatory002 x (vvzx : vvzy,u) = mandatory001 (vvzx == ')') x (vvzx : vvzy,u); mandatory002 vwuw vwux = mandatory000 vwuw vwux; ; mandatory1 vu49 = mandatory10 vu49; ; mandatory10 (x,t) = concatMap (mandatory0 x) (lex t); mandatory10 vyw = []; ; mandatory2 vu50 = mandatory20 vu50; ; mandatory20 (vvyw : vvyx,s) = mandatory202 (vvyw : vvyx,s); mandatory20 vyu = mandatory200 vyu; ; mandatory200 vyu = []; ; mandatory201 True (vvyw : [],s) = concatMap mandatory1 (optional s); mandatory201 vvyy vvyz = mandatory200 vvyz; ; mandatory202 (vvyw : vvyx,s) = mandatory201 (vvyw == '(') (vvyw : vvyx,s); mandatory202 vvzu = mandatory200 vvzu; ; optional r = g r ++ mandatory r; ; readParen0 True = mandatory; readParen0 False = optional; } " are unpacked to the following functions on top level "readParenMandatory00 vxuy x (vvzx : vvzy,u) = readParenMandatory002 vxuy x (vvzx : vvzy,u); readParenMandatory00 vxuy x vyv = readParenMandatory000 vxuy x vyv; " "readParenMandatory2 vxuy vu50 = readParenMandatory20 vxuy vu50; " "readParenMandatory vxuy r = concatMap (readParenMandatory2 vxuy) (lex r); " "readParenMandatory10 vxuy (x,t) = concatMap (readParenMandatory0 vxuy x) (lex t); readParenMandatory10 vxuy vyw = []; " "readParenReadParen0 vxuy True = readParenMandatory vxuy; readParenReadParen0 vxuy False = readParenOptional vxuy; " "readParenMandatory202 vxuy (vvyw : vvyx,s) = readParenMandatory201 vxuy (vvyw == '(') (vvyw : vvyx,s); readParenMandatory202 vxuy vvzu = readParenMandatory200 vxuy vvzu; " "readParenMandatory000 vxuy x vyv = []; " "readParenMandatory1 vxuy vu49 = readParenMandatory10 vxuy vu49; " "readParenMandatory002 vxuy x (vvzx : vvzy,u) = readParenMandatory001 vxuy (vvzx == ')') x (vvzx : vvzy,u); readParenMandatory002 vxuy vwuw vwux = readParenMandatory000 vxuy vwuw vwux; " "readParenMandatory001 vxuy True x (vvzx : [],u) = (x,u) : []; readParenMandatory001 vxuy vvzz vwuu vwuv = readParenMandatory000 vxuy vwuu vwuv; " "readParenMandatory0 vxuy x vu48 = readParenMandatory00 vxuy x vu48; " "readParenMandatory201 vxuy True (vvyw : [],s) = concatMap (readParenMandatory1 vxuy) (readParenOptional vxuy s); readParenMandatory201 vxuy vvyy vvyz = readParenMandatory200 vxuy vvyz; " "readParenMandatory200 vxuy vyu = []; " "readParenMandatory20 vxuy (vvyw : vvyx,s) = readParenMandatory202 vxuy (vvyw : vvyx,s); readParenMandatory20 vxuy vyu = readParenMandatory200 vxuy vyu; " "readParenOptional vxuy r = vxuy r ++ readParenMandatory vxuy r; " The bindings of the following Let/Where expression "readParen False read' where { read' r = read'' r ++ concatMap read'1 (lex r); ; read'' r = concatMap (read''1 readPos) (lex r); ; read''0 s vu80 = read''00 s vu80; ; read''00 s (n,[]) = (n,s) : []; read''00 s vyy = []; ; read''1 readPos vu81 = read''10 readPos vu81; ; read''10 readPos (str,s) = concatMap (read''0 s) (readPos str); read''10 readPos vyx = []; ; read'0 vu78 = read'00 vu78; ; read'00 (x,t) = (`negate` x,t) : []; read'00 vzu = []; ; read'1 vu79 = read'10 vu79; ; read'10 (vwvu : vwvv,s) = read'102 (vwvu : vwvv,s); read'10 vyz = read'100 vyz; ; read'100 vyz = []; ; read'101 True (vwvu : [],s) = concatMap read'0 (read'' s); read'101 vwvw vwvx = read'100 vwvx; ; read'102 (vwvu : vwvv,s) = read'101 (vwvu == '-') (vwvu : vwvv,s); read'102 vwvy = read'100 vwvy; } " are unpacked to the following functions on top level "readSignedRead'0 vxuz vu78 = readSignedRead'00 vxuz vu78; " "readSignedRead' vxuz r = readSignedRead'' vxuz r ++ concatMap (readSignedRead'1 vxuz) (lex r); " "readSignedRead'1 vxuz vu79 = readSignedRead'10 vxuz vu79; " "readSignedRead''00 vxuz s (n,[]) = (n,s) : []; readSignedRead''00 vxuz s vyy = []; " "readSignedRead''10 vxuz readPos (str,s) = concatMap (readSignedRead''0 vxuz s) (readPos str); readSignedRead''10 vxuz readPos vyx = []; " "readSignedRead'' vxuz r = concatMap (readSignedRead''1 vxuz vxuz) (lex r); " "readSignedRead'101 vxuz True (vwvu : [],s) = concatMap (readSignedRead'0 vxuz) (readSignedRead'' vxuz s); readSignedRead'101 vxuz vwvw vwvx = readSignedRead'100 vxuz vwvx; " "readSignedRead'10 vxuz (vwvu : vwvv,s) = readSignedRead'102 vxuz (vwvu : vwvv,s); readSignedRead'10 vxuz vyz = readSignedRead'100 vxuz vyz; " "readSignedRead'102 vxuz (vwvu : vwvv,s) = readSignedRead'101 vxuz (vwvu == '-') (vwvu : vwvv,s); readSignedRead'102 vxuz vwvy = readSignedRead'100 vxuz vwvy; " "readSignedRead'00 vxuz (x,t) = (`negate` x,t) : []; readSignedRead'00 vxuz vzu = []; " "readSignedRead'100 vxuz vyz = []; " "readSignedRead''0 vxuz s vu80 = readSignedRead''00 vxuz s vu80; " "readSignedRead''1 vxuz readPos vu81 = readSignedRead''10 vxuz readPos vu81; " The bindings of the following Let/Where expression "g x n where { g x n = g2 x n; ; g0 x n True = f x (n - 1) (x * y); ; g1 x n True = g (x * x) (n `quot` 2); g1 x n False = g0 x n otherwise; ; g2 x n = g1 x n (even n); } " are unpacked to the following functions on top level "pr2F0G vxvu x n = pr2F0G2 vxvu x n; " "pr2F0G2 vxvu x n = pr2F0G1 vxvu x n (even n); " "pr2F0G1 vxvu x n True = pr2F0G vxvu (x * x) (n `quot` 2); pr2F0G1 vxvu x n False = pr2F0G0 vxvu x n otherwise; " "pr2F0G0 vxvu x n True = pr2F x (n - 1) (x * vxvu); " ---------------------------------------- (12) Obligation: mainModule Main module Main where { import qualified Prelude; } ---------------------------------------- (13) NumRed (SOUND) Num Reduction:All numbers are transformed to their corresponding representation with Succ, Pred and Zero. ---------------------------------------- (14) Obligation: mainModule Main module Main where { import qualified Prelude; }