@@ -4,6 +4,7 @@ License : NCSA
44
55-}
66
7+ {-# LANGUAGE Strict #-}
78module Kore.Equation.Application
89 ( attemptEquation
910 , AttemptEquationResult
@@ -113,10 +114,6 @@ import Kore.TopBottom
113114import Kore.Unparser
114115 ( Unparse (.. )
115116 )
116- import Kore.Variables.Target
117- ( Target
118- )
119- import qualified Kore.Variables.Target as Target
120117import Log
121118 ( Entry (.. )
122119 , MonadLog
@@ -155,7 +152,7 @@ attemptEquation
155152 => MonadSimplify simplifier
156153 => InternalVariable variable
157154 => SideCondition variable
158- -> TermLike ( Target variable )
155+ -> TermLike variable
159156 -> Equation variable
160157 -> simplifier (AttemptEquationResult variable )
161158attemptEquation sideCondition termLike equation =
@@ -179,20 +176,16 @@ attemptEquation sideCondition termLike equation =
179176 & whileMatch
180177 (equation', predicate) <-
181178 applyAndSelectMatchResult matchResults
182- let matchPredicate' =
183- Predicate. mapVariables
184- (pure Target. unTarget)
185- matchPredicate
186179 return
187180 ( equation'
188- , makeAndPredicate predicate matchPredicate'
181+ , makeAndPredicate predicate matchPredicate
189182 )
190183 let Equation { requires } = equation'
191184 checkRequires sideCondition predicate requires & whileCheckRequires
192185 let Equation { right, ensures } = equation'
193186 return $ Pattern. withCondition right $ from @ (Predicate _ ) ensures
194187 where
195- equationRenamed = targetEquationVariables sideCondition termLike equation
188+ equationRenamed = refreshVariables sideCondition termLike equation
196189 matchError =
197190 MatchError
198191 { matchTerm = termLike
@@ -203,7 +196,7 @@ attemptEquation sideCondition termLike equation =
203196 & MaybeT & noteT matchError
204197
205198 applyAndSelectMatchResult
206- :: [MatchResult ( Target variable ) ]
199+ :: [MatchResult variable ]
207200 -> ExceptT
208201 (AttemptEquationError variable )
209202 simplifier
@@ -234,13 +227,13 @@ applySubstitutionAndSimplify
234227 :: HasCallStack
235228 => MonadSimplify simplifier
236229 => InternalVariable variable
237- => Predicate ( Target variable )
238- -> Maybe (Predicate ( Target variable ) )
239- -> Map (SomeVariableName ( Target variable )) (TermLike ( Target variable ) )
230+ => Predicate variable
231+ -> Maybe (Predicate variable )
232+ -> Map (SomeVariableName variable ) (TermLike variable )
240233 -> ExceptT
241- (MatchError ( Target variable ) )
234+ (MatchError variable )
242235 simplifier
243- [MatchResult ( Target variable ) ]
236+ [MatchResult variable ]
244237applySubstitutionAndSimplify
245238 argument
246239 antiLeft
@@ -284,9 +277,9 @@ applyMatchResult
284277 :: forall monad variable
285278 . Monad monad
286279 => InternalVariable variable
287- => Equation ( Target variable )
288- -> MatchResult ( Target variable )
289- -> ExceptT (ApplyMatchResultErrors ( Target variable ) ) monad
280+ => Equation variable
281+ -> MatchResult variable
282+ -> ExceptT (ApplyMatchResultErrors variable ) monad
290283 (Equation variable , Predicate variable )
291284applyMatchResult equation matchResult@ (predicate, substitution) = do
292285 case errors of
@@ -297,21 +290,28 @@ applyMatchResult equation matchResult@(predicate, substitution) = do
297290 }
298291 _ -> return ()
299292 let predicate' =
300- Predicate. substitute substitution predicate
301- & Predicate. mapVariables (pure Target. unTarget)
293+ Predicate. substitute orientedSubstitution predicate
302294 equation' =
303- Equation. substitute substitution equation
304- & Equation. mapVariables (pure Target. unTarget)
295+ Equation. substitute orientedSubstitution equation
305296 return (equation', predicate')
306297 where
307- equationVariables = freeVariables equation & FreeVariables. toList
298+ orientedSubstitution = Substitution. orientSubstitution occursInEquation substitution
299+
300+ equationVariables = freeVariables equation
301+
302+ occursInEquation :: (SomeVariableName variable -> Bool )
303+ occursInEquation = \ someVariableName ->
304+ Set. member someVariableName equationVariableNames
305+
306+ equationVariableNames =
307+ Set. map variableName (FreeVariables. toSet equationVariables)
308308
309309 errors =
310- concatMap checkVariable equationVariables
311- <> checkNonTargetVariables
310+ concatMap checkVariable ( FreeVariables. toList equationVariables)
311+ <> checkNotInEquation
312312
313313 checkVariable Variable { variableName } =
314- case Map. lookup variableName substitution of
314+ case Map. lookup variableName orientedSubstitution of
315315 Nothing -> [NotMatched variableName]
316316 Just termLike ->
317317 checkConcreteVariable variableName termLike
@@ -331,9 +331,9 @@ applyMatchResult equation matchResult@(predicate, substitution) = do
331331 | otherwise
332332 = empty
333333
334- checkNonTargetVariables =
334+ checkNotInEquation =
335335 NonMatchingSubstitution
336- <$> filter Target. isSomeNonTargetName (Map. keys substitution )
336+ <$> filter ( not . occursInEquation) (Map. keys orientedSubstitution )
337337
338338 Equation { attributes } = equation
339339 concretes =
@@ -400,37 +400,27 @@ checkRequires sideCondition predicate requires =
400400 . Simplifier. localSimplifierAxioms (const mempty )
401401 withAxioms = id
402402
403- {- | Make the 'Equation' variables distinct from the initial pattern.
404-
405- The variables are marked 'Target' and renamed to avoid any variables in the
406- 'SideCondition' or the 'TermLike'.
407-
408- -}
409- targetEquationVariables
403+ refreshVariables
410404 :: forall variable
411405 . InternalVariable variable
412406 => SideCondition variable
413- -> TermLike ( Target variable )
407+ -> TermLike variable
414408 -> Equation variable
415- -> Equation ( Target variable )
416- targetEquationVariables sideCondition initial =
409+ -> Equation variable
410+ refreshVariables sideCondition initial =
417411 snd
418412 . Equation. refreshVariables avoiding
419- . Equation. mapVariables Target. mkUnifiedTarget
420413 where
421414 avoiding = sideConditionVariables <> freeVariables initial
422- sideConditionVariables =
423- FreeVariables. mapFreeVariables
424- Target. mkUnifiedNonTarget
425- $ freeVariables sideCondition
415+ sideConditionVariables = freeVariables sideCondition
426416
427417-- * Errors
428418
429419{- | Errors that can occur during 'attemptEquation'.
430420 -}
431421data AttemptEquationError variable
432- = WhileMatch ! (MatchError ( Target variable ) )
433- | WhileApplyMatchResult ! (ApplyMatchResultErrors ( Target variable ) )
422+ = WhileMatch ! (MatchError variable )
423+ | WhileApplyMatchResult ! (ApplyMatchResultErrors variable )
434424 | WhileCheckRequires ! (CheckRequiresError variable )
435425 deriving (Eq , Ord , Show )
436426 deriving (GHC.Generic )
@@ -445,27 +435,25 @@ mapAttemptEquationErrorVariables
445435mapAttemptEquationErrorVariables adj =
446436 \ case
447437 WhileMatch matchError ->
448- WhileMatch $ mapMatchErrorVariables adjTarget matchError
438+ WhileMatch $ mapMatchErrorVariables adj matchError
449439 WhileApplyMatchResult applyMatchResultErrors ->
450440 WhileApplyMatchResult
451441 $ mapApplyMatchResultErrorsVariables
452- adjTarget
442+ adj
453443 applyMatchResultErrors
454444 WhileCheckRequires checkRequiresError ->
455445 WhileCheckRequires
456446 $ mapCheckRequiresErrorVariables adj checkRequiresError
457- where
458- adjTarget = fmap <$> adj
459447
460448whileMatch
461449 :: Functor monad
462- => ExceptT (MatchError ( Target variable ) ) monad a
450+ => ExceptT (MatchError variable ) monad a
463451 -> ExceptT (AttemptEquationError variable ) monad a
464452whileMatch = withExceptT WhileMatch
465453
466454whileApplyMatchResult
467455 :: Functor monad
468- => ExceptT (ApplyMatchResultErrors ( Target variable ) ) monad a
456+ => ExceptT (ApplyMatchResultErrors variable ) monad a
469457 -> ExceptT (AttemptEquationError variable ) monad a
470458whileApplyMatchResult = withExceptT WhileApplyMatchResult
471459
0 commit comments