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

added some copyrgiht info

This commit is contained in:
Joshua Moerman 2025-04-29 09:57:09 +02:00
parent 244e150665
commit 9b6a050bda
9 changed files with 74 additions and 1 deletions

View file

@ -1,3 +1,5 @@
-- | Copyright: (c) 2024-2025 Joshua Moerman, Open Universiteit
-- SPDX-License-Identifier: EUPL-1.2
module CommonOptions where
import Options.Applicative

View file

@ -1,3 +1,5 @@
-- | Copyright: (c) 2024-2025 Joshua Moerman, Open Universiteit
-- SPDX-License-Identifier: EUPL-1.2
module DecomposeInput where
import Bisimulation (bisimulation2)

View file

@ -1,6 +1,8 @@
{-# LANGUAGE PartialTypeSignatures #-}
{-# OPTIONS_GHC -Wno-partial-type-signatures #-}
-- | Copyright: (c) 2024-2025 Joshua Moerman, Open Universiteit
-- SPDX-License-Identifier: EUPL-1.2
module DecomposeOutput where
import CommonOptions

54
hs/app/DecomposeTemp.hs Normal file
View file

@ -0,0 +1,54 @@
-- | Copyright: (c) 2025 Joshua Moerman, Open Universiteit
-- SPDX-License-Identifier: EUPL-1.2
module DecomposeTemp where
import DotParser (readDotFile)
import Mealy
import Control.Monad (unless)
import Data.List (nub, sort)
import Data.Maybe (mapMaybe)
import Data.Set qualified as Set
import Data.Text (Text)
import Options.Applicative
-- Nog een experiment
data DecomposeTempOptions = DecomposeTempOptions
{ filename :: FilePath
, quiescence :: Text
, numComponents :: Int
}
deriving Show
decomposeTempOptionsParser :: Parser DecomposeTempOptions
decomposeTempOptionsParser =
DecomposeTempOptions
<$> argument str (help "Filename to read (dot format)" <> metavar "FILE")
<*> option str (long "quiescence" <> help "String denoting empty output" <> showDefault <> value "quiescence")
<*> option auto (long "components" <> short 'c' <> help "Number of components" <> metavar "NUM" <> showDefault <> value 2)
mainDecomposeTemp :: DecomposeTempOptions -> IO ()
mainDecomposeTemp DecomposeTempOptions{..} = do
putStrLn $ "reading " <> filename <> " and quiescence=" <> show quiescence
MealyMachine{..} <- readDotFile filename
let
quiescenceTransitions s = mapMaybe (\i -> let (o, t) = behaviour s i in if o == quiescence then Just (s, t) else Nothing) inputs
valid = all (uncurry (==)) . quiescenceTransitions
unless (all valid states) $ do
putStrLn "WARNING: Not all quiescence-transistions are self-loops!"
let
definedTransitions s = mapMaybe (\i -> let (o, t) = behaviour s i in if o /= quiescence || s /= t then Just (s, i, o, t) else Nothing) inputs
showState s trns = putStrLn $ show s <> ": " <> show (fmap (\(_, i, _, _) -> i) trns)
bfs [] _ = []
bfs (x : todo) visited
| x `Set.member` visited = bfs todo visited
| otherwise =
let trns = definedTransitions x
in (x, sort trns) : bfs (todo <> nub (fmap (\(_, _, _, t) -> t) trns)) (Set.insert x visited)
mapM_ (uncurry showState) (bfs [initialState] Set.empty)

View file

@ -1,3 +1,5 @@
-- | Copyright: (c) 2024-2025 Joshua Moerman, Open Universiteit
-- SPDX-License-Identifier: EUPL-1.2]
module HsiMethod where
import Data.Trie qualified as Trie

View file

@ -1,3 +1,5 @@
-- | Copyright: (c) 2024-2025 Joshua Moerman, Open Universiteit
-- SPDX-License-Identifier: EUPL-1.2
module LStarMain where
import Bisimulation (bisimulation2)

View file

@ -1,10 +1,13 @@
{-# OPTIONS_GHC -Wno-missing-signatures #-}
-- | Copyright: (c) 2025 Joshua Moerman, Open Universiteit
-- SPDX-License-Identifier: EUPL-1.2
module Main where
import CommonOptions
import DecomposeInput
import DecomposeOutput
import DecomposeTemp
import HsiMethod
import LStarMain
import RandomGen
@ -25,6 +28,7 @@ main = do
case optCommand of
DecomposeOutput options -> mainDecomposeOutput options commonOptions
DecomposeInput options -> mainDecomposeInput options commonOptions
DecomposeTemp options -> mainDecomposeTemp options
HsiMethod options -> mainHsiMethod options
LStar options -> mainLStar options
RandomGen options -> mainRandomGen options
@ -45,6 +49,7 @@ optionsParser =
data Command
= DecomposeOutput DecomposeOutputOptions
| DecomposeInput DecomposeInputOptions
| DecomposeTemp DecomposeTempOptions
| HsiMethod HsiMethodOptions
| LStar LStarOptions
| RandomGen RandomGenOptions
@ -54,6 +59,7 @@ commandParser =
hsubparser
( command "decompose-output" (info (DecomposeOutput <$> decomposeOutputOptionsParser) (progDesc "decompose based on output"))
<> command "decompose-input" (info (DecomposeInput <$> decomposeInputOptionsParser) (progDesc "decompose based on independent inputs"))
<> command "decompose-temp" (info (DecomposeTemp <$> decomposeTempOptionsParser) (progDesc "temporary experiment"))
<> command "hsi-method" (info (HsiMethod <$> hsiMethodOptionsParser) (progDesc "construct HSI test suite from specification dot file"))
<> command "lstar" (info (LStar <$> lStarOptionsParser) (progDesc "little l* playground"))
<> command "random-gen" (info (RandomGen <$> randomGenOptionsParser) (progDesc "generate random parallel compositions"))

View file

@ -1,6 +1,8 @@
{-# LANGUAGE PartialTypeSignatures #-}
{-# OPTIONS_GHC -Wno-partial-type-signatures #-}
-- | Copyright: (c) 2024-2025 Joshua Moerman, Open Universiteit
-- SPDX-License-Identifier: EUPL-1.2
module RandomGen where
import Data.Partition (Block (..))

View file

@ -1,6 +1,6 @@
cabal-version: 2.2
name: mealy-decompose
version: 0.4.0.0
version: 0.4.1.0
license: EUPL-1.2
license-file: LICENSE
author: Joshua Moerman
@ -53,6 +53,7 @@ executable mealy-decompose-main
CommonOptions,
DecomposeInput,
DecomposeOutput,
DecomposeTemp,
HsiMethod,
LStarMain,
RandomGen