doc-src/TutorialI/Protocol/Public.thy
author wenzelm
Sun, 14 Oct 2007 16:13:46 +0200
changeset 25030 7507f590486f
parent 23925 ee98c2528a8f
child 25341 ca3761e38a87
permissions -rw-r--r--
require_thy: read_text *after* checking parents (otherwise outdating an existing descendant will leave the dependencies corrupted);
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11250
c8bbf4c4bc2d symlinks to ../../../HOL/Auth. Fingers crossed...
paulson
parents:
diff changeset
     1
(*  Title:      HOL/Auth/Public
c8bbf4c4bc2d symlinks to ../../../HOL/Auth. Fingers crossed...
paulson
parents:
diff changeset
     2
    ID:         $Id$
c8bbf4c4bc2d symlinks to ../../../HOL/Auth. Fingers crossed...
paulson
parents:
diff changeset
     3
    Author:     Lawrence C Paulson, Cambridge University Computer Laboratory
c8bbf4c4bc2d symlinks to ../../../HOL/Auth. Fingers crossed...
paulson
parents:
diff changeset
     4
    Copyright   1996  University of Cambridge
c8bbf4c4bc2d symlinks to ../../../HOL/Auth. Fingers crossed...
paulson
parents:
diff changeset
     5
c8bbf4c4bc2d symlinks to ../../../HOL/Auth. Fingers crossed...
paulson
parents:
diff changeset
     6
Theory of Public Keys (common to all public-key protocols)
c8bbf4c4bc2d symlinks to ../../../HOL/Auth. Fingers crossed...
paulson
parents:
diff changeset
     7
c8bbf4c4bc2d symlinks to ../../../HOL/Auth. Fingers crossed...
paulson
parents:
diff changeset
     8
Private and public keys; initial states of agents
23925
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
     9
*)(*<*)
16417
9bc16273c2d4 migrated theory headers to new format
haftmann
parents: 11250
diff changeset
    10
theory Public imports Event
23925
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    11
begin
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    12
(*>*)
11250
c8bbf4c4bc2d symlinks to ../../../HOL/Auth. Fingers crossed...
paulson
parents:
diff changeset
    13
23925
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    14
text {*
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    15
The function
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    16
@{text pubK} maps agents to their public keys.  The function
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    17
@{text priK} maps agents to their private keys.  It is defined in terms of
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    18
@{text invKey} and @{text pubK} by a translation; therefore @{text priK} is
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    19
not a proper constant, so we declare it using \isacommand{syntax}
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    20
(cf.\ \S\ref{sec:syntax-translations}).
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    21
*}
11250
c8bbf4c4bc2d symlinks to ../../../HOL/Auth. Fingers crossed...
paulson
parents:
diff changeset
    22
23925
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    23
consts pubK :: "agent => key"
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    24
syntax priK :: "agent => key"
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    25
translations "priK x" \<rightleftharpoons> "invKey(pubK x)"
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    26
(*<*)
11250
c8bbf4c4bc2d symlinks to ../../../HOL/Auth. Fingers crossed...
paulson
parents:
diff changeset
    27
primrec
c8bbf4c4bc2d symlinks to ../../../HOL/Auth. Fingers crossed...
paulson
parents:
diff changeset
    28
        (*Agents know their private key and all public keys*)
c8bbf4c4bc2d symlinks to ../../../HOL/Auth. Fingers crossed...
paulson
parents:
diff changeset
    29
  initState_Server:  "initState Server     =    
c8bbf4c4bc2d symlinks to ../../../HOL/Auth. Fingers crossed...
paulson
parents:
diff changeset
    30
 		         insert (Key (priK Server)) (Key ` range pubK)"
c8bbf4c4bc2d symlinks to ../../../HOL/Auth. Fingers crossed...
paulson
parents:
diff changeset
    31
  initState_Friend:  "initState (Friend i) =    
c8bbf4c4bc2d symlinks to ../../../HOL/Auth. Fingers crossed...
paulson
parents:
diff changeset
    32
 		         insert (Key (priK (Friend i))) (Key ` range pubK)"
c8bbf4c4bc2d symlinks to ../../../HOL/Auth. Fingers crossed...
paulson
parents:
diff changeset
    33
  initState_Spy:     "initState Spy        =    
