src/FOL/ex/List.thy
author wenzelm
Sun, 15 Oct 2000 19:50:35 +0200
changeset 10220 2a726de6e124
parent 3922 ca23ee574faa
child 17245 1c519a3cca59
permissions -rw-r--r--
proper symbol markup with \isamath, \isatext; support sub/super scripts:
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1473
e8d4606e6502 expanded tabs
clasohm
parents: 1322
diff changeset
     1
(*  Title:      FOL/ex/list
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     2
    ID:         $Id$
1473
e8d4606e6502 expanded tabs
clasohm
parents: 1322
diff changeset
     3
    Author:     Tobias Nipkow
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     4
    Copyright   1991  University of Cambridge
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     5
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     6
Examples of simplification and induction on lists
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     7
*)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     8
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     9
List = Nat2 +
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    10
352
fd3ab8bcb69d removal of obsolete type-declaration syntax
lcp
parents: 0
diff changeset
    11
types 'a list
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    12
arities list :: (term)term
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    13
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    14
consts
1473
e8d4606e6502 expanded tabs
clasohm
parents: 1322
diff changeset
    15
   hd           :: 'a list => 'a  
e8d4606e6502 expanded tabs
clasohm
parents: 1322
diff changeset
    16
   tl           :: 'a list => 'a list
e8d4606e6502 expanded tabs
clasohm
parents: 1322
diff changeset
    17
   forall       :: ['a list, 'a => o] => o  
e8d4606e6502 expanded tabs
clasohm
parents: 1322
diff changeset
    18
   len          :: 'a list => nat  
e8d4606e6502 expanded tabs
clasohm
parents: 1322
diff changeset
    19
   at           :: ['a list, nat] => 'a  
3922
ca23ee574faa tuned "." syntax;
wenzelm
parents: 3835
diff changeset
    20
   Nil          :: ('a list)                         ("[]")
ca23ee574faa tuned "." syntax;
wenzelm
parents: 3835
diff changeset
    21
   Cons         :: ['a, 'a list] => 'a list          (infixr "." 80)
1473
e8d4606e6502 expanded tabs
clasohm
parents: 1322
diff changeset
    22
   "++"         :: ['a list, 'a list] => 'a list     (infixr 70)
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    23
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    24
rules
3922
ca23ee574faa tuned "." syntax;
wenzelm
parents: 3835
diff changeset
    25
 list_ind "[| P([]);  ALL x l. P(l)-->P(x . l) |] ==> All(P)"
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    26
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    27
 forall_cong 
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    28
  "[| l = l';  !!x. P(x)<->P'(x) |] ==> forall(l,P) <-> forall(l',P')"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    29
3922
ca23ee574faa tuned "." syntax;
wenzelm
parents: 3835
diff changeset
    30
 list_distinct1 "~[] = x . l"
ca23ee574faa tuned "." syntax;
wenzelm
parents: 3835
diff changeset
    31
 list_distinct2 "~x . l = []"
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    32
3922
ca23ee574faa tuned "." syntax;
wenzelm
parents: 3835
diff changeset
    33
 list_free      "x . l = x' . l' <-> x=x' & l=l'"
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    34
1473
e8d4606e6502 expanded tabs
clasohm
parents: 1322
diff changeset
    35
 app_nil        "[]++l = l"
3922
ca23ee574faa tuned "." syntax;
wenzelm
parents: 3835
diff changeset
    36
 app_cons       "(x . l)++l' = x .(l++l')"
ca23ee574faa tuned "." syntax;
wenzelm
parents: 3835
diff changeset
    37
 tl_eq  "tl(m . q) = q"
ca23ee574faa tuned "." syntax;
wenzelm
parents: 3835
diff changeset
    38
 hd_eq  "hd(m . q) = m"
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    39
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    40
 forall_nil "forall([],P)"
3922
ca23ee574faa tuned "." syntax;
wenzelm
parents: 3835
diff changeset
    41
 forall_cons "forall(x . l,P) <-> P(x) & forall(l,P)"
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    42
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    43
 len_nil "len([]) = 0"
3922
ca23ee574faa tuned "." syntax;
wenzelm
parents: 3835
diff changeset
    44
 len_cons "len(m . q) = succ(len(q))"
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    45
3922
ca23ee574faa tuned "." syntax;
wenzelm
parents: 3835
diff changeset
    46
 at_0 "at(m . q,0) = m"
ca23ee574faa tuned "." syntax;
wenzelm
parents: 3835
diff changeset
    47
 at_succ "at(m . q,succ(n)) = at(q,n)"
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    48
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    49
end