packages feed

rest-rewrite-0.1.1: src/Set.hs

{-# LANGUAGE OverloadedStrings #-}

module Set where

import Arith as A
import Data.Text
import DSL
import Language.REST.MetaTerm
import Language.REST.Op

import qualified Data.HashSet as S

emptyset  = RWApp "∅" []

x /\ y = RWApp "intersect" [x, y]
x \/ y  = RWApp "union" [x, y]

s0 = RWApp "s₀" []
s1 = RWApp "s₁" []

isSubset t1 t2 = t1 \/ t2 ~> t2

userRWs = S.union A.evalRWs $ S.fromList $
  [
    distribL (/\) (\/)
  , distribR (/\) (\/)
  , distribL (\/) (/\)
  , distribR (\/) (/\)
  --   assocL (\/)
  -- , assocL (/\)
  , x /\ x        ~> x
  , x \/ x        ~> x
  , x \/ emptyset ~> x
  -- , commutes (\/)
  -- , commutes (/\)

  -- Example 1
  , s1 /\ s0      ~> emptyset

  -- Example 2
  -- , s0 \/ s1      ~> s0
  ]

evalRWs = S.union A.userRWs $ S.fromList --
  [ RWApp "t2" [] ~> emptyset
  , isSubset (RWApp "right1" []) (RWApp "right" [])
  ]

disjointExample  = "union(union(left, right1), union(left,right))"
disjointExample2 = "union(left, union(right1, union(left,right)))"

example1 = "f(intersect(union(s₀,s₁), s₀))"
example2 = "f(union(intersect(s₀,s₁), s₀))"