doc-src/TutorialI/Overview/LNCS/Ordinal.thy
author chaieb
Wed, 19 May 2004 11:23:59 +0200
changeset 14758 af3b71a46a1c
parent 13262 bbfc360db011
child 16417 9bc16273c2d4
permissions -rw-r--r--
A new implementation for presburger arithmetic following the one suggested in technical report Chaieb Amine and Tobias Nipkow. It is generic an smaller. the tactic has also changed and allows the abstaction over fuction occurences whose type is nat or int.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
13262
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
     1
theory Ordinal = Main:
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
     2
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
     3
datatype ordinal = Zero | Succ ordinal | Limit "nat \<Rightarrow> ordinal"
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
     4
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
     5
consts
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
     6
  pred :: "ordinal \<Rightarrow> nat \<Rightarrow> ordinal option"
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
     7
primrec
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
     8
  "pred Zero n = None"
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
     9
  "pred (Succ a) n = Some a"
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    10
  "pred (Limit f) n = Some (f n)"
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    11
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    12
constdefs
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    13
  OpLim :: "(nat \<Rightarrow> (ordinal \<Rightarrow> ordinal)) \<Rightarrow> (ordinal \<Rightarrow> ordinal)"
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    14
  "OpLim F a \<equiv> Limit (\<lambda>n. F n a)"
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    15
  OpItw :: "(ordinal \<Rightarrow> ordinal) \<Rightarrow> (ordinal \<Rightarrow> ordinal)"    ("\<Squnion>")
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    16
  "\<Squnion>f \<equiv> OpLim (power f)"
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    17
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    18
consts
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    19
  cantor :: "ordinal \<Rightarrow> ordinal \<Rightarrow> ordinal"
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    20
primrec
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    21
  "cantor a Zero = Succ a"
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    22
  "cantor a (Succ b) = \<Squnion>(\<lambda>x. cantor x b) a"
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    23
  "cantor a (Limit f) = Limit (\<lambda>n. cantor a (f n))"
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    24
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    25
consts
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    26
  Nabla :: "(ordinal \<Rightarrow> ordinal) \<Rightarrow> (ordinal \<Rightarrow> ordinal)"    ("\<nabla>")
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    27
primrec
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    28
  "\<nabla>f Zero = f Zero"
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    29
  "\<nabla>f (Succ a) = f (Succ (\<nabla>f a))"
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    30
  "\<nabla>f (Limit h) = Limit (\<lambda>n. \<nabla>f (h n))"
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    31
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    32
constdefs
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    33
  deriv :: "(ordinal \<Rightarrow> ordinal) \<Rightarrow> (ordinal \<Rightarrow> ordinal)"
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    34
  "deriv f \<equiv> \<nabla>(\<Squnion>f)"
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    35
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    36
consts
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    37
  veblen :: "ordinal \<Rightarrow> ordinal \<Rightarrow> ordinal"
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    38
primrec
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    39
  "veblen Zero = \<nabla>(OpLim (power (cantor Zero)))"
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    40
  "veblen (Succ a) = \<nabla>(OpLim (power (veblen a)))"
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    41
  "veblen (Limit f) = \<nabla>(OpLim (\<lambda>n. veblen (f n)))"
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    42
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    43
constdefs
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    44
  veb :: "ordinal \<Rightarrow> ordinal"
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    45
  "veb a \<equiv> veblen a Zero"
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    46
  epsilon0 :: ordinal    ("\<epsilon>\<^sub>0")
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    47
  "\<epsilon>\<^sub>0 \<equiv> veb Zero"
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    48
  Gamma0 :: ordinal    ("\<Gamma>\<^sub>0")
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    49
  "\<Gamma>\<^sub>0 \<equiv> Limit (\<lambda>n. (veb^n) Zero)"
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    50
thm Gamma0_def
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    51
bbfc360db011 *** empty log message ***
nipkow
parents:
diff changeset
    52
end