doc-src/TutorialI/Overview/Ordinal.thy
author nipkow
Mon, 01 Jul 2002 12:50:35 +0200
changeset 13261 a0460a450cf9
parent 13250 efd5db7dc7cc
permissions -rw-r--r--
fixed problem with linear arith.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
13250
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
     1
theory Ordinal = Main:
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
     2
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
     3
datatype ordinal = Zero | Succ ordinal | Limit "nat \<Rightarrow> ordinal"
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
     4
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
     5
consts
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
     6
  pred :: "ordinal \<Rightarrow> nat \<Rightarrow> ordinal option"
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
     7
primrec
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
     8
  "pred Zero n = None"
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
     9
  "pred (Succ a) n = Some a"
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    10
  "pred (Limit f) n = Some (f n)"
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    11
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    12
constdefs
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    13
  OpLim :: "(nat \<Rightarrow> (ordinal \<Rightarrow> ordinal)) \<Rightarrow> (ordinal \<Rightarrow> ordinal)"
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    14
  "OpLim F a \<equiv> Limit (\<lambda>n. F n a)"
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    15
  OpItw :: "(ordinal \<Rightarrow> ordinal) \<Rightarrow> (ordinal \<Rightarrow> ordinal)"    ("\<Squnion>")
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    16
  "\<Squnion>f \<equiv> OpLim (power f)"
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    17
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    18
consts
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    19
  cantor :: "ordinal \<Rightarrow> ordinal \<Rightarrow> ordinal"
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    20
primrec
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    21
  "cantor a Zero = Succ a"
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    22
  "cantor a (Succ b) = \<Squnion>(\<lambda>x. cantor x b) a"
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    23
  "cantor a (Limit f) = Limit (\<lambda>n. cantor a (f n))"
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    24
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    25
consts
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    26
  Nabla :: "(ordinal \<Rightarrow> ordinal) \<Rightarrow> (ordinal \<Rightarrow> ordinal)"    ("\<nabla>")
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    27
primrec
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    28
  "\<nabla>f Zero = f Zero"
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    29
  "\<nabla>f (Succ a) = f (Succ (\<nabla>f a))"
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    30
  "\<nabla>f (Limit h) = Limit (\<lambda>n. \<nabla>f (h n))"
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    31
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    32
constdefs
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    33
  deriv :: "(ordinal \<Rightarrow> ordinal) \<Rightarrow> (ordinal \<Rightarrow> ordinal)"
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    34
  "deriv f \<equiv> \<nabla>(\<Squnion>f)"
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    35
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    36
consts
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    37
  veblen :: "ordinal \<Rightarrow> ordinal \<Rightarrow> ordinal"
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    38
primrec
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    39
  "veblen Zero = \<nabla>(OpLim (power (cantor Zero)))"
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    40
  "veblen (Succ a) = \<nabla>(OpLim (power (veblen a)))"
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    41
  "veblen (Limit f) = \<nabla>(OpLim (\<lambda>n. veblen (f n)))"
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    42
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    43
constdefs
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    44
  veb :: "ordinal \<Rightarrow> ordinal"
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    45
  "veb a \<equiv> veblen a Zero"
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    46
  epsilon0 :: ordinal    ("\<epsilon>\<^sub>0")
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    47
  "\<epsilon>\<^sub>0 \<equiv> veb Zero"
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    48
  Gamma0 :: ordinal    ("\<Gamma>\<^sub>0")
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    49
  "\<Gamma>\<^sub>0 \<equiv> Limit (\<lambda>n. (veb^n) Zero)"
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    50
thm Gamma0_def
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    51
efd5db7dc7cc *** empty log message ***
nipkow
parents:
diff changeset
    52
end