src/ZF/UNITY/State.ML
author wenzelm
Mon, 12 Nov 2001 20:22:23 +0100
changeset 12160 a5cf3ea0685d
parent 11479 697dcaaf478f
child 12195 ed2893765a08
permissions -rw-r--r--
val local_imp_def = thm "induct_implies_def";
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11479
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
     1
(*  Title:      HOL/UNITY/State.ML
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
     2
    ID:         $Id$
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
     3
    Author:     Sidi O Ehmety, Computer Laboratory
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
     4
    Copyright   2001  University of Cambridge
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
     5
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
     6
Formalizes UNITY-program states.
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
     7
*)
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
     8
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
     9
AddIffs [some_in_state];
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    10
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    11
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    12
Goal "!!A. state<=A ==> EX x. x:A";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    13
by (res_inst_tac [("x", "some")] exI 1);
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    14
by Auto_tac;
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    15
qed "state_subset_not_empty";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    16
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    17
(** condition **)
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    18
Goalw [condition_def]
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    19
   "A:condition ==>A<=state";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    20
by (Blast_tac 1);
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    21
qed "conditionD";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    22
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    23
Goalw [condition_def]
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    24
   "A<=state ==> A:condition";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    25
by (Blast_tac 1);
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    26
qed "conditionI";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    27
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    28
(** actionSet **)
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    29
Goalw [actionSet_def]
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    30
"acts:actionSet ==> acts<=action";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    31
by (Blast_tac 1);
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    32
qed "actionSetD";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    33
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    34
Goalw [actionSet_def]
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    35
"acts<=action ==>acts:actionSet";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    36
by (Blast_tac 1);
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    37
qed "actionSetI";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    38
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    39
(** Identity **)
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    40
Goalw [condition_def, Identity_def]
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    41
"A:condition ==> Id``A = A";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    42
by (Blast_tac 1);
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    43
qed "Id_image";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    44
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    45
Goalw [Identity_def] 
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    46
"A<=state ==> Id``A = A";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    47
by (Blast_tac 1);
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    48
qed "Id_image2";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    49
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    50
Addsimps [Id_image, Id_image2];
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    51
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    52
Goalw [Identity_def]
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    53
  "Id:action";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    54
by (Blast_tac 1);
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    55
qed "Id_in_action";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    56
AddIffs [Id_in_action];
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    57
AddTCs [Id_in_action];
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    58
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    59
Goalw [Identity_def]
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    60
 "(x:Id) <-> (EX c:state. x=<c,c>)";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    61
by (Blast_tac 1);
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    62
qed "Id_member_simp";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    63
Addsimps [Id_member_simp];
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    64
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    65
Goalw [Identity_def]
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    66
"Id``0 = 0";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    67
by (Blast_tac 1);
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    68
qed "Id_0";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    69
Addsimps [Id_0];
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    70
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    71
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    72
Goalw [Identity_def]
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    73
"Id``state = state";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    74
by (Blast_tac 1);
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    75
qed "Id_image_state";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    76
Addsimps [Id_image_state];
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    77
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    78
Goalw [condition_def]
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    79
"0:condition";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    80
by (Blast_tac 1);
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    81
qed "condition_0";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    82
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    83
Goalw [condition_def]
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    84
"state:condition";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    85
by (Blast_tac 1);
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    86
qed "condition_state";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    87
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    88
Goalw [actionSet_def] 
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    89
"0:actionSet";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    90
by Auto_tac;
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    91
qed "actionSet_0";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    92
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    93
Goalw [actionSet_def]
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    94
"action:actionSet";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    95
by Auto_tac;
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    96
qed "actionSet_Prod";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    97
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    98
AddIffs [condition_0, condition_state, actionSet_0, actionSet_Prod];
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
    99
AddTCs [condition_0, condition_state, actionSet_0, actionSet_Prod];
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   100
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   101
(** Simplification rules for condition **)
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   102
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   103
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   104
(** Union and Un **)
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   105
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   106
Goalw [condition_def]
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   107
 "A Un B:condition <-> A:condition & B:condition";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   108
by (Blast_tac 1);
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   109
qed "condition_Un";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   110
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   111
Goalw [condition_def]
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   112
 "Union(S):condition <-> (ALL A:S. A:condition)";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   113
by (Blast_tac 1);
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   114
qed "condition_Union";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   115
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   116
AddIffs [condition_Un, condition_Union];
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   117
AddIs    [condition_Un RS iffD2, condition_Union RS iffD2];
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   118
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   119
(** Intersection **)
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   120
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   121
Goalw [condition_def]
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   122
   "[| A:condition; B:condition |] ==> A Int B: condition";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   123
by (Blast_tac 1);
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   124
qed "condition_IntI";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   125
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   126
Goalw [condition_def, Inter_def]
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   127
   "(ALL A:S. A:condition) ==> Inter(S): condition";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   128
by (Blast_tac 1);
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   129
bind_thm("condition_InterI", ballI RS result());
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   130
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   131
AddIs [condition_IntI, condition_InterI];
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   132
Addsimps  [condition_IntI, condition_InterI];
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   133
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   134
Goalw [condition_def]
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   135
"A:condition ==> A - B :condition";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   136
by (Blast_tac 1);
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   137
qed "condition_DiffI";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   138
AddIs [condition_DiffI];
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   139
Addsimps [condition_DiffI];
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   140
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   141
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   142
(** Needed in WFair.thy **)
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   143
Goalw [condition_def]
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   144
"S:Pow(condition) ==> Union(S):condition";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   145
by (Blast_tac 1);
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   146
qed "Union_in_conditionI";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   147
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   148
(** Simplification rules **)
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   149
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   150
Goalw [condition_def]
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   151
    "{s:state. P(s)}:condition";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   152
by Auto_tac;
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   153
qed "Collect_in_condition";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   154
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   155
Goal "{s:state. P(s)}:Pow(state)";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   156
by Auto_tac;
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   157
qed "Collect_condition2";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   158
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   159
Goal "{s:state. P(s)}<=state";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   160
by Auto_tac;
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   161
qed "Collect_condition3";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   162
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   163
Goal "{s:state. P(s)} Int state = {s:state. P(s)}";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   164
by Auto_tac;
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   165
qed "Collect_Int_state";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   166
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   167
Goal "state Int {s:state. P(s)} = {s:state. P(s)}";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   168
by Auto_tac;
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   169
qed "Collect_Int_state2";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   170
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   171
val state_simps = [Collect_in_condition, Collect_condition2, 
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   172
Collect_condition3, Collect_Int_state, Collect_Int_state2];
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   173
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   174
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   175
(* actionSet *)
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   176
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   177
Goalw [actionSet_def]
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   178
 "(A Un B):actionSet <-> (A:actionSet&B:actionSet)";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   179
by Auto_tac;
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   180
qed "actionSet_Un";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   181
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   182
Goalw [actionSet_def]
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   183
 "(UN i:I. A(i)):actionSet <-> (ALL i:I. A(i):actionSet)";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   184
by Auto_tac;
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   185
qed "actionSet_UN";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   186
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   187
AddIffs [actionSet_Un, actionSet_UN];
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   188
AddIs [actionSet_Un RS iffD2, actionSet_UN RS iffD2];
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   189
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   190
Goalw [actionSet_def]
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   191
"[| A:actionSet; B:actionSet |] ==> (A Int B):actionSet";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   192
by Auto_tac;
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   193
qed "actionSet_Int";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   194
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   195
Goalw [actionSet_def]
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   196
"(ALL i:I. A(i):actionSet) ==> (INT i:I. A(i)):actionSet";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   197
by (auto_tac (claset(), simpset() addsimps [Inter_def]));
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   198
qed "actionSet_INT";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   199
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   200
Addsimps [actionSet_INT];
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   201
AddIs [actionSet_INT];
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   202
Addsimps [Inter_0];
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   203
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   204
Goalw [condition_def]
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   205
 "(PROD x:variable. type_of(x)):condition";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   206
by Auto_tac;
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   207
qed "PROD_condition";
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   208
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   209
Addsimps [PROD_condition];
697dcaaf478f new ZF/UNITY theory
paulson
parents:
diff changeset
   210
AddIs [PROD_condition];