tpdb-0.6.0: TPDB/Mirror.hs
module TPDB.Mirror where
import TPDB.Data
import TPDB.Convert
import Control.Monad ( forM, guard )
-- | if input is SRS, reverse lhs and rhs of each rule
mirror :: TRS Identifier s
-> Maybe ( TRS Identifier s )
mirror trs = do
us <- forM (rules trs) $ \ u -> do
( left_spine, left_base ) <- spine $ lhs u
( right_spine, right_base ) <- spine $ rhs u
guard $ left_base == right_base
return $ u { lhs = unspine left_base $ reverse left_spine
, rhs = unspine right_base $ reverse right_spine
}
return $ trs { rules = us }