25 (* the initial value stored in each memory cell *) |
25 (* the initial value stored in each memory cell *) |
26 InitVal :: "Vals" |
26 InitVal :: "Vals" |
27 |
27 |
28 axiomatization where |
28 axiomatization where |
29 (* basic assumptions about the above constants and predicates *) |
29 (* basic assumptions about the above constants and predicates *) |
30 BadArgNoMemVal: "BadArg ~: MemVal" and |
30 BadArgNoMemVal: "BadArg \<notin> MemVal" and |
31 MemFailNoMemVal: "MemFailure ~: MemVal" and |
31 MemFailNoMemVal: "MemFailure \<notin> MemVal" and |
32 InitValMemVal: "InitVal : MemVal" and |
32 InitValMemVal: "InitVal : MemVal" and |
33 NotAResultNotVal: "NotAResult ~: MemVal" and |
33 NotAResultNotVal: "NotAResult \<notin> MemVal" and |
34 NotAResultNotOK: "NotAResult ~= OK" and |
34 NotAResultNotOK: "NotAResult \<noteq> OK" and |
35 NotAResultNotBA: "NotAResult ~= BadArg" and |
35 NotAResultNotBA: "NotAResult \<noteq> BadArg" and |
36 NotAResultNotMF: "NotAResult ~= MemFailure" |
36 NotAResultNotMF: "NotAResult \<noteq> MemFailure" |
37 |
37 |
38 lemmas [simp] = |
38 lemmas [simp] = |
39 BadArgNoMemVal MemFailNoMemVal InitValMemVal NotAResultNotVal |
39 BadArgNoMemVal MemFailNoMemVal InitValMemVal NotAResultNotVal |
40 NotAResultNotOK NotAResultNotBA NotAResultNotMF |
40 NotAResultNotOK NotAResultNotBA NotAResultNotMF |
41 NotAResultNotOK [symmetric] NotAResultNotBA [symmetric] NotAResultNotMF [symmetric] |
41 NotAResultNotOK [symmetric] NotAResultNotBA [symmetric] NotAResultNotMF [symmetric] |
42 |
42 |
43 lemma MemValNotAResultE: "[| x : MemVal; (x ~= NotAResult ==> P) |] ==> P" |
43 lemma MemValNotAResultE: "[| x : MemVal; (x \<noteq> NotAResult ==> P) |] ==> P" |
44 using NotAResultNotVal by blast |
44 using NotAResultNotVal by blast |
45 |
45 |
46 end |
46 end |