quickspec_laws :: [(String, Property)]
quickspec_laws =
[ ( "clue (ks <> ks2) c = clue ks (clue ks2 c)"
, property $
\ (ks :: [Int])
(ks2 :: [Int])
(c :: Challenge Test Int (MultiSet Int)) ->
(clue (ks <> ks2) c :: Challenge Test Int (MultiSet Int)) =~= clue ks (clue ks2 c))
, ( "empty = reward mempty"
, property $
(empty :: Challenge Test Int (MultiSet Int)) =~= reward mempty)
, ( "both c c2 = both c2 c"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int)) ->
(both c c2 :: Challenge Test Int (MultiSet Int)) =~= both c2 c)
, ( "eitherC c c2 = eitherC c2 c"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int)) ->
(eitherC c c2 :: Challenge Test Int (MultiSet Int)) =~= eitherC c2 c)
, ( "both c c = eitherC c c"
, property $
\ (c :: Challenge Test Int (MultiSet Int)) ->
(both c c :: Challenge Test Int (MultiSet Int)) =~= eitherC c c)
, ( "gate f bottom = bottom"
, property $
\ (f :: InputFilter Test) ->
(gate f bottom :: Challenge Test Int (MultiSet Int)) =~= bottom)
, ( "andThen c empty = c"
, property $
\ (c :: Challenge Test Int (MultiSet Int)) ->
(andThen c empty :: Challenge Test Int (MultiSet Int)) =~= c)
, ( "andThen bottom c = bottom"
, property $
\ (c :: Challenge Test Int (MultiSet Int)) ->
(andThen bottom c :: Challenge Test Int (MultiSet Int)) =~= bottom)
, ( "andThen empty c = c"
, property $
\ (c :: Challenge Test Int (MultiSet Int)) ->
(andThen empty c :: Challenge Test Int (MultiSet Int)) =~= c)
, ( "both c bottom = andThen c bottom"
, property $
\ (c :: Challenge Test Int (MultiSet Int)) ->
(both c bottom :: Challenge Test Int (MultiSet Int)) =~= andThen c bottom)
, ( "both c empty = c"
, property $
\ (c :: Challenge Test Int (MultiSet Int)) ->
(both c empty :: Challenge Test Int (MultiSet Int)) =~= c)
, ( "eitherC c bottom = c"
, property $
\ (c :: Challenge Test Int (MultiSet Int)) ->
(eitherC c bottom :: Challenge Test Int (MultiSet Int)) =~= c)
, ( "both c (reward r) = andThen (reward r) c"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(r :: MultiSet Int) ->
(both c (reward r) :: Challenge Test Int (MultiSet Int)) =~= andThen (reward r) c)
, ( "eitherC empty (reward r) = reward r"
, property $
\ (r :: MultiSet Int) ->
(eitherC empty (reward r) :: Challenge Test Int (MultiSet Int)) =~= reward r)
, ( "andThen (gate f c) c2 = gate f (andThen c c2)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int))
(f :: InputFilter Test) ->
(andThen (gate f c) c2 :: Challenge Test Int (MultiSet Int)) =~= gate f (andThen c c2))
, ( "andThen (andThen c c2) c3 = andThen c (andThen c2 c3)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int))
(c3 :: Challenge Test Int (MultiSet Int)) ->
(andThen (andThen c c2) c3 :: Challenge Test Int (MultiSet Int)) =~= andThen c (andThen c2 c3))
, ( "both c (andThen c c2) = andThen (both c c) c2"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int)) ->
(both c (andThen c c2) :: Challenge Test Int (MultiSet Int)) =~= andThen (both c c) c2)
, ( "both (both c c2) c3 = both c (both c2 c3)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int))
(c3 :: Challenge Test Int (MultiSet Int)) ->
(both (both c c2) c3 :: Challenge Test Int (MultiSet Int)) =~= both c (both c2 c3))
, ( "eitherC c (clue k c) = both c (clue k c)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(k :: [Int]) ->
(eitherC c (clue k c) :: Challenge Test Int (MultiSet Int)) =~= both c (clue k c))
, ( "eitherC c (both c c) = both c (both c c)"
, property $
\ (c :: Challenge Test Int (MultiSet Int)) ->
(eitherC c (both c c) :: Challenge Test Int (MultiSet Int)) =~= both c (both c c))
, ( "eitherC (eitherC c c2) c3 = eitherC c (eitherC c2 c3)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int))
(c3 :: Challenge Test Int (MultiSet Int)) ->
(eitherC (eitherC c c2) c3 :: Challenge Test Int (MultiSet Int)) =~= eitherC c (eitherC c2 c3))
, ( "andThen (reward r) (reward r2) = reward (r <> r2)"
, property $
\ (r :: MultiSet Int) (r2 :: MultiSet Int) ->
(andThen (reward r) (reward r2) :: Challenge Test Int (MultiSet Int)) =~= reward (r <> r2))
, ( "both c (clue k empty) = andThen (clue k empty) c"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(k :: [Int]) ->
(both c (clue k empty) :: Challenge Test Int (MultiSet Int)) =~= andThen (clue k empty) c)
, ( "both c (eitherC c2 empty) = andThen (eitherC c2 empty) c"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int)) ->
(both c (eitherC c2 empty) :: Challenge Test Int (MultiSet Int)) =~= andThen (eitherC c2 empty) c)
, ( "both c c = eitherC c (andThen c bottom)"
, property $
\ (c :: Challenge Test Int (MultiSet Int)) ->
(both c c :: Challenge Test Int (MultiSet Int)) =~= eitherC c (andThen c bottom))
, ( "eitherC empty (gate f c) = empty"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(f :: InputFilter Test) ->
(eitherC empty (gate f c) :: Challenge Test Int (MultiSet Int)) =~= empty)
, ( "eitherC empty (both c c2) = eitherC c (eitherC c2 empty)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int)) ->
(eitherC empty (both c c2) :: Challenge Test Int (MultiSet Int)) =~= eitherC c (eitherC c2 empty))
, ( "andThen (reward r) (clue k empty) = clue k (reward r)"
, property $
\ (k :: [Int]) (r :: MultiSet Int) ->
(andThen (reward r) (clue k empty) :: Challenge Test Int (MultiSet Int)) =~= clue k (reward r))
, ( "andThen (reward r) (eitherC c empty) = eitherC c (reward r)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(r :: MultiSet Int) ->
(andThen (reward r) (eitherC c empty) :: Challenge Test Int (MultiSet Int)) =~= eitherC c (reward r))
, ( "clue k (andThen c (reward r)) = andThen (clue k c) (reward r)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(k :: [Int])
(r :: MultiSet Int) ->
(clue k (andThen c (reward r)) :: Challenge Test Int (MultiSet Int)) =~= andThen (clue k c) (reward r))
, ( "clue k (andThen (reward r) c) = andThen (reward r) (clue k c)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(k :: [Int])
(r :: MultiSet Int) ->
(clue k (andThen (reward r) c) :: Challenge Test Int (MultiSet Int)) =~= andThen (reward r) (clue k c))
, ( "both c (clue k (reward r)) = andThen (clue k (reward r)) c"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(k :: [Int])
(r :: MultiSet Int) ->
(both c (clue k (reward r)) :: Challenge Test Int (MultiSet Int)) =~= andThen (clue k (reward r)) c)
, ( "eitherC c (andThen c (reward r)) = andThen (both c c) (reward r)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(r :: MultiSet Int) ->
(eitherC c (andThen c (reward r)) :: Challenge Test Int (MultiSet Int)) =~= andThen (both c c) (reward r))
, ( "eitherC c (andThen (reward r) c2) = andThen (reward r) (eitherC c c2)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int))
(r :: MultiSet Int) ->
(eitherC c (andThen (reward r) c2) :: Challenge Test Int (MultiSet Int)) =~= andThen (reward r) (eitherC c c2))
, ( "both (clue k c) (clue k c) = clue k (both c c)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(k :: [Int]) ->
(both (clue k c) (clue k c) :: Challenge Test Int (MultiSet Int)) =~= clue k (both c c))
, ( "both (gate f c) (gate f c2) = gate f (both c c2)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int))
(f :: InputFilter Test) ->
(both (gate f c) (gate f c2) :: Challenge Test Int (MultiSet Int)) =~= gate f (both c c2))
, ( "both (andThen c c2) (andThen c c3) = andThen (both c c) (both c2 c3)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int))
(c3 :: Challenge Test Int (MultiSet Int)) ->
(both (andThen c c2) (andThen c c3) :: Challenge Test Int (MultiSet Int)) =~= andThen (both c c) (both c2 c3))
, ( "eitherC (clue k c) (clue k c2) = clue k (eitherC c c2)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int))
(k :: [Int]) ->
(eitherC (clue k c) (clue k c2) :: Challenge Test Int (MultiSet Int)) =~= clue k (eitherC c c2))
, ( "eitherC (clue k c) (clue k2 c) = both (clue k c) (clue k2 c)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(k :: [Int])
(k2 :: [Int]) ->
(eitherC (clue k c) (clue k2 c) :: Challenge Test Int (MultiSet Int)) =~= both (clue k c) (clue k2 c))
, ( "eitherC (clue k c) (both c c) = both (clue k c) (both c c)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(k :: [Int]) ->
(eitherC (clue k c) (both c c) :: Challenge Test Int (MultiSet Int)) =~= both (clue k c) (both c c))
, ( "eitherC (gate f c) (gate f c2) = gate f (eitherC c c2)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int))
(f :: InputFilter Test) ->
(eitherC (gate f c) (gate f c2) :: Challenge Test Int (MultiSet Int)) =~= gate f (eitherC c c2))
, ( "eitherC (andThen c c2) (andThen c c3) = andThen (both c c) (eitherC c2 c3)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int))
(c3 :: Challenge Test Int (MultiSet Int)) ->
(eitherC (andThen c c2) (andThen c c3) :: Challenge Test Int (MultiSet Int)) =~= andThen (both c c) (eitherC c2 c3))
, ( "eitherC (both c c2) (eitherC c c2) = both (eitherC c c2) (eitherC c c2)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int)) ->
(eitherC (both c c2) (eitherC c c2) :: Challenge Test Int (MultiSet Int)) =~= both (eitherC c c2) (eitherC c c2))
, ( "andThen (clue k c) (clue k bottom) = andThen (clue k c) bottom"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(k :: [Int]) ->
(andThen (clue k c) (clue k bottom) :: Challenge Test Int (MultiSet Int)) =~= andThen (clue k c) bottom)
, ( "andThen (clue k c) (clue k empty) = clue k c"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(k :: [Int]) ->
(andThen (clue k c) (clue k empty) :: Challenge Test Int (MultiSet Int)) =~= clue k c)
, ( "both (clue k c) (clue k bottom) = andThen (clue k c) bottom"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(k :: [Int]) ->
(both (clue k c) (clue k bottom) :: Challenge Test Int (MultiSet Int)) =~= andThen (clue k c) bottom)
, ( "eitherC (clue k c) (andThen c bottom) = both c (clue k c)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(k :: [Int]) ->
(eitherC (clue k c) (andThen c bottom) :: Challenge Test Int (MultiSet Int)) =~= both c (clue k c))
, ( "eitherC (gate f c) (andThen c bottom) = both c (gate f c)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(f :: InputFilter Test) ->
(eitherC (gate f c) (andThen c bottom) :: Challenge Test Int (MultiSet Int)) =~= both c (gate f c))
, ( "eitherC (andThen c c2) (andThen c2 bottom) = both c2 (andThen c c2)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int)) ->
(eitherC (andThen c c2) (andThen c2 bottom) :: Challenge Test Int (MultiSet Int)) =~= both c2 (andThen c c2))
, ( "eitherC (andThen c bottom) (both c c2) = both c (both c c2)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int)) ->
(eitherC (andThen c bottom) (both c c2) :: Challenge Test Int (MultiSet Int)) =~= both c (both c c2))
, ( "eitherC (andThen c bottom) (both c2 c2) = eitherC c2 (both c c2)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int)) ->
(eitherC (andThen c bottom) (both c2 c2) :: Challenge Test Int (MultiSet Int)) =~= eitherC c2 (both c c2))
, ( "andThen (clue k empty) (eitherC c empty) = eitherC c (clue k empty)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(k :: [Int]) ->
(andThen (clue k empty) (eitherC c empty) :: Challenge Test Int (MultiSet Int)) =~= eitherC c (clue k empty))
, ( "andThen (eitherC c empty) (eitherC c2 empty) = eitherC c (eitherC c2 empty)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int)) ->
(andThen (eitherC c empty) (eitherC c2 empty) :: Challenge Test Int (MultiSet Int)) =~= eitherC c (eitherC c2 empty))
, ( "eitherC (andThen c bottom) (andThen c2 bottom) = andThen (both c c2) bottom"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int)) ->
(eitherC (andThen c bottom) (andThen c2 bottom) :: Challenge Test Int (MultiSet Int)) =~= andThen (both c c2) bottom)
, ( "andThen c (both c (clue k c)) = andThen c (clue k (both c c))"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(k :: [Int]) ->
(andThen c (both c (clue k c)) :: Challenge Test Int (MultiSet Int)) =~= andThen c (clue k (both c c)))
, ( "andThen (both c (clue k c)) c2 = both (clue k c) (andThen c c2)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int))
(k :: [Int]) ->
(andThen (both c (clue k c)) c2 :: Challenge Test Int (MultiSet Int)) =~= both (clue k c) (andThen c c2))
, ( "andThen (both c (both c c)) c2 = both (andThen c c2) (both c c)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int)) ->
(andThen (both c (both c c)) c2 :: Challenge Test Int (MultiSet Int)) =~= both (andThen c c2) (both c c))
, ( "andThen (both c (eitherC c c2)) c3 = both (andThen c c3) (eitherC c c2)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int))
(c3 :: Challenge Test Int (MultiSet Int)) ->
(andThen (both c (eitherC c c2)) c3 :: Challenge Test Int (MultiSet Int)) =~= both (andThen c c3) (eitherC c c2))
, ( "both c (clue k (both c c)) = both (clue k c) (both c c)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(k :: [Int]) ->
(both c (clue k (both c c)) :: Challenge Test Int (MultiSet Int)) =~= both (clue k c) (both c c))
, ( "both c (gate f (andThen c c2)) = andThen (both c (gate f c)) c2"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int))
(f :: InputFilter Test) ->
(both c (gate f (andThen c c2)) :: Challenge Test Int (MultiSet Int)) =~= andThen (both c (gate f c)) c2)
, ( "both c (andThen c2 (andThen c c3)) = andThen (both c (andThen c2 c)) c3"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int))
(c3 :: Challenge Test Int (MultiSet Int)) ->
(both c (andThen c2 (andThen c c3)) :: Challenge Test Int (MultiSet Int)) =~= andThen (both c (andThen c2 c)) c3)
, ( "both c (andThen (clue k c) c2) = both (clue k c) (andThen c c2)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int))
(k :: [Int]) ->
(both c (andThen (clue k c) c2) :: Challenge Test Int (MultiSet Int)) =~= both (clue k c) (andThen c c2))
, ( "both c (andThen (both c c2) c3) = andThen (both c (both c c2)) c3"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int))
(c3 :: Challenge Test Int (MultiSet Int)) ->
(both c (andThen (both c c2) c3) :: Challenge Test Int (MultiSet Int)) =~= andThen (both c (both c c2)) c3)
, ( "both c (eitherC c (gate f c)) = eitherC (gate f c) (both c c)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(f :: InputFilter Test) ->
(both c (eitherC c (gate f c)) :: Challenge Test Int (MultiSet Int)) =~= eitherC (gate f c) (both c c))
, ( "both c (eitherC c (andThen c c2)) = eitherC (andThen c c2) (both c c)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int)) ->
(both c (eitherC c (andThen c c2)) :: Challenge Test Int (MultiSet Int)) =~= eitherC (andThen c c2) (both c c))
, ( "both c (eitherC c (andThen c2 c)) = eitherC (andThen c2 c) (both c c)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int)) ->
(both c (eitherC c (andThen c2 c)) :: Challenge Test Int (MultiSet Int)) =~= eitherC (andThen c2 c) (both c c))
, ( "both c (eitherC c (both c c2)) = eitherC (both c c) (both c c2)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int)) ->
(both c (eitherC c (both c c2)) :: Challenge Test Int (MultiSet Int)) =~= eitherC (both c c) (both c c2))
, ( "eitherC c (clue k (clue k2 c)) = both c (clue k (clue k2 c))"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(k :: [Int])
(k2 :: [Int]) ->
(eitherC c (clue k (clue k2 c)) :: Challenge Test Int (MultiSet Int)) =~= both c (clue k (clue k2 c)))
, ( "eitherC c (clue k (both c c)) = both (clue k c) (both c c)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(k :: [Int]) ->
(eitherC c (clue k (both c c)) :: Challenge Test Int (MultiSet Int)) =~= both (clue k c) (both c c))
, ( "eitherC c (andThen (clue k c) c2) = eitherC (clue k c) (andThen c c2)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int))
(k :: [Int]) ->
(eitherC c (andThen (clue k c) c2) :: Challenge Test Int (MultiSet Int)) =~= eitherC (clue k c) (andThen c c2))
, ( "eitherC c (both c2 (clue k c)) = eitherC (clue k c) (both c c2)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int))
(k :: [Int]) ->
(eitherC c (both c2 (clue k c)) :: Challenge Test Int (MultiSet Int)) =~= eitherC (clue k c) (both c c2))
, ( "eitherC c (both c (eitherC c c2)) = both (both c c) (eitherC c c2)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int)) ->
(eitherC c (both c (eitherC c c2)) :: Challenge Test Int (MultiSet Int)) =~= both (both c c) (eitherC c c2))
, ( "eitherC c (both c2 (eitherC c c2)) = both (eitherC c c2) (eitherC c c2)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int)) ->
(eitherC c (both c2 (eitherC c c2)) :: Challenge Test Int (MultiSet Int)) =~= both (eitherC c c2) (eitherC c c2))
, ( "andThen (clue k (andThen c bottom)) c2 = clue k (andThen c bottom)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int))
(k :: [Int]) ->
(andThen (clue k (andThen c bottom)) c2 :: Challenge Test Int (MultiSet Int)) =~= clue k (andThen c bottom))
, ( "both c (eitherC c (andThen c2 bottom)) = eitherC c (both c c2)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int)) ->
(both c (eitherC c (andThen c2 bottom)) :: Challenge Test Int (MultiSet Int)) =~= eitherC c (both c c2))
, ( "eitherC c (andThen c2 (andThen c bottom)) = eitherC c (andThen c2 c)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int)) ->
(eitherC c (andThen c2 (andThen c bottom)) :: Challenge Test Int (MultiSet Int)) =~= eitherC c (andThen c2 c))
, ( "eitherC c (andThen (clue k empty) c2) = andThen (clue k empty) (eitherC c c2)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int))
(k :: [Int]) ->
(eitherC c (andThen (clue k empty) c2) :: Challenge Test Int (MultiSet Int)) =~= andThen (clue k empty) (eitherC c c2))
, ( "eitherC c (andThen (eitherC c c2) bottom) = both c (eitherC c c2)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int)) ->
(eitherC c (andThen (eitherC c c2) bottom) :: Challenge Test Int (MultiSet Int)) =~= both c (eitherC c c2))
, ( "eitherC c (andThen (eitherC c2 empty) c3) = andThen (eitherC c2 empty) (eitherC c c3)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int))
(c3 :: Challenge Test Int (MultiSet Int)) ->
(eitherC c (andThen (eitherC c2 empty) c3) :: Challenge Test Int (MultiSet Int)) =~= andThen (eitherC c2 empty) (eitherC c c3))
, ( "eitherC empty (clue k (gate f c)) = eitherC empty (clue k bottom)"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(f :: InputFilter Test)
(k :: [Int]) ->
(eitherC empty (clue k (gate f c)) :: Challenge Test Int (MultiSet Int)) =~= eitherC empty (clue k bottom))
, ( "eitherC empty (andThen c (gate f c2)) = eitherC c empty"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int))
(f :: InputFilter Test) ->
(eitherC empty (andThen c (gate f c2)) :: Challenge Test Int (MultiSet Int)) =~= eitherC c empty)
, ( "eitherC empty (andThen c (both c c2)) = eitherC empty (andThen c (andThen c c2))"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int)) ->
(eitherC empty (andThen c (both c c2)) :: Challenge Test Int (MultiSet Int)) =~= eitherC empty (andThen c (andThen c c2)))
, ( "eitherC empty (andThen c (eitherC c2 c3)) = eitherC empty (andThen c (both c2 c3))"
, property $
\ (c :: Challenge Test Int (MultiSet Int))
(c2 :: Challenge Test Int (MultiSet Int))
(c3 :: Challenge Test Int (MultiSet Int)) ->
(eitherC empty (andThen c (eitherC c2 c3)) :: Challenge Test Int (MultiSet Int)) =~= eitherC empty (andThen c (both c2 c3)))
]