@@ -20,7 +20,7 @@ module Kore.Step.AxiomPatterns
20
20
, extractRewriteAxioms
21
21
, extractRewriteClaims
22
22
, mkRewriteAxiom
23
- , mkFunctionAxiom
23
+ , mkEqualityAxiom
24
24
, refreshRulePattern
25
25
, freeVariables
26
26
, Kore.Step.AxiomPatterns. mapVariables
@@ -253,37 +253,46 @@ patternToAxiomPattern attributes pat =
253
253
Forall_ _ _ child -> patternToAxiomPattern attributes child
254
254
_ -> koreFail " Unsupported pattern type in axiom"
255
255
256
- {- | Construct a 'VerifiedKoreSentence' corresponding to 'RewriteAxiomPattern'.
256
+ {- | Construct a 'VerifiedKoreSentence' corresponding to 'RewriteRule'.
257
+
258
+ The requires clause must be a predicate, i.e. it can occur in any sort.
259
+
257
260
-}
258
261
mkRewriteAxiom
259
262
:: CommonStepPattern Object -- ^ left-hand side
260
263
-> CommonStepPattern Object -- ^ right-hand side
261
- -> Maybe (CommonStepPattern Object ) -- ^ requires clause
264
+ -> Maybe (Sort Object -> CommonStepPattern Object ) -- ^ requires clause
262
265
-> VerifiedKoreSentence
263
266
mkRewriteAxiom lhs rhs requires =
264
267
(asKoreAxiomSentence . toKoreSentenceAxiom . mkAxiom_)
265
268
(mkRewrites
266
- (mkAnd (fromMaybe mkTop_ requires) lhs)
267
- (mkAnd mkTop_ rhs)
269
+ (mkAnd (fromMaybe mkTop requires $ patternSort ) lhs)
270
+ (mkAnd (mkTop patternSort) rhs)
268
271
)
272
+ where
273
+ Valid { patternSort } = extract lhs
274
+
275
+ {- | Construct a 'VerifiedKoreSentence' corresponding to 'EqualityRule'.
276
+
277
+ The requires clause must be a predicate, i.e. it can occur in any sort.
269
278
270
- {- | Construct a 'VerifiedKoreSentence' corresponding to 'FunctionAxiomPattern'.
271
279
-}
272
- -- TODO(virgil): Rename the above since it applies to all sorts of axioms,
273
- -- not only to function-related ones.
274
- mkFunctionAxiom
280
+ mkEqualityAxiom
275
281
:: CommonStepPattern Object -- ^ left-hand side
276
282
-> CommonStepPattern Object -- ^ right-hand side
277
- -> Maybe (CommonStepPattern Object ) -- ^ requires clause
283
+ -> Maybe (Sort Object -> CommonStepPattern Object ) -- ^ requires clause
278
284
-> VerifiedKoreSentence
279
- mkFunctionAxiom lhs rhs requires =
280
- (asKoreAxiomSentence . toKoreSentenceAxiom . mkAxiom_ )
285
+ mkEqualityAxiom lhs rhs requires =
286
+ (asKoreAxiomSentence . toKoreSentenceAxiom . mkAxiom [sortVariableR] )
281
287
(case requires of
282
- Just requires' -> mkImplies requires' (mkAnd function mkTop_)
288
+ Just requires' ->
289
+ mkImplies (requires' sortR) (mkAnd function mkTop_)
283
290
Nothing -> function
284
291
)
285
292
where
286
- function = mkEquals_ lhs rhs
293
+ sortVariableR = SortVariable " R"
294
+ sortR = SortVariableSort sortVariableR
295
+ function = mkEquals sortR lhs rhs
287
296
288
297
{- | Refresh the variables of a 'RulePattern'.
289
298
0 commit comments