c8bbf4c4bc2d symlinks to ../../../HOL/Auth. Fingers crossed...
paulson
parents:
diff changeset
    34
 		         (Key`invKey`pubK`bad) Un (Key ` range pubK)"
23925
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    35
(*>*)
11250
c8bbf4c4bc2d symlinks to ../../../HOL/Auth. Fingers crossed...
paulson
parents:
diff changeset
    36
23925
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    37
text {*
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    38
\noindent
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    39
The set @{text bad} consists of those agents whose private keys are known to
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    40
the spy.
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    41
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    42
Two axioms are asserted about the public-key cryptosystem. 
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    43
No two agents have the same public key, and no private key equals
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    44
any public key.
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    45
*}
11250
c8bbf4c4bc2d symlinks to ../../../HOL/Auth. Fingers crossed...
paulson
parents:
diff changeset
    46
c8bbf4c4bc2d symlinks to ../../../HOL/Auth. Fingers crossed...
paulson
parents:
diff changeset
    47
axioms
c8bbf4c4bc2d symlinks to ../../../HOL/Auth. Fingers crossed...
paulson
parents:
diff changeset
    48
  inj_pubK:        "inj pubK"
c8bbf4c4bc2d symlinks to ../../../HOL/Auth. Fingers crossed...
paulson
parents:
diff changeset
    49
  priK_neq_pubK:   "priK A ~= pubK B"
23925
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    50
(*<*)
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    51
lemmas [iff] = inj_pubK [THEN inj_eq]
11250
c8bbf4c4bc2d symlinks to ../../../HOL/Auth. Fingers crossed...
paulson
parents:
diff changeset
    52
23925
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    53
lemma priK_inj_eq[iff]: "(priK A = priK B) = (A=B)"
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    54
  apply safe
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    55
  apply (drule_tac f=invKey in arg_cong)
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    56
  apply simp
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    57
  done
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    58
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    59
lemmas [iff] = priK_neq_pubK priK_neq_pubK [THEN not_sym]
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    60
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    61
lemma not_symKeys_pubK[iff]: "pubK A \<notin> symKeys"
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    62
  by (simp add: symKeys_def)
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    63
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    64
lemma not_symKeys_priK[iff]: "priK A \<notin> symKeys"
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    65
  by (simp add: symKeys_def)
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    66
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    67
lemma symKeys_neq_imp_neq: "(K \<in> symKeys) \<noteq> (K' \<in> symKeys) ==> K \<noteq> K'"
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    68
  by blast
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    69
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    70
lemma analz_symKeys_Decrypt: "[| Crypt K X \<in> analz H;  K \<in> symKeys;  Key K \<in> analz H |]
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    71
     ==> X \<in> analz H"
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    72
  by (auto simp add: symKeys_def)
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    73
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    74
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    75
(** "Image" equations that hold for injective functions **)
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    76
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    77
lemma invKey_image_eq[simp]: "(invKey x : invKey`A) = (x:A)"
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    78
  by auto
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    79
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    80
(*holds because invKey is injective*)
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    81
lemma pubK_image_eq[simp]: "(pubK x : pubK`A) = (x:A)"
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    82
  by auto
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    83
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    84
lemma priK_pubK_image_eq[simp]: "(priK x ~: pubK`A)"
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    85
  by auto
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    86
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    87
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    88
(** Rewrites should not refer to  initState(Friend i) 
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    89
    -- not in normal form! **)
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    90
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    91
lemma keysFor_parts_initState[simp]: "keysFor (parts (initState C)) = {}"
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    92
  apply (unfold keysFor_def)
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    93
  apply (induct C)
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    94
  apply (auto intro: range_eqI)
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    95
  done
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    96
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    97
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    98
(*** Function "spies" ***)
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
    99
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   100
(*Agents see their own private keys!*)
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   101
lemma priK_in_initState[iff]: "Key (priK A) : initState A"
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   102
  by (induct A) auto
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   103
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   104
(*All public keys are visible*)
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   105
lemma spies_pubK[iff]: "Key (pubK A) : spies evs"
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   106
  by (induct evs) (simp_all add: imageI knows_Cons split: event.split)
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   107
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   108
(*Spy sees private keys of bad agents!*)
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   109
lemma Spy_spies_bad[intro!]: "A: bad ==> Key (priK A) : spies evs"
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   110
  by (induct evs) (simp_all add: imageI knows_Cons split: event.split)
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   111
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   112
lemmas [iff] = spies_pubK [THEN analz.Inj]
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   113
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   114
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   115
(*** Fresh nonces ***)
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   116
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   117
lemma Nonce_notin_initState[iff]: "Nonce N ~: parts (initState B)"
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   118
  by (induct B) auto
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   119
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   120
lemma Nonce_notin_used_empty[simp]: "Nonce N ~: used []"
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   121
  by (simp add: used_Nil)
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   122
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   123
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   124
(*** Supply fresh nonces for possibility theorems. ***)
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   125
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   126
(*In any trace, there is an upper bound N on the greatest nonce in use.*)
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   127
lemma Nonce_supply_lemma: "EX N. ALL n. N<=n --> Nonce n \<notin> used evs"
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   128
apply (induct_tac "evs")
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   129
apply (rule_tac x = 0 in exI)
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   130
apply (simp_all (no_asm_simp) add: used_Cons split add: event.split)
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   131
apply safe
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   132
apply (rule msg_Nonce_supply [THEN exE], blast elim!: add_leE)+
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   133
done
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   134
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   135
lemma Nonce_supply1: "EX N. Nonce N \<notin> used evs"
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   136
by (rule Nonce_supply_lemma [THEN exE], blast)
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   137
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   138
lemma Nonce_supply: "Nonce (@ N. Nonce N \<notin> used evs) \<notin> used evs"
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   139
apply (rule Nonce_supply_lemma [THEN exE])
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   140
apply (rule someI, fast)
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   141
done
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   142
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   143
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   144
(*** Specialized rewriting for the analz_image_... theorems ***)
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   145
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   146
lemma insert_Key_singleton: "insert (Key K) H = Key ` {K} Un H"
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   147
  by blast
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   148
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   149
lemma insert_Key_image: "insert (Key K) (Key`KK Un C) = Key ` (insert K KK) Un C"
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   150
  by blast
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   151
11250
c8bbf4c4bc2d symlinks to ../../../HOL/Auth. Fingers crossed...
paulson
parents:
diff changeset
   152
