0

I have a relatively simple question, its causing me some problems in isabelle.

Im trying to prove the following:

∃ b . inv_Board b

The board is a set. The invariant on board is:

card b <= FINISHED

Where finished is an int value of 24. I'm using my own types though so its actually a VDMNat type and I have to cast it like so:

int (card b) <= FINISHED

Sledgehammer isn't working, I have 1 subgoal:

∃b. int (card b) ≤ FINISHED

any ideas?

John Setter
  • 175
  • 1
  • 17
  • Is `b` a concrete value in that context for which you know the invariant holds? What happens if you do `apply (rule exI[of _ b])`? – Manuel Eberl Dec 21 '15 at 21:38
  • What's the type of `b`? Does the proof work if formulate the invariant without your special typing, i.e. with `card b <= 24`? – Ben Keks Dec 22 '15 at 16:13

1 Answers1

0

If »FINISHED« is an int value of 24, then there should be an equational theorem ‹FINISHED = 24›.

Then you can proceed roughly like

have "int (card {}) ≤ FINISHED"
  by (simp add: ‹FINISHED = 24›)
then show "∃b. int (card b) ≤ FINISHED"
  ..