Skip to content

kprove with fresh variables #3450

@Baltoli

Description

@Baltoli

A user on Discord reports the following:

test.k:

module TEST-SYNTAX
    syntax Pgm ::= "quux"
endmodule

module TEST
    imports TEST-SYNTAX
    imports INT

    configuration <k> $PGM:Pgm </k>
        <c1> . </c1>
        <c2> . </c2>

    rule <k> quux => . </k>
        <c1> . => !C:Int </c1>
        <c2> . => !C:Int </c2>
endmodule

test-spec.k

requires "test.k"

module TEST-SPEC-SYNTAX
    imports TEST-SYNTAX

endmodule

module VERIFICATION
    imports K-EQUAL
    imports TEST-SPEC-SYNTAX
    imports TEST

endmodule

module TEST-SPEC
    imports VERIFICATION

    claim <k> quux => . </k>
        <c1> . => ?C </c1>
        <c2> . => ?C </c2>
endmodule

kprove output:

kore-exec: [384063] Warning (WarnStuckClaimState):
    The configuration's term unifies with the destination's term, but the implication check between the conditions has failed. Location: /mnt/c/Users/brown/Code/ktest/test-spec.k:18:11-20:27
Context:
    (InfoReachability) while checking the implication
  #Not ( {
    _DotVar1
  #Equals
    _DotVar1 +Int 1
  } )
#And
  <generatedTop>
    <k>
      .
    </k>
    <c1>
      _DotVar1:Int ~> .
    </c1>
    <c2>
      _DotVar1:Int ~> .
    </c2>
  </generatedTop>
[Error] Prover: backend terminated because the configuration cannot be
rewritten further. See output for more details

Should this proof go through? Can you write proofs over fresh variables like this?

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions