diff -r 0a0ee31ec20a -r a9fcbafdf208 src/HOL/IMP/Compiler.thy --- a/src/HOL/IMP/Compiler.thy Thu Jul 28 16:32:49 2011 +0200 +++ b/src/HOL/IMP/Compiler.thy Thu Jul 28 16:56:14 2011 +0200 @@ -40,10 +40,6 @@ JMPFLESS int | JMPFGE int -(* reads slightly nicer *) -abbreviation - "JMPB i == JMP (-i)" - type_synonym stack = "val list" type_synonym config = "int\state\stack" @@ -51,7 +47,7 @@ abbreviation "tl2 xs == tl(tl xs)" inductive iexec1 :: "instr \ config \ config \ bool" - ("(_/ \i (_ \/ _))" [50,0,0] 50) + ("(_/ \i (_ \/ _))" [59,0,59] 60) where "LOADI n \i (i,s,stk) \ (i+1,s, n#stk)" | "LOAD x \i (i,s,stk) \ (i+1,s, s x # stk)" | @@ -66,16 +62,17 @@ declare iexec1.intros definition - exec1 :: "instr list \ config \ config \ bool" ("(_/ \ (_ \/ _))" [50,0,0] 50) + exec1 :: "instr list \ config \ config \ bool" ("(_/ \ (_ \/ _))" [59,0,59] 60) where "P \ c \ c' = - (\i s stk. c = (i,s,stk) \ P!!i \i (i,s,stk) \ c' \ 0 \ i \ i < isize P)" + (\i s stk. c = (i,s,stk) \ P!!i \i (i,s,stk) \ c' \ 0 \ i \ i < isize P)" declare exec1_def [simp] lemma exec1I [intro, code_pred_intro]: - "\ P!!i \i (i,s,stk) \ c'; 0 \ i; i < isize P \ \ P \ (i,s,stk) \ c'" - by simp + assumes "P!!i \i (i,s,stk) \ c'" "0 \ i" "i < isize P" + shows "P \ (i,s,stk) \ c'" + using assms by simp inductive exec :: "instr list \ config \ config \ bool" ("_/ \ (_ \*/ _)" 50) where @@ -245,7 +242,8 @@ in cb @ cc\<^isub>1 @ JMP (isize cc\<^isub>2) # cc\<^isub>2)" | "ccomp (WHILE b DO c) = (let cc = ccomp c; cb = bcomp b False (isize cc + 1) - in cb @ cc @ [JMPB (isize cb + isize cc + 1)])" + in cb @ cc @ [JMP (-(isize cb + isize cc + 1))])" + value "ccomp (IF Less (V ''u'') (N 1) THEN ''u'' ::= Plus (V ''u'') (N 1)