src/HOL/UNITY/Lift.thy
author paulson
Thu, 20 Aug 1998 17:43:01 +0200
changeset 5357 6efb2b87610c
parent 5340 d75c03cf77b5
child 5426 566f47250bd0
permissions -rw-r--r--
New theory Lift
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5277
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
     1
(*  Title:      HOL/UNITY/Lift.thy
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
     2
    ID:         $Id$
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
     3
    Author:     Lawrence C Paulson, Cambridge University Computer Laboratory
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
     4
    Copyright   1998  University of Cambridge
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
     5
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
     6
The Lift-Control Example
5340
d75c03cf77b5 Misc changes
paulson
parents: 5320
diff changeset
     7
d75c03cf77b5 Misc changes
paulson
parents: 5320
diff changeset
     8
5277
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
     9
*)
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    10
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    11
Lift = SubstAx +
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    12
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    13
record state =
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    14
  floor :: nat		(*current position of the lift*)
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    15
  open  :: bool		(*whether the door is open at floor*)
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    16
  stop  :: bool		(*whether the lift is stopped at floor*)
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    17
  req   :: nat set	(*for each floor, whether the lift is requested*)
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    18
  up    :: bool		(*current direction of movement*)
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    19
  move  :: bool		(*whether moving takes precedence over opening*)
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    20
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    21
consts
5357
6efb2b87610c New theory Lift
paulson
parents: 5340
diff changeset
    22
  Min, Max :: nat       (*least and greatest floors*)
5277
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    23
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    24
rules
5357
6efb2b87610c New theory Lift
paulson
parents: 5340
diff changeset
    25
  Min_le_Max  "Min <= Max"
5277
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    26
  
5340
d75c03cf77b5 Misc changes
paulson
parents: 5320
diff changeset
    27
  (** Linear arithmetic: justified by a separate call to arith_oracle_tac **)
d75c03cf77b5 Misc changes
paulson
parents: 5320
diff changeset
    28
  arith1      "m < fl ==> n - Suc fl < fl - m + (n - m)"
5357
6efb2b87610c New theory Lift
paulson
parents: 5340
diff changeset
    29
  arith2      "[| m<n;  m <= fl |] ==> n - Suc fl < fl - m + (n - m)"
6efb2b87610c New theory Lift
paulson
parents: 5340
diff changeset
    30
  arith3      "[| Suc ix < m |] ==> ix - n < m - Suc ix + (m - n)"
6efb2b87610c New theory Lift
paulson
parents: 5340
diff changeset
    31
  arith4      "[| ix < m;  n < ix |] ==> ix - n < m - Suc (ix) + (m - n)"
5277
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    32
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    33
constdefs
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    34
  
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    35
  (** Abbreviations: the "always" part **)
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    36
  
5320
79b326bceafb now trans_tac is part of the claset...
paulson
parents: 5277
diff changeset
    37
  above :: state set
5357
6efb2b87610c New theory Lift
paulson
parents: 5340
diff changeset
    38
    "above == {s. EX i. floor s < i & i <= Max & i : req s}"
5277
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    39
5320
79b326bceafb now trans_tac is part of the claset...
paulson
parents: 5277
diff changeset
    40
  below :: state set
5357
6efb2b87610c New theory Lift
paulson
parents: 5340
diff changeset
    41
    "below == {s. EX i. Min <= i & i < floor s & i : req s}"
5277
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    42
5320
79b326bceafb now trans_tac is part of the claset...
paulson
parents: 5277
diff changeset
    43
  queueing :: state set
5277
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    44
    "queueing == above Un below"
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    45
5320
79b326bceafb now trans_tac is part of the claset...
paulson
parents: 5277
diff changeset
    46
  goingup :: state set
5340
d75c03cf77b5 Misc changes
paulson
parents: 5320
diff changeset
    47
    "goingup   == above Int  ({s. up s}  Un Compl below)"
5277
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    48
5320
79b326bceafb now trans_tac is part of the claset...
paulson
parents: 5277
diff changeset
    49
  goingdown :: state set
5277
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    50
    "goingdown == below Int ({s. ~ up s} Un Compl above)"
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    51
5320
79b326bceafb now trans_tac is part of the claset...
paulson
parents: 5277
diff changeset
    52
  ready :: state set
5277
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    53
    "ready == {s. stop s & ~ open s & move s}"
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    54
5320
79b326bceafb now trans_tac is part of the claset...
paulson
parents: 5277
diff changeset
    55
 
79b326bceafb now trans_tac is part of the claset...
paulson
parents: 5277
diff changeset
    56
  (** Further abbreviations **)
5277
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    57
5320
79b326bceafb now trans_tac is part of the claset...
paulson
parents: 5277
diff changeset
    58
  moving :: state set
