This commit is contained in:
@@ -1,4 +1,17 @@
|
||||
import Mathlib
|
||||
import Init.Data.Nat.Lemmas
|
||||
import Init.Prelude
|
||||
import Mathlib.Data.Nat.Basic
|
||||
import Mathlib.Data.Nat.Dist
|
||||
import Mathlib.Data.Set.Basic
|
||||
import Mathlib.Data.Set.Defs
|
||||
import Mathlib.Data.Set.Image
|
||||
import Mathlib.Data.Set.Insert
|
||||
import Mathlib.Data.Set.Lattice
|
||||
import Mathlib.Order.Closure
|
||||
import Mathlib.Order.Lattice
|
||||
import Mathlib.Tactic.ApplyAt
|
||||
import Mathlib.Tactic.SimpIntro
|
||||
import Mathlib.Tactic.NthRewrite
|
||||
|
||||
-- Keys are integers
|
||||
abbrev Key := Nat
|
||||
@@ -121,9 +134,11 @@ lemma keysFor_union (H H' : Set Msg) : keysFor (H ∪ H') = keysFor H ∪ keysFo
|
||||
|
||||
-- Monotonicity
|
||||
@[simp]
|
||||
lemma keysFor_mono {G H : Set Msg} (h : G ⊆ H) : keysFor G ⊆ keysFor H := by
|
||||
simp
|
||||
grind
|
||||
lemma keysFor_mono: Monotone keysFor := by
|
||||
simp_intro _ _ sub _ h
|
||||
rcases h with ⟨K, ⟨⟨X, _⟩, _⟩⟩ ; exists K; apply And.intro
|
||||
· exists X; aapply sub
|
||||
· assumption
|
||||
|
||||
-- Lemmas for `keysFor` with specific message types
|
||||
@[simp]
|
||||
@@ -321,7 +336,7 @@ lemma parts_idem {H : Set Msg} : parts (parts H) = parts H :=
|
||||
lemma parts_subset_iff {G H : Set Msg} : (G ⊆ parts H) ↔ (parts G ⊆ parts H) :=
|
||||
by apply partsClosureOperator.le_closure_iff
|
||||
|
||||
@[simp, grind]
|
||||
@[simp]
|
||||
lemma parts_trans {G H : Set Msg} {X : Msg} :
|
||||
X ∈ parts G → G ⊆ parts H → X ∈ parts H :=
|
||||
by intro a b; apply parts_mono at b; rw[parts_idem] at b; apply b; apply a;
|
||||
@@ -331,9 +346,12 @@ by intro a b; apply parts_mono at b; rw[parts_idem] at b; apply b; apply a;
|
||||
lemma parts_cut {G H : Set Msg} {X Y : Msg} :
|
||||
Y ∈ parts (insert X G) → X ∈ parts H → Y ∈ parts (G ∪ H) :=
|
||||
by
|
||||
intro a b; rw[parts_union]; rw[parts_insert] at a; cases a <;> grind
|
||||
|
||||
-- Rewrite rules for pulling out atomic messages
|
||||
intro a b; rw[parts_union]; rw[parts_insert] at a; cases a <;> grind[parts_trans]
|
||||
|
||||
@[simp]
|
||||
lemma parts_cut_mono {G H : Set Msg} {X : Msg} :
|
||||
X ∈ parts H → parts (insert X G) ⊆ parts (G ∪ H) :=
|
||||
by grind[parts_cut]
|
||||
|
||||
@[simp]
|
||||
lemma parts_insert_Agent {H : Set Msg} {agt : Agent} :
|
||||
@@ -1320,7 +1338,7 @@ lemma pushKeysMPair {K : Key} {X Y : Msg} {H : Set Msg}:
|
||||
by simp [Set.insert_comm]
|
||||
|
||||
lemma pushKeysCrypt {K K' : Key} {X : Msg} {H : Set Msg}:
|
||||
insert (Key K) (insert (Crypt K' N) H) = insert (Crypt K' N) (insert (Key K) H) :=
|
||||
insert (Key K) (insert (Crypt K' X) H) = insert (Crypt K' X) (insert (Key K) H) :=
|
||||
by simp [Set.insert_comm]
|
||||
|
||||
lemma pushCryptsAgent {X : Msg} {K : Key} {C : Agent} {H : Set Msg} :
|
||||
|
||||
Reference in New Issue
Block a user