module Modelling.PetriNet.PetriDeadlock.Instance where

import qualified Data.Map                         as M (fromList)
import qualified Data.Set                         as S (fromList)

import Modelling.PetriNet.Reach.Deadlock (DeadlockInstance (..))
import Modelling.PetriNet.Reach.Type    (Capacity (..), Net (..), State (..))
import Data.GraphViz.Commands           (GraphvizCommand (Circo))

examWs2024 :: DeadlockInstance String String
examWs2024 :: DeadlockInstance String String
examWs2024 = DeadlockInstance {
  drawUsing :: GraphvizCommand
drawUsing = GraphvizCommand
Circo,
  minLength :: Int
minLength = Int
14,
  noLongerThan :: Maybe Int
noLongerThan = Maybe Int
forall a. Maybe a
Nothing,
  petriNet :: Net String String
petriNet = Net {
    places :: Set String
places = [String] -> Set String
forall a. Ord a => [a] -> Set a
S.fromList [String
"s1", String
"s2", String
"s3", String
"s4", String
"s5", String
"s6"],
    transitions :: Set String
transitions = [String] -> Set String
forall a. Ord a => [a] -> Set a
S.fromList [String
"t1", String
"t2", String
"t3", String
"t4", String
"t5", String
"t6", String
"t7", String
"t8"],
    connections :: [Connection String String]
connections = [
      ([String
"s3"], String
"t1", [String
"s6"]),
      ([String
"s3"], String
"t2", [String
"s4", String
"s5"]),
      ([String
"s4"], String
"t3", [String
"s2"]),
      ([String
"s5"], String
"t4", [String
"s4"]),
      ([String
"s1"], String
"t5", [String
"s1"]),
      ([String
"s2"], String
"t6", [String
"s1", String
"s3"]),
      ([String
"s2", String
"s6"], String
"t7", [String
"s4", String
"s5"]),
      ([String
"s1"], String
"t8", [String
"s3"])
      ],
    capacity :: Capacity String
capacity = Capacity String
forall s. Capacity s
Unbounded,
    start :: State String
start = State {
      unState :: Map String Int
unState = [(String, Int)] -> Map String Int
forall k a. Ord k => [(k, a)] -> Map k a
M.fromList [
        (String
"s1", Int
1),
        (String
"s2", Int
0),
        (String
"s3", Int
1),
        (String
"s4", Int
1),
        (String
"s5", Int
1),
        (String
"s6", Int
1)
        ]
      }
    },
  showPlaceNames :: Bool
showPlaceNames = Bool
False,
  showSolution :: Bool
showSolution = Bool
True,
  withLengthHint :: Maybe Int
withLengthHint = Int -> Maybe Int
forall a. a -> Maybe a
Just Int
14,
  withMinLengthHint :: Bool
withMinLengthHint = Bool
True
  }