79b326bceafb now trans_tac is part of the claset...
paulson
parents: 5277
diff changeset
    59
    "moving ==  {s. ~ stop s & ~ open s}"
79b326bceafb now trans_tac is part of the claset...
paulson
parents: 5277
diff changeset
    60
79b326bceafb now trans_tac is part of the claset...
paulson
parents: 5277
diff changeset
    61
  stopped :: state set
5340
d75c03cf77b5 Misc changes
paulson
parents: 5320
diff changeset
    62
    "stopped == {s. stop s  & ~ open s & ~ move s}"
5320
79b326bceafb now trans_tac is part of the claset...
paulson
parents: 5277
diff changeset
    63
79b326bceafb now trans_tac is part of the claset...
paulson
parents: 5277
diff changeset
    64
  opened :: state set
79b326bceafb now trans_tac is part of the claset...
paulson
parents: 5277
diff changeset
    65
    "opened ==  {s. stop s  &  open s  &  move s}"
79b326bceafb now trans_tac is part of the claset...
paulson
parents: 5277
diff changeset
    66
5340
d75c03cf77b5 Misc changes
paulson
parents: 5320
diff changeset
    67
  closed :: state set  (*but this is the same as ready!!*)
5320
79b326bceafb now trans_tac is part of the claset...
paulson
parents: 5277
diff changeset
    68
    "closed ==  {s. stop s  & ~ open s &  move s}"
79b326bceafb now trans_tac is part of the claset...
paulson
parents: 5277
diff changeset
    69
79b326bceafb now trans_tac is part of the claset...
paulson
parents: 5277
diff changeset
    70
  atFloor :: nat => state set
79b326bceafb now trans_tac is part of the claset...
paulson
parents: 5277
diff changeset
    71
    "atFloor n ==  {s. floor s = n}"
79b326bceafb now trans_tac is part of the claset...
paulson
parents: 5277
diff changeset
    72
5340
d75c03cf77b5 Misc changes
paulson
parents: 5320
diff changeset
    73
  Req :: nat => state set
d75c03cf77b5 Misc changes
paulson
parents: 5320
diff changeset
    74
    "Req n ==  {s. n : req s}"
d75c03cf77b5 Misc changes
paulson
parents: 5320
diff changeset
    75
5320
79b326bceafb now trans_tac is part of the claset...
paulson
parents: 5277
diff changeset
    76
79b326bceafb now trans_tac is part of the claset...
paulson
parents: 5277
diff changeset
    77
  
