src/HOL/Auth/Event.thy
author paulson
Tue, 28 Mar 2006 16:48:18 +0200
changeset 19334 96ca738055a6
parent 18570 ffce25f9aa7f
child 20768 1d478c2d621f
permissions -rw-r--r--
Simplified version of Jia's filter. Now all constants are pooled, rather than relevance being compared against separate clauses. Rejects are no longer noted, and units cannot be added at the end.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3512
9dcb4daa15e8 Moving common declarations and proofs from theories "Shared"
paulson
parents:
diff changeset
     1
(*  Title:      HOL/Auth/Event
9dcb4daa15e8 Moving common declarations and proofs from theories "Shared"
paulson
parents:
diff changeset
     2
    ID:         $Id$
9dcb4daa15e8 Moving common declarations and proofs from theories "Shared"
paulson
parents:
diff changeset
     3
    Author:     Lawrence C Paulson, Cambridge University Computer Laboratory
9dcb4daa15e8 Moving common declarations and proofs from theories "Shared"
paulson
parents:
diff changeset
     4
    Copyright   1996  University of Cambridge
9dcb4daa15e8 Moving common declarations and proofs from theories "Shared"
paulson
parents:
diff changeset
     5
3683
aafe719dff14 Global change: lost->bad and sees Spy->spies
paulson
parents: 3678
diff changeset
     6
Datatype of events; function "spies"; freshness
3678
414e04d7c2d6 Spy can see Notes of the compromised agents
paulson
parents: 3519
diff changeset
     7
3683
aafe719dff14 Global change: lost->bad and sees Spy->spies
paulson
parents: 3678
diff changeset
     8
"bad" agents have been broken by the Spy; their private keys and internal
3678
414e04d7c2d6 Spy can see Notes of the compromised agents
paulson
parents: 3519
diff changeset
     9
    stores are visible to him
3512
9dcb4daa15e8 Moving common declarations and proofs from theories "Shared"
paulson
parents:
diff changeset
    10
*)
9dcb4daa15e8 Moving common declarations and proofs from theories "Shared"
paulson
parents:
diff changeset
    11
13956
8fe7e12290e1 improved presentation of HOL/Auth theories
paulson
parents: 13935
diff changeset
    12
header{*Theory of Events for Security Protocols*}
8fe7e12290e1 improved presentation of HOL/Auth theories
paulson
parents: 13935
diff changeset
    13
16417
9bc16273c2d4 migrated theory headers to new format
haftmann
parents: 14200
diff changeset
    14
theory Event imports Message begin
11104
f2024fed9f0c partial conversion to Isar script style
paulson
parents: 6399
diff changeset
    15
3512
9dcb4daa15e8 Moving common declarations and proofs from theories "Shared"
paulson
parents:
diff changeset
    16
consts  (*Initial states of agents -- parameter of the construction*)
11104
f2024fed9f0c partial conversion to Isar script style
paulson
parents: 6399
diff changeset
    17
  initState :: "agent => msg set"
3512
9dcb4daa15e8 Moving common declarations and proofs from theories "Shared"
paulson
parents:
diff changeset
    18
6399
4a9040b85e2e exchanged the order of Gets and Notes in datatype event
paulson
parents: 6308
diff changeset
    19
datatype
3512
9dcb4daa15e8 Moving common declarations and proofs from theories "Shared"
paulson
parents:
diff changeset
    20
  event = Says  agent agent msg
6399
4a9040b85e2e exchanged the order of Gets and Notes in datatype event
paulson
parents: 6308
diff changeset
    21
        | Gets  agent       msg
3512
9dcb4daa15e8 Moving common declarations and proofs from theories "Shared"
paulson
parents:
diff changeset
    22
        | Notes agent       msg
6308
76f3865a2b1d Added Bella's "Gets" model for Otway_Rees. Also affects some other theories.
paulson
parents: 5183
diff changeset
    23
       
76f3865a2b1d Added Bella's "Gets" model for Otway_Rees. Also affects some other theories.
paulson
parents: 5183
diff changeset
    24
consts 
11104
f2024fed9f0c partial conversion to Isar script style
paulson
parents: 6399
diff changeset
    25
  bad    :: "agent set"				(*compromised agents*)
f2024fed9f0c partial conversion to Isar script style
paulson
parents: 6399
diff changeset
    26
  knows  :: "agent => event list => msg set"
