src/ZF/Order.thy
author haftmann
Tue, 10 Jul 2007 17:30:50 +0200
changeset 23709 fd31da8f752a
parent 16417 9bc16273c2d4
child 24893 b8ef7afe3a6b
permissions -rw-r--r--
moved lfp_induct2 here
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1478
2b8c2a7547ab expanded tabs
clasohm
parents: 1401
diff changeset
     1
(*  Title:      ZF/Order.thy
435
ca5356bd315a Addition of cardinals and order types, various tidying
lcp
parents:
diff changeset
     2
    ID:         $Id$
1478
2b8c2a7547ab expanded tabs
clasohm
parents: 1401
diff changeset
     3
    Author:     Lawrence C Paulson, Cambridge University Computer Laboratory
435
ca5356bd315a Addition of cardinals and order types, various tidying
lcp
parents:
diff changeset
     4
    Copyright   1994  University of Cambridge
ca5356bd315a Addition of cardinals and order types, various tidying
lcp
parents:
diff changeset
     5
13140
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
     6
Results from the book "Set Theory: an Introduction to Independence Proofs"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
     7
        by Kenneth Kunen.  Chapter 1, section 6.
435
ca5356bd315a Addition of cardinals and order types, various tidying
lcp
parents:
diff changeset
     8
*)
ca5356bd315a Addition of cardinals and order types, various tidying
lcp
parents:
diff changeset
     9
13356
c9cfe1638bf2 improved presentation markup
paulson
parents: 13339
diff changeset
    10
header{*Partial and Total Orderings: Basic Definitions and Properties*}
c9cfe1638bf2 improved presentation markup
paulson
parents: 13339
diff changeset
    11
16417
9bc16273c2d4 migrated theory headers to new format
haftmann
parents: 13701
diff changeset
    12
theory Order imports WF Perm begin
786
2a871417e7fc added constants mono_map, ord_iso_map
lcp
parents: 578
diff changeset
    13
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1851
diff changeset
    14
constdefs
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1851
diff changeset
    15
13140
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    16
  part_ord :: "[i,i]=>o"          	(*Strict partial ordering*)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    17
   "part_ord(A,r) == irrefl(A,r) & trans[A](r)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    18
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    19
  linear   :: "[i,i]=>o"          	(*Strict total ordering*)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    20
   "linear(A,r) == (ALL x:A. ALL y:A. <x,y>:r | x=y | <y,x>:r)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    21
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    22
  tot_ord  :: "[i,i]=>o"          	(*Strict total ordering*)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    23
   "tot_ord(A,r) == part_ord(A,r) & linear(A,r)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    24
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    25
  well_ord :: "[i,i]=>o"          	(*Well-ordering*)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    26
   "well_ord(A,r) == tot_ord(A,r) & wf[A](r)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    27
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    28
  mono_map :: "[i,i,i,i]=>i"      	(*Order-preserving maps*)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    29
   "mono_map(A,r,B,s) ==
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    30
	      {f: A->B. ALL x:A. ALL y:A. <x,y>:r --> <f`x,f`y>:s}"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    31
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    32
  ord_iso  :: "[i,i,i,i]=>i"		(*Order isomorphisms*)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    33
   "ord_iso(A,r,B,s) ==
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    34
	      {f: bij(A,B). ALL x:A. ALL y:A. <x,y>:r <-> <f`x,f`y>:s}"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    35
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    36
  pred     :: "[i,i,i]=>i"		(*Set of predecessors*)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    37
   "pred(A,x,r) == {y:A. <y,x>:r}"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    38
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    39
  ord_iso_map :: "[i,i,i,i]=>i"      	(*Construction for linearity theorem*)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    40
   "ord_iso_map(A,r,B,s) ==
13615
449a70d88b38 Numerous cosmetic changes, prompted by the new simplifier
paulson
parents: 13611
diff changeset
    41
     \<Union>x\<in>A. \<Union>y\<in>B. \<Union>f \<in> ord_iso(pred(A,x,r), r, pred(B,y,s), s). {<x,y>}"
13140
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    42
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    43
  first :: "[i, i, i] => o"
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1851
diff changeset
    44
    "first(u, X, R) == u:X & (ALL v:X. v~=u --> <u,v> : R)"
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1851
diff changeset
    45
13140
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    46
9683
f87c8c449018 added some xsymbols, and tidied
paulson
parents: 2469
diff changeset
    47
syntax (xsymbols)
13140
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    48
    ord_iso :: "[i,i,i,i]=>i"      ("(\<langle>_, _\<rangle> \<cong>/ \<langle>_, _\<rangle>)" 51)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    49
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    50
13356
c9cfe1638bf2 improved presentation markup
paulson
parents: 13339
diff changeset
    51
subsection{*Immediate Consequences of the Definitions*}
13140
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    52
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    53
lemma part_ord_Imp_asym:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    54
    "part_ord(A,r) ==> asym(r Int A*A)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    55
by (unfold part_ord_def irrefl_def trans_on_def asym_def, blast)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    56
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    57
lemma linearE:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    58
    "[| linear(A,r);  x:A;  y:A;
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    59
        <x,y>:r ==> P;  x=y ==> P;  <y,x>:r ==> P |]
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    60
     ==> P"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    61
by (simp add: linear_def, blast)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    62
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    63
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    64
(** General properties of well_ord **)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    65
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    66
lemma well_ordI:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    67
    "[| wf[A](r); linear(A,r) |] ==> well_ord(A,r)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    68
apply (simp add: irrefl_def part_ord_def tot_ord_def
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    69
                 trans_on_def well_ord_def wf_on_not_refl)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    70
apply (fast elim: linearE wf_on_asym wf_on_chain3)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    71
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    72
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    73
lemma well_ord_is_wf:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    74
    "well_ord(A,r) ==> wf[A](r)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    75
