src/ZF/OrderType.thy
author paulson
Thu, 09 May 2002 17:50:59 +0200
changeset 13125 be50e0b050b2
parent 12114 a8e860c86252
child 13140 6d97dbb189a9
permissions -rw-r--r--
ordinal addition now coerces its arguments to ordinals
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1478
2b8c2a7547ab expanded tabs
clasohm
parents: 1401
diff changeset
     1
(*  Title:      ZF/OrderType.thy
435
ca5356bd315a Addition of cardinals and order types, various tidying
lcp
parents:
diff changeset
     2
    ID:         $Id$
1478
2b8c2a7547ab expanded tabs
clasohm
parents: 1401
diff changeset
     3
    Author:     Lawrence C Paulson, Cambridge University Computer Laboratory
435
ca5356bd315a Addition of cardinals and order types, various tidying
lcp
parents:
diff changeset
     4
    Copyright   1994  University of Cambridge
ca5356bd315a Addition of cardinals and order types, various tidying
lcp
parents:
diff changeset
     5
850
a744f9749885 Added constants Ord_alt, ++, **
lcp
parents: 753
diff changeset
     6
Order types and ordinal arithmetic.
435
ca5356bd315a Addition of cardinals and order types, various tidying
lcp
parents:
diff changeset
     7
ca5356bd315a Addition of cardinals and order types, various tidying
lcp
parents:
diff changeset
     8
The order type of a well-ordering is the least ordinal isomorphic to it.
ca5356bd315a Addition of cardinals and order types, various tidying
lcp
parents:
diff changeset
     9
*)
ca5356bd315a Addition of cardinals and order types, various tidying
lcp
parents:
diff changeset
    10
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1478
diff changeset
    11
OrderType = OrderArith + OrdQuant + 
13125
be50e0b050b2 ordinal addition now coerces its arguments to ordinals
paulson
parents: 12114
diff changeset
    12
constdefs
be50e0b050b2 ordinal addition now coerces its arguments to ordinals
paulson
parents: 12114
diff changeset
    13
  
1401
0c439768f45c removed quotes from consts and syntax sections
clasohm
parents: 1033
diff changeset
    14
  ordermap  :: [i,i]=>i
13125
be50e0b050b2 ordinal addition now coerces its arguments to ordinals
paulson
parents: 12114
diff changeset
    15
   "ordermap(A,r) == lam x:A. wfrec[A](r, x, %x f. f `` pred(A,x,r))"
435
ca5356bd315a Addition of cardinals and order types, various tidying
lcp
parents:
diff changeset
    16
13125
be50e0b050b2 ordinal addition now coerces its arguments to ordinals
paulson
parents: 12114
diff changeset
    17
  ordertype :: [i,i]=>i
be50e0b050b2 ordinal addition now coerces its arguments to ordinals
paulson
parents: 12114
diff changeset
    18
   "ordertype(A,r) == ordermap(A,r)``A"
850
a744f9749885 Added constants Ord_alt, ++, **
lcp
parents: 753
diff changeset
    19
13125
be50e0b050b2 ordinal addition now coerces its arguments to ordinals
paulson
parents: 12114
diff changeset
    20
  (*alternative definition of ordinal numbers*)
be50e0b050b2 ordinal addition now coerces its arguments to ordinals
paulson
parents: 12114
diff changeset
    21
  Ord_alt   :: i => o   
be50e0b050b2 ordinal addition now coerces its arguments to ordinals
paulson
parents: 12114
diff changeset
    22
   "Ord_alt(X) == well_ord(X, Memrel(X)) & (ALL u:X. u=pred(X, u, Memrel(X)))"
435
ca5356bd315a Addition of cardinals and order types, various tidying
lcp
parents:
diff changeset
    23
13125
be50e0b050b2 ordinal addition now coerces its arguments to ordinals
paulson
parents: 12114
diff changeset
    24
  (*coercion to ordinal: if not, just 0*)
be50e0b050b2 ordinal addition now coerces its arguments to ordinals
paulson
parents: 12114
diff changeset
    25
  ordify    :: i=>i
