Theory Message
section ‹Metis Example Featuring Message Authentication›
theory Message
imports Main
begin
declare [[metis_new_skolem]]
lemma strange_Un_eq [simp]: "A ∪ (B ∪ A) = B ∪ A"
by (metis Un_commute Un_left_absorb)
type_synonym key = nat
consts
all_symmetric :: bool
invKey :: "key=>key"
specification (invKey)
invKey [simp]: "invKey (invKey K) = K"
invKey_symmetric: "all_symmetric --> invKey = id"
by (metis id_apply)
text‹The inverse of a symmetric key is itself; that of a public key
is the private key and vice versa›
definition symKeys :: "key set" where
"symKeys == {K. invKey K = K}"