by (unfold well_ord_def, safe)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    76
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    77
lemma well_ord_is_trans_on:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    78
    "well_ord(A,r) ==> trans[A](r)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    79
by (unfold well_ord_def tot_ord_def part_ord_def, safe)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    80
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    81
lemma well_ord_is_linear: "well_ord(A,r) ==> linear(A,r)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    82
by (unfold well_ord_def tot_ord_def, blast)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    83
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    84
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    85
(** Derived rules for pred(A,x,r) **)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    86
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    87
lemma pred_iff: "y : pred(A,x,r) <-> <y,x>:r & y:A"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    88
by (unfold pred_def, blast)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    89
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    90
lemmas predI = conjI [THEN pred_iff [THEN iffD2]]
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    91
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    92
lemma predE: "[| y: pred(A,x,r);  [| y:A; <y,x>:r |] ==> P |] ==> P"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    93
by (simp add: pred_def)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    94
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    95
lemma pred_subset_under: "pred(A,x,r) <= r -`` {x}"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    96
by (simp add: pred_def, blast)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    97
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    98
lemma pred_subset: "pred(A,x,r) <= A"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
    99
by (simp add: pred_def, blast)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   100
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   101
lemma pred_pred_eq:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   102
    "pred(pred(A,x,r), y, r) = pred(A,x,r) Int pred(A,y,r)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   103
by (simp add: pred_def, blast)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   104
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   105
lemma trans_pred_pred_eq:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   106
    "[| trans[A](r);  <y,x>:r;  x:A;  y:A |]
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   107
     ==> pred(pred(A,x,r), y, r) = pred(A,y,r)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   108
by (unfold trans_on_def pred_def, blast)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   109
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   110
13356
c9cfe1638bf2 improved presentation markup
paulson
parents: 13339
diff changeset
   111
