Nat.thy
author clasohm
Sun, 24 Apr 1994 11:27:38 +0200
changeset 70 9459592608e2
parent 51 934a58983311
child 90 5c7a69cef18b
permissions -rw-r--r--
renamed theory files
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
7949f97df77a Initial revision
clasohm
parents:
diff changeset
     1
(*  Title: 	HOL/nat
7949f97df77a Initial revision
clasohm
parents:
diff changeset
     2
    ID:         $Id$
7949f97df77a Initial revision
clasohm
parents:
diff changeset
     3
    Author: 	Tobias Nipkow, Cambridge University Computer Laboratory
7949f97df77a Initial revision
clasohm
parents:
diff changeset
     4
    Copyright   1991  University of Cambridge
7949f97df77a Initial revision
clasohm
parents:
diff changeset
     5
7949f97df77a Initial revision
clasohm
parents:
diff changeset
     6
Definition of types ind and nat.
7949f97df77a Initial revision
clasohm
parents:
diff changeset
     7
7949f97df77a Initial revision
clasohm
parents:
diff changeset
     8
Type nat is defined as a set Nat over type ind.
7949f97df77a Initial revision
clasohm
parents:
diff changeset
     9
*)
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    10
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    11
Nat = WF +
51
934a58983311 new type declaration syntax instead of numbers
lcp
parents: 0
diff changeset
    12
934a58983311 new type declaration syntax instead of numbers
lcp
parents: 0
diff changeset
    13
types
934a58983311 new type declaration syntax instead of numbers
lcp
parents: 0
diff changeset
    14
  ind
934a58983311 new type declaration syntax instead of numbers
lcp
parents: 0
diff changeset
    15
  nat
934a58983311 new type declaration syntax instead of numbers
lcp
parents: 0
diff changeset
    16
934a58983311 new type declaration syntax instead of numbers
lcp
parents: 0
diff changeset
    17
arities
934a58983311 new type declaration syntax instead of numbers
lcp
parents: 0
diff changeset
    18
  ind,nat :: term
934a58983311 new type declaration syntax instead of numbers
lcp
parents: 0
diff changeset
    19
  nat     :: ord
0
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    20
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    21
consts
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    22
  Zero_Rep	:: "ind"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    23
  Suc_Rep	:: "ind => ind"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    24
  Nat		:: "ind set"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    25
  Rep_Nat	:: "nat => ind"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    26
  Abs_Nat	:: "ind => nat"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    27
  Suc		:: "nat => nat"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    28
  nat_case	:: "[nat, 'a, nat=>'a] =>'a"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    29
  pred_nat	:: "(nat*nat) set"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    30
  nat_rec	:: "[nat, 'a, [nat, 'a]=>'a] => 'a"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    31
  "0"		:: "nat"		("0")
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    32
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    33
rules
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    34
 (*the axiom of infinity in 2 parts*)
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    35
  inj_Suc_Rep  		"inj(Suc_Rep)"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    36
  Suc_Rep_not_Zero_Rep	"~(Suc_Rep(x) = Zero_Rep)"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    37
  Nat_def		"Nat == lfp(%X. {Zero_Rep} Un (Suc_Rep``X))"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    38
    (*faking a type definition...*)
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    39
  Rep_Nat 		"Rep_Nat(n): Nat"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    40
  Rep_Nat_inverse 	"Abs_Nat(Rep_Nat(n)) = n"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    41
  Abs_Nat_inverse 	"i: Nat ==> Rep_Nat(Abs_Nat(i)) = i"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    42
    (*defining the abstract constants*)
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    43
  Zero_def  		"0 == Abs_Nat(Zero_Rep)"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    44
  Suc_def  		"Suc == (%n. Abs_Nat(Suc_Rep(Rep_Nat(n))))"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    45
     (*nat operations and recursion*)
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    46
  nat_case_def	"nat_case == (%n a f. @z.  (n=0 --> z=a)  \
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    47
\                                          & (!x. n=Suc(x) --> z=f(x)))"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    48
  pred_nat_def 	"pred_nat == {p. ? n. p = <n, Suc(n)>}"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    49
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    50
  less_def "m<n == <m,n>:trancl(pred_nat)"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    51
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    52
  le_def   "m<=n::nat == ~(n<m)"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    53
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    54
  nat_rec_def	"nat_rec(n,c,d) == wfrec(pred_nat, n,   \
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    55
\                        %l g. nat_case(l, c, %m. d(m,g(m))))"
7949f97df77a Initial revision
clasohm
parents:
diff changeset
    56
end