Skip to content

Commit 2faf6c1

Browse files
Add --smt-arg to kore (#4025)
Fixes #4024 --------- Co-authored-by: rv-jenkins <[email protected]>
1 parent edde779 commit 2faf6c1

File tree

4 files changed

+19
-2
lines changed

4 files changed

+19
-2
lines changed

booster/tools/booster/Server.hs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -486,6 +486,7 @@ translateSMTOpts = \case
486486
, retryLimit =
487487
KoreSMT.RetryLimit . maybe Unlimited (Limit . fromIntegral) $ smtOpts.retryLimit
488488
, tactic = fmap translateSExpr smtOpts.tactic
489+
, args = smtOpts.args
489490
}
490491
Nothing ->
491492
defaultKoreSolverOptions{solver = KoreSMT.None}
@@ -499,6 +500,7 @@ translateSMTOpts = \case
499500
, prelude = KoreSMT.Prelude Nothing
500501
, solver = KoreSMT.Z3
501502
, tactic = Nothing
503+
, args = []
502504
}
503505
translateSExpr :: SMT.SExpr -> KoreSMT.SExpr
504506
translateSExpr (SMT.Atom (SMT.SMTId x)) = KoreSMT.Atom (Text.decodeUtf8 x)
@@ -533,7 +535,7 @@ mkKoreServer [email protected]{logAction} CLOptions{definitionFile, mainMo
533535
, loggerEnv
534536
}
535537
where
536-
KoreSMT.KoreSolverOptions{timeOut, retryLimit, tactic} = koreSolverOptions
538+
KoreSMT.KoreSolverOptions{timeOut, retryLimit, tactic, args} = koreSolverOptions
537539
smtConfig :: KoreSMT.Config
538540
smtConfig =
539541
KoreSMT.defaultConfig
@@ -542,6 +544,7 @@ mkKoreServer [email protected]{logAction} CLOptions{definitionFile, mainMo
542544
KoreSMT.timeOut = timeOut
543545
, KoreSMT.retryLimit = retryLimit
544546
, KoreSMT.tactic = tactic
547+
, KoreSMT.arguments = args <> KoreSMT.defaultConfig.arguments
545548
}
546549

547550
-- SMT solver with user declared lemmas

dev-tools/kore-rpc-dev/Server.hs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,7 @@ translateSMTOpts = \case
304304
, retryLimit =
305305
KoreSMT.RetryLimit . maybe Unlimited (Limit . fromIntegral) $ smtOpts.retryLimit
306306
, tactic = fmap translateSExpr smtOpts.tactic
307+
, args = smtOpts.args
307308
}
308309
Nothing ->
309310
defaultKoreSolverOptions{solver = KoreSMT.None}
@@ -317,6 +318,7 @@ translateSMTOpts = \case
317318
, prelude = KoreSMT.Prelude Nothing
318319
, solver = KoreSMT.Z3
319320
, tactic = Nothing
321+
, args = []
320322
}
321323
translateSExpr :: SMT.SExpr -> KoreSMT.SExpr
322324
translateSExpr (SMT.Atom (SMT.SMTId x)) = KoreSMT.Atom (Text.decodeUtf8 x)

kore/app/share/GlobalMain.hs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,7 @@ import SMT (
188188
SMT,
189189
)
190190
import SMT qualified
191+
import SMT qualified as SMT.Config (Config (..))
191192
import System.Clock (
192193
Clock (Monotonic),
193194
diffTimeSpec,
@@ -581,14 +582,15 @@ execute options metadataTools lemmas worker =
581582
(declareSMTLemmas metadataTools lemmas)
582583
worker
583584
withoutSMT = SMT.runNoSMT worker
584-
KoreSolverOptions{timeOut, rLimit, resetInterval, prelude, solver} =
585+
KoreSolverOptions{timeOut, rLimit, resetInterval, prelude, solver, args} =
585586
options
586587
config =
587588
SMT.defaultConfig
588589
{ SMT.timeOut = timeOut
589590
, SMT.rLimit = rLimit
590591
, SMT.resetInterval = resetInterval
591592
, SMT.prelude = prelude
593+
, SMT.arguments = args <> SMT.Config.arguments SMT.defaultConfig
592594
}
593595

594596
data SerializedDefinition = SerializedDefinition

kore/src/Options/SMT.hs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ data KoreSolverOptions = KoreSolverOptions
6060
, prelude :: !Prelude
6161
, solver :: !Solver
6262
, tactic :: !(Maybe SExpr)
63+
, args :: [String]
6364
}
6465

6566
parseKoreSolverOptions :: Parser KoreSolverOptions
@@ -72,6 +73,7 @@ parseKoreSolverOptions =
7273
<*> parsePrelude
7374
<*> parseSolver
7475
<*> parseTactic
76+
<*> parseArgs
7577
where
7678
parseTimeOut =
7779
option
@@ -128,6 +130,14 @@ parseKoreSolverOptions =
128130
<> value defaultTactic
129131
)
130132

133+
parseArgs =
134+
many $
135+
strOption
136+
( metavar "SMT_ARG"
137+
<> long "smt-arg"
138+
<> help "Argument passed to Z3"
139+
)
140+
131141
SMT.Config
132142
{ timeOut = defaultTimeOut
133143
, retryLimit = defaultRetryLimit

0 commit comments

Comments
 (0)