| author | wenzelm | 
| Sun, 12 Jan 2025 12:54:25 +0100 | |
| changeset 81773 | 5df6481f45f9 | 
| parent 76217 | 8655344f1cf6 | 
| permissions | -rw-r--r-- | 
| 1478 | 1 | (* Title: ZF/OrderType.thy | 
| 2 | Author: Lawrence C Paulson, Cambridge University Computer Laboratory | |
| 435 | 3 | Copyright 1994 University of Cambridge | 
| 4 | *) | |
| 5 | ||
| 60770 | 6 | section\<open>Order Types and Ordinal Arithmetic\<close> | 
| 13356 | 7 | |
| 68490 
eb53f944c8cd
simplified ZF theory names (in contrast to 6a0801279f4c): session-qualification already achieves disjointness;
 wenzelm parents: 
63648diff
changeset | 8 | theory OrderType imports OrderArith OrdQuant Nat begin | 
| 13221 | 9 | |
| 60770 | 10 | text\<open>The order type of a well-ordering is the least ordinal isomorphic to it. | 
| 13356 | 11 | Ordinal arithmetic is traditionally defined in terms of order types, as it is | 
| 60770 | 12 | here. But a definition by transfinite recursion would be much simpler!\<close> | 
| 13356 | 13 | |
| 46820 | 14 | definition | 
| 76215 
a642599ffdea
More syntactic cleanup. LaTeX markup working
 paulson <lp15@cam.ac.uk> parents: 
76214diff
changeset | 15 | ordermap :: "[i,i]\<Rightarrow>i" where | 
| 
a642599ffdea
More syntactic cleanup. LaTeX markup working
 paulson <lp15@cam.ac.uk> parents: 
76214diff
changeset | 16 | "ordermap(A,r) \<equiv> \<lambda>x\<in>A. wfrec[A](r, x, \<lambda>x f. f `` pred(A,x,r))" | 
| 435 | 17 | |
| 46820 | 18 | definition | 
| 76215 
a642599ffdea
More syntactic cleanup. LaTeX markup working
 paulson <lp15@cam.ac.uk> parents: 
76214diff
changeset | 19 | ordertype :: "[i,i]\<Rightarrow>i" where | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 20 | "ordertype(A,r) \<equiv> ordermap(A,r)``A" | 
| 850 | 21 | |
| 46820 | 22 | definition | 
| 13125 
be50e0b050b2
ordinal addition now coerces its arguments to ordinals
 paulson parents: 
12114diff
changeset | 23 | (*alternative definition of ordinal numbers*) | 
| 76215 
a642599ffdea
More syntactic cleanup. LaTeX markup working
 paulson <lp15@cam.ac.uk> parents: 
76214diff
changeset | 24 | Ord_alt :: "i \<Rightarrow> o" where | 
| 76214 | 25 | "Ord_alt(X) \<equiv> well_ord(X, Memrel(X)) \<and> (\<forall>u\<in>X. u=pred(X, u, Memrel(X)))" | 
| 435 | 26 | |
| 46820 | 27 | definition | 
| 13125 
be50e0b050b2
ordinal addition now coerces its arguments to ordinals
 paulson parents: 
12114diff
changeset | 28 | (*coercion to ordinal: if not, just 0*) | 
| 76215 
a642599ffdea
More syntactic cleanup. LaTeX markup working
 paulson <lp15@cam.ac.uk> parents: 
76214diff
changeset | 29 | ordify :: "i\<Rightarrow>i" where | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 30 | "ordify(x) \<equiv> if Ord(x) then x else 0" | 
| 13125 
be50e0b050b2
ordinal addition now coerces its arguments to ordinals
 paulson parents: 
12114diff
changeset | 31 | |
| 46820 | 32 | definition | 
| 850 | 33 | (*ordinal multiplication*) | 
| 76215 
a642599ffdea
More syntactic cleanup. LaTeX markup working
 paulson <lp15@cam.ac.uk> parents: 
76214diff
changeset | 34 | omult :: "[i,i]\<Rightarrow>i" (infixl \<open>**\<close> 70) where | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 35 | "i ** j \<equiv> ordertype(j*i, rmult(j,Memrel(j),i,Memrel(i)))" | 
| 850 | 36 | |
| 46820 | 37 | definition | 
| 850 | 38 | (*ordinal addition*) | 
| 76215 
a642599ffdea
More syntactic cleanup. LaTeX markup working
 paulson <lp15@cam.ac.uk> parents: 
76214diff
changeset | 39 | raw_oadd :: "[i,i]\<Rightarrow>i" where | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 40 | "raw_oadd(i,j) \<equiv> ordertype(i+j, radd(i,Memrel(i),j,Memrel(j)))" | 
| 13125 
be50e0b050b2
ordinal addition now coerces its arguments to ordinals
 paulson parents: 
12114diff
changeset | 41 | |
| 46820 | 42 | definition | 
| 76215 
a642599ffdea
More syntactic cleanup. LaTeX markup working
 paulson <lp15@cam.ac.uk> parents: 
76214diff
changeset | 43 | oadd :: "[i,i]\<Rightarrow>i" (infixl \<open>++\<close> 65) where | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 44 | "i ++ j \<equiv> raw_oadd(ordify(i),ordify(j))" | 
| 850 | 45 | |
| 46820 | 46 | definition | 
| 1033 | 47 | (*ordinal subtraction*) | 
| 76215 
a642599ffdea
More syntactic cleanup. LaTeX markup working
 paulson <lp15@cam.ac.uk> parents: 
