Changes for README.md: 0 added lines, 2 removed lines.
Original line number
Diff line number
Diff line
# Span
Span implements a branch relaxing assembler in Isabelle/HOL, with proofs of termination, minimum layout size and execution correspondence for a bytecode machine with signed 8-bit and 16-bit relative branches
lemmaparse_lines_code[code]:"parse_lines n ss = parse_acc n ss []"
by(cases"parse_lines n ss")(simp_alladd:parse_acc_correct)
funcount::"statement \<Rightarrow> nat"where
"count (Label l) = 0"
|"count (Emit op) = 1"
@@ -73,6 +90,28 @@ fun resolve_all :: "(string \<times> nat) list \<Rightarrow> statement list \<Ri
bind (resolve_all env ss) (\<lambda>xs. Ok (x # xs)))"
|"resolve_all env (Pad n # ss) = bind (resolve_all env ss) (\<lambda>xs. Ok (replicate n Nop @ xs))"
funresolve_acc::"(string \<times> nat) list \<Rightarrow> statement list \<Rightarrow> nat instruction list \<Rightarrow> nat instruction list result"where
"resolve_acc env [] acc = Ok (rev acc)"
|"resolve_acc env (Label l # ss) acc = resolve_acc env ss acc"
|"resolve_acc env (Emit op # ss) acc = (case resolve env op of Error e \<Rightarrow> Error e
| Ok x \<Rightarrow> resolve_acc env ss (x # acc))"
|"resolve_acc env (Pad n # ss) acc = resolve_acc env ss (replicate n Nop @ acc)"
lemmaresolve_acc_correct:
"resolve_acc env ss acc = bind (resolve_all env ss) (\<lambda>xs. Ok (rev acc @ xs))"