/export/starexec/sandbox/solver/bin/starexec_run_standard /export/starexec/sandbox/benchmark/theBenchmark.hs /export/starexec/sandbox/output/output_files -------------------------------------------------------------------------------- MAYBE proof of /export/starexec/sandbox/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) BR [EQUIVALENT, 0 ms] (4) HASKELL (5) COR [EQUIVALENT, 0 ms] (6) HASKELL (7) Narrow [SOUND, 0 ms] (8) AND (9) QDP (10) MRRProof [EQUIVALENT, 70 ms] (11) QDP (12) NonTerminationLoopProof [COMPLETE, 0 ms] (13) NO (14) QDP (15) QDPSizeChangeProof [EQUIVALENT, 0 ms] (16) YES (17) QDP (18) QDPSizeChangeProof [EQUIVALENT, 0 ms] (19) YES (20) Narrow [COMPLETE, 0 ms] (21) TRUE ---------------------------------------- (0) Obligation: mainModule Main module Maybe where { import qualified Main; import qualified Monad; import qualified Prelude; } module Main where { import qualified Maybe; import qualified Monad; import qualified Prelude; } module Monad where { import qualified Main; import qualified Maybe; import qualified Prelude; foldM :: Monad c => (b -> a -> c b) -> b -> [a] -> c b; foldM _ a [] = return a; foldM f a (x : xs) = f a x >>= (\fax ->foldM f fax xs); foldM_ :: Monad b => (c -> a -> b c) -> c -> [a] -> b (); foldM_ f a xs = foldM f a xs >> return (); } ---------------------------------------- (1) LR (EQUIVALENT) Lambda Reductions: The following Lambda expression "\_->q" is transformed to "gtGt0 q _ = q; " The following Lambda expression "\fax->foldM f fax xs" is transformed to "foldM0 f xs fax = foldM f fax xs; " ---------------------------------------- (2) Obligation: mainModule Main module Maybe where { import qualified Main; import qualified Monad; import qualified Prelude; } module Main where { import qualified Maybe; import qualified Monad; import qualified Prelude; } module Monad where { import qualified Main; import qualified Maybe; import qualified Prelude; foldM :: Monad b => (c -> a -> b c) -> c -> [a] -> b c; foldM _ a [] = return a; foldM f a (x : xs) = f a x >>= foldM0 f xs; foldM0 f xs fax = foldM f fax xs; foldM_ :: Monad c => (a -> b -> c a) -> a -> [b] -> c (); foldM_ f a xs = foldM f a xs >> return (); } ---------------------------------------- (3) BR (EQUIVALENT) Replaced joker patterns by fresh variables and removed binding patterns. ---------------------------------------- (4) Obligation: mainModule Main module Maybe where { import qualified Main; import qualified Monad; import qualified Prelude; } module Main where { import qualified Maybe; import qualified Monad; import qualified Prelude; } module Monad where { import qualified Main; import qualified Maybe; import qualified Prelude; foldM :: Monad b => (a -> c -> b a) -> a -> [c] -> b a; foldM vz a [] = return a; foldM f a (x : xs) = f a x >>= foldM0 f xs; foldM0 f xs fax = foldM f fax xs; foldM_ :: Monad b => (c -> a -> b c) -> c -> [a] -> b (); foldM_ f a xs = foldM f a xs >> return (); } ---------------------------------------- (5) COR (EQUIVALENT) Cond Reductions: The following Function with conditions "undefined |Falseundefined; " is transformed to "undefined = undefined1; " "undefined0 True = undefined; " "undefined1 = undefined0 False; " ---------------------------------------- (6) Obligation: mainModule Main module Maybe where { import qualified Main; import qualified Monad; import qualified Prelude; } module Main where { import qualified Maybe; import qualified Monad; import qualified Prelude; } module Monad where { import qualified Main; import qualified Maybe; import qualified Prelude; foldM :: Monad b => (c -> a -> b c) -> c -> [a] -> b c; foldM vz a [] = return a; foldM f a (x : xs) = f a x >>= foldM0 f xs; foldM0 f xs fax = foldM f fax xs; foldM_ :: Monad c => (b -> a -> c b) -> b -> [a] -> c (); foldM_ f a xs = foldM f a xs >> return (); } ---------------------------------------- (7) Narrow (SOUND) Haskell To QDPs digraph dp_graph { node [outthreshold=100, inthreshold=100];1[label="Monad.foldM_",fontsize=16,color="grey",shape="box"];1 -> 3[label="",style="dashed", color="grey", weight=3]; 3[label="Monad.foldM_ wu3",fontsize=16,color="grey",shape="box"];3 -> 4[label="",style="dashed", color="grey", weight=3]; 4[label="Monad.foldM_ wu3 wu4",fontsize=16,color="grey",shape="box"];4 -> 5[label="",style="dashed", color="grey", weight=3]; 5[label="Monad.foldM_ wu3 wu4 wu5",fontsize=16,color="black",shape="triangle"];5 -> 6[label="",style="solid", color="black", weight=3]; 6[label="Monad.foldM wu3 wu4 wu5 >> return ()",fontsize=16,color="black",shape="box"];6 -> 7[label="",style="solid", color="black", weight=3]; 7 -> 471[label="",style="dashed", color="red", weight=0]; 7[label="Monad.foldM wu3 wu4 wu5 >>= gtGt0 (return ())",fontsize=16,color="magenta"];7 -> 472[label="",style="dashed", color="magenta", weight=3]; 472[label="Monad.foldM wu3 wu4 wu5",fontsize=16,color="burlywood",shape="triangle"];586[label="wu5/wu50 : wu51",fontsize=10,color="white",style="solid",shape="box"];472 -> 586[label="",style="solid", color="burlywood", weight=9]; 586 -> 526[label="",style="solid", color="burlywood", weight=3]; 587[label="wu5/[]",fontsize=10,color="white",style="solid",shape="box"];472 -> 587[label="",style="solid", color="burlywood", weight=9]; 587 -> 527[label="",style="solid", color="burlywood", weight=3]; 471[label="wu35 >>= gtGt0 (return ())",fontsize=16,color="burlywood",shape="triangle"];588[label="wu35/wu350 : wu351",fontsize=10,color="white",style="solid",shape="box"];471 -> 588[label="",style="solid", color="burlywood", weight=9]; 588 -> 528[label="",style="solid", color="burlywood", weight=3]; 589[label="wu35/[]",fontsize=10,color="white",style="solid",shape="box"];471 -> 589[label="",style="solid", color="burlywood", weight=9]; 589 -> 529[label="",style="solid", color="burlywood", weight=3]; 526[label="Monad.foldM wu3 wu4 (wu50 : wu51)",fontsize=16,color="black",shape="box"];526 -> 530[label="",style="solid", color="black", weight=3]; 527[label="Monad.foldM wu3 wu4 []",fontsize=16,color="black",shape="box"];527 -> 531[label="",style="solid", color="black", weight=3]; 528[label="wu350 : wu351 >>= gtGt0 (return ())",fontsize=16,color="black",shape="box"];528 -> 532[label="",style="solid", color="black", weight=3]; 529[label="[] >>= gtGt0 (return ())",fontsize=16,color="black",shape="box"];529 -> 533[label="",style="solid", color="black", weight=3]; 530 -> 534[label="",style="dashed", color="red", weight=0]; 530[label="wu3 wu4 wu50 >>= Monad.foldM0 wu3 wu51",fontsize=16,color="magenta"];530 -> 535[label="",style="dashed", color="magenta", weight=3]; 531[label="return wu4",fontsize=16,color="black",shape="triangle"];531 -> 536[label="",style="solid", color="black", weight=3]; 532 -> 558[label="",style="dashed", color="red", weight=0]; 532[label="gtGt0 (return ()) wu350 ++ (wu351 >>= gtGt0 (return ()))",fontsize=16,color="magenta"];532 -> 559[label="",style="dashed", color="magenta", weight=3]; 532 -> 560[label="",style="dashed", color="magenta", weight=3]; 533[label="[]",fontsize=16,color="green",shape="box"];535[label="wu3 wu4 wu50",fontsize=16,color="green",shape="box"];535 -> 540[label="",style="dashed", color="green", weight=3]; 535 -> 541[label="",style="dashed", color="green", weight=3]; 534[label="wu36 >>= Monad.foldM0 wu3 wu51",fontsize=16,color="burlywood",shape="triangle"];590[label="wu36/wu360 : wu361",fontsize=10,color="white",style="solid",shape="box"];534 -> 590[label="",style="solid", color="burlywood", weight=9]; 590 -> 542[label="",style="solid", color="burlywood", weight=3]; 591[label="wu36/[]",fontsize=10,color="white",style="solid",shape="box"];534 -> 591[label="",style="solid", color="burlywood", weight=9]; 591 -> 543[label="",style="solid", color="burlywood", weight=3]; 536[label="wu4 : []",fontsize=16,color="green",shape="box"];559 -> 571[label="",style="dashed", color="red", weight=0]; 559[label="gtGt0 (return ()) wu350",fontsize=16,color="magenta"];559 -> 572[label="",style="dashed", color="magenta", weight=3]; 560 -> 471[label="",style="dashed", color="red", weight=0]; 560[label="wu351 >>= gtGt0 (return ())",fontsize=16,color="magenta"];560 -> 573[label="",style="dashed", color="magenta", weight=3]; 558[label="wu41 ++ wu40",fontsize=16,color="burlywood",shape="triangle"];592[label="wu41/wu410 : wu411",fontsize=10,color="white",style="solid",shape="box"];558 -> 592[label="",style="solid", color="burlywood", weight=9]; 592 -> 574[label="",style="solid", color="burlywood", weight=3]; 593[label="wu41/[]",fontsize=10,color="white",style="solid",shape="box"];558 -> 593[label="",style="solid", color="burlywood", weight=9]; 593 -> 575[label="",style="solid", color="burlywood", weight=3]; 540[label="wu4",fontsize=16,color="green",shape="box"];541[label="wu50",fontsize=16,color="green",shape="box"];542[label="wu360 : wu361 >>= Monad.foldM0 wu3 wu51",fontsize=16,color="black",shape="box"];542 -> 547[label="",style="solid", color="black", weight=3]; 543[label="[] >>= Monad.foldM0 wu3 wu51",fontsize=16,color="black",shape="box"];543 -> 548[label="",style="solid", color="black", weight=3]; 572 -> 531[label="",style="dashed", color="red", weight=0]; 572[label="return ()",fontsize=16,color="magenta"];572 -> 576[label="",style="dashed", color="magenta", weight=3]; 571[label="gtGt0 wu42 wu350",fontsize=16,color="black",shape="triangle"];571 -> 577[label="",style="solid", color="black", weight=3]; 573[label="wu351",fontsize=16,color="green",shape="box"];574[label="(wu410 : wu411) ++ wu40",fontsize=16,color="black",shape="box"];574 -> 580[label="",style="solid", color="black", weight=3]; 575[label="[] ++ wu40",fontsize=16,color="black",shape="box"];575 -> 581[label="",style="solid", color="black", weight=3]; 547 -> 558[label="",style="dashed", color="red", weight=0]; 547[label="Monad.foldM0 wu3 wu51 wu360 ++ (wu361 >>= Monad.foldM0 wu3 wu51)",fontsize=16,color="magenta"];547 -> 565[label="",style="dashed", color="magenta", weight=3]; 547 -> 566[label="",style="dashed", color="magenta", weight=3]; 548[label="[]",fontsize=16,color="green",shape="box"];576[label="()",fontsize=16,color="green",shape="box"];577[label="wu42",fontsize=16,color="green",shape="box"];580[label="wu410 : wu411 ++ wu40",fontsize=16,color="green",shape="box"];580 -> 584[label="",style="dashed", color="green", weight=3]; 581[label="wu40",fontsize=16,color="green",shape="box"];565[label="Monad.foldM0 wu3 wu51 wu360",fontsize=16,color="black",shape="box"];565 -> 578[label="",style="solid", color="black", weight=3]; 566 -> 534[label="",style="dashed", color="red", weight=0]; 566[label="wu361 >>= Monad.foldM0 wu3 wu51",fontsize=16,color="magenta"];566 -> 579[label="",style="dashed", color="magenta", weight=3]; 584 -> 558[label="",style="dashed", color="red", weight=0]; 584[label="wu411 ++ wu40",fontsize=16,color="magenta"];584 -> 585[label="",style="dashed", color="magenta", weight=3]; 578 -> 472[label="",style="dashed", color="red", weight=0]; 578[label="Monad.foldM wu3 wu360 wu51",fontsize=16,color="magenta"];578 -> 582[label="",style="dashed", color="magenta", weight=3]; 578 -> 583[label="",style="dashed", color="magenta", weight=3]; 579[label="wu361",fontsize=16,color="green",shape="box"];585[label="wu411",fontsize=16,color="green",shape="box"];582[label="wu51",fontsize=16,color="green",shape="box"];583[label="wu360",fontsize=16,color="green",shape="box"];} ---------------------------------------- (8) Complex Obligation (AND) ---------------------------------------- (9) Obligation: Q DP problem: The TRS P consists of the following rules: new_foldM(wu3, :(wu50, wu51), h, ba) -> new_gtGtEs(wu3, wu51, h, ba) new_gtGtEs(wu3, wu51, h, ba) -> new_gtGtEs(wu3, wu51, h, ba) new_gtGtEs(wu3, wu51, h, ba) -> new_foldM(wu3, wu51, h, ba) R is empty. Q is empty. We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (10) MRRProof (EQUIVALENT) By using the rule removal processor [LPAR04] with the following ordering, at least one Dependency Pair or term rewrite system rule of this QDP problem can be strictly oriented. Strictly oriented dependency pairs: new_foldM(wu3, :(wu50, wu51), h, ba) -> new_gtGtEs(wu3, wu51, h, ba) new_gtGtEs(wu3, wu51, h, ba) -> new_foldM(wu3, wu51, h, ba) Used ordering: Polynomial interpretation [POLO]: POL(:(x_1, x_2)) = 2 + x_1 + 2*x_2 POL(new_foldM(x_1, x_2, x_3, x_4)) = x_1 + 2*x_2 + x_3 + x_4 POL(new_gtGtEs(x_1, x_2, x_3, x_4)) = 2 + x_1 + 2*x_2 + x_3 + x_4 ---------------------------------------- (11) Obligation: Q DP problem: The TRS P consists of the following rules: new_gtGtEs(wu3, wu51, h, ba) -> new_gtGtEs(wu3, wu51, h, ba) R is empty. Q is empty. We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (12) NonTerminationLoopProof (COMPLETE) We used the non-termination processor [FROCOS05] to show that the DP problem is infinite. Found a loop by semiunifying a rule from P directly. s = new_gtGtEs(wu3, wu51, h, ba) evaluates to t =new_gtGtEs(wu3, wu51, h, ba) Thus s starts an infinite chain as s semiunifies with t with the following substitutions: * Matcher: [ ] * Semiunifier: [ ] -------------------------------------------------------------------------------- Rewriting sequence The DP semiunifies directly so there is only one rewrite step from new_gtGtEs(wu3, wu51, h, ba) to new_gtGtEs(wu3, wu51, h, ba). ---------------------------------------- (13) NO ---------------------------------------- (14) Obligation: Q DP problem: The TRS P consists of the following rules: new_psPs(:(wu410, wu411), wu40, h) -> new_psPs(wu411, wu40, h) R is empty. Q is empty. We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (15) QDPSizeChangeProof (EQUIVALENT) By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] we have proven that there are no infinite chains for this DP problem. From the DPs we obtained the following set of size-change graphs: *new_psPs(:(wu410, wu411), wu40, h) -> new_psPs(wu411, wu40, h) The graph contains the following edges 1 > 1, 2 >= 2, 3 >= 3 ---------------------------------------- (16) YES ---------------------------------------- (17) Obligation: Q DP problem: The TRS P consists of the following rules: new_gtGtEs0(:(wu350, wu351), h) -> new_gtGtEs0(wu351, h) R is empty. Q is empty. We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (18) QDPSizeChangeProof (EQUIVALENT) By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] we have proven that there are no infinite chains for this DP problem. From the DPs we obtained the following set of size-change graphs: *new_gtGtEs0(:(wu350, wu351), h) -> new_gtGtEs0(wu351, h) The graph contains the following edges 1 > 1, 2 >= 2 ---------------------------------------- (19) YES ---------------------------------------- (20) Narrow (COMPLETE) Haskell To QDPs digraph dp_graph { node [outthreshold=100, inthreshold=100];1[label="Monad.foldM_",fontsize=16,color="grey",shape="box"];1 -> 3[label="",style="dashed", color="grey", weight=3]; 3[label="Monad.foldM_ wu3",fontsize=16,color="grey",shape="box"];3 -> 4[label="",style="dashed", color="grey", weight=3]; 4[label="Monad.foldM_ wu3 wu4",fontsize=16,color="grey",shape="box"];4 -> 5[label="",style="dashed", color="grey", weight=3]; 5[label="Monad.foldM_ wu3 wu4 wu5",fontsize=16,color="black",shape="triangle"];5 -> 6[label="",style="solid", color="black", weight=3]; 6[label="Monad.foldM wu3 wu4 wu5 >> return ()",fontsize=16,color="black",shape="box"];6 -> 7[label="",style="solid", color="black", weight=3]; 7 -> 471[label="",style="dashed", color="red", weight=0]; 7[label="Monad.foldM wu3 wu4 wu5 >>= gtGt0 (return ())",fontsize=16,color="magenta"];7 -> 472[label="",style="dashed", color="magenta", weight=3]; 472[label="Monad.foldM wu3 wu4 wu5",fontsize=16,color="burlywood",shape="triangle"];586[label="wu5/wu50 : wu51",fontsize=10,color="white",style="solid",shape="box"];472 -> 586[label="",style="solid", color="burlywood", weight=9]; 586 -> 526[label="",style="solid", color="burlywood", weight=3]; 587[label="wu5/[]",fontsize=10,color="white",style="solid",shape="box"];472 -> 587[label="",style="solid", color="burlywood", weight=9]; 587 -> 527[label="",style="solid", color="burlywood", weight=3]; 471[label="wu35 >>= gtGt0 (return ())",fontsize=16,color="burlywood",shape="triangle"];588[label="wu35/wu350 : wu351",fontsize=10,color="white",style="solid",shape="box"];471 -> 588[label="",style="solid", color="burlywood", weight=9]; 588 -> 528[label="",style="solid", color="burlywood", weight=3]; 589[label="wu35/[]",fontsize=10,color="white",style="solid",shape="box"];471 -> 589[label="",style="solid", color="burlywood", weight=9]; 589 -> 529[label="",style="solid", color="burlywood", weight=3]; 526[label="Monad.foldM wu3 wu4 (wu50 : wu51)",fontsize=16,color="black",shape="box"];526 -> 530[label="",style="solid", color="black", weight=3]; 527[label="Monad.foldM wu3 wu4 []",fontsize=16,color="black",shape="box"];527 -> 531[label="",style="solid", color="black", weight=3]; 528[label="wu350 : wu351 >>= gtGt0 (return ())",fontsize=16,color="black",shape="box"];528 -> 532[label="",style="solid", color="black", weight=3]; 529[label="[] >>= gtGt0 (return ())",fontsize=16,color="black",shape="box"];529 -> 533[label="",style="solid", color="black", weight=3]; 530 -> 534[label="",style="dashed", color="red", weight=0]; 530[label="wu3 wu4 wu50 >>= Monad.foldM0 wu3 wu51",fontsize=16,color="magenta"];530 -> 535[label="",style="dashed", color="magenta", weight=3]; 531[label="return wu4",fontsize=16,color="black",shape="triangle"];531 -> 536[label="",style="solid", color="black", weight=3]; 532 -> 558[label="",style="dashed", color="red", weight=0]; 532[label="gtGt0 (return ()) wu350 ++ (wu351 >>= gtGt0 (return ()))",fontsize=16,color="magenta"];532 -> 559[label="",style="dashed", color="magenta", weight=3]; 532 -> 560[label="",style="dashed", color="magenta", weight=3]; 533[label="[]",fontsize=16,color="green",shape="box"];535[label="wu3 wu4 wu50",fontsize=16,color="green",shape="box"];535 -> 540[label="",style="dashed", color="green", weight=3]; 535 -> 541[label="",style="dashed", color="green", weight=3]; 534[label="wu36 >>= Monad.foldM0 wu3 wu51",fontsize=16,color="burlywood",shape="triangle"];590[label="wu36/wu360 : wu361",fontsize=10,color="white",style="solid",shape="box"];534 -> 590[label="",style="solid", color="burlywood", weight=9]; 590 -> 542[label="",style="solid", color="burlywood", weight=3]; 591[label="wu36/[]",fontsize=10,color="white",style="solid",shape="box"];534 -> 591[label="",style="solid", color="burlywood", weight=9]; 591 -> 543[label="",style="solid", color="burlywood", weight=3]; 536[label="wu4 : []",fontsize=16,color="green",shape="box"];559 -> 571[label="",style="dashed", color="red", weight=0]; 559[label="gtGt0 (return ()) wu350",fontsize=16,color="magenta"];559 -> 572[label="",style="dashed", color="magenta", weight=3]; 560 -> 471[label="",style="dashed", color="red", weight=0]; 560[label="wu351 >>= gtGt0 (return ())",fontsize=16,color="magenta"];560 -> 573[label="",style="dashed", color="magenta", weight=3]; 558[label="wu41 ++ wu40",fontsize=16,color="burlywood",shape="triangle"];592[label="wu41/wu410 : wu411",fontsize=10,color="white",style="solid",shape="box"];558 -> 592[label="",style="solid", color="burlywood", weight=9]; 592 -> 574[label="",style="solid", color="burlywood", weight=3]; 593[label="wu41/[]",fontsize=10,color="white",style="solid",shape="box"];558 -> 593[label="",style="solid", color="burlywood", weight=9]; 593 -> 575[label="",style="solid", color="burlywood", weight=3]; 540[label="wu4",fontsize=16,color="green",shape="box"];541[label="wu50",fontsize=16,color="green",shape="box"];542[label="wu360 : wu361 >>= Monad.foldM0 wu3 wu51",fontsize=16,color="black",shape="box"];542 -> 547[label="",style="solid", color="black", weight=3]; 543[label="[] >>= Monad.foldM0 wu3 wu51",fontsize=16,color="black",shape="box"];543 -> 548[label="",style="solid", color="black", weight=3]; 572 -> 531[label="",style="dashed", color="red", weight=0]; 572[label="return ()",fontsize=16,color="magenta"];572 -> 576[label="",style="dashed", color="magenta", weight=3]; 571[label="gtGt0 wu42 wu350",fontsize=16,color="black",shape="triangle"];571 -> 577[label="",style="solid", color="black", weight=3]; 573[label="wu351",fontsize=16,color="green",shape="box"];574[label="(wu410 : wu411) ++ wu40",fontsize=16,color="black",shape="box"];574 -> 580[label="",style="solid", color="black", weight=3]; 575[label="[] ++ wu40",fontsize=16,color="black",shape="box"];575 -> 581[label="",style="solid", color="black", weight=3]; 547 -> 558[label="",style="dashed", color="red", weight=0]; 547[label="Monad.foldM0 wu3 wu51 wu360 ++ (wu361 >>= Monad.foldM0 wu3 wu51)",fontsize=16,color="magenta"];547 -> 565[label="",style="dashed", color="magenta", weight=3]; 547 -> 566[label="",style="dashed", color="magenta", weight=3]; 548[label="[]",fontsize=16,color="green",shape="box"];576[label="()",fontsize=16,color="green",shape="box"];577[label="wu42",fontsize=16,color="green",shape="box"];580[label="wu410 : wu411 ++ wu40",fontsize=16,color="green",shape="box"];580 -> 584[label="",style="dashed", color="green", weight=3]; 581[label="wu40",fontsize=16,color="green",shape="box"];565[label="Monad.foldM0 wu3 wu51 wu360",fontsize=16,color="black",shape="box"];565 -> 578[label="",style="solid", color="black", weight=3]; 566 -> 534[label="",style="dashed", color="red", weight=0]; 566[label="wu361 >>= Monad.foldM0 wu3 wu51",fontsize=16,color="magenta"];566 -> 579[label="",style="dashed", color="magenta", weight=3]; 584 -> 558[label="",style="dashed", color="red", weight=0]; 584[label="wu411 ++ wu40",fontsize=16,color="magenta"];584 -> 585[label="",style="dashed", color="magenta", weight=3]; 578 -> 472[label="",style="dashed", color="red", weight=0]; 578[label="Monad.foldM wu3 wu360 wu51",fontsize=16,color="magenta"];578 -> 582[label="",style="dashed", color="magenta", weight=3]; 578 -> 583[label="",style="dashed", color="magenta", weight=3]; 579[label="wu361",fontsize=16,color="green",shape="box"];585[label="wu411",fontsize=16,color="green",shape="box"];582[label="wu51",fontsize=16,color="green",shape="box"];583[label="wu360",fontsize=16,color="green",shape="box"];} ---------------------------------------- (21) TRUE