src/FOL/ex/List.thy
author lcp
Tue, 03 May 1994 15:00:00 +0200
changeset 352 fd3ab8bcb69d
parent 0 a5a9c433f639
child 1322 9b3d3362a048
permissions -rw-r--r--
removal of obsolete type-declaration syntax
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     1
(*  Title: 	FOL/ex/list
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     2
    ID:         $Id$
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     3
    Author: 	Tobias Nipkow
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
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    15
   hd		:: "'a list => 'a"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    16
   tl		:: "'a list => 'a list"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    17
   forall	:: "['a list, 'a => o] => o"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    18
   len		:: "'a list => nat"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    19
   at		:: "['a list, nat] => 'a"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    20
   "[]"		:: "'a list"	("[]")
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    21
   "."		:: "['a, 'a list] => 'a list"  (infixr 80)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    22
   "++"		:: "['a list, 'a list] => 'a list" (infixr 70)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    23
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    24
rules
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    25
 list_ind "[| P([]);  ALL x l. P(l)-->P(x.l) |] ==> All(P)"
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
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    30
 list_distinct1 "~[] = x.l"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    31
 list_distinct2 "~x.l = []"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    32
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    33
 list_free 	"x.l = x'.l' <-> x=x' & l=l'"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    34
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    35
 app_nil 	"[]++l = l"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    36
 app_cons 	"(x.l)++l' = x.(l++l')"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    37
 tl_eq 	"tl(m.q) = q"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    38
 hd_eq 	"hd(m.q) = m"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    39
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    40
 forall_nil "forall([],P)"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    41
 forall_cons "forall(x.l,P) <-> P(x) & forall(l,P)"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    42
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    43
 len_nil "len([]) = 0"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    44
 len_cons "len(m.q) = succ(len(q))"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    45
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    46
 at_0 "at(m.q,0) = m"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    47
 at_succ "at(m.q,succ(n)) = at(q,n)"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    48
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    49
end