Loading src/Encoding.thy +17 −0 Changes for src/Encoding.thy: 17 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -53,6 +53,23 @@ theorem decode_encode: by (cases op) (auto simp: byte_join nat_less_iff div_less_iff_less_mult split: bool.splits if_splits) theorem decode_canonical: "decode bs = Some (op, rest) \<Longrightarrow> encodable op \<and> bs = encode op @ rest" by (cases bs) (auto simp: nat_less_iff div_less_iff_less_mult mod_less div_eq_0_iff nat_add_distrib nat_mult_distrib split: if_splits list.splits) corollary decode_progress: "decode bs = Some (op, rest) \<Longrightarrow> length rest < length bs" using decode_canonical[of bs op rest] by (cases op) (auto split: bool.splits) theorem encode_injective: "encodable a \<Longrightarrow> encodable b \<Longrightarrow> encode a = encode b \<longleftrightarrow> a = b" using decode_encode[of a "[]"] decode_encode[of b "[]"] by (metis append_Nil option.inject prod.inject) fun lower :: "nat instruction list \<Rightarrow> nat set \<Rightarrow> nat \<Rightarrow> nat instruction \<Rightarrow> operation" where "lower p W i Nop = Idle" | "lower p W i Inc = Raise" Loading tests/Examples.thy +10 −0 Changes for tests/Examples.thy: 10 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -59,6 +59,16 @@ lemma truncated_rejected: "decode [18,1] = None" lemma unknown_rejected: "decode [255] = None" by eval lemma short_payload_rejected: "decode [16,256] = None" by eval lemma long_payload_rejected: "decode [19,0,256] = None" by eval lemma decoder_preserves_tail: "decode [19,255,255,3,255] = Some (Branch True True 32767, [3,255])" by eval lemma undefined_rejected: "compile ''jmp missing'' = Error ''undefined label missing''" by eval Loading Loading
src/Encoding.thy +17 −0 Changes for src/Encoding.thy: 17 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -53,6 +53,23 @@ theorem decode_encode: by (cases op) (auto simp: byte_join nat_less_iff div_less_iff_less_mult split: bool.splits if_splits) theorem decode_canonical: "decode bs = Some (op, rest) \<Longrightarrow> encodable op \<and> bs = encode op @ rest" by (cases bs) (auto simp: nat_less_iff div_less_iff_less_mult mod_less div_eq_0_iff nat_add_distrib nat_mult_distrib split: if_splits list.splits) corollary decode_progress: "decode bs = Some (op, rest) \<Longrightarrow> length rest < length bs" using decode_canonical[of bs op rest] by (cases op) (auto split: bool.splits) theorem encode_injective: "encodable a \<Longrightarrow> encodable b \<Longrightarrow> encode a = encode b \<longleftrightarrow> a = b" using decode_encode[of a "[]"] decode_encode[of b "[]"] by (metis append_Nil option.inject prod.inject) fun lower :: "nat instruction list \<Rightarrow> nat set \<Rightarrow> nat \<Rightarrow> nat instruction \<Rightarrow> operation" where "lower p W i Nop = Idle" | "lower p W i Inc = Raise" Loading
tests/Examples.thy +10 −0 Changes for tests/Examples.thy: 10 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -59,6 +59,16 @@ lemma truncated_rejected: "decode [18,1] = None" lemma unknown_rejected: "decode [255] = None" by eval lemma short_payload_rejected: "decode [16,256] = None" by eval lemma long_payload_rejected: "decode [19,0,256] = None" by eval lemma decoder_preserves_tail: "decode [19,255,255,3,255] = Some (Branch True True 32767, [3,255])" by eval lemma undefined_rejected: "compile ''jmp missing'' = Error ''undefined label missing''" by eval Loading