5277
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    78
  (** The program **)
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    79
  
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    80
  request_act :: "(state*state) set"
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    81
    "request_act == {(s,s'). s' = s (|stop:=True, move:=False|)
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    82
		                  & ~ stop s & floor s : req s}"
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    83
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    84
  open_act :: "(state*state) set"
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    85
    "open_act ==
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    86
         {(s,s'). s' = s (|open :=True,
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    87
			   req  := req s - {floor s},
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    88
			   move := True|)
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    89
		       & stop s & ~ open s & floor s : req s
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    90
	               & ~(move s & s: queueing)}"
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    91
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    92
  close_act :: "(state*state) set"
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    93
    "close_act == {(s,s'). s' = s (|open := False|) & open s}"
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    94
5357
6efb2b87610c New theory Lift
paulson
parents: 5340
diff changeset
    95
  req_up :: "(state*state) set"
6efb2b87610c New theory Lift
paulson
parents: 5340
diff changeset
    96
    "req_up ==
5277
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    97
         {(s,s'). s' = s (|stop  :=False,
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    98
			   floor := Suc (floor s),
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
    99
			   up    := True|)
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   100
		       & s : (ready Int goingup)}"
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   101
5357
6efb2b87610c New theory Lift
paulson
parents: 5340
diff changeset
   102
  req_down :: "(state*state) set"
6efb2b87610c New theory Lift
paulson
parents: 5340
diff changeset
   103
    "req_down ==
5277
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   104
         {(s,s'). s' = s (|stop  :=False,
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   105
			   floor := floor s - 1,
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   106
			   up    := False|)
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   107
		       & s : (ready Int goingdown)}"
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   108
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   109
  move_up :: "(state*state) set"
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   110
    "move_up ==
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   111
         {(s,s'). s' = s (|floor := Suc (floor s)|)
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   112
		       & ~ stop s & up s & floor s ~: req s}"
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   113
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   114
  move_down :: "(state*state) set"
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   115
    "move_down ==
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   116
         {(s,s'). s' = s (|floor := floor s - 1|)
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   117
		       & ~ stop s & ~ up s & floor s ~: req s}"
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   118
5357
6efb2b87610c New theory Lift
paulson
parents: 5340
diff changeset
   119
  button_press  :: "(state*state) set"
6efb2b87610c New theory Lift
paulson
parents: 5340
diff changeset
   120
    "button_press ==
6efb2b87610c New theory Lift
paulson
parents: 5340
diff changeset
   121
         {(s,s'). EX n. s' = s (|req := insert n (req s)|)
6efb2b87610c New theory Lift
paulson
parents: 5340
diff changeset
   122
		        & Min <= n & n <= Max}"
6efb2b87610c New theory Lift
paulson
parents: 5340
diff changeset
   123
6efb2b87610c New theory Lift
paulson
parents: 5340
diff changeset
   124
5277
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   125
  Lprg :: state program
5357
6efb2b87610c New theory Lift
paulson
parents: 5340
diff changeset
   126
    (*for the moment, we OMIT button_press*)
6efb2b87610c New theory Lift
paulson
parents: 5340
diff changeset
   127
    "Lprg == (|Init = {s. floor s = Min & ~ up s & move s & stop s &
5277
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   128
		          ~ open s & req s = {}},
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   129
	       Acts = {id, request_act, open_act, close_act,
5357
6efb2b87610c New theory Lift
paulson
parents: 5340
diff changeset
   130
		       req_up, req_down, move_up, move_down}|)"
5277
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   131
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   132
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   133
  (** Invariants **)
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   134
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   135
  bounded :: state set
5357
6efb2b87610c New theory Lift
paulson
parents: 5340
diff changeset
   136
    "bounded == {s. Min <= floor s & floor s <= Max}"
5277
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   137
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   138
  open_stop :: state set
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   139
    "open_stop == {s. open s --> stop s}"
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   140
  
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   141
  open_move :: state set
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   142
    "open_move == {s. open s --> move s}"
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   143
  
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   144
  stop_floor :: state set
5340
d75c03cf77b5 Misc changes
paulson
parents: 5320
diff changeset
   145
    "stop_floor == {s. stop s & ~ move s --> floor s : req s}"
5277
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   146
  
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   147
  moving_up :: state set
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   148
    "moving_up == {s. ~ stop s & up s -->
5357
6efb2b87610c New theory Lift
paulson
parents: 5340
diff changeset
   149
                   (EX f. floor s <= f & f <= Max & f : req s)}"
5277
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   150
  
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   151
  moving_down :: state set
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   152
    "moving_down == {s. ~ stop s & ~ up s -->
5357
6efb2b87610c New theory Lift
paulson
parents: 5340
diff changeset
   153
                     (EX f. Min <= f & f <= floor s & f : req s)}"
5277
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   154
  
5340
d75c03cf77b5 Misc changes
paulson
parents: 5320
diff changeset
   155
  metric :: [nat,state] => nat
5357
6efb2b87610c New theory Lift
paulson
parents: 5340
diff changeset
   156
    "metric ==
6efb2b87610c New theory Lift
paulson
parents: 5340
diff changeset
   157
       %n s. if up s & floor s < n then n - floor s
6efb2b87610c New theory Lift
paulson
parents: 5340
diff changeset
   158
	     else if ~ up s & n < floor s then floor s - n
6efb2b87610c New theory Lift
paulson
parents: 5340
diff changeset
   159
	     else if up s & n < floor s then (Max - floor s) + (Max-n)
6efb2b87610c New theory Lift
paulson
parents: 5340
diff changeset
   160
	     else if ~ up s & floor s < n then (floor s - Min) + (n-Min)
6efb2b87610c New theory Lift
paulson
parents: 5340
diff changeset
   161
	     else 0"
5340
d75c03cf77b5 Misc changes
paulson
parents: 5320
diff changeset
   162
d75c03cf77b5 Misc changes
paulson
parents: 5320
diff changeset
   163
locale floor =
d75c03cf77b5 Misc changes
paulson
parents: 5320
diff changeset
   164
  fixes 
d75c03cf77b5 Misc changes
paulson
parents: 5320
diff changeset
   165
    n	:: nat
d75c03cf77b5 Misc changes
paulson
parents: 5320
diff changeset
   166
  assumes
5357
6efb2b87610c New theory Lift
paulson
parents: 5340
diff changeset
   167
    Min_le_n    "Min <= n"
6efb2b87610c New theory Lift
paulson
parents: 5340
diff changeset
   168
    n_le_Max    "n <= Max"
5340
d75c03cf77b5 Misc changes
paulson
parents: 5320
diff changeset
   169
  defines
5277
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   170
e4297d03e5d2 A higher-level treatment of LeadsTo, minimizing use of "reachable"
paulson
parents:
diff changeset
   171
end