subsection{*Restricting an Ordering's Domain*}
c9cfe1638bf2 improved presentation markup
paulson
parents: 13339
diff changeset
   112
13140
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   113
(** The ordering's properties hold over all subsets of its domain
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   114
    [including initial segments of the form pred(A,x,r) **)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   115
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   116
(*Note: a relation s such that s<=r need not be a partial ordering*)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   117
lemma part_ord_subset:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   118
    "[| part_ord(A,r);  B<=A |] ==> part_ord(B,r)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   119
by (unfold part_ord_def irrefl_def trans_on_def, blast)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   120
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   121
lemma linear_subset:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   122
    "[| linear(A,r);  B<=A |] ==> linear(B,r)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   123
by (unfold linear_def, blast)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   124
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   125
lemma tot_ord_subset:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   126
    "[| tot_ord(A,r);  B<=A |] ==> tot_ord(B,r)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   127
apply (unfold tot_ord_def)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   128
apply (fast elim!: part_ord_subset linear_subset)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   129
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   130
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   131
lemma well_ord_subset:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   132
    "[| well_ord(A,r);  B<=A |] ==> well_ord(B,r)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   133
apply (unfold well_ord_def)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   134
apply (fast elim!: tot_ord_subset wf_on_subset_A)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   135
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   136
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   137
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   138
(** Relations restricted to a smaller domain, by Krzysztof Grabczewski **)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   139
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   140
lemma irrefl_Int_iff: "irrefl(A,r Int A*A) <-> irrefl(A,r)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   141
by (unfold irrefl_def, blast)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   142
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   143
lemma trans_on_Int_iff: "trans[A](r Int A*A) <-> trans[A](r)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   144
by (unfold trans_on_def, blast)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   145
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   146
lemma part_ord_Int_iff: "part_ord(A,r Int A*A) <-> part_ord(A,r)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   147
apply (unfold part_ord_def)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   148
apply (simp add: irrefl_Int_iff trans_on_Int_iff)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   149
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   150
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   151
lemma linear_Int_iff: "linear(A,r Int A*A) <-> linear(A,r)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   152
by (unfold linear_def, blast)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   153
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   154
lemma tot_ord_Int_iff: "tot_ord(A,r Int A*A) <-> tot_ord(A,r)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   155
apply (unfold tot_ord_def)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   156
apply (simp add: part_ord_Int_iff linear_Int_iff)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   157
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   158
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   159
lemma wf_on_Int_iff: "wf[A](r Int A*A) <-> wf[A](r)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   160
apply (unfold wf_on_def wf_def, fast) (*10 times faster than Blast_tac!*)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   161
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   162
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   163
lemma well_ord_Int_iff: "well_ord(A,r Int A*A) <-> well_ord(A,r)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   164
apply (unfold well_ord_def)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   165
apply (simp add: tot_ord_Int_iff wf_on_Int_iff)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   166
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   167
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   168
13356
c9cfe1638bf2 improved presentation markup
paulson
parents: 13339
diff changeset
   169
subsection{*Empty and Unit Domains*}
c9cfe1638bf2 improved presentation markup
paulson
parents: 13339
diff changeset
   170
13701
0a9228532106 generalized wf_on_unit to wf_on_any_0
paulson
parents: 13615
diff changeset
   171
(*The empty relation is well-founded*)
0a9228532106 generalized wf_on_unit to wf_on_any_0
paulson
parents: 13615
diff changeset
   172
lemma wf_on_any_0: "wf[A](0)"
0a9228532106 generalized wf_on_unit to wf_on_any_0
paulson
parents: 13615
diff changeset
   173
by (simp add: wf_on_def wf_def, fast)
0a9228532106 generalized wf_on_unit to wf_on_any_0
paulson
parents: 13615
diff changeset
   174
0a9228532106 generalized wf_on_unit to wf_on_any_0
paulson
parents: 13615
diff changeset
   175
subsubsection{*Relations over the Empty Set*}
13140
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   176
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   177
lemma irrefl_0: "irrefl(0,r)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   178
by (unfold irrefl_def, blast)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   179
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   180
lemma trans_on_0: "trans[0](r)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   181
by (unfold trans_on_def, blast)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   182
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   183
lemma part_ord_0: "part_ord(0,r)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   184
apply (unfold part_ord_def)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   185
apply (simp add: irrefl_0 trans_on_0)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   186
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   187
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   188
lemma linear_0: "linear(0,r)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   189
by (unfold linear_def, blast)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   190
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   191
lemma tot_ord_0: "tot_ord(0,r)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   192
apply (unfold tot_ord_def)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   193
apply (simp add: part_ord_0 linear_0)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   194
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   195
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   196
lemma wf_on_0: "wf[0](r)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   197
by (unfold wf_on_def wf_def, blast)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   198
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   199
lemma well_ord_0: "well_ord(0,r)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   200
apply (unfold well_ord_def)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   201
apply (simp add: tot_ord_0 wf_on_0)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   202
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   203
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   204
13701
0a9228532106 generalized wf_on_unit to wf_on_any_0
paulson
parents: 13615
diff changeset
   205
subsubsection{*The Empty Relation Well-Orders the Unit Set*}
0a9228532106 generalized wf_on_unit to wf_on_any_0
paulson
parents: 13615
diff changeset
   206
0a9228532106 generalized wf_on_unit to wf_on_any_0
paulson
parents: 13615
diff changeset
   207
text{*by Grabczewski*}
13140
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   208
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   209
lemma tot_ord_unit: "tot_ord({a},0)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   210
by (simp add: irrefl_def trans_on_def part_ord_def linear_def tot_ord_def)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   211
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   212
lemma well_ord_unit: "well_ord({a},0)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   213
apply (unfold well_ord_def)
13701
0a9228532106 generalized wf_on_unit to wf_on_any_0
paulson
parents: 13615
diff changeset
   214
apply (simp add: tot_ord_unit wf_on_any_0)
13140
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   215
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   216
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   217
13356
c9cfe1638bf2 improved presentation markup
paulson
parents: 13339
diff changeset
   218
subsection{*Order-Isomorphisms*}
c9cfe1638bf2 improved presentation markup
paulson
parents: 13339
diff changeset
   219
c9cfe1638bf2 improved presentation markup
paulson
parents: 13339
diff changeset
   220
text{*Suppes calls them "similarities"*}
c9cfe1638bf2 improved presentation markup
paulson
parents: 13339
diff changeset
   221
13140
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   222
(** Order-preserving (monotone) maps **)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   223
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   224
lemma mono_map_is_fun: "f: mono_map(A,r,B,s) ==> f: A->B"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   225
by (simp add: mono_map_def)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   226
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   227
lemma mono_map_is_inj:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   228
    "[| linear(A,r);  wf[B](s);  f: mono_map(A,r,B,s) |] ==> f: inj(A,B)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   229
apply (unfold mono_map_def inj_def, clarify)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   230
apply (erule_tac x=w and y=x in linearE, assumption+)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   231
apply (force intro: apply_type dest: wf_on_not_refl)+
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   232
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   233
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   234
lemma ord_isoI:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   235
    "[| f: bij(A, B);
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   236
        !!x y. [| x:A; y:A |] ==> <x, y> : r <-> <f`x, f`y> : s |]
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   237
     ==> f: ord_iso(A,r,B,s)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   238
by (simp add: ord_iso_def)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   239
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   240
lemma ord_iso_is_mono_map:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   241
    "f: ord_iso(A,r,B,s) ==> f: mono_map(A,r,B,s)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   242
apply (simp add: ord_iso_def mono_map_def)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   243
apply (blast dest!: bij_is_fun)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   244
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   245
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   246
lemma ord_iso_is_bij:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   247
    "f: ord_iso(A,r,B,s) ==> f: bij(A,B)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   248
by (simp add: ord_iso_def)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   249
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   250
(*Needed?  But ord_iso_converse is!*)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   251
lemma ord_iso_apply:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   252
    "[| f: ord_iso(A,r,B,s);  <x,y>: r;  x:A;  y:A |] ==> <f`x, f`y> : s"
13611
2edf034c902a Adapted to new simplifier.
berghofe
parents: 13356
diff changeset
   253
by (simp add: ord_iso_def)
13140
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   254
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   255
lemma ord_iso_converse:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   256
    "[| f: ord_iso(A,r,B,s);  <x,y>: s;  x:B;  y:B |]
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   257
     ==> <converse(f) ` x, converse(f) ` y> : r"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   258
apply (simp add: ord_iso_def, clarify)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   259
apply (erule bspec [THEN bspec, THEN iffD2])
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   260
apply (erule asm_rl bij_converse_bij [THEN bij_is_fun, THEN apply_type])+
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   261
apply (auto simp add: right_inverse_bij)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   262
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   263
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   264
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   265
(** Symmetry and Transitivity Rules **)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   266
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   267
(*Reflexivity of similarity*)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   268
lemma ord_iso_refl: "id(A): ord_iso(A,r,A,r)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   269
by (rule id_bij [THEN ord_isoI], simp)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   270
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   271
(*Symmetry of similarity*)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   272
lemma ord_iso_sym: "f: ord_iso(A,r,B,s) ==> converse(f): ord_iso(B,s,A,r)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   273
apply (simp add: ord_iso_def)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   274
apply (auto simp add: right_inverse_bij bij_converse_bij
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   275
                      bij_is_fun [THEN apply_funtype])
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   276
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   277
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   278
(*Transitivity of similarity*)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   279
lemma mono_map_trans:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   280
    "[| g: mono_map(A,r,B,s);  f: mono_map(B,s,C,t) |]
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   281
     ==> (f O g): mono_map(A,r,C,t)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   282
apply (unfold mono_map_def)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   283
apply (auto simp add: comp_fun)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   284
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   285
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   286
(*Transitivity of similarity: the order-isomorphism relation*)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   287
lemma ord_iso_trans:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   288
    "[| g: ord_iso(A,r,B,s);  f: ord_iso(B,s,C,t) |]
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   289
     ==> (f O g): ord_iso(A,r,C,t)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   290
apply (unfold ord_iso_def, clarify)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   291
apply (frule bij_is_fun [of f])
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   292
apply (frule bij_is_fun [of g])
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   293
apply (auto simp add: comp_bij)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   294
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   295
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   296
(** Two monotone maps can make an order-isomorphism **)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   297
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   298
lemma mono_ord_isoI:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   299
    "[| f: mono_map(A,r,B,s);  g: mono_map(B,s,A,r);
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   300
        f O g = id(B);  g O f = id(A) |] ==> f: ord_iso(A,r,B,s)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   301