c8bbf4c4bc2d symlinks to ../../../HOL/Auth. Fingers crossed...
paulson
parents:
diff changeset
   153
(*Specialized methods*)
c8bbf4c4bc2d symlinks to ../../../HOL/Auth. Fingers crossed...
paulson
parents:
diff changeset
   154
23925
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   155
(*Tactic for possibility theorems*)
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   156
ML {*
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   157
fun possibility_tac st = st |>
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   158
    REPEAT (*omit used_Says so that Nonces start from different traces!*)
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   159
    (ALLGOALS (simp_tac (simpset() delsimps [used_Says]))
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   160
     THEN
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   161
     REPEAT_FIRST (eq_assume_tac ORELSE' 
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   162
                   resolve_tac [refl, conjI, @{thm Nonce_supply}]));
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   163
*}
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   164
11250
c8bbf4c4bc2d symlinks to ../../../HOL/Auth. Fingers crossed...
paulson
parents:
diff changeset
   165
method_setup possibility = {*
c8bbf4c4bc2d symlinks to ../../../HOL/Auth. Fingers crossed...
paulson
parents:
diff changeset
   166
    Method.no_args (Method.METHOD (fn facts => possibility_tac)) *}
c8bbf4c4bc2d symlinks to ../../../HOL/Auth. Fingers crossed...
paulson
parents:
diff changeset
   167
    "for proving possibility theorems"
c8bbf4c4bc2d symlinks to ../../../HOL/Auth. Fingers crossed...
paulson
parents:
diff changeset
   168
c8bbf4c4bc2d symlinks to ../../../HOL/Auth. Fingers crossed...
paulson
parents:
diff changeset
   169
end
23925
ee98c2528a8f LaTeX code is now generated directly from theory files.
berghofe
parents: 16417
diff changeset
   170
(*>*)