diff --git a/plutarch-extra/Plutarch/Extra/List.hs b/plutarch-extra/Plutarch/Extra/List.hs index 3e470edf1..a14c8db09 100644 --- a/plutarch-extra/Plutarch/Extra/List.hs +++ b/plutarch-extra/Plutarch/Extra/List.hs @@ -1,7 +1,117 @@ -module Plutarch.Extra.List (preverse, pcheckSorted) where +module Plutarch.Extra.List ( + -- * Construction + preplicate, + + -- * Transformation + pmapMaybe, + preverse, + + -- * Search + pfindJust, + plookupAssoc, + + -- * Elimination + precListLookahead, + + -- * Check + pcheckSorted, +) where import Plutarch.Prelude +{- | Similar to 'pmap', but allows elements to be thrown out. More precisely, + for elements where the function argument returns 'PNothing', the + corresponding element is removed, while for elements where the function + argument returns `PJust`, the value is used in the result. +-} +pmapMaybe :: + forall (ell :: PType -> PType) (b :: PType) (a :: PType) (s :: S). + (PElemConstraint ell a, PElemConstraint ell b, PListLike ell) => + Term s ((a :--> PMaybe b) :--> ell a :--> ell b) +pmapMaybe = phoistAcyclic $ plam $ \f -> precList (go f) (const pnil) + where + go :: + forall (s' :: S). + Term s' (a :--> PMaybe b) -> + Term s' (ell a :--> ell b) -> + Term s' a -> + Term s' (ell a) -> + Term s' (ell b) + go f self x xs = pmatch (f # x) $ \case + PNothing -> self # xs + PJust y -> pcons # y #$ self # xs + +{- | A combination of 'pmap' and 'pfind', but without needing an intermediate + structure. More precisely, searched for the first element in a list-like + structure that produces a 'PJust' argument, returning it if found; otherwise, + produces 'PNothing'. +-} +pfindJust :: + forall (b :: PType) (ell :: PType -> PType) (a :: PType) (s :: S). + (PElemConstraint ell a, PListLike ell) => + Term s ((a :--> PMaybe b) :--> ell a :--> PMaybe b) +pfindJust = phoistAcyclic $ plam $ \f -> precList (go f) (const $ pcon PNothing) + where + go :: + forall (s' :: S). + Term s' (a :--> PMaybe b) -> + Term s' (ell a :--> PMaybe b) -> + Term s' a -> + Term s' (ell a) -> + Term s' (PMaybe b) + go f self x xs = pmatch (f # x) $ \case + PNothing -> self # xs + PJust v -> pcon $ PJust v + +{- | Treats a list-like structure as an assoc list. More precisely, given a + list-like structure of key-value pairs, a method of extracting the key and + the value, and a \'target\' key, returns the corresponding value, or + 'PNothing' if there isn't one. + = Note + There may be multiple mappings for a specific key; in such a situation, only + the /first/ match is returned. In general, this requires time proportional to + the length of the list-like structure, as we may have to check every entry. +-} +plookupAssoc :: + forall (k :: PType) (v :: PType) (kv :: PType) (ell :: PType -> PType) (s :: S). + (PElemConstraint ell kv, PListLike ell, PEq k) => + Term s ((kv :--> k) :--> (kv :--> v) :--> k :--> ell kv :--> PMaybe v) +plookupAssoc = phoistAcyclic $ + plam $ \getKey getVal target kvs -> + pmatch (pfindJust # (go # getKey # target) # kvs) $ \case + PNothing -> pcon PNothing + PJust kv -> pcon . PJust $ getVal # kv + where + go :: + forall (s' :: S). + Term s' ((kv :--> k) :--> k :--> kv :--> PMaybe kv) + go = phoistAcyclic $ + plam $ \getKey target kv -> + pif + (target #== (getKey # kv)) + (pcon . PJust $ kv) + (pcon PNothing) + +{- | Given a count @n@ and a value @x@, produces a list-like structure + containing @n@ copies of @x@, or an empty structure if @n@ is non-positive. + + = Note + + You will likely need to specify which list-like structure you want; the type + arguments for this function are optimized for use with `TypeApplications` to + do exactly this task. +-} +preplicate :: + forall (ell :: PType -> PType) (a :: PType) (s :: S). + (PElemConstraint ell a, PListLike ell) => + Term s (PInteger :--> a :--> ell a) +preplicate = phoistAcyclic $ + pfix #$ plam $ \self count x -> + pif + (count #<= 0) + pnil + (pcons # x # (self # (count - 1) # x)) + -- | / O(n) /. reverses a list preverse :: (PIsListLike l a) => Term s (l a :--> l a) preverse = @@ -21,3 +131,35 @@ pcheckSorted = ) (pcon PTrue) xs + +{- | Similar to 'precList', but with a \'look-ahead\' in the list-like structure + being eliminated. This is more efficient than repeated use of 'pelimList' (or + worse, 'puncons'). Furthermore, the \'self argument\' is not passed to the + \'nil\' and \'singleton\' cases, as it's pointless there. +-} +precListLookahead :: + forall (a :: PType) (r :: PType) (ell :: PType -> PType) (s :: S). + (PElemConstraint ell a, PListLike ell) => + -- | The \'two or more\' case. First @'Term' s a@ is the \'head\', second is + -- a \'peek-ahead\', while the @'Term' s (ell a)@ is what remains /after/ + -- the \'peek-ahead\'. + (Term s (a :--> ell a :--> r) -> Term s a -> Term s a -> Term s (ell a) -> Term s r) -> + -- | The \'singleton\' case, used both for true singletons and also for the + -- end of a non-empty list-like. + (Term s a -> Term s r) -> + -- | The \'nil\' case. + Term s r -> + Term s (ell a :--> r) +precListLookahead whenContinuing whenOne whenDone = + plam $ + pelimList (\x xs -> (pfix #$ plam $ go) # x # xs) whenDone + where + go :: + Term s (a :--> ell a :--> r) -> + Term s a -> + Term s (ell a) -> + Term s r + go self h = + pelimList + (whenContinuing self h) + (whenOne h) diff --git a/plutarch-extra/Plutarch/Extra/Ord.hs b/plutarch-extra/Plutarch/Extra/Ord.hs new file mode 100644 index 000000000..1d2610cc2 --- /dev/null +++ b/plutarch-extra/Plutarch/Extra/Ord.hs @@ -0,0 +1,681 @@ +-- Needed to 'link' Ordering and POrdering +{-# OPTIONS_GHC -Wno-orphans #-} + +module Plutarch.Extra.Ord ( + -- * Types + POrdering (..), + PComparator, + + -- * Functions + + -- ** Creating comparators + pfromOrd, + pfromOrdBy, + + -- ** Transforming comparators + pmapComparator, + preverseComparator, + + -- ** Using comparators + + -- *** Basic + pcompareBy, + pequateBy, + pleqBy, + pgeqBy, + + -- *** Sortedness checking + pisSortedBy, + + -- *** Uniqueness checking + pallUnique, + pallUniqueBy, + ptryAllUnique, + ptryAllUniqueBy, + + -- *** Sorted merging + ptryMerge, + ptryMergeBy, + + -- *** Sorting + psort, + psortBy, + + -- *** Nubbing + pnubSort, + pnubSortBy, +) where + +import Data.Semigroup (Semigroup (stimes), stimesIdempotentMonoid) +import Plutarch.Extra.List (precListLookahead) +import Plutarch.Extra.Maybe (ptraceIfNothing) +import Plutarch.Internal.PlutusType (PlutusType (pcon', pmatch')) +import Plutarch.Lift ( + PConstantDecl ( + PConstantRepr, + PConstanted, + pconstantFromRepr, + pconstantToRepr + ), + PUnsafeLiftDecl (PLifted), + ) +import Plutarch.List (pconvertLists) +import Plutarch.Prelude +import Plutarch.Unsafe (punsafeCoerce) + +{- | A representation of a comparison at the Plutarch level. Equivalent to + 'Ordering' in Haskell. +-} +data POrdering (s :: S) + = PLT + | PEQ + | PGT + deriving stock (Show, Generic) + deriving anyclass (PShow, PPartialOrd, POrd, PEq) + +instance PUnsafeLiftDecl POrdering where + type PLifted POrdering = Ordering + +instance PConstantDecl Ordering where + type PConstantRepr Ordering = Integer + type PConstanted Ordering = POrdering + pconstantToRepr = \case + LT -> 0 + EQ -> 1 + GT -> 2 + pconstantFromRepr = \case + 0 -> pure LT + 1 -> pure EQ + 2 -> pure GT + _ -> Nothing + +instance PlutusType POrdering where + type PInner POrdering = PInteger + pcon' = \case + PLT -> 0 + PEQ -> 1 + PGT -> 2 + pmatch' x f = + pif + (x #== 0) + (f PLT) + ( pif + (x #== 1) + (f PEQ) + (f PGT) + ) + +instance Semigroup (Term s POrdering) where + x <> y = pif (pto x #< 2) (punsafeCoerce $ pto x * pto y) x + stimes = stimesIdempotentMonoid + +instance Monoid (Term s POrdering) where + mempty = pcon PEQ + +data PComparator (a :: PType) (s :: S) = PComparator + { pcomparatorEq :: Term s (a :--> a :--> PBool) + , pcomparatorLe :: Term s (a :--> a :--> PBool) + } + deriving stock (Generic) + deriving anyclass (PlutusType) + +instance DerivePlutusType (PComparator a) where + type DPTStrat _ = PlutusTypeScott + +{- | Given a type with a 'POrd' instance, construct a 'PComparator' from that + instance. +-} +pfromOrd :: + forall (a :: PType) (s :: S). + (POrd a) => + Term s (PComparator a) +pfromOrd = + pcon . PComparator (phoistAcyclic $ plam (#==)) $ + phoistAcyclic (plam (#<=)) + +{- | As 'pfromOrd', but instead uses a projection function into the 'POrd' + instance to construct the 'PComparator'. Allows other \'-by\' behaviours. +-} +pfromOrdBy :: + forall (a :: PType) (b :: PType) (s :: S). + (POrd a) => + Term s ((b :--> a) :--> PComparator b) +pfromOrdBy = phoistAcyclic $ + plam $ \f -> + pmapComparator # f # pfromOrd @a + +{- | Given a projection from a type to another type which we have a + 'PComparator' for, construct a new 'PComparator'. +-} +pmapComparator :: + forall (a :: PType) (b :: PType) (s :: S). + Term s ((b :--> a) :--> PComparator a :--> PComparator b) +pmapComparator = phoistAcyclic $ + plam $ \f cmp -> + pmatch cmp $ \(PComparator peq ple) -> + pcon . PComparator (plam $ \x y -> peq # (f # x) # (f # y)) $ + plam $ \x y -> ple # (f # x) # (f # y) + +-- | Reverses the ordering described by a 'PComparator'. +preverseComparator :: + forall (a :: PType) (s :: S). + Term s (PComparator a :--> PComparator a) +preverseComparator = phoistAcyclic $ + plam $ \cmp -> + pmatch cmp $ \(PComparator peq ple) -> + pcon . PComparator peq $ plam $ \x y -> ple # y # x + +-- | \'Runs\' a 'PComparator'. +pcompareBy :: + forall (a :: PType) (s :: S). + Term s (PComparator a :--> a :--> a :--> POrdering) +pcompareBy = phoistAcyclic $ + plam $ \cmp x y -> + pmatch cmp $ \(PComparator peq ple) -> + pif + (peq # x # y) + (pcon PEQ) + ( pif + (ple # x # y) + (pcon PLT) + (pcon PGT) + ) + +-- | Uses a 'PComparator' for an equality check. +pequateBy :: + forall (a :: PType) (s :: S). + Term s (PComparator a :--> a :--> a :--> PBool) +pequateBy = phoistAcyclic $ + plam $ \cmp x y -> + pmatch cmp $ \(PComparator peq _) -> peq # x # y + +-- | Uses a 'PComparator' for a less-than-or-equals check. +pleqBy :: + forall (a :: PType) (s :: S). + Term s (PComparator a :--> a :--> a :--> PBool) +pleqBy = phoistAcyclic $ + plam $ \cmp x y -> + pmatch cmp $ \(PComparator _ ple) -> ple # x # y + +-- | Uses a 'PComparator' for a greater-than-or-equals check. +pgeqBy :: + forall (a :: PType) (s :: S). + Term s (PComparator a :--> a :--> a :--> PBool) +pgeqBy = phoistAcyclic $ + plam $ \cmp x y -> + pmatch cmp $ \(PComparator peq ple) -> + pif + (peq # x # y) + (pcon PTrue) + (pnot #$ ple # x # y) + +{- | Verifies that a list-like structure is ordered according to the + 'PComparator' argument. +-} +pisSortedBy :: + forall (a :: PType) (ell :: PType -> PType) (s :: S). + (PElemConstraint ell a, PListLike ell) => + Term s (PComparator a :--> ell a :--> PBool) +pisSortedBy = phoistAcyclic $ + plam $ \cmp -> + precListLookahead (go cmp) (const (pconstant True)) (pconstant True) + where + go :: + forall (s' :: S). + Term s' (PComparator a) -> + Term s' (a :--> ell a :--> PBool) -> + Term s' a -> + Term s' a -> + Term s' (ell a) -> + Term s' PBool + go cmp self h peek rest = + pif + (pleqBy # cmp # h # peek) + (self # peek # rest) + (pconstant False) + +{- | Verifies that a list-like structure is both ordered (by the 'POrd' + instance it's full of) and has no duplicates (by the 'PEq' instance + it's full of). This can give any of the following results: + + * 'PNothing' if the structure is found to be unsorted; + * 'PJust' 'PFalse' if the structure contains a duplicate; or + * 'PJust' 'PTrue' if it is both sorted and contains no duplicates. +-} +pallUnique :: + forall (a :: PType) (ell :: PType -> PType) (s :: S). + (POrd a, PElemConstraint ell a, PListLike ell) => + Term s (ell a :--> PMaybe PBool) +pallUnique = phoistAcyclic $ plam (pallUniqueBy # pfromOrd @a #) + +{- | As 'pallUnique', but using a custom 'PComparator' to verify order and + equality. +-} +pallUniqueBy :: + forall (a :: PType) (ell :: PType -> PType) (s :: S). + (PElemConstraint ell a, PListLike ell) => + Term s (PComparator a :--> ell a :--> PMaybe PBool) +pallUniqueBy = phoistAcyclic $ + plam $ \cmp -> + precListLookahead (go cmp) (const success) success + where + success :: forall (s' :: S). Term s' (PMaybe PBool) + success = pcon . PJust . pconstant $ True + go :: + forall (s' :: S). + Term s' (PComparator a) -> + Term s' (a :--> ell a :--> PMaybe PBool) -> + Term s' a -> + Term s' a -> + Term s' (ell a) -> + Term s' (PMaybe PBool) + go cmp self h peek t = pmatch (pcompareBy # cmp # h # peek) $ \case + PLT -> self # peek # t + PEQ -> pcon . PJust . pconstant $ False + PGT -> pcon PNothing + +{- | As 'pallUnique', but errors if the list-like argument is found to be + unsorted instead of returning 'PNothing'. +-} +ptryAllUnique :: + forall (a :: PType) (ell :: PType -> PType) (s :: S). + (POrd a, PElemConstraint ell a, PListLike ell) => + Term s (ell a :--> PBool) +ptryAllUnique = phoistAcyclic $ plam (ptryAllUniqueBy # pfromOrd @a #) + +{- | As 'pallUniqueBy', but errors if the list-like argument is found to be + unsorted instead of returning 'PNothing'. +-} +ptryAllUniqueBy :: + forall (a :: PType) (ell :: PType -> PType) (s :: S). + (PElemConstraint ell a, PListLike ell) => + Term s (PComparator a :--> ell a :--> PBool) +ptryAllUniqueBy = phoistAcyclic $ + plam $ \cmp xs -> + ptraceIfNothing "ptryAllUniqueBy: argument is unordered" $ pallUniqueBy # cmp # xs + +{- | Merge two list-like structures, whose contents are sorted by the 'POrd' + instance for their contents, into one sorted list-like structure. This will + error if it finds that one of the list-like structures given to it as an + argument is not sorted. +-} +ptryMerge :: + forall (a :: PType) (ell :: PType -> PType) (s :: S). + (POrd a, PElemConstraint ell a, PListLike ell) => + Term s (ell a :--> ell a :--> ell a) +ptryMerge = phoistAcyclic $ plam (ptryMergeBy # pfromOrd @a #) + +{- | As 'ptryMerge', but instead of using 'POrd' to determine sorting, uses a + custom 'PComparator'. Will error out if one of the list-like structures given + as an argument is not sorted according to the custom 'PComparator'. +-} +ptryMergeBy :: + forall (a :: PType) (ell :: PType -> PType) (s :: S). + (PElemConstraint ell a, PListLike ell) => + Term s (PComparator a :--> ell a :--> ell a :--> ell a) +ptryMergeBy = phoistAcyclic $ + plam $ \cmp xs ys -> + phandleList xs (passertSorted # cmp # ys) $ \x xs' -> + phandleList ys (passertSorted # cmp # xs) $ \y ys' -> + (pfix #$ plam $ go cmp) # x # xs' # y # ys' + where + go :: + forall (s' :: S). + Term s' (PComparator a) -> + Term s' (a :--> ell a :--> a :--> ell a :--> ell a) -> + Term s' a -> + Term s' (ell a) -> + Term s' a -> + Term s' (ell a) -> + Term s' (ell a) + go cmp self x xs y ys = + pif + (pleqBy # cmp # x # y) + ( pcons # x #$ phandleList xs (passertSortedLookahead # cmp # y # ys) $ \x' xs' -> + pif + (pleqBy # cmp # x # x') + (self # x' # xs' # y # ys) + unorderedError + ) + ( pcons # y #$ phandleList ys (passertSortedLookahead # cmp # x # xs) $ \y' ys' -> + pif + (pleqBy # cmp # y # y') + (self # x # xs # y' # ys') + unorderedError + ) + +{- | Sort a list-like by the 'POrd' instance of its contents. + This uses a [merge sort](https://en.wikipedia.org/wiki/Merge_sort) + implementation, which is also + [stable](https://en.wikipedia.org/wiki/Sorting_algorithm#Stability). As this + is a comparison sort, it requires a linearithmic ($n \log(n)$) number of + comparisons to complete. +-} +psort :: + forall (a :: PType) (ell :: PType -> PType) (s :: S). + (POrd a, PElemConstraint ell a, PListLike ell) => + Term s (ell a :--> ell a) +psort = phoistAcyclic $ plam (psortBy # pfromOrd @a #) + +-- | As 'psort', but uses a custom 'PComparator' for order comparisons. +psortBy :: + forall (a :: PType) (ell :: PType -> PType) (s :: S). + (PElemConstraint ell a, PListLike ell) => + Term s (PComparator a :--> ell a :--> ell a) +psortBy = phoistAcyclic $ + plam $ \cmp xs -> + pmergeAllUnsafe + cmp + (const id) + pmergeUnsafe + #$ pmergeStart_2_3_4 + # cmp + # xs + +{- | As 'psort', but also throws out all duplicates according to the 'PEq' + instance of its argument's contents. +-} +pnubSort :: + forall (a :: PType) (ell :: PType -> PType) (s :: S). + (POrd a, PElemConstraint ell a, PListLike ell) => + Term s (ell a :--> ell a) +pnubSort = phoistAcyclic $ plam (pnubSortBy # pfromOrd @a #) + +{- | As 'pnubSort', but uses a custom 'PComparator' for both ordering and + equality. +-} +pnubSortBy :: + forall (a :: PType) (ell :: PType -> PType) (s :: S). + (PElemConstraint ell a, PListLike ell) => + Term s (PComparator a :--> ell a :--> ell a) +pnubSortBy = phoistAcyclic $ + plam $ \cmp xs -> + pmergeAllUnsafe + cmp + (\cmp' xs' -> pnubUnsafe # cmp' # xs') + pmergeUnsafeNoDupes + #$ pmergeStart_2_3_4 + # cmp + # xs + +-- Helpers + +-- Merges nested PLists and repacks into a list-like of your choice, given a +-- method of merging the PLists themselves. +-- +-- Only call this if you are _sure_ that the 'inner' PLists are sorted according +-- to the argument comparator! +pmergeAllUnsafe :: + forall (a :: PType) (ell :: PType -> PType) (s :: S). + (PElemConstraint ell a, PListLike ell) => + Term s (PComparator a) -> + (forall (s' :: S). Term s' (PComparator a) -> Term s' (PList a) -> Term s' (PList a)) -> + (forall (s' :: S). Term s' (PComparator a) -> Term s' (PList a) -> Term s' (PList a) -> Term s' (PList a)) -> + Term s (PList (PList a) :--> ell a) +pmergeAllUnsafe cmp whenSingleton whenMerging = plam $ \xs -> pconvertLists #$ pfix # plam go # xs + where + go :: + Term s (PList (PList a) :--> PList a) -> + Term s (PList (PList a)) -> + Term s (PList a) + go self xs = phandleList xs pnil $ \y ys -> + phandleList ys (whenSingleton cmp y) $ \_ _ -> + self #$ pmergePairs # xs + pmergePairs :: Term s (PList (PList a) :--> PList (PList a)) + pmergePairs = pfix #$ plam $ \self xs -> + phandleList xs pnil $ \x' xs' -> + phandleList xs' xs $ \x'' xs'' -> + pcons # whenMerging cmp x' x'' #$ self # xs'' + +-- Merges two PLists, leaving duplicates in place. +-- +-- Only call this if you are _sure_ that the PLists are sorted according to the +-- argument comparator! +pmergeUnsafe :: + forall (a :: PType) (s :: S). + Term s (PComparator a) -> + Term s (PList a) -> + Term s (PList a) -> + Term s (PList a) +pmergeUnsafe cmp xs ys = + phandleList xs ys $ \x' xs' -> + (pfix #$ plam $ go) # x' # xs' # ys + where + go :: + Term s (a :--> PList a :--> PList a :--> PList a) -> + Term s a -> + Term s (PList a) -> + Term s (PList a) -> + Term s (PList a) + go self x' xs' ys' = + phandleList ys' (pcons # x' # xs') $ \y'' ys'' -> + pif + (pleqBy # cmp # x' # y'') + (pcons # x' #$ self # y'' # ys'' # xs') + (pcons # y'' #$ self # x' # xs' # ys'') + +-- Merges two PLists, throwing out duplicates. +-- +-- Only call this if you are _sure_ that the PLists are sorted according to the +-- argument comparator! +pmergeUnsafeNoDupes :: + forall (a :: PType) (s :: S). + Term s (PComparator a) -> + Term s (PList a) -> + Term s (PList a) -> + Term s (PList a) +pmergeUnsafeNoDupes cmp xs ys = + phandleList xs (pnubUnsafe # cmp # ys) $ \x' xs' -> + (pfix #$ plam $ go) # x' # xs' # ys + where + go :: + Term s (a :--> PList a :--> PList a :--> PList a) -> + Term s a -> + Term s (PList a) -> + Term s (PList a) -> + Term s (PList a) + go self x' xs' ys' = + phandleList ys' (pnubUnsafe # cmp #$ pcons # x' # xs') $ \y'' ys'' -> + pmatch (pcompareBy # cmp # x' # y'') $ \case + PLT -> pcons # x' #$ self # y'' # ys'' # xs' + PEQ -> self # y'' # ys'' # xs' + PGT -> pcons # y'' #$ self # x' # xs' # ys'' + +-- Removes all duplicates from a sorted list. +-- +-- Only call this if you are _sure_ that the PLists are sorted according to the +-- argument comparator! +pnubUnsafe :: + forall (a :: PType) (s :: S). + Term s (PComparator a :--> PList a :--> PList a) +pnubUnsafe = phoistAcyclic $ + plam $ \cmp -> + precListLookahead (go cmp) (psingleton #) pnil + where + go :: + forall (s' :: S). + Term s' (PComparator a) -> + Term s' (a :--> PList a :--> PList a) -> + Term s' a -> + Term s' a -> + Term s' (PList a) -> + Term s' (PList a) + go cmp self h peek t = + pif + (pequateBy # cmp # h # peek) + (self # peek # t) + (pcons # h #$ self # peek # t) + +-- Breaks the argument into sorted chunks; currently, these range in size from 2 +-- to 4, with preference for larger chunks. To speed up the chunk sorting, we +-- use sorting networks. +pmergeStart_2_3_4 :: + forall (a :: PType) (ell :: PType -> PType) (s :: S). + (PElemConstraint ell a, PListLike ell) => + Term s (PComparator a :--> ell a :--> PList (PList a)) +pmergeStart_2_3_4 = phoistAcyclic $ + pfix #$ plam $ \self cmp -> + pmatchList pnil $ + \_0 -> pmatchList (plist [psing _0]) $ + \_1 -> pmatchList (plist [psort2 cmp _0 _1]) $ + \_2 -> pmatchList (plist [psort3 cmp _0 _1 _2]) $ + \_3 rest -> pcon $ PSCons (psort4 cmp _0 _1 _2 _3) (self # cmp # rest) + where + pmatchList :: + forall (r :: PType) (s' :: S). + Term s' r -> + (Term s' a -> Term s' (ell a) -> Term s' r) -> + Term s' (ell a) -> + Term s' r + pmatchList = flip pelimList + +-- Unhoisted Foldable lifter +plist :: + forall (a :: PType) (f :: Type -> Type) (s :: S). + (Foldable f) => + f (Term s a) -> + Term s (PList a) +plist = foldr (\x -> pcon . PSCons x) (pcon PSNil) + +-- Unhoisted singleton maker +psing :: + forall (a :: PType) (s :: S). + Term s a -> + Term s (PList a) +psing x = plist [x] + +-- Two-item sorting network; basically a comparison. +psort2 :: + forall (a :: PType) (s :: S). + Term s (PComparator a) -> + Term s a -> + Term s a -> + Term s (PList a) +psort2 cmp _0 _1 = + pswap cmp _0 _1 $ \_0 _1 -> + plist [_0, _1] + +-- Three-item sorting network. The layers are: +-- + +-- * Arg 0 vs arg 2 + +-- * Arg 0 vs arg 1 + +-- * Arg 1 vs arg 2 +psort3 :: + forall (a :: PType) (s :: S). + Term s (PComparator a) -> + Term s a -> + Term s a -> + Term s a -> + Term s (PList a) +psort3 cmp _0 _1 _2 = + pswap cmp _0 _2 $ \_0 _2 -> + pswap cmp _0 _1 $ \_0 _1 -> + pswap cmp _1 _2 $ \_1 _2 -> + plist [_0, _1, _2] + +-- Four-item sorting network. The layers are: +-- + +-- * Arg 0 vs arg 2 and arg 1 versus arg 3 + +-- * Arg 0 vs arg 1 and arg 2 versus arg 3 + +-- * Arg 1 versus arg 2 + +-- +-- We perform the layer parallelism sequentially; it doesn't affect the +-- semantics, it just makes us sad because it's slow. +psort4 :: + forall (a :: PType) (s :: S). + Term s (PComparator a) -> + Term s a -> + Term s a -> + Term s a -> + Term s a -> + Term s (PList a) +psort4 cmp _0 _1 _2 _3 = + pswap cmp _0 _2 $ \_0 _2 -> + pswap cmp _1 _3 $ \_1 _3 -> + (\f -> f # cmp # _0 # _1 # _2 # _3) $ + phoistAcyclic $ + plam $ + \cmp' _0 _1 _2 _3 -> + pswap cmp' _0 _1 $ \_0 _1 -> + pswap cmp' _2 _3 $ \_2 _3 -> + pswap cmp' _1 _2 $ \_1 _2 -> + plist [_0, _1, _2, _3] + +-- Runs a 'sorting network layer' driven by a given PComparator. Written in CPS +-- style for efficiency. +-- +-- Note +-- +-- Chaining this leads to duplication in each 'pif' branch, which can cause +-- script sizes to blow up. Specifically, the total number of 'pifs' will be +-- 2 ^ (n - 1), where n is the length of the 'swap chain'. +-- +-- To reduce blowup, you want to 'cut' your swap chain into larger 'stages', +-- separated by a lambda. You can see an example of how to do this in the psort4 +-- function in this module. +-- +-- Three to four swaps per 'stage' is a good compromise. Using more lambdas +-- increases execution costs, as each lambda needs to be hoisted, or you still +-- end up with duplication costs. In order to hoist such a lambda, it needs to +-- receive the entire list as an argument, as otherwise, it would need access to +-- out-of-scope variables, which is prevented by the type system. +-- +-- Using 'plet' instead of hoisting doesn't really help, unless the whole +-- sorting network is only called once, since you pay almost the same cost for +-- each execution as hoisting would require. +pswap :: + forall (a :: PType) (r :: PType) (s :: S). + Term s (PComparator a) -> + Term s a -> + Term s a -> + (Term s a -> Term s a -> Term s r) -> + Term s r +pswap cmp x y cont = pif (pleqBy # cmp # x # y) (cont x y) (cont y x) + +-- pelimList with the list-like first, and handles the 'nil case' before the +-- 'cons' case +phandleList :: + forall (a :: PType) (r :: PType) (ell :: PType -> PType) (s :: S). + (PElemConstraint ell a, PListLike ell) => + Term s (ell a) -> + Term s r -> + (Term s a -> Term s (ell a) -> Term s r) -> + Term s r +phandleList xs whenNil whenCons = pelimList whenCons whenNil xs + +-- ensures the argument is sorted by the comparator, erroring if not +passertSorted :: + forall (a :: PType) (ell :: PType -> PType) (s :: S). + (PElemConstraint ell a, PListLike ell) => + Term s (PComparator a :--> ell a :--> ell a) +passertSorted = phoistAcyclic $ + plam $ \cmp xs -> + phandleList xs xs $ \x' xs' -> + passertSortedLookahead # cmp # x' # xs' + +-- as passertSorted, but with the 'lookahead' already done +passertSortedLookahead :: + forall (a :: PType) (ell :: PType -> PType) (s :: S). + (PElemConstraint ell a, PListLike ell) => + Term s (PComparator a :--> a :--> ell a :--> ell a) +passertSortedLookahead = phoistAcyclic $ + plam $ \cmp x xs -> + pif + (pisSortedBy # cmp # xs) + ( phandleList xs (psingleton # x) $ \x' _ -> + pif + (pleqBy # cmp # x # x') + (pcons # x # xs) + unorderedError + ) + unorderedError + +unorderedError :: forall (a :: PType) (s :: S). Term s a +unorderedError = ptraceError "ptryMergeBy: argument list-like out of order" diff --git a/plutarch-extra/plutarch-extra.cabal b/plutarch-extra/plutarch-extra.cabal index a2ae049e7..c678ceb5a 100644 --- a/plutarch-extra/plutarch-extra.cabal +++ b/plutarch-extra/plutarch-extra.cabal @@ -87,6 +87,7 @@ library Plutarch.Extra.Interval Plutarch.Extra.List Plutarch.Extra.Maybe + Plutarch.Extra.Ord Plutarch.Extra.RationalData Plutarch.Extra.TermCont diff --git a/plutarch-test/goldens/data-verif.bench.golden b/plutarch-test/goldens/data-verif.bench.golden index a4bf20d66..6a5784e56 100644 --- a/plutarch-test/goldens/data-verif.bench.golden +++ b/plutarch-test/goldens/data-verif.bench.golden @@ -3,13 +3,13 @@ erroneous.[String] /= [Integer] {"exBudgetCPU":467623,"exBudgetMemory":388,"scri erroneous.A { test := Integer, test2 := Integer } /= { test := String, test2 := Integer } {"exBudgetCPU":304406,"exBudgetMemory":356,"scriptSizeBytes":153} erroneous.PDataSum constr 2 {"exBudgetCPU":700994,"exBudgetMemory":230,"scriptSizeBytes":222} erroneous.PDataSum wrong record type {"exBudgetCPU":990483,"exBudgetMemory":232,"scriptSizeBytes":282} -erroneous.[ByteString] (with length == 2) /= PRational {"exBudgetCPU":1682971,"exBudgetMemory":486,"scriptSizeBytes":210} -erroneous.[Integer] (with length == 0) /= PRational {"exBudgetCPU":125996,"exBudgetMemory":196,"scriptSizeBytes":172} -erroneous.[Integer] (with length == 3) /= PRational {"exBudgetCPU":1872200,"exBudgetMemory":422,"scriptSizeBytes":217} -erroneous.[Integer] (with length == 2, with 0 denominator) /= PRational {"exBudgetCPU":2179266,"exBudgetMemory":456,"scriptSizeBytes":203} +erroneous.[ByteString] (with length == 2) /= PRational {"exBudgetCPU":1682971,"exBudgetMemory":486,"scriptSizeBytes":512} +erroneous.[Integer] (with length == 0) /= PRational {"exBudgetCPU":125996,"exBudgetMemory":196,"scriptSizeBytes":474} +erroneous.[Integer] (with length == 3) /= PRational {"exBudgetCPU":1872200,"exBudgetMemory":422,"scriptSizeBytes":519} +erroneous.[Integer] (with length == 2, with 0 denominator) /= PRational {"exBudgetCPU":10605775,"exBudgetMemory":20524,"scriptSizeBytes":505} working.(String, String) == (String, String) {"exBudgetCPU":4806613,"exBudgetMemory":14428,"scriptSizeBytes":123} working.[String] == [String] {"exBudgetCPU":4994603,"exBudgetMemory":16904,"scriptSizeBytes":114} -working.[Integer] (with length == 2) == PRational {"exBudgetCPU":7549502,"exBudgetMemory":19484,"scriptSizeBytes":355} +working.[Integer] (with length == 2) == PRational {"exBudgetCPU":8446502,"exBudgetMemory":23384,"scriptSizeBytes":654} working.A { test := Integer, test2 := Integer } == { test := Integer, test2 := Integer } {"exBudgetCPU":2950183,"exBudgetMemory":9876,"scriptSizeBytes":147} working.A { test := Integer, test2 := Integer } == [Integer] {"exBudgetCPU":2950183,"exBudgetMemory":9876,"scriptSizeBytes":147} working.A { test := String, test2 := Integer } == { test := String, test2 := Integer } {"exBudgetCPU":3007046,"exBudgetMemory":10176,"scriptSizeBytes":153} diff --git a/plutarch-test/goldens/data-verif.uplc.golden b/plutarch-test/goldens/data-verif.uplc.golden index a76911a68..217cd5cd7 100644 --- a/plutarch-test/goldens/data-verif.uplc.golden +++ b/plutarch-test/goldens/data-verif.uplc.golden @@ -3,13 +3,13 @@ erroneous.[String] /= [Integer] (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> erroneous.A { test := Integer, test2 := Integer } /= { test := String, test2 := Integer } (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> listData (i12 (bData i11) (i12 (iData 42) i13))) (force (force (force chooseList) i1 (delay ()) (delay (force (force trace "ptryFrom(PDataRecord[]): list is longer than zero" (delay error))))))) (i7 i3)) (unIData i1)) (i6 i1)) (i4 i3)) (unIData i1)) (i3 i1)) (unListData (listData (i4 (bData i3) (i4 (iData 42) i5))))) (force tailList)) (force headList)) #62617a) (force mkCons)) [ ])) erroneous.PDataSum constr 2 (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> i8) (force (force ifThenElse (equalsInteger 0 i2) (delay ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> ()) (force (force (force chooseList) i1 (delay ()) (delay (force (i12 "ptryFrom(PDataRecord[]): list is longer than zero" (delay error))))))) (i9 i3)) (unBData i1)) (i8 i1)) (i6 i3)) (unIData i1)) (i5 i1))) (delay (force (i6 "reached end of sum while still not having found the constructor" (delay error))))))) (force (force sndPair) i2)) (force (force fstPair) i1)) (unConstrData i4)) (force tailList)) (force headList)) (force trace)) #d87a9f0543666f6fff)) erroneous.PDataSum wrong record type (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> i11) (force (i4 (equalsInteger 0 i2) (delay ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> ()) (force (i11 i1 (delay ()) (delay (force (i15 i12 (delay error))))))) (i12 i3)) (unBData i1)) (i11 i1)) (i9 i3)) (unIData i1)) (i8 i1))) (delay (force (i4 (equalsInteger 1 i2) (delay ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> ()) (force (i11 i1 (delay ()) (delay (force (i15 i12 (delay error))))))) (i12 i3)) (unBData i1)) (i11 i1)) (i9 i3)) (unBData i1)) (i8 i1))) (delay (force (i9 "reached end of sum while still not having found the constructor" (delay error)))))))))) (force (force sndPair) i2)) (force (force fstPair) i1)) (unConstrData i7)) (force ifThenElse)) (force (force chooseList))) "ptryFrom(PDataRecord[]): list is longer than zero") (force tailList)) (force headList)) (force trace)) #d87b9f0543666f6fff)) -erroneous.[ByteString] (with length == 2) /= PRational (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> force (i3 (equalsData (listData (i5 i1)) (listData i9)) (delay ((\i0 -> (\i0 -> listData (i9 (bData i8) (i9 (bData i10) i11))) (force (i4 (lessThanEqualsInteger i1 0) (delay (force (i5 "ptryPositive: building with non positive" (delay error)))) (delay i1)))) (unIData (force headList i1)))) (delay (force (i4 "ptryFrom(PRational): data list length should be 2" (delay error)))))) (i4 i1)) (unListData (listData (i5 (bData i4) (i5 (bData i6) i7))))) (force ifThenElse)) (force trace)) (force tailList)) #41) (force mkCons)) #2b) [ ])) -erroneous.[Integer] (with length == 0) /= PRational (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> force (i3 (equalsData (listData (i5 i1)) (listData i6)) (delay ((\i0 -> (\i0 -> listData i8) (force (i4 (lessThanEqualsInteger i1 0) (delay (force (i5 "ptryPositive: building with non positive" (delay error)))) (delay i1)))) (unIData (force headList i1)))) (delay (force (i4 "ptryFrom(PRational): data list length should be 2" (delay error)))))) (i4 i1)) (unListData (listData i4))) (force ifThenElse)) (force trace)) (force tailList)) [ ])) -erroneous.[Integer] (with length == 3) /= PRational (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> force (i3 (equalsData (listData (i5 i1)) (listData i10)) (delay ((\i0 -> (\i0 -> listData (i10 i8 (i10 i9 (i10 i11 i12)))) (force (i4 (lessThanEqualsInteger i1 0) (delay (force (i5 "ptryPositive: building with non positive" (delay error)))) (delay i1)))) (unIData (force headList i1)))) (delay (force (i4 "ptryFrom(PRational): data list length should be 2" (delay error)))))) (i4 i1)) (unListData (listData (i6 i4 (i6 i5 (i6 i7 i8)))))) (force ifThenElse)) (force trace)) (force tailList)) #182a) #07) (force mkCons)) #00) [ ])) -erroneous.[Integer] (with length == 2, with 0 denominator) /= PRational (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> force (i3 (equalsData (listData (i5 i1)) (listData i9)) (delay ((\i0 -> (\i0 -> listData (i9 i8 (i9 i10 i11))) (force (i4 (lessThanEqualsInteger i1 0) (delay (force (i5 "ptryPositive: building with non positive" (delay error)))) (delay i1)))) (unIData (force headList i1)))) (delay (force (i4 "ptryFrom(PRational): data list length should be 2" (delay error)))))) (i4 i1)) (unListData (listData (i5 i4 (i5 i6 i7))))) (force ifThenElse)) (force trace)) (force tailList)) #182a) (force mkCons)) #00) [ ])) +erroneous.[ByteString] (with length == 2) /= PRational (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> force (i15 (equalsData (listData (i18 i1)) (listData i22)) (delay ((\i0 -> (\i0 -> listData (i22 (bData i21) (i22 (bData i23) i24))) (force (i16 (lessThanEqualsInteger i1 0) (delay (force (i18 (appendString "ptryPositive: building with non positive: " ((\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> appendString (force (i18 (lessThanInteger i1 0) (delay "-") (delay ""))) ((\i0 -> (\i0 -> force (i20 (equalsInteger i2 0) (delay (i8 i1)) (delay ((\i0 -> appendString i1 (i9 i2)) (i4 i2))))) (remainderInteger (i18 i2) 10)) (quotientInteger (i17 i1) 10))) i1)) (delay error)))) (delay i1)))) (unIData (force headList i1)))) (delay (force (i17 "ptryFrom(PRational): data list length should be 2" (delay error)))))) (i17 i1)) (unListData (listData (i18 (bData i17) (i18 (bData i19) i20))))) (\i0 -> force (i13 (equalsInteger i1 0) (delay i2) (delay (force (i13 (equalsInteger i1 1) (delay i3) (delay (force (i13 (equalsInteger i1 2) (delay i4) (delay (force (i13 (equalsInteger i1 3) (delay i5) (delay (force (i13 (equalsInteger i1 4) (delay i6) (delay (force (i13 (equalsInteger i1 5) (delay i7) (delay (force (i13 (equalsInteger i1 6) (delay i8) (delay (force (i13 (equalsInteger i1 7) (delay i9) (delay (force (i13 (equalsInteger i1 8) (delay i10) (delay (force (i13 (equalsInteger i1 9) (delay i11) (delay error))))))))))))))))))))))))))))))) "0") "1") "2") "3") "4") "5") "6") "7") "8") "9") (\i0 -> force (i2 (lessThanEqualsInteger i1 (i3 1)) (delay (i3 i1)) (delay i1)))) (force ifThenElse)) (\i0 -> subtractInteger 0 i1)) (force trace)) (force tailList)) #41) (force mkCons)) #2b) [ ])) +erroneous.[Integer] (with length == 0) /= PRational (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> force (i15 (equalsData (listData (i18 i1)) (listData i19)) (delay ((\i0 -> (\i0 -> listData i21) (force (i16 (lessThanEqualsInteger i1 0) (delay (force (i18 (appendString "ptryPositive: building with non positive: " ((\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> appendString (force (i18 (lessThanInteger i1 0) (delay "-") (delay ""))) ((\i0 -> (\i0 -> force (i20 (equalsInteger i2 0) (delay (i8 i1)) (delay ((\i0 -> appendString i1 (i9 i2)) (i4 i2))))) (remainderInteger (i18 i2) 10)) (quotientInteger (i17 i1) 10))) i1)) (delay error)))) (delay i1)))) (unIData (force headList i1)))) (delay (force (i17 "ptryFrom(PRational): data list length should be 2" (delay error)))))) (i17 i1)) (unListData (listData i17))) (\i0 -> force (i13 (equalsInteger i1 0) (delay i2) (delay (force (i13 (equalsInteger i1 1) (delay i3) (delay (force (i13 (equalsInteger i1 2) (delay i4) (delay (force (i13 (equalsInteger i1 3) (delay i5) (delay (force (i13 (equalsInteger i1 4) (delay i6) (delay (force (i13 (equalsInteger i1 5) (delay i7) (delay (force (i13 (equalsInteger i1 6) (delay i8) (delay (force (i13 (equalsInteger i1 7) (delay i9) (delay (force (i13 (equalsInteger i1 8) (delay i10) (delay (force (i13 (equalsInteger i1 9) (delay i11) (delay error))))))))))))))))))))))))))))))) "0") "1") "2") "3") "4") "5") "6") "7") "8") "9") (\i0 -> force (i2 (lessThanEqualsInteger i1 (i3 1)) (delay (i3 i1)) (delay i1)))) (force ifThenElse)) (\i0 -> subtractInteger 0 i1)) (force trace)) (force tailList)) [ ])) +erroneous.[Integer] (with length == 3) /= PRational (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> force (i15 (equalsData (listData (i18 i1)) (listData i23)) (delay ((\i0 -> (\i0 -> listData (i23 i21 (i23 i22 (i23 i24 i25)))) (force (i16 (lessThanEqualsInteger i1 0) (delay (force (i18 (appendString "ptryPositive: building with non positive: " ((\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> appendString (force (i18 (lessThanInteger i1 0) (delay "-") (delay ""))) ((\i0 -> (\i0 -> force (i20 (equalsInteger i2 0) (delay (i8 i1)) (delay ((\i0 -> appendString i1 (i9 i2)) (i4 i2))))) (remainderInteger (i18 i2) 10)) (quotientInteger (i17 i1) 10))) i1)) (delay error)))) (delay i1)))) (unIData (force headList i1)))) (delay (force (i17 "ptryFrom(PRational): data list length should be 2" (delay error)))))) (i17 i1)) (unListData (listData (i19 i17 (i19 i18 (i19 i20 i21)))))) (\i0 -> force (i13 (equalsInteger i1 0) (delay i2) (delay (force (i13 (equalsInteger i1 1) (delay i3) (delay (force (i13 (equalsInteger i1 2) (delay i4) (delay (force (i13 (equalsInteger i1 3) (delay i5) (delay (force (i13 (equalsInteger i1 4) (delay i6) (delay (force (i13 (equalsInteger i1 5) (delay i7) (delay (force (i13 (equalsInteger i1 6) (delay i8) (delay (force (i13 (equalsInteger i1 7) (delay i9) (delay (force (i13 (equalsInteger i1 8) (delay i10) (delay (force (i13 (equalsInteger i1 9) (delay i11) (delay error))))))))))))))))))))))))))))))) "0") "1") "2") "3") "4") "5") "6") "7") "8") "9") (\i0 -> force (i2 (lessThanEqualsInteger i1 (i3 1)) (delay (i3 i1)) (delay i1)))) (force ifThenElse)) (\i0 -> subtractInteger 0 i1)) (force trace)) (force tailList)) #182a) #07) (force mkCons)) #00) [ ])) +erroneous.[Integer] (with length == 2, with 0 denominator) /= PRational (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> force (i15 (equalsData (listData (i18 i1)) (listData i22)) (delay ((\i0 -> (\i0 -> listData (i22 i21 (i22 i23 i24))) (force (i16 (lessThanEqualsInteger i1 0) (delay (force (i18 (appendString "ptryPositive: building with non positive: " ((\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> appendString (force (i18 (lessThanInteger i1 0) (delay "-") (delay ""))) ((\i0 -> (\i0 -> force (i20 (equalsInteger i2 0) (delay (i8 i1)) (delay ((\i0 -> appendString i1 (i9 i2)) (i4 i2))))) (remainderInteger (i18 i2) 10)) (quotientInteger (i17 i1) 10))) i1)) (delay error)))) (delay i1)))) (unIData (force headList i1)))) (delay (force (i17 "ptryFrom(PRational): data list length should be 2" (delay error)))))) (i17 i1)) (unListData (listData (i18 i17 (i18 i19 i20))))) (\i0 -> force (i13 (equalsInteger i1 0) (delay i2) (delay (force (i13 (equalsInteger i1 1) (delay i3) (delay (force (i13 (equalsInteger i1 2) (delay i4) (delay (force (i13 (equalsInteger i1 3) (delay i5) (delay (force (i13 (equalsInteger i1 4) (delay i6) (delay (force (i13 (equalsInteger i1 5) (delay i7) (delay (force (i13 (equalsInteger i1 6) (delay i8) (delay (force (i13 (equalsInteger i1 7) (delay i9) (delay (force (i13 (equalsInteger i1 8) (delay i10) (delay (force (i13 (equalsInteger i1 9) (delay i11) (delay error))))))))))))))))))))))))))))))) "0") "1") "2") "3") "4") "5") "6") "7") "8") "9") (\i0 -> force (i2 (lessThanEqualsInteger i1 (i3 1)) (delay (i3 i1)) (delay i1)))) (force ifThenElse)) (\i0 -> subtractInteger 0 i1)) (force trace)) (force tailList)) #182a) (force mkCons)) #00) [ ])) working.(String, String) == (String, String) (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> i4 (mkPairData (bData i9) (bData i10))) (mkPairData ((\i0 -> i5 i2) (unBData (i4 i1))) ((\i0 -> i7 i2) (unBData (i6 i1))))) ((\i0 -> (\i0 -> mkPairData (i3 i1) (i3 (force tailList i1))) (i6 (unConstrData i1))) (i2 (mkPairData (bData i7) (bData i8))))) (force headList)) (\i0 -> constrData 0 (i3 (i2 i1) (i3 (i4 i1) i5)))) (force (force fstPair))) (force mkCons)) (force (force sndPair))) [ ]) #666f6f) #626172)) working.[String] == [String] (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> listData (i4 (bData i2) (i3 (bData i6)))) ((\i0 -> (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> force (force (force chooseList) i1 (delay i7) (delay (i6 (i3 (force headList i1)) (i2 (force tailList i1))))))) (\i0 -> (\i0 -> i2) (unBData i1)) (unListData (listData (i3 (bData i1) (i2 (bData i5))))))) #666f6f) (\i0 -> i2 i1 i3)) (force mkCons)) [ ]) #626172)) -working.[Integer] (with length == 2) == PRational (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> force (i3 (equalsData (listData (i6 i1)) (listData i10)) (delay ((\i0 -> (\i0 -> force (i5 (equalsInteger i1 (unIData i11)) (delay (force (i5 ((\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> equalsInteger (multiplyInteger i1 i4) (multiplyInteger i2 i3)))) ((\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (unIData (i9 (i11 i2)))) (unIData (i8 i1))) (unListData i1)) (listData (i10 i9 (i10 i11 i12)))) ((\i0 -> \i0 -> i1 i2 i3) (unIData i9))) (delay ()) (delay (force (i7 "drat should be as expected" (delay error))))))) (delay (force (i7 "non-zero should be as expected" (delay error)))))) (force (i4 (lessThanEqualsInteger i1 0) (delay (force (i6 "ptryPositive: building with non positive" (delay error)))) (delay i1)))) (unIData (i4 i1)))) (delay (force (i5 "ptryFrom(PRational): data list length should be 2" (delay error)))))) (i5 i1)) (unListData (listData (i6 i5 (i6 i7 i8))))) (force ifThenElse)) (force headList)) (force trace)) (force tailList)) #182a) (force mkCons)) #181f) [ ])) +working.[Integer] (with length == 2) == PRational (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> force (i15 (equalsData (listData (i19 i1)) (listData i23)) (delay ((\i0 -> (\i0 -> force (i17 (equalsInteger i1 (unIData i24)) (delay (force (i17 ((\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> equalsInteger (multiplyInteger i1 i4) (multiplyInteger i2 i3)))) ((\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (unIData (i22 (i24 i2)))) (unIData (i21 i1))) (unListData i1)) (listData (i23 i22 (i23 i24 i25)))) ((\i0 -> \i0 -> i1 i2 i3) (unIData i22))) (delay ()) (delay (force (i20 "drat should be as expected" (delay error))))))) (delay (force (i20 "non-zero should be as expected" (delay error)))))) (force (i16 (lessThanEqualsInteger i1 0) (delay (force (i19 (appendString "ptryPositive: building with non positive: " ((\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> appendString (force (i18 (lessThanInteger i1 0) (delay "-") (delay ""))) ((\i0 -> (\i0 -> force (i20 (equalsInteger i2 0) (delay (i8 i1)) (delay ((\i0 -> appendString i1 (i9 i2)) (i4 i2))))) (remainderInteger (i18 i2) 10)) (quotientInteger (i17 i1) 10))) i1)) (delay error)))) (delay i1)))) (unIData (i17 i1)))) (delay (force (i18 "ptryFrom(PRational): data list length should be 2" (delay error)))))) (i18 i1)) (unListData (listData (i19 i18 (i19 i20 i21))))) (\i0 -> force (i13 (equalsInteger i1 0) (delay i2) (delay (force (i13 (equalsInteger i1 1) (delay i3) (delay (force (i13 (equalsInteger i1 2) (delay i4) (delay (force (i13 (equalsInteger i1 3) (delay i5) (delay (force (i13 (equalsInteger i1 4) (delay i6) (delay (force (i13 (equalsInteger i1 5) (delay i7) (delay (force (i13 (equalsInteger i1 6) (delay i8) (delay (force (i13 (equalsInteger i1 7) (delay i9) (delay (force (i13 (equalsInteger i1 8) (delay i10) (delay (force (i13 (equalsInteger i1 9) (delay i11) (delay error))))))))))))))))))))))))))))))) "0") "1") "2") "3") "4") "5") "6") "7") "8") "9") (\i0 -> force (i2 (lessThanEqualsInteger i1 (i3 1)) (delay (i3 i1)) (delay i1)))) (force ifThenElse)) (\i0 -> subtractInteger 0 i1)) (force headList)) (force trace)) (force tailList)) #182a) (force mkCons)) #181f) [ ])) working.A { test := Integer, test2 := Integer } == { test := Integer, test2 := Integer } (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> listData (i11 (iData 7) (i11 (iData 42) i12))) (force (force (force chooseList) i1 (delay ()) (delay (force (force trace "ptryFrom(PDataRecord[]): list is longer than zero" (delay error))))))) (i7 i3)) (unIData i1)) (i6 i1)) (i4 i3)) (unIData i1)) (i3 i1)) (unListData (listData (i3 (iData 7) (i3 (iData 42) i4))))) (force tailList)) (force headList)) (force mkCons)) [ ])) working.A { test := Integer, test2 := Integer } == [Integer] (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> listData (i11 (iData 7) (i11 (iData 42) i12))) (force (force (force chooseList) i1 (delay ()) (delay (force (force trace "ptryFrom(PDataRecord[]): list is longer than zero" (delay error))))))) (i7 i3)) (unIData i1)) (i6 i1)) (i4 i3)) (unIData i1)) (i3 i1)) (unListData (listData (i3 (iData 7) (i3 (iData 42) i4))))) (force tailList)) (force headList)) (force mkCons)) [ ])) working.A { test := String, test2 := Integer } == { test := String, test2 := Integer } (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> listData (i12 (bData i11) (i12 (iData 42) i13))) (force (force (force chooseList) i1 (delay ()) (delay (force (force trace "ptryFrom(PDataRecord[]): list is longer than zero" (delay error))))))) (i7 i3)) (unIData i1)) (i6 i1)) (i4 i3)) (unBData i1)) (i3 i1)) (unListData (listData (i4 (bData i3) (i4 (iData 42) i5))))) (force tailList)) (force headList)) #62617a) (force mkCons)) [ ])) diff --git a/plutarch-test/goldens/extra.listutils.bench.golden b/plutarch-test/goldens/extra.listutils.bench.golden index 7b04fe4a8..009738b55 100644 --- a/plutarch-test/goldens/extra.listutils.bench.golden +++ b/plutarch-test/goldens/extra.listutils.bench.golden @@ -1,4 +1,15 @@ reverse.reverse_[1..5] {"exBudgetCPU":5865100,"exBudgetMemory":25600,"scriptSizeBytes":87} isSorted.[1..10] {"exBudgetCPU":16166677,"exBudgetMemory":59218,"scriptSizeBytes":115} isSorted.reverse_[1..10] {"exBudgetCPU":3379609,"exBudgetMemory":13203,"scriptSizeBytes":126} -isSorted.reverse_[] {"exBudgetCPU":621100,"exBudgetMemory":2800,"scriptSizeBytes":56} \ No newline at end of file +isSorted.reverse_[] {"exBudgetCPU":621100,"exBudgetMemory":2800,"scriptSizeBytes":56} +pmapMaybe.mapMaybe_[1..5] {"exBudgetCPU":6141100,"exBudgetMemory":26800,"scriptSizeBytes":90} +pmapMaybe.mapMaybe_[] {"exBudgetCPU":552100,"exBudgetMemory":2500,"scriptSizeBytes":62} +pmapMaybe.mapMaybe_[1..5]_Nothing {"exBudgetCPU":6235033,"exBudgetMemory":26301,"scriptSizeBytes":118} +preplicate.preplicate_5_0 {"exBudgetCPU":14913020,"exBudgetMemory":41245,"scriptSizeBytes":94} +preplicate.preplicate_0_0 {"exBudgetCPU":2073340,"exBudgetMemory":6235,"scriptSizeBytes":94} +pfindJust.pfindJust_2_[1..10] {"exBudgetCPU":5709488,"exBudgetMemory":20607,"scriptSizeBytes":161} +pfindJust.pfindJust_20_[1..10] {"exBudgetCPU":16441990,"exBudgetMemory":59020,"scriptSizeBytes":149} +pfindJust.pfindJust_[] {"exBudgetCPU":1279454,"exBudgetMemory":4932,"scriptSizeBytes":87} +plookupAssoc.plookupAssoc_3_[(1..10, 1..10)] {"exBudgetCPU":9702500,"exBudgetMemory":37607,"scriptSizeBytes":291} +plookupAssoc.plookupAssoc_20_[(1..10, 1..10)] {"exBudgetCPU":21041990,"exBudgetMemory":79020,"scriptSizeBytes":287} +plookupAssoc.plookupAssoc_[] {"exBudgetCPU":1518100,"exBudgetMemory":6700,"scriptSizeBytes":127} \ No newline at end of file diff --git a/plutarch-test/goldens/extra.listutils.uplc.eval.golden b/plutarch-test/goldens/extra.listutils.uplc.eval.golden index f33a1f36b..2965bb770 100644 --- a/plutarch-test/goldens/extra.listutils.uplc.eval.golden +++ b/plutarch-test/goldens/extra.listutils.uplc.eval.golden @@ -1,4 +1,15 @@ reverse.reverse_[1..5] (program 1.0.0 (\i0 -> \i0 -> i2 5 (\i0 -> \i0 -> i2 4 (\i0 -> \i0 -> i2 3 (\i0 -> \i0 -> i2 2 (\i0 -> \i0 -> i2 1 (\i0 -> \i0 -> force i1))))))) isSorted.[1..10] (program 1.0.0 True) isSorted.reverse_[1..10] (program 1.0.0 True) -isSorted.reverse_[] (program 1.0.0 (\i0 -> \i0 -> force i1)) \ No newline at end of file +isSorted.reverse_[] (program 1.0.0 (\i0 -> \i0 -> force i1)) +pmapMaybe.mapMaybe_[1..5] (program 1.0.0 (\i0 -> \i0 -> i2 1 (\i0 -> \i0 -> i2 2 (\i0 -> \i0 -> i2 3 (\i0 -> \i0 -> i2 4 (\i0 -> \i0 -> i2 5 (\i0 -> \i0 -> force i1))))))) +pmapMaybe.mapMaybe_[] (program 1.0.0 (\i0 -> \i0 -> force i1)) +pmapMaybe.mapMaybe_[1..5]_Nothing (program 1.0.0 True) +preplicate.preplicate_5_0 (program 1.0.0 True) +preplicate.preplicate_0_0 (program 1.0.0 True) +pfindJust.pfindJust_2_[1..10] (program 1.0.0 True) +pfindJust.pfindJust_20_[1..10] (program 1.0.0 True) +pfindJust.pfindJust_[] (program 1.0.0 True) +plookupAssoc.plookupAssoc_3_[(1..10, 1..10)] (program 1.0.0 True) +plookupAssoc.plookupAssoc_20_[(1..10, 1..10)] (program 1.0.0 True) +plookupAssoc.plookupAssoc_[] (program 1.0.0 True) \ No newline at end of file diff --git a/plutarch-test/goldens/extra.listutils.uplc.golden b/plutarch-test/goldens/extra.listutils.uplc.golden index 8aab48a48..aea245040 100644 --- a/plutarch-test/goldens/extra.listutils.uplc.golden +++ b/plutarch-test/goldens/extra.listutils.uplc.golden @@ -1,4 +1,15 @@ reverse.reverse_[1..5] (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> \i0 -> i1 (\i0 -> \i0 -> i5 (i6 i4 i2) i1) (delay i2))) (\i0 -> \i0 -> i3 i1 i2) (\i0 -> \i0 -> force i1) (i1 1 (i1 2 (i1 3 (i1 4 (i1 5 (\i0 -> \i0 -> force i1))))))) (\i0 -> \i0 -> \i0 -> \i0 -> i2 i4 i3))) isSorted.[1..10] (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> force ((\i0 -> \i0 -> force ifThenElse i2 i1 (delay False)) (lessThanEqualsInteger i4 i2) (delay (i6 i3)))) (delay True)) (delay True)) (i1 1 (i1 2 (i1 3 (i1 4 (i1 5 (i1 6 (i1 7 (i1 8 (i1 9 (i1 10 (\i0 -> \i0 -> force i1)))))))))))) (\i0 -> \i0 -> \i0 -> \i0 -> i2 i4 i3))) isSorted.reverse_[1..10] (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> i2 i1 False True) ((\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> force ((\i0 -> \i0 -> i9 i2 i1 (delay False)) (lessThanEqualsInteger i4 i2) (delay (i6 i3)))) (delay True)) (delay True)) (i2 10 (i2 9 (i2 8 (i2 7 (i2 6 (i2 5 (i2 4 (i2 3 (i2 2 (i2 1 (\i0 -> \i0 -> force i1))))))))))))) (force ifThenElse)) (\i0 -> \i0 -> \i0 -> \i0 -> i2 i4 i3))) -isSorted.reverse_[] (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> \i0 -> i1 (\i0 -> \i0 -> i5 (i6 i4 i2) i1) (delay i2))) (\i0 -> \i0 -> \i0 -> \i0 -> i2 i3 i4) (\i0 -> \i0 -> force i1) (\i0 -> \i0 -> force i1))) \ No newline at end of file +isSorted.reverse_[] (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> \i0 -> i1 (\i0 -> \i0 -> i5 (i6 i4 i2) i1) (delay i2))) (\i0 -> \i0 -> \i0 -> \i0 -> i2 i3 i4) (\i0 -> \i0 -> force i1) (\i0 -> \i0 -> force i1))) +pmapMaybe.mapMaybe_[1..5] (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i5 i2 (\i0 -> i7 i1 (i5 i2)) (delay (i4 i1))) (delay (\i0 -> \i0 -> force i1)))) (\i0 -> \i0 -> \i0 -> i2 i3) (i1 1 (i1 2 (i1 3 (i1 4 (i1 5 (\i0 -> \i0 -> force i1))))))) (\i0 -> \i0 -> \i0 -> \i0 -> i2 i4 i3))) +pmapMaybe.mapMaybe_[] (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i5 i2 (\i0 -> (\i0 -> \i0 -> \i0 -> i2 i4 i3) (i5 i2)) (delay (i4 i1))) (delay (\i0 -> \i0 -> force i1)))) (\i0 -> \i0 -> \i0 -> i2 i3) (\i0 -> \i0 -> force i1))) +pmapMaybe.mapMaybe_[1..5]_Nothing (program 1.0.0 ((\i0 -> (\i0 -> equalsInteger 0 (i1 (\i0 -> \i0 -> \i0 -> i1 (\i0 -> \i0 -> i5 (addInteger i4 1) i1) (delay i2)) 0 ((\i0 -> i2 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i5 i2 (\i0 -> i8 i1 (i5 i2)) (delay (i4 i1))) (delay (\i0 -> \i0 -> force i1)))) (\i0 -> \i0 -> \i0 -> force i1) (i2 1 (i2 2 (i2 3 (i2 4 (i2 5 (\i0 -> \i0 -> force i1))))))))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) (\i0 -> \i0 -> \i0 -> \i0 -> i2 i4 i3))) +preplicate.preplicate_5_0 (program 1.0.0 ((\i0 -> equalsInteger 5 (i1 (\i0 -> \i0 -> \i0 -> force (force (force chooseList) i1 (delay i2) (delay (i3 (addInteger i2 1) (force tailList i1))))) 0 (i1 (\i0 -> \i0 -> \i0 -> force (force ifThenElse (lessThanEqualsInteger i2 0) (delay []) (delay (force mkCons i1 (i3 (subtractInteger i2 1) i1))))) 5 0))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))))) +preplicate.preplicate_0_0 (program 1.0.0 ((\i0 -> equalsInteger 0 (i1 (\i0 -> \i0 -> \i0 -> force (force (force chooseList) i1 (delay i2) (delay (i3 (addInteger i2 1) (force tailList i1))))) 0 (i1 (\i0 -> \i0 -> \i0 -> force (force ifThenElse (lessThanEqualsInteger i2 0) (delay []) (delay (force mkCons i1 (i3 (subtractInteger i2 1) i1))))) 0 0))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))))) +pfindJust.pfindJust_2_[1..10] (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> \i0 -> i2 (\i0 -> i2 (\i0 -> equalsInteger i2 i1) (delay False)) (delay (i1 (\i0 -> False) (delay True)))) (i1 4) ((\i0 -> (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i5 i2 (\i0 -> \i0 -> \i0 -> i2 i3) (delay (i4 i1))) (delay (\i0 -> \i0 -> force i1)))) (\i0 -> force (force ifThenElse (equalsInteger i1 2) (delay (i2 (addInteger i1 2))) (delay (\i0 -> \i0 -> force i1)))) (i2 1 (i2 2 (i2 3 (i2 4 (i2 5 (i2 6 (i2 7 (i2 8 (i2 9 (i2 10 (\i0 -> \i0 -> force i1))))))))))))) (\i0 -> \i0 -> \i0 -> i2 i3)) (\i0 -> \i0 -> \i0 -> \i0 -> i2 i4 i3))) +pfindJust.pfindJust_20_[1..10] (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> i2 (\i0 -> i2 (\i0 -> equalsInteger i2 i1) (delay False)) (delay (i1 (\i0 -> False) (delay True)))) ((\i0 -> (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i5 i2 (\i0 -> \i0 -> \i0 -> i2 i3) (delay (i4 i1))) (delay (\i0 -> \i0 -> force i1)))) (\i0 -> force (force ifThenElse (equalsInteger i1 20) (delay (\i0 -> \i0 -> i2 i3)) (delay i2))) (i2 1 (i2 2 (i2 3 (i2 4 (i2 5 (i2 6 (i2 7 (i2 8 (i2 9 (i2 10 (\i0 -> \i0 -> force i1))))))))))))) (\i0 -> \i0 -> force i1)) (\i0 -> \i0 -> \i0 -> \i0 -> i2 i4 i3))) +pfindJust.pfindJust_[] (program 1.0.0 ((\i0 -> \i0 -> i2 (\i0 -> i2 (\i0 -> equalsInteger i2 i1) (delay False)) (delay (i1 (\i0 -> False) (delay True)))) (\i0 -> \i0 -> force i1) ((\i0 -> (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> force (force (force chooseList) i1 (delay (\i0 -> \i0 -> force i1)) (delay (i3 (force headList i1) (\i0 -> \i0 -> \i0 -> i2 i3) (delay (i2 (force tailList i1)))))))) (\i0 -> \i0 -> \i0 -> i2 i3) []))) +plookupAssoc.plookupAssoc_3_[(1..10, 1..10)] (program 1.0.0 ((\i0 -> (\i0 -> \i0 -> i2 (\i0 -> i2 (\i0 -> equalsInteger i2 i1) (delay False)) (delay (i1 (\i0 -> False) (delay True)))) ((\i0 -> \i0 -> \i0 -> i2 i3) 8) ((\i0 -> \i0 -> \i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i5 i2 (\i0 -> \i0 -> \i0 -> i2 i3) (delay (i4 i1))) (delay (\i0 -> \i0 -> force i1)))) (\i0 -> force (force ifThenElse (equalsInteger i3 (i5 i1)) (delay (\i0 -> \i0 -> i2 i3)) (delay (\i0 -> \i0 -> force i1)))) i1 (\i0 -> (\i0 -> \i0 -> \i0 -> i2 i3) (i4 i1)) (delay (\i0 -> \i0 -> force i1))) (\i0 -> i1 (\i0 -> \i0 -> i2)) (\i0 -> i1 (\i0 -> \i0 -> i1)) 3 (i1 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 10) 1) (i1 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 9) 2) (i1 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 8) 3) (i1 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 7) 4) (i1 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 6) 5) (i1 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 5) 6) (i1 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 4) 7) (i1 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 3) 8) (i1 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 2) 9) (i1 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 10) (\i0 -> \i0 -> force i1))))))))))))) (\i0 -> \i0 -> \i0 -> \i0 -> i2 i4 i3))) +plookupAssoc.plookupAssoc_20_[(1..10, 1..10)] (program 1.0.0 ((\i0 -> (\i0 -> \i0 -> i2 (\i0 -> i2 (\i0 -> equalsInteger i2 i1) (delay False)) (delay (i1 (\i0 -> False) (delay True)))) (\i0 -> \i0 -> force i1) ((\i0 -> \i0 -> \i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i5 i2 (\i0 -> \i0 -> \i0 -> i2 i3) (delay (i4 i1))) (delay (\i0 -> \i0 -> force i1)))) (\i0 -> force (force ifThenElse (equalsInteger i3 (i5 i1)) (delay (\i0 -> \i0 -> i2 i3)) (delay (\i0 -> \i0 -> force i1)))) i1 (\i0 -> (\i0 -> \i0 -> \i0 -> i2 i3) (i4 i1)) (delay (\i0 -> \i0 -> force i1))) (\i0 -> i1 (\i0 -> \i0 -> i2)) (\i0 -> i1 (\i0 -> \i0 -> i1)) 20 (i1 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 10) 1) (i1 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 9) 2) (i1 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 8) 3) (i1 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 7) 4) (i1 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 6) 5) (i1 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 5) 6) (i1 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 4) 7) (i1 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 3) 8) (i1 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 2) 9) (i1 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 10) (\i0 -> \i0 -> force i1))))))))))))) (\i0 -> \i0 -> \i0 -> \i0 -> i2 i4 i3))) +plookupAssoc.plookupAssoc_[] (program 1.0.0 ((\i0 -> \i0 -> i2 (\i0 -> i2 (\i0 -> equalsInteger i2 i1) (delay False)) (delay (i1 (\i0 -> False) (delay True)))) (\i0 -> \i0 -> force i1) ((\i0 -> \i0 -> \i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i5 i2 (\i0 -> \i0 -> \i0 -> i2 i3) (delay (i4 i1))) (delay (\i0 -> \i0 -> force i1)))) (\i0 -> force (force ifThenElse (equalsInteger i3 (i5 i1)) (delay (\i0 -> \i0 -> i2 i3)) (delay (\i0 -> \i0 -> force i1)))) i1 (\i0 -> (\i0 -> \i0 -> \i0 -> i2 i3) (i4 i1)) (delay (\i0 -> \i0 -> force i1))) (\i0 -> i1 (\i0 -> \i0 -> i2)) (\i0 -> i1 (\i0 -> \i0 -> i1)) 20 (\i0 -> \i0 -> force i1)))) \ No newline at end of file diff --git a/plutarch-test/goldens/extra.ordutils.bench.golden b/plutarch-test/goldens/extra.ordutils.bench.golden new file mode 100644 index 000000000..1a4dd6264 --- /dev/null +++ b/plutarch-test/goldens/extra.ordutils.bench.golden @@ -0,0 +1,17 @@ +psort.psort_[5..1] {"exBudgetCPU":27888263,"exBudgetMemory":107622,"scriptSizeBytes":1126} +psort.psort_[1..5] {"exBudgetCPU":27888263,"exBudgetMemory":107622,"scriptSizeBytes":1126} +psort.psort_[3,2,5,4,1] {"exBudgetCPU":27888263,"exBudgetMemory":107622,"scriptSizeBytes":1126} +psort.psort_[] {"exBudgetCPU":2829100,"exBudgetMemory":12400,"scriptSizeBytes":1079} +psortBy.psortBy_preverseComparator_[1..5] {"exBudgetCPU":28992263,"exBudgetMemory":112422,"scriptSizeBytes":1141} +pnubSort.pnubSort_[3,2,5,4,1,2,4,2,5,3] {"exBudgetCPU":104812820,"exBudgetMemory":355660,"scriptSizeBytes":1293} +pnubSort.pnubSort_[] {"exBudgetCPU":3105100,"exBudgetMemory":13600,"scriptSizeBytes":1222} +pnubSortBy.pnubSortBy_preverseComparator_[3,2,5,4,1,2,4,2,5,3] {"exBudgetCPU":92923817,"exBudgetMemory":327722,"scriptSizeBytes":1308} +pallUnique.pallUnique_[1,2,3,4] {"exBudgetCPU":11128005,"exBudgetMemory":36520,"scriptSizeBytes":213} +pallUnique.pallUnique_[1,1,2,3] {"exBudgetCPU":6126168,"exBudgetMemory":21010,"scriptSizeBytes":213} +pallUnique.pallUnique_[1,3,2,3] {"exBudgetCPU":9356893,"exBudgetMemory":29518,"scriptSizeBytes":209} +pallUnique.pallUnique_[] {"exBudgetCPU":1702212,"exBudgetMemory":6802,"scriptSizeBytes":185} +ptryMerge.ptryMerge_[1,3,5,7]_[2,4,6,8] {"exBudgetCPU":36266957,"exBudgetMemory":131243,"scriptSizeBytes":473} +ptryMerge.ptryMerge_[1,3,5,7]_[8,6,4,2] {"exBudgetCPU":11780622,"exBudgetMemory":40149,"scriptSizeBytes":394} +ptryMerge.ptryMerge_[7,5,3,1]_[2,4,6,8] {"exBudgetCPU":11700066,"exBudgetMemory":40148,"scriptSizeBytes":394} +ptryMerge.ptryMerge_[1..8]_[] {"exBudgetCPU":28916239,"exBudgetMemory":106731,"scriptSizeBytes":473} +ptryMerge.ptryMerge_[]_[] {"exBudgetCPU":2254100,"exBudgetMemory":9900,"scriptSizeBytes":397} \ No newline at end of file diff --git a/plutarch-test/goldens/extra.ordutils.uplc.eval.golden b/plutarch-test/goldens/extra.ordutils.uplc.eval.golden new file mode 100644 index 000000000..8ede2cfaa --- /dev/null +++ b/plutarch-test/goldens/extra.ordutils.uplc.eval.golden @@ -0,0 +1,17 @@ +psort.psort_[5..1] (program 1.0.0 True) +psort.psort_[1..5] (program 1.0.0 True) +psort.psort_[3,2,5,4,1] (program 1.0.0 True) +psort.psort_[] (program 1.0.0 True) +psortBy.psortBy_preverseComparator_[1..5] (program 1.0.0 True) +pnubSort.pnubSort_[3,2,5,4,1,2,4,2,5,3] (program 1.0.0 True) +pnubSort.pnubSort_[] (program 1.0.0 True) +pnubSortBy.pnubSortBy_preverseComparator_[3,2,5,4,1,2,4,2,5,3] (program 1.0.0 True) +pallUnique.pallUnique_[1,2,3,4] (program 1.0.0 True) +pallUnique.pallUnique_[1,1,2,3] (program 1.0.0 True) +pallUnique.pallUnique_[1,3,2,3] (program 1.0.0 True) +pallUnique.pallUnique_[] (program 1.0.0 True) +ptryMerge.ptryMerge_[1,3,5,7]_[2,4,6,8] (program 1.0.0 True) +ptryMerge.ptryMerge_[1,3,5,7]_[8,6,4,2] (program 1.0.0 error) +ptryMerge.ptryMerge_[7,5,3,1]_[2,4,6,8] (program 1.0.0 error) +ptryMerge.ptryMerge_[1..8]_[] (program 1.0.0 True) +ptryMerge.ptryMerge_[]_[] (program 1.0.0 True) \ No newline at end of file diff --git a/plutarch-test/goldens/extra.ordutils.uplc.golden b/plutarch-test/goldens/extra.ordutils.uplc.golden new file mode 100644 index 000000000..d1f6f3ca8 --- /dev/null +++ b/plutarch-test/goldens/extra.ordutils.uplc.golden @@ -0,0 +1,17 @@ +psort.psort_[5..1] (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> force (i10 (equalsInteger i4 i2) (delay (i7 i3 i1)) (delay False))) (delay False)) (delay (i1 (\i0 -> \i0 -> False) (delay True)))) ((\i0 -> (\i0 -> \i0 -> (\i0 -> i5 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i13 i2 (i4 i1)) (delay (\i0 -> \i0 -> force i1))) (i5 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i6 (i11 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i21 (i4 (\i0 -> \i0 -> i19 (\i0 -> \i0 -> \i0 -> \i0 -> i1 (\i0 -> \i0 -> force (i27 (i28 i23 i5 i2) (delay (i29 i5 (i6 i2 i1 i4))) (delay (i29 i2 (i6 i5 i4 i1))))) (delay (i27 i3 i2))) i2 i1 i4) (delay i2)) (i6 i1)) (delay i3)) (delay (\i0 -> \i0 -> force i1))) i5)) (delay i2)) (delay (\i0 -> \i0 -> force i1))) i1)) (i4 (\i0 -> \i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> \i0 -> \i0 -> i2 i4 i3) (i12 i11 i2)) (force (i17 (i18 i10 i8 i4) (delay (force (i17 (i18 i10 i6 i2) (delay (i16 i10 i8 i6 i4 i2)) (delay (i16 i10 i8 i2 i4 i6))))) (delay (force (i17 (i18 i10 i6 i2) (delay (i16 i10 i4 i6 i8 i2)) (delay (i16 i10 i4 i2 i8 i6)))))))) (delay ((\i0 -> (\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)) (force (i15 (i16 i8 i6 i2) (delay (force (i15 (i16 i8 i6 i4) (delay (force (i15 (i16 i8 i4 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) (\i0 -> \i0 -> force i1)))))))) (delay (force (i15 (i16 i8 i6 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) (\i0 -> \i0 -> force i1))))))))))) (delay (force (i15 (i16 i8 i2 i4) (delay (force (i15 (i16 i8 i4 i6) (delay ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) (\i0 -> \i0 -> force i1))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) (\i0 -> \i0 -> force i1)))))))) (delay (force (i15 (i16 i8 i2 i6) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) (\i0 -> \i0 -> force i1))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))))))))))))))) (delay ((\i0 -> (\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)) (force (i13 (i14 i6 i4 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))) (delay ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) (\i0 -> \i0 -> force i1))))))))) (delay ((\i0 -> (\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1))))) (delay (\i0 -> \i0 -> force i1))) i2 i1)) (\i0 -> i1 equalsInteger lessThanEqualsInteger) i1) (i5 5 (i5 4 (i5 3 (i5 2 (i5 1 (\i0 -> \i0 -> force i1))))))) (i5 1 (i5 2 (i5 3 (i5 4 (i5 5 (\i0 -> \i0 -> force i1))))))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) (\i0 -> \i0 -> \i0 -> \i0 -> \i0 -> force (i6 (i7 i5 i4 i3) (delay (force (i6 (i7 i5 i2 i1) (delay (force (i6 (i7 i5 i3 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1))))))))) (delay (force (i6 (i7 i5 i3 i1) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))))))))))) (delay (force (i6 (i7 i5 i2 i1) (delay (force (i6 (i7 i5 i4 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1))))))))) (delay (force (i6 (i7 i5 i4 i1) (delay ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1))))))))))))))) (force ifThenElse)) (\i0 -> \i0 -> \i0 -> i3 (\i0 -> \i0 -> i1 i4 i3))) (\i0 -> \i0 -> \i0 -> \i0 -> i2 i4 i3))) +psort.psort_[1..5] (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> force (i10 (equalsInteger i4 i2) (delay (i7 i3 i1)) (delay False))) (delay False)) (delay (i1 (\i0 -> \i0 -> False) (delay True)))) ((\i0 -> (\i0 -> \i0 -> (\i0 -> i5 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i13 i2 (i4 i1)) (delay (\i0 -> \i0 -> force i1))) (i5 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i6 (i11 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i21 (i4 (\i0 -> \i0 -> i19 (\i0 -> \i0 -> \i0 -> \i0 -> i1 (\i0 -> \i0 -> force (i27 (i28 i23 i5 i2) (delay (i29 i5 (i6 i2 i1 i4))) (delay (i29 i2 (i6 i5 i4 i1))))) (delay (i27 i3 i2))) i2 i1 i4) (delay i2)) (i6 i1)) (delay i3)) (delay (\i0 -> \i0 -> force i1))) i5)) (delay i2)) (delay (\i0 -> \i0 -> force i1))) i1)) (i4 (\i0 -> \i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> \i0 -> \i0 -> i2 i4 i3) (i12 i11 i2)) (force (i17 (i18 i10 i8 i4) (delay (force (i17 (i18 i10 i6 i2) (delay (i16 i10 i8 i6 i4 i2)) (delay (i16 i10 i8 i2 i4 i6))))) (delay (force (i17 (i18 i10 i6 i2) (delay (i16 i10 i4 i6 i8 i2)) (delay (i16 i10 i4 i2 i8 i6)))))))) (delay ((\i0 -> (\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)) (force (i15 (i16 i8 i6 i2) (delay (force (i15 (i16 i8 i6 i4) (delay (force (i15 (i16 i8 i4 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) (\i0 -> \i0 -> force i1)))))))) (delay (force (i15 (i16 i8 i6 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) (\i0 -> \i0 -> force i1))))))))))) (delay (force (i15 (i16 i8 i2 i4) (delay (force (i15 (i16 i8 i4 i6) (delay ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) (\i0 -> \i0 -> force i1))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) (\i0 -> \i0 -> force i1)))))))) (delay (force (i15 (i16 i8 i2 i6) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) (\i0 -> \i0 -> force i1))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))))))))))))))) (delay ((\i0 -> (\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)) (force (i13 (i14 i6 i4 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))) (delay ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) (\i0 -> \i0 -> force i1))))))))) (delay ((\i0 -> (\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1))))) (delay (\i0 -> \i0 -> force i1))) i2 i1)) (\i0 -> i1 equalsInteger lessThanEqualsInteger) i1) (i5 5 (i5 4 (i5 3 (i5 2 (i5 1 (\i0 -> \i0 -> force i1))))))) (i5 1 (i5 2 (i5 3 (i5 4 (i5 5 (\i0 -> \i0 -> force i1))))))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) (\i0 -> \i0 -> \i0 -> \i0 -> \i0 -> force (i6 (i7 i5 i4 i3) (delay (force (i6 (i7 i5 i2 i1) (delay (force (i6 (i7 i5 i3 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1))))))))) (delay (force (i6 (i7 i5 i3 i1) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))))))))))) (delay (force (i6 (i7 i5 i2 i1) (delay (force (i6 (i7 i5 i4 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1))))))))) (delay (force (i6 (i7 i5 i4 i1) (delay ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1))))))))))))))) (force ifThenElse)) (\i0 -> \i0 -> \i0 -> i3 (\i0 -> \i0 -> i1 i4 i3))) (\i0 -> \i0 -> \i0 -> \i0 -> i2 i4 i3))) +psort.psort_[3,2,5,4,1] (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> force (i10 (equalsInteger i4 i2) (delay (i7 i3 i1)) (delay False))) (delay False)) (delay (i1 (\i0 -> \i0 -> False) (delay True)))) ((\i0 -> (\i0 -> \i0 -> (\i0 -> i5 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i13 i2 (i4 i1)) (delay (\i0 -> \i0 -> force i1))) (i5 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i6 (i11 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i21 (i4 (\i0 -> \i0 -> i19 (\i0 -> \i0 -> \i0 -> \i0 -> i1 (\i0 -> \i0 -> force (i27 (i28 i23 i5 i2) (delay (i29 i5 (i6 i2 i1 i4))) (delay (i29 i2 (i6 i5 i4 i1))))) (delay (i27 i3 i2))) i2 i1 i4) (delay i2)) (i6 i1)) (delay i3)) (delay (\i0 -> \i0 -> force i1))) i5)) (delay i2)) (delay (\i0 -> \i0 -> force i1))) i1)) (i4 (\i0 -> \i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> \i0 -> \i0 -> i2 i4 i3) (i12 i11 i2)) (force (i17 (i18 i10 i8 i4) (delay (force (i17 (i18 i10 i6 i2) (delay (i16 i10 i8 i6 i4 i2)) (delay (i16 i10 i8 i2 i4 i6))))) (delay (force (i17 (i18 i10 i6 i2) (delay (i16 i10 i4 i6 i8 i2)) (delay (i16 i10 i4 i2 i8 i6)))))))) (delay ((\i0 -> (\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)) (force (i15 (i16 i8 i6 i2) (delay (force (i15 (i16 i8 i6 i4) (delay (force (i15 (i16 i8 i4 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) (\i0 -> \i0 -> force i1)))))))) (delay (force (i15 (i16 i8 i6 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) (\i0 -> \i0 -> force i1))))))))))) (delay (force (i15 (i16 i8 i2 i4) (delay (force (i15 (i16 i8 i4 i6) (delay ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) (\i0 -> \i0 -> force i1))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) (\i0 -> \i0 -> force i1)))))))) (delay (force (i15 (i16 i8 i2 i6) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) (\i0 -> \i0 -> force i1))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))))))))))))))) (delay ((\i0 -> (\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)) (force (i13 (i14 i6 i4 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))) (delay ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) (\i0 -> \i0 -> force i1))))))))) (delay ((\i0 -> (\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1))))) (delay (\i0 -> \i0 -> force i1))) i2 i1)) (\i0 -> i1 equalsInteger lessThanEqualsInteger) i1) (i5 3 (i5 2 (i5 5 (i5 4 (i5 1 (\i0 -> \i0 -> force i1))))))) (i5 1 (i5 2 (i5 3 (i5 4 (i5 5 (\i0 -> \i0 -> force i1))))))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) (\i0 -> \i0 -> \i0 -> \i0 -> \i0 -> force (i6 (i7 i5 i4 i3) (delay (force (i6 (i7 i5 i2 i1) (delay (force (i6 (i7 i5 i3 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1))))))))) (delay (force (i6 (i7 i5 i3 i1) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))))))))))) (delay (force (i6 (i7 i5 i2 i1) (delay (force (i6 (i7 i5 i4 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1))))))))) (delay (force (i6 (i7 i5 i4 i1) (delay ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1))))))))))))))) (force ifThenElse)) (\i0 -> \i0 -> \i0 -> i3 (\i0 -> \i0 -> i1 i4 i3))) (\i0 -> \i0 -> \i0 -> \i0 -> i2 i4 i3))) +psort.psort_[] (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> i2 (\i0 -> \i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> force (i11 (equalsInteger i4 i2) (delay (i7 i3 i1)) (delay False))) (delay False)) (delay (i1 (\i0 -> \i0 -> False) (delay True)))) ((\i0 -> (\i0 -> \i0 -> (\i0 -> i6 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i9 i2 (i4 i1)) (delay (\i0 -> \i0 -> force i1))) (i6 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i6 (i12 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i17 (i4 (\i0 -> \i0 -> i20 (\i0 -> \i0 -> \i0 -> \i0 -> i1 (\i0 -> \i0 -> force (i28 (i29 i23 i5 i2) (delay (i25 i5 (i6 i2 i1 i4))) (delay (i25 i2 (i6 i5 i4 i1))))) (delay (i23 i3 i2))) i2 i1 i4) (delay i2)) (i6 i1)) (delay i3)) (delay (\i0 -> \i0 -> force i1))) i5)) (delay i2)) (delay (\i0 -> \i0 -> force i1))) i1)) (i5 (\i0 -> \i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> \i0 -> \i0 -> i2 i4 i3) (i12 i11 i2)) (force (i18 (i19 i10 i8 i4) (delay (force (i18 (i19 i10 i6 i2) (delay (i17 i10 i8 i6 i4 i2)) (delay (i17 i10 i8 i2 i4 i6))))) (delay (force (i18 (i19 i10 i6 i2) (delay (i17 i10 i4 i6 i8 i2)) (delay (i17 i10 i4 i2 i8 i6)))))))) (delay ((\i0 -> (\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)) (force (i16 (i17 i8 i6 i2) (delay (force (i16 (i17 i8 i6 i4) (delay (force (i16 (i17 i8 i4 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) (\i0 -> \i0 -> force i1)))))))) (delay (force (i16 (i17 i8 i6 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) (\i0 -> \i0 -> force i1))))))))))) (delay (force (i16 (i17 i8 i2 i4) (delay (force (i16 (i17 i8 i4 i6) (delay ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) (\i0 -> \i0 -> force i1))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) (\i0 -> \i0 -> force i1)))))))) (delay (force (i16 (i17 i8 i2 i6) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) (\i0 -> \i0 -> force i1))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))))))))))))))) (delay ((\i0 -> (\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)) (force (i14 (i15 i6 i4 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))) (delay ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) (\i0 -> \i0 -> force i1))))))))) (delay ((\i0 -> (\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1))))) (delay (\i0 -> \i0 -> force i1))) i2 i1)) (\i0 -> i1 equalsInteger lessThanEqualsInteger) i1) (\i0 -> \i0 -> force i1)) (\i0 -> \i0 -> force i1)) (\i0 -> \i0 -> \i0 -> \i0 -> i2 i4 i3)) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) (\i0 -> \i0 -> \i0 -> \i0 -> \i0 -> force (i6 (i7 i5 i4 i3) (delay (force (i6 (i7 i5 i2 i1) (delay (force (i6 (i7 i5 i3 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1))))))))) (delay (force (i6 (i7 i5 i3 i1) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))))))))))) (delay (force (i6 (i7 i5 i2 i1) (delay (force (i6 (i7 i5 i4 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1))))))))) (delay (force (i6 (i7 i5 i4 i1) (delay ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1))))))))))))))) (force ifThenElse)) (\i0 -> \i0 -> \i0 -> i3 (\i0 -> \i0 -> i1 i4 i3)))) +psortBy.psortBy_preverseComparator_[1..5] (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> force (i10 (equalsInteger i4 i2) (delay (i7 i3 i1)) (delay False))) (delay False)) (delay (i1 (\i0 -> \i0 -> False) (delay True)))) ((\i0 -> \i0 -> (\i0 -> i4 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i12 i2 (i4 i1)) (delay (\i0 -> \i0 -> force i1))) (i4 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i6 (i10 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i20 (i4 (\i0 -> \i0 -> i18 (\i0 -> \i0 -> \i0 -> \i0 -> i1 (\i0 -> \i0 -> force (i26 (i27 i23 i5 i2) (delay (i28 i5 (i6 i2 i1 i4))) (delay (i28 i2 (i6 i5 i4 i1))))) (delay (i26 i3 i2))) i2 i1 i4) (delay i2)) (i6 i1)) (delay i3)) (delay (\i0 -> \i0 -> force i1))) i5)) (delay i2)) (delay (\i0 -> \i0 -> force i1))) i1)) (i3 (\i0 -> \i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> \i0 -> \i0 -> i2 i4 i3) (i12 i11 i2)) (force (i16 (i17 i10 i8 i4) (delay (force (i16 (i17 i10 i6 i2) (delay (i15 i10 i8 i6 i4 i2)) (delay (i15 i10 i8 i2 i4 i6))))) (delay (force (i16 (i17 i10 i6 i2) (delay (i15 i10 i4 i6 i8 i2)) (delay (i15 i10 i4 i2 i8 i6)))))))) (delay ((\i0 -> (\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)) (force (i14 (i15 i8 i6 i2) (delay (force (i14 (i15 i8 i6 i4) (delay (force (i14 (i15 i8 i4 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) (\i0 -> \i0 -> force i1)))))))) (delay (force (i14 (i15 i8 i6 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) (\i0 -> \i0 -> force i1))))))))))) (delay (force (i14 (i15 i8 i2 i4) (delay (force (i14 (i15 i8 i4 i6) (delay ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) (\i0 -> \i0 -> force i1))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) (\i0 -> \i0 -> force i1)))))))) (delay (force (i14 (i15 i8 i2 i6) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) (\i0 -> \i0 -> force i1))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))))))))))))))) (delay ((\i0 -> (\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)) (force (i12 (i13 i6 i4 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))) (delay ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) (\i0 -> \i0 -> force i1))))))))) (delay ((\i0 -> (\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1))))) (delay (\i0 -> \i0 -> force i1))) i2 i1)) ((\i0 -> i1 (\i0 -> \i0 -> (\i0 -> \i0 -> i1 i4 i2) (\i0 -> \i0 -> i3 i1 i2))) (\i0 -> i1 equalsInteger lessThanEqualsInteger)) (i5 1 (i5 2 (i5 3 (i5 4 (i5 5 (\i0 -> \i0 -> force i1))))))) (i5 5 (i5 4 (i5 3 (i5 2 (i5 1 (\i0 -> \i0 -> force i1))))))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) (\i0 -> \i0 -> \i0 -> \i0 -> \i0 -> force (i6 (i7 i5 i4 i3) (delay (force (i6 (i7 i5 i2 i1) (delay (force (i6 (i7 i5 i3 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1))))))))) (delay (force (i6 (i7 i5 i3 i1) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))))))))))) (delay (force (i6 (i7 i5 i2 i1) (delay (force (i6 (i7 i5 i4 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1))))))))) (delay (force (i6 (i7 i5 i4 i1) (delay ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1))))))))))))))) (force ifThenElse)) (\i0 -> \i0 -> \i0 -> i3 (\i0 -> \i0 -> i1 i4 i3))) (\i0 -> \i0 -> \i0 -> \i0 -> i2 i4 i3))) +pnubSort.pnubSort_[3,2,5,4,1,2,4,2,5,3] (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> i5 (\i0 -> \i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> force (i14 (equalsInteger i4 i2) (delay (i7 i3 i1)) (delay False))) (delay False)) (delay (i1 (\i0 -> \i0 -> False) (delay True)))) ((\i0 -> (\i0 -> \i0 -> (\i0 -> i9 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i17 i2 (i4 i1)) (delay (\i0 -> \i0 -> force i1))) (i9 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i6 (i15 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i25 (i4 (\i0 -> \i0 -> i23 (\i0 -> \i0 -> \i0 -> \i0 -> i1 (\i0 -> \i0 -> force (i31 (equalsInteger (i25 i23 i5 i2) 0) (delay (i33 i5 (i6 i2 i1 i4))) (delay (force (i31 (equalsInteger (i25 i23 i5 i2) 1) (delay (i6 i2 i1 i4)) (delay (i33 i2 (i6 i5 i4 i1)))))))) (delay (i24 i21 (i31 i3 i2)))) i2 i1 i4) (delay (i18 i15 i2))) (i6 i1)) (delay i3)) (delay (\i0 -> \i0 -> force i1))) i5)) (delay (i10 i7 i2))) (delay (\i0 -> \i0 -> force i1))) i1)) (i8 (\i0 -> \i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> \i0 -> \i0 -> i2 i4 i3) (i12 i11 i2)) (force (i21 (i22 i10 i8 i4) (delay (force (i21 (i22 i10 i6 i2) (delay (i20 i10 i8 i6 i4 i2)) (delay (i20 i10 i8 i2 i4 i6))))) (delay (force (i21 (i22 i10 i6 i2) (delay (i20 i10 i4 i6 i8 i2)) (delay (i20 i10 i4 i2 i8 i6)))))))) (delay ((\i0 -> (\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)) (force (i19 (i20 i8 i6 i2) (delay (force (i19 (i20 i8 i6 i4) (delay (force (i19 (i20 i8 i4 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) (\i0 -> \i0 -> force i1)))))))) (delay (force (i19 (i20 i8 i6 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) (\i0 -> \i0 -> force i1))))))))))) (delay (force (i19 (i20 i8 i2 i4) (delay (force (i19 (i20 i8 i4 i6) (delay ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) (\i0 -> \i0 -> force i1))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) (\i0 -> \i0 -> force i1)))))))) (delay (force (i19 (i20 i8 i2 i6) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) (\i0 -> \i0 -> force i1))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))))))))))))))) (delay ((\i0 -> (\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)) (force (i17 (i18 i6 i4 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))) (delay ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) (\i0 -> \i0 -> force i1))))))))) (delay ((\i0 -> (\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1))))) (delay (\i0 -> \i0 -> force i1))) i2 i1)) (\i0 -> i1 equalsInteger lessThanEqualsInteger) i1) (i9 3 (i9 2 (i9 5 (i9 4 (i9 1 (i9 2 (i9 4 (i9 2 (i9 5 (i9 3 (\i0 -> \i0 -> force i1)))))))))))) (i9 1 (i9 2 (i9 3 (i9 4 (i9 5 (\i0 -> \i0 -> force i1))))))) (\i0 -> \i0 -> \i0 -> i3 (\i0 -> \i0 -> force (i11 (i2 i4 i3) (delay 1) (delay (force (i11 (i1 i4 i3) (delay 0) (delay 2)))))))) (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i7 (\i0 -> \i0 -> \i0 -> i1 (\i0 -> \i0 -> force (i14 (i10 i9 i4 i2) (delay (i5 i2 i1)) (delay (i16 i4 (i5 i2 i1))))) (delay (i9 i2))) i2 i1) (delay (\i0 -> \i0 -> force i1)))) (\i0 -> \i0 -> \i0 -> i3 (\i0 -> \i0 -> i2 i4 i3))) (\i0 -> i6 i1 (\i0 -> \i0 -> force i1))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) (\i0 -> \i0 -> \i0 -> \i0 -> \i0 -> force (i6 (i7 i5 i4 i3) (delay (force (i6 (i7 i5 i2 i1) (delay (force (i6 (i7 i5 i3 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1))))))))) (delay (force (i6 (i7 i5 i3 i1) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))))))))))) (delay (force (i6 (i7 i5 i2 i1) (delay (force (i6 (i7 i5 i4 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1))))))))) (delay (force (i6 (i7 i5 i4 i1) (delay ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1))))))))))))))) (force ifThenElse)) (\i0 -> \i0 -> \i0 -> i3 (\i0 -> \i0 -> i1 i4 i3))) (\i0 -> \i0 -> \i0 -> \i0 -> i2 i4 i3))) +pnubSort.pnubSort_[] (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> i6 (\i0 -> \i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> force (i15 (equalsInteger i4 i2) (delay (i7 i3 i1)) (delay False))) (delay False)) (delay (i1 (\i0 -> \i0 -> False) (delay True)))) ((\i0 -> (\i0 -> \i0 -> (\i0 -> i10 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i13 i2 (i4 i1)) (delay (\i0 -> \i0 -> force i1))) (i10 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i6 (i16 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i21 (i4 (\i0 -> \i0 -> i24 (\i0 -> \i0 -> \i0 -> \i0 -> i1 (\i0 -> \i0 -> force (i32 (equalsInteger (i25 i23 i5 i2) 0) (delay (i29 i5 (i6 i2 i1 i4))) (delay (force (i32 (equalsInteger (i25 i23 i5 i2) 1) (delay (i6 i2 i1 i4)) (delay (i29 i2 (i6 i5 i4 i1)))))))) (delay (i24 i21 (i27 i3 i2)))) i2 i1 i4) (delay (i18 i15 i2))) (i6 i1)) (delay i3)) (delay (\i0 -> \i0 -> force i1))) i5)) (delay (i10 i7 i2))) (delay (\i0 -> \i0 -> force i1))) i1)) (i9 (\i0 -> \i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> \i0 -> \i0 -> i2 i4 i3) (i12 i11 i2)) (force (i22 (i23 i10 i8 i4) (delay (force (i22 (i23 i10 i6 i2) (delay (i21 i10 i8 i6 i4 i2)) (delay (i21 i10 i8 i2 i4 i6))))) (delay (force (i22 (i23 i10 i6 i2) (delay (i21 i10 i4 i6 i8 i2)) (delay (i21 i10 i4 i2 i8 i6)))))))) (delay ((\i0 -> (\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)) (force (i20 (i21 i8 i6 i2) (delay (force (i20 (i21 i8 i6 i4) (delay (force (i20 (i21 i8 i4 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) (\i0 -> \i0 -> force i1)))))))) (delay (force (i20 (i21 i8 i6 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) (\i0 -> \i0 -> force i1))))))))))) (delay (force (i20 (i21 i8 i2 i4) (delay (force (i20 (i21 i8 i4 i6) (delay ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) (\i0 -> \i0 -> force i1))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) (\i0 -> \i0 -> force i1)))))))) (delay (force (i20 (i21 i8 i2 i6) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) (\i0 -> \i0 -> force i1))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))))))))))))))) (delay ((\i0 -> (\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)) (force (i18 (i19 i6 i4 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))) (delay ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) (\i0 -> \i0 -> force i1))))))))) (delay ((\i0 -> (\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1))))) (delay (\i0 -> \i0 -> force i1))) i2 i1)) (\i0 -> i1 equalsInteger lessThanEqualsInteger) i1) (\i0 -> \i0 -> force i1)) (\i0 -> \i0 -> force i1)) (\i0 -> \i0 -> \i0 -> i3 (\i0 -> \i0 -> force (i12 (i2 i4 i3) (delay 1) (delay (force (i12 (i1 i4 i3) (delay 0) (delay 2)))))))) (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i8 (\i0 -> \i0 -> \i0 -> i1 (\i0 -> \i0 -> force (i15 (i10 i9 i4 i2) (delay (i5 i2 i1)) (delay (i12 i4 (i5 i2 i1))))) (delay (i9 i2))) i2 i1) (delay (\i0 -> \i0 -> force i1)))) (\i0 -> \i0 -> \i0 -> i3 (\i0 -> \i0 -> i2 i4 i3))) (\i0 -> i2 i1 (\i0 -> \i0 -> force i1))) (\i0 -> \i0 -> \i0 -> \i0 -> i2 i4 i3)) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) (\i0 -> \i0 -> \i0 -> \i0 -> \i0 -> force (i6 (i7 i5 i4 i3) (delay (force (i6 (i7 i5 i2 i1) (delay (force (i6 (i7 i5 i3 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1))))))))) (delay (force (i6 (i7 i5 i3 i1) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))))))))))) (delay (force (i6 (i7 i5 i2 i1) (delay (force (i6 (i7 i5 i4 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1))))))))) (delay (force (i6 (i7 i5 i4 i1) (delay ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1))))))))))))))) (force ifThenElse)) (\i0 -> \i0 -> \i0 -> i3 (\i0 -> \i0 -> i1 i4 i3)))) +pnubSortBy.pnubSortBy_preverseComparator_[3,2,5,4,1,2,4,2,5,3] (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> i5 (\i0 -> \i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> force (i14 (equalsInteger i4 i2) (delay (i7 i3 i1)) (delay False))) (delay False)) (delay (i1 (\i0 -> \i0 -> False) (delay True)))) ((\i0 -> \i0 -> (\i0 -> i8 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i16 i2 (i4 i1)) (delay (\i0 -> \i0 -> force i1))) (i8 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i6 (i14 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i24 (i4 (\i0 -> \i0 -> i22 (\i0 -> \i0 -> \i0 -> \i0 -> i1 (\i0 -> \i0 -> force (i30 (equalsInteger (i24 i23 i5 i2) 0) (delay (i32 i5 (i6 i2 i1 i4))) (delay (force (i30 (equalsInteger (i24 i23 i5 i2) 1) (delay (i6 i2 i1 i4)) (delay (i32 i2 (i6 i5 i4 i1)))))))) (delay (i23 i21 (i30 i3 i2)))) i2 i1 i4) (delay (i17 i15 i2))) (i6 i1)) (delay i3)) (delay (\i0 -> \i0 -> force i1))) i5)) (delay (i9 i7 i2))) (delay (\i0 -> \i0 -> force i1))) i1)) (i7 (\i0 -> \i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> \i0 -> \i0 -> i2 i4 i3) (i12 i11 i2)) (force (i20 (i21 i10 i8 i4) (delay (force (i20 (i21 i10 i6 i2) (delay (i19 i10 i8 i6 i4 i2)) (delay (i19 i10 i8 i2 i4 i6))))) (delay (force (i20 (i21 i10 i6 i2) (delay (i19 i10 i4 i6 i8 i2)) (delay (i19 i10 i4 i2 i8 i6)))))))) (delay ((\i0 -> (\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)) (force (i18 (i19 i8 i6 i2) (delay (force (i18 (i19 i8 i6 i4) (delay (force (i18 (i19 i8 i4 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) (\i0 -> \i0 -> force i1)))))))) (delay (force (i18 (i19 i8 i6 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) (\i0 -> \i0 -> force i1))))))))))) (delay (force (i18 (i19 i8 i2 i4) (delay (force (i18 (i19 i8 i4 i6) (delay ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) (\i0 -> \i0 -> force i1))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) (\i0 -> \i0 -> force i1)))))))) (delay (force (i18 (i19 i8 i2 i6) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) (\i0 -> \i0 -> force i1))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i9 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))))))))))))))) (delay ((\i0 -> (\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)) (force (i16 (i17 i6 i4 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))) (delay ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) (\i0 -> \i0 -> force i1))))))))) (delay ((\i0 -> (\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1))))) (delay (\i0 -> \i0 -> force i1))) i2 i1)) ((\i0 -> i1 (\i0 -> \i0 -> (\i0 -> \i0 -> i1 i4 i2) (\i0 -> \i0 -> i3 i1 i2))) (\i0 -> i1 equalsInteger lessThanEqualsInteger)) (i9 3 (i9 2 (i9 5 (i9 4 (i9 1 (i9 2 (i9 4 (i9 2 (i9 5 (i9 3 (\i0 -> \i0 -> force i1)))))))))))) (i9 5 (i9 4 (i9 3 (i9 2 (i9 1 (\i0 -> \i0 -> force i1))))))) (\i0 -> \i0 -> \i0 -> i3 (\i0 -> \i0 -> force (i11 (i2 i4 i3) (delay 1) (delay (force (i11 (i1 i4 i3) (delay 0) (delay 2)))))))) (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i7 (\i0 -> \i0 -> \i0 -> i1 (\i0 -> \i0 -> force (i14 (i10 i9 i4 i2) (delay (i5 i2 i1)) (delay (i16 i4 (i5 i2 i1))))) (delay (i9 i2))) i2 i1) (delay (\i0 -> \i0 -> force i1)))) (\i0 -> \i0 -> \i0 -> i3 (\i0 -> \i0 -> i2 i4 i3))) (\i0 -> i6 i1 (\i0 -> \i0 -> force i1))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) (\i0 -> \i0 -> \i0 -> \i0 -> \i0 -> force (i6 (i7 i5 i4 i3) (delay (force (i6 (i7 i5 i2 i1) (delay (force (i6 (i7 i5 i3 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1))))))))) (delay (force (i6 (i7 i5 i3 i1) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))))))))))) (delay (force (i6 (i7 i5 i2 i1) (delay (force (i6 (i7 i5 i4 i2) (delay ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1)))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) (\i0 -> \i0 -> force i1))))))))) (delay (force (i6 (i7 i5 i4 i1) (delay ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1)))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i6 i3) ((\i0 -> \i0 -> \i0 -> i2 i4 i3) ((\i0 -> \i0 -> \i0 -> i2 i7 i3) ((\i0 -> \i0 -> \i0 -> i2 i5 i3) (\i0 -> \i0 -> force i1))))))))))))))) (force ifThenElse)) (\i0 -> \i0 -> \i0 -> i3 (\i0 -> \i0 -> i1 i4 i3))) (\i0 -> \i0 -> \i0 -> \i0 -> i2 i4 i3))) +pallUnique.pallUnique_[1,2,3,4] (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i2 (\i0 -> i2 (\i0 -> i6 i2 i1 (i6 i1 False True)) (delay False)) (delay (i1 (\i0 -> False) (delay True)))) ((\i0 -> (\i0 -> \i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> \i0 -> i1 (\i0 -> \i0 -> force (i12 (equalsInteger (i11 i9 i4 i2) 0) (delay (i5 i2 i1)) (delay (force (i12 (equalsInteger (i11 i9 i4 i2) 1) (delay ((\i0 -> \i0 -> \i0 -> i2 i3) False)) (delay (\i0 -> \i0 -> force i1))))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i3) True))) i2 i1) (delay ((\i0 -> \i0 -> \i0 -> i2 i3) True))) (\i0 -> i1 equalsInteger lessThanEqualsInteger) i1) (i3 1 (i3 2 (i3 3 (i3 4 (\i0 -> \i0 -> force i1)))))) ((\i0 -> \i0 -> \i0 -> i2 i3) True)) (\i0 -> \i0 -> \i0 -> i3 (\i0 -> \i0 -> force (i6 (i2 i4 i3) (delay 1) (delay (force (i6 (i1 i4 i3) (delay 0) (delay 2)))))))) (force ifThenElse)) (\i0 -> \i0 -> \i0 -> \i0 -> i2 i4 i3))) +pallUnique.pallUnique_[1,1,2,3] (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i2 (\i0 -> i2 (\i0 -> i6 i2 i1 (i6 i1 False True)) (delay False)) (delay (i1 (\i0 -> False) (delay True)))) ((\i0 -> (\i0 -> \i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> \i0 -> i1 (\i0 -> \i0 -> force (i12 (equalsInteger (i11 i9 i4 i2) 0) (delay (i5 i2 i1)) (delay (force (i12 (equalsInteger (i11 i9 i4 i2) 1) (delay ((\i0 -> \i0 -> \i0 -> i2 i3) False)) (delay (\i0 -> \i0 -> force i1))))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i3) True))) i2 i1) (delay ((\i0 -> \i0 -> \i0 -> i2 i3) True))) (\i0 -> i1 equalsInteger lessThanEqualsInteger) i1) (i3 1 (i3 1 (i3 2 (i3 3 (\i0 -> \i0 -> force i1)))))) ((\i0 -> \i0 -> \i0 -> i2 i3) False)) (\i0 -> \i0 -> \i0 -> i3 (\i0 -> \i0 -> force (i6 (i2 i4 i3) (delay 1) (delay (force (i6 (i1 i4 i3) (delay 0) (delay 2)))))))) (force ifThenElse)) (\i0 -> \i0 -> \i0 -> \i0 -> i2 i4 i3))) +pallUnique.pallUnique_[1,3,2,3] (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i2 (\i0 -> i2 (\i0 -> i6 i2 i1 (i6 i1 False True)) (delay False)) (delay (i1 (\i0 -> False) (delay True)))) ((\i0 -> (\i0 -> \i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> \i0 -> i1 (\i0 -> \i0 -> force (i12 (equalsInteger (i11 i9 i4 i2) 0) (delay (i5 i2 i1)) (delay (force (i12 (equalsInteger (i11 i9 i4 i2) 1) (delay ((\i0 -> \i0 -> \i0 -> i2 i3) False)) (delay (\i0 -> \i0 -> force i1))))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i3) True))) i2 i1) (delay ((\i0 -> \i0 -> \i0 -> i2 i3) True))) (\i0 -> i1 equalsInteger lessThanEqualsInteger) i1) (i3 1 (i3 3 (i3 2 (i3 3 (\i0 -> \i0 -> force i1)))))) (\i0 -> \i0 -> force i1)) (\i0 -> \i0 -> \i0 -> i3 (\i0 -> \i0 -> force (i6 (i2 i4 i3) (delay 1) (delay (force (i6 (i1 i4 i3) (delay 0) (delay 2)))))))) (force ifThenElse)) (\i0 -> \i0 -> \i0 -> \i0 -> i2 i4 i3))) +pallUnique.pallUnique_[] (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> \i0 -> i2 (\i0 -> i2 (\i0 -> i6 i2 i1 (i6 i1 False True)) (delay False)) (delay (i1 (\i0 -> False) (delay True)))) ((\i0 -> (\i0 -> \i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> \i0 -> i1 (\i0 -> \i0 -> force (i12 (equalsInteger (i11 i9 i4 i2) 0) (delay (i5 i2 i1)) (delay (force (i12 (equalsInteger (i11 i9 i4 i2) 1) (delay ((\i0 -> \i0 -> \i0 -> i2 i3) False)) (delay (\i0 -> \i0 -> force i1))))))) (delay ((\i0 -> \i0 -> \i0 -> i2 i3) True))) i2 i1) (delay ((\i0 -> \i0 -> \i0 -> i2 i3) True))) (\i0 -> i1 equalsInteger lessThanEqualsInteger) i1) (\i0 -> \i0 -> force i1)) ((\i0 -> \i0 -> \i0 -> i2 i3) True)) (\i0 -> \i0 -> \i0 -> i3 (\i0 -> \i0 -> force (i6 (i2 i4 i3) (delay 1) (delay (force (i6 (i1 i4 i3) (delay 0) (delay 2)))))))) (force ifThenElse))) +ptryMerge.ptryMerge_[1,3,5,7]_[2,4,6,8] (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> i4 (\i0 -> \i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> force (i12 (equalsInteger i4 i2) (delay (i7 i3 i1)) (delay False))) (delay False)) (delay (i1 (\i0 -> \i0 -> False) (delay True)))) ((\i0 -> (\i0 -> \i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> i12 (\i0 -> \i0 -> \i0 -> \i0 -> \i0 -> force (i18 (i19 i12 i4 i2) (delay (i23 i4 (i3 (\i0 -> \i0 -> force (i20 (i21 i14 i6 i2) (delay (i7 i2 i1 i4 i3)) (delay (force (i23 i24 (delay error)))))) (delay (i15 i12 i2 i1))))) (delay (i23 i2 (i1 (\i0 -> \i0 -> force (i20 (i21 i14 i4 i2) (delay (i7 i6 i5 i2 i1)) (delay (force (i23 i24 (delay error)))))) (delay (i15 i12 i4 i3))))))) i4 i3 i2 i1) (delay (i7 i5 i4))) (delay (i5 i3 i1))) (\i0 -> i1 equalsInteger lessThanEqualsInteger) i1) (i10 1 (i10 3 (i10 5 (i10 7 (\i0 -> \i0 -> force i1))))) (i10 2 (i10 4 (i10 6 (i10 8 (\i0 -> \i0 -> force i1)))))) (i10 1 (i10 2 (i10 3 (i10 4 (i10 5 (i10 6 (i10 7 (i10 8 (\i0 -> \i0 -> force i1)))))))))) (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i5 i4 i2 i1) (delay i1))) (\i0 -> \i0 -> \i0 -> force (i6 (i4 i3 i1) (delay (i1 (\i0 -> \i0 -> force (i8 (i9 i5 i4 i2) (delay (i13 i4 i3)) (delay (force (i11 i12 (delay error)))))) (delay (i8 i2)))) (delay (force (i9 i10 (delay error))))))) (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i5 (\i0 -> \i0 -> \i0 -> i1 (\i0 -> \i0 -> force (i11 (i12 i9 i4 i2) (delay (i5 i2 i1)) (delay False))) (delay True)) i2 i1) (delay True))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) (force ifThenElse)) (\i0 -> \i0 -> \i0 -> i3 (\i0 -> \i0 -> i1 i4 i3))) (\i0 -> i4 i1 (\i0 -> \i0 -> force i1))) (force trace)) "ptryMergeBy: argument list-like out of order") (\i0 -> \i0 -> \i0 -> \i0 -> i2 i4 i3))) +ptryMerge.ptryMerge_[1,3,5,7]_[8,6,4,2] (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> i12 (\i0 -> \i0 -> \i0 -> \i0 -> \i0 -> force (i18 (i19 i12 i4 i2) (delay (i23 i4 (i3 (\i0 -> \i0 -> force (i20 (i21 i14 i6 i2) (delay (i7 i2 i1 i4 i3)) (delay (force (i23 i24 (delay error)))))) (delay (i15 i12 i2 i1))))) (delay (i23 i2 (i1 (\i0 -> \i0 -> force (i20 (i21 i14 i4 i2) (delay (i7 i6 i5 i2 i1)) (delay (force (i23 i24 (delay error)))))) (delay (i15 i12 i4 i3))))))) i4 i3 i2 i1) (delay (i7 i5 i4))) (delay (i5 i3 i1))) (\i0 -> i1 equalsInteger lessThanEqualsInteger) i1) (i10 1 (i10 3 (i10 5 (i10 7 (\i0 -> \i0 -> force i1))))) (i10 8 (i10 6 (i10 4 (i10 2 (\i0 -> \i0 -> force i1)))))) (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i5 i4 i2 i1) (delay i1))) (\i0 -> \i0 -> \i0 -> force (i6 (i4 i3 i1) (delay (i1 (\i0 -> \i0 -> force (i8 (i9 i5 i4 i2) (delay (i13 i4 i3)) (delay (force (i11 i12 (delay error)))))) (delay (i8 i2)))) (delay (force (i9 i10 (delay error))))))) (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i5 (\i0 -> \i0 -> \i0 -> i1 (\i0 -> \i0 -> force (i11 (i12 i9 i4 i2) (delay (i5 i2 i1)) (delay False))) (delay True)) i2 i1) (delay True))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) (force ifThenElse)) (\i0 -> \i0 -> \i0 -> i3 (\i0 -> \i0 -> i1 i4 i3))) (\i0 -> i4 i1 (\i0 -> \i0 -> force i1))) (force trace)) "ptryMergeBy: argument list-like out of order") (\i0 -> \i0 -> \i0 -> \i0 -> i2 i4 i3))) +ptryMerge.ptryMerge_[7,5,3,1]_[2,4,6,8] (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> i12 (\i0 -> \i0 -> \i0 -> \i0 -> \i0 -> force (i18 (i19 i12 i4 i2) (delay (i23 i4 (i3 (\i0 -> \i0 -> force (i20 (i21 i14 i6 i2) (delay (i7 i2 i1 i4 i3)) (delay (force (i23 i24 (delay error)))))) (delay (i15 i12 i2 i1))))) (delay (i23 i2 (i1 (\i0 -> \i0 -> force (i20 (i21 i14 i4 i2) (delay (i7 i6 i5 i2 i1)) (delay (force (i23 i24 (delay error)))))) (delay (i15 i12 i4 i3))))))) i4 i3 i2 i1) (delay (i7 i5 i4))) (delay (i5 i3 i1))) (\i0 -> i1 equalsInteger lessThanEqualsInteger) i1) (i10 7 (i10 5 (i10 3 (i10 1 (\i0 -> \i0 -> force i1))))) (i10 2 (i10 4 (i10 6 (i10 8 (\i0 -> \i0 -> force i1)))))) (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i5 i4 i2 i1) (delay i1))) (\i0 -> \i0 -> \i0 -> force (i6 (i4 i3 i1) (delay (i1 (\i0 -> \i0 -> force (i8 (i9 i5 i4 i2) (delay (i13 i4 i3)) (delay (force (i11 i12 (delay error)))))) (delay (i8 i2)))) (delay (force (i9 i10 (delay error))))))) (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i5 (\i0 -> \i0 -> \i0 -> i1 (\i0 -> \i0 -> force (i11 (i12 i9 i4 i2) (delay (i5 i2 i1)) (delay False))) (delay True)) i2 i1) (delay True))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) (force ifThenElse)) (\i0 -> \i0 -> \i0 -> i3 (\i0 -> \i0 -> i1 i4 i3))) (\i0 -> i4 i1 (\i0 -> \i0 -> force i1))) (force trace)) "ptryMergeBy: argument list-like out of order") (\i0 -> \i0 -> \i0 -> \i0 -> i2 i4 i3))) +ptryMerge.ptryMerge_[1..8]_[] (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> i4 (\i0 -> \i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> force (i12 (equalsInteger i4 i2) (delay (i7 i3 i1)) (delay False))) (delay False)) (delay (i1 (\i0 -> \i0 -> False) (delay True)))) ((\i0 -> (\i0 -> \i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> i12 (\i0 -> \i0 -> \i0 -> \i0 -> \i0 -> force (i18 (i19 i12 i4 i2) (delay (i23 i4 (i3 (\i0 -> \i0 -> force (i20 (i21 i14 i6 i2) (delay (i7 i2 i1 i4 i3)) (delay (force (i23 i24 (delay error)))))) (delay (i15 i12 i2 i1))))) (delay (i23 i2 (i1 (\i0 -> \i0 -> force (i20 (i21 i14 i4 i2) (delay (i7 i6 i5 i2 i1)) (delay (force (i23 i24 (delay error)))))) (delay (i15 i12 i4 i3))))))) i4 i3 i2 i1) (delay (i7 i5 i4))) (delay (i5 i3 i1))) (\i0 -> i1 equalsInteger lessThanEqualsInteger) i1) (i10 1 (i10 2 (i10 3 (i10 4 (i10 5 (i10 6 (i10 7 (i10 8 (\i0 -> \i0 -> force i1))))))))) (\i0 -> \i0 -> force i1)) (i10 1 (i10 2 (i10 3 (i10 4 (i10 5 (i10 6 (i10 7 (i10 8 (\i0 -> \i0 -> force i1)))))))))) (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i5 i4 i2 i1) (delay i1))) (\i0 -> \i0 -> \i0 -> force (i6 (i4 i3 i1) (delay (i1 (\i0 -> \i0 -> force (i8 (i9 i5 i4 i2) (delay (i13 i4 i3)) (delay (force (i11 i12 (delay error)))))) (delay (i8 i2)))) (delay (force (i9 i10 (delay error))))))) (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i5 (\i0 -> \i0 -> \i0 -> i1 (\i0 -> \i0 -> force (i11 (i12 i9 i4 i2) (delay (i5 i2 i1)) (delay False))) (delay True)) i2 i1) (delay True))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) (force ifThenElse)) (\i0 -> \i0 -> \i0 -> i3 (\i0 -> \i0 -> i1 i4 i3))) (\i0 -> i4 i1 (\i0 -> \i0 -> force i1))) (force trace)) "ptryMergeBy: argument list-like out of order") (\i0 -> \i0 -> \i0 -> \i0 -> i2 i4 i3))) +ptryMerge.ptryMerge_[]_[] (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> i4 (\i0 -> \i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> force (i12 (equalsInteger i4 i2) (delay (i7 i3 i1)) (delay False))) (delay False)) (delay (i1 (\i0 -> \i0 -> False) (delay True)))) ((\i0 -> (\i0 -> \i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> i12 (\i0 -> \i0 -> \i0 -> \i0 -> \i0 -> force (i18 (i19 i12 i4 i2) (delay (i21 i4 (i3 (\i0 -> \i0 -> force (i20 (i21 i14 i6 i2) (delay (i7 i2 i1 i4 i3)) (delay (force (i24 i25 (delay error)))))) (delay (i15 i12 i2 i1))))) (delay (i21 i2 (i1 (\i0 -> \i0 -> force (i20 (i21 i14 i4 i2) (delay (i7 i6 i5 i2 i1)) (delay (force (i24 i25 (delay error)))))) (delay (i15 i12 i4 i3))))))) i4 i3 i2 i1) (delay (i7 i5 i4))) (delay (i5 i3 i1))) (\i0 -> i1 equalsInteger lessThanEqualsInteger) i1) (\i0 -> \i0 -> force i1) (\i0 -> \i0 -> force i1)) (\i0 -> \i0 -> force i1)) (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i5 i4 i2 i1) (delay i1))) (\i0 -> \i0 -> \i0 -> force (i6 (i4 i3 i1) (delay (i1 (\i0 -> \i0 -> force (i8 (i9 i5 i4 i2) (delay (i11 i4 i3)) (delay (force (i12 i13 (delay error)))))) (delay (i8 i2)))) (delay (force (i10 i11 (delay error))))))) (\i0 -> \i0 -> i1 (\i0 -> \i0 -> i5 (\i0 -> \i0 -> \i0 -> i1 (\i0 -> \i0 -> force (i11 (i12 i9 i4 i2) (delay (i5 i2 i1)) (delay False))) (delay True)) i2 i1) (delay True))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) (force ifThenElse)) (\i0 -> \i0 -> \i0 -> i3 (\i0 -> \i0 -> i1 i4 i3))) (\i0 -> i2 i1 (\i0 -> \i0 -> force i1))) (\i0 -> \i0 -> \i0 -> \i0 -> i2 i4 i3)) (force trace)) "ptryMergeBy: argument list-like out of order")) \ No newline at end of file diff --git a/plutarch-test/goldens/rational.bench.golden b/plutarch-test/goldens/rational.bench.golden index 977e089bf..3bb46832f 100644 --- a/plutarch-test/goldens/rational.bench.golden +++ b/plutarch-test/goldens/rational.bench.golden @@ -1,24 +1,24 @@ literal {"exBudgetCPU":161100,"exBudgetMemory":800,"scriptSizeBytes":17} -ops.+ {"exBudgetCPU":33566829,"exBudgetMemory":84401,"scriptSizeBytes":393} -ops.- {"exBudgetCPU":33566829,"exBudgetMemory":84401,"scriptSizeBytes":393} -ops.* {"exBudgetCPU":58106354,"exBudgetMemory":142977,"scriptSizeBytes":452} -ops.harmonic-sum {"exBudgetCPU":85280775,"exBudgetMemory":207655,"scriptSizeBytes":456} -ops.multi-product {"exBudgetCPU":96066215,"exBudgetMemory":237989,"scriptSizeBytes":478} -compare {"exBudgetCPU":27186403,"exBudgetMemory":69077,"scriptSizeBytes":378} -round.5/3 {"exBudgetCPU":17922870,"exBudgetMemory":39749,"scriptSizeBytes":384} -round.4/3 {"exBudgetCPU":16466921,"exBudgetMemory":36646,"scriptSizeBytes":384} -round.-5/2 {"exBudgetCPU":17724384,"exBudgetMemory":39249,"scriptSizeBytes":398} -round.-1/4 {"exBudgetCPU":16834398,"exBudgetMemory":37348,"scriptSizeBytes":398} -truncate.5/4 {"exBudgetCPU":13893565,"exBudgetMemory":33539,"scriptSizeBytes":335} -truncate.7/4 {"exBudgetCPU":15349514,"exBudgetMemory":36642,"scriptSizeBytes":335} -truncate.1/4 {"exBudgetCPU":12437616,"exBudgetMemory":30436,"scriptSizeBytes":335} -truncate.-7/4 {"exBudgetCPU":17471417,"exBudgetMemory":40849,"scriptSizeBytes":349} -properFraction.-1/2 {"exBudgetCPU":40492313,"exBudgetMemory":101522,"scriptSizeBytes":513} -properFraction.-3/2 {"exBudgetCPU":42315739,"exBudgetMemory":105327,"scriptSizeBytes":515} -properFraction.-4/3 {"exBudgetCPU":42315739,"exBudgetMemory":105327,"scriptSizeBytes":515} +ops.+ {"exBudgetCPU":34739829,"exBudgetMemory":89501,"scriptSizeBytes":658} +ops.- {"exBudgetCPU":34739829,"exBudgetMemory":89501,"scriptSizeBytes":658} +ops.* {"exBudgetCPU":59279354,"exBudgetMemory":148077,"scriptSizeBytes":716} +ops.harmonic-sum {"exBudgetCPU":86453775,"exBudgetMemory":212755,"scriptSizeBytes":720} +ops.multi-product {"exBudgetCPU":97239215,"exBudgetMemory":243089,"scriptSizeBytes":742} +compare {"exBudgetCPU":28359403,"exBudgetMemory":74177,"scriptSizeBytes":642} +round.5/3 {"exBudgetCPU":18750870,"exBudgetMemory":43349,"scriptSizeBytes":643} +round.4/3 {"exBudgetCPU":17294921,"exBudgetMemory":40246,"scriptSizeBytes":643} +round.-5/2 {"exBudgetCPU":18552384,"exBudgetMemory":42849,"scriptSizeBytes":657} +round.-1/4 {"exBudgetCPU":17662398,"exBudgetMemory":40948,"scriptSizeBytes":657} +truncate.5/4 {"exBudgetCPU":14721565,"exBudgetMemory":37139,"scriptSizeBytes":594} +truncate.7/4 {"exBudgetCPU":16177514,"exBudgetMemory":40242,"scriptSizeBytes":594} +truncate.1/4 {"exBudgetCPU":13265616,"exBudgetMemory":34036,"scriptSizeBytes":594} +truncate.-7/4 {"exBudgetCPU":18299417,"exBudgetMemory":44449,"scriptSizeBytes":608} +properFraction.-1/2 {"exBudgetCPU":41665313,"exBudgetMemory":106622,"scriptSizeBytes":777} +properFraction.-3/2 {"exBudgetCPU":43488739,"exBudgetMemory":110427,"scriptSizeBytes":779} +properFraction.-4/3 {"exBudgetCPU":43488739,"exBudgetMemory":110427,"scriptSizeBytes":779} data.id.0.5 {"exBudgetCPU":161100,"exBudgetMemory":800,"scriptSizeBytes":17} data.id.2 {"exBudgetCPU":161100,"exBudgetMemory":800,"scriptSizeBytes":17} -data.id.11/3 {"exBudgetCPU":13897101,"exBudgetMemory":33539,"scriptSizeBytes":289} -div by 0.1/0 {"exBudgetCPU":591291,"exBudgetMemory":136,"scriptSizeBytes":289} -div by 0.recip 0 {"exBudgetCPU":498395,"exBudgetMemory":134,"scriptSizeBytes":90} -div by 0.1/(1-1) {"exBudgetCPU":9190865,"exBudgetMemory":20168,"scriptSizeBytes":368} \ No newline at end of file +data.id.11/3 {"exBudgetCPU":14725101,"exBudgetMemory":37139,"scriptSizeBytes":548} +div by 0.1/0 {"exBudgetCPU":9017800,"exBudgetMemory":20204,"scriptSizeBytes":548} +div by 0.recip 0 {"exBudgetCPU":4324904,"exBudgetMemory":202,"scriptSizeBytes":393} +div by 0.1/(1-1) {"exBudgetCPU":17617374,"exBudgetMemory":40236,"scriptSizeBytes":625} \ No newline at end of file diff --git a/plutarch-test/goldens/rational.uplc.golden b/plutarch-test/goldens/rational.uplc.golden index 2ec5f55dd..775f49ef4 100644 --- a/plutarch-test/goldens/rational.uplc.golden +++ b/plutarch-test/goldens/rational.uplc.golden @@ -1,24 +1,24 @@ literal (program 1.0.0 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 2) 1)) -ops.+ (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> i8 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i4 i2)) (addInteger (multiplyInteger i4 i1) (multiplyInteger i2 i3)))))) (i1 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2)) (i1 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2))) (\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> i8 ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) (i15 (multiplyInteger i3 i2)))))) (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i13 (equalsInteger i2 0) (delay 0) (delay (force (i13 (lessThanEqualsInteger i2 0) (delay (i11 1)) (delay 1))))))) (i4 i2 i1)))) (\i0 -> \i0 -> (\i0 -> (\i0 -> i5 (i7 i2 i1) (i8 i2 i1)) (i8 i2)) (i7 i2))) (i1 (\i0 -> \i0 -> \i0 -> force (i10 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) (\i0 -> \i0 -> force (i7 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2)))) (\i0 -> \i0 -> force (i6 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (\i0 -> force (i4 (lessThanEqualsInteger i1 (i2 1)) (delay (i2 i1)) (delay i1)))) (\i0 -> subtractInteger 0 i1)) (\i0 -> force (i2 (lessThanEqualsInteger i1 0) (delay (force (i3 i4 (delay error)))) (delay i1)))) (force ifThenElse)) (force trace)) "ptryPositive: building with non positive")) -ops.- (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> i8 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i4 i2)) (subtractInteger (multiplyInteger i4 i1) (multiplyInteger i2 i3)))))) (i1 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2)) (i1 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 3))) (\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> i8 ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) (i15 (multiplyInteger i3 i2)))))) (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i13 (equalsInteger i2 0) (delay 0) (delay (force (i13 (lessThanEqualsInteger i2 0) (delay (i11 1)) (delay 1))))))) (i4 i2 i1)))) (\i0 -> \i0 -> (\i0 -> (\i0 -> i5 (i7 i2 i1) (i8 i2 i1)) (i8 i2)) (i7 i2))) (i1 (\i0 -> \i0 -> \i0 -> force (i10 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) (\i0 -> \i0 -> force (i7 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2)))) (\i0 -> \i0 -> force (i6 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (\i0 -> force (i4 (lessThanEqualsInteger i1 (i2 1)) (delay (i2 i1)) (delay i1)))) (\i0 -> subtractInteger 0 i1)) (\i0 -> force (i2 (lessThanEqualsInteger i1 0) (delay (force (i3 i4 (delay error)))) (delay i1)))) (force ifThenElse)) (force trace)) "ptryPositive: building with non positive")) -ops.* (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> i9 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i4 i2)) (multiplyInteger i4 i2))))) (i1 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) (i2 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 3) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2))) (i1 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2) (i2 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 5) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2)))) (\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> i8 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i4 i2)) (subtractInteger (multiplyInteger i4 i1) (multiplyInteger i2 i3))))))) (\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> i8 ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) (i15 (multiplyInteger i3 i2)))))) (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i13 (equalsInteger i2 0) (delay 0) (delay (force (i13 (lessThanEqualsInteger i2 0) (delay (i11 1)) (delay 1))))))) (i4 i2 i1)))) (\i0 -> \i0 -> (\i0 -> (\i0 -> i5 (i7 i2 i1) (i8 i2 i1)) (i8 i2)) (i7 i2))) (i1 (\i0 -> \i0 -> \i0 -> force (i10 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) (\i0 -> \i0 -> force (i7 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2)))) (\i0 -> \i0 -> force (i6 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (\i0 -> force (i4 (lessThanEqualsInteger i1 (i2 1)) (delay (i2 i1)) (delay i1)))) (\i0 -> subtractInteger 0 i1)) (\i0 -> force (i2 (lessThanEqualsInteger i1 0) (delay (force (i3 i4 (delay error)))) (delay i1)))) (force ifThenElse)) (force trace)) "ptryPositive: building with non positive")) -ops.harmonic-sum (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> i1 (i1 (i1 (i2 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2)) (i2 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 3))) (i2 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 4))) (i2 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 5))) (\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> i8 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i4 i2)) (addInteger (multiplyInteger i4 i1) (multiplyInteger i2 i3))))))) (\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> i8 ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) (i15 (multiplyInteger i3 i2)))))) (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i13 (equalsInteger i2 0) (delay 0) (delay (force (i13 (lessThanEqualsInteger i2 0) (delay (i11 1)) (delay 1))))))) (i4 i2 i1)))) (\i0 -> \i0 -> (\i0 -> (\i0 -> i5 (i7 i2 i1) (i8 i2 i1)) (i8 i2)) (i7 i2))) (i1 (\i0 -> \i0 -> \i0 -> force (i10 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) (\i0 -> \i0 -> force (i7 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2)))) (\i0 -> \i0 -> force (i6 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (\i0 -> force (i4 (lessThanEqualsInteger i1 (i2 1)) (delay (i2 i1)) (delay i1)))) (\i0 -> subtractInteger 0 i1)) (\i0 -> force (i2 (lessThanEqualsInteger i1 0) (delay (force (i3 i4 (delay error)))) (delay i1)))) (force ifThenElse)) (force trace)) "ptryPositive: building with non positive")) -ops.multi-product (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> i2 (i1 (i2 (i1 (i2 (i1 (i2 (i1 (i2 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2)) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2)) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 3)) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 3)) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 4)) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 4)) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 5)) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 5)) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 6)) (\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> i8 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i4 i2)) (multiplyInteger i4 i2)))))) (\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> i8 ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) (i15 (multiplyInteger i3 i2)))))) (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i13 (equalsInteger i2 0) (delay 0) (delay (force (i13 (lessThanEqualsInteger i2 0) (delay (i11 1)) (delay 1))))))) (i4 i2 i1)))) (\i0 -> \i0 -> (\i0 -> (\i0 -> i5 (i7 i2 i1) (i8 i2 i1)) (i8 i2)) (i7 i2))) (i1 (\i0 -> \i0 -> \i0 -> force (i10 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) (\i0 -> \i0 -> force (i7 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2)))) (\i0 -> \i0 -> force (i6 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (\i0 -> force (i4 (lessThanEqualsInteger i1 (i2 1)) (delay (i2 i1)) (delay i1)))) (\i0 -> subtractInteger 0 i1)) (\i0 -> force (i2 (lessThanEqualsInteger i1 0) (delay (force (i3 i4 (delay error)))) (delay i1)))) (force ifThenElse)) (force trace)) "ptryPositive: building with non positive")) -compare (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> lessThanInteger (multiplyInteger i1 i4) (multiplyInteger i2 i3)))) (i1 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 9)) (i1 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 3) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 10))) (\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> i8 ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) (i15 (multiplyInteger i3 i2)))))) (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i13 (equalsInteger i2 0) (delay 0) (delay (force (i13 (lessThanEqualsInteger i2 0) (delay (i11 1)) (delay 1))))))) (i4 i2 i1)))) (\i0 -> \i0 -> (\i0 -> (\i0 -> i5 (i7 i2 i1) (i8 i2 i1)) (i8 i2)) (i7 i2))) (i1 (\i0 -> \i0 -> \i0 -> force (i10 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) (\i0 -> \i0 -> force (i7 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2)))) (\i0 -> \i0 -> force (i6 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (\i0 -> force (i4 (lessThanEqualsInteger i1 (i2 1)) (delay (i2 i1)) (delay i1)))) (\i0 -> subtractInteger 0 i1)) (\i0 -> force (i2 (lessThanEqualsInteger i1 0) (delay (force (i3 i4 (delay error)))) (delay i1)))) (force ifThenElse)) (force trace)) "ptryPositive: building with non positive")) -round.5/3 (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> addInteger i2 (force (i8 (equalsInteger (modInteger i3 2) 1) (delay (force (i8 (lessThanInteger (divideInteger i3 2) i1) (delay 1) (delay 0)))) (delay (force (i8 (equalsInteger (divideInteger i3 2) i1) (delay (modInteger i2 2)) (delay (force (i8 (lessThanInteger i1 (divideInteger i3 2)) (delay 0) (delay 1)))))))))) (modInteger i3 i2)) (divideInteger i2 i1))) ((\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i14 (equalsInteger i2 0) (delay 0) (delay (force (i14 (lessThanEqualsInteger i2 0) (delay (i13 1)) (delay 1))))))) ((\i0 -> (\i0 -> (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> \i0 -> force (i18 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))) (force (i15 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2))) (force (i15 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (i12 i2)) (i11 i2)))) ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) ((\i0 -> force (i10 (lessThanEqualsInteger i1 0) (delay (force (force trace "ptryPositive: building with non positive" (delay error)))) (delay i1))) (multiplyInteger i3 i2))))) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 5) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 3))) (\i0 -> force (i3 (lessThanEqualsInteger i1 (i2 1)) (delay (i2 i1)) (delay i1)))) (\i0 -> subtractInteger 0 i1)) (force ifThenElse))) -round.4/3 (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> addInteger i2 (force (i8 (equalsInteger (modInteger i3 2) 1) (delay (force (i8 (lessThanInteger (divideInteger i3 2) i1) (delay 1) (delay 0)))) (delay (force (i8 (equalsInteger (divideInteger i3 2) i1) (delay (modInteger i2 2)) (delay (force (i8 (lessThanInteger i1 (divideInteger i3 2)) (delay 0) (delay 1)))))))))) (modInteger i3 i2)) (divideInteger i2 i1))) ((\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i14 (equalsInteger i2 0) (delay 0) (delay (force (i14 (lessThanEqualsInteger i2 0) (delay (i13 1)) (delay 1))))))) ((\i0 -> (\i0 -> (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> \i0 -> force (i18 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))) (force (i15 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2))) (force (i15 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (i12 i2)) (i11 i2)))) ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) ((\i0 -> force (i10 (lessThanEqualsInteger i1 0) (delay (force (force trace "ptryPositive: building with non positive" (delay error)))) (delay i1))) (multiplyInteger i3 i2))))) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 4) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 3))) (\i0 -> force (i3 (lessThanEqualsInteger i1 (i2 1)) (delay (i2 i1)) (delay i1)))) (\i0 -> subtractInteger 0 i1)) (force ifThenElse))) -round.-5/2 (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> addInteger i2 (force (i8 (equalsInteger (modInteger i3 2) 1) (delay (force (i8 (lessThanInteger (divideInteger i3 2) i1) (delay 1) (delay 0)))) (delay (force (i8 (equalsInteger (divideInteger i3 2) i1) (delay (modInteger i2 2)) (delay (force (i8 (lessThanInteger i1 (divideInteger i3 2)) (delay 0) (delay 1)))))))))) (modInteger i3 i2)) (divideInteger i2 i1))) ((\i0 -> i1 (\i0 -> \i0 -> (\i0 -> \i0 -> i1 i2 i3) (i5 i2))) ((\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i14 (equalsInteger i2 0) (delay 0) (delay (force (i14 (lessThanEqualsInteger i2 0) (delay (i13 1)) (delay 1))))))) ((\i0 -> (\i0 -> (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> \i0 -> force (i18 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))) (force (i15 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2))) (force (i15 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (i12 i2)) (i11 i2)))) ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) ((\i0 -> force (i10 (lessThanEqualsInteger i1 0) (delay (force (force trace "ptryPositive: building with non positive" (delay error)))) (delay i1))) (multiplyInteger i3 i2))))) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 5) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2)))) (\i0 -> force (i3 (lessThanEqualsInteger i1 (i2 1)) (delay (i2 i1)) (delay i1)))) (\i0 -> subtractInteger 0 i1)) (force ifThenElse))) -round.-1/4 (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> addInteger i2 (force (i8 (equalsInteger (modInteger i3 2) 1) (delay (force (i8 (lessThanInteger (divideInteger i3 2) i1) (delay 1) (delay 0)))) (delay (force (i8 (equalsInteger (divideInteger i3 2) i1) (delay (modInteger i2 2)) (delay (force (i8 (lessThanInteger i1 (divideInteger i3 2)) (delay 0) (delay 1)))))))))) (modInteger i3 i2)) (divideInteger i2 i1))) ((\i0 -> i1 (\i0 -> \i0 -> (\i0 -> \i0 -> i1 i2 i3) (i5 i2))) ((\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i14 (equalsInteger i2 0) (delay 0) (delay (force (i14 (lessThanEqualsInteger i2 0) (delay (i13 1)) (delay 1))))))) ((\i0 -> (\i0 -> (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> \i0 -> force (i18 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))) (force (i15 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2))) (force (i15 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (i12 i2)) (i11 i2)))) ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) ((\i0 -> force (i10 (lessThanEqualsInteger i1 0) (delay (force (force trace "ptryPositive: building with non positive" (delay error)))) (delay i1))) (multiplyInteger i3 i2))))) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 4)))) (\i0 -> force (i3 (lessThanEqualsInteger i1 (i2 1)) (delay (i2 i1)) (delay i1)))) (\i0 -> subtractInteger 0 i1)) (force ifThenElse))) -truncate.5/4 (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> force (i7 (lessThanEqualsInteger 0 i3) (delay i1) (delay (addInteger i1 (force (i7 (equalsInteger (modInteger i3 i2) 0) (delay 0) (delay 1))))))) (divideInteger i2 i1))) ((\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i14 (equalsInteger i2 0) (delay 0) (delay (force (i14 (lessThanEqualsInteger i2 0) (delay (i13 1)) (delay 1))))))) ((\i0 -> (\i0 -> (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> \i0 -> force (i18 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))) (force (i15 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2))) (force (i15 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (i12 i2)) (i11 i2)))) ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) ((\i0 -> force (i10 (lessThanEqualsInteger i1 0) (delay (force (force trace "ptryPositive: building with non positive" (delay error)))) (delay i1))) (multiplyInteger i3 i2))))) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 5) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 4))) (\i0 -> force (i3 (lessThanEqualsInteger i1 (i2 1)) (delay (i2 i1)) (delay i1)))) (\i0 -> subtractInteger 0 i1)) (force ifThenElse))) -truncate.7/4 (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> force (i7 (lessThanEqualsInteger 0 i3) (delay i1) (delay (addInteger i1 (force (i7 (equalsInteger (modInteger i3 i2) 0) (delay 0) (delay 1))))))) (divideInteger i2 i1))) ((\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i14 (equalsInteger i2 0) (delay 0) (delay (force (i14 (lessThanEqualsInteger i2 0) (delay (i13 1)) (delay 1))))))) ((\i0 -> (\i0 -> (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> \i0 -> force (i18 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))) (force (i15 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2))) (force (i15 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (i12 i2)) (i11 i2)))) ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) ((\i0 -> force (i10 (lessThanEqualsInteger i1 0) (delay (force (force trace "ptryPositive: building with non positive" (delay error)))) (delay i1))) (multiplyInteger i3 i2))))) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 7) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 4))) (\i0 -> force (i3 (lessThanEqualsInteger i1 (i2 1)) (delay (i2 i1)) (delay i1)))) (\i0 -> subtractInteger 0 i1)) (force ifThenElse))) -truncate.1/4 (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> force (i7 (lessThanEqualsInteger 0 i3) (delay i1) (delay (addInteger i1 (force (i7 (equalsInteger (modInteger i3 i2) 0) (delay 0) (delay 1))))))) (divideInteger i2 i1))) ((\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i14 (equalsInteger i2 0) (delay 0) (delay (force (i14 (lessThanEqualsInteger i2 0) (delay (i13 1)) (delay 1))))))) ((\i0 -> (\i0 -> (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> \i0 -> force (i18 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))) (force (i15 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2))) (force (i15 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (i12 i2)) (i11 i2)))) ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) ((\i0 -> force (i10 (lessThanEqualsInteger i1 0) (delay (force (force trace "ptryPositive: building with non positive" (delay error)))) (delay i1))) (multiplyInteger i3 i2))))) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 4))) (\i0 -> force (i3 (lessThanEqualsInteger i1 (i2 1)) (delay (i2 i1)) (delay i1)))) (\i0 -> subtractInteger 0 i1)) (force ifThenElse))) -truncate.-7/4 (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> force (i7 (lessThanEqualsInteger 0 i3) (delay i1) (delay (addInteger i1 (force (i7 (equalsInteger (modInteger i3 i2) 0) (delay 0) (delay 1))))))) (divideInteger i2 i1))) ((\i0 -> i1 (\i0 -> \i0 -> (\i0 -> \i0 -> i1 i2 i3) (i5 i2))) ((\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i14 (equalsInteger i2 0) (delay 0) (delay (force (i14 (lessThanEqualsInteger i2 0) (delay (i13 1)) (delay 1))))))) ((\i0 -> (\i0 -> (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> \i0 -> force (i18 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))) (force (i15 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2))) (force (i15 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (i12 i2)) (i11 i2)))) ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) ((\i0 -> force (i10 (lessThanEqualsInteger i1 0) (delay (force (force trace "ptryPositive: building with non positive" (delay error)))) (delay i1))) (multiplyInteger i3 i2))))) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 7) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 4)))) (\i0 -> force (i3 (lessThanEqualsInteger i1 (i2 1)) (delay (i2 i1)) (delay i1)))) (\i0 -> subtractInteger 0 i1)) (force ifThenElse))) -properFraction.-1/2 (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) ((\i0 -> i3 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> i10 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i4 i2)) (subtractInteger (multiplyInteger i4 i1) (multiplyInteger i2 i3)))))) ((\i0 -> \i0 -> i1 i3 i2) 1))) (i1 (\i0 -> \i0 -> (\i0 -> force (i16 (lessThanEqualsInteger 0 i3) (delay i1) (delay (addInteger i1 (force (i16 (equalsInteger (modInteger i3 i2) 0) (delay 0) (delay 1))))))) (divideInteger i2 i1)))) (i1 (i2 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2))) (\i0 -> \i0 -> force ((\i0 -> \i0 -> i16 i2 i1 (delay False)) (equalsInteger i2 0) (delay ((\i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> equalsInteger (multiplyInteger i1 i4) (multiplyInteger i2 i3)))) (i3 (i4 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2)))))))) (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> \i0 -> i1 i2 i3) (i12 i2)))) (\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> i8 ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) (i15 (multiplyInteger i3 i2)))))) (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i13 (equalsInteger i2 0) (delay 0) (delay (force (i13 (lessThanEqualsInteger i2 0) (delay (i11 1)) (delay 1))))))) (i4 i2 i1)))) (\i0 -> \i0 -> (\i0 -> (\i0 -> i5 (i7 i2 i1) (i8 i2 i1)) (i8 i2)) (i7 i2))) (i1 (\i0 -> \i0 -> \i0 -> force (i10 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) (\i0 -> \i0 -> force (i7 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2)))) (\i0 -> \i0 -> force (i6 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (\i0 -> force (i4 (lessThanEqualsInteger i1 (i2 1)) (delay (i2 i1)) (delay i1)))) (\i0 -> subtractInteger 0 i1)) (\i0 -> force (i2 (lessThanEqualsInteger i1 0) (delay (force (i3 i4 (delay error)))) (delay i1)))) (force ifThenElse)) (force trace)) "ptryPositive: building with non positive")) -properFraction.-3/2 (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) ((\i0 -> i3 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> i10 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i4 i2)) (subtractInteger (multiplyInteger i4 i1) (multiplyInteger i2 i3)))))) ((\i0 -> \i0 -> i1 i3 i2) 1))) (i1 (\i0 -> \i0 -> (\i0 -> force (i16 (lessThanEqualsInteger 0 i3) (delay i1) (delay (addInteger i1 (force (i16 (equalsInteger (modInteger i3 i2) 0) (delay 0) (delay 1))))))) (divideInteger i2 i1)))) (i1 (i2 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 3) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2))) (\i0 -> \i0 -> force ((\i0 -> \i0 -> i16 i2 i1 (delay False)) (equalsInteger i2 (i12 1)) (delay ((\i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> equalsInteger (multiplyInteger i1 i4) (multiplyInteger i2 i3)))) (i3 (i4 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2)))))))) (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> \i0 -> i1 i2 i3) (i12 i2)))) (\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> i8 ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) (i15 (multiplyInteger i3 i2)))))) (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i13 (equalsInteger i2 0) (delay 0) (delay (force (i13 (lessThanEqualsInteger i2 0) (delay (i11 1)) (delay 1))))))) (i4 i2 i1)))) (\i0 -> \i0 -> (\i0 -> (\i0 -> i5 (i7 i2 i1) (i8 i2 i1)) (i8 i2)) (i7 i2))) (i1 (\i0 -> \i0 -> \i0 -> force (i10 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) (\i0 -> \i0 -> force (i7 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2)))) (\i0 -> \i0 -> force (i6 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (\i0 -> force (i4 (lessThanEqualsInteger i1 (i2 1)) (delay (i2 i1)) (delay i1)))) (\i0 -> subtractInteger 0 i1)) (\i0 -> force (i2 (lessThanEqualsInteger i1 0) (delay (force (i3 i4 (delay error)))) (delay i1)))) (force ifThenElse)) (force trace)) "ptryPositive: building with non positive")) -properFraction.-4/3 (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) ((\i0 -> i3 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> i10 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i4 i2)) (subtractInteger (multiplyInteger i4 i1) (multiplyInteger i2 i3)))))) ((\i0 -> \i0 -> i1 i3 i2) 1))) (i1 (\i0 -> \i0 -> (\i0 -> force (i16 (lessThanEqualsInteger 0 i3) (delay i1) (delay (addInteger i1 (force (i16 (equalsInteger (modInteger i3 i2) 0) (delay 0) (delay 1))))))) (divideInteger i2 i1)))) (i1 (i2 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 4) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 3))) (\i0 -> \i0 -> force ((\i0 -> \i0 -> i16 i2 i1 (delay False)) (equalsInteger i2 (i12 1)) (delay ((\i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> equalsInteger (multiplyInteger i1 i4) (multiplyInteger i2 i3)))) (i3 (i4 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 3)))))))) (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> \i0 -> i1 i2 i3) (i12 i2)))) (\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> i8 ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) (i15 (multiplyInteger i3 i2)))))) (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i13 (equalsInteger i2 0) (delay 0) (delay (force (i13 (lessThanEqualsInteger i2 0) (delay (i11 1)) (delay 1))))))) (i4 i2 i1)))) (\i0 -> \i0 -> (\i0 -> (\i0 -> i5 (i7 i2 i1) (i8 i2 i1)) (i8 i2)) (i7 i2))) (i1 (\i0 -> \i0 -> \i0 -> force (i10 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) (\i0 -> \i0 -> force (i7 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2)))) (\i0 -> \i0 -> force (i6 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (\i0 -> force (i4 (lessThanEqualsInteger i1 (i2 1)) (delay (i2 i1)) (delay i1)))) (\i0 -> subtractInteger 0 i1)) (\i0 -> force (i2 (lessThanEqualsInteger i1 0) (delay (force (i3 i4 (delay error)))) (delay i1)))) (force ifThenElse)) (force trace)) "ptryPositive: building with non positive")) +ops.+ (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> i8 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i4 i2)) (addInteger (multiplyInteger i4 i1) (multiplyInteger i2 i3)))))) (i1 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2)) (i1 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2))) (\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> i8 ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) (i12 (multiplyInteger i3 i2)))))) (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i28 (equalsInteger i2 0) (delay 0) (delay (force (i28 (lessThanEqualsInteger i2 0) (delay (i29 1)) (delay 1))))))) (i4 i2 i1)))) (\i0 -> \i0 -> (\i0 -> (\i0 -> i5 (i6 i2 i1) (i7 i2 i1)) (i25 i2)) (i24 i2))) (i7 (\i0 -> \i0 -> \i0 -> force (i25 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))))) (\i0 -> \i0 -> force (i23 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2)))) (\i0 -> \i0 -> force (i22 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (\i0 -> force (i20 (lessThanEqualsInteger i1 0) (delay (force (i2 (appendString i3 (i4 i1)) (delay error)))) (delay i1)))) (force trace)) "ptryPositive: building with non positive: ") (i1 (\i0 -> \i0 -> appendString (force (i18 (lessThanInteger i1 0) (delay i4) (delay i5))) ((\i0 -> (\i0 -> force (i20 (equalsInteger i2 0) (delay (i8 i1)) (delay ((\i0 -> appendString i1 (i9 i2)) (i4 i2))))) (remainderInteger (i18 i2) 10)) (quotientInteger (i17 i1) 10))))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) "-") "") (\i0 -> force (i13 (equalsInteger i1 0) (delay i2) (delay (force (i13 (equalsInteger i1 1) (delay i3) (delay (force (i13 (equalsInteger i1 2) (delay i4) (delay (force (i13 (equalsInteger i1 3) (delay i5) (delay (force (i13 (equalsInteger i1 4) (delay i6) (delay (force (i13 (equalsInteger i1 5) (delay i7) (delay (force (i13 (equalsInteger i1 6) (delay i8) (delay (force (i13 (equalsInteger i1 7) (delay i9) (delay (force (i13 (equalsInteger i1 8) (delay i10) (delay (force (i13 (equalsInteger i1 9) (delay i11) (delay error))))))))))))))))))))))))))))))) "0") "1") "2") "3") "4") "5") "6") "7") "8") "9") (\i0 -> force (i2 (lessThanEqualsInteger i1 (i3 1)) (delay (i3 i1)) (delay i1)))) (force ifThenElse)) (\i0 -> subtractInteger 0 i1))) +ops.- (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> i8 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i4 i2)) (subtractInteger (multiplyInteger i4 i1) (multiplyInteger i2 i3)))))) (i1 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2)) (i1 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 3))) (\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> i8 ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) (i12 (multiplyInteger i3 i2)))))) (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i28 (equalsInteger i2 0) (delay 0) (delay (force (i28 (lessThanEqualsInteger i2 0) (delay (i29 1)) (delay 1))))))) (i4 i2 i1)))) (\i0 -> \i0 -> (\i0 -> (\i0 -> i5 (i6 i2 i1) (i7 i2 i1)) (i25 i2)) (i24 i2))) (i7 (\i0 -> \i0 -> \i0 -> force (i25 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))))) (\i0 -> \i0 -> force (i23 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2)))) (\i0 -> \i0 -> force (i22 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (\i0 -> force (i20 (lessThanEqualsInteger i1 0) (delay (force (i2 (appendString i3 (i4 i1)) (delay error)))) (delay i1)))) (force trace)) "ptryPositive: building with non positive: ") (i1 (\i0 -> \i0 -> appendString (force (i18 (lessThanInteger i1 0) (delay i4) (delay i5))) ((\i0 -> (\i0 -> force (i20 (equalsInteger i2 0) (delay (i8 i1)) (delay ((\i0 -> appendString i1 (i9 i2)) (i4 i2))))) (remainderInteger (i18 i2) 10)) (quotientInteger (i17 i1) 10))))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) "-") "") (\i0 -> force (i13 (equalsInteger i1 0) (delay i2) (delay (force (i13 (equalsInteger i1 1) (delay i3) (delay (force (i13 (equalsInteger i1 2) (delay i4) (delay (force (i13 (equalsInteger i1 3) (delay i5) (delay (force (i13 (equalsInteger i1 4) (delay i6) (delay (force (i13 (equalsInteger i1 5) (delay i7) (delay (force (i13 (equalsInteger i1 6) (delay i8) (delay (force (i13 (equalsInteger i1 7) (delay i9) (delay (force (i13 (equalsInteger i1 8) (delay i10) (delay (force (i13 (equalsInteger i1 9) (delay i11) (delay error))))))))))))))))))))))))))))))) "0") "1") "2") "3") "4") "5") "6") "7") "8") "9") (\i0 -> force (i2 (lessThanEqualsInteger i1 (i3 1)) (delay (i3 i1)) (delay i1)))) (force ifThenElse)) (\i0 -> subtractInteger 0 i1))) +ops.* (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> i9 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i4 i2)) (multiplyInteger i4 i2))))) (i1 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) (i2 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 3) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2))) (i1 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2) (i2 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 5) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2)))) (\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> i8 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i4 i2)) (subtractInteger (multiplyInteger i4 i1) (multiplyInteger i2 i3))))))) (\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> i8 ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) (i12 (multiplyInteger i3 i2)))))) (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i28 (equalsInteger i2 0) (delay 0) (delay (force (i28 (lessThanEqualsInteger i2 0) (delay (i29 1)) (delay 1))))))) (i4 i2 i1)))) (\i0 -> \i0 -> (\i0 -> (\i0 -> i5 (i6 i2 i1) (i7 i2 i1)) (i25 i2)) (i24 i2))) (i7 (\i0 -> \i0 -> \i0 -> force (i25 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))))) (\i0 -> \i0 -> force (i23 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2)))) (\i0 -> \i0 -> force (i22 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (\i0 -> force (i20 (lessThanEqualsInteger i1 0) (delay (force (i2 (appendString i3 (i4 i1)) (delay error)))) (delay i1)))) (force trace)) "ptryPositive: building with non positive: ") (i1 (\i0 -> \i0 -> appendString (force (i18 (lessThanInteger i1 0) (delay i4) (delay i5))) ((\i0 -> (\i0 -> force (i20 (equalsInteger i2 0) (delay (i8 i1)) (delay ((\i0 -> appendString i1 (i9 i2)) (i4 i2))))) (remainderInteger (i18 i2) 10)) (quotientInteger (i17 i1) 10))))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) "-") "") (\i0 -> force (i13 (equalsInteger i1 0) (delay i2) (delay (force (i13 (equalsInteger i1 1) (delay i3) (delay (force (i13 (equalsInteger i1 2) (delay i4) (delay (force (i13 (equalsInteger i1 3) (delay i5) (delay (force (i13 (equalsInteger i1 4) (delay i6) (delay (force (i13 (equalsInteger i1 5) (delay i7) (delay (force (i13 (equalsInteger i1 6) (delay i8) (delay (force (i13 (equalsInteger i1 7) (delay i9) (delay (force (i13 (equalsInteger i1 8) (delay i10) (delay (force (i13 (equalsInteger i1 9) (delay i11) (delay error))))))))))))))))))))))))))))))) "0") "1") "2") "3") "4") "5") "6") "7") "8") "9") (\i0 -> force (i2 (lessThanEqualsInteger i1 (i3 1)) (delay (i3 i1)) (delay i1)))) (force ifThenElse)) (\i0 -> subtractInteger 0 i1))) +ops.harmonic-sum (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> i1 (i1 (i1 (i2 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2)) (i2 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 3))) (i2 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 4))) (i2 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 5))) (\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> i8 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i4 i2)) (addInteger (multiplyInteger i4 i1) (multiplyInteger i2 i3))))))) (\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> i8 ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) (i12 (multiplyInteger i3 i2)))))) (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i28 (equalsInteger i2 0) (delay 0) (delay (force (i28 (lessThanEqualsInteger i2 0) (delay (i29 1)) (delay 1))))))) (i4 i2 i1)))) (\i0 -> \i0 -> (\i0 -> (\i0 -> i5 (i6 i2 i1) (i7 i2 i1)) (i25 i2)) (i24 i2))) (i7 (\i0 -> \i0 -> \i0 -> force (i25 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))))) (\i0 -> \i0 -> force (i23 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2)))) (\i0 -> \i0 -> force (i22 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (\i0 -> force (i20 (lessThanEqualsInteger i1 0) (delay (force (i2 (appendString i3 (i4 i1)) (delay error)))) (delay i1)))) (force trace)) "ptryPositive: building with non positive: ") (i1 (\i0 -> \i0 -> appendString (force (i18 (lessThanInteger i1 0) (delay i4) (delay i5))) ((\i0 -> (\i0 -> force (i20 (equalsInteger i2 0) (delay (i8 i1)) (delay ((\i0 -> appendString i1 (i9 i2)) (i4 i2))))) (remainderInteger (i18 i2) 10)) (quotientInteger (i17 i1) 10))))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) "-") "") (\i0 -> force (i13 (equalsInteger i1 0) (delay i2) (delay (force (i13 (equalsInteger i1 1) (delay i3) (delay (force (i13 (equalsInteger i1 2) (delay i4) (delay (force (i13 (equalsInteger i1 3) (delay i5) (delay (force (i13 (equalsInteger i1 4) (delay i6) (delay (force (i13 (equalsInteger i1 5) (delay i7) (delay (force (i13 (equalsInteger i1 6) (delay i8) (delay (force (i13 (equalsInteger i1 7) (delay i9) (delay (force (i13 (equalsInteger i1 8) (delay i10) (delay (force (i13 (equalsInteger i1 9) (delay i11) (delay error))))))))))))))))))))))))))))))) "0") "1") "2") "3") "4") "5") "6") "7") "8") "9") (\i0 -> force (i2 (lessThanEqualsInteger i1 (i3 1)) (delay (i3 i1)) (delay i1)))) (force ifThenElse)) (\i0 -> subtractInteger 0 i1))) +ops.multi-product (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> i2 (i1 (i2 (i1 (i2 (i1 (i2 (i1 (i2 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2)) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2)) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 3)) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 3)) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 4)) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 4)) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 5)) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 5)) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 6)) (\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> i8 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i4 i2)) (multiplyInteger i4 i2)))))) (\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> i8 ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) (i12 (multiplyInteger i3 i2)))))) (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i28 (equalsInteger i2 0) (delay 0) (delay (force (i28 (lessThanEqualsInteger i2 0) (delay (i29 1)) (delay 1))))))) (i4 i2 i1)))) (\i0 -> \i0 -> (\i0 -> (\i0 -> i5 (i6 i2 i1) (i7 i2 i1)) (i25 i2)) (i24 i2))) (i7 (\i0 -> \i0 -> \i0 -> force (i25 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))))) (\i0 -> \i0 -> force (i23 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2)))) (\i0 -> \i0 -> force (i22 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (\i0 -> force (i20 (lessThanEqualsInteger i1 0) (delay (force (i2 (appendString i3 (i4 i1)) (delay error)))) (delay i1)))) (force trace)) "ptryPositive: building with non positive: ") (i1 (\i0 -> \i0 -> appendString (force (i18 (lessThanInteger i1 0) (delay i4) (delay i5))) ((\i0 -> (\i0 -> force (i20 (equalsInteger i2 0) (delay (i8 i1)) (delay ((\i0 -> appendString i1 (i9 i2)) (i4 i2))))) (remainderInteger (i18 i2) 10)) (quotientInteger (i17 i1) 10))))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) "-") "") (\i0 -> force (i13 (equalsInteger i1 0) (delay i2) (delay (force (i13 (equalsInteger i1 1) (delay i3) (delay (force (i13 (equalsInteger i1 2) (delay i4) (delay (force (i13 (equalsInteger i1 3) (delay i5) (delay (force (i13 (equalsInteger i1 4) (delay i6) (delay (force (i13 (equalsInteger i1 5) (delay i7) (delay (force (i13 (equalsInteger i1 6) (delay i8) (delay (force (i13 (equalsInteger i1 7) (delay i9) (delay (force (i13 (equalsInteger i1 8) (delay i10) (delay (force (i13 (equalsInteger i1 9) (delay i11) (delay error))))))))))))))))))))))))))))))) "0") "1") "2") "3") "4") "5") "6") "7") "8") "9") (\i0 -> force (i2 (lessThanEqualsInteger i1 (i3 1)) (delay (i3 i1)) (delay i1)))) (force ifThenElse)) (\i0 -> subtractInteger 0 i1))) +compare (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> lessThanInteger (multiplyInteger i1 i4) (multiplyInteger i2 i3)))) (i1 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 9)) (i1 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 3) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 10))) (\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> i8 ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) (i12 (multiplyInteger i3 i2)))))) (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i28 (equalsInteger i2 0) (delay 0) (delay (force (i28 (lessThanEqualsInteger i2 0) (delay (i29 1)) (delay 1))))))) (i4 i2 i1)))) (\i0 -> \i0 -> (\i0 -> (\i0 -> i5 (i6 i2 i1) (i7 i2 i1)) (i25 i2)) (i24 i2))) (i7 (\i0 -> \i0 -> \i0 -> force (i25 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))))) (\i0 -> \i0 -> force (i23 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2)))) (\i0 -> \i0 -> force (i22 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (\i0 -> force (i20 (lessThanEqualsInteger i1 0) (delay (force (i2 (appendString i3 (i4 i1)) (delay error)))) (delay i1)))) (force trace)) "ptryPositive: building with non positive: ") (i1 (\i0 -> \i0 -> appendString (force (i18 (lessThanInteger i1 0) (delay i4) (delay i5))) ((\i0 -> (\i0 -> force (i20 (equalsInteger i2 0) (delay (i8 i1)) (delay ((\i0 -> appendString i1 (i9 i2)) (i4 i2))))) (remainderInteger (i18 i2) 10)) (quotientInteger (i17 i1) 10))))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) "-") "") (\i0 -> force (i13 (equalsInteger i1 0) (delay i2) (delay (force (i13 (equalsInteger i1 1) (delay i3) (delay (force (i13 (equalsInteger i1 2) (delay i4) (delay (force (i13 (equalsInteger i1 3) (delay i5) (delay (force (i13 (equalsInteger i1 4) (delay i6) (delay (force (i13 (equalsInteger i1 5) (delay i7) (delay (force (i13 (equalsInteger i1 6) (delay i8) (delay (force (i13 (equalsInteger i1 7) (delay i9) (delay (force (i13 (equalsInteger i1 8) (delay i10) (delay (force (i13 (equalsInteger i1 9) (delay i11) (delay error))))))))))))))))))))))))))))))) "0") "1") "2") "3") "4") "5") "6") "7") "8") "9") (\i0 -> force (i2 (lessThanEqualsInteger i1 (i3 1)) (delay (i3 i1)) (delay i1)))) (force ifThenElse)) (\i0 -> subtractInteger 0 i1))) +round.5/3 (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> addInteger i2 (force (i19 (equalsInteger (modInteger i3 2) 1) (delay (force (i19 (lessThanInteger (divideInteger i3 2) i1) (delay 1) (delay 0)))) (delay (force (i19 (equalsInteger (divideInteger i3 2) i1) (delay (modInteger i2 2)) (delay (force (i19 (lessThanInteger i1 (divideInteger i3 2)) (delay 0) (delay 1)))))))))) (modInteger i3 i2)) (divideInteger i2 i1))) ((\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i25 (equalsInteger i2 0) (delay 0) (delay (force (i25 (lessThanEqualsInteger i2 0) (delay (i26 1)) (delay 1))))))) ((\i0 -> (\i0 -> i13 (\i0 -> \i0 -> \i0 -> force (i29 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))) (force (i26 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2))) (force (i26 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (i24 i2)) (i23 i2)))) ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) ((\i0 -> force (i21 (lessThanEqualsInteger i1 0) (delay (force (force trace (appendString "ptryPositive: building with non positive: " (i8 (\i0 -> \i0 -> appendString (force (i23 (lessThanInteger i1 0) (delay "-") (delay ""))) ((\i0 -> (\i0 -> force (i25 (equalsInteger i2 0) (delay (i13 i1)) (delay ((\i0 -> appendString i1 (i14 i2)) (i4 i2))))) (remainderInteger (i23 i2) 10)) (quotientInteger (i22 i1) 10))) i1)) (delay error)))) (delay i1))) (multiplyInteger i3 i2))))) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 5) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 3))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) (\i0 -> force (i13 (equalsInteger i1 0) (delay i2) (delay (force (i13 (equalsInteger i1 1) (delay i3) (delay (force (i13 (equalsInteger i1 2) (delay i4) (delay (force (i13 (equalsInteger i1 3) (delay i5) (delay (force (i13 (equalsInteger i1 4) (delay i6) (delay (force (i13 (equalsInteger i1 5) (delay i7) (delay (force (i13 (equalsInteger i1 6) (delay i8) (delay (force (i13 (equalsInteger i1 7) (delay i9) (delay (force (i13 (equalsInteger i1 8) (delay i10) (delay (force (i13 (equalsInteger i1 9) (delay i11) (delay error))))))))))))))))))))))))))))))) "0") "1") "2") "3") "4") "5") "6") "7") "8") "9") (\i0 -> force (i2 (lessThanEqualsInteger i1 (i3 1)) (delay (i3 i1)) (delay i1)))) (force ifThenElse)) (\i0 -> subtractInteger 0 i1))) +round.4/3 (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> addInteger i2 (force (i19 (equalsInteger (modInteger i3 2) 1) (delay (force (i19 (lessThanInteger (divideInteger i3 2) i1) (delay 1) (delay 0)))) (delay (force (i19 (equalsInteger (divideInteger i3 2) i1) (delay (modInteger i2 2)) (delay (force (i19 (lessThanInteger i1 (divideInteger i3 2)) (delay 0) (delay 1)))))))))) (modInteger i3 i2)) (divideInteger i2 i1))) ((\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i25 (equalsInteger i2 0) (delay 0) (delay (force (i25 (lessThanEqualsInteger i2 0) (delay (i26 1)) (delay 1))))))) ((\i0 -> (\i0 -> i13 (\i0 -> \i0 -> \i0 -> force (i29 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))) (force (i26 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2))) (force (i26 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (i24 i2)) (i23 i2)))) ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) ((\i0 -> force (i21 (lessThanEqualsInteger i1 0) (delay (force (force trace (appendString "ptryPositive: building with non positive: " (i8 (\i0 -> \i0 -> appendString (force (i23 (lessThanInteger i1 0) (delay "-") (delay ""))) ((\i0 -> (\i0 -> force (i25 (equalsInteger i2 0) (delay (i13 i1)) (delay ((\i0 -> appendString i1 (i14 i2)) (i4 i2))))) (remainderInteger (i23 i2) 10)) (quotientInteger (i22 i1) 10))) i1)) (delay error)))) (delay i1))) (multiplyInteger i3 i2))))) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 4) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 3))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) (\i0 -> force (i13 (equalsInteger i1 0) (delay i2) (delay (force (i13 (equalsInteger i1 1) (delay i3) (delay (force (i13 (equalsInteger i1 2) (delay i4) (delay (force (i13 (equalsInteger i1 3) (delay i5) (delay (force (i13 (equalsInteger i1 4) (delay i6) (delay (force (i13 (equalsInteger i1 5) (delay i7) (delay (force (i13 (equalsInteger i1 6) (delay i8) (delay (force (i13 (equalsInteger i1 7) (delay i9) (delay (force (i13 (equalsInteger i1 8) (delay i10) (delay (force (i13 (equalsInteger i1 9) (delay i11) (delay error))))))))))))))))))))))))))))))) "0") "1") "2") "3") "4") "5") "6") "7") "8") "9") (\i0 -> force (i2 (lessThanEqualsInteger i1 (i3 1)) (delay (i3 i1)) (delay i1)))) (force ifThenElse)) (\i0 -> subtractInteger 0 i1))) +round.-5/2 (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> addInteger i2 (force (i19 (equalsInteger (modInteger i3 2) 1) (delay (force (i19 (lessThanInteger (divideInteger i3 2) i1) (delay 1) (delay 0)))) (delay (force (i19 (equalsInteger (divideInteger i3 2) i1) (delay (modInteger i2 2)) (delay (force (i19 (lessThanInteger i1 (divideInteger i3 2)) (delay 0) (delay 1)))))))))) (modInteger i3 i2)) (divideInteger i2 i1))) ((\i0 -> i1 (\i0 -> \i0 -> (\i0 -> \i0 -> i1 i2 i3) (i18 i2))) ((\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i25 (equalsInteger i2 0) (delay 0) (delay (force (i25 (lessThanEqualsInteger i2 0) (delay (i26 1)) (delay 1))))))) ((\i0 -> (\i0 -> i13 (\i0 -> \i0 -> \i0 -> force (i29 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))) (force (i26 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2))) (force (i26 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (i24 i2)) (i23 i2)))) ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) ((\i0 -> force (i21 (lessThanEqualsInteger i1 0) (delay (force (force trace (appendString "ptryPositive: building with non positive: " (i8 (\i0 -> \i0 -> appendString (force (i23 (lessThanInteger i1 0) (delay "-") (delay ""))) ((\i0 -> (\i0 -> force (i25 (equalsInteger i2 0) (delay (i13 i1)) (delay ((\i0 -> appendString i1 (i14 i2)) (i4 i2))))) (remainderInteger (i23 i2) 10)) (quotientInteger (i22 i1) 10))) i1)) (delay error)))) (delay i1))) (multiplyInteger i3 i2))))) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 5) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2)))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) (\i0 -> force (i13 (equalsInteger i1 0) (delay i2) (delay (force (i13 (equalsInteger i1 1) (delay i3) (delay (force (i13 (equalsInteger i1 2) (delay i4) (delay (force (i13 (equalsInteger i1 3) (delay i5) (delay (force (i13 (equalsInteger i1 4) (delay i6) (delay (force (i13 (equalsInteger i1 5) (delay i7) (delay (force (i13 (equalsInteger i1 6) (delay i8) (delay (force (i13 (equalsInteger i1 7) (delay i9) (delay (force (i13 (equalsInteger i1 8) (delay i10) (delay (force (i13 (equalsInteger i1 9) (delay i11) (delay error))))))))))))))))))))))))))))))) "0") "1") "2") "3") "4") "5") "6") "7") "8") "9") (\i0 -> force (i2 (lessThanEqualsInteger i1 (i3 1)) (delay (i3 i1)) (delay i1)))) (force ifThenElse)) (\i0 -> subtractInteger 0 i1))) +round.-1/4 (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> addInteger i2 (force (i19 (equalsInteger (modInteger i3 2) 1) (delay (force (i19 (lessThanInteger (divideInteger i3 2) i1) (delay 1) (delay 0)))) (delay (force (i19 (equalsInteger (divideInteger i3 2) i1) (delay (modInteger i2 2)) (delay (force (i19 (lessThanInteger i1 (divideInteger i3 2)) (delay 0) (delay 1)))))))))) (modInteger i3 i2)) (divideInteger i2 i1))) ((\i0 -> i1 (\i0 -> \i0 -> (\i0 -> \i0 -> i1 i2 i3) (i18 i2))) ((\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i25 (equalsInteger i2 0) (delay 0) (delay (force (i25 (lessThanEqualsInteger i2 0) (delay (i26 1)) (delay 1))))))) ((\i0 -> (\i0 -> i13 (\i0 -> \i0 -> \i0 -> force (i29 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))) (force (i26 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2))) (force (i26 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (i24 i2)) (i23 i2)))) ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) ((\i0 -> force (i21 (lessThanEqualsInteger i1 0) (delay (force (force trace (appendString "ptryPositive: building with non positive: " (i8 (\i0 -> \i0 -> appendString (force (i23 (lessThanInteger i1 0) (delay "-") (delay ""))) ((\i0 -> (\i0 -> force (i25 (equalsInteger i2 0) (delay (i13 i1)) (delay ((\i0 -> appendString i1 (i14 i2)) (i4 i2))))) (remainderInteger (i23 i2) 10)) (quotientInteger (i22 i1) 10))) i1)) (delay error)))) (delay i1))) (multiplyInteger i3 i2))))) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 4)))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) (\i0 -> force (i13 (equalsInteger i1 0) (delay i2) (delay (force (i13 (equalsInteger i1 1) (delay i3) (delay (force (i13 (equalsInteger i1 2) (delay i4) (delay (force (i13 (equalsInteger i1 3) (delay i5) (delay (force (i13 (equalsInteger i1 4) (delay i6) (delay (force (i13 (equalsInteger i1 5) (delay i7) (delay (force (i13 (equalsInteger i1 6) (delay i8) (delay (force (i13 (equalsInteger i1 7) (delay i9) (delay (force (i13 (equalsInteger i1 8) (delay i10) (delay (force (i13 (equalsInteger i1 9) (delay i11) (delay error))))))))))))))))))))))))))))))) "0") "1") "2") "3") "4") "5") "6") "7") "8") "9") (\i0 -> force (i2 (lessThanEqualsInteger i1 (i3 1)) (delay (i3 i1)) (delay i1)))) (force ifThenElse)) (\i0 -> subtractInteger 0 i1))) +truncate.5/4 (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> force (i18 (lessThanEqualsInteger 0 i3) (delay i1) (delay (addInteger i1 (force (i18 (equalsInteger (modInteger i3 i2) 0) (delay 0) (delay 1))))))) (divideInteger i2 i1))) ((\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i25 (equalsInteger i2 0) (delay 0) (delay (force (i25 (lessThanEqualsInteger i2 0) (delay (i26 1)) (delay 1))))))) ((\i0 -> (\i0 -> i13 (\i0 -> \i0 -> \i0 -> force (i29 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))) (force (i26 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2))) (force (i26 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (i24 i2)) (i23 i2)))) ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) ((\i0 -> force (i21 (lessThanEqualsInteger i1 0) (delay (force (force trace (appendString "ptryPositive: building with non positive: " (i8 (\i0 -> \i0 -> appendString (force (i23 (lessThanInteger i1 0) (delay "-") (delay ""))) ((\i0 -> (\i0 -> force (i25 (equalsInteger i2 0) (delay (i13 i1)) (delay ((\i0 -> appendString i1 (i14 i2)) (i4 i2))))) (remainderInteger (i23 i2) 10)) (quotientInteger (i22 i1) 10))) i1)) (delay error)))) (delay i1))) (multiplyInteger i3 i2))))) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 5) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 4))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) (\i0 -> force (i13 (equalsInteger i1 0) (delay i2) (delay (force (i13 (equalsInteger i1 1) (delay i3) (delay (force (i13 (equalsInteger i1 2) (delay i4) (delay (force (i13 (equalsInteger i1 3) (delay i5) (delay (force (i13 (equalsInteger i1 4) (delay i6) (delay (force (i13 (equalsInteger i1 5) (delay i7) (delay (force (i13 (equalsInteger i1 6) (delay i8) (delay (force (i13 (equalsInteger i1 7) (delay i9) (delay (force (i13 (equalsInteger i1 8) (delay i10) (delay (force (i13 (equalsInteger i1 9) (delay i11) (delay error))))))))))))))))))))))))))))))) "0") "1") "2") "3") "4") "5") "6") "7") "8") "9") (\i0 -> force (i2 (lessThanEqualsInteger i1 (i3 1)) (delay (i3 i1)) (delay i1)))) (force ifThenElse)) (\i0 -> subtractInteger 0 i1))) +truncate.7/4 (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> force (i18 (lessThanEqualsInteger 0 i3) (delay i1) (delay (addInteger i1 (force (i18 (equalsInteger (modInteger i3 i2) 0) (delay 0) (delay 1))))))) (divideInteger i2 i1))) ((\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i25 (equalsInteger i2 0) (delay 0) (delay (force (i25 (lessThanEqualsInteger i2 0) (delay (i26 1)) (delay 1))))))) ((\i0 -> (\i0 -> i13 (\i0 -> \i0 -> \i0 -> force (i29 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))) (force (i26 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2))) (force (i26 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (i24 i2)) (i23 i2)))) ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) ((\i0 -> force (i21 (lessThanEqualsInteger i1 0) (delay (force (force trace (appendString "ptryPositive: building with non positive: " (i8 (\i0 -> \i0 -> appendString (force (i23 (lessThanInteger i1 0) (delay "-") (delay ""))) ((\i0 -> (\i0 -> force (i25 (equalsInteger i2 0) (delay (i13 i1)) (delay ((\i0 -> appendString i1 (i14 i2)) (i4 i2))))) (remainderInteger (i23 i2) 10)) (quotientInteger (i22 i1) 10))) i1)) (delay error)))) (delay i1))) (multiplyInteger i3 i2))))) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 7) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 4))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) (\i0 -> force (i13 (equalsInteger i1 0) (delay i2) (delay (force (i13 (equalsInteger i1 1) (delay i3) (delay (force (i13 (equalsInteger i1 2) (delay i4) (delay (force (i13 (equalsInteger i1 3) (delay i5) (delay (force (i13 (equalsInteger i1 4) (delay i6) (delay (force (i13 (equalsInteger i1 5) (delay i7) (delay (force (i13 (equalsInteger i1 6) (delay i8) (delay (force (i13 (equalsInteger i1 7) (delay i9) (delay (force (i13 (equalsInteger i1 8) (delay i10) (delay (force (i13 (equalsInteger i1 9) (delay i11) (delay error))))))))))))))))))))))))))))))) "0") "1") "2") "3") "4") "5") "6") "7") "8") "9") (\i0 -> force (i2 (lessThanEqualsInteger i1 (i3 1)) (delay (i3 i1)) (delay i1)))) (force ifThenElse)) (\i0 -> subtractInteger 0 i1))) +truncate.1/4 (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> force (i18 (lessThanEqualsInteger 0 i3) (delay i1) (delay (addInteger i1 (force (i18 (equalsInteger (modInteger i3 i2) 0) (delay 0) (delay 1))))))) (divideInteger i2 i1))) ((\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i25 (equalsInteger i2 0) (delay 0) (delay (force (i25 (lessThanEqualsInteger i2 0) (delay (i26 1)) (delay 1))))))) ((\i0 -> (\i0 -> i13 (\i0 -> \i0 -> \i0 -> force (i29 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))) (force (i26 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2))) (force (i26 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (i24 i2)) (i23 i2)))) ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) ((\i0 -> force (i21 (lessThanEqualsInteger i1 0) (delay (force (force trace (appendString "ptryPositive: building with non positive: " (i8 (\i0 -> \i0 -> appendString (force (i23 (lessThanInteger i1 0) (delay "-") (delay ""))) ((\i0 -> (\i0 -> force (i25 (equalsInteger i2 0) (delay (i13 i1)) (delay ((\i0 -> appendString i1 (i14 i2)) (i4 i2))))) (remainderInteger (i23 i2) 10)) (quotientInteger (i22 i1) 10))) i1)) (delay error)))) (delay i1))) (multiplyInteger i3 i2))))) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 4))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) (\i0 -> force (i13 (equalsInteger i1 0) (delay i2) (delay (force (i13 (equalsInteger i1 1) (delay i3) (delay (force (i13 (equalsInteger i1 2) (delay i4) (delay (force (i13 (equalsInteger i1 3) (delay i5) (delay (force (i13 (equalsInteger i1 4) (delay i6) (delay (force (i13 (equalsInteger i1 5) (delay i7) (delay (force (i13 (equalsInteger i1 6) (delay i8) (delay (force (i13 (equalsInteger i1 7) (delay i9) (delay (force (i13 (equalsInteger i1 8) (delay i10) (delay (force (i13 (equalsInteger i1 9) (delay i11) (delay error))))))))))))))))))))))))))))))) "0") "1") "2") "3") "4") "5") "6") "7") "8") "9") (\i0 -> force (i2 (lessThanEqualsInteger i1 (i3 1)) (delay (i3 i1)) (delay i1)))) (force ifThenElse)) (\i0 -> subtractInteger 0 i1))) +truncate.-7/4 (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> force (i18 (lessThanEqualsInteger 0 i3) (delay i1) (delay (addInteger i1 (force (i18 (equalsInteger (modInteger i3 i2) 0) (delay 0) (delay 1))))))) (divideInteger i2 i1))) ((\i0 -> i1 (\i0 -> \i0 -> (\i0 -> \i0 -> i1 i2 i3) (i18 i2))) ((\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i25 (equalsInteger i2 0) (delay 0) (delay (force (i25 (lessThanEqualsInteger i2 0) (delay (i26 1)) (delay 1))))))) ((\i0 -> (\i0 -> i13 (\i0 -> \i0 -> \i0 -> force (i29 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))) (force (i26 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2))) (force (i26 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (i24 i2)) (i23 i2)))) ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) ((\i0 -> force (i21 (lessThanEqualsInteger i1 0) (delay (force (force trace (appendString "ptryPositive: building with non positive: " (i8 (\i0 -> \i0 -> appendString (force (i23 (lessThanInteger i1 0) (delay "-") (delay ""))) ((\i0 -> (\i0 -> force (i25 (equalsInteger i2 0) (delay (i13 i1)) (delay ((\i0 -> appendString i1 (i14 i2)) (i4 i2))))) (remainderInteger (i23 i2) 10)) (quotientInteger (i22 i1) 10))) i1)) (delay error)))) (delay i1))) (multiplyInteger i3 i2))))) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 7) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 4)))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) (\i0 -> force (i13 (equalsInteger i1 0) (delay i2) (delay (force (i13 (equalsInteger i1 1) (delay i3) (delay (force (i13 (equalsInteger i1 2) (delay i4) (delay (force (i13 (equalsInteger i1 3) (delay i5) (delay (force (i13 (equalsInteger i1 4) (delay i6) (delay (force (i13 (equalsInteger i1 5) (delay i7) (delay (force (i13 (equalsInteger i1 6) (delay i8) (delay (force (i13 (equalsInteger i1 7) (delay i9) (delay (force (i13 (equalsInteger i1 8) (delay i10) (delay (force (i13 (equalsInteger i1 9) (delay i11) (delay error))))))))))))))))))))))))))))))) "0") "1") "2") "3") "4") "5") "6") "7") "8") "9") (\i0 -> force (i2 (lessThanEqualsInteger i1 (i3 1)) (delay (i3 i1)) (delay i1)))) (force ifThenElse)) (\i0 -> subtractInteger 0 i1))) +properFraction.-1/2 (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) ((\i0 -> i3 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> i10 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i4 i2)) (subtractInteger (multiplyInteger i4 i1) (multiplyInteger i2 i3)))))) ((\i0 -> \i0 -> i1 i3 i2) 1))) (i1 (\i0 -> \i0 -> (\i0 -> force (i31 (lessThanEqualsInteger 0 i3) (delay i1) (delay (addInteger i1 (force (i31 (equalsInteger (modInteger i3 i2) 0) (delay 0) (delay 1))))))) (divideInteger i2 i1)))) (i1 (i2 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2))) (\i0 -> \i0 -> force ((\i0 -> \i0 -> i31 i2 i1 (delay False)) (equalsInteger i2 0) (delay ((\i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> equalsInteger (multiplyInteger i1 i4) (multiplyInteger i2 i3)))) (i3 (i4 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2)))))))) (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> \i0 -> i1 i2 i3) (i30 i2)))) (\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> i8 ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) (i12 (multiplyInteger i3 i2)))))) (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i28 (equalsInteger i2 0) (delay 0) (delay (force (i28 (lessThanEqualsInteger i2 0) (delay (i29 1)) (delay 1))))))) (i4 i2 i1)))) (\i0 -> \i0 -> (\i0 -> (\i0 -> i5 (i6 i2 i1) (i7 i2 i1)) (i25 i2)) (i24 i2))) (i7 (\i0 -> \i0 -> \i0 -> force (i25 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))))) (\i0 -> \i0 -> force (i23 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2)))) (\i0 -> \i0 -> force (i22 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (\i0 -> force (i20 (lessThanEqualsInteger i1 0) (delay (force (i2 (appendString i3 (i4 i1)) (delay error)))) (delay i1)))) (force trace)) "ptryPositive: building with non positive: ") (i1 (\i0 -> \i0 -> appendString (force (i18 (lessThanInteger i1 0) (delay i4) (delay i5))) ((\i0 -> (\i0 -> force (i20 (equalsInteger i2 0) (delay (i8 i1)) (delay ((\i0 -> appendString i1 (i9 i2)) (i4 i2))))) (remainderInteger (i18 i2) 10)) (quotientInteger (i17 i1) 10))))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) "-") "") (\i0 -> force (i13 (equalsInteger i1 0) (delay i2) (delay (force (i13 (equalsInteger i1 1) (delay i3) (delay (force (i13 (equalsInteger i1 2) (delay i4) (delay (force (i13 (equalsInteger i1 3) (delay i5) (delay (force (i13 (equalsInteger i1 4) (delay i6) (delay (force (i13 (equalsInteger i1 5) (delay i7) (delay (force (i13 (equalsInteger i1 6) (delay i8) (delay (force (i13 (equalsInteger i1 7) (delay i9) (delay (force (i13 (equalsInteger i1 8) (delay i10) (delay (force (i13 (equalsInteger i1 9) (delay i11) (delay error))))))))))))))))))))))))))))))) "0") "1") "2") "3") "4") "5") "6") "7") "8") "9") (\i0 -> force (i2 (lessThanEqualsInteger i1 (i3 1)) (delay (i3 i1)) (delay i1)))) (force ifThenElse)) (\i0 -> subtractInteger 0 i1))) +properFraction.-3/2 (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) ((\i0 -> i3 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> i10 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i4 i2)) (subtractInteger (multiplyInteger i4 i1) (multiplyInteger i2 i3)))))) ((\i0 -> \i0 -> i1 i3 i2) 1))) (i1 (\i0 -> \i0 -> (\i0 -> force (i31 (lessThanEqualsInteger 0 i3) (delay i1) (delay (addInteger i1 (force (i31 (equalsInteger (modInteger i3 i2) 0) (delay 0) (delay 1))))))) (divideInteger i2 i1)))) (i1 (i2 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 3) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2))) (\i0 -> \i0 -> force ((\i0 -> \i0 -> i31 i2 i1 (delay False)) (equalsInteger i2 (i30 1)) (delay ((\i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> equalsInteger (multiplyInteger i1 i4) (multiplyInteger i2 i3)))) (i3 (i4 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2)))))))) (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> \i0 -> i1 i2 i3) (i30 i2)))) (\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> i8 ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) (i12 (multiplyInteger i3 i2)))))) (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i28 (equalsInteger i2 0) (delay 0) (delay (force (i28 (lessThanEqualsInteger i2 0) (delay (i29 1)) (delay 1))))))) (i4 i2 i1)))) (\i0 -> \i0 -> (\i0 -> (\i0 -> i5 (i6 i2 i1) (i7 i2 i1)) (i25 i2)) (i24 i2))) (i7 (\i0 -> \i0 -> \i0 -> force (i25 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))))) (\i0 -> \i0 -> force (i23 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2)))) (\i0 -> \i0 -> force (i22 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (\i0 -> force (i20 (lessThanEqualsInteger i1 0) (delay (force (i2 (appendString i3 (i4 i1)) (delay error)))) (delay i1)))) (force trace)) "ptryPositive: building with non positive: ") (i1 (\i0 -> \i0 -> appendString (force (i18 (lessThanInteger i1 0) (delay i4) (delay i5))) ((\i0 -> (\i0 -> force (i20 (equalsInteger i2 0) (delay (i8 i1)) (delay ((\i0 -> appendString i1 (i9 i2)) (i4 i2))))) (remainderInteger (i18 i2) 10)) (quotientInteger (i17 i1) 10))))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) "-") "") (\i0 -> force (i13 (equalsInteger i1 0) (delay i2) (delay (force (i13 (equalsInteger i1 1) (delay i3) (delay (force (i13 (equalsInteger i1 2) (delay i4) (delay (force (i13 (equalsInteger i1 3) (delay i5) (delay (force (i13 (equalsInteger i1 4) (delay i6) (delay (force (i13 (equalsInteger i1 5) (delay i7) (delay (force (i13 (equalsInteger i1 6) (delay i8) (delay (force (i13 (equalsInteger i1 7) (delay i9) (delay (force (i13 (equalsInteger i1 8) (delay i10) (delay (force (i13 (equalsInteger i1 9) (delay i11) (delay error))))))))))))))))))))))))))))))) "0") "1") "2") "3") "4") "5") "6") "7") "8") "9") (\i0 -> force (i2 (lessThanEqualsInteger i1 (i3 1)) (delay (i3 i1)) (delay i1)))) (force ifThenElse)) (\i0 -> subtractInteger 0 i1))) +properFraction.-4/3 (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) ((\i0 -> i3 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> i10 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i4 i2)) (subtractInteger (multiplyInteger i4 i1) (multiplyInteger i2 i3)))))) ((\i0 -> \i0 -> i1 i3 i2) 1))) (i1 (\i0 -> \i0 -> (\i0 -> force (i31 (lessThanEqualsInteger 0 i3) (delay i1) (delay (addInteger i1 (force (i31 (equalsInteger (modInteger i3 i2) 0) (delay 0) (delay 1))))))) (divideInteger i2 i1)))) (i1 (i2 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 4) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 3))) (\i0 -> \i0 -> force ((\i0 -> \i0 -> i31 i2 i1 (delay False)) (equalsInteger i2 (i30 1)) (delay ((\i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> equalsInteger (multiplyInteger i1 i4) (multiplyInteger i2 i3)))) (i3 (i4 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 3)))))))) (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> \i0 -> i1 i2 i3) (i30 i2)))) (\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> i8 ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) (i12 (multiplyInteger i3 i2)))))) (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i28 (equalsInteger i2 0) (delay 0) (delay (force (i28 (lessThanEqualsInteger i2 0) (delay (i29 1)) (delay 1))))))) (i4 i2 i1)))) (\i0 -> \i0 -> (\i0 -> (\i0 -> i5 (i6 i2 i1) (i7 i2 i1)) (i25 i2)) (i24 i2))) (i7 (\i0 -> \i0 -> \i0 -> force (i25 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))))) (\i0 -> \i0 -> force (i23 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2)))) (\i0 -> \i0 -> force (i22 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (\i0 -> force (i20 (lessThanEqualsInteger i1 0) (delay (force (i2 (appendString i3 (i4 i1)) (delay error)))) (delay i1)))) (force trace)) "ptryPositive: building with non positive: ") (i1 (\i0 -> \i0 -> appendString (force (i18 (lessThanInteger i1 0) (delay i4) (delay i5))) ((\i0 -> (\i0 -> force (i20 (equalsInteger i2 0) (delay (i8 i1)) (delay ((\i0 -> appendString i1 (i9 i2)) (i4 i2))))) (remainderInteger (i18 i2) 10)) (quotientInteger (i17 i1) 10))))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) "-") "") (\i0 -> force (i13 (equalsInteger i1 0) (delay i2) (delay (force (i13 (equalsInteger i1 1) (delay i3) (delay (force (i13 (equalsInteger i1 2) (delay i4) (delay (force (i13 (equalsInteger i1 3) (delay i5) (delay (force (i13 (equalsInteger i1 4) (delay i6) (delay (force (i13 (equalsInteger i1 5) (delay i7) (delay (force (i13 (equalsInteger i1 6) (delay i8) (delay (force (i13 (equalsInteger i1 7) (delay i9) (delay (force (i13 (equalsInteger i1 8) (delay i10) (delay (force (i13 (equalsInteger i1 9) (delay i11) (delay error))))))))))))))))))))))))))))))) "0") "1") "2") "3") "4") "5") "6") "7") "8") "9") (\i0 -> force (i2 (lessThanEqualsInteger i1 (i3 1)) (delay (i3 i1)) (delay i1)))) (force ifThenElse)) (\i0 -> subtractInteger 0 i1))) data.id.0.5 (program 1.0.0 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 2) 1)) data.id.2 (program 1.0.0 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2)) -data.id.11/3 (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i14 (equalsInteger i2 0) (delay 0) (delay (force (i14 (lessThanEqualsInteger i2 0) (delay (i13 1)) (delay 1))))))) ((\i0 -> (\i0 -> (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> \i0 -> force (i18 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))) (force (i15 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2))) (force (i15 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (i12 i2)) (i11 i2)))) ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) ((\i0 -> force (i10 (lessThanEqualsInteger i1 0) (delay (force (force trace "ptryPositive: building with non positive" (delay error)))) (delay i1))) (multiplyInteger i3 i2))))) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 11) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 3)) (\i0 -> force (i3 (lessThanEqualsInteger i1 (i2 1)) (delay (i2 i1)) (delay i1)))) (\i0 -> subtractInteger 0 i1)) (force ifThenElse))) -div by 0.1/0 (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i14 (equalsInteger i2 0) (delay 0) (delay (force (i14 (lessThanEqualsInteger i2 0) (delay (i13 1)) (delay 1))))))) ((\i0 -> (\i0 -> (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> \i0 -> force (i18 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))) (force (i15 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2))) (force (i15 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (i12 i2)) (i11 i2)))) ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) ((\i0 -> force (i10 (lessThanEqualsInteger i1 0) (delay (force (force trace "ptryPositive: building with non positive" (delay error)))) (delay i1))) (multiplyInteger i3 i2))))) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 0)) (\i0 -> force (i3 (lessThanEqualsInteger i1 (i2 1)) (delay (i2 i1)) (delay i1)))) (\i0 -> subtractInteger 0 i1)) (force ifThenElse))) -div by 0.recip 0 (program 1.0.0 ((\i0 -> i1 (\i0 -> \i0 -> (\i0 -> \i0 -> i1 i3 i2) (force (force ifThenElse (lessThanEqualsInteger i2 0) (delay (force (force trace "ptryPositive: building with non positive" (delay error)))) (delay i2))))) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 0))) -div by 0.1/(1-1) (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> i8 ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) ((\i0 -> force (i15 (lessThanEqualsInteger i1 0) (delay (force (force trace "ptryPositive: building with non positive" (delay error)))) (delay i1))) (multiplyInteger i3 i2))))) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> i7 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i4 i2)) (subtractInteger (multiplyInteger i4 i1) (multiplyInteger i2 i3)))))) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1))) (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i11 (equalsInteger i2 0) (delay 0) (delay (force (i11 (lessThanEqualsInteger i2 0) (delay (i12 1)) (delay 1))))))) (i4 i2 i1)))) (\i0 -> \i0 -> (\i0 -> (\i0 -> i5 (i7 i2 i1) (i8 i2 i1)) (i8 i2)) (i7 i2))) (i1 (\i0 -> \i0 -> \i0 -> force (i8 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) (\i0 -> \i0 -> force (i5 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2)))) (\i0 -> \i0 -> force (i4 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (\i0 -> force (i2 (lessThanEqualsInteger i1 (i3 1)) (delay (i3 i1)) (delay i1)))) (force ifThenElse)) (\i0 -> subtractInteger 0 i1))) \ No newline at end of file +data.id.11/3 (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i25 (equalsInteger i2 0) (delay 0) (delay (force (i25 (lessThanEqualsInteger i2 0) (delay (i26 1)) (delay 1))))))) ((\i0 -> (\i0 -> i13 (\i0 -> \i0 -> \i0 -> force (i29 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))) (force (i26 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2))) (force (i26 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (i24 i2)) (i23 i2)))) ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) ((\i0 -> force (i21 (lessThanEqualsInteger i1 0) (delay (force (force trace (appendString "ptryPositive: building with non positive: " (i8 (\i0 -> \i0 -> appendString (force (i23 (lessThanInteger i1 0) (delay "-") (delay ""))) ((\i0 -> (\i0 -> force (i25 (equalsInteger i2 0) (delay (i13 i1)) (delay ((\i0 -> appendString i1 (i14 i2)) (i4 i2))))) (remainderInteger (i23 i2) 10)) (quotientInteger (i22 i1) 10))) i1)) (delay error)))) (delay i1))) (multiplyInteger i3 i2))))) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 11) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 3)) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) (\i0 -> force (i13 (equalsInteger i1 0) (delay i2) (delay (force (i13 (equalsInteger i1 1) (delay i3) (delay (force (i13 (equalsInteger i1 2) (delay i4) (delay (force (i13 (equalsInteger i1 3) (delay i5) (delay (force (i13 (equalsInteger i1 4) (delay i6) (delay (force (i13 (equalsInteger i1 5) (delay i7) (delay (force (i13 (equalsInteger i1 6) (delay i8) (delay (force (i13 (equalsInteger i1 7) (delay i9) (delay (force (i13 (equalsInteger i1 8) (delay i10) (delay (force (i13 (equalsInteger i1 9) (delay i11) (delay error))))))))))))))))))))))))))))))) "0") "1") "2") "3") "4") "5") "6") "7") "8") "9") (\i0 -> force (i2 (lessThanEqualsInteger i1 (i3 1)) (delay (i3 i1)) (delay i1)))) (force ifThenElse)) (\i0 -> subtractInteger 0 i1))) +div by 0.1/0 (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i25 (equalsInteger i2 0) (delay 0) (delay (force (i25 (lessThanEqualsInteger i2 0) (delay (i26 1)) (delay 1))))))) ((\i0 -> (\i0 -> i13 (\i0 -> \i0 -> \i0 -> force (i29 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))) (force (i26 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2))) (force (i26 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (i24 i2)) (i23 i2)))) ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) ((\i0 -> force (i21 (lessThanEqualsInteger i1 0) (delay (force (force trace (appendString "ptryPositive: building with non positive: " (i8 (\i0 -> \i0 -> appendString (force (i23 (lessThanInteger i1 0) (delay "-") (delay ""))) ((\i0 -> (\i0 -> force (i25 (equalsInteger i2 0) (delay (i13 i1)) (delay ((\i0 -> appendString i1 (i14 i2)) (i4 i2))))) (remainderInteger (i23 i2) 10)) (quotientInteger (i22 i1) 10))) i1)) (delay error)))) (delay i1))) (multiplyInteger i3 i2))))) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 0)) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) (\i0 -> force (i13 (equalsInteger i1 0) (delay i2) (delay (force (i13 (equalsInteger i1 1) (delay i3) (delay (force (i13 (equalsInteger i1 2) (delay i4) (delay (force (i13 (equalsInteger i1 3) (delay i5) (delay (force (i13 (equalsInteger i1 4) (delay i6) (delay (force (i13 (equalsInteger i1 5) (delay i7) (delay (force (i13 (equalsInteger i1 6) (delay i8) (delay (force (i13 (equalsInteger i1 7) (delay i9) (delay (force (i13 (equalsInteger i1 8) (delay i10) (delay (force (i13 (equalsInteger i1 9) (delay i11) (delay error))))))))))))))))))))))))))))))) "0") "1") "2") "3") "4") "5") "6") "7") "8") "9") (\i0 -> force (i2 (lessThanEqualsInteger i1 (i3 1)) (delay (i3 i1)) (delay i1)))) (force ifThenElse)) (\i0 -> subtractInteger 0 i1))) +div by 0.recip 0 (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> \i0 -> i1 i3 i2) (force (i16 (lessThanEqualsInteger i2 0) (delay (force (force trace (appendString "ptryPositive: building with non positive: " ((\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> appendString (force (i18 (lessThanInteger i1 0) (delay "-") (delay ""))) ((\i0 -> (\i0 -> force (i20 (equalsInteger i2 0) (delay (i8 i1)) (delay ((\i0 -> appendString i1 (i9 i2)) (i4 i2))))) (remainderInteger (i18 i2) 10)) (quotientInteger (i17 i1) 10))) i2)) (delay error)))) (delay i2))))) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 0)) (\i0 -> force (i13 (equalsInteger i1 0) (delay i2) (delay (force (i13 (equalsInteger i1 1) (delay i3) (delay (force (i13 (equalsInteger i1 2) (delay i4) (delay (force (i13 (equalsInteger i1 3) (delay i5) (delay (force (i13 (equalsInteger i1 4) (delay i6) (delay (force (i13 (equalsInteger i1 5) (delay i7) (delay (force (i13 (equalsInteger i1 6) (delay i8) (delay (force (i13 (equalsInteger i1 7) (delay i9) (delay (force (i13 (equalsInteger i1 8) (delay i10) (delay (force (i13 (equalsInteger i1 9) (delay i11) (delay error))))))))))))))))))))))))))))))) "0") "1") "2") "3") "4") "5") "6") "7") "8") "9") (\i0 -> force (i2 (lessThanEqualsInteger i1 (i3 1)) (delay (i3 i1)) (delay i1)))) (force ifThenElse)) (\i0 -> subtractInteger 0 i1))) +div by 0.1/(1-1) (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> i19 ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) ((\i0 -> force (i26 (lessThanEqualsInteger i1 0) (delay (force (force trace (appendString "ptryPositive: building with non positive: " (i22 (\i0 -> \i0 -> appendString (force (i28 (lessThanInteger i1 0) (delay "-") (delay ""))) ((\i0 -> (\i0 -> force (i30 (equalsInteger i2 0) (delay (i12 i1)) (delay ((\i0 -> appendString i1 (i13 i2)) (i4 i2))))) (remainderInteger (i28 i2) 10)) (quotientInteger (i27 i1) 10))) i1)) (delay error)))) (delay i1))) (multiplyInteger i3 i2))))) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> i18 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i4 i2)) (subtractInteger (multiplyInteger i4 i1) (multiplyInteger i2 i3)))))) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1))) (\i0 -> force (i19 (equalsInteger i1 0) (delay i2) (delay (force (i19 (equalsInteger i1 1) (delay i3) (delay (force (i19 (equalsInteger i1 2) (delay i4) (delay (force (i19 (equalsInteger i1 3) (delay i5) (delay (force (i19 (equalsInteger i1 4) (delay i6) (delay (force (i19 (equalsInteger i1 5) (delay i7) (delay (force (i19 (equalsInteger i1 6) (delay i8) (delay (force (i19 (equalsInteger i1 7) (delay i9) (delay (force (i19 (equalsInteger i1 8) (delay i10) (delay (force (i19 (equalsInteger i1 9) (delay i11) (delay error))))))))))))))))))))))))))))))) "0") "1") "2") "3") "4") "5") "6") "7") "8") "9") (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i11 (equalsInteger i2 0) (delay 0) (delay (force (i11 (lessThanEqualsInteger i2 0) (delay (i12 1)) (delay 1))))))) (i4 i2 i1)))) (\i0 -> \i0 -> (\i0 -> (\i0 -> i5 (i7 i2 i1) (i8 i2 i1)) (i8 i2)) (i7 i2))) (i1 (\i0 -> \i0 -> \i0 -> force (i8 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) (\i0 -> \i0 -> force (i5 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2)))) (\i0 -> \i0 -> force (i4 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (\i0 -> force (i2 (lessThanEqualsInteger i1 (i3 1)) (delay (i3 i1)) (delay i1)))) (force ifThenElse)) (\i0 -> subtractInteger 0 i1))) \ No newline at end of file diff --git a/plutarch-test/goldens/show.bench.golden b/plutarch-test/goldens/show.bench.golden index 8843b7ee2..34ab9e3d7 100644 --- a/plutarch-test/goldens/show.bench.golden +++ b/plutarch-test/goldens/show.bench.golden @@ -35,4 +35,4 @@ pshowAndErr.nil {"exBudgetCPU":100,"exBudgetMemory":100,"scriptSizeBytes":21} pshowAndErr.1,2,3 {"exBudgetCPU":100,"exBudgetMemory":100,"scriptSizeBytes":24} pair.int-str {"exBudgetCPU":34865639,"exBudgetMemory":80705,"scriptSizeBytes":454} pair.int-list {"exBudgetCPU":42325700,"exBudgetMemory":93314,"scriptSizeBytes":434} -rational.1/2 {"exBudgetCPU":24862351,"exBudgetMemory":59194,"scriptSizeBytes":568} \ No newline at end of file +rational.1/2 {"exBudgetCPU":24862351,"exBudgetMemory":59194,"scriptSizeBytes":577} \ No newline at end of file diff --git a/plutarch-test/goldens/show.uplc.golden b/plutarch-test/goldens/show.uplc.golden index 400defe9d..80aee97d0 100644 --- a/plutarch-test/goldens/show.uplc.golden +++ b/plutarch-test/goldens/show.uplc.golden @@ -35,4 +35,4 @@ pshowAndErr.nil (program 1.0.0 ((\i0 -> indexByteString (force ifThenElse i1 i1 pshowAndErr.1,2,3 (program 1.0.0 ((\i0 -> indexByteString (force ifThenElse i1 i1 i1) 0) [1,2,3])) pair.int-str (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> appendString "PPair" (appendString i17 (appendString (i18 (\i0 -> \i0 -> appendString (force (i21 (lessThanInteger i1 0) (delay "-") (delay ""))) ((\i0 -> (\i0 -> force (i23 (equalsInteger i2 0) (delay (i8 i1)) (delay ((\i0 -> appendString i1 (i9 i2)) (i4 i2))))) (remainderInteger (i18 i2) 10)) (quotientInteger (i17 i1) 10))) i2) (appendString i17 (appendString i20 (appendString (decodeUtf8 (i18 (\i0 -> \i0 -> (\i0 -> (\i0 -> force (i23 (equalsInteger i1 0) (delay i3) (delay ((\i0 -> (\i0 -> i4 i2 i1) (sliceByteString 1 (subtractInteger i2 1) i4)) (indexByteString i3 0))))) (lengthOfByteString i2)) (\i0 -> \i0 -> force (i23 (equalsInteger i2 34) (delay (consByteString 92 (consByteString i2 (i4 i1)))) (delay (consByteString i2 (i4 i1)))))) (encodeUtf8 i1))) i20))))))) ((\i0 -> \i0 -> i1 i2 "hello") 42)) (\i0 -> force (i16 (equalsInteger i1 0) (delay i2) (delay (force (i16 (equalsInteger i1 1) (delay i3) (delay (force (i16 (equalsInteger i1 2) (delay i4) (delay (force (i16 (equalsInteger i1 3) (delay i5) (delay (force (i16 (equalsInteger i1 4) (delay i6) (delay (force (i16 (equalsInteger i1 5) (delay i7) (delay (force (i16 (equalsInteger i1 6) (delay i8) (delay (force (i16 (equalsInteger i1 7) (delay i9) (delay (force (i16 (equalsInteger i1 8) (delay i10) (delay (force (i16 (equalsInteger i1 9) (delay i11) (delay error))))))))))))))))))))))))))))))) "0") "1") "2") "3") "4") "5") "6") "7") "8") "9") (\i0 -> force (i5 (lessThanEqualsInteger i1 (i2 1)) (delay (i2 i1)) (delay i1)))) (\i0 -> subtractInteger 0 i1)) " ") (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) (force ifThenElse)) "\"")) pair.int-list (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> appendString "PPair" (appendString i4 (appendString (i6 i2) (appendString i4 (appendString "[" (appendString (i7 (\i0 -> \i0 -> force (i7 i1 (delay i11) (delay ((\i0 -> force (i8 i1 (delay (i9 (i27 i2))) (delay (appendString (i9 (i27 i2)) (appendString ", " (i3 (i28 i2))))))) (i27 i1))))) i1) "]"))))))) ((\i0 -> \i0 -> i1 i2 [1,2,3]) 42)) " ") (force (force chooseList))) (i1 (\i0 -> \i0 -> appendString (force (i18 (lessThanInteger i1 0) (delay i4) (delay i5))) ((\i0 -> (\i0 -> force (i20 (equalsInteger i2 0) (delay (i8 i1)) (delay ((\i0 -> appendString i1 (i9 i2)) (i4 i2))))) (remainderInteger (i18 i2) 10)) (quotientInteger (i17 i1) 10))))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) "-") "") (\i0 -> force (i13 (equalsInteger i1 0) (delay i2) (delay (force (i13 (equalsInteger i1 1) (delay i3) (delay (force (i13 (equalsInteger i1 2) (delay i4) (delay (force (i13 (equalsInteger i1 3) (delay i5) (delay (force (i13 (equalsInteger i1 4) (delay i6) (delay (force (i13 (equalsInteger i1 5) (delay i7) (delay (force (i13 (equalsInteger i1 6) (delay i8) (delay (force (i13 (equalsInteger i1 7) (delay i9) (delay (force (i13 (equalsInteger i1 8) (delay i10) (delay (force (i13 (equalsInteger i1 9) (delay i11) (delay error))))))))))))))))))))))))))))))) "0") "1") "2") "3") "4") "5") "6") "7") "8") "9") (\i0 -> force (i2 (lessThanEqualsInteger i1 (i3 1)) (delay (i3 i1)) (delay i1)))) (force ifThenElse)) (\i0 -> subtractInteger 0 i1)) (force headList)) (force tailList))) -rational.1/2 (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> appendString (i4 i2) (appendString "/" (i4 i1)))) ((\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i29 (equalsInteger i2 0) (delay 0) (delay (force (i29 (lessThanEqualsInteger i2 0) (delay (i28 1)) (delay 1))))))) ((\i0 -> (\i0 -> i27 (\i0 -> \i0 -> \i0 -> force (i33 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))) (force (i30 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2))) (force (i30 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (i27 i2)) (i26 i2)))) ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) ((\i0 -> force (i25 (lessThanEqualsInteger i1 0) (delay (force (force trace "ptryPositive: building with non positive" (delay error)))) (delay i1))) (multiplyInteger i3 i2))))) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2))) (i14 (\i0 -> \i0 -> appendString (force (i19 (lessThanInteger i1 0) (delay i3) (delay i4))) ((\i0 -> (\i0 -> force (i21 (equalsInteger i2 0) (delay (i7 i1)) (delay ((\i0 -> appendString i1 (i8 i2)) (i4 i2))))) (remainderInteger (i18 i2) 10)) (quotientInteger (i17 i1) 10))))) "-") "") (\i0 -> force (i15 (equalsInteger i1 0) (delay i2) (delay (force (i15 (equalsInteger i1 1) (delay i3) (delay (force (i15 (equalsInteger i1 2) (delay i4) (delay (force (i15 (equalsInteger i1 3) (delay i5) (delay (force (i15 (equalsInteger i1 4) (delay i6) (delay (force (i15 (equalsInteger i1 5) (delay i7) (delay (force (i15 (equalsInteger i1 6) (delay i8) (delay (force (i15 (equalsInteger i1 7) (delay i9) (delay (force (i15 (equalsInteger i1 8) (delay i10) (delay (force (i15 (equalsInteger i1 9) (delay i11) (delay error))))))))))))))))))))))))))))))) "0") "1") "2") "3") "4") "5") "6") "7") "8") "9") (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) (\i0 -> force (i3 (lessThanEqualsInteger i1 (i2 1)) (delay (i2 i1)) (delay i1)))) (\i0 -> subtractInteger 0 i1)) (force ifThenElse))) \ No newline at end of file +rational.1/2 (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> appendString (i4 i2) (appendString "/" (i4 i1)))) ((\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> (\i0 -> (\i0 -> i1 (\i0 -> \i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (multiplyInteger i2 (divideInteger i4 i3))) (multiplyInteger i1 (divideInteger i4 i2))) (force (i28 (equalsInteger i2 0) (delay 0) (delay (force (i28 (lessThanEqualsInteger i2 0) (delay (i29 1)) (delay 1))))))) ((\i0 -> (\i0 -> i14 (\i0 -> \i0 -> \i0 -> force (i32 (equalsInteger i1 0) (delay i2) (delay (i3 i1 (modInteger i2 i1))))) (force (i29 (lessThanEqualsInteger i2 i1) (delay i1) (delay i2))) (force (i29 (lessThanEqualsInteger i2 i1) (delay i2) (delay i1)))) (i27 i2)) (i26 i2)))) ((\i0 -> \i0 -> i1 i2 i3) (multiplyInteger i5 i2))) ((\i0 -> force (i24 (lessThanEqualsInteger i1 0) (delay (force (force trace (appendString "ptryPositive: building with non positive: " (i8 i1)) (delay error)))) (delay i1))) (multiplyInteger i3 i2))))) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2))) (i1 (\i0 -> \i0 -> appendString (force (i18 (lessThanInteger i1 0) (delay i4) (delay i5))) ((\i0 -> (\i0 -> force (i20 (equalsInteger i2 0) (delay (i8 i1)) (delay ((\i0 -> appendString i1 (i9 i2)) (i4 i2))))) (remainderInteger (i18 i2) 10)) (quotientInteger (i17 i1) 10))))) (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1)))) "-") "") (\i0 -> force (i13 (equalsInteger i1 0) (delay i2) (delay (force (i13 (equalsInteger i1 1) (delay i3) (delay (force (i13 (equalsInteger i1 2) (delay i4) (delay (force (i13 (equalsInteger i1 3) (delay i5) (delay (force (i13 (equalsInteger i1 4) (delay i6) (delay (force (i13 (equalsInteger i1 5) (delay i7) (delay (force (i13 (equalsInteger i1 6) (delay i8) (delay (force (i13 (equalsInteger i1 7) (delay i9) (delay (force (i13 (equalsInteger i1 8) (delay i10) (delay (force (i13 (equalsInteger i1 9) (delay i11) (delay error))))))))))))))))))))))))))))))) "0") "1") "2") "3") "4") "5") "6") "7") "8") "9") (\i0 -> force (i2 (lessThanEqualsInteger i1 (i3 1)) (delay (i3 i1)) (delay i1)))) (force ifThenElse)) (\i0 -> subtractInteger 0 i1))) \ No newline at end of file diff --git a/plutarch-test/plutarch-test.cabal b/plutarch-test/plutarch-test.cabal index c9f5bbc1e..056283d21 100644 --- a/plutarch-test/plutarch-test.cabal +++ b/plutarch-test/plutarch-test.cabal @@ -151,6 +151,7 @@ executable plutarch-test Plutarch.Extra.IntervalSpec Plutarch.Extra.ListSpec Plutarch.Extra.MaybeSpec + Plutarch.Extra.OrdSpec Plutarch.FieldSpec Plutarch.IntegerSpec Plutarch.LiftSpec diff --git a/plutarch-test/tests/Plutarch/Extra/ListSpec.hs b/plutarch-test/tests/Plutarch/Extra/ListSpec.hs index 78be1e786..21583ac55 100644 --- a/plutarch-test/tests/Plutarch/Extra/ListSpec.hs +++ b/plutarch-test/tests/Plutarch/Extra/ListSpec.hs @@ -1,10 +1,14 @@ module Plutarch.Extra.ListSpec (spec) where -import Plutarch.Extra.List (pcheckSorted, preverse) +import Plutarch.Extra.List (pcheckSorted, pfindJust, plookupAssoc, pmapMaybe, preplicate, preverse) +import Plutarch.Extra.Maybe (pjust, pnothing) import Plutarch.Prelude +import Data.Maybe (mapMaybe) import Hedgehog (Property) +import qualified Hedgehog.Gen as Gen import Hedgehog.Internal.Property (propertyTest) +import qualified Hedgehog.Range as Range import Plutarch.Test import Plutarch.Test.Property import Plutarch.Test.Property.Gen (genInteger, genList) @@ -15,8 +19,10 @@ spec :: Spec spec = do describe "extra.listutils" $ do describe "properties" $ do - describe "reverse" $ do - it "plutarch level reversing behaves like haskell level reversing" . hedgehog . propertyTest $ prop_preverseEquiv + it "plutarch level reversing behaves like haskell level reversing" . hedgehog . propertyTest $ prop_preverseEquiv + it "plutarch level mapMaybe behaves like haskell level mapMaybe" . hedgehog . propertyTest $ prop_pmapMaybe + it "plutarch level replicate behaves like haskell level preplicate" . hedgehog . propertyTest $ prop_preplicate + it "plutarch level findJust behaves like haskell level findJust" . hedgehog . propertyTest $ prop_pfindJust pgoldenSpec $ do "reverse" @\ do "reverse_[1..5]" @| preverse # marshal [1 .. 5 :: Integer] @@ -24,6 +30,51 @@ spec = do "[1..10]" @| pcheckSorted # marshal [1 .. 10 :: Integer] @-> passert "reverse_[1..10]" @| (pnot #$ pcheckSorted #$ marshal $ reverse [1 .. 10 :: Integer]) @-> passert "reverse_[]" @| preverse # marshal ([] :: [Integer]) + "pmapMaybe" @\ do + "mapMaybe_[1..5]" @| pmapMaybe # pjust # marshal [1 .. 5 :: Integer] + "mapMaybe_[]" @| pmapMaybe # pjust # marshal ([] :: [Integer]) + "mapMaybe_[1..5]_Nothing" + @| (0 #== (plength #$ pmapMaybe # plam (const $ pcon PNothing) # marshal [1 .. 5 :: Integer])) @-> passert + "preplicate" @\ do + "preplicate_5_0" + @| (5 #== (plength #$ preplicate @PBuiltinList # marshal (5 :: Integer) # marshal (0 :: Integer))) @-> passert + "preplicate_0_0" + @| (0 #== (plength #$ preplicate @PBuiltinList # marshal (0 :: Integer) # marshal (0 :: Integer))) @-> passert + "pfindJust" @\ do + "pfindJust_2_[1..10]" + @| (pjust # 4 #== pfindJust # plam (\x -> pif (x #== 2) (pjust #$ x + 2) pnothing) # marshal [1 .. 10 :: Integer]) @-> passert + "pfindJust_20_[1..10]" + @| (pnothing #== pfindJust # plam (\x -> pif (x #== 20) (pjust # x) pnothing) # marshal [1 .. 10 :: Integer]) @-> passert + "pfindJust_[]" + @| (pnothing #== pfindJust # plam (\x -> pjust # x) # (pnil :: Term s (PBuiltinList PInteger))) @-> passert + "plookupAssoc" @\ do + "plookupAssoc_3_[(1..10, 1..10)]" + @| ( pjust # 8 + #== plookupAssoc + # (plam $ flip pmatch \(PPair k _) -> k) + # (plam $ flip pmatch \(PPair _ v) -> v) + # 3 + # (marshal $ zip [1 .. 10 :: Integer] $ reverse [1 .. 10 :: Integer]) + ) + @-> passert + "plookupAssoc_20_[(1..10, 1..10)]" + @| ( pnothing + #== plookupAssoc + # (plam $ flip pmatch \(PPair k _) -> k) + # (plam $ flip pmatch \(PPair _ v) -> v) + # 20 + # (marshal $ zip [1 .. 10 :: Integer] $ reverse [1 .. 10 :: Integer]) + ) + @-> passert + "plookupAssoc_[]" + @| ( pnothing + #== plookupAssoc + # (plam $ flip pmatch \(PPair k _) -> k) + # (plam $ flip pmatch \(PPair _ v) -> v) + # 20 + # (pnil :: Term s (PList (PPair PInteger PInteger))) + ) + @-> passert -- plutarch level reversing behaves like haskell level reversing prop_preverseEquiv :: Property @@ -34,3 +85,47 @@ prop_preverseEquiv = do (reverse :: [Integer] -> [Integer]) preverse (genList genInteger :* Nil) + +prop_pmapMaybe :: Property +prop_pmapMaybe = do + prop_haskEquiv + @( 'OnPEq) + @( 'TotalFun) + (mapMaybe hcond :: [Integer] -> [Integer]) + (pmapMaybe # pcond) + (genList genInteger :* Nil) + where + pcond = plam \x -> + pif + (x #< 5) + (pcon PNothing) + (pcon . PJust $ x + 10) + hcond x = if x < 5 then Nothing else Just $ x + 10 + +prop_preplicate :: Property +prop_preplicate = do + prop_haskEquiv + @( 'OnPEq) + @( 'TotalFun) + (replicate . fromInteger :: Integer -> Integer -> [Integer]) + preplicate + (manageable :* genInteger :* Nil) + where + manageable = Gen.integral (Range.linear 0 1_000) + +prop_pfindJust :: Property +prop_pfindJust = do + prop_haskEquiv + @( 'OnPEq) + @( 'TotalFun) + (findJust hcond :: [Integer] -> Maybe Integer) + (pfindJust # pcond) + (genList genInteger :* Nil) + where + findJust f (x : xs) = + case f x of + Nothing -> findJust f xs + Just v -> Just v + findJust _ [] = Nothing + pcond = plam \x -> pif (x #< 5) (pnothing) (pjust # 300) + hcond x = if x < 5 then Nothing else Just 300 diff --git a/plutarch-test/tests/Plutarch/Extra/OrdSpec.hs b/plutarch-test/tests/Plutarch/Extra/OrdSpec.hs new file mode 100644 index 000000000..ba8de4a59 --- /dev/null +++ b/plutarch-test/tests/Plutarch/Extra/OrdSpec.hs @@ -0,0 +1,152 @@ +module Plutarch.Extra.OrdSpec (spec) where + +import Plutarch.Extra.Maybe (pjust, pnothing) +import Plutarch.Extra.Ord +import Plutarch.Prelude + +import Data.List (nub, sort, sortBy) +import Hedgehog (Property) +import Hedgehog.Internal.Property (propertyTest) +import Plutarch.Test +import Plutarch.Test.Property +import Plutarch.Test.Property.Gen (genInteger, genList) +import Test.Hspec (Spec, describe, it) +import Test.Hspec.Hedgehog (hedgehog) + +spec :: Spec +spec = do + describe "extra.ordutils" $ do + describe "properties" $ do + it "plutarch level sort behaves like haskell level sort" . hedgehog . propertyTest $ prop_psortEquiv + it "plutarch level sortBy behaves like haskell level sortBy" . hedgehog . propertyTest $ prop_psortByEquiv + it "plutarch level nub, sort behaves like haskell level nub, sort" . hedgehog . propertyTest $ prop_pnubSortEquiv + it "plutarch level merge behaves like haskell level merge" . hedgehog . propertyTest $ prop_ptryMergeEquiv + it "plutarch level allUnique behaves like haskell level allUnique" . hedgehog . propertyTest $ prop_pallUnique + pgoldenSpec $ do + "psort" @\ do + "psort_[5..1]" @| psort # (marshal $ reverse [1 .. 5 :: Integer]) #== marshal [1 .. 5 :: Integer] @-> passert + "psort_[1..5]" @| psort # (marshal $ reverse [1 .. 5 :: Integer]) #== marshal [1 .. 5 :: Integer] @-> passert + "psort_[3,2,5,4,1]" @| psort # (marshal $ [3, 2, 5, 4, 1 :: Integer]) #== marshal [1 .. 5 :: Integer] @-> passert + "psort_[]" @| psort # (marshal ([] :: [Integer])) #== marshal ([] :: [Integer]) @-> passert + "psortBy" @\ do + "psortBy_preverseComparator_[1..5]" + @| ( psortBy + # (preverseComparator # pfromOrd) + # (marshal [1 .. 5 :: Integer]) + #== (marshal $ reverse [1 .. 5 :: Integer]) + ) + @-> passert + "pnubSort" @\ do + "pnubSort_[3,2,5,4,1,2,4,2,5,3]" + @| pnubSort # (marshal $ [3, 2, 5, 4, 1, 2, 4, 2, 5, 3 :: Integer]) #== marshal [1 .. 5 :: Integer] @-> passert + "pnubSort_[]" @| pnubSort # (marshal ([] :: [Integer])) #== marshal ([] :: [Integer]) @-> passert + "pnubSortBy" @\ do + "pnubSortBy_preverseComparator_[3,2,5,4,1,2,4,2,5,3]" + @| ( pnubSortBy + # (preverseComparator # pfromOrd) + # (marshal [3, 2, 5, 4, 1, 2, 4, 2, 5, 3 :: Integer]) + #== (marshal $ reverse [1 .. 5 :: Integer]) + ) + @-> passert + "pallUnique" @\ do + "pallUnique_[1,2,3,4]" + @| pallUnique # (marshal [1, 2, 3, 4 :: Integer]) + #== (pjust #$ pconstant True) @-> passert + "pallUnique_[1,1,2,3]" + @| pallUnique # (marshal [1, 1, 2, 3 :: Integer]) + #== (pjust #$ pconstant False) @-> passert + "pallUnique_[1,3,2,3]" + @| pallUnique # (marshal [1, 3, 2, 3 :: Integer]) + #== pnothing @-> passert + "pallUnique_[]" + @| pallUnique # (marshal ([] :: [Integer])) + #== (pjust #$ pconstant True) @-> passert + "ptryMerge" @\ do + "ptryMerge_[1,3,5,7]_[2,4,6,8]" + @| ptryMerge + # (marshal ([x | x <- [1 .. 8], odd x] :: [Integer])) + # (marshal ([x | x <- [1 .. 8], even x] :: [Integer])) + #== (marshal ([1 .. 8] :: [Integer])) @-> passert + "ptryMerge_[1,3,5,7]_[8,6,4,2]" + @| ptryMerge + # (marshal ([x | x <- [1 .. 8], odd x] :: [Integer])) + # (marshal (reverse [x | x <- [1 .. 8], even x] :: [Integer])) @-> pfails + "ptryMerge_[7,5,3,1]_[2,4,6,8]" + @| ptryMerge + # (marshal (reverse [x | x <- [1 .. 8], odd x] :: [Integer])) + # (marshal ([x | x <- [1 .. 8], even x] :: [Integer])) @-> pfails + "ptryMerge_[1..8]_[]" + @| ptryMerge + # (marshal ([1 .. 8] :: [Integer])) + # (marshal ([] :: [Integer])) + #== (marshal ([1 .. 8] :: [Integer])) @-> passert + "ptryMerge_[]_[]" + @| ptryMerge + # (marshal ([] :: [Integer])) + # (marshal ([] :: [Integer])) + #== (marshal ([] :: [Integer])) @-> passert + +mergeBy :: (a -> a -> Ordering) -> [a] -> [a] -> [a] +mergeBy _ xs [] = xs +mergeBy _ [] ys = ys +mergeBy f (x : xs) (y : ys) + | f x y /= GT = x : mergeBy f xs (y : ys) + | otherwise = y : mergeBy f (x : xs) ys + +merge :: Ord a => [a] -> [a] -> [a] +merge = mergeBy compare + +prop_psortEquiv :: Property +prop_psortEquiv = do + prop_haskEquiv + @( 'OnPEq) + @( 'TotalFun) + (sort :: [Integer] -> [Integer]) + psort + (genList genInteger :* Nil) + +prop_psortByEquiv :: Property +prop_psortByEquiv = do + prop_haskEquiv + @( 'OnPEq) + @( 'TotalFun) + (sortBy (\x y -> reverseComp $ compare x y) :: [Integer] -> [Integer]) + (psortBy # pcond) + (genList genInteger :* Nil) + where + reverseComp LT = GT + reverseComp GT = LT + reverseComp EQ = EQ + pcond = preverseComparator # pfromOrd + +prop_ptryMergeEquiv :: Property +prop_ptryMergeEquiv = do + prop_haskEquiv + @( 'OnPEq) + @( 'TotalFun) + ((\x y -> merge (sort x) (sort y)) :: [Integer] -> [Integer] -> [Integer]) + (plam $ \x y -> ptryMerge # (psort # x) # (psort # y)) + (genList genInteger :* genList genInteger :* Nil) + +prop_pnubSortEquiv :: Property +prop_pnubSortEquiv = do + prop_haskEquiv + @( 'OnPEq) + @( 'TotalFun) + ((sort . nub) :: [Integer] -> [Integer]) + pnubSort + (genList genInteger :* Nil) + +prop_pallUnique :: Property +prop_pallUnique = do + prop_haskEquiv + @( 'OnPEq) + @( 'TotalFun) + (hallUnique :: [Integer] -> Maybe Bool) + pallUnique + (genList genInteger :* Nil) + where + hallUnique x = + if x == sort x + then Just $ length x == length (nub x) + else Nothing