3512
9dcb4daa15e8 Moving common declarations and proofs from theories "Shared"
paulson
parents:
diff changeset
    27
6308
76f3865a2b1d Added Bella's "Gets" model for Otway_Rees. Also affects some other theories.
paulson
parents: 5183
diff changeset
    28
14126
28824746d046 Tidying and replacement of some axioms by specifications
paulson
parents: 13956
diff changeset
    29
text{*The constant "spies" is retained for compatibility's sake*}
6308
76f3865a2b1d Added Bella's "Gets" model for Otway_Rees. Also affects some other theories.
paulson
parents: 5183
diff changeset
    30
syntax
11104
f2024fed9f0c partial conversion to Isar script style
paulson
parents: 6399
diff changeset
    31
  spies  :: "event list => msg set"
3519
ab0a9fbed4c0 Changing "lost" from a parameter of protocol definitions to a constant.
paulson
parents: 3512
diff changeset
    32
6308
76f3865a2b1d Added Bella's "Gets" model for Otway_Rees. Also affects some other theories.
paulson
parents: 5183
diff changeset
    33
translations
76f3865a2b1d Added Bella's "Gets" model for Otway_Rees. Also affects some other theories.
paulson
parents: 5183
diff changeset
    34
  "spies"   => "knows Spy"
76f3865a2b1d Added Bella's "Gets" model for Otway_Rees. Also affects some other theories.
paulson
parents: 5183
diff changeset
    35
14126
28824746d046 Tidying and replacement of some axioms by specifications
paulson
parents: 13956
diff changeset
    36
text{*Spy has access to his own key for spoof messages, but Server is secure*}
28824746d046 Tidying and replacement of some axioms by specifications
paulson
parents: 13956
diff changeset
    37
specification (bad)
14200
d8598e24f8fa Removal of the Key_supply axiom (affects many possbility proofs) and minor
paulson
parents: 14126
diff changeset
    38
  Spy_in_bad     [iff]: "Spy \<in> bad"
d8598e24f8fa Removal of the Key_supply axiom (affects many possbility proofs) and minor
paulson
parents: 14126
diff changeset
    39
  Server_not_bad [iff]: "Server \<notin> bad"
14126
28824746d046 Tidying and replacement of some axioms by specifications
paulson
parents: 13956
diff changeset
    40
    by (rule exI [of _ "{Spy}"], simp)
6308
76f3865a2b1d Added Bella's "Gets" model for Otway_Rees. Also affects some other theories.
paulson
parents: 5183
diff changeset
    41
5183
89f162de39cf Adapted to new datatype package.
berghofe
parents: 3683
diff changeset
    42
primrec
11104
f2024fed9f0c partial conversion to Isar script style
paulson
parents: 6399
diff changeset
    43
  knows_Nil:   "knows A [] = initState A"
f2024fed9f0c partial conversion to Isar script style
paulson
parents: 6399
diff changeset
    44
  knows_Cons:
6399
4a9040b85e2e exchanged the order of Gets and Notes in datatype event
paulson
parents: 6308
diff changeset
    45
    "knows A (ev # evs) =
4a9040b85e2e exchanged the order of Gets and Notes in datatype event
paulson
parents: 6308
diff changeset
    46
       (if A = Spy then 
4a9040b85e2e exchanged the order of Gets and Notes in datatype event
paulson
parents: 6308
diff changeset
    47
	(case ev of
4a9040b85e2e exchanged the order of Gets and Notes in datatype event
paulson
parents: 6308
diff changeset
    48
	   Says A' B X => insert X (knows Spy evs)
4a9040b85e2e exchanged the order of Gets and Notes in datatype event
paulson
parents: 6308
diff changeset
    49
	 | Gets A' X => knows Spy evs
4a9040b85e2e exchanged the order of Gets and Notes in datatype event
paulson
parents: 6308
diff changeset
    50
	 | Notes A' X  => 
13922
75ae4244a596 Changes required by the certified email protocol
paulson
parents: 11463
diff changeset
    51
	     if A' \<in> bad then insert X (knows Spy evs) else knows Spy evs)
6399
4a9040b85e2e exchanged the order of Gets and Notes in datatype event
paulson
parents: 6308
diff changeset
    52
	else
4a9040b85e2e exchanged the order of Gets and Notes in datatype event
paulson
parents: 6308
diff changeset
    53
	(case ev of
4a9040b85e2e exchanged the order of Gets and Notes in datatype event
paulson
parents: 6308
diff changeset
    54
	   Says A' B X => 
4a9040b85e2e exchanged the order of Gets and Notes in datatype event
paulson
parents: 6308
diff changeset
    55
	     if A'=A then insert X (knows A evs) else knows A evs
4a9040b85e2e exchanged the order of Gets and Notes in datatype event
paulson
parents: 6308
diff changeset
    56
	 | Gets A' X    => 
4a9040b85e2e exchanged the order of Gets and Notes in datatype event
paulson
parents: 6308
diff changeset
    57
	     if A'=A then insert X (knows A evs) else knows A evs
4a9040b85e2e exchanged the order of Gets and Notes in datatype event
paulson
parents: 6308
diff changeset
    58
	 | Notes A' X    => 
4a9040b85e2e exchanged the order of Gets and Notes in datatype event
paulson
parents: 6308
diff changeset
    59
	     if A'=A then insert X (knows A evs) else knows A evs))"
6308
76f3865a2b1d Added Bella's "Gets" model for Otway_Rees. Also affects some other theories.
paulson
parents: 5183
diff changeset
    60
76f3865a2b1d Added Bella's "Gets" model for Otway_Rees. Also affects some other theories.
paulson
parents: 5183
diff changeset
    61
(*
76f3865a2b1d Added Bella's "Gets" model for Otway_Rees. Also affects some other theories.
paulson
parents: 5183
diff changeset
    62
  Case A=Spy on the Gets event
76f3865a2b1d Added Bella's "Gets" model for Otway_Rees. Also affects some other theories.
paulson
parents: 5183
diff changeset
    63
  enforces the fact that if a message is received then it must have been sent,
76f3865a2b1d Added Bella's "Gets" model for Otway_Rees. Also affects some other theories.
paulson
parents: 5183
diff changeset
    64
  therefore the oops case must use Notes
76f3865a2b1d Added Bella's "Gets" model for Otway_Rees. Also affects some other theories.
paulson
parents: 5183
diff changeset
    65
*)
3678
414e04d7c2d6 Spy can see Notes of the compromised agents
paulson
parents: 3519
diff changeset
    66
3683
aafe719dff14 Global change: lost->bad and sees Spy->spies
paulson
parents: 3678
diff changeset
    67
consts
aafe719dff14 Global change: lost->bad and sees Spy->spies
paulson
parents: 3678
diff changeset
    68
  (*Set of items that might be visible to somebody:
aafe719dff14 Global change: lost->bad and sees Spy->spies
paulson
parents: 3678
diff changeset
    69
    complement of the set of fresh items*)
11104
f2024fed9f0c partial conversion to Isar script style
paulson
parents: 6399
diff changeset
    70
  used :: "event list => msg set"
3512
9dcb4daa15e8 Moving common declarations and proofs from theories "Shared"
paulson
parents:
diff changeset
    71
5183
89f162de39cf Adapted to new datatype package.
berghofe
parents: 3683
diff changeset
    72
primrec
11104
f2024fed9f0c partial conversion to Isar script style
paulson
parents: 6399
diff changeset
    73
  used_Nil:   "used []         = (UN B. parts (initState B))"
f2024fed9f0c partial conversion to Isar script style
paulson
parents: 6399
diff changeset
    74
  used_Cons:  "used (ev # evs) =
f2024fed9f0c partial conversion to Isar script style
paulson
parents: 6399
diff changeset
    75
		     (case ev of
13935
paulson
parents: 13926
diff changeset
    76
			Says A B X => parts {X} \<union> used evs
11104
f2024fed9f0c partial conversion to Isar script style
paulson
parents: 6399
diff changeset
    77
		      | Gets A X   => used evs
13935
paulson
parents: 13926
diff changeset
    78
		      | Notes A X  => parts {X} \<union> used evs)"
paulson
parents: 13926
diff changeset
    79
    --{*The case for @{term Gets} seems anomalous, but @{term Gets} always
paulson
parents: 13926
diff changeset
    80
        follows @{term Says} in real protocols.  Seems difficult to change.
paulson
parents: 13926
diff changeset
    81
        See @{text Gets_correct} in theory @{text "Guard/Extensions.thy"}. *}
6308
76f3865a2b1d Added Bella's "Gets" model for Otway_Rees. Also affects some other theories.
paulson
parents: 5183
diff changeset
    82
13926
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
    83
lemma Notes_imp_used [rule_format]: "Notes A X \<in> set evs --> X \<in> used evs"
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
    84
apply (induct_tac evs)
11463
96b5b27da55c three new theorems
paulson
parents: 11310
diff changeset
    85
apply (auto split: event.split) 
96b5b27da55c three new theorems
paulson
parents: 11310
diff changeset
    86
done
96b5b27da55c three new theorems
paulson
parents: 11310
diff changeset
    87
13926
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
    88
lemma Says_imp_used [rule_format]: "Says A B X \<in> set evs --> X \<in> used evs"
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
    89
apply (induct_tac evs)
11463
96b5b27da55c three new theorems
paulson
parents: 11310
diff changeset
    90
apply (auto split: event.split) 
96b5b27da55c three new theorems
paulson
parents: 11310
diff changeset
    91
done
96b5b27da55c three new theorems
paulson
parents: 11310
diff changeset
    92
13926
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
    93
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
    94
subsection{*Function @{term knows}*}
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
    95
13956
8fe7e12290e1 improved presentation of HOL/Auth theories
paulson
parents: 13935
diff changeset
    96
(*Simplifying   
8fe7e12290e1 improved presentation of HOL/Auth theories
paulson
parents: 13935
diff changeset
    97
 parts(insert X (knows Spy evs)) = parts{X} \<union> parts(knows Spy evs).
8fe7e12290e1 improved presentation of HOL/Auth theories
paulson
parents: 13935
diff changeset
    98
  This version won't loop with the simplifier.*)
13935
paulson
parents: 13926
diff changeset
    99
lemmas parts_insert_knows_A = parts_insert [of _ "knows A evs", standard]
13926
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   100
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   101
lemma knows_Spy_Says [simp]:
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   102
     "knows Spy (Says A B X # evs) = insert X (knows Spy evs)"
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   103
by simp
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   104
14200
d8598e24f8fa Removal of the Key_supply axiom (affects many possbility proofs) and minor
paulson
parents: 14126
diff changeset
   105
text{*Letting the Spy see "bad" agents' notes avoids redundant case-splits
d8598e24f8fa Removal of the Key_supply axiom (affects many possbility proofs) and minor
paulson
parents: 14126
diff changeset
   106
      on whether @{term "A=Spy"} and whether @{term "A\<in>bad"}*}
13926
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   107
lemma knows_Spy_Notes [simp]:
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   108
     "knows Spy (Notes A X # evs) =  
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   109
          (if A:bad then insert X (knows Spy evs) else knows Spy evs)"
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   110
by simp
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   111
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   112
lemma knows_Spy_Gets [simp]: "knows Spy (Gets A X # evs) = knows Spy evs"
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   113
by simp
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   114
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   115
lemma knows_Spy_subset_knows_Spy_Says:
13935
paulson
parents: 13926
diff changeset
   116
     "knows Spy evs \<subseteq> knows Spy (Says A B X # evs)"
13926
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   117
by (simp add: subset_insertI)
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   118
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   119
lemma knows_Spy_subset_knows_Spy_Notes:
13935
paulson
parents: 13926
diff changeset
   120
     "knows Spy evs \<subseteq> knows Spy (Notes A X # evs)"
13926
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   121
by force
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   122
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   123
lemma knows_Spy_subset_knows_Spy_Gets:
13935
paulson
parents: 13926
diff changeset
   124
     "knows Spy evs \<subseteq> knows Spy (Gets A X # evs)"
13926
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   125
by (simp add: subset_insertI)
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   126
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   127
text{*Spy sees what is sent on the traffic*}
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   128
lemma Says_imp_knows_Spy [rule_format]:
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   129
     "Says A B X \<in> set evs --> X \<in> knows Spy evs"
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   130
apply (induct_tac "evs")
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   131
apply (simp_all (no_asm_simp) split add: event.split)
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   132
done
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   133
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   134
lemma Notes_imp_knows_Spy [rule_format]:
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   135
     "Notes A X \<in> set evs --> A: bad --> X \<in> knows Spy evs"
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   136
apply (induct_tac "evs")
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   137
apply (simp_all (no_asm_simp) split add: event.split)
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   138
done
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   139
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   140
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   141
text{*Elimination rules: derive contradictions from old Says events containing
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   142
  items known to be fresh*}
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   143
lemmas knows_Spy_partsEs =
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   144
     Says_imp_knows_Spy [THEN parts.Inj, THEN revcut_rl, standard] 
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   145
     parts.Body [THEN revcut_rl, standard]
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   146
18570
ffce25f9aa7f a few more named lemmas
paulson
parents: 17990
diff changeset
   147
lemmas Says_imp_analz_Spy = Says_imp_knows_Spy [THEN analz.Inj]
ffce25f9aa7f a few more named lemmas
paulson
parents: 17990
diff changeset
   148
13926
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   149
text{*Compatibility for the old "spies" function*}
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   150
lemmas spies_partsEs = knows_Spy_partsEs
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   151
lemmas Says_imp_spies = Says_imp_knows_Spy
13935
paulson
parents: 13926
diff changeset
   152
lemmas parts_insert_spies = parts_insert_knows_A [of _ Spy]
13926
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   153
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   154
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   155
subsection{*Knowledge of Agents*}
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   156
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   157
lemma knows_Says: "knows A (Says A B X # evs) = insert X (knows A evs)"
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   158
by simp
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   159
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   160
lemma knows_Notes: "knows A (Notes A X # evs) = insert X (knows A evs)"
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   161
by simp
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   162
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   163
lemma knows_Gets:
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   164
     "A \<noteq> Spy --> knows A (Gets A X # evs) = insert X (knows A evs)"
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   165
by simp
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   166
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   167
13935
paulson
parents: 13926
diff changeset
   168
lemma knows_subset_knows_Says: "knows A evs \<subseteq> knows A (Says A' B X # evs)"
paulson
parents: 13926
diff changeset
   169
by (simp add: subset_insertI)
13926
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   170
13935
paulson
parents: 13926
diff changeset
   171
lemma knows_subset_knows_Notes: "knows A evs \<subseteq> knows A (Notes A' X # evs)"
paulson
parents: 13926
diff changeset
   172
by (simp add: subset_insertI)
13926
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   173
13935
paulson
parents: 13926
diff changeset
   174
lemma knows_subset_knows_Gets: "knows A evs \<subseteq> knows A (Gets A' X # evs)"
paulson
parents: 13926
diff changeset
   175
by (simp add: subset_insertI)
13926
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   176
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   177
text{*Agents know what they say*}
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   178
lemma Says_imp_knows [rule_format]: "Says A B X \<in> set evs --> X \<in> knows A evs"
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   179
apply (induct_tac "evs")
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   180
apply (simp_all (no_asm_simp) split add: event.split)
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   181
apply blast
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   182
done
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   183
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   184
text{*Agents know what they note*}
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   185
lemma Notes_imp_knows [rule_format]: "Notes A X \<in> set evs --> X \<in> knows A evs"
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   186
apply (induct_tac "evs")
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   187
apply (simp_all (no_asm_simp) split add: event.split)
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   188
apply blast
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   189
done
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   190
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   191
text{*Agents know what they receive*}
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   192
lemma Gets_imp_knows_agents [rule_format]:
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   193
     "A \<noteq> Spy --> Gets A X \<in> set evs --> X \<in> knows A evs"
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   194
apply (induct_tac "evs")
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   195
apply (simp_all (no_asm_simp) split add: event.split)
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   196
done
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   197
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   198
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   199
text{*What agents DIFFERENT FROM Spy know 
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   200
  was either said, or noted, or got, or known initially*}
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   201
lemma knows_imp_Says_Gets_Notes_initState [rule_format]:
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   202
     "[| X \<in> knows A evs; A \<noteq> Spy |] ==> EX B.  
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   203
  Says A B X \<in> set evs | Gets A X \<in> set evs | Notes A X \<in> set evs | X \<in> initState A"
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   204
apply (erule rev_mp)
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   205
apply (induct_tac "evs")
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   206
apply (simp_all (no_asm_simp) split add: event.split)
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   207
apply blast
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   208
done
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   209
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   210
text{*What the Spy knows -- for the time being --
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   211
  was either said or noted, or known initially*}
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   212
lemma knows_Spy_imp_Says_Notes_initState [rule_format]:
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   213
     "[| X \<in> knows Spy evs |] ==> EX A B.  
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   214
  Says A B X \<in> set evs | Notes A X \<in> set evs | X \<in> initState Spy"
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   215
apply (erule rev_mp)
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   216
apply (induct_tac "evs")
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   217
apply (simp_all (no_asm_simp) split add: event.split)
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   218
apply blast
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   219
done
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   220
13935
paulson
parents: 13926
diff changeset
   221
lemma parts_knows_Spy_subset_used: "parts (knows Spy evs) \<subseteq> used evs"
paulson
parents: 13926
diff changeset
   222
apply (induct_tac "evs", force)  
paulson
parents: 13926
diff changeset
   223
apply (simp add: parts_insert_knows_A knows_Cons add: event.split, blast) 
13926
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   224
done
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   225
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   226
lemmas usedI = parts_knows_Spy_subset_used [THEN subsetD, intro]
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   227
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   228
lemma initState_into_used: "X \<in> parts (initState B) ==> X \<in> used evs"
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   229
apply (induct_tac "evs")
13935
paulson
parents: 13926
diff changeset
   230
apply (simp_all add: parts_insert_knows_A split add: event.split, blast)
13926
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   231
done
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   232
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   233
lemma used_Says [simp]: "used (Says A B X # evs) = parts{X} \<union> used evs"
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   234
by simp
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   235
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   236
lemma used_Notes [simp]: "used (Notes A X # evs) = parts{X} \<union> used evs"
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   237
by simp
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   238
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   239
lemma used_Gets [simp]: "used (Gets A X # evs) = used evs"
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   240
by simp
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   241
13935
paulson
parents: 13926
diff changeset
   242
lemma used_nil_subset: "used [] \<subseteq> used evs"
paulson
parents: 13926
diff changeset
   243
apply simp
13926
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   244
apply (blast intro: initState_into_used)
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   245
done
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   246
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   247
text{*NOTE REMOVAL--laws above are cleaner, as they don't involve "case"*}
13935
paulson
parents: 13926
diff changeset
   248
declare knows_Cons [simp del]
paulson
parents: 13926
diff changeset
   249
        used_Nil [simp del] used_Cons [simp del]
13926
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   250
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   251
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   252
text{*For proving theorems of the form @{term "X \<notin> analz (knows Spy evs) --> P"}
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   253
  New events added by induction to "evs" are discarded.  Provided 
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   254
  this information isn't needed, the proof will be much shorter, since
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   255
  it will omit complicated reasoning about @{term analz}.*}
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   256
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   257
lemmas analz_mono_contra =
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   258
       knows_Spy_subset_knows_Spy_Says [THEN analz_mono, THEN contra_subsetD]
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   259
       knows_Spy_subset_knows_Spy_Notes [THEN analz_mono, THEN contra_subsetD]
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   260
       knows_Spy_subset_knows_Spy_Gets [THEN analz_mono, THEN contra_subsetD]
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   261
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   262
ML
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   263
{*
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   264
val analz_mono_contra_tac = 
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   265
  let val analz_impI = inst "P" "?Y \<notin> analz (knows Spy ?evs)" impI
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   266
  in
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   267
    rtac analz_impI THEN' 
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   268
    REPEAT1 o 
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   269
      (dresolve_tac (thms"analz_mono_contra"))
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   270
    THEN' mp_tac
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   271
  end
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   272
*}
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   273
11104
f2024fed9f0c partial conversion to Isar script style
paulson
parents: 6399
diff changeset
   274
13922
75ae4244a596 Changes required by the certified email protocol
paulson
parents: 11463
diff changeset
   275
lemma knows_subset_knows_Cons: "knows A evs \<subseteq> knows A (e # evs)"
75ae4244a596 Changes required by the certified email protocol
paulson
parents: 11463
diff changeset
   276
by (induct e, auto simp: knows_Cons)
75ae4244a596 Changes required by the certified email protocol
paulson
parents: 11463
diff changeset
   277
13935
paulson
parents: 13926
diff changeset
   278
lemma initState_subset_knows: "initState A \<subseteq> knows A evs"
13926
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   279
apply (induct_tac evs, simp) 
13922
75ae4244a596 Changes required by the certified email protocol
paulson
parents: 11463
diff changeset
   280
apply (blast intro: knows_subset_knows_Cons [THEN subsetD])
75ae4244a596 Changes required by the certified email protocol
paulson
parents: 11463
diff changeset
   281
done
75ae4244a596 Changes required by the certified email protocol
paulson
parents: 11463
diff changeset
   282
75ae4244a596 Changes required by the certified email protocol
paulson
parents: 11463
diff changeset
   283
13926
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   284
text{*For proving @{text new_keys_not_used}*}
13922
75ae4244a596 Changes required by the certified email protocol
paulson
parents: 11463
diff changeset
   285
lemma keysFor_parts_insert:
13926
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   286
     "[| K \<in> keysFor (parts (insert X G));  X \<in> synth (analz H) |] 
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   287
      ==> K \<in> keysFor (parts (G \<union> H)) | Key (invKey K) \<in> parts H"; 
13922
75ae4244a596 Changes required by the certified email protocol
paulson
parents: 11463
diff changeset
   288
by (force 
75ae4244a596 Changes required by the certified email protocol
paulson
parents: 11463
diff changeset
   289
    dest!: parts_insert_subset_Un [THEN keysFor_mono, THEN [2] rev_subsetD]
75ae4244a596 Changes required by the certified email protocol
paulson
parents: 11463
diff changeset
   290
           analz_subset_parts [THEN keysFor_mono, THEN [2] rev_subsetD]
75ae4244a596 Changes required by the certified email protocol
paulson
parents: 11463
diff changeset
   291
    intro: analz_subset_parts [THEN subsetD] parts_mono [THEN [2] rev_subsetD])
75ae4244a596 Changes required by the certified email protocol
paulson
parents: 11463
diff changeset
   292
11104
f2024fed9f0c partial conversion to Isar script style
paulson
parents: 6399
diff changeset
   293
method_setup analz_mono_contra = {*
f2024fed9f0c partial conversion to Isar script style
paulson
parents: 6399
diff changeset
   294
    Method.no_args
f2024fed9f0c partial conversion to Isar script style
paulson
parents: 6399
diff changeset
   295
      (Method.METHOD (fn facts => REPEAT_FIRST analz_mono_contra_tac)) *}
13922
75ae4244a596 Changes required by the certified email protocol
paulson
parents: 11463
diff changeset
   296
    "for proving theorems of the form X \<notin> analz (knows Spy evs) --> P"
75ae4244a596 Changes required by the certified email protocol
paulson
parents: 11463
diff changeset
   297
75ae4244a596 Changes required by the certified email protocol
paulson
parents: 11463
diff changeset
   298
subsubsection{*Useful for case analysis on whether a hash is a spoof or not*}
75ae4244a596 Changes required by the certified email protocol
paulson
parents: 11463
diff changeset
   299
75ae4244a596 Changes required by the certified email protocol
paulson
parents: 11463
diff changeset
   300
ML
75ae4244a596 Changes required by the certified email protocol
paulson
parents: 11463
diff changeset
   301
{*
13926
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   302
val knows_Cons     = thm "knows_Cons"
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   303
val used_Nil       = thm "used_Nil"
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   304
val used_Cons      = thm "used_Cons"
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   305
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   306
val Notes_imp_used = thm "Notes_imp_used";
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   307
val Says_imp_used = thm "Says_imp_used";
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   308
val Says_imp_knows_Spy = thm "Says_imp_knows_Spy";
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   309
val Notes_imp_knows_Spy = thm "Notes_imp_knows_Spy";
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   310
val knows_Spy_partsEs = thms "knows_Spy_partsEs";
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   311
val spies_partsEs = thms "spies_partsEs";
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   312
val Says_imp_spies = thm "Says_imp_spies";
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   313
val parts_insert_spies = thm "parts_insert_spies";
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   314
val Says_imp_knows = thm "Says_imp_knows";
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   315
val Notes_imp_knows = thm "Notes_imp_knows";
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   316
val Gets_imp_knows_agents = thm "Gets_imp_knows_agents";
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   317
val knows_imp_Says_Gets_Notes_initState = thm "knows_imp_Says_Gets_Notes_initState";
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   318
val knows_Spy_imp_Says_Notes_initState = thm "knows_Spy_imp_Says_Notes_initState";
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   319
val usedI = thm "usedI";
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   320
val initState_into_used = thm "initState_into_used";
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   321
val used_Says = thm "used_Says";
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   322
val used_Notes = thm "used_Notes";
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   323
val used_Gets = thm "used_Gets";
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   324
val used_nil_subset = thm "used_nil_subset";
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   325
val analz_mono_contra = thms "analz_mono_contra";
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   326
val knows_subset_knows_Cons = thm "knows_subset_knows_Cons";
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   327
val initState_subset_knows = thm "initState_subset_knows";
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   328
val keysFor_parts_insert = thm "keysFor_parts_insert";
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   329
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   330
13922
75ae4244a596 Changes required by the certified email protocol
paulson
parents: 11463
diff changeset
   331
val synth_analz_mono = thm "synth_analz_mono";
75ae4244a596 Changes required by the certified email protocol
paulson
parents: 11463
diff changeset
   332
13935
paulson
parents: 13926
diff changeset
   333
val knows_Spy_subset_knows_Spy_Says = thm "knows_Spy_subset_knows_Spy_Says";
paulson
parents: 13926
diff changeset
   334
val knows_Spy_subset_knows_Spy_Notes = thm "knows_Spy_subset_knows_Spy_Notes";
paulson
parents: 13926
diff changeset
   335
val knows_Spy_subset_knows_Spy_Gets = thm "knows_Spy_subset_knows_Spy_Gets";
paulson
parents: 13926
diff changeset
   336
paulson
parents: 13926
diff changeset
   337
13922
75ae4244a596 Changes required by the certified email protocol
paulson
parents: 11463
diff changeset
   338
val synth_analz_mono_contra_tac = 
13926
6e62e5357a10 converting more HOL-Auth to new-style theories
paulson
parents: 13922
diff changeset
   339
  let val syan_impI = inst "P" "?Y \<notin> synth (analz (knows Spy ?evs))" impI
13922
75ae4244a596 Changes required by the certified email protocol
paulson
parents: 11463
diff changeset
   340
  in
75ae4244a596 Changes required by the certified email protocol
paulson
parents: 11463
diff changeset
   341
    rtac syan_impI THEN' 
75ae4244a596 Changes required by the certified email protocol
paulson
parents: 11463
diff changeset
   342
    REPEAT1 o 
75ae4244a596 Changes required by the certified email protocol
paulson
parents: 11463
diff changeset
   343
      (dresolve_tac 
75ae4244a596 Changes required by the certified email protocol
paulson
parents: 11463
diff changeset
   344
       [knows_Spy_subset_knows_Spy_Says RS synth_analz_mono RS contra_subsetD,
75ae4244a596 Changes required by the certified email protocol
paulson
parents: 11463
diff changeset
   345
        knows_Spy_subset_knows_Spy_Notes RS synth_analz_mono RS contra_subsetD,
75ae4244a596 Changes required by the certified email protocol
paulson
parents: 11463
diff changeset
   346
	knows_Spy_subset_knows_Spy_Gets RS synth_analz_mono RS contra_subsetD])
75ae4244a596 Changes required by the certified email protocol
paulson
parents: 11463
diff changeset
   347
    THEN'
75ae4244a596 Changes required by the certified email protocol
paulson
parents: 11463
diff changeset
   348
    mp_tac
75ae4244a596 Changes required by the certified email protocol
paulson
parents: 11463
diff changeset
   349
  end;
75ae4244a596 Changes required by the certified email protocol
paulson
parents: 11463
diff changeset
   350
*}
75ae4244a596 Changes required by the certified email protocol
paulson
parents: 11463
diff changeset
   351
75ae4244a596 Changes required by the certified email protocol
paulson
parents: 11463
diff changeset
   352
method_setup synth_analz_mono_contra = {*
75ae4244a596 Changes required by the certified email protocol
paulson
parents: 11463
diff changeset
   353
    Method.no_args
75ae4244a596 Changes required by the certified email protocol
paulson
parents: 11463
diff changeset
   354
      (Method.METHOD (fn facts => REPEAT_FIRST synth_analz_mono_contra_tac)) *}
75ae4244a596 Changes required by the certified email protocol
paulson
parents: 11463
diff changeset
   355
    "for proving theorems of the form X \<notin> synth (analz (knows Spy evs)) --> P"
3512
9dcb4daa15e8 Moving common declarations and proofs from theories "Shared"
paulson
parents:
diff changeset
   356
9dcb4daa15e8 Moving common declarations and proofs from theories "Shared"
paulson
parents:
diff changeset
   357
end