1
Fork 0
mirror of https://github.com/Jaxan/ons-hs.git synced 2025-04-27 14:47:45 +02:00

Small things

This commit is contained in:
Joshua Moerman 2019-01-18 16:25:39 +01:00
parent 7a8591f002
commit 38ddfa5f48
3 changed files with 6 additions and 4 deletions

View file

@ -124,12 +124,11 @@ learn mq eq = do
learn mq eq learn mq eq
True -> do True -> do
-- Also consistent! Let's build a minimal automaton! -- Also consistent! Let's build a minimal automaton!
let equiv = Set.fromOrbitList . filter (\(s, t) -> equalRows s t suffs table) $ product prefs prefs let (f, st, _) = quotientf 0 (\s t -> s == t || equalRows s t suffs table) prefs
(f, s) = quotient equiv prefs
trans = Map.fromList . toList . map (\(s, t) -> (s, f ! t)) . filter (\(s, t) -> equalRows s t suffs table) $ product prefsExt prefs trans = Map.fromList . toList . map (\(s, t) -> (s, f ! t)) . filter (\(s, t) -> equalRows s t suffs table) $ product prefsExt prefs
trans2 pa = if pa `elem` prefsExt then trans ! pa else f ! pa trans2 pa = if pa `elem` prefsExt then trans ! pa else f ! pa
hypothesis = Automaton hypothesis = Automaton
{ states = s { states = map fst st
, initialState = f ! [] , initialState = f ! []
, acceptance = Map.fromList . toList . map (\p -> (f ! p, table ! p)) $ prefs , acceptance = Map.fromList . toList . map (\p -> (f ! p, table ! p)) $ prefs
, transition = Map.fromList . toList . map (\(p, a) -> ((f ! p, a), trans2 (ext p a))) $ product prefs alph , transition = Map.fromList . toList . map (\(p, a) -> ((f ! p, a), trans2 (ext p a))) $ product prefs alph

View file

@ -76,8 +76,8 @@ minimiseB Automaton{..} alph = Automaton
main :: IO () main :: IO ()
main = do main = do
-- putStrLn . toStr $ (doubleWordAut 4)
putStrLn . toStr $ (minimiseB (doubleWordAut 4) rationals) putStrLn . toStr $ (minimiseB (doubleWordAut 4) rationals)
-- putStrLn . toStr $ (minimiseB (fifoAut 4) fifoAlph)
-- All example automata follow below -- All example automata follow below

View file

@ -59,6 +59,9 @@ lookup x (EqMap m) = mapelInv x <$> Map.lookup (toOrbit x) m
(!) :: (Nominal k, Ord (Orbit k), Nominal v) => EquivariantMap k v -> k -> v (!) :: (Nominal k, Ord (Orbit k), Nominal v) => EquivariantMap k v -> k -> v
(!) m k = fromMaybe undefined (EquivariantMap.lookup k m) (!) m k = fromMaybe undefined (EquivariantMap.lookup k m)
(?) :: (Nominal k, Ord (Orbit k), Nominal v) => EquivariantMap k v -> k -> Maybe v
(?) m k = EquivariantMap.lookup k m
-- Construction -- Construction
empty :: EquivariantMap k v empty :: EquivariantMap k v