From 8a5973ef3ce32d2e72037ce5db037513954e3782 Mon Sep 17 00:00:00 2001 From: chase <44284917+TotallyNotChase@users.noreply.github.com> Date: Tue, 12 Jul 2022 21:15:06 +0530 Subject: [PATCH] Use `PPositive` rather than `PNonZero` for `PRational` --- Plutarch/NonZero.hs | 78 ------------------ Plutarch/Positive.hs | 79 +++++++++++++++++++ Plutarch/Rational.hs | 16 ++-- plutarch-test/goldens/data-verif.bench.golden | 10 +-- plutarch-test/goldens/data-verif.uplc.golden | 10 +-- plutarch-test/goldens/rational.bench.golden | 42 +++++----- plutarch-test/goldens/rational.uplc.golden | 42 +++++----- plutarch-test/goldens/show.bench.golden | 2 +- plutarch-test/goldens/show.uplc.golden | 2 +- plutarch.cabal | 2 +- 10 files changed, 142 insertions(+), 141 deletions(-) delete mode 100644 Plutarch/NonZero.hs create mode 100644 Plutarch/Positive.hs diff --git a/Plutarch/NonZero.hs b/Plutarch/NonZero.hs deleted file mode 100644 index c0d8944f2..000000000 --- a/Plutarch/NonZero.hs +++ /dev/null @@ -1,78 +0,0 @@ -{-# LANGUAGE FlexibleInstances #-} -{-# LANGUAGE UndecidableInstances #-} - -module Plutarch.NonZero (PNonZero, pnonZero, ptryNonZero) where - -import Data.Functor.Const (Const) -import GHC.Generics (Generic) - -import Plutarch.Bool (PEq, POrd, pif, (#==)) -import Plutarch.Builtin (PAsData, PData, PIsData, pdata) -import Plutarch.Integer (PInteger, PIntegral) - -import Plutarch.Maybe (PMaybe (PJust, PNothing)) - -import Plutarch ( - DerivePlutusType (DPTStrat), - PlutusType, - PlutusTypeNewtype, - Term, - TermCont (runTermCont), - pcon, - phoistAcyclic, - plam, - plet, - pthrow, - pto, - (#), - (#$), - type (:-->), - ) -import Plutarch.Num (PNum (pfromInteger, (#-))) -import Plutarch.Show (PShow) -import Plutarch.TermCont (tcont) -import Plutarch.Trace (ptraceError) -import Plutarch.TryFrom (PTryFrom (PTryFromExcess, ptryFrom'), ptryFrom) - -newtype PNonZero s = PNonZero (Term s PInteger) - deriving stock (Generic) - deriving anyclass (PlutusType, PIsData, PEq, POrd, PIntegral, PShow) -instance DerivePlutusType PNonZero where type DPTStrat _ = PlutusTypeNewtype - -instance PNum PNonZero where - x #- y = ptryNonZero #$ pto x #- pto y - - pfromInteger 0 = pthrow "pnonZero.pfromInteger: encountered 0" - pfromInteger x = pcon $ PNonZero $ pfromInteger x - -instance PTryFrom PInteger PNonZero where - type PTryFromExcess PInteger PNonZero = Const () - ptryFrom' opq = runTermCont $ pure (ptryNonZero # opq, ()) - -newtype Flip f a b = Flip (f b a) deriving stock (Generic) - -instance PTryFrom PData (PAsData PNonZero) where - type PTryFromExcess PData (PAsData PNonZero) = Flip Term PNonZero - ptryFrom' opq = runTermCont $ do - (_, i) <- tcont $ ptryFrom @(PAsData PInteger) opq - res <- tcont . plet $ ptryNonZero # i - resData <- tcont . plet $ pdata res - pure (resData, res) - --- | Build a 'PNonZero' from a 'PInteger'. Yields 'PNothing' if argument is zero. -pnonZero :: Term s (PInteger :--> PMaybe PNonZero) -pnonZero = phoistAcyclic $ - plam $ \i -> - pif - (i #== 0) - (pcon PNothing) - $ pcon . PJust . pcon $ PNonZero i - --- | Partial version of 'pnonZero'. Errors if argument is zero. -ptryNonZero :: Term s (PInteger :--> PNonZero) -ptryNonZero = phoistAcyclic $ - plam $ \i -> - pif - (i #== 0) - (ptraceError "pnonZero: building with 0") - $ pcon $ PNonZero i diff --git a/Plutarch/Positive.hs b/Plutarch/Positive.hs new file mode 100644 index 000000000..ceb587c92 --- /dev/null +++ b/Plutarch/Positive.hs @@ -0,0 +1,79 @@ +{-# LANGUAGE FlexibleInstances #-} +{-# LANGUAGE UndecidableInstances #-} + +module Plutarch.Positive (PPositive, ppositive, ptryPositive) where + +import Data.Functor.Const (Const) +import GHC.Generics (Generic) + +import Plutarch.Bool (PEq, POrd, pif, (#<=)) +import Plutarch.Builtin (PAsData, PData, PIsData, pdata) +import Plutarch.Integer (PInteger, PIntegral) + +import Plutarch.Maybe (PMaybe (PJust, PNothing)) + +import Plutarch ( + DerivePlutusType (DPTStrat), + PlutusType, + PlutusTypeNewtype, + Term, + TermCont (runTermCont), + pcon, + phoistAcyclic, + plam, + plet, + pthrow, + pto, + (#), + (#$), + type (:-->), + ) +import Plutarch.Num (PNum (pfromInteger, (#-))) +import Plutarch.Show (PShow) +import Plutarch.TermCont (tcont) +import Plutarch.Trace (ptraceError) +import Plutarch.TryFrom (PTryFrom (PTryFromExcess, ptryFrom'), ptryFrom) + +newtype PPositive s = PPositive (Term s PInteger) + deriving stock (Generic) + deriving anyclass (PlutusType, PIsData, PEq, POrd, PIntegral, PShow) +instance DerivePlutusType PPositive where type DPTStrat _ = PlutusTypeNewtype + +instance PNum PPositive where + x #- y = ptryPositive #$ pto x #- pto y + + pfromInteger x + | x <= 0 = pthrow "PPositive.pfromInteger: encountered non positive" + | otherwise = pcon $ PPositive $ pfromInteger x + +instance PTryFrom PInteger PPositive where + type PTryFromExcess PInteger PPositive = Const () + ptryFrom' opq = runTermCont $ pure (ptryPositive # opq, ()) + +newtype Flip f a b = Flip (f b a) deriving stock (Generic) + +instance PTryFrom PData (PAsData PPositive) where + type PTryFromExcess PData (PAsData PPositive) = Flip Term PPositive + ptryFrom' opq = runTermCont $ do + (_, i) <- tcont $ ptryFrom @(PAsData PInteger) opq + res <- tcont . plet $ ptryPositive # i + resData <- tcont . plet $ pdata res + pure (resData, res) + +-- | Build a 'PPositive' from a 'PInteger'. Yields 'PNothing' if argument is zero. +ppositive :: Term s (PInteger :--> PMaybe PPositive) +ppositive = phoistAcyclic $ + plam $ \i -> + pif + (i #<= 0) + (pcon PNothing) + $ pcon . PJust . pcon $ PPositive i + +-- | Partial version of 'PPositive'. Errors if argument is zero. +ptryPositive :: Term s (PInteger :--> PPositive) +ptryPositive = phoistAcyclic $ + plam $ \i -> + pif + (i #<= 0) + (ptraceError "ptryPositive: building with non positive") + $ pcon $ PPositive i diff --git a/Plutarch/Rational.hs b/Plutarch/Rational.hs index 21d16594d..c977a5e86 100644 --- a/Plutarch/Rational.hs +++ b/Plutarch/Rational.hs @@ -50,9 +50,9 @@ import Plutarch.Builtin ( import Plutarch.Integer (PInteger, pdiv, pmod) import Plutarch.Lift (pconstant) import Plutarch.List (pcons, phead, plength, pnil, ptail) -import Plutarch.NonZero (PNonZero, ptryNonZero) import Plutarch.Num (PNum, pabs, pfromInteger, pnegate, psignum, (#*), (#+), (#-)) import Plutarch.Pair (PPair (PPair)) +import Plutarch.Positive (PPositive, ptryPositive) import Plutarch.Show (PShow, pshow, pshow') import Plutarch.TermCont (tcont, unTermCont) import Plutarch.Trace (ptraceError) @@ -65,7 +65,7 @@ class PFractional (a :: PType) where pfromRational :: Term s (PRational :--> a) data PRational s - = PRational (Term s PInteger) (Term s PNonZero) + = PRational (Term s PInteger) (Term s PPositive) deriving stock (Generic) deriving anyclass (PlutusType, PEq) @@ -109,14 +109,14 @@ instance PIsData PRational where newtype Flip f a b = Flip (f b a) deriving stock (Generic) --- | NOTE: This instance produces a verified 'PNonZero' as the excess output. +-- | NOTE: This instance produces a verified 'PPositive' as the excess output. instance PTryFrom PData (PAsData PRational) where - type PTryFromExcess PData (PAsData PRational) = Flip Term PNonZero + type PTryFromExcess PData (PAsData PRational) = Flip Term PPositive ptryFrom' opq = runTermCont $ do (_, ld) <- tcont $ ptryFrom @(PAsData (PBuiltinList PData)) opq tcont $ \f -> pif (plength # ld #== 2) (f ()) (ptraceError "ptryFrom(PRational): data list length should be 2") (_, denm) <- tcont $ ptryFrom @(PAsData PInteger) $ phead #$ ptail # ld - res <- tcont . plet $ ptryNonZero # denm + res <- tcont . plet $ ptryPositive # denm pure (punsafeCoerce opq, res) instance POrd PRational where @@ -217,14 +217,14 @@ instance PFractional PRational where phoistAcyclic $ plam $ \x -> pmatch x $ \(PRational xn xd) -> - pcon $ PRational (pto xd) $ ptryNonZero # xn + pcon $ PRational (pto xd) $ ptryPositive # xn x' #/ y' = phoistAcyclic ( plam $ \x y -> unTermCont $ do PRational xn xd <- tcont $ pmatch x PRational yn yd <- tcont $ pmatch y - denm <- tcont . plet $ ptryNonZero #$ pto xd * yn + denm <- tcont . plet $ ptryPositive #$ pto xd * yn pure $ preduce #$ pcon $ PRational (xn * pto yd) denm ) # x' @@ -267,7 +267,7 @@ pmax = phoistAcyclic $ plam $ \a b -> pif (a #<= b) b a pnumerator :: Term s (PRational :--> PInteger) pnumerator = phoistAcyclic $ plam $ \x -> pmatch x $ \(PRational n _) -> n -pdenominator :: Term s (PRational :--> PNonZero) +pdenominator :: Term s (PRational :--> PPositive) pdenominator = phoistAcyclic $ plam $ \x -> pmatch x $ \(PRational _ d) -> d pfromInteger :: Term s (PInteger :--> PRational) diff --git a/plutarch-test/goldens/data-verif.bench.golden b/plutarch-test/goldens/data-verif.bench.golden index 11377ff09..2be87d191 100644 --- a/plutarch-test/goldens/data-verif.bench.golden +++ b/plutarch-test/goldens/data-verif.bench.golden @@ -4,13 +4,13 @@ erroneous.A { test := Integer, test2 := Integer } /= { test := String, test2 := erroneous.Map Int String /= Map Int Int {"exBudgetCPU":733650,"exBudgetMemory":548,"scriptSizeBytes":165} erroneous.PDataSum constr 2 {"exBudgetCPU":700994,"exBudgetMemory":230,"scriptSizeBytes":197} erroneous.PDataSum wrong record type {"exBudgetCPU":990483,"exBudgetMemory":232,"scriptSizeBytes":256} -erroneous.[ByteString] (with length == 2) /= PRational {"exBudgetCPU":1656457,"exBudgetMemory":554,"scriptSizeBytes":231} -erroneous.[Integer] (with length == 0) /= PRational {"exBudgetCPU":761999,"exBudgetMemory":230,"scriptSizeBytes":193} -erroneous.[Integer] (with length == 3) /= PRational {"exBudgetCPU":2227517,"exBudgetMemory":524,"scriptSizeBytes":239} -erroneous.[Integer] (with length == 2, with 0 denominator) /= PRational {"exBudgetCPU":2156288,"exBudgetMemory":524,"scriptSizeBytes":225} +erroneous.[ByteString] (with length == 2) /= PRational {"exBudgetCPU":1656457,"exBudgetMemory":554,"scriptSizeBytes":246} +erroneous.[Integer] (with length == 0) /= PRational {"exBudgetCPU":761999,"exBudgetMemory":230,"scriptSizeBytes":208} +erroneous.[Integer] (with length == 3) /= PRational {"exBudgetCPU":2227517,"exBudgetMemory":524,"scriptSizeBytes":254} +erroneous.[Integer] (with length == 2, with 0 denominator) /= PRational {"exBudgetCPU":2152752,"exBudgetMemory":524,"scriptSizeBytes":240} 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":9654221,"exBudgetMemory":28350,"scriptSizeBytes":385} +working.[Integer] (with length == 2) == PRational {"exBudgetCPU":9650685,"exBudgetMemory":28350,"scriptSizeBytes":400} working.A { test := Integer, test2 := Integer } == { test := Integer, test2 := Integer } {"exBudgetCPU":2950183,"exBudgetMemory":9876,"scriptSizeBytes":122} working.A { test := Integer, test2 := Integer } == [Integer] {"exBudgetCPU":2950183,"exBudgetMemory":9876,"scriptSizeBytes":122} working.A { test := String, test2 := Integer } == { test := String, test2 := Integer } {"exBudgetCPU":3007046,"exBudgetMemory":10176,"scriptSizeBytes":128} diff --git a/plutarch-test/goldens/data-verif.uplc.golden b/plutarch-test/goldens/data-verif.uplc.golden index 19d330b46..b4eef5ef1 100644 --- a/plutarch-test/goldens/data-verif.uplc.golden +++ b/plutarch-test/goldens/data-verif.uplc.golden @@ -4,13 +4,13 @@ erroneous.A { test := Integer, test2 := Integer } /= { test := String, test2 := erroneous.Map Int String /= Map Int Int (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> mapData (i6 (mkPairData (bData i5) (iData 42)) (i6 (mkPairData (bData i7) (iData 41)) i8))) ((\i0 -> (\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> force (force (force chooseList) i1 (delay i10) (delay (i8 (i3 (force headList i1)) (i2 (force tailList i1))))))) (\i0 -> (\i0 -> (\i0 -> mkPairData (i6 i3) (i5 i3)) (unIData (i4 i2))) (unIData (i4 i1))) i1)) (unMapData (mapData (i4 (mkPairData (bData i3) (iData 42)) (i4 (mkPairData (bData i5) (iData 41)) i6))))) (force (force sndPair))) (force (force fstPair))) #666f6f) (force mkCons)) #626172) [ ])) 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 "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))) "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 -> force (i2 (equalsInteger ((\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> \i0 -> force (force (force chooseList) i1 (delay i2) (delay (i3 (addInteger i2 1) (i6 i1))))) 0 i1) 2) (delay ((\i0 -> (\i0 -> listData (i8 (bData i7) (i8 (bData i9) i10))) (force (i3 (equalsInteger i1 0) (delay (force (i5 "pnonZero: building with 0" (delay error)))) (delay i1)))) (unIData (force headList (i3 i1))))) (delay (force (i4 "ptryFrom(PRational): data list length should be 2" (delay error)))))) (unListData (listData (i5 (bData i4) (i5 (bData i6) i7))))) (force ifThenElse)) (force tailList)) (force trace)) #41) (force mkCons)) #2b) [ ])) -erroneous.[Integer] (with length == 0) /= PRational (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> force (i2 (equalsInteger ((\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> \i0 -> force (force (force chooseList) i1 (delay i2) (delay (i3 (addInteger i2 1) (i6 i1))))) 0 i1) 2) (delay ((\i0 -> (\i0 -> listData i7) (force (i3 (equalsInteger i1 0) (delay (force (i5 "pnonZero: building with 0" (delay error)))) (delay i1)))) (unIData (force headList (i3 i1))))) (delay (force (i4 "ptryFrom(PRational): data list length should be 2" (delay error)))))) (unListData (listData i4))) (force ifThenElse)) (force tailList)) (force trace)) [ ])) -erroneous.[Integer] (with length == 3) /= PRational (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> force (i2 (equalsInteger ((\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> \i0 -> force (force (force chooseList) i1 (delay i2) (delay (i3 (addInteger i2 1) (i6 i1))))) 0 i1) 2) (delay ((\i0 -> (\i0 -> listData (i9 i7 (i9 i8 (i9 i10 i11)))) (force (i3 (equalsInteger i1 0) (delay (force (i5 "pnonZero: building with 0" (delay error)))) (delay i1)))) (unIData (force headList (i3 i1))))) (delay (force (i4 "ptryFrom(PRational): data list length should be 2" (delay error)))))) (unListData (listData (i6 i4 (i6 i5 (i6 i7 i8)))))) (force ifThenElse)) (force tailList)) (force trace)) #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 -> force (i2 (equalsInteger ((\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> \i0 -> force (force (force chooseList) i1 (delay i2) (delay (i3 (addInteger i2 1) (i6 i1))))) 0 i1) 2) (delay ((\i0 -> (\i0 -> listData (i8 i7 (i8 i9 i10))) (force (i3 (equalsInteger i1 0) (delay (force (i5 "pnonZero: building with 0" (delay error)))) (delay i1)))) (unIData (force headList (i3 i1))))) (delay (force (i4 "ptryFrom(PRational): data list length should be 2" (delay error)))))) (unListData (listData (i5 i4 (i5 i6 i7))))) (force ifThenElse)) (force tailList)) (force trace)) #182a) (force mkCons)) #00) [ ])) +erroneous.[ByteString] (with length == 2) /= PRational (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> force (i2 (equalsInteger ((\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> \i0 -> force (force (force chooseList) i1 (delay i2) (delay (i3 (addInteger i2 1) (i6 i1))))) 0 i1) 2) (delay ((\i0 -> (\i0 -> listData (i8 (bData i7) (i8 (bData i9) i10))) (force (i3 (lessThanEqualsInteger i1 0) (delay (force (i5 "ptryPositive: building with non positive" (delay error)))) (delay i1)))) (unIData (force headList (i3 i1))))) (delay (force (i4 "ptryFrom(PRational): data list length should be 2" (delay error)))))) (unListData (listData (i5 (bData i4) (i5 (bData i6) i7))))) (force ifThenElse)) (force tailList)) (force trace)) #41) (force mkCons)) #2b) [ ])) +erroneous.[Integer] (with length == 0) /= PRational (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> force (i2 (equalsInteger ((\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> \i0 -> force (force (force chooseList) i1 (delay i2) (delay (i3 (addInteger i2 1) (i6 i1))))) 0 i1) 2) (delay ((\i0 -> (\i0 -> listData i7) (force (i3 (lessThanEqualsInteger i1 0) (delay (force (i5 "ptryPositive: building with non positive" (delay error)))) (delay i1)))) (unIData (force headList (i3 i1))))) (delay (force (i4 "ptryFrom(PRational): data list length should be 2" (delay error)))))) (unListData (listData i4))) (force ifThenElse)) (force tailList)) (force trace)) [ ])) +erroneous.[Integer] (with length == 3) /= PRational (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> force (i2 (equalsInteger ((\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> \i0 -> force (force (force chooseList) i1 (delay i2) (delay (i3 (addInteger i2 1) (i6 i1))))) 0 i1) 2) (delay ((\i0 -> (\i0 -> listData (i9 i7 (i9 i8 (i9 i10 i11)))) (force (i3 (lessThanEqualsInteger i1 0) (delay (force (i5 "ptryPositive: building with non positive" (delay error)))) (delay i1)))) (unIData (force headList (i3 i1))))) (delay (force (i4 "ptryFrom(PRational): data list length should be 2" (delay error)))))) (unListData (listData (i6 i4 (i6 i5 (i6 i7 i8)))))) (force ifThenElse)) (force tailList)) (force trace)) #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 -> force (i2 (equalsInteger ((\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> \i0 -> force (force (force chooseList) i1 (delay i2) (delay (i3 (addInteger i2 1) (i6 i1))))) 0 i1) 2) (delay ((\i0 -> (\i0 -> listData (i8 i7 (i8 i9 i10))) (force (i3 (lessThanEqualsInteger i1 0) (delay (force (i5 "ptryPositive: building with non positive" (delay error)))) (delay i1)))) (unIData (force headList (i3 i1))))) (delay (force (i4 "ptryFrom(PRational): data list length should be 2" (delay error)))))) (unListData (listData (i5 i4 (i5 i6 i7))))) (force ifThenElse)) (force tailList)) (force trace)) #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 -> force (i2 (equalsInteger ((\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> \i0 -> force (force (force chooseList) i1 (delay i2) (delay (i3 (addInteger i2 1) (i7 i1))))) 0 i1) 2) (delay ((\i0 -> (\i0 -> force (i4 (equalsInteger i1 (unIData i10)) (delay (force (i4 ((\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> force ((\i0 -> \i0 -> i12 i2 i1 (delay False)) (equalsInteger i4 i2) (delay (equalsInteger i3 i1)))))) ((\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (unIData (i8 (i9 i2)))) (unIData (i7 i1))) (unListData i1)) (listData (i9 i8 (i9 i10 i11)))) ((\i0 -> \i0 -> i1 i2 i3) (unIData i8))) (delay ()) (delay (force (i7 "drat should be as expected" (delay error))))))) (delay (force (i7 "non-zero should be as expected" (delay error)))))) (force (i3 (equalsInteger i1 0) (delay (force (i6 "pnonZero: building with 0" (delay error)))) (delay i1)))) (unIData (i3 (i4 i1))))) (delay (force (i5 "ptryFrom(PRational): data list length should be 2" (delay error)))))) (unListData (listData (i6 i5 (i6 i7 i8))))) (force ifThenElse)) (force headList)) (force tailList)) (force trace)) #182a) (force mkCons)) #181f) [ ])) +working.[Integer] (with length == 2) == PRational (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> force (i2 (equalsInteger ((\i0 -> (\i0 -> i2 (\i0 -> i2 i2 i1)) (\i0 -> i2 (\i0 -> i2 i2 i1))) (\i0 -> \i0 -> \i0 -> force (force (force chooseList) i1 (delay i2) (delay (i3 (addInteger i2 1) (i7 i1))))) 0 i1) 2) (delay ((\i0 -> (\i0 -> force (i4 (equalsInteger i1 (unIData i10)) (delay (force (i4 ((\i0 -> \i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> force ((\i0 -> \i0 -> i12 i2 i1 (delay False)) (equalsInteger i4 i2) (delay (equalsInteger i3 i1)))))) ((\i0 -> (\i0 -> (\i0 -> (\i0 -> \i0 -> i1 i3 i2) (unIData (i8 (i9 i2)))) (unIData (i7 i1))) (unListData i1)) (listData (i9 i8 (i9 i10 i11)))) ((\i0 -> \i0 -> i1 i2 i3) (unIData i8))) (delay ()) (delay (force (i7 "drat should be as expected" (delay error))))))) (delay (force (i7 "non-zero should be as expected" (delay error)))))) (force (i3 (lessThanEqualsInteger i1 0) (delay (force (i6 "ptryPositive: building with non positive" (delay error)))) (delay i1)))) (unIData (i3 (i4 i1))))) (delay (force (i5 "ptryFrom(PRational): data list length should be 2" (delay error)))))) (unListData (listData (i6 i5 (i6 i7 i8))))) (force ifThenElse)) (force headList)) (force tailList)) (force trace)) #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 "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 "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 "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/rational.bench.golden b/plutarch-test/goldens/rational.bench.golden index 57bcdf69e..6c944bf47 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":33573901,"exBudgetMemory":84401,"scriptSizeBytes":378} -ops.- {"exBudgetCPU":33573901,"exBudgetMemory":84401,"scriptSizeBytes":378} -ops.* {"exBudgetCPU":58113426,"exBudgetMemory":142977,"scriptSizeBytes":437} -ops.harmonic-sum {"exBudgetCPU":85294919,"exBudgetMemory":207655,"scriptSizeBytes":441} -ops.multi-product {"exBudgetCPU":96083895,"exBudgetMemory":237989,"scriptSizeBytes":463} -compare {"exBudgetCPU":27193475,"exBudgetMemory":69077,"scriptSizeBytes":363} -round.5/3 {"exBudgetCPU":17926406,"exBudgetMemory":39749,"scriptSizeBytes":369} -round.4/3 {"exBudgetCPU":16470457,"exBudgetMemory":36646,"scriptSizeBytes":369} -round.-5/2 {"exBudgetCPU":17727920,"exBudgetMemory":39249,"scriptSizeBytes":383} -round.-1/4 {"exBudgetCPU":16837934,"exBudgetMemory":37348,"scriptSizeBytes":383} -truncate.5/4 {"exBudgetCPU":13897101,"exBudgetMemory":33539,"scriptSizeBytes":320} -truncate.7/4 {"exBudgetCPU":15353050,"exBudgetMemory":36642,"scriptSizeBytes":320} -truncate.1/4 {"exBudgetCPU":12441152,"exBudgetMemory":30436,"scriptSizeBytes":320} -truncate.-7/4 {"exBudgetCPU":17474953,"exBudgetMemory":40849,"scriptSizeBytes":334} -properFraction.-1/2 {"exBudgetCPU":40971082,"exBudgetMemory":103120,"scriptSizeBytes":504} -properFraction.-3/2 {"exBudgetCPU":42794508,"exBudgetMemory":106925,"scriptSizeBytes":506} -properFraction.-4/3 {"exBudgetCPU":42794508,"exBudgetMemory":106925,"scriptSizeBytes":506} +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":40964010,"exBudgetMemory":103120,"scriptSizeBytes":519} +properFraction.-3/2 {"exBudgetCPU":42787436,"exBudgetMemory":106925,"scriptSizeBytes":521} +properFraction.-4/3 {"exBudgetCPU":42787436,"exBudgetMemory":106925,"scriptSizeBytes":521} data.id.0.5 {"exBudgetCPU":161100,"exBudgetMemory":800,"scriptSizeBytes":17} data.id.2 {"exBudgetCPU":161100,"exBudgetMemory":800,"scriptSizeBytes":17} -data.id.11/3 {"exBudgetCPU":13900637,"exBudgetMemory":33539,"scriptSizeBytes":274} -div by 0.1/0 {"exBudgetCPU":594827,"exBudgetMemory":136,"scriptSizeBytes":274} -div by 0.recip 0 {"exBudgetCPU":501931,"exBudgetMemory":134,"scriptSizeBytes":75} -div by 0.1/(1-1) {"exBudgetCPU":9194401,"exBudgetMemory":20168,"scriptSizeBytes":353} \ No newline at end of file +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 diff --git a/plutarch-test/goldens/rational.uplc.golden b/plutarch-test/goldens/rational.uplc.golden index 4a57770e1..72a238079 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 (equalsInteger i1 0) (delay (force (i3 i4 (delay error)))) (delay i1)))) (force ifThenElse)) (force trace)) "pnonZero: building with 0")) -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 (equalsInteger i1 0) (delay (force (i3 i4 (delay error)))) (delay i1)))) (force ifThenElse)) (force trace)) "pnonZero: building with 0")) -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 (equalsInteger i1 0) (delay (force (i3 i4 (delay error)))) (delay i1)))) (force ifThenElse)) (force trace)) "pnonZero: building with 0")) -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 (equalsInteger i1 0) (delay (force (i3 i4 (delay error)))) (delay i1)))) (force ifThenElse)) (force trace)) "pnonZero: building with 0")) -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 (equalsInteger i1 0) (delay (force (i3 i4 (delay error)))) (delay i1)))) (force ifThenElse)) (force trace)) "pnonZero: building with 0")) -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 (equalsInteger i1 0) (delay (force (i3 i4 (delay error)))) (delay i1)))) (force ifThenElse)) (force trace)) "pnonZero: building with 0")) -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 (equalsInteger i1 0) (delay (force (force trace "pnonZero: building with 0" (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 (equalsInteger i1 0) (delay (force (force trace "pnonZero: building with 0" (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 (equalsInteger i1 0) (delay (force (force trace "pnonZero: building with 0" (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 (equalsInteger i1 0) (delay (force (force trace "pnonZero: building with 0" (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 (equalsInteger i1 0) (delay (force (force trace "pnonZero: building with 0" (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 (equalsInteger i1 0) (delay (force (force trace "pnonZero: building with 0" (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 (equalsInteger i1 0) (delay (force (force trace "pnonZero: building with 0" (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 (equalsInteger i1 0) (delay (force (force trace "pnonZero: building with 0" (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 -> (\i0 -> \i0 -> i1 i3 i2) ((\i0 -> i3 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> i12 ((\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 (i18 (lessThanEqualsInteger 0 i3) (delay i1) (delay (addInteger i1 (force (i18 (equalsInteger (modInteger i3 i2) 0) (delay 0) (delay 1))))))) (divideInteger i2 i1)))) (i3 (i4 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2))) (\i0 -> \i0 -> force (i3 (equalsInteger i2 0) (delay ((\i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> force (i8 (equalsInteger i4 i2) (delay (equalsInteger i3 i1)))))) (i5 (i6 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2)))))))) (\i0 -> \i0 -> i15 i2 i1 i3)) (delay False)) (\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 (equalsInteger i1 0) (delay (force (i3 i4 (delay error)))) (delay i1)))) (force ifThenElse)) (force trace)) "pnonZero: building with 0")) -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 -> i1 i3 i2) ((\i0 -> i3 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> i12 ((\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 (i18 (lessThanEqualsInteger 0 i3) (delay i1) (delay (addInteger i1 (force (i18 (equalsInteger (modInteger i3 i2) 0) (delay 0) (delay 1))))))) (divideInteger i2 i1)))) (i3 (i4 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 3) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2))) (\i0 -> \i0 -> force (i3 (equalsInteger i2 (i14 1)) (delay ((\i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> force (i8 (equalsInteger i4 i2) (delay (equalsInteger i3 i1)))))) (i5 (i6 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2)))))))) (\i0 -> \i0 -> i15 i2 i1 i3)) (delay False)) (\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 (equalsInteger i1 0) (delay (force (i3 i4 (delay error)))) (delay i1)))) (force ifThenElse)) (force trace)) "pnonZero: building with 0")) -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 -> i1 i3 i2) ((\i0 -> i3 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> i12 ((\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 (i18 (lessThanEqualsInteger 0 i3) (delay i1) (delay (addInteger i1 (force (i18 (equalsInteger (modInteger i3 i2) 0) (delay 0) (delay 1))))))) (divideInteger i2 i1)))) (i3 (i4 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 4) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 3))) (\i0 -> \i0 -> force (i3 (equalsInteger i2 (i14 1)) (delay ((\i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> force (i8 (equalsInteger i4 i2) (delay (equalsInteger i3 i1)))))) (i5 (i6 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 3)))))))) (\i0 -> \i0 -> i15 i2 i1 i3)) (delay False)) (\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 (equalsInteger i1 0) (delay (force (i3 i4 (delay error)))) (delay i1)))) (force ifThenElse)) (force trace)) "pnonZero: building with 0")) +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 -> (\i0 -> \i0 -> i1 i3 i2) ((\i0 -> i3 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> i12 ((\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 (i18 (lessThanEqualsInteger 0 i3) (delay i1) (delay (addInteger i1 (force (i18 (equalsInteger (modInteger i3 i2) 0) (delay 0) (delay 1))))))) (divideInteger i2 i1)))) (i3 (i4 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2))) (\i0 -> \i0 -> force (i3 (equalsInteger i2 0) (delay ((\i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> force (i8 (equalsInteger i4 i2) (delay (equalsInteger i3 i1)))))) (i5 (i6 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2)))))))) (\i0 -> \i0 -> i15 i2 i1 i3)) (delay False)) (\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 -> (\i0 -> \i0 -> i1 i3 i2) ((\i0 -> i3 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> i12 ((\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 (i18 (lessThanEqualsInteger 0 i3) (delay i1) (delay (addInteger i1 (force (i18 (equalsInteger (modInteger i3 i2) 0) (delay 0) (delay 1))))))) (divideInteger i2 i1)))) (i3 (i4 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 3) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2))) (\i0 -> \i0 -> force (i3 (equalsInteger i2 (i14 1)) (delay ((\i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> force (i8 (equalsInteger i4 i2) (delay (equalsInteger i3 i1)))))) (i5 (i6 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 2)))))))) (\i0 -> \i0 -> i15 i2 i1 i3)) (delay False)) (\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 -> (\i0 -> \i0 -> i1 i3 i2) ((\i0 -> i3 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> i12 ((\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 (i18 (lessThanEqualsInteger 0 i3) (delay i1) (delay (addInteger i1 (force (i18 (equalsInteger (modInteger i3 i2) 0) (delay 0) (delay 1))))))) (divideInteger i2 i1)))) (i3 (i4 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 4) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 3))) (\i0 -> \i0 -> force (i3 (equalsInteger i2 (i14 1)) (delay ((\i0 -> i2 (\i0 -> \i0 -> i3 (\i0 -> \i0 -> force (i8 (equalsInteger i4 i2) (delay (equalsInteger i3 i1)))))) (i5 (i6 ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 1) ((\i0 -> (\i0 -> \i0 -> i1 i3 i2) 1) 3)))))))) (\i0 -> \i0 -> i15 i2 i1 i3)) (delay False)) (\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")) 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 (equalsInteger i1 0) (delay (force (force trace "pnonZero: building with 0" (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 (equalsInteger i1 0) (delay (force (force trace "pnonZero: building with 0" (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 (equalsInteger i2 0) (delay (force (force trace "pnonZero: building with 0" (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 (equalsInteger i1 0) (delay (force (force trace "pnonZero: building with 0" (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 -> 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 diff --git a/plutarch-test/goldens/show.bench.golden b/plutarch-test/goldens/show.bench.golden index 24a27bd4d..a0407ff6d 100644 --- a/plutarch-test/goldens/show.bench.golden +++ b/plutarch-test/goldens/show.bench.golden @@ -33,4 +33,4 @@ builtinlist.nil {"exBudgetCPU":2756985,"exBudgetMemory":11043,"scriptSizeBytes": builtinlist.1,2,3 {"exBudgetCPU":26137058,"exBudgetMemory":60484,"scriptSizeBytes":392} pair.int-str {"exBudgetCPU":34865639,"exBudgetMemory":80705,"scriptSizeBytes":454} pair.int-list {"exBudgetCPU":42325700,"exBudgetMemory":93314,"scriptSizeBytes":434} -rational.1/2 {"exBudgetCPU":24865887,"exBudgetMemory":59194,"scriptSizeBytes":553} \ No newline at end of file +rational.1/2 {"exBudgetCPU":24862351,"exBudgetMemory":59194,"scriptSizeBytes":568} \ No newline at end of file diff --git a/plutarch-test/goldens/show.uplc.golden b/plutarch-test/goldens/show.uplc.golden index 8c09cf958..cd10b85e0 100644 --- a/plutarch-test/goldens/show.uplc.golden +++ b/plutarch-test/goldens/show.uplc.golden @@ -33,4 +33,4 @@ builtinlist.nil (program 1.0.0 ((\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> (\i0 -> builtinlist.1,2,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 -> appendString "[" (appendString (i4 (\i0 -> \i0 -> force (i4 i1 (delay i8) (delay ((\i0 -> force (i5 i1 (delay (i6 (i24 i2))) (delay (appendString (i6 (i24 i2)) (appendString ", " (i3 (i25 i2))))))) (i24 i1))))) i1) "]")) [1,2,3]) (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))) 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 (equalsInteger i1 0) (delay (force (force trace "pnonZero: building with 0" (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 (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 diff --git a/plutarch.cabal b/plutarch.cabal index 757b2919f..795ea97d0 100644 --- a/plutarch.cabal +++ b/plutarch.cabal @@ -126,9 +126,9 @@ library Plutarch.List Plutarch.Maybe Plutarch.Monadic - Plutarch.NonZero Plutarch.Num Plutarch.Pair + Plutarch.Positive Plutarch.Prelude Plutarch.Rational Plutarch.Reducible