be50e0b050b2 ordinal addition now coerces its arguments to ordinals
paulson
parents: 12114
diff changeset
    26
    "ordify(x) == if Ord(x) then x else 0"
be50e0b050b2 ordinal addition now coerces its arguments to ordinals
paulson
parents: 12114
diff changeset
    27
850
a744f9749885 Added constants Ord_alt, ++, **
lcp
parents: 753
diff changeset
    28
  (*ordinal multiplication*)
13125
be50e0b050b2 ordinal addition now coerces its arguments to ordinals
paulson
parents: 12114
diff changeset
    29
  omult      :: [i,i]=>i           (infixl "**" 70)
be50e0b050b2 ordinal addition now coerces its arguments to ordinals
paulson
parents: 12114
diff changeset
    30
   "i ** j == ordertype(j*i, rmult(j,Memrel(j),i,Memrel(i)))"
850
a744f9749885 Added constants Ord_alt, ++, **
lcp
parents: 753
diff changeset
    31
a744f9749885 Added constants Ord_alt, ++, **
lcp
parents: 753
diff changeset
    32
  (*ordinal addition*)
13125
be50e0b050b2 ordinal addition now coerces its arguments to ordinals
paulson
parents: 12114
diff changeset
    33
  raw_oadd   :: [i,i]=>i
be50e0b050b2 ordinal addition now coerces its arguments to ordinals
paulson
parents: 12114
diff changeset
    34
    "raw_oadd(i,j) == ordertype(i+j, radd(i,Memrel(i),j,Memrel(j)))"
be50e0b050b2 ordinal addition now coerces its arguments to ordinals
paulson
parents: 12114
diff changeset
    35
be50e0b050b2 ordinal addition now coerces its arguments to ordinals
paulson
parents: 12114
diff changeset
    36
  oadd      :: [i,i]=>i           (infixl "++" 65)
be50e0b050b2 ordinal addition now coerces its arguments to ordinals
paulson
parents: 12114
diff changeset
    37
    "i ++ j == raw_oadd(ordify(i),ordify(j))"
850
a744f9749885 Added constants Ord_alt, ++, **
lcp
parents: 753
diff changeset
    38
1033
437728256de3 Defined ordinal difference, --
lcp
parents: 850
diff changeset
    39
  (*ordinal subtraction*)
13125
be50e0b050b2 ordinal addition now coerces its arguments to ordinals
paulson
parents: 12114
diff changeset
    40
  odiff      :: [i,i]=>i           (infixl "--" 65)
be50e0b050b2 ordinal addition now coerces its arguments to ordinals
paulson
parents: 12114
diff changeset
    41
    "i -- j == ordertype(i-j, Memrel(i))"
1033
437728256de3 Defined ordinal difference, --
lcp
parents: 850
diff changeset
    42
13125
be50e0b050b2 ordinal addition now coerces its arguments to ordinals
paulson
parents: 12114
diff changeset
    43
  
12114
a8e860c86252 eliminated old "symbols" syntax, use "xsymbols" instead;
wenzelm
parents: 9964
diff changeset
    44
syntax (xsymbols)
9964
7966a2902266 tuned symbols;
wenzelm
parents: 9683
diff changeset
    45
  "op **"     :: [i,i] => i          (infixl "\\<times>\\<times>" 70)
7966a2902266 tuned symbols;
wenzelm
parents: 9683
diff changeset
    46
7966a2902266 tuned symbols;
wenzelm
parents: 9683
diff changeset
    47
syntax (HTML output)
9683
f87c8c449018 added some xsymbols, and tidied
paulson
parents: 9654
diff changeset
    48
  "op **"     :: [i,i] => i          (infixl "\\<times>\\<times>" 70)
9654
9754ba005b64 X-symbols for ordinal, cardinal, integer arithmetic
paulson
parents: 2469
diff changeset
    49
435
ca5356bd315a Addition of cardinals and order types, various tidying
lcp
parents:
diff changeset
    50
end