Skip to content

Commit 1fcb61b

Browse files
committed
Simplify and clean up findSimplifiableEq. #148
1 parent f6af11b commit 1fcb61b

File tree

1 file changed

+14
-13
lines changed

1 file changed

+14
-13
lines changed

src/Language/CQL/Term.hs

+14-13
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
3939

4040
module Language.CQL.Term where
4141

42+
import Control.Applicative ((<|>))
4243
import Control.DeepSeq
4344
import Data.Map.Merge.Strict
4445
import Data.Map.Strict as Map hiding (foldr, size)
@@ -268,26 +269,26 @@ occurs h x = case x of
268269
Sym h' as -> h == HSym h' || any (occurs h) as
269270

270271
-- | If there is one, finds an equation of the form empty |- @gen/sk = term@,
272+
-- | If there is one, finds an equation of the form @empty |- gen/sk = term@,
271273
-- where @gen@ does not occur in @term@.
272-
findSimplifiableEqs
274+
findSimplifiableEq
273275
:: (Eq ty, Eq sym, Eq en, Eq fk, Eq att, Eq gen, Eq sk)
274276
=> Theory var ty sym en fk att gen sk
275277
-> Maybe (Head ty sym en fk att gen sk, Term var ty sym en fk att gen sk)
276-
findSimplifiableEqs = procEqs . Set.toList
278+
findSimplifiableEq = goEqs . Set.toList
277279
where
280+
goEqs [] = Nothing
281+
goEqs ((m, _ ):tl) | not (Map.null m) = goEqs tl
282+
goEqs ((_, eq):tl) = goEq eq <|> goEqs tl
283+
284+
goEq (EQ (lhs, rhs)) = g lhs rhs <|> g rhs lhs
285+
278286
g (Var _) _ = Nothing
279-
g (Sk y) t = if occurs (HSk y) t then Nothing else Just (HSk y, t)
280-
g (Gen y) t = if occurs (HGen y) t then Nothing else Just (HGen y, t)
287+
g (Sk y) t = if HSk y `occurs` t then Nothing else Just (HSk y, t)
288+
g (Gen y) t = if HGen y `occurs` t then Nothing else Just (HGen y, t)
281289
g (Sym _ []) _ = Nothing
282-
g _ _ = Nothing
290+
g _ _ = Nothing
283291

284-
procEqs [] = Nothing
285-
procEqs ((m, _):tl) | not (Map.null m) = procEqs tl
286-
procEqs ((_, EQ (lhs, rhs)):tl) = case g lhs rhs of
287-
Nothing -> case g rhs lhs of
288-
Nothing -> procEqs tl
289-
Just y -> Just y
290-
Just y -> Just y
291292

292293
-- | Replaces a symbol by a term in a term.
293294
replace
@@ -331,7 +332,7 @@ simplifyTheoryStep
331332
:: (MultiTyMap '[Ord] '[var, ty, sym, en, fk, att, gen, sk])
332333
=> Theory var ty sym en fk att gen sk
333334
-> Maybe (Theory var ty sym en fk att gen sk, (Head ty sym en fk att gen sk, Term var ty sym en fk att gen sk))
334-
simplifyTheoryStep eqs = case findSimplifiableEqs eqs of
335+
simplifyTheoryStep eqs = case findSimplifiableEq eqs of
335336
Nothing -> Nothing
336337
Just (toRemove, replacer) -> let
337338
eqs2 = Set.map (\(ctx, EQ (lhs, rhs)) -> (ctx, EQ (replace toRemove replacer lhs, replace toRemove replacer rhs))) eqs

0 commit comments

Comments
 (0)