1
Fork 0
mirror of https://git.cs.ou.nl/joshua.moerman/mealy-decompose.git synced 2025-04-30 02:07:44 +02:00

nothing really

This commit is contained in:
Joshua Moerman 2024-04-29 17:42:54 +02:00
parent 4127546f67
commit 22bec3873b
4 changed files with 8 additions and 13 deletions

View file

@ -19,7 +19,8 @@ import Data.Tuple (swap)
import System.Environment import System.Environment
import Text.Megaparsec import Text.Megaparsec
converseRelation :: (Ord a, Ord b) => Map.Map a b -> Map.Map b [a]
converseRelation :: Ord b => Map.Map a b -> Map.Map b [a]
converseRelation m = Map.fromListWith (++) . fmap (second pure . swap) . Map.assocs $ m converseRelation m = Map.fromListWith (++) . fmap (second pure . swap) . Map.assocs $ m
myWriteFile :: FilePath -> String -> IO () myWriteFile :: FilePath -> String -> IO ()

View file

@ -19,7 +19,6 @@ common stuff
default-language: GHC2021 default-language: GHC2021
default-extensions: default-extensions:
RecordWildCards RecordWildCards
ghc-options: -Wall
library library
import: stuff import: stuff

View file

@ -7,11 +7,11 @@ import Control.Monad.Trans.Class
import Control.Monad.Trans.State.Strict import Control.Monad.Trans.State.Strict
import Data.Foldable (minimumBy) import Data.Foldable (minimumBy)
import Data.Function (on)
import Data.Functor.Identity import Data.Functor.Identity
import Data.List (tails) import Data.List (tails, stripPrefix)
import Data.Map.Strict qualified as Map
import Data.Map.Merge.Strict qualified as MapMerge import Data.Map.Merge.Strict qualified as MapMerge
import Data.Map.Strict qualified as Map
import Data.Ord (comparing)
import Data.Set qualified as Set import Data.Set qualified as Set
import Prelude hiding (Word) import Prelude hiding (Word)
@ -165,12 +165,7 @@ makeClosedAndConsistentA mq = loop False where
-- eenvoudiger. -- eenvoudiger.
processCounterexampleA :: (Applicative f, Ord i) => Word i -> MQ f i o -> LStarState i o -> f (LStarState i o) processCounterexampleA :: (Applicative f, Ord i) => Word i -> MQ f i o -> LStarState i o -> f (LStarState i o)
processCounterexampleA ce mq table@LStarState{..} = addColumnsA newSuffixes mq table where processCounterexampleA ce mq table@LStarState{..} = addColumnsA newSuffixes mq table where
removePrefix [] w2 = Just w2 shortestSuffix = minimumBy (comparing length) [suf | r <- Set.toList rowIndices, Just suf <- [stripPrefix r ce]]
removePrefix _ [] = Nothing
removePrefix (a:w1) (b:w2)
| a == b = removePrefix w1 w2
| otherwise = Nothing
shortestSuffix = minimumBy (compare `on` length) [suf | r <- Set.toList rowIndices, Just suf <- [removePrefix r ce]]
newSuffixes = filter (not . null) . tails . drop 1 $ shortestSuffix newSuffixes = filter (not . null) . tails . drop 1 $ shortestSuffix

View file

@ -6,9 +6,9 @@ import Control.Monad (replicateM)
import Control.Monad.IO.Class (liftIO) import Control.Monad.IO.Class (liftIO)
import Control.Monad.Trans.State.Strict import Control.Monad.Trans.State.Strict
import Data.Bifunctor (first) import Data.Bifunctor (first)
import Data.Function (on)
import Data.List (minimumBy) import Data.List (minimumBy)
import Data.Map.Strict qualified as Map import Data.Map.Strict qualified as Map
import Data.Ord (comparing)
import Data.Set qualified as Set import Data.Set qualified as Set
data MergerStats = MergerStats data MergerStats = MergerStats
@ -35,7 +35,7 @@ heuristicMerger components strategy = do
in ((os, p3), score ps p3) in ((os, p3), score ps p3)
isSortedOn f ls = and $ zipWith (\a b -> f a < f b) ls (drop 1 ls) isSortedOn f ls = and $ zipWith (\a b -> f a < f b) ls (drop 1 ls)
allCombs n projs = fmap combine . filter (isSortedOn fst) $ replicateM n projs allCombs n projs = fmap combine . filter (isSortedOn fst) $ replicateM n projs
minComb n projs = minimumBy (compare `on` snd) (allCombs n projs) minComb n projs = minimumBy (comparing snd) (allCombs n projs)
safeStrategy ms@MergerStats{..} safeStrategy ms@MergerStats{..}
| numberOfComponents <= 1 = Stop | numberOfComponents <= 1 = Stop
| otherwise = strategy ms | otherwise = strategy ms