From 56ad54ecb0f0a2e93378295ee0d9abd0486316c0 Mon Sep 17 00:00:00 2001 From: Joshua Moerman Date: Mon, 25 May 2020 16:33:03 +0200 Subject: [PATCH] Fixes bug that NL* may return sink states --- NominalAngluin.cabal | 2 ++ src/Bollig.hs | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/NominalAngluin.cabal b/NominalAngluin.cabal index 2263cf8..47bacf8 100644 --- a/NominalAngluin.cabal +++ b/NominalAngluin.cabal @@ -32,6 +32,7 @@ executable NominalAngluin NLambda >= 1.1 hs-source-dirs: src default-language: Haskell2010 + ghc-options: -O2 executable NominalAngluin2 ghc-options: @@ -61,3 +62,4 @@ executable NominalAngluin2 NLambda >= 1.1 hs-source-dirs: src default-language: Haskell2010 + ghc-options: -O2 diff --git a/src/Bollig.hs b/src/Bollig.hs index e74b8fd..9752cc9 100644 --- a/src/Bollig.hs +++ b/src/Bollig.hs @@ -22,7 +22,7 @@ rowUnion set = Prelude.uncurry union . setTrueFalse . partition (\(_, f) -> f) $ boolImplies :: Bool -> Bool -> Bool boolImplies True False = False -boolImplies _ _ = True +boolImplies _ _ = True sublang :: NominalType i => BRow i -> BRow i -> Formula sublang r1 r2 = forAll fromBool $ pairsWithFilter (\(i1, f1) (i2, f2) -> maybeIf (i1 `eq` i2) (f1 `boolImplies` f2)) r1 r2 @@ -61,7 +61,8 @@ constructHypothesisBollig State{..} = automaton q a d i f f = filter (\r -> singleton True `eq` mapFilter (\(i,b) -> maybeIf (i `eq` []) b) r) q d0 = triplesWithFilter (\s a s2 -> maybeIf (row t s2 `sublang` rowa t s a) (row t s, a, row t s2)) ss aa ss d = filter (\(q1,a,q2) -> q1 `member` q /\ q2 `member` q) d0 - primesUpp = filter (\r -> r `neq` rowUnion (sublangs r (allRows \\ orbit [] r))) allRowsUpp + primesUpp = filter (\r -> nonEmpty r /\ r `neq` rowUnion (sublangs r (allRows \\ orbit [] r))) allRowsUpp + nonEmpty = isNotEmpty . filter (fromBool . Prelude.snd) allRowsUpp = map (row t) ss allRows = allRowsUpp `union` map (row t) ssa