Skip to content

Commit 72319c6

Browse files
Improve some rewrite rules
1 parent 7a0aecd commit 72319c6

File tree

3 files changed

+15
-0
lines changed

3 files changed

+15
-0
lines changed

examples/Constrained/Examples/Fold.hs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,12 @@ evenSpec = explainSpec ["even via (x+x)"] $
3535
(\eval -> pure (div (eval evenx) 2))
3636
(\ [var|somey|] -> [assert $ evenx ==. somey + somey])
3737

38+
composeEvenSpec :: Specification Int
39+
composeEvenSpec = constrained $ \ x -> [satisfies x evenSpec, assert $ x >. 10]
40+
41+
composeOddSpec :: Specification Int
42+
composeOddSpec = constrained $ \ x -> [satisfies x oddSpec, assert $ x >. 10]
43+
3844
sum3WithLength :: Integer -> Specification ([Int], Int, Int, Int)
3945
sum3WithLength n =
4046
constrained $ \ [var|quad|] ->

src/Constrained/NumOrd.hs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -895,6 +895,9 @@ instance Logic IntW where
895895
propagateMemberSpec MultW (HOLE :<: i) es = memberSpec (mapMaybe (flip invertMult i) (NE.toList es)) (NE.fromList ["propagateSpec"])
896896
propagateMemberSpec MultW ctx es = propagateMemberSpec MultW (flipCtx ctx) es
897897

898+
rewriteRules AddW (x :> y :> Nil) _ | x == y = Just $ 2 * x
899+
rewriteRules _ _ _ = Nothing
900+
898901
infix 4 +.
899902

900903
-- | `Term`-level `(+)`

test/Constrained/Tests.hs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,11 @@ import Constrained.Examples.Either
2020
import Constrained.Examples.Fold (
2121
Outcome (..),
2222
evenSpec,
23+
composeEvenSpec,
2324
listSumComplex,
2425
logishProp,
2526
oddSpec,
27+
composeOddSpec,
2628
pickProp,
2729
sum3,
2830
sum3WithLength,
@@ -203,6 +205,10 @@ tests nightly =
203205
prop "prop_noNarrowLoop" $ withMaxSuccess 1000 prop_noNarrowLoop
204206
conformsToSpecESpec
205207
foldWithSizeTests
208+
testSpec "evenSpec" (evenSpec @Int)
209+
testSpec "composeEvenSpec" composeEvenSpec
210+
testSpec "oddSpec" oddSpec
211+
testSpec "composeOddSpec" composeOddSpec
206212

207213
negativeTests :: Spec
208214
negativeTests =

0 commit comments

Comments
 (0)