apply (simp add: ord_iso_def mono_map_def, safe)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   302
apply (intro fg_imp_bijective, auto)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   303
apply (subgoal_tac "<g` (f`x), g` (f`y) > : r")
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   304
apply (simp add: comp_eq_id_iff [THEN iffD1])
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   305
apply (blast intro: apply_funtype)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   306
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   307
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   308
lemma well_ord_mono_ord_isoI:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   309
     "[| well_ord(A,r);  well_ord(B,s);
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   310
         f: mono_map(A,r,B,s);  converse(f): mono_map(B,s,A,r) |]
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   311
      ==> f: ord_iso(A,r,B,s)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   312
apply (intro mono_ord_isoI, auto)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   313
apply (frule mono_map_is_fun [THEN fun_is_rel])
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   314
apply (erule converse_converse [THEN subst], rule left_comp_inverse)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   315
apply (blast intro: left_comp_inverse mono_map_is_inj well_ord_is_linear
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   316
                    well_ord_is_wf)+
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   317
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   318
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   319
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   320
(** Order-isomorphisms preserve the ordering's properties **)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   321
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   322
lemma part_ord_ord_iso:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   323
    "[| part_ord(B,s);  f: ord_iso(A,r,B,s) |] ==> part_ord(A,r)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   324
apply (simp add: part_ord_def irrefl_def trans_on_def ord_iso_def)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   325
apply (fast intro: bij_is_fun [THEN apply_type])
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   326
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   327
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   328
lemma linear_ord_iso:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   329
    "[| linear(B,s);  f: ord_iso(A,r,B,s) |] ==> linear(A,r)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   330
apply (simp add: linear_def ord_iso_def, safe)
13339
0f89104dd377 Fixed quantified variable name preservation for ball and bex (bounded quants)
paulson
parents: 13212
diff changeset
   331
apply (drule_tac x1 = "f`x" and x = "f`y" in bspec [THEN bspec])
13140
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   332
apply (safe elim!: bij_is_fun [THEN apply_type])
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   333
apply (drule_tac t = "op ` (converse (f))" in subst_context)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   334
apply (simp add: left_inverse_bij)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   335
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   336
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   337
lemma wf_on_ord_iso:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   338
    "[| wf[B](s);  f: ord_iso(A,r,B,s) |] ==> wf[A](r)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   339
apply (simp add: wf_on_def wf_def ord_iso_def, safe)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   340
apply (drule_tac x = "{f`z. z:Z Int A}" in spec)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   341
apply (safe intro!: equalityI)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   342
apply (blast dest!: equalityD1 intro: bij_is_fun [THEN apply_type])+
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   343
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   344
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   345
lemma well_ord_ord_iso:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   346
    "[| well_ord(B,s);  f: ord_iso(A,r,B,s) |] ==> well_ord(A,r)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   347
apply (unfold well_ord_def tot_ord_def)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   348
apply (fast elim!: part_ord_ord_iso linear_ord_iso wf_on_ord_iso)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   349
done
9683
f87c8c449018 added some xsymbols, and tidied
paulson
parents: 2469
diff changeset
   350
f87c8c449018 added some xsymbols, and tidied
paulson
parents: 2469
diff changeset
   351
13356
c9cfe1638bf2 improved presentation markup
paulson
parents: 13339
diff changeset
   352
subsection{*Main results of Kunen, Chapter 1 section 6*}
13140
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   353
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   354
(*Inductive argument for Kunen's Lemma 6.1, etc.
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   355
  Simple proof from Halmos, page 72*)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   356
lemma well_ord_iso_subset_lemma:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   357
     "[| well_ord(A,r);  f: ord_iso(A,r, A',r);  A'<= A;  y: A |]
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   358
      ==> ~ <f`y, y>: r"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   359
apply (simp add: well_ord_def ord_iso_def)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   360
apply (elim conjE CollectE)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   361
apply (rule_tac a=y in wf_on_induct, assumption+)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   362
apply (blast dest: bij_is_fun [THEN apply_type])
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   363
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   364
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   365
(*Kunen's Lemma 6.1: there's no order-isomorphism to an initial segment
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   366
                     of a well-ordering*)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   367
lemma well_ord_iso_predE:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   368
     "[| well_ord(A,r);  f : ord_iso(A, r, pred(A,x,r), r);  x:A |] ==> P"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   369
apply (insert well_ord_iso_subset_lemma [of A r f "pred(A,x,r)" x])
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   370
apply (simp add: pred_subset)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   371
(*Now we know  f`x < x *)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   372
apply (drule ord_iso_is_bij [THEN bij_is_fun, THEN apply_type], assumption)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   373
(*Now we also know f`x : pred(A,x,r);  contradiction! *)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   374
apply (simp add: well_ord_def pred_def)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   375
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   376
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   377
(*Simple consequence of Lemma 6.1*)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   378
lemma well_ord_iso_pred_eq:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   379
     "[| well_ord(A,r);  f : ord_iso(pred(A,a,r), r, pred(A,c,r), r);
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   380
         a:A;  c:A |] ==> a=c"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   381
apply (frule well_ord_is_trans_on)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   382
apply (frule well_ord_is_linear)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   383
apply (erule_tac x=a and y=c in linearE, assumption+)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   384
apply (drule ord_iso_sym)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   385
(*two symmetric cases*)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   386
apply (auto elim!: well_ord_subset [OF _ pred_subset, THEN well_ord_iso_predE]
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   387
            intro!: predI
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   388
            simp add: trans_pred_pred_eq)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   389
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   390
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   391
(*Does not assume r is a wellordering!*)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   392
lemma ord_iso_image_pred:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   393
     "[|f : ord_iso(A,r,B,s);  a:A|] ==> f `` pred(A,a,r) = pred(B, f`a, s)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   394
