Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add option to ignore models during solving #215

Merged
merged 5 commits into from
Aug 13, 2024

Conversation

sankalpgambhir
Copy link
Member

@sankalpgambhir sankalpgambhir commented Aug 9, 2024

Adding option --ignore-models, and relevant support for it in the unrolling solver.

Description (through Stainless):

--ignore-models[=true|false]          Do not request models from solvers. (default: false)
                                      Overrides and disables check-models and feeling-lucky.

As expected, models cannot be checked if we do not ask the solver for them in the first place. Since feeling-lucky also uses models during the proof-checking phase in unrolling, it is also explicitly bypassed. The same models are also used for guiding further unrolling by discovering paths to prioritize, and thus this guidance is also bypassed here while the option is turned on.

With the option on, counterexamples are replaced by (Empty Model). Example on a bolts example changed to be broken:

[info] [Warning ] /tmp/bolts/algorithms/sorting/QuickSortListOfBigInt.scala:31:21:  => INVALID
[info]                  case Nil() => Nil[BigInt]()
[info]                                ^^^^^^^^^^^^^
[info] [Warning ] Found counter-example:
[info] [Warning ]   (Empty model)

Functionality should be complete now. I have noticed no change to a slight improvement on smaller examples from bolts/algorithms, and I am continuing to do a more comprehensive check.

I am trying to see what would be reasonable tests to have for this option. Will request merging after that.

Feel free to check and comment on this!

@sankalpgambhir
Copy link
Member Author

Note that with this, the problematic example in epfl-lara/stainless#1549 can be checked:

sbt:stainless-dotty> run --solvers=smt-cvc5 /tmp/Dispenser.scala --vc-cache=false --ignore-models
[info] running (fork) stainless.Main --ignore-models --solvers=smt-cvc5 /tmp/Dispenser.scala
[...] // trimmed
[info] [  Info  ] ╟┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄╢
[info] [  Info  ]  total: 44   valid: 44   (0 from cache, 1 trivial) invalid: 0    unknown: 0    time:   13.43                                                   
[info] [  Info  ] ╚═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝

Without --ignore-models, an exception is thrown for now, as is described in the issue.

@sankalpgambhir
Copy link
Member Author

(Rebased to match with main)

@vkuncak vkuncak marked this pull request as ready for review August 13, 2024 12:32
@vkuncak vkuncak merged commit ca9e9e8 into epfl-lara:main Aug 13, 2024
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants