-
Notifications
You must be signed in to change notification settings - Fork 52
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
Subsumption and Subsumption Resolution via SAT solving #546
Conversation
Oh damn... most of my comments were supposed to be answers to @MichaelRawson's comments, but it looks like github lost the connection somehow? Edit: please click on "View reviewed changes" above to see the context (next to "JakobR reviewed ...") |
Thanks for the hard work, @JakobR ! That was quick. I've replied inline where still possible, I guess GitHub doesn't like the big merges so much. Others:
No need, thanks for the explanation.
Keep the comment for now, it gives at least the intuition! |
…:22: error: static assertion failed: VDEBUG and NDEBUG are not synchronized
I think this is done from my side. I'm repeating one unresolved point buried in the inline comments, but I think it's a minor issue:
|
Guys, my experiments suggest that something does not quite work the way it should, at least not for my favourite (pseudo-)default strategy The comparison for
which is close, but's it's quite a bit worse at the 10000 mark:
(I plan to generate a full cactus plot comparison soon). However, the main suspicious thing is the number of activations needed by the two vampires to succeed on the 9307 solved (in 100000) by both, namely: 53283652 vs 53633200. Before I start digging deeper, could you please sum up how "the Loop" differs from the previous solution we had in Vampire? Also, what would be your favourite platform for a bit of discussion on this? (Are you, e.g., getting notifications from our zulip?) |
Hi Martin,
I don't know what is meant here. Do you mean the number of subsumption resolution calls?
Previously, Vampire would first check all the subsumptions and then, if it failed, all the subsumption resolutions. However, since setting up the problems is expensive, we have changed the loop to perform both subsumption and subsumption resolution on each instance. Old: New: The drawback is that if a clause is subsumed in the new version, we will perform useless subsumption resolution checks that the old loop does not. This could be a problem if a certain strategy gets a lot of subsumed clauses. I will have a look to make sure nothing fishy is happening. But what is curious is that the optimization seemed to be very beneficial on otter. Another thing that might change the results is that there might be more than one solution for subsumption resolution. Therefore the search is affected by the method employed.
GitHub and Zulip are both fine. But on Zulip I have 2 accounts (not super convenient, I know). I will answer faster on the one where I have a profile picture set. Zulip might be a bit more spontaneous. Best, |
Hi Robin,
I am not sure I understood your message.
Are you proposing to change the main loop because you think SAT-based
subsumption and subsumption resolution should be made the only way to do
these two operations in Vampire?
Best, Andrei
…On Tue, 16 Jul 2024 at 17:20, Robin Coutelier ***@***.***> wrote:
Hi Martin,
However, the main suspicious thing is the number of activations needed by
the two vampires to succeed on the 9307 solved (in 100000) by both, namely:
53 283 652 vs 53 633 200.
I don't know what is meant here. Do you mean the number of subsumption
resolution calls?
If yes, then it makes sense. See below the difference between the old and
new loops.
Before I start digging deeper, could you please sum up how "the Loop"
differs from the previous solution we had in Vampire?
Previously, Vampire would first check all the subsumptions and then, if it
failed, all the subsumption resolutions. However, since setting up the
problems is expensive, we have changed the loop to perform both subsumption
and subsumption resolution on each instance.
Old:
For each candidate clause:
Check subsumption
For each candidate clause:
Check subsumption resolution
New:
For each candidate clause:
Check subsumption
Check subsumption resolution
The drawback is that if a clause is subsumed in the new version, we will
perform useless subsumption resolution checks that the old loop does not.
The advantage is that we set up both problems simultaneously, saving on
pruning, matching, and index time.
This could be a problem if a certain strategy gets a lot of subsumed
clauses.
I will have a look to make sure nothing fishy is happening. But what is
curious is that the optimization seemed to be very beneficial on otter.
Another thing that might change the results is that there might be more
than one solution for subsumption resolution. Therefore the search is
affected by the method employed.
Also, what would be your favourite platform for a bit of discussion on
this? (Are you, e.g., getting notifications from our zulip?)
GitHub and Zulip are both fine. But on Zulip I have 2 accounts (not super
convenient, I know). I will answer faster on the one where I have a profile
picture set. Zulip might be a bit more spontaneous.
Best,
Robin
—
Reply to this email directly, view it on GitHub
<#546 (comment)>, or
unsubscribe
<https://github.com/notifications/unsubscribe-auth/ABVY4BIRAVMOY6AGAM55RCTZMVB57AVCNFSM6AAAAABGPDHLGGVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDEMZRGMZTQMJVGQ>
.
You are receiving this because you are subscribed to this thread.Message
ID: ***@***.***>
|
I just deleted a line
since we don't have any STLAllocator anymore. @JakobR , could that cause trouble? |
b26fa9f
to
d087a9a
Compare
d087a9a
to
69ddc23
Compare
Yes, this is fine to remove! (In an earlier version, it was possible to change the SAT solver's allocator. This assertion checked that when used within Vampire, the correct allocator is set.) |
In this pull request, we completely replace the code for the subsumption and subsumption resolution module by an implementation using a SAT solver to encode the problems.
The papers:
explain the details of the encodings as well as provide proofs of their soundness.
The most important parts of the PR are the following: