src/ZF/OrderArith.ML
author clasohm
Wed, 14 Dec 1994 11:41:49 +0100
changeset 782 200a16083201
parent 770 216ec1299bf0
child 815 de2d8a63256d
permissions -rw-r--r--
added bind_thm for theorems defined by "standard ..."
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
437
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
     1
(*  Title: 	ZF/OrderArith.ML
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
     2
    ID:         $Id$
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
     3
    Author: 	Lawrence C Paulson, Cambridge University Computer Laboratory
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
     4
    Copyright   1994  University of Cambridge
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
     5
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
     6
Towards ordinal arithmetic 
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
     7
*)
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
     8
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
     9
open OrderArith;
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    10
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    11
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    12
(**** Addition of relations -- disjoint sum ****)
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    13
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    14
(** Rewrite rules.  Can be used to obtain introduction rules **)
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    15
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    16
goalw OrderArith.thy [radd_def] 
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    17
    "<Inl(a), Inr(b)> : radd(A,r,B,s)  <->  a:A & b:B";
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    18
by (fast_tac sum_cs 1);
760
f0200e91b272 added qed and qed_goal[w]
clasohm
parents: 662
diff changeset
    19
qed "radd_Inl_Inr_iff";
437
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    20
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    21
goalw OrderArith.thy [radd_def] 
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    22
    "<Inl(a'), Inl(a)> : radd(A,r,B,s)  <->  <a',a>:r & a':A & a:A";
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    23
by (fast_tac sum_cs 1);
760
f0200e91b272 added qed and qed_goal[w]
clasohm
parents: 662
diff changeset
    24
qed "radd_Inl_iff";
437
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    25
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    26
goalw OrderArith.thy [radd_def] 
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    27
    "<Inr(b'), Inr(b)> : radd(A,r,B,s) <->  <b',b>:s & b':B & b:B";
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    28
by (fast_tac sum_cs 1);
760
f0200e91b272 added qed and qed_goal[w]
clasohm
parents: 662
diff changeset
    29
qed "radd_Inr_iff";
437
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    30
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    31
goalw OrderArith.thy [radd_def] 
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    32
    "<Inr(b), Inl(a)> : radd(A,r,B,s) <->  False";
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    33
by (fast_tac sum_cs 1);
760
f0200e91b272 added qed and qed_goal[w]
clasohm
parents: 662
diff changeset
    34