apply (unfold ord_iso_def pred_def)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   395
apply (erule CollectE)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   396
apply (simp (no_asm_simp) add: image_fun [OF bij_is_fun Collect_subset])
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   397
apply (rule equalityI)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   398
apply (safe elim!: bij_is_fun [THEN apply_type])
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   399
apply (rule RepFun_eqI)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   400
apply (blast intro!: right_inverse_bij [symmetric])
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   401
apply (auto simp add: right_inverse_bij  bij_is_fun [THEN apply_funtype])
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   402
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   403
13212
ba84715f6785 better proof of ord_iso_restrict_pred
paulson
parents: 13185
diff changeset
   404
lemma ord_iso_restrict_image:
ba84715f6785 better proof of ord_iso_restrict_pred
paulson
parents: 13185
diff changeset
   405
     "[| f : ord_iso(A,r,B,s);  C<=A |] 
ba84715f6785 better proof of ord_iso_restrict_pred
paulson
parents: 13185
diff changeset
   406
      ==> restrict(f,C) : ord_iso(C, r, f``C, s)"
ba84715f6785 better proof of ord_iso_restrict_pred
paulson
parents: 13185
diff changeset
   407
apply (simp add: ord_iso_def) 
ba84715f6785 better proof of ord_iso_restrict_pred
paulson
parents: 13185
diff changeset
   408
apply (blast intro: bij_is_inj restrict_bij) 
ba84715f6785 better proof of ord_iso_restrict_pred
paulson
parents: 13185
diff changeset
   409
done
ba84715f6785 better proof of ord_iso_restrict_pred
paulson
parents: 13185
diff changeset
   410
13140
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   411
(*But in use, A and B may themselves be initial segments.  Then use
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   412
  trans_pred_pred_eq to simplify the pred(pred...) terms.  See just below.*)
13212
ba84715f6785 better proof of ord_iso_restrict_pred
paulson
parents: 13185
diff changeset
   413
lemma ord_iso_restrict_pred:
ba84715f6785 better proof of ord_iso_restrict_pred
paulson
parents: 13185
diff changeset
   414
   "[| f : ord_iso(A,r,B,s);   a:A |]
