Hi all,
What does it mean for Vampire to say "problem is unprovable" after calling Sledgehammer on a goal?
If this means the lemma is counter-satsifiable, then how do I get a counterexample from there?
I tried nitpick and quickcheck with no luck.
(line 1593)
Transposed.thy
Thanks,
Chengsong
I don't have that message, but do not read anything into it. Just read it as a failure to find a proof
In general it is extremely hard from a Sledghammer to conclude about satisfiability, because you would have to check which facts have been translated
BTW in your goal, the fact that you unfold stuff by hand but not SWR that you just defined… you should start with SWR because you have no facts on it
And a final remark, this kind of stuff, you have to write by hand:
lemma [simp]: ‹Owner (CLEntry.block_state (devcache1 (T [a sHost= b]))) =
Owner (CLEntry.block_state (devcache1 T))›
‹Owner (CLEntry.block_state (devcache1 (T ++cl))) =
Owner (CLEntry.block_state (devcache1 T))›
‹Owner (CLEntry.block_state (devcache1 (T [ q -=req] ))) =
Owner (CLEntry.block_state (devcache1 T))›
‹Owner (CLEntry.block_state (devcache2 (T [a sHost= b]))) =
Owner (CLEntry.block_state (devcache2 T))›
‹Owner (CLEntry.block_state (devcache2 (T [ q -=req] ))) =
Owner (CLEntry.block_state (devcache2 T))›
‹Owner (CLEntry.block_state (devcache2 (T [ q' +=reqresp t k l] ))) =
Owner (CLEntry.block_state (devcache2 T))›
‹Owner (CLEntry.block_state (devcache2 (T ++cl))) =
Owner (CLEntry.block_state (devcache2 T))›
‹Owner (CLEntry.block_state (devcache1 (T [ q' +=reqresp t k l] ))) =
Owner (CLEntry.block_state (devcache1 T))›
by (auto simp: change_host_state_def update_clock_def consumeReq_def host_sends_response_def Let_def)
You don't want sledgehammer to inline the proof each time. You want this to be applied by auto
Mathias Fleury said:
BTW in your goal, the fact that you unfold stuff by hand but not SWR that you just defined… you should start with SWR because you have no facts on it
Hi Mathias,
By "you should start with SW[M]R" do you mean adding these definitions to the [simp] set? Or is it more like writing facts like the snippet you showed?
Mathias Fleury said:
And a final remark, this kind of stuff, you have to write by hand:
lemma [simp]: ‹Owner (CLEntry.block_state (devcache1 (T [a sHost= b]))) = Owner (CLEntry.block_state (devcache1 T))› ‹Owner (CLEntry.block_state (devcache1 (T ++cl))) = Owner (CLEntry.block_state (devcache1 T))› ‹Owner (CLEntry.block_state (devcache1 (T [ q -=req] ))) = Owner (CLEntry.block_state (devcache1 T))› ‹Owner (CLEntry.block_state (devcache2 (T [a sHost= b]))) = Owner (CLEntry.block_state (devcache2 T))› ‹Owner (CLEntry.block_state (devcache2 (T [ q -=req] ))) = Owner (CLEntry.block_state (devcache2 T))› ‹Owner (CLEntry.block_state (devcache2 (T [ q' +=reqresp t k l] ))) = Owner (CLEntry.block_state (devcache2 T))› ‹Owner (CLEntry.block_state (devcache2 (T ++cl))) = Owner (CLEntry.block_state (devcache2 T))› ‹Owner (CLEntry.block_state (devcache1 (T [ q' +=reqresp t k l] ))) = Owner (CLEntry.block_state (devcache1 T))› by (auto simp: change_host_state_def update_clock_def consumeReq_def host_sends_response_def Let_def)
Thanks a lot! This cartouche style I have. never seen before :)
Chengsong Tan said:
Mathias Fleury said:
BTW in your goal, the fact that you unfold stuff by hand but not SWR that you just defined… you should start with SWR because you have no facts on it
Hi Mathias,
By "you should start with SW[M]R" do you mean adding these definitions to the [simp] set? Or is it more like writing facts like the snippet you showed?
Currently your code look like:
definition SWR where ...
lemma "... SWR ..."
at this point you know nothing on SWR except for the definition. Hence you have to unfold the definition (you know nothing else!)
Typically, you have:
definition SWR where ...
lemma SWR_simp1[simp]: "..."
unfolding SWR_def by auto
lemma SWR_simp2[simp]: "..."
unfolding SWR_def by auto
lemma SWR_simp3[simp]: "..."
unfolding SWR_def by auto
lemma "... SWR ..."
Here the situation is different: in the last lemma, you actually already know things about SWR
Chengsong Tan said:
Mathias Fleury said:
And a final remark, this kind of stuff, you have to write by hand:
lemma [simp]: ‹Owner (CLEntry.block_state (devcache1 (T [a sHost= b]))) = Owner (CLEntry.block_state (devcache1 T))› ‹Owner (CLEntry.block_state (devcache1 (T ++cl))) = Owner (CLEntry.block_state (devcache1 T))› ‹Owner (CLEntry.block_state (devcache1 (T [ q -=req] ))) = Owner (CLEntry.block_state (devcache1 T))› ‹Owner (CLEntry.block_state (devcache2 (T [a sHost= b]))) = Owner (CLEntry.block_state (devcache2 T))› ‹Owner (CLEntry.block_state (devcache2 (T [ q -=req] ))) = Owner (CLEntry.block_state (devcache2 T))› ‹Owner (CLEntry.block_state (devcache2 (T [ q' +=reqresp t k l] ))) = Owner (CLEntry.block_state (devcache2 T))› ‹Owner (CLEntry.block_state (devcache2 (T ++cl))) = Owner (CLEntry.block_state (devcache2 T))› ‹Owner (CLEntry.block_state (devcache1 (T [ q' +=reqresp t k l] ))) = Owner (CLEntry.block_state (devcache1 T))› by (auto simp: change_host_state_def update_clock_def consumeReq_def host_sends_response_def Let_def)
Thanks a lot! This cartouche style I have. never seen before :)
I like cartouche (I find them less intrusive) and Makarius is actually pushing towards them and there are cases where you have to use them. But: this is currently only a choice.
Chengsong Tan said:
Mathias Fleury said:
BTW in your goal, the fact that you unfold stuff by hand but not SWR that you just defined… you should start with SWR because you have no facts on it
Hi Mathias,
By "you should start with SW[M]R" do you mean adding these definitions to the [simp] set? Or is it more like writing facts like the snippet you showed?
My impression is that you want to work with SWR most of the time (and not go deeper). Hence the simp rules will already take care of some simplifications. But I might be wrong… I did not bother reading the formalization :)
Last updated: Dec 30 2024 at 16:22 UTC