runtimeverification / k

K Framework Tools 7.0
BSD 3-Clause "New" or "Revised" License
444 stars 147 forks source link

Cut on circularity rule application, better error message #4445

Closed ehildenb closed 3 months ago

ehildenb commented 3 months ago

Related: https://github.com/runtimeverification/k/issues/4359 Related: https://github.com/runtimeverification/haskell-backend/issues/3912

This PR is to support passing the final tests on the RPC prover in KEVM. In particular:

PetarMax commented 3 months ago

When doing KCFGExlore.section_edge, we were previously just dropping the rule labels of the applied rules on the new edges. Now we save them and store them appropriately on the KCFG.

This is a bug fix then, great.

When discharging a circularity proof obligation, we always consider the circularity rule itself to be a cut-point rule. That's because we need the state immediately following the application of the circularity rule to compare it to subsumption into the initial target state.

This is also essential and it's excellent that it's automatic now.

When discharging a circularity proof obligation, if we have not made any progress yet on the proof, we first take an execution step of depth 1 before resuming normal execute depth. This is because we cannot inject the circularity rule for consideration until we've made some progress, but want to enable it for consideration as early as possible.

Is it reasonable to expect the application of a circularity while executing the first request from the initial node, without any branching first? I think that's what this additional step effectively enables. What would such a circularity mean?

ehildenb commented 3 months ago

@PetarMax in case of a circularity, it will first do one step of execution (to make progress), which will mean it's no longer at the loop head in teh LHS of the rule. The next time it comes to the loop head, the rule will be available as a circularity, so instead of branching (into the loop and out of the loop), it will immediately attempt to take the circularity rule to the conclusion (the RHS). It still needs to check that the reached state is subsumed into the original RHS of the claim at that point.

PetarMax commented 3 months ago

Looks good to me.