ba84715f6785 better proof of ord_iso_restrict_pred
paulson
parents: 13185
diff changeset
   415
    ==> restrict(f, pred(A,a,r)) : ord_iso(pred(A,a,r), r, pred(B, f`a, s), s)"
ba84715f6785 better proof of ord_iso_restrict_pred
paulson
parents: 13185
diff changeset
   416
apply (simp add: ord_iso_image_pred [symmetric]) 
ba84715f6785 better proof of ord_iso_restrict_pred
paulson
parents: 13185
diff changeset
   417
apply (blast intro: ord_iso_restrict_image elim: predE) 
13140
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   418
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   419
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   420
(*Tricky; a lot of forward proof!*)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   421
lemma well_ord_iso_preserving:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   422
     "[| well_ord(A,r);  well_ord(B,s);  <a,c>: r;
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   423
         f : ord_iso(pred(A,a,r), r, pred(B,b,s), s);
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   424
         g : ord_iso(pred(A,c,r), r, pred(B,d,s), s);
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   425
         a:A;  c:A;  b:B;  d:B |] ==> <b,d>: s"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   426
apply (frule ord_iso_is_bij [THEN bij_is_fun, THEN apply_type], (erule asm_rl predI predE)+)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   427
apply (subgoal_tac "b = g`a")
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   428
apply (simp (no_asm_simp))
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   429
apply (rule well_ord_iso_pred_eq, auto)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   430
apply (frule ord_iso_restrict_pred, (erule asm_rl predI)+)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   431
apply (simp add: well_ord_is_trans_on trans_pred_pred_eq)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   432
apply (erule ord_iso_sym [THEN ord_iso_trans], assumption)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   433
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   434
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   435
(*See Halmos, page 72*)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   436
lemma well_ord_iso_unique_lemma:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   437
     "[| well_ord(A,r);
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   438
         f: ord_iso(A,r, B,s);  g: ord_iso(A,r, B,s);  y: A |]
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   439
      ==> ~ <g`y, f`y> : s"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   440
apply (frule well_ord_iso_subset_lemma)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   441
apply (rule_tac f = "converse (f) " and g = g in ord_iso_trans)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   442
apply auto
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   443
apply (blast intro: ord_iso_sym)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   444
apply (frule ord_iso_is_bij [of f])
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   445
apply (frule ord_iso_is_bij [of g])
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   446
apply (frule ord_iso_converse)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   447
apply (blast intro!: bij_converse_bij
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   448
             intro: bij_is_fun apply_funtype)+
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   449
apply (erule notE)
13176
312bd350579b conversion of Perm to Isar. Strengthening of comp_fun_apply
paulson
parents: 13140
diff changeset
   450
apply (simp add: left_inverse_bij bij_is_fun comp_fun_apply [of _ A B])
13140
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   451
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   452
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   453
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   454
(*Kunen's Lemma 6.2: Order-isomorphisms between well-orderings are unique*)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   455
lemma well_ord_iso_unique: "[| well_ord(A,r);
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   456
         f: ord_iso(A,r, B,s);  g: ord_iso(A,r, B,s) |] ==> f = g"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   457
apply (rule fun_extension)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   458
apply (erule ord_iso_is_bij [THEN bij_is_fun])+
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   459
apply (subgoal_tac "f`x : B & g`x : B & linear(B,s)")
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   460
 apply (simp add: linear_def)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   461
 apply (blast dest: well_ord_iso_unique_lemma)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   462
apply (blast intro: ord_iso_is_bij bij_is_fun apply_funtype
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   463
                    well_ord_is_linear well_ord_ord_iso ord_iso_sym)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   464
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   465
13356
c9cfe1638bf2 improved presentation markup
paulson
parents: 13339
diff changeset
   466
subsection{*Towards Kunen's Theorem 6.3: Linearity of the Similarity Relation*}
13140
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   467
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   468
lemma ord_iso_map_subset: "ord_iso_map(A,r,B,s) <= A*B"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   469
by (unfold ord_iso_map_def, blast)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   470
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   471
lemma domain_ord_iso_map: "domain(ord_iso_map(A,r,B,s)) <= A"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   472
by (unfold ord_iso_map_def, blast)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   473
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   474
lemma range_ord_iso_map: "range(ord_iso_map(A,r,B,s)) <= B"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   475
by (unfold ord_iso_map_def, blast)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   476
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   477
lemma converse_ord_iso_map:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   478
    "converse(ord_iso_map(A,r,B,s)) = ord_iso_map(B,s,A,r)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   479
apply (unfold ord_iso_map_def)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   480
apply (blast intro: ord_iso_sym)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   481
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   482
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   483
lemma function_ord_iso_map:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   484
    "well_ord(B,s) ==> function(ord_iso_map(A,r,B,s))"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   485
apply (unfold ord_iso_map_def function_def)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   486
apply (blast intro: well_ord_iso_pred_eq ord_iso_sym ord_iso_trans)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   487
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   488
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   489
lemma ord_iso_map_fun: "well_ord(B,s) ==> ord_iso_map(A,r,B,s)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   490
           : domain(ord_iso_map(A,r,B,s)) -> range(ord_iso_map(A,r,B,s))"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   491
by (simp add: Pi_iff function_ord_iso_map
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   492
                 ord_iso_map_subset [THEN domain_times_range])
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   493
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   494
lemma ord_iso_map_mono_map:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   495
    "[| well_ord(A,r);  well_ord(B,s) |]
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   496
     ==> ord_iso_map(A,r,B,s)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   497
           : mono_map(domain(ord_iso_map(A,r,B,s)), r,
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   498
                      range(ord_iso_map(A,r,B,s)), s)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   499
apply (unfold mono_map_def)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   500
apply (simp (no_asm_simp) add: ord_iso_map_fun)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   501
apply safe
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   502
apply (subgoal_tac "x:A & ya:A & y:B & yb:B")
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   503
 apply (simp add: apply_equality [OF _  ord_iso_map_fun])
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   504
 apply (unfold ord_iso_map_def)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   505
 apply (blast intro: well_ord_iso_preserving, blast)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   506
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   507
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   508
lemma ord_iso_map_ord_iso:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   509
    "[| well_ord(A,r);  well_ord(B,s) |] ==> ord_iso_map(A,r,B,s)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   510
           : ord_iso(domain(ord_iso_map(A,r,B,s)), r,
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   511
                      range(ord_iso_map(A,r,B,s)), s)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   512
apply (rule well_ord_mono_ord_isoI)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   513
   prefer 4
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   514
   apply (rule converse_ord_iso_map [THEN subst])
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   515
   apply (simp add: ord_iso_map_mono_map
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   516
		    ord_iso_map_subset [THEN converse_converse])
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   517
apply (blast intro!: domain_ord_iso_map range_ord_iso_map
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   518
             intro: well_ord_subset ord_iso_map_mono_map)+
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   519
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   520
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   521
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   522
(*One way of saying that domain(ord_iso_map(A,r,B,s)) is downwards-closed*)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   523
lemma domain_ord_iso_map_subset:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   524
     "[| well_ord(A,r);  well_ord(B,s);
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   525
         a: A;  a ~: domain(ord_iso_map(A,r,B,s)) |]
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   526
      ==>  domain(ord_iso_map(A,r,B,s)) <= pred(A, a, r)"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   527
apply (unfold ord_iso_map_def)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   528
apply (safe intro!: predI)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   529
(*Case analysis on  xa vs a in r *)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   530
apply (simp (no_asm_simp))
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   531
apply (frule_tac A = A in well_ord_is_linear)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   532
apply (rename_tac b y f)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   533
apply (erule_tac x=b and y=a in linearE, assumption+)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   534
(*Trivial case: b=a*)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   535
apply clarify
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   536
apply blast
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   537
(*Harder case: <a, xa>: r*)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   538
apply (frule ord_iso_is_bij [THEN bij_is_fun, THEN apply_type],
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   539
       (erule asm_rl predI predE)+)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   540
apply (frule ord_iso_restrict_pred)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   541
 apply (simp add: pred_iff)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   542
apply (simp split: split_if_asm
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   543
          add: well_ord_is_trans_on trans_pred_pred_eq domain_UN domain_Union, blast)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   544
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   545
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   546
(*For the 4-way case analysis in the main result*)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   547
lemma domain_ord_iso_map_cases:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   548
     "[| well_ord(A,r);  well_ord(B,s) |]
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   549
      ==> domain(ord_iso_map(A,r,B,s)) = A |
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   550
          (EX x:A. domain(ord_iso_map(A,r,B,s)) = pred(A,x,r))"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   551
apply (frule well_ord_is_wf)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   552
apply (unfold wf_on_def wf_def)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   553
apply (drule_tac x = "A-domain (ord_iso_map (A,r,B,s))" in spec)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   554
apply safe
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   555
(*The first case: the domain equals A*)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   556
apply (rule domain_ord_iso_map [THEN equalityI])
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   557
apply (erule Diff_eq_0_iff [THEN iffD1])
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   558
(*The other case: the domain equals an initial segment*)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   559
apply (blast del: domainI subsetI
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   560
	     elim!: predE
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   561
	     intro!: domain_ord_iso_map_subset
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   562
             intro: subsetI)+
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   563
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   564
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   565
(*As above, by duality*)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   566
lemma range_ord_iso_map_cases:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   567
    "[| well_ord(A,r);  well_ord(B,s) |]
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   568
     ==> range(ord_iso_map(A,r,B,s)) = B |
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   569
         (EX y:B. range(ord_iso_map(A,r,B,s)) = pred(B,y,s))"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   570
apply (rule converse_ord_iso_map [THEN subst])
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   571
apply (simp add: domain_ord_iso_map_cases)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   572
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   573
13356
c9cfe1638bf2 improved presentation markup
paulson
parents: 13339
diff changeset
   574
text{*Kunen's Theorem 6.3: Fundamental Theorem for Well-Ordered Sets*}
c9cfe1638bf2 improved presentation markup
paulson
parents: 13339
diff changeset
   575
theorem well_ord_trichotomy:
13140
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   576
   "[| well_ord(A,r);  well_ord(B,s) |]
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   577
    ==> ord_iso_map(A,r,B,s) : ord_iso(A, r, B, s) |
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   578
        (EX x:A. ord_iso_map(A,r,B,s) : ord_iso(pred(A,x,r), r, B, s)) |
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   579
        (EX y:B. ord_iso_map(A,r,B,s) : ord_iso(A, r, pred(B,y,s), s))"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   580
apply (frule_tac B = B in domain_ord_iso_map_cases, assumption)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   581
apply (frule_tac B = B in range_ord_iso_map_cases, assumption)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   582
apply (drule ord_iso_map_ord_iso, assumption)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   583
apply (elim disjE bexE)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   584
   apply (simp_all add: bexI)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   585
apply (rule wf_on_not_refl [THEN notE])
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   586
  apply (erule well_ord_is_wf)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   587
 apply assumption
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   588
apply (subgoal_tac "<x,y>: ord_iso_map (A,r,B,s) ")
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   589
 apply (drule rangeI)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   590
 apply (simp add: pred_def)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   591
apply (unfold ord_iso_map_def, blast)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   592
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   593
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   594
13356
c9cfe1638bf2 improved presentation markup
paulson
parents: 13339
diff changeset
   595
subsection{*Miscellaneous Results by Krzysztof Grabczewski*}
c9cfe1638bf2 improved presentation markup
paulson
parents: 13339
diff changeset
   596
c9cfe1638bf2 improved presentation markup
paulson
parents: 13339
diff changeset
   597
(** Properties of converse(r) **)
13140
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   598
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   599
lemma irrefl_converse: "irrefl(A,r) ==> irrefl(A,converse(r))"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   600
by (unfold irrefl_def, blast)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   601
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   602
lemma trans_on_converse: "trans[A](r) ==> trans[A](converse(r))"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   603
by (unfold trans_on_def, blast)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   604
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   605
lemma part_ord_converse: "part_ord(A,r) ==> part_ord(A,converse(r))"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   606
apply (unfold part_ord_def)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   607
apply (blast intro!: irrefl_converse trans_on_converse)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   608
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   609
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   610
lemma linear_converse: "linear(A,r) ==> linear(A,converse(r))"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   611
by (unfold linear_def, blast)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   612
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   613
lemma tot_ord_converse: "tot_ord(A,r) ==> tot_ord(A,converse(r))"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   614
apply (unfold tot_ord_def)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   615
apply (blast intro!: part_ord_converse linear_converse)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   616
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   617
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   618
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   619
(** By Krzysztof Grabczewski.
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   620
    Lemmas involving the first element of a well ordered set **)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   621
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   622
lemma first_is_elem: "first(b,B,r) ==> b:B"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   623
by (unfold first_def, blast)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   624
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   625
lemma well_ord_imp_ex1_first:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   626
        "[| well_ord(A,r); B<=A; B~=0 |] ==> (EX! b. first(b,B,r))"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   627
apply (unfold well_ord_def wf_on_def wf_def first_def)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   628
apply (elim conjE allE disjE, blast)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   629
apply (erule bexE)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   630
apply (rule_tac a = x in ex1I, auto)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   631
apply (unfold tot_ord_def linear_def, blast)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   632
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   633
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   634
lemma the_first_in:
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   635
     "[| well_ord(A,r); B<=A; B~=0 |] ==> (THE b. first(b,B,r)) : B"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   636
apply (drule well_ord_imp_ex1_first, assumption+)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   637
apply (rule first_is_elem)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   638
apply (erule theI)
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   639
done
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   640
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   641
ML {*
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   642
val pred_def = thm "pred_def"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   643
val linear_def = thm "linear_def"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   644
val part_ord_def = thm "part_ord_def"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   645
val tot_ord_def = thm "tot_ord_def"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   646
val well_ord_def = thm "well_ord_def"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   647
val ord_iso_def = thm "ord_iso_def"
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   648
val mono_map_def = thm "mono_map_def";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   649
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   650
val part_ord_Imp_asym = thm "part_ord_Imp_asym";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   651
val linearE = thm "linearE";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   652
val well_ordI = thm "well_ordI";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   653
val well_ord_is_wf = thm "well_ord_is_wf";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   654
val well_ord_is_trans_on = thm "well_ord_is_trans_on";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   655
val well_ord_is_linear = thm "well_ord_is_linear";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   656
val pred_iff = thm "pred_iff";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   657
val predI = thm "predI";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   658
val predE = thm "predE";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   659
val pred_subset_under = thm "pred_subset_under";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   660
val pred_subset = thm "pred_subset";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   661
val pred_pred_eq = thm "pred_pred_eq";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   662
val trans_pred_pred_eq = thm "trans_pred_pred_eq";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   663
val part_ord_subset = thm "part_ord_subset";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   664
val linear_subset = thm "linear_subset";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   665
val tot_ord_subset = thm "tot_ord_subset";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   666
val well_ord_subset = thm "well_ord_subset";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   667
val irrefl_Int_iff = thm "irrefl_Int_iff";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   668
val trans_on_Int_iff = thm "trans_on_Int_iff";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   669
val part_ord_Int_iff = thm "part_ord_Int_iff";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   670
val linear_Int_iff = thm "linear_Int_iff";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   671
val tot_ord_Int_iff = thm "tot_ord_Int_iff";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   672
val wf_on_Int_iff = thm "wf_on_Int_iff";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   673
val well_ord_Int_iff = thm "well_ord_Int_iff";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   674
val irrefl_0 = thm "irrefl_0";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   675
val trans_on_0 = thm "trans_on_0";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   676
val part_ord_0 = thm "part_ord_0";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   677
val linear_0 = thm "linear_0";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   678
val tot_ord_0 = thm "tot_ord_0";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   679
val wf_on_0 = thm "wf_on_0";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   680
val well_ord_0 = thm "well_ord_0";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   681
val tot_ord_unit = thm "tot_ord_unit";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   682
val well_ord_unit = thm "well_ord_unit";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   683
val mono_map_is_fun = thm "mono_map_is_fun";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   684
val mono_map_is_inj = thm "mono_map_is_inj";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   685
val ord_isoI = thm "ord_isoI";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   686
val ord_iso_is_mono_map = thm "ord_iso_is_mono_map";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   687
val ord_iso_is_bij = thm "ord_iso_is_bij";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   688
val ord_iso_apply = thm "ord_iso_apply";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   689
val ord_iso_converse = thm "ord_iso_converse";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   690
val ord_iso_refl = thm "ord_iso_refl";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   691
val ord_iso_sym = thm "ord_iso_sym";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   692
val mono_map_trans = thm "mono_map_trans";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   693
val ord_iso_trans = thm "ord_iso_trans";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   694
val mono_ord_isoI = thm "mono_ord_isoI";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   695
val well_ord_mono_ord_isoI = thm "well_ord_mono_ord_isoI";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   696
val part_ord_ord_iso = thm "part_ord_ord_iso";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   697
val linear_ord_iso = thm "linear_ord_iso";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   698
val wf_on_ord_iso = thm "wf_on_ord_iso";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   699
val well_ord_ord_iso = thm "well_ord_ord_iso";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   700
val well_ord_iso_predE = thm "well_ord_iso_predE";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   701
val well_ord_iso_pred_eq = thm "well_ord_iso_pred_eq";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   702
val ord_iso_image_pred = thm "ord_iso_image_pred";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   703
val ord_iso_restrict_pred = thm "ord_iso_restrict_pred";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   704
val well_ord_iso_preserving = thm "well_ord_iso_preserving";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   705
val well_ord_iso_unique = thm "well_ord_iso_unique";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   706
val ord_iso_map_subset = thm "ord_iso_map_subset";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   707
val domain_ord_iso_map = thm "domain_ord_iso_map";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   708
val range_ord_iso_map = thm "range_ord_iso_map";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   709
val converse_ord_iso_map = thm "converse_ord_iso_map";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   710
val function_ord_iso_map = thm "function_ord_iso_map";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   711
val ord_iso_map_fun = thm "ord_iso_map_fun";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   712
val ord_iso_map_mono_map = thm "ord_iso_map_mono_map";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   713
val ord_iso_map_ord_iso = thm "ord_iso_map_ord_iso";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   714
val domain_ord_iso_map_subset = thm "domain_ord_iso_map_subset";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   715
val domain_ord_iso_map_cases = thm "domain_ord_iso_map_cases";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   716
val range_ord_iso_map_cases = thm "range_ord_iso_map_cases";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   717
val well_ord_trichotomy = thm "well_ord_trichotomy";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   718
val irrefl_converse = thm "irrefl_converse";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   719
val trans_on_converse = thm "trans_on_converse";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   720
val part_ord_converse = thm "part_ord_converse";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   721
val linear_converse = thm "linear_converse";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   722
val tot_ord_converse = thm "tot_ord_converse";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   723
val first_is_elem = thm "first_is_elem";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   724
val well_ord_imp_ex1_first = thm "well_ord_imp_ex1_first";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   725
val the_first_in = thm "the_first_in";
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   726
*}
6d97dbb189a9 converted Order.ML OrderType.ML OrderArith.ML to Isar format
paulson
parents: 13119
diff changeset
   727
435
ca5356bd315a Addition of cardinals and order types, various tidying
lcp
parents:
diff changeset
   728
end