runtimeverification / k

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

Sunset `kore-exec`, remove its uses in `kprove` #4359

Open geo2a opened 4 months ago

geo2a commented 4 months ago

The transition to the RPC-based provers, that are based on the kore-rpc and kore-rpc-booster is complete. The old monolithic prover, kore-exec, is only used for regression/integration testing at as point, and I'd argue that there are no production uses of it. We would like to sunset kore-exec and make the RPC servers the only entry-points to the Haskell backend.

The kprove executable uses the Haskell's backend kore-exec to prove K specifications. However, kprove is also used for converting specification to JSON with --emit-json-spec. The second use-case is required, but I'd argue that the first is not.

The main challenge is of course the integration test suites:

I'd like to start the discussion!

ehildenb commented 4 months ago

KEVM is still testing for tests that aren't passing using the RPC server:

There are many tests that have not been ported, many of them are because we're missing circularity or depends(...) attributes on the claims (the old prover assumed all rules were circularities and dependencies, the new one is explicit). But there are some deeper failures too.

Baltoli commented 4 months ago

The pain of maintaining kore-exec at this point is possibly not quite enough to go through the process of fixing the failing tests in KEVM, but we might want to come back to fix this in the future.

Baltoli commented 3 months ago

The KEVM tests are very nearly ready for this to happen; we need to do similarly for the integration test suite and tutorial code.

Baltoli commented 3 months ago

Specifically, the regression-new test suite in Pyk

Baltoli commented 3 months ago

4194

Baltoli commented 3 months ago

Query: how best to get a single failing node out of the prover tests at the point they get stuck? The translation we need is from:

< APRProof: A1-SPEC.s1
<     status: ProofStatus.FAILED
<     admitted: False
<     nodes: 4
<     pending: 0
<     failing: 1
<     vacuous: 0
<     stuck: 1
<     terminal: 0
<     refuted: 0
<     bounded: 0
<     execution time: 0s
< Subproofs: 0
< 1 Failure nodes. (0 pending and 1 failing)
<
< Failing nodes:
<
<   Node id: 3
<   Failure reason:
<     Matching failed.
<     The following cells failed matching individually (antecedent #Implies consequent):
<     K_CELL: end ( barConcrete ( X:Int ) ) #Implies end ( baz ( X:Int ) )
<   Path condition:
<     #Top
<   Failed to generate a model.
<
< Join the Runtime Verification Discord server for support: https://discord.gg/CurfmXNtbN
---
> kore-exec: [] Warning (WarnStuckClaimState):
>     The configuration's term unifies with the destination's term, but the implication check between the conditions has failed. Location: a1-spec.k:7:1-8:18
> Context:
>     (InfoReachability) while checking the implication
>   #Ceil ( barConcrete ( X ) )
> #And
>   #Not ( #Ceil ( baz ( X ) )
>   #And
>     {
>       barConcrete ( X )
>     #Equals
>       baz ( X )
>     } )
> #And
>   <k>
>     end ( barConcrete ( X ) ) ~> .K
>   </k>
> #And
>   {
>     true
>   #Equals
>     X >Int 0
>   }
> [Error] Prover: backend terminated because the configuration cannot be rewritten further. See output for more details.
make: *** [a1-spec.k] Error 1