qed "radd_Inr_Inl_iff";
437
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    35
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    36
(** Elimination Rule **)
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    37
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    38
val major::prems = goalw OrderArith.thy [radd_def]
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    39
    "[| <p',p> : radd(A,r,B,s);			\
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    40
\       !!x y. [| p'=Inl(x); x:A; p=Inr(y); y:B |] ==> Q;	\
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    41
\       !!x' x. [| p'=Inl(x'); p=Inl(x); <x',x>: r; x':A; x:A |] ==> Q;	\
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    42
\       !!y' y. [| p'=Inr(y'); p=Inr(y); <y',y>: s; y':B; y:B |] ==> Q	\
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    43
\    |] ==> Q";
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    44
by (cut_facts_tac [major] 1);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    45
(*Split into the three cases*)
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    46
by (REPEAT_FIRST
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    47
    (eresolve_tac [CollectE, Pair_inject, conjE, exE, SigmaE, disjE]));
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    48
(*Apply each premise to correct subgoal; can't just use fast_tac
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    49
  because hyp_subst_tac would delete equalities too quickly*)
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    50
by (EVERY (map (fn prem => 
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    51
		EVERY1 [rtac prem, assume_tac, REPEAT o fast_tac sum_cs])
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    52
	   prems));
760
f0200e91b272 added qed and qed_goal[w]
clasohm
parents: 662
diff changeset
    53
qed "raddE";
437
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    54
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    55
(** Type checking **)
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    56
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    57
goalw OrderArith.thy [radd_def] "radd(A,r,B,s) <= (A+B) * (A+B)";
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    58
by (rtac Collect_subset 1);
760
f0200e91b272 added qed and qed_goal[w]
clasohm
parents: 662
diff changeset
    59
qed "radd_type";
437
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    60
782
200a16083201 added bind_thm for theorems defined by "standard ..."
clasohm
parents: 770
diff changeset
    61
bind_thm ("field_radd", (radd_type RS field_rel_subset));
437
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    62
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    63
(** Linearity **)
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    64
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    65
val radd_ss = sum_ss addsimps [radd_Inl_iff, radd_Inr_iff, 
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    66
			       radd_Inl_Inr_iff, radd_Inr_Inl_iff];
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    67
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    68
goalw OrderArith.thy [linear_def]
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    69
    "!!r s. [| linear(A,r);  linear(B,s) |] ==> linear(A+B,radd(A,r,B,s))";
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    70
by (REPEAT_FIRST (ares_tac [ballI] ORELSE' etac sumE));
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    71
by (ALLGOALS (asm_simp_tac radd_ss));
760
f0200e91b272 added qed and qed_goal[w]
clasohm
parents: 662
diff changeset
    72
qed "linear_radd";
437
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    73
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    74
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    75
(** Well-foundedness **)
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    76
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    77
goal OrderArith.thy
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    78
    "!!r s. [| wf[A](r);  wf[B](s) |] ==> wf[A+B](radd(A,r,B,s))";
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    79
by (rtac wf_onI2 1);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    80
by (subgoal_tac "ALL x:A. Inl(x): Ba" 1);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    81
(*Proving the lemma, which is needed twice!*)
662
2342e70a97d4 ZF/OrderArith/thin: deleted as obsolete
lcp
parents: 437
diff changeset
    82
by (eres_inst_tac [("V", "y : A + B")] thin_rl 2);
437
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    83
by (rtac ballI 2);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    84
by (eres_inst_tac [("r","r"),("a","x")] wf_on_induct 2 THEN assume_tac 2);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    85
by (etac (bspec RS mp) 2);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    86
by (fast_tac sum_cs 2);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    87
by (best_tac (sum_cs addSEs [raddE]) 2);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    88
(*Returning to main part of proof*)
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    89
by (REPEAT_FIRST (eresolve_tac [sumE, ssubst]));
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    90
by (best_tac sum_cs 1);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    91
by (eres_inst_tac [("r","s"),("a","ya")] wf_on_induct 1 THEN assume_tac 1);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    92
by (etac (bspec RS mp) 1);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    93
by (fast_tac sum_cs 1);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    94
by (best_tac (sum_cs addSEs [raddE]) 1);
760
f0200e91b272 added qed and qed_goal[w]
clasohm
parents: 662
diff changeset
    95
qed "wf_on_radd";
437
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    96
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    97
goal OrderArith.thy
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    98
     "!!r s. [| wf(r);  wf(s) |] ==> wf(radd(field(r),r,field(s),s))";
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
    99
by (asm_full_simp_tac (ZF_ss addsimps [wf_iff_wf_on_field]) 1);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   100
by (rtac (field_radd RSN (2, wf_on_subset_A)) 1);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   101
by (REPEAT (ares_tac [wf_on_radd] 1));
760
f0200e91b272 added qed and qed_goal[w]
clasohm
parents: 662
diff changeset
   102
qed "wf_radd";
437
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   103
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   104
goal OrderArith.thy 
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   105
    "!!r s. [| well_ord(A,r);  well_ord(B,s) |] ==> \
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   106
\           well_ord(A+B, radd(A,r,B,s))";
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   107
by (rtac well_ordI 1);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   108
by (asm_full_simp_tac (ZF_ss addsimps [well_ord_def, wf_on_radd]) 1);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   109
by (asm_full_simp_tac 
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   110
    (ZF_ss addsimps [well_ord_def, tot_ord_def, linear_radd]) 1);
760
f0200e91b272 added qed and qed_goal[w]
clasohm
parents: 662
diff changeset
   111
qed "well_ord_radd";
437
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   112
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   113
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   114
(**** Multiplication of relations -- lexicographic product ****)
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   115
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   116
(** Rewrite rule.  Can be used to obtain introduction rules **)
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   117
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   118
goalw OrderArith.thy [rmult_def] 
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   119
    "!!r s. <<a',b'>, <a,b>> : rmult(A,r,B,s) <-> 	\
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   120
\           (<a',a>: r  & a':A & a:A & b': B & b: B) | 	\
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   121
\           (<b',b>: s  & a'=a & a:A & b': B & b: B)";
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   122
by (fast_tac ZF_cs 1);
760
f0200e91b272 added qed and qed_goal[w]
clasohm
parents: 662
diff changeset
   123
qed "rmult_iff";
437
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   124
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   125
val major::prems = goal OrderArith.thy
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   126
    "[| <<a',b'>, <a,b>> : rmult(A,r,B,s);		\
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   127
\       [| <a',a>: r;  a':A;  a:A;  b':B;  b:B |] ==> Q;	\
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   128
\       [| <b',b>: s;  a:A;  a'=a;  b':B;  b:B |] ==> Q	\
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   129
\    |] ==> Q";
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   130
by (rtac (major RS (rmult_iff RS iffD1) RS disjE) 1);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   131
by (DEPTH_SOLVE (eresolve_tac ([asm_rl, conjE] @ prems) 1));
760
f0200e91b272 added qed and qed_goal[w]
clasohm
parents: 662
diff changeset
   132
qed "rmultE";
437
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   133
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   134
(** Type checking **)
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   135
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   136
goalw OrderArith.thy [rmult_def] "rmult(A,r,B,s) <= (A*B) * (A*B)";
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   137
by (rtac Collect_subset 1);
760
f0200e91b272 added qed and qed_goal[w]
clasohm
parents: 662
diff changeset
   138
qed "rmult_type";
437
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   139
782
200a16083201 added bind_thm for theorems defined by "standard ..."
clasohm
parents: 770
diff changeset
   140
bind_thm ("field_rmult", (rmult_type RS field_rel_subset));
437
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   141
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   142
(** Linearity **)
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   143
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   144
val [lina,linb] = goal OrderArith.thy
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   145
    "[| linear(A,r);  linear(B,s) |] ==> linear(A*B,rmult(A,r,B,s))";
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   146
by (rewtac linear_def);    (*Note! the premises are NOT rewritten*)
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   147
by (REPEAT_FIRST (ares_tac [ballI] ORELSE' etac SigmaE));
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   148
by (asm_simp_tac (ZF_ss addsimps [rmult_iff]) 1);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   149
by (res_inst_tac [("x","xa"), ("y","xb")] (lina RS linearE) 1);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   150
by (res_inst_tac [("x","ya"), ("y","yb")] (linb RS linearE) 4);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   151
by (REPEAT_SOME (fast_tac ZF_cs));
760
f0200e91b272 added qed and qed_goal[w]
clasohm
parents: 662
diff changeset
   152
qed "linear_rmult";
437
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   153
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   154
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   155
(** Well-foundedness **)
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   156
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   157
goal OrderArith.thy
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   158
    "!!r s. [| wf[A](r);  wf[B](s) |] ==> wf[A*B](rmult(A,r,B,s))";
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   159
by (rtac wf_onI2 1);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   160
by (etac SigmaE 1);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   161
by (etac ssubst 1);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   162
by (subgoal_tac "ALL b:B. <x,b>: Ba" 1);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   163
by (fast_tac ZF_cs 1);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   164
by (eres_inst_tac [("a","x")] wf_on_induct 1 THEN assume_tac 1);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   165
by (rtac ballI 1);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   166
by (eres_inst_tac [("a","b")] wf_on_induct 1 THEN assume_tac 1);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   167
by (etac (bspec RS mp) 1);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   168
by (fast_tac ZF_cs 1);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   169
by (best_tac (ZF_cs addSEs [rmultE]) 1);
760
f0200e91b272 added qed and qed_goal[w]
clasohm
parents: 662
diff changeset
   170
qed "wf_on_rmult";
437
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   171
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   172
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   173
goal OrderArith.thy
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   174
    "!!r s. [| wf(r);  wf(s) |] ==> wf(rmult(field(r),r,field(s),s))";
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   175
by (asm_full_simp_tac (ZF_ss addsimps [wf_iff_wf_on_field]) 1);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   176
by (rtac (field_rmult RSN (2, wf_on_subset_A)) 1);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   177
by (REPEAT (ares_tac [wf_on_rmult] 1));
760
f0200e91b272 added qed and qed_goal[w]
clasohm
parents: 662
diff changeset
   178
qed "wf_rmult";
437
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   179
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   180
goal OrderArith.thy 
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   181
    "!!r s. [| well_ord(A,r);  well_ord(B,s) |] ==> \
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   182
\           well_ord(A*B, rmult(A,r,B,s))";
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   183
by (rtac well_ordI 1);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   184
by (asm_full_simp_tac (ZF_ss addsimps [well_ord_def, wf_on_rmult]) 1);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   185
by (asm_full_simp_tac 
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   186
    (ZF_ss addsimps [well_ord_def, tot_ord_def, linear_rmult]) 1);
760
f0200e91b272 added qed and qed_goal[w]
clasohm
parents: 662
diff changeset
   187
qed "well_ord_rmult";
437
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   188
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   189
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   190
(**** Inverse image of a relation ****)
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   191
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   192
(** Rewrite rule **)
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   193
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   194
goalw OrderArith.thy [rvimage_def] 
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   195
    "<a,b> : rvimage(A,f,r)  <->  <f`a,f`b>: r & a:A & b:A";
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   196
by (fast_tac ZF_cs 1);
760
f0200e91b272 added qed and qed_goal[w]
clasohm
parents: 662
diff changeset
   197
qed "rvimage_iff";
437
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   198
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   199
(** Type checking **)
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   200
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   201
goalw OrderArith.thy [rvimage_def] "rvimage(A,f,r) <= A*A";
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   202
by (rtac Collect_subset 1);
760
f0200e91b272 added qed and qed_goal[w]
clasohm
parents: 662
diff changeset
   203
qed "rvimage_type";
437
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   204
782
200a16083201 added bind_thm for theorems defined by "standard ..."
clasohm
parents: 770
diff changeset
   205
bind_thm ("field_rvimage", (rvimage_type RS field_rel_subset));
437
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   206
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   207
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   208
(** Linearity **)
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   209
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   210
val [finj,lin] = goalw OrderArith.thy [inj_def]
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   211
    "[| f: inj(A,B);  linear(B,r) |] ==> linear(A,rvimage(A,f,r))";
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   212
by (rewtac linear_def);    (*Note! the premises are NOT rewritten*)
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   213
by (REPEAT_FIRST (ares_tac [ballI]));
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   214
by (asm_simp_tac (ZF_ss addsimps [rvimage_iff]) 1);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   215
by (cut_facts_tac [finj] 1);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   216
by (res_inst_tac [("x","f`x"), ("y","f`y")] (lin RS linearE) 1);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   217
by (REPEAT_SOME (fast_tac (ZF_cs addSIs [apply_type])));
760
f0200e91b272 added qed and qed_goal[w]
clasohm
parents: 662
diff changeset
   218
qed "linear_rvimage";
437
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   219
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   220
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   221
(** Well-foundedness **)
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   222
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   223
goal OrderArith.thy
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   224
    "!!r. [| f: A->B;  wf[B](r) |] ==> wf[A](rvimage(A,f,r))";
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   225
by (rtac wf_onI2 1);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   226
by (subgoal_tac "ALL z:A. f`z=f`y --> z: Ba" 1);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   227
by (fast_tac ZF_cs 1);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   228
by (eres_inst_tac [("a","f`y")] wf_on_induct 1);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   229
by (fast_tac (ZF_cs addSIs [apply_type]) 1);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   230
by (best_tac (ZF_cs addSIs [apply_type] addSDs [rvimage_iff RS iffD1]) 1);
760
f0200e91b272 added qed and qed_goal[w]
clasohm
parents: 662
diff changeset
   231
qed "wf_on_rvimage";
437
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   232
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   233
goal OrderArith.thy 
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   234
    "!!r. [| f: inj(A,B);  well_ord(B,r) |] ==> well_ord(A, rvimage(A,f,r))";
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   235
by (rtac well_ordI 1);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   236
by (rewrite_goals_tac [well_ord_def, tot_ord_def]);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   237
by (fast_tac (ZF_cs addSIs [wf_on_rvimage, inj_is_fun]) 1);
435875e4b21d modifications for cardinal arithmetic
lcp
parents:
diff changeset
   238
by (fast_tac (ZF_cs addSIs [linear_rvimage]) 1);
760
f0200e91b272 added qed and qed_goal[w]
clasohm
parents: 662
diff changeset
   239
qed "well_ord_rvimage";