76214diff
changeset | 48 | odiff :: "[i,i]\<Rightarrow>i" (infixl \<open>--\<close> 65) where | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 49 | "i -- j \<equiv> ordertype(i-j, Memrel(i))" | 
| 1033 | 50 | |
| 46820 | 51 | |
| 60770 | 52 | subsection\<open>Proofs needing the combination of Ordinal.thy and Order.thy\<close> | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 53 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 54 | lemma le_well_ord_Memrel: "j \<le> i \<Longrightarrow> well_ord(j, Memrel(i))" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 55 | apply (rule well_ordI) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 56 | apply (rule wf_Memrel [THEN wf_imp_wf_on]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 57 | apply (simp add: ltD lt_Ord linear_def | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 58 | ltI [THEN lt_trans2 [of _ j i]]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 59 | apply (intro ballI Ord_linear) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 60 | apply (blast intro: Ord_in_Ord lt_Ord)+ | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 61 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 62 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 63 | (*"Ord(i) \<Longrightarrow> well_ord(i, Memrel(i))"*) | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 64 | lemmas well_ord_Memrel = le_refl [THEN le_well_ord_Memrel] | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 65 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 66 | (*Kunen's Theorem 7.3 (i), page 16; see also Ordinal/Ord_in_Ord | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 67 | The smaller ordinal is an initial segment of the larger *) | 
| 46820 | 68 | lemma lt_pred_Memrel: | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 69 | "j<i \<Longrightarrow> pred(i, j, Memrel(i)) = j" | 
| 46841 
49b91b716cbe
Structured and calculation-based proofs (with new trans rules!)
 paulson parents: 
46821diff
changeset | 70 | apply (simp add: pred_def lt_def) | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 71 | apply (blast intro: Ord_trans) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 72 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 73 | |
| 46820 | 74 | lemma pred_Memrel: | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 75 | "x \<in> A \<Longrightarrow> pred(A, x, Memrel(A)) = A \<inter> x" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 76 | by (unfold pred_def Memrel_def, blast) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 77 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 78 | lemma Ord_iso_implies_eq_lemma: | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 79 | "\<lbrakk>j<i; f \<in> ord_iso(i,Memrel(i),j,Memrel(j))\<rbrakk> \<Longrightarrow> R" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 80 | apply (frule lt_pred_Memrel) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 81 | apply (erule ltE) | 
| 46820 | 82 | apply (rule well_ord_Memrel [THEN well_ord_iso_predE, of i f j], auto) | 
| 76216 
9fc34f76b4e8
getting rid of apply (unfold ...)
 paulson <lp15@cam.ac.uk> parents: 
76215diff
changeset | 83 | unfolding ord_iso_def | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 84 | (*Combining the two simplifications causes looping*) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 85 | apply (simp (no_asm_simp)) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 86 | apply (blast intro: bij_is_fun [THEN apply_type] Ord_trans) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 87 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 88 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 89 | (*Kunen's Theorem 7.3 (ii), page 16. Isomorphic ordinals are equal*) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 90 | lemma Ord_iso_implies_eq: | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 91 | "\<lbrakk>Ord(i); Ord(j); f \<in> ord_iso(i,Memrel(i),j,Memrel(j))\<rbrakk> | 
| 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 92 | \<Longrightarrow> i=j" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 93 | apply (rule_tac i = i and j = j in Ord_linear_lt) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 94 | apply (blast intro: ord_iso_sym Ord_iso_implies_eq_lemma)+ | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 95 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 96 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 97 | |
| 60770 | 98 | subsection\<open>Ordermap and ordertype\<close> | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 99 | |
| 46820 | 100 | lemma ordermap_type: | 
| 101 | "ordermap(A,r) \<in> A -> ordertype(A,r)" | |
| 76217 | 102 | unfolding ordermap_def ordertype_def | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 103 | apply (rule lam_type) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 104 | apply (rule lamI [THEN imageI], assumption+) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 105 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 106 | |
| 60770 | 107 | subsubsection\<open>Unfolding of ordermap\<close> | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 108 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 109 | (*Useful for cardinality reasoning; see CardinalArith.ML*) | 
| 46820 | 110 | lemma ordermap_eq_image: | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 111 | "\<lbrakk>wf[A](r); x \<in> A\<rbrakk> | 
| 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 112 | \<Longrightarrow> ordermap(A,r) ` x = ordermap(A,r) `` pred(A,x,r)" | 
| 76217 | 113 | unfolding ordermap_def pred_def | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 114 | apply (simp (no_asm_simp)) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 115 | apply (erule wfrec_on [THEN trans], assumption) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 116 | apply (simp (no_asm_simp) add: subset_iff image_lam vimage_singleton_iff) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 117 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 118 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 119 | (*Useful for rewriting PROVIDED pred is not unfolded until later!*) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 120 | lemma ordermap_pred_unfold: | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 121 | "\<lbrakk>wf[A](r); x \<in> A\<rbrakk> | 
| 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 122 |       \<Longrightarrow> ordermap(A,r) ` x = {ordermap(A,r)`y . y \<in> pred(A,x,r)}"
 | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 123 | by (simp add: ordermap_eq_image pred_subset ordermap_type [THEN image_fun]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 124 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 125 | (*pred-unfolded version. NOT suitable for rewriting -- loops!*) | 
| 46820 | 126 | lemmas ordermap_unfold = ordermap_pred_unfold [simplified pred_def] | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 127 | |
| 46820 | 128 | (*The theorem above is | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 129 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 130 | \<lbrakk>wf[A](r); x \<in> A\<rbrakk> | 
| 76215 
a642599ffdea
More syntactic cleanup. LaTeX markup working
 paulson <lp15@cam.ac.uk> parents: 
76214diff
changeset | 131 | \<Longrightarrow> ordermap(A,r) ` x = {ordermap(A,r) ` y . y: {y \<in> A . \<langle>y,x\<rangle> \<in> r}}
 | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 132 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 133 | NOTE: the definition of ordermap used here delivers ordinals only if r is | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 134 | transitive. If r is the predecessor relation on the naturals then | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 135 | ordermap(nat,predr) ` n equals {n-1} and not n.  A more complicated definition,
 | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 136 | like | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 137 | |
| 76215 
a642599ffdea
More syntactic cleanup. LaTeX markup working
 paulson <lp15@cam.ac.uk> parents: 
76214diff
changeset | 138 |   ordermap(A,r) ` x = Union{succ(ordermap(A,r) ` y) . y: {y \<in> A . \<langle>y,x\<rangle> \<in> r}},
 | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 139 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 140 | might eliminate the need for r to be transitive. | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 141 | *) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 142 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 143 | |
| 60770 | 144 | subsubsection\<open>Showing that ordermap, ordertype yield ordinals\<close> | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 145 | |
| 46820 | 146 | lemma Ord_ordermap: | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 147 | "\<lbrakk>well_ord(A,r); x \<in> A\<rbrakk> \<Longrightarrow> Ord(ordermap(A,r) ` x)" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 148 | apply (unfold well_ord_def tot_ord_def part_ord_def, safe) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 149 | apply (rule_tac a=x in wf_on_induct, assumption+) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 150 | apply (simp (no_asm_simp) add: ordermap_pred_unfold) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 151 | apply (rule OrdI [OF _ Ord_is_Transset]) | 
| 76217 | 152 | unfolding pred_def Transset_def | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 153 | apply (blast intro: trans_onD | 
| 46820 | 154 | dest!: ordermap_unfold [THEN equalityD1])+ | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 155 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 156 | |
| 46820 | 157 | lemma Ord_ordertype: | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 158 | "well_ord(A,r) \<Longrightarrow> Ord(ordertype(A,r))" | 
| 76216 
9fc34f76b4e8
getting rid of apply (unfold ...)
 paulson <lp15@cam.ac.uk> parents: 
76215diff
changeset | 159 | unfolding ordertype_def | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 160 | apply (subst image_fun [OF ordermap_type subset_refl]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 161 | apply (rule OrdI [OF _ Ord_is_Transset]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 162 | prefer 2 apply (blast intro: Ord_ordermap) | 
| 76217 | 163 | unfolding Transset_def well_ord_def | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 164 | apply (blast intro: trans_onD | 
| 32960 
69916a850301
eliminated hard tabulators, guessing at each author's individual tab-width;
 wenzelm parents: 
26056diff
changeset | 165 | dest!: ordermap_unfold [THEN equalityD1]) | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 166 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 167 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 168 | |
| 60770 | 169 | subsubsection\<open>ordermap preserves the orderings in both directions\<close> | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 170 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 171 | lemma ordermap_mono: | 
| 76215 
a642599ffdea
More syntactic cleanup. LaTeX markup working
 paulson <lp15@cam.ac.uk> parents: 
76214diff
changeset | 172 | "\<lbrakk>\<langle>w,x\<rangle>: r; wf[A](r); w \<in> A; x \<in> A\<rbrakk> | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 173 | \<Longrightarrow> ordermap(A,r)`w \<in> ordermap(A,r)`x" | 
| 13163 | 174 | apply (erule_tac x1 = x in ordermap_unfold [THEN ssubst], assumption, blast) | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 175 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 176 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 177 | (*linearity of r is crucial here*) | 
| 46820 | 178 | lemma converse_ordermap_mono: | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 179 | "\<lbrakk>ordermap(A,r)`w \<in> ordermap(A,r)`x; well_ord(A,r); w \<in> A; x \<in> A\<rbrakk> | 
| 76215 
a642599ffdea
More syntactic cleanup. LaTeX markup working
 paulson <lp15@cam.ac.uk> parents: 
76214diff
changeset | 180 | \<Longrightarrow> \<langle>w,x\<rangle>: r" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 181 | apply (unfold well_ord_def tot_ord_def, safe) | 
| 46820 | 182 | apply (erule_tac x=w and y=x in linearE, assumption+) | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 183 | apply (blast elim!: mem_not_refl [THEN notE]) | 
| 46820 | 184 | apply (blast dest: ordermap_mono intro: mem_asym) | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 185 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 186 | |
| 63168 | 187 | lemma ordermap_surj: "ordermap(A, r) \<in> surj(A, ordertype(A, r))" | 
| 188 | unfolding ordertype_def | |
| 189 | by (rule surj_image) (rule ordermap_type) | |
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 190 | |
| 46820 | 191 | lemma ordermap_bij: | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 192 | "well_ord(A,r) \<Longrightarrow> ordermap(A,r) \<in> bij(A, ordertype(A,r))" | 
| 76217 | 193 | unfolding well_ord_def tot_ord_def bij_def inj_def | 
| 46820 | 194 | apply (force intro!: ordermap_type ordermap_surj | 
| 195 | elim: linearE dest: ordermap_mono | |
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 196 | simp add: mem_not_refl) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 197 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 198 | |
| 60770 | 199 | subsubsection\<open>Isomorphisms involving ordertype\<close> | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 200 | |
| 46820 | 201 | lemma ordertype_ord_iso: | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 202 | "well_ord(A,r) | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 203 | \<Longrightarrow> ordermap(A,r) \<in> ord_iso(A,r, ordertype(A,r), Memrel(ordertype(A,r)))" | 
| 76216 
9fc34f76b4e8
getting rid of apply (unfold ...)
 paulson <lp15@cam.ac.uk> parents: 
76215diff
changeset | 204 | unfolding ord_iso_def | 
| 46820 | 205 | apply (safe elim!: well_ord_is_wf | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 206 | intro!: ordermap_type [THEN apply_type] ordermap_mono ordermap_bij) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 207 | apply (blast dest!: converse_ordermap_mono) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 208 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 209 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 210 | lemma ordertype_eq: | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 211 | "\<lbrakk>f \<in> ord_iso(A,r,B,s); well_ord(B,s)\<rbrakk> | 
| 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 212 | \<Longrightarrow> ordertype(A,r) = ordertype(B,s)" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 213 | apply (frule well_ord_ord_iso, assumption) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 214 | apply (rule Ord_iso_implies_eq, (erule Ord_ordertype)+) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 215 | apply (blast intro: ord_iso_trans ord_iso_sym ordertype_ord_iso) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 216 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 217 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 218 | lemma ordertype_eq_imp_ord_iso: | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 219 | "\<lbrakk>ordertype(A,r) = ordertype(B,s); well_ord(A,r); well_ord(B,s)\<rbrakk> | 
| 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 220 | \<Longrightarrow> \<exists>f. f \<in> ord_iso(A,r,B,s)" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 221 | apply (rule exI) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 222 | apply (rule ordertype_ord_iso [THEN ord_iso_trans], assumption) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 223 | apply (erule ssubst) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 224 | apply (erule ordertype_ord_iso [THEN ord_iso_sym]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 225 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 226 | |
| 60770 | 227 | subsubsection\<open>Basic equalities for ordertype\<close> | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 228 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 229 | (*Ordertype of Memrel*) | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 230 | lemma le_ordertype_Memrel: "j \<le> i \<Longrightarrow> ordertype(j,Memrel(i)) = j" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 231 | apply (rule Ord_iso_implies_eq [symmetric]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 232 | apply (erule ltE, assumption) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 233 | apply (blast intro: le_well_ord_Memrel Ord_ordertype) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 234 | apply (rule ord_iso_trans) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 235 | apply (erule_tac [2] le_well_ord_Memrel [THEN ordertype_ord_iso]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 236 | apply (rule id_bij [THEN ord_isoI]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 237 | apply (simp (no_asm_simp)) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 238 | apply (fast elim: ltE Ord_in_Ord Ord_trans) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 239 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 240 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 241 | (*"Ord(i) \<Longrightarrow> ordertype(i, Memrel(i)) = i"*) | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 242 | lemmas ordertype_Memrel = le_refl [THEN le_ordertype_Memrel] | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 243 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 244 | lemma ordertype_0 [simp]: "ordertype(0,r) = 0" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 245 | apply (rule id_bij [THEN ord_isoI, THEN ordertype_eq, THEN trans]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 246 | apply (erule emptyE) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 247 | apply (rule well_ord_0) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 248 | apply (rule Ord_0 [THEN ordertype_Memrel]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 249 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 250 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 251 | (*Ordertype of rvimage: \<lbrakk>f \<in> bij(A,B); well_ord(B,s)\<rbrakk> \<Longrightarrow> | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 252 | ordertype(A, rvimage(A,f,s)) = ordertype(B,s) *) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 253 | lemmas bij_ordertype_vimage = ord_iso_rvimage [THEN ordertype_eq] | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 254 | |
| 60770 | 255 | subsubsection\<open>A fundamental unfolding law for ordertype.\<close> | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 256 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 257 | (*Ordermap returns the same result if applied to an initial segment*) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 258 | lemma ordermap_pred_eq_ordermap: | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 259 | "\<lbrakk>well_ord(A,r); y \<in> A; z \<in> pred(A,y,r)\<rbrakk> | 
| 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 260 | \<Longrightarrow> ordermap(pred(A,y,r), r) ` z = ordermap(A, r) ` z" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 261 | apply (frule wf_on_subset_A [OF well_ord_is_wf pred_subset]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 262 | apply (rule_tac a=z in wf_on_induct, assumption+) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 263 | apply (safe elim!: predE) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 264 | apply (simp (no_asm_simp) add: ordermap_pred_unfold well_ord_is_wf pred_iff) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 265 | (*combining these two simplifications LOOPS! *) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 266 | apply (simp (no_asm_simp) add: pred_pred_eq) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 267 | apply (simp add: pred_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 268 | apply (rule RepFun_cong [OF _ refl]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 269 | apply (drule well_ord_is_trans_on) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 270 | apply (fast elim!: trans_onD) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 271 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 272 | |
| 46820 | 273 | lemma ordertype_unfold: | 
| 274 |     "ordertype(A,r) = {ordermap(A,r)`y . y \<in> A}"
 | |
| 76216 
9fc34f76b4e8
getting rid of apply (unfold ...)
 paulson <lp15@cam.ac.uk> parents: 
76215diff
changeset | 275 | unfolding ordertype_def | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 276 | apply (rule image_fun [OF ordermap_type subset_refl]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 277 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 278 | |
| 60770 | 279 | text\<open>Theorems by Krzysztof Grabczewski; proofs simplified by lcp\<close> | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 280 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 281 | lemma ordertype_pred_subset: "\<lbrakk>well_ord(A,r); x \<in> A\<rbrakk> \<Longrightarrow> | 
| 46820 | 282 | ordertype(pred(A,x,r),r) \<subseteq> ordertype(A,r)" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 283 | apply (simp add: ordertype_unfold well_ord_subset [OF _ pred_subset]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 284 | apply (fast intro: ordermap_pred_eq_ordermap elim: predE) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 285 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 286 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 287 | lemma ordertype_pred_lt: | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 288 | "\<lbrakk>well_ord(A,r); x \<in> A\<rbrakk> | 
| 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 289 | \<Longrightarrow> ordertype(pred(A,x,r),r) < ordertype(A,r)" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 290 | apply (rule ordertype_pred_subset [THEN subset_imp_le, THEN leE]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 291 | apply (simp_all add: Ord_ordertype well_ord_subset [OF _ pred_subset]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 292 | apply (erule sym [THEN ordertype_eq_imp_ord_iso, THEN exE]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 293 | apply (erule_tac [3] well_ord_iso_predE) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 294 | apply (simp_all add: well_ord_subset [OF _ pred_subset]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 295 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 296 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 297 | (*May rewrite with this -- provided no rules are supplied for proving that | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 298 | well_ord(pred(A,x,r), r) *) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 299 | lemma ordertype_pred_unfold: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 300 | "well_ord(A,r) | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 301 |       \<Longrightarrow> ordertype(A,r) = {ordertype(pred(A,x,r),r). x \<in> A}"
 | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 302 | apply (rule equalityI) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 303 | apply (safe intro!: ordertype_pred_lt [THEN ltD]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 304 | apply (auto simp add: ordertype_def well_ord_is_wf [THEN ordermap_eq_image] | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 305 | ordermap_type [THEN image_fun] | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 306 | ordermap_pred_eq_ordermap pred_subset) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 307 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 308 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 309 | |
| 60770 | 310 | subsection\<open>Alternative definition of ordinal\<close> | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 311 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 312 | (*proof by Krzysztof Grabczewski*) | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 313 | lemma Ord_is_Ord_alt: "Ord(i) \<Longrightarrow> Ord_alt(i)" | 
| 76216 
9fc34f76b4e8
getting rid of apply (unfold ...)
 paulson <lp15@cam.ac.uk> parents: 
76215diff
changeset | 314 | unfolding Ord_alt_def | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 315 | apply (rule conjI) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 316 | apply (erule well_ord_Memrel) | 
| 46820 | 317 | apply (unfold Ord_def Transset_def pred_def Memrel_def, blast) | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 318 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 319 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 320 | (*proof by lcp*) | 
| 46820 | 321 | lemma Ord_alt_is_Ord: | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 322 | "Ord_alt(i) \<Longrightarrow> Ord(i)" | 
| 46820 | 323 | apply (unfold Ord_alt_def Ord_def Transset_def well_ord_def | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 324 | tot_ord_def part_ord_def trans_on_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 325 | apply (simp add: pred_Memrel) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 326 | apply (blast elim!: equalityE) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 327 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 328 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 329 | |
| 60770 | 330 | subsection\<open>Ordinal Addition\<close> | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 331 | |
| 60770 | 332 | subsubsection\<open>Order Type calculations for radd\<close> | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 333 | |
| 60770 | 334 | text\<open>Addition with 0\<close> | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 335 | |
| 76215 
a642599ffdea
More syntactic cleanup. LaTeX markup working
 paulson <lp15@cam.ac.uk> parents: 
76214diff
changeset | 336 | lemma bij_sum_0: "(\<lambda>z\<in>A+0. case(\<lambda>x. x, \<lambda>y. y, z)) \<in> bij(A+0, A)" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 337 | apply (rule_tac d = Inl in lam_bijective, safe) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 338 | apply (simp_all (no_asm_simp)) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 339 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 340 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 341 | lemma ordertype_sum_0_eq: | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 342 | "well_ord(A,r) \<Longrightarrow> ordertype(A+0, radd(A,r,0,s)) = ordertype(A,r)" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 343 | apply (rule bij_sum_0 [THEN ord_isoI, THEN ordertype_eq]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 344 | prefer 2 apply assumption | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 345 | apply force | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 346 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 347 | |
| 76215 
a642599ffdea
More syntactic cleanup. LaTeX markup working
 paulson <lp15@cam.ac.uk> parents: 
76214diff
changeset | 348 | lemma bij_0_sum: "(\<lambda>z\<in>0+A. case(\<lambda>x. x, \<lambda>y. y, z)) \<in> bij(0+A, A)" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 349 | apply (rule_tac d = Inr in lam_bijective, safe) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 350 | apply (simp_all (no_asm_simp)) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 351 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 352 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 353 | lemma ordertype_0_sum_eq: | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 354 | "well_ord(A,r) \<Longrightarrow> ordertype(0+A, radd(0,s,A,r)) = ordertype(A,r)" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 355 | apply (rule bij_0_sum [THEN ord_isoI, THEN ordertype_eq]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 356 | prefer 2 apply assumption | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 357 | apply force | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 358 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 359 | |
| 60770 | 360 | text\<open>Initial segments of radd. Statements by Grabczewski\<close> | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 361 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 362 | (*In fact, pred(A+B, Inl(a), radd(A,r,B,s)) = pred(A,a,r)+0 *) | 
| 46820 | 363 | lemma pred_Inl_bij: | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 364 | "a \<in> A \<Longrightarrow> (\<lambda>x\<in>pred(A,a,r). Inl(x)) | 
| 46820 | 365 | \<in> bij(pred(A,a,r), pred(A+B, Inl(a), radd(A,r,B,s)))" | 
| 76216 
9fc34f76b4e8
getting rid of apply (unfold ...)
 paulson <lp15@cam.ac.uk> parents: 
76215diff
changeset | 366 | unfolding pred_def | 
| 76215 
a642599ffdea
More syntactic cleanup. LaTeX markup working
 paulson <lp15@cam.ac.uk> parents: 
76214diff
changeset | 367 | apply (rule_tac d = "case (\<lambda>x. x, \<lambda>y. y) " in lam_bijective) | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 368 | apply auto | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 369 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 370 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 371 | lemma ordertype_pred_Inl_eq: | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 372 | "\<lbrakk>a \<in> A; well_ord(A,r)\<rbrakk> | 
| 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 373 | \<Longrightarrow> ordertype(pred(A+B, Inl(a), radd(A,r,B,s)), radd(A,r,B,s)) = | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 374 | ordertype(pred(A,a,r), r)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 375 | apply (rule pred_Inl_bij [THEN ord_isoI, THEN ord_iso_sym, THEN ordertype_eq]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 376 | apply (simp_all add: well_ord_subset [OF _ pred_subset]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 377 | apply (simp add: pred_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 378 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 379 | |
| 46820 | 380 | lemma pred_Inr_bij: | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 381 | "b \<in> B \<Longrightarrow> | 
| 46820 | 382 | id(A+pred(B,b,s)) | 
| 383 | \<in> bij(A+pred(B,b,s), pred(A+B, Inr(b), radd(A,r,B,s)))" | |
| 76217 | 384 | unfolding pred_def id_def | 
| 76215 
a642599ffdea
More syntactic cleanup. LaTeX markup working
 paulson <lp15@cam.ac.uk> parents: 
76214diff
changeset | 385 | apply (rule_tac d = "\<lambda>z. z" in lam_bijective, auto) | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 386 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 387 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 388 | lemma ordertype_pred_Inr_eq: | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 389 | "\<lbrakk>b \<in> B; well_ord(A,r); well_ord(B,s)\<rbrakk> | 
| 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 390 | \<Longrightarrow> ordertype(pred(A+B, Inr(b), radd(A,r,B,s)), radd(A,r,B,s)) = | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 391 | ordertype(A+pred(B,b,s), radd(A,r,pred(B,b,s),s))" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 392 | apply (rule pred_Inr_bij [THEN ord_isoI, THEN ord_iso_sym, THEN ordertype_eq]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 393 | prefer 2 apply (force simp add: pred_def id_def, assumption) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 394 | apply (blast intro: well_ord_radd well_ord_subset [OF _ pred_subset]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 395 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 396 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 397 | |
| 60770 | 398 | subsubsection\<open>ordify: trivial coercion to an ordinal\<close> | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 399 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 400 | lemma Ord_ordify [iff, TC]: "Ord(ordify(x))" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 401 | by (simp add: ordify_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 402 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 403 | (*Collapsing*) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 404 | lemma ordify_idem [simp]: "ordify(ordify(x)) = ordify(x)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 405 | by (simp add: ordify_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 406 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 407 | |
| 60770 | 408 | subsubsection\<open>Basic laws for ordinal addition\<close> | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 409 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 410 | lemma Ord_raw_oadd: "\<lbrakk>Ord(i); Ord(j)\<rbrakk> \<Longrightarrow> Ord(raw_oadd(i,j))" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 411 | by (simp add: raw_oadd_def ordify_def Ord_ordertype well_ord_radd | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 412 | well_ord_Memrel) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 413 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 414 | lemma Ord_oadd [iff,TC]: "Ord(i++j)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 415 | by (simp add: oadd_def Ord_raw_oadd) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 416 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 417 | |
| 60770 | 418 | text\<open>Ordinal addition with zero\<close> | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 419 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 420 | lemma raw_oadd_0: "Ord(i) \<Longrightarrow> raw_oadd(i,0) = i" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 421 | by (simp add: raw_oadd_def ordify_def ordertype_sum_0_eq | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 422 | ordertype_Memrel well_ord_Memrel) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 423 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 424 | lemma oadd_0 [simp]: "Ord(i) \<Longrightarrow> i++0 = i" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 425 | apply (simp (no_asm_simp) add: oadd_def raw_oadd_0 ordify_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 426 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 427 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 428 | lemma raw_oadd_0_left: "Ord(i) \<Longrightarrow> raw_oadd(0,i) = i" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 429 | by (simp add: raw_oadd_def ordify_def ordertype_0_sum_eq ordertype_Memrel | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 430 | well_ord_Memrel) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 431 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 432 | lemma oadd_0_left [simp]: "Ord(i) \<Longrightarrow> 0++i = i" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 433 | by (simp add: oadd_def raw_oadd_0_left ordify_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 434 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 435 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 436 | lemma oadd_eq_if_raw_oadd: | 
| 46820 | 437 | "i++j = (if Ord(i) then (if Ord(j) then raw_oadd(i,j) else i) | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 438 | else (if Ord(j) then j else 0))" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 439 | by (simp add: oadd_def ordify_def raw_oadd_0_left raw_oadd_0) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 440 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 441 | lemma raw_oadd_eq_oadd: "\<lbrakk>Ord(i); Ord(j)\<rbrakk> \<Longrightarrow> raw_oadd(i,j) = i++j" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 442 | by (simp add: oadd_def ordify_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 443 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 444 | (*** Further properties of ordinal addition. Statements by Grabczewski, | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 445 | proofs by lcp. ***) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 446 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 447 | (*Surely also provable by transfinite induction on j?*) | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 448 | lemma lt_oadd1: "k<i \<Longrightarrow> k < i++j" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 449 | apply (simp add: oadd_def ordify_def lt_Ord2 raw_oadd_0, clarify) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 450 | apply (simp add: raw_oadd_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 451 | apply (rule ltE, assumption) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 452 | apply (rule ltI) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 453 | apply (force simp add: ordertype_pred_unfold well_ord_radd well_ord_Memrel | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 454 | ordertype_pred_Inl_eq lt_pred_Memrel leI [THEN le_ordertype_Memrel]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 455 | apply (blast intro: Ord_ordertype well_ord_radd well_ord_Memrel) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 456 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 457 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 458 | (*Thus also we obtain the rule  @{term"i++j = k \<Longrightarrow> i \<le> k"} *)
 | 
| 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 459 | lemma oadd_le_self: "Ord(i) \<Longrightarrow> i \<le> i++j" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 460 | apply (rule all_lt_imp_le) | 
| 46820 | 461 | apply (auto simp add: Ord_oadd lt_oadd1) | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 462 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 463 | |
| 60770 | 464 | text\<open>Various other results\<close> | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 465 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 466 | lemma id_ord_iso_Memrel: "A<=B \<Longrightarrow> id(A) \<in> ord_iso(A, Memrel(A), A, Memrel(B))" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 467 | apply (rule id_bij [THEN ord_isoI]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 468 | apply (simp (no_asm_simp)) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 469 | apply blast | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 470 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 471 | |
| 13221 | 472 | lemma subset_ord_iso_Memrel: | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 473 | "\<lbrakk>f \<in> ord_iso(A,Memrel(B),C,r); A<=B\<rbrakk> \<Longrightarrow> f \<in> ord_iso(A,Memrel(A),C,r)" | 
| 46820 | 474 | apply (frule ord_iso_is_bij [THEN bij_is_fun, THEN fun_is_rel]) | 
| 475 | apply (frule ord_iso_trans [OF id_ord_iso_Memrel], assumption) | |
| 476 | apply (simp add: right_comp_id) | |
| 13221 | 477 | done | 
| 478 | ||
| 479 | lemma restrict_ord_iso: | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 480 | "\<lbrakk>f \<in> ord_iso(i, Memrel(i), Order.pred(A,a,r), r); a \<in> A; j < i; | 
| 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 481 | trans[A](r)\<rbrakk> | 
| 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 482 | \<Longrightarrow> restrict(f,j) \<in> ord_iso(j, Memrel(j), Order.pred(A,f`j,r), r)" | 
| 46820 | 483 | apply (frule ltD) | 
| 484 | apply (frule ord_iso_is_bij [THEN bij_is_fun, THEN apply_type], assumption) | |
| 485 | apply (frule ord_iso_restrict_pred, assumption) | |
| 13221 | 486 | apply (simp add: pred_iff trans_pred_pred_eq lt_pred_Memrel) | 
| 46820 | 487 | apply (blast intro!: subset_ord_iso_Memrel le_imp_subset [OF leI]) | 
| 13221 | 488 | done | 
| 489 | ||
| 490 | lemma restrict_ord_iso2: | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 491 | "\<lbrakk>f \<in> ord_iso(Order.pred(A,a,r), r, i, Memrel(i)); a \<in> A; | 
| 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 492 | j < i; trans[A](r)\<rbrakk> | 
| 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 493 | \<Longrightarrow> converse(restrict(converse(f), j)) | 
| 13221 | 494 | \<in> ord_iso(Order.pred(A, converse(f)`j, r), r, j, Memrel(j))" | 
| 495 | by (blast intro: restrict_ord_iso ord_iso_sym ltI) | |
| 496 | ||
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 497 | lemma ordertype_sum_Memrel: | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 498 | "\<lbrakk>well_ord(A,r); k<j\<rbrakk> | 
| 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 499 | \<Longrightarrow> ordertype(A+k, radd(A, r, k, Memrel(j))) = | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 500 | ordertype(A+k, radd(A, r, k, Memrel(k)))" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 501 | apply (erule ltE) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 502 | apply (rule ord_iso_refl [THEN sum_ord_iso_cong, THEN ordertype_eq]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 503 | apply (erule OrdmemD [THEN id_ord_iso_Memrel, THEN ord_iso_sym]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 504 | apply (simp_all add: well_ord_radd well_ord_Memrel) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 505 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 506 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 507 | lemma oadd_lt_mono2: "k<j \<Longrightarrow> i++k < i++j" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 508 | apply (simp add: oadd_def ordify_def raw_oadd_0_left lt_Ord lt_Ord2, clarify) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 509 | apply (simp add: raw_oadd_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 510 | apply (rule ltE, assumption) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 511 | apply (rule ordertype_pred_unfold [THEN equalityD2, THEN subsetD, THEN ltI]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 512 | apply (simp_all add: Ord_ordertype well_ord_radd well_ord_Memrel) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 513 | apply (rule bexI) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 514 | apply (erule_tac [2] InrI) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 515 | apply (simp add: ordertype_pred_Inr_eq well_ord_Memrel lt_pred_Memrel | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 516 | leI [THEN le_ordertype_Memrel] ordertype_sum_Memrel) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 517 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 518 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 519 | lemma oadd_lt_cancel2: "\<lbrakk>i++j < i++k; Ord(j)\<rbrakk> \<Longrightarrow> j<k" | 
| 63648 | 520 | apply (simp (asm_lr) add: oadd_eq_if_raw_oadd split: split_if_asm) | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 521 | prefer 2 | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 522 | apply (frule_tac i = i and j = j in oadd_le_self) | 
| 13611 | 523 | apply (simp (asm_lr) add: oadd_def ordify_def lt_Ord not_lt_iff_le [THEN iff_sym]) | 
| 46820 | 524 | apply (rule Ord_linear_lt, auto) | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 525 | apply (simp_all add: raw_oadd_eq_oadd) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 526 | apply (blast dest: oadd_lt_mono2 elim: lt_irrefl lt_asym)+ | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 527 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 528 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 529 | lemma oadd_lt_iff2: "Ord(j) \<Longrightarrow> i++j < i++k \<longleftrightarrow> j<k" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 530 | by (blast intro!: oadd_lt_mono2 dest!: oadd_lt_cancel2) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 531 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 532 | lemma oadd_inject: "\<lbrakk>i++j = i++k; Ord(j); Ord(k)\<rbrakk> \<Longrightarrow> j=k" | 
| 63648 | 533 | apply (simp add: oadd_eq_if_raw_oadd split: split_if_asm) | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 534 | apply (simp add: raw_oadd_eq_oadd) | 
| 46820 | 535 | apply (rule Ord_linear_lt, auto) | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 536 | apply (force dest: oadd_lt_mono2 [of concl: i] simp add: lt_not_refl)+ | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 537 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 538 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 539 | lemma lt_oadd_disj: "k < i++j \<Longrightarrow> k<i | (\<exists>l\<in>j. k = i++l )" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 540 | apply (simp add: Ord_in_Ord' [of _ j] oadd_eq_if_raw_oadd | 
| 63648 | 541 | split: split_if_asm) | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 542 | prefer 2 | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 543 | apply (simp add: Ord_in_Ord' [of _ j] lt_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 544 | apply (simp add: ordertype_pred_unfold well_ord_radd well_ord_Memrel raw_oadd_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 545 | apply (erule ltD [THEN RepFunE]) | 
| 46820 | 546 | apply (force simp add: ordertype_pred_Inl_eq well_ord_Memrel ltI | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 547 | lt_pred_Memrel le_ordertype_Memrel leI | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 548 | ordertype_pred_Inr_eq ordertype_sum_Memrel) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 549 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 550 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 551 | |
| 60770 | 552 | subsubsection\<open>Ordinal addition with successor -- via associativity!\<close> | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 553 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 554 | lemma oadd_assoc: "(i++j)++k = i++(j++k)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 555 | apply (simp add: oadd_eq_if_raw_oadd Ord_raw_oadd raw_oadd_0 raw_oadd_0_left, clarify) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 556 | apply (simp add: raw_oadd_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 557 | apply (rule ordertype_eq [THEN trans]) | 
| 46820 | 558 | apply (rule sum_ord_iso_cong [OF ordertype_ord_iso [THEN ord_iso_sym] | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 559 | ord_iso_refl]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 560 | apply (simp_all add: Ord_ordertype well_ord_radd well_ord_Memrel) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 561 | apply (rule sum_assoc_ord_iso [THEN ordertype_eq, THEN trans]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 562 | apply (rule_tac [2] ordertype_eq) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 563 | apply (rule_tac [2] sum_ord_iso_cong [OF ord_iso_refl ordertype_ord_iso]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 564 | apply (blast intro: Ord_ordertype well_ord_radd well_ord_Memrel)+ | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 565 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 566 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 567 | lemma oadd_unfold: "\<lbrakk>Ord(i);  Ord(j)\<rbrakk> \<Longrightarrow> i++j = i \<union> (\<Union>k\<in>j. {i++k})"
 | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 568 | apply (rule subsetI [THEN equalityI]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 569 | apply (erule ltI [THEN lt_oadd_disj, THEN disjE]) | 
| 46820 | 570 | apply (blast intro: Ord_oadd) | 
| 571 | apply (blast elim!: ltE, blast) | |
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 572 | apply (force intro: lt_oadd1 oadd_lt_mono2 simp add: Ord_mem_iff_lt) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 573 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 574 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 575 | lemma oadd_1: "Ord(i) \<Longrightarrow> i++1 = succ(i)" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 576 | apply (simp (no_asm_simp) add: oadd_unfold Ord_1 oadd_0) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 577 | apply blast | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 578 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 579 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 580 | lemma oadd_succ [simp]: "Ord(j) \<Longrightarrow> i++succ(j) = succ(i++j)" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 581 | apply (simp add: oadd_eq_if_raw_oadd, clarify) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 582 | apply (simp add: raw_oadd_eq_oadd) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 583 | apply (simp add: oadd_1 [of j, symmetric] oadd_1 [of "i++j", symmetric] | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 584 | oadd_assoc) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 585 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 586 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 587 | |
| 60770 | 588 | text\<open>Ordinal addition with limit ordinals\<close> | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 589 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 590 | lemma oadd_UN: | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 591 | "\<lbrakk>\<And>x. x \<in> A \<Longrightarrow> Ord(j(x)); a \<in> A\<rbrakk> | 
| 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 592 | \<Longrightarrow> i ++ (\<Union>x\<in>A. j(x)) = (\<Union>x\<in>A. i++j(x))" | 
| 46820 | 593 | by (blast intro: ltI Ord_UN Ord_oadd lt_oadd1 [THEN ltD] | 
| 594 | oadd_lt_mono2 [THEN ltD] | |
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 595 | elim!: ltE dest!: ltI [THEN lt_oadd_disj]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 596 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 597 | lemma oadd_Limit: "Limit(j) \<Longrightarrow> i++j = (\<Union>k\<in>j. i++k)" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 598 | apply (frule Limit_has_0 [THEN ltD]) | 
| 46820 | 599 | apply (simp add: Limit_is_Ord [THEN Ord_in_Ord] oadd_UN [symmetric] | 
| 13356 | 600 | Union_eq_UN [symmetric] Limit_Union_eq) | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 601 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 602 | |
| 76214 | 603 | lemma oadd_eq_0_iff: "\<lbrakk>Ord(i); Ord(j)\<rbrakk> \<Longrightarrow> (i ++ j) = 0 \<longleftrightarrow> i=0 \<and> j=0" | 
| 13221 | 604 | apply (erule trans_induct3 [of j]) | 
| 605 | apply (simp_all add: oadd_Limit) | |
| 606 | apply (simp add: Union_empty_iff Limit_def lt_def, blast) | |
| 607 | done | |
| 608 | ||
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 609 | lemma oadd_eq_lt_iff: "\<lbrakk>Ord(i); Ord(j)\<rbrakk> \<Longrightarrow> 0 < (i ++ j) \<longleftrightarrow> 0<i | 0<j" | 
| 13221 | 610 | by (simp add: Ord_0_lt_iff [symmetric] oadd_eq_0_iff) | 
| 611 | ||
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 612 | lemma oadd_LimitI: "\<lbrakk>Ord(i); Limit(j)\<rbrakk> \<Longrightarrow> Limit(i ++ j)" | 
| 13221 | 613 | apply (simp add: oadd_Limit) | 
| 614 | apply (frule Limit_has_1 [THEN ltD]) | |
| 615 | apply (rule increasing_LimitI) | |
| 616 | apply (rule Ord_0_lt) | |
| 617 | apply (blast intro: Ord_in_Ord [OF Limit_is_Ord]) | |
| 618 | apply (force simp add: Union_empty_iff oadd_eq_0_iff | |
| 619 | Limit_is_Ord [of j, THEN Ord_in_Ord], auto) | |
| 13339 
0f89104dd377
Fixed quantified variable name preservation for ball and bex (bounded quants)
 paulson parents: 
13269diff
changeset | 620 | apply (rule_tac x="succ(y)" in bexI) | 
| 13221 | 621 | apply (simp add: ltI Limit_is_Ord [of j, THEN Ord_in_Ord]) | 
| 46820 | 622 | apply (simp add: Limit_def lt_def) | 
| 13221 | 623 | done | 
| 624 | ||
| 60770 | 625 | text\<open>Order/monotonicity properties of ordinal addition\<close> | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 626 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 627 | lemma oadd_le_self2: "Ord(i) \<Longrightarrow> i \<le> j++i" | 
| 46927 | 628 | proof (induct i rule: trans_induct3) | 
| 46953 | 629 | case 0 thus ?case by (simp add: Ord_0_le) | 
| 46927 | 630 | next | 
| 46953 | 631 | case (succ i) thus ?case by (simp add: oadd_succ succ_leI) | 
| 46927 | 632 | next | 
| 633 | case (limit l) | |
| 46953 | 634 | hence "l = (\<Union>x\<in>l. x)" | 
| 46927 | 635 | by (simp add: Union_eq_UN [symmetric] Limit_Union_eq) | 
| 46953 | 636 | also have "... \<le> (\<Union>x\<in>l. j++x)" | 
| 637 | by (rule le_implies_UN_le_UN) (rule limit.hyps) | |
| 46927 | 638 | finally have "l \<le> (\<Union>x\<in>l. j++x)" . | 
| 639 | thus ?case using limit.hyps by (simp add: oadd_Limit) | |
| 640 | qed | |
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 641 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 642 | lemma oadd_le_mono1: "k \<le> j \<Longrightarrow> k++i \<le> j++i" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 643 | apply (frule lt_Ord) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 644 | apply (frule le_Ord2) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 645 | apply (simp add: oadd_eq_if_raw_oadd, clarify) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 646 | apply (simp add: raw_oadd_eq_oadd) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 647 | apply (erule_tac i = i in trans_induct3) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 648 | apply (simp (no_asm_simp)) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 649 | apply (simp (no_asm_simp) add: oadd_succ succ_le_iff) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 650 | apply (simp (no_asm_simp) add: oadd_Limit) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 651 | apply (rule le_implies_UN_le_UN, blast) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 652 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 653 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 654 | lemma oadd_lt_mono: "\<lbrakk>i' \<le> i; j'<j\<rbrakk> \<Longrightarrow> i'++j' < i++j" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 655 | by (blast intro: lt_trans1 oadd_le_mono1 oadd_lt_mono2 Ord_succD elim: ltE) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 656 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 657 | lemma oadd_le_mono: "\<lbrakk>i' \<le> i; j' \<le> j\<rbrakk> \<Longrightarrow> i'++j' \<le> i++j" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 658 | by (simp del: oadd_succ add: oadd_succ [symmetric] le_Ord2 oadd_lt_mono) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 659 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 660 | lemma oadd_le_iff2: "\<lbrakk>Ord(j); Ord(k)\<rbrakk> \<Longrightarrow> i++j \<le> i++k \<longleftrightarrow> j \<le> k" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 661 | by (simp del: oadd_succ add: oadd_lt_iff2 oadd_succ [symmetric] Ord_succ) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 662 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 663 | lemma oadd_lt_self: "\<lbrakk>Ord(i); 0<j\<rbrakk> \<Longrightarrow> i < i++j" | 
| 46820 | 664 | apply (rule lt_trans2) | 
| 665 | apply (erule le_refl) | |
| 666 | apply (simp only: lt_Ord2 oadd_1 [of i, symmetric]) | |
| 13221 | 667 | apply (blast intro: succ_leI oadd_le_mono) | 
| 668 | done | |
| 669 | ||
| 60770 | 670 | text\<open>Every ordinal is exceeded by some limit ordinal.\<close> | 
| 76214 | 671 | lemma Ord_imp_greater_Limit: "Ord(i) \<Longrightarrow> \<exists>k. i<k \<and> Limit(k)" | 
| 46820 | 672 | apply (rule_tac x="i ++ nat" in exI) | 
| 13269 | 673 | apply (blast intro: oadd_LimitI oadd_lt_self Limit_nat [THEN Limit_has_0]) | 
| 674 | done | |
| 675 | ||
| 76214 | 676 | lemma Ord2_imp_greater_Limit: "\<lbrakk>Ord(i); Ord(j)\<rbrakk> \<Longrightarrow> \<exists>k. i<k \<and> j<k \<and> Limit(k)" | 
| 46820 | 677 | apply (insert Ord_Un [of i j, THEN Ord_imp_greater_Limit]) | 
| 678 | apply (simp add: Un_least_lt_iff) | |
| 13269 | 679 | done | 
| 680 | ||
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 681 | |
| 60770 | 682 | subsection\<open>Ordinal Subtraction\<close> | 
| 14046 | 683 | |
| 69593 | 684 | text\<open>The difference is \<^term>\<open>ordertype(j-i, Memrel(j))\<close>. | 
| 60770 | 685 | It's probably simpler to define the difference recursively!\<close> | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 686 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 687 | lemma bij_sum_Diff: | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 688 | "A<=B \<Longrightarrow> (\<lambda>y\<in>B. if(y \<in> A, Inl(y), Inr(y))) \<in> bij(B, A+(B-A))" | 
| 76215 
a642599ffdea
More syntactic cleanup. LaTeX markup working
 paulson <lp15@cam.ac.uk> parents: 
76214diff
changeset | 689 | apply (rule_tac d = "case (\<lambda>x. x, \<lambda>y. y) " in lam_bijective) | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 690 | apply (blast intro!: if_type) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 691 | apply (fast intro!: case_type) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 692 | apply (erule_tac [2] sumE) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 693 | apply (simp_all (no_asm_simp)) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 694 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 695 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 696 | lemma ordertype_sum_Diff: | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 697 | "i \<le> j \<Longrightarrow> | 
| 46820 | 698 | ordertype(i+(j-i), radd(i,Memrel(j),j-i,Memrel(j))) = | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 699 | ordertype(j, Memrel(j))" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 700 | apply (safe dest!: le_subset_iff [THEN iffD1]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 701 | apply (rule bij_sum_Diff [THEN ord_isoI, THEN ord_iso_sym, THEN ordertype_eq]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 702 | apply (erule_tac [3] well_ord_Memrel, assumption) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 703 | apply (simp (no_asm_simp)) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 704 | apply (frule_tac j = y in Ord_in_Ord, assumption) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 705 | apply (frule_tac j = x in Ord_in_Ord, assumption) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 706 | apply (simp (no_asm_simp) add: Ord_mem_iff_lt lt_Ord not_lt_iff_le) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 707 | apply (blast intro: lt_trans2 lt_trans) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 708 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 709 | |
| 46820 | 710 | lemma Ord_odiff [simp,TC]: | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 711 | "\<lbrakk>Ord(i); Ord(j)\<rbrakk> \<Longrightarrow> Ord(i--j)" | 
| 76216 
9fc34f76b4e8
getting rid of apply (unfold ...)
 paulson <lp15@cam.ac.uk> parents: 
76215diff
changeset | 712 | unfolding odiff_def | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 713 | apply (blast intro: Ord_ordertype Diff_subset well_ord_subset well_ord_Memrel) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 714 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 715 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 716 | |
| 46820 | 717 | lemma raw_oadd_ordertype_Diff: | 
| 718 | "i \<le> j | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 719 | \<Longrightarrow> raw_oadd(i,j--i) = ordertype(i+(j-i), radd(i,Memrel(j),j-i,Memrel(j)))" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 720 | apply (simp add: raw_oadd_def odiff_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 721 | apply (safe dest!: le_subset_iff [THEN iffD1]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 722 | apply (rule sum_ord_iso_cong [THEN ordertype_eq]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 723 | apply (erule id_ord_iso_Memrel) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 724 | apply (rule ordertype_ord_iso [THEN ord_iso_sym]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 725 | apply (blast intro: well_ord_radd Diff_subset well_ord_subset well_ord_Memrel)+ | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 726 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 727 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 728 | lemma oadd_odiff_inverse: "i \<le> j \<Longrightarrow> i ++ (j--i) = j" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 729 | by (simp add: lt_Ord le_Ord2 oadd_def ordify_def raw_oadd_ordertype_Diff | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 730 | ordertype_sum_Diff ordertype_Memrel lt_Ord2 [THEN Ord_succD]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 731 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 732 | (*By oadd_inject, the difference between i and j is unique. Note that we get | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 733 | i++j = k \<Longrightarrow> j = k--i. *) | 
| 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 734 | lemma odiff_oadd_inverse: "\<lbrakk>Ord(i); Ord(j)\<rbrakk> \<Longrightarrow> (i++j) -- i = j" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 735 | apply (rule oadd_inject) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 736 | apply (blast intro: oadd_odiff_inverse oadd_le_self) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 737 | apply (blast intro: Ord_ordertype Ord_oadd Ord_odiff)+ | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 738 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 739 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 740 | lemma odiff_lt_mono2: "\<lbrakk>i<j; k \<le> i\<rbrakk> \<Longrightarrow> i--k < j--k" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 741 | apply (rule_tac i = k in oadd_lt_cancel2) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 742 | apply (simp add: oadd_odiff_inverse) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 743 | apply (subst oadd_odiff_inverse) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 744 | apply (blast intro: le_trans leI, assumption) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 745 | apply (simp (no_asm_simp) add: lt_Ord le_Ord2) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 746 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 747 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 748 | |
| 60770 | 749 | subsection\<open>Ordinal Multiplication\<close> | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 750 | |
| 46820 | 751 | lemma Ord_omult [simp,TC]: | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 752 | "\<lbrakk>Ord(i); Ord(j)\<rbrakk> \<Longrightarrow> Ord(i**j)" | 
| 76216 
9fc34f76b4e8
getting rid of apply (unfold ...)
 paulson <lp15@cam.ac.uk> parents: 
76215diff
changeset | 753 | unfolding omult_def | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 754 | apply (blast intro: Ord_ordertype well_ord_rmult well_ord_Memrel) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 755 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 756 | |
| 60770 | 757 | subsubsection\<open>A useful unfolding law\<close> | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 758 | |
| 46820 | 759 | lemma pred_Pair_eq: | 
| 76215 
a642599ffdea
More syntactic cleanup. LaTeX markup working
 paulson <lp15@cam.ac.uk> parents: 
76214diff
changeset | 760 | "\<lbrakk>a \<in> A; b \<in> B\<rbrakk> \<Longrightarrow> pred(A*B, \<langle>a,b\<rangle>, rmult(A,r,B,s)) = | 
| 46820 | 761 |                       pred(A,a,r)*B \<union> ({a} * pred(B,b,s))"
 | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 762 | apply (unfold pred_def, blast) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 763 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 764 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 765 | lemma ordertype_pred_Pair_eq: | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 766 | "\<lbrakk>a \<in> A; b \<in> B; well_ord(A,r); well_ord(B,s)\<rbrakk> \<Longrightarrow> | 
| 76215 
a642599ffdea
More syntactic cleanup. LaTeX markup working
 paulson <lp15@cam.ac.uk> parents: 
76214diff
changeset | 767 | ordertype(pred(A*B, \<langle>a,b\<rangle>, rmult(A,r,B,s)), rmult(A,r,B,s)) = | 
| 46820 | 768 | ordertype(pred(A,a,r)*B + pred(B,b,s), | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 769 | radd(A*B, rmult(A,r,B,s), B, s))" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 770 | apply (simp (no_asm_simp) add: pred_Pair_eq) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 771 | apply (rule ordertype_eq [symmetric]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 772 | apply (rule prod_sum_singleton_ord_iso) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 773 | apply (simp_all add: pred_subset well_ord_rmult [THEN well_ord_subset]) | 
| 46820 | 774 | apply (blast intro: pred_subset well_ord_rmult [THEN well_ord_subset] | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 775 | elim!: predE) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 776 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 777 | |
| 46820 | 778 | lemma ordertype_pred_Pair_lemma: | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 779 | "\<lbrakk>i'<i; j'<j\<rbrakk> | 
| 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 780 | \<Longrightarrow> ordertype(pred(i*j, <i',j'>, rmult(i,Memrel(i),j,Memrel(j))), | 
| 46820 | 781 | rmult(i,Memrel(i),j,Memrel(j))) = | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 782 | raw_oadd (j**i', j')" | 
| 76217 | 783 | unfolding raw_oadd_def omult_def | 
| 46820 | 784 | apply (simp add: ordertype_pred_Pair_eq lt_pred_Memrel ltD lt_Ord2 | 
| 13356 | 785 | well_ord_Memrel) | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 786 | apply (rule trans) | 
| 46820 | 787 | apply (rule_tac [2] ordertype_ord_iso | 
| 13356 | 788 | [THEN sum_ord_iso_cong, THEN ordertype_eq]) | 
| 789 | apply (rule_tac [3] ord_iso_refl) | |
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 790 | apply (rule id_bij [THEN ord_isoI, THEN ordertype_eq]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 791 | apply (elim SigmaE sumE ltE ssubst) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 792 | apply (simp_all add: well_ord_rmult well_ord_radd well_ord_Memrel | 
| 46820 | 793 | Ord_ordertype lt_Ord lt_Ord2) | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 794 | apply (blast intro: Ord_trans)+ | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 795 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 796 | |
| 46820 | 797 | lemma lt_omult: | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 798 | "\<lbrakk>Ord(i); Ord(j); k<j**i\<rbrakk> | 
| 76214 | 799 | \<Longrightarrow> \<exists>j' i'. k = j**i' ++ j' \<and> j'<j \<and> i'<i" | 
| 76216 
9fc34f76b4e8
getting rid of apply (unfold ...)
 paulson <lp15@cam.ac.uk> parents: 
76215diff
changeset | 800 | unfolding omult_def | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 801 | apply (simp add: ordertype_pred_unfold well_ord_rmult well_ord_Memrel) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 802 | apply (safe elim!: ltE) | 
| 46820 | 803 | apply (simp add: ordertype_pred_Pair_lemma ltI raw_oadd_eq_oadd | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 804 | omult_def [symmetric] Ord_in_Ord' [of _ i] Ord_in_Ord' [of _ j]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 805 | apply (blast intro: ltI) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 806 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 807 | |
| 46820 | 808 | lemma omult_oadd_lt: | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 809 | "\<lbrakk>j'<j; i'<i\<rbrakk> \<Longrightarrow> j**i' ++ j' < j**i" | 
| 76216 
9fc34f76b4e8
getting rid of apply (unfold ...)
 paulson <lp15@cam.ac.uk> parents: 
76215diff
changeset | 810 | unfolding omult_def | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 811 | apply (rule ltI) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 812 | prefer 2 | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 813 | apply (simp add: Ord_ordertype well_ord_rmult well_ord_Memrel lt_Ord2) | 
| 13356 | 814 | apply (simp add: ordertype_pred_unfold well_ord_rmult well_ord_Memrel lt_Ord2) | 
| 46820 | 815 | apply (rule bexI [of _ i']) | 
| 816 | apply (rule bexI [of _ j']) | |
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 817 | apply (simp add: ordertype_pred_Pair_lemma ltI omult_def [symmetric]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 818 | apply (simp add: lt_Ord lt_Ord2 raw_oadd_eq_oadd) | 
| 46820 | 819 | apply (simp_all add: lt_def) | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 820 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 821 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 822 | lemma omult_unfold: | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 823 |      "\<lbrakk>Ord(i);  Ord(j)\<rbrakk> \<Longrightarrow> j**i = (\<Union>j'\<in>j. \<Union>i'\<in>i. {j**i' ++ j'})"
 | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 824 | apply (rule subsetI [THEN equalityI]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 825 | apply (rule lt_omult [THEN exE]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 826 | apply (erule_tac [3] ltI) | 
| 46820 | 827 | apply (simp_all add: Ord_omult) | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 828 | apply (blast elim!: ltE) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 829 | apply (blast intro: omult_oadd_lt [THEN ltD] ltI) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 830 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 831 | |
| 60770 | 832 | subsubsection\<open>Basic laws for ordinal multiplication\<close> | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 833 | |
| 60770 | 834 | text\<open>Ordinal multiplication by zero\<close> | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 835 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 836 | lemma omult_0 [simp]: "i**0 = 0" | 
| 76216 
9fc34f76b4e8
getting rid of apply (unfold ...)
 paulson <lp15@cam.ac.uk> parents: 
76215diff
changeset | 837 | unfolding omult_def | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 838 | apply (simp (no_asm_simp)) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 839 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 840 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 841 | lemma omult_0_left [simp]: "0**i = 0" | 
| 76216 
9fc34f76b4e8
getting rid of apply (unfold ...)
 paulson <lp15@cam.ac.uk> parents: 
76215diff
changeset | 842 | unfolding omult_def | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 843 | apply (simp (no_asm_simp)) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 844 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 845 | |
| 60770 | 846 | text\<open>Ordinal multiplication by 1\<close> | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 847 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 848 | lemma omult_1 [simp]: "Ord(i) \<Longrightarrow> i**1 = i" | 
| 76216 
9fc34f76b4e8
getting rid of apply (unfold ...)
 paulson <lp15@cam.ac.uk> parents: 
76215diff
changeset | 849 | unfolding omult_def | 
| 46820 | 850 | apply (rule_tac s1="Memrel(i)" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 851 | in ord_isoI [THEN ordertype_eq, THEN trans]) | 
| 76215 
a642599ffdea
More syntactic cleanup. LaTeX markup working
 paulson <lp15@cam.ac.uk> parents: 
76214diff
changeset | 852 | apply (rule_tac c = snd and d = "\<lambda>z.\<langle>0,z\<rangle>" in lam_bijective) | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 853 | apply (auto elim!: snd_type well_ord_Memrel ordertype_Memrel) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 854 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 855 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 856 | lemma omult_1_left [simp]: "Ord(i) \<Longrightarrow> 1**i = i" | 
| 76216 
9fc34f76b4e8
getting rid of apply (unfold ...)
 paulson <lp15@cam.ac.uk> parents: 
76215diff
changeset | 857 | unfolding omult_def | 
| 46820 | 858 | apply (rule_tac s1="Memrel(i)" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 859 | in ord_isoI [THEN ordertype_eq, THEN trans]) | 
| 76215 
a642599ffdea
More syntactic cleanup. LaTeX markup working
 paulson <lp15@cam.ac.uk> parents: 
76214diff
changeset | 860 | apply (rule_tac c = fst and d = "\<lambda>z.\<langle>z,0\<rangle>" in lam_bijective) | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 861 | apply (auto elim!: fst_type well_ord_Memrel ordertype_Memrel) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 862 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 863 | |
| 60770 | 864 | text\<open>Distributive law for ordinal multiplication and addition\<close> | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 865 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 866 | lemma oadd_omult_distrib: | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 867 | "\<lbrakk>Ord(i); Ord(j); Ord(k)\<rbrakk> \<Longrightarrow> i**(j++k) = (i**j)++(i**k)" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 868 | apply (simp add: oadd_eq_if_raw_oadd) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 869 | apply (simp add: omult_def raw_oadd_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 870 | apply (rule ordertype_eq [THEN trans]) | 
| 46820 | 871 | apply (rule prod_ord_iso_cong [OF ordertype_ord_iso [THEN ord_iso_sym] | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 872 | ord_iso_refl]) | 
| 46820 | 873 | apply (simp_all add: well_ord_rmult well_ord_radd well_ord_Memrel | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 874 | Ord_ordertype) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 875 | apply (rule sum_prod_distrib_ord_iso [THEN ordertype_eq, THEN trans]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 876 | apply (rule_tac [2] ordertype_eq) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 877 | apply (rule_tac [2] sum_ord_iso_cong [OF ordertype_ord_iso ordertype_ord_iso]) | 
| 46820 | 878 | apply (simp_all add: well_ord_rmult well_ord_radd well_ord_Memrel | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 879 | Ord_ordertype) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 880 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 881 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 882 | lemma omult_succ: "\<lbrakk>Ord(i); Ord(j)\<rbrakk> \<Longrightarrow> i**succ(j) = (i**j)++i" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 883 | by (simp del: oadd_succ add: oadd_1 [of j, symmetric] oadd_omult_distrib) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 884 | |
| 60770 | 885 | text\<open>Associative law\<close> | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 886 | |
| 46820 | 887 | lemma omult_assoc: | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 888 | "\<lbrakk>Ord(i); Ord(j); Ord(k)\<rbrakk> \<Longrightarrow> (i**j)**k = i**(j**k)" | 
| 76216 
9fc34f76b4e8
getting rid of apply (unfold ...)
 paulson <lp15@cam.ac.uk> parents: 
76215diff
changeset | 889 | unfolding omult_def | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 890 | apply (rule ordertype_eq [THEN trans]) | 
| 46820 | 891 | apply (rule prod_ord_iso_cong [OF ord_iso_refl | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 892 | ordertype_ord_iso [THEN ord_iso_sym]]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 893 | apply (blast intro: well_ord_rmult well_ord_Memrel)+ | 
| 46820 | 894 | apply (rule prod_assoc_ord_iso | 
| 13356 | 895 | [THEN ord_iso_sym, THEN ordertype_eq, THEN trans]) | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 896 | apply (rule_tac [2] ordertype_eq) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 897 | apply (rule_tac [2] prod_ord_iso_cong [OF ordertype_ord_iso ord_iso_refl]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 898 | apply (blast intro: well_ord_rmult well_ord_Memrel Ord_ordertype)+ | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 899 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 900 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 901 | |
| 60770 | 902 | text\<open>Ordinal multiplication with limit ordinals\<close> | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 903 | |
| 46820 | 904 | lemma omult_UN: | 
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 905 | "\<lbrakk>Ord(i); \<And>x. x \<in> A \<Longrightarrow> Ord(j(x))\<rbrakk> | 
| 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 906 | \<Longrightarrow> i ** (\<Union>x\<in>A. j(x)) = (\<Union>x\<in>A. i**j(x))" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 907 | by (simp (no_asm_simp) add: Ord_UN omult_unfold, blast) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 908 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 909 | lemma omult_Limit: "\<lbrakk>Ord(i); Limit(j)\<rbrakk> \<Longrightarrow> i**j = (\<Union>k\<in>j. i**k)" | 
| 46820 | 910 | by (simp add: Limit_is_Ord [THEN Ord_in_Ord] omult_UN [symmetric] | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 911 | Union_eq_UN [symmetric] Limit_Union_eq) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 912 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 913 | |
| 60770 | 914 | subsubsection\<open>Ordering/monotonicity properties of ordinal multiplication\<close> | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 915 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 916 | (*As a special case we have "\<lbrakk>0<i; 0<j\<rbrakk> \<Longrightarrow> 0 < i**j" *) | 
| 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 917 | lemma lt_omult1: "\<lbrakk>k<i; 0<j\<rbrakk> \<Longrightarrow> k < i**j" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 918 | apply (safe elim!: ltE intro!: ltI Ord_omult) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 919 | apply (force simp add: omult_unfold) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 920 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 921 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 922 | lemma omult_le_self: "\<lbrakk>Ord(i); 0<j\<rbrakk> \<Longrightarrow> i \<le> i**j" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 923 | by (blast intro: all_lt_imp_le Ord_omult lt_omult1 lt_Ord2) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 924 | |
| 46927 | 925 | lemma omult_le_mono1: | 
| 926 | assumes kj: "k \<le> j" and i: "Ord(i)" shows "k**i \<le> j**i" | |
| 927 | proof - | |
| 928 | have o: "Ord(k)" "Ord(j)" by (rule lt_Ord [OF kj] le_Ord2 [OF kj])+ | |
| 929 | show ?thesis using i | |
| 930 | proof (induct i rule: trans_induct3) | |
| 46953 | 931 | case 0 thus ?case | 
| 46927 | 932 | by simp | 
| 933 | next | |
| 46953 | 934 | case (succ i) thus ?case | 
| 935 | by (simp add: o kj omult_succ oadd_le_mono) | |
| 46927 | 936 | next | 
| 937 | case (limit l) | |
| 46953 | 938 | thus ?case | 
| 939 | by (auto simp add: o kj omult_Limit le_implies_UN_le_UN) | |
| 46927 | 940 | qed | 
| 46953 | 941 | qed | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 942 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 943 | lemma omult_lt_mono2: "\<lbrakk>k<j; 0<i\<rbrakk> \<Longrightarrow> i**k < i**j" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 944 | apply (rule ltI) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 945 | apply (simp (no_asm_simp) add: omult_unfold lt_Ord2) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 946 | apply (safe elim!: ltE intro!: Ord_omult) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 947 | apply (force simp add: Ord_omult) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 948 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 949 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 950 | lemma omult_le_mono2: "\<lbrakk>k \<le> j; Ord(i)\<rbrakk> \<Longrightarrow> i**k \<le> i**j" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 951 | apply (rule subset_imp_le) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 952 | apply (safe elim!: ltE dest!: Ord_succD intro!: Ord_omult) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 953 | apply (simp add: omult_unfold) | 
| 46820 | 954 | apply (blast intro: Ord_trans) | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 955 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 956 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 957 | lemma omult_le_mono: "\<lbrakk>i' \<le> i; j' \<le> j\<rbrakk> \<Longrightarrow> i'**j' \<le> i**j" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 958 | by (blast intro: le_trans omult_le_mono1 omult_le_mono2 Ord_succD elim: ltE) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 959 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 960 | lemma omult_lt_mono: "\<lbrakk>i' \<le> i; j'<j; 0<i\<rbrakk> \<Longrightarrow> i'**j' < i**j" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 961 | by (blast intro: lt_trans1 omult_le_mono1 omult_lt_mono2 Ord_succD elim: ltE) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 962 | |
| 46953 | 963 | lemma omult_le_self2: | 
| 46927 | 964 | assumes i: "Ord(i)" and j: "0<j" shows "i \<le> j**i" | 
| 965 | proof - | |
| 966 | have oj: "Ord(j)" by (rule lt_Ord2 [OF j]) | |
| 967 | show ?thesis using i | |
| 968 | proof (induct i rule: trans_induct3) | |
| 46953 | 969 | case 0 thus ?case | 
| 46927 | 970 | by simp | 
| 971 | next | |
| 46953 | 972 | case (succ i) | 
| 61399 | 973 | have "j ** i ++ 0 < j ** i ++ j" | 
| 46953 | 974 | by (rule oadd_lt_mono2 [OF j]) | 
| 975 | with succ.hyps show ?case | |
| 46927 | 976 | by (simp add: oj j omult_succ ) (rule lt_trans1) | 
| 977 | next | |
| 978 | case (limit l) | |
| 46953 | 979 | hence "l = (\<Union>x\<in>l. x)" | 
| 46927 | 980 | by (simp add: Union_eq_UN [symmetric] Limit_Union_eq) | 
| 46953 | 981 | also have "... \<le> (\<Union>x\<in>l. j**x)" | 
| 982 | by (rule le_implies_UN_le_UN) (rule limit.hyps) | |
| 46927 | 983 | finally have "l \<le> (\<Union>x\<in>l. j**x)" . | 
| 984 | thus ?case using limit.hyps by (simp add: oj omult_Limit) | |
| 985 | qed | |
| 46953 | 986 | qed | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 987 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 988 | |
| 60770 | 989 | text\<open>Further properties of ordinal multiplication\<close> | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 990 | |
| 76213 
e44d86131648
Removal of obsolete ASCII syntax
 paulson <lp15@cam.ac.uk> parents: 
69593diff
changeset | 991 | lemma omult_inject: "\<lbrakk>i**j = i**k; 0<i; Ord(j); Ord(k)\<rbrakk> \<Longrightarrow> j=k" | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 992 | apply (rule Ord_linear_lt) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 993 | prefer 4 apply assumption | 
| 46820 | 994 | apply auto | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 995 | apply (force dest: omult_lt_mono2 simp add: lt_not_refl)+ | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 996 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13125diff
changeset | 997 | |
| 69593 | 998 | subsection\<open>The Relation \<^term>\<open>Lt\<close>\<close> | 
| 14046 | 999 | |
| 1000 | lemma wf_Lt: "wf(Lt)" | |
| 46820 | 1001 | apply (rule wf_subset) | 
| 1002 | apply (rule wf_Memrel) | |
| 1003 | apply (auto simp add: Lt_def Memrel_def lt_def) | |
| 14046 | 1004 | done | 
| 1005 | ||
| 1006 | lemma irrefl_Lt: "irrefl(A,Lt)" | |
| 1007 | by (auto simp add: Lt_def irrefl_def) | |
| 1008 | ||
| 1009 | lemma trans_Lt: "trans[A](Lt)" | |
| 46820 | 1010 | apply (simp add: Lt_def trans_on_def) | 
| 1011 | apply (blast intro: lt_trans) | |
| 14046 | 1012 | done | 
| 1013 | ||
| 1014 | lemma part_ord_Lt: "part_ord(A,Lt)" | |
| 1015 | by (simp add: part_ord_def irrefl_Lt trans_Lt) | |
| 1016 | ||
| 1017 | lemma linear_Lt: "linear(nat,Lt)" | |
| 46820 | 1018 | apply (auto dest!: not_lt_imp_le simp add: Lt_def linear_def le_iff) | 
| 1019 | apply (drule lt_asym, auto) | |
| 14046 | 1020 | done | 
| 1021 | ||
| 1022 | lemma tot_ord_Lt: "tot_ord(nat,Lt)" | |
| 1023 | by (simp add: tot_ord_def linear_Lt part_ord_Lt) | |
| 1024 | ||
| 14052 | 1025 | lemma well_ord_Lt: "well_ord(nat,Lt)" | 
| 1026 | by (simp add: well_ord_def wf_Lt wf_imp_wf_on tot_ord_Lt) | |
| 1027 | ||
| 435 | 1028 | end |