src/FOL/ex/List.thy
author wenzelm
Tue, 13 Sep 2005 22:19:23 +0200
changeset 17339 ab97ccef124a
parent 17245 1c519a3cca59
permissions -rw-r--r--
tuned Isar interfaces; tuned IsarThy.theorem_i;
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
17245
1c519a3cca59 converted to Isar theory format;
wenzelm
parents: 3922
diff changeset
     7
header {* Examples of simplification and induction on lists *}
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     8
17245
1c519a3cca59 converted to Isar theory format;
wenzelm
parents: 3922
diff changeset
     9
theory List
1c519a3cca59 converted to Isar theory format;
wenzelm
parents: 3922
diff changeset
    10
imports Nat2
1c519a3cca59 converted to Isar theory format;
wenzelm
parents: 3922
diff changeset
    11
begin
1c519a3cca59 converted to Isar theory format;
wenzelm
parents: 3922
diff changeset
    12
1c519a3cca59 converted to Isar theory format;
wenzelm
parents: 3922
diff changeset
    13
typedecl 'a list
1c519a3cca59 converted to Isar theory format;
wenzelm
parents: 3922
diff changeset
    14
arities list :: ("term") "term"
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    15
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    16
consts
17245
1c519a3cca59 converted to Isar theory format;
wenzelm
parents: 3922
diff changeset
    17
   hd           :: "'a list => 'a"
1c519a3cca59 converted to Isar theory format;
wenzelm
parents: 3922
diff changeset
    18
   tl           :: "'a list => 'a list"
1c519a3cca59 converted to Isar theory format;
wenzelm
parents: 3922
diff changeset
    19
   forall       :: "['a list, 'a => o] => o"
1c519a3cca59 converted to Isar theory format;
wenzelm
parents: 3922
diff changeset
    20
   len          :: "'a list => nat"
1c519a3cca59 converted to Isar theory format;
wenzelm
parents: 3922
diff changeset
    21
   at           :: "['a list, nat] => 'a"
1c519a3cca59 converted to Isar theory format;
wenzelm
parents: 3922
diff changeset
    22
   Nil          :: "'a list"                          ("[]")
1c519a3cca59 converted to Isar theory format;
wenzelm
parents: 3922
diff changeset
    23
   Cons         :: "['a, 'a list] => 'a list"         (infixr "." 80)
1c519a3cca59 converted to Isar theory format;
wenzelm
parents: 3922
diff changeset
    24
   app          :: "['a list, 'a list] => 'a list"    (infixr "++" 70)
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    25
17245
1c519a3cca59 converted to Isar theory format;
wenzelm
parents: 3922
diff changeset
    26
axioms
1c519a3cca59 converted to Isar theory format;
wenzelm
parents: 3922
diff changeset
    27
 list_ind: "[| P([]);  ALL x l. P(l)-->P(x . l) |] ==> All(P)"
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    28
17245
1c519a3cca59 converted to Isar theory format;
wenzelm
parents: 3922
diff changeset
    29
 forall_cong:
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    30
  "[| l = l';  !!x. P(x)<->P'(x) |] ==> forall(l,P) <-> forall(l',P')"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    31
17245
1c519a3cca59 converted to Isar theory format;
wenzelm
parents: 3922
diff changeset
    32
 list_distinct1: "~[] = x . l"
1c519a3cca59 converted to Isar theory format;
wenzelm
parents: 3922
diff changeset
    33
 list_distinct2: "~x . l = []"
1c519a3cca59 converted to Isar theory format;
wenzelm
parents: 3922
diff changeset
    34
1c519a3cca59 converted to Isar theory format;
wenzelm
parents: 3922
diff changeset
    35
 list_free:      "x . l = x' . l' <-> x=x' & l=l'"
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    36
17245
1c519a3cca59 converted to Isar theory format;
wenzelm
parents: 3922
diff changeset
    37
 app_nil:        "[]++l = l"
1c519a3cca59 converted to Isar theory format;
wenzelm
parents: 3922
diff changeset
    38
 app_cons:       "(x . l)++l' = x .(l++l')"
1c519a3cca59 converted to Isar theory format;
wenzelm
parents: 3922
diff changeset
    39
 tl_eq:  "tl(m . q) = q"
1c519a3cca59 converted to Isar theory format;
wenzelm
parents: 3922
diff changeset
    40
 hd_eq:  "hd(m . q) = m"
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    41
17245
1c519a3cca59 converted to Isar theory format;
wenzelm
parents: 3922
diff changeset
    42
 forall_nil: "forall([],P)"
1c519a3cca59 converted to Isar theory format;
wenzelm
parents: 3922
diff changeset
    43
 forall_cons: "forall(x . l,P) <-> P(x) & forall(l,P)"
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    44
17245
1c519a3cca59 converted to Isar theory format;
wenzelm
parents: 3922
diff changeset
    45
 len_nil: "len([]) = 0"
1c519a3cca59 converted to Isar theory format;
wenzelm
parents: 3922
diff changeset
    46
 len_cons: "len(m . q) = succ(len(q))"
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    47
17245
1c519a3cca59 converted to Isar theory format;
wenzelm
parents: 3922
diff changeset
    48
 at_0: "at(m . q,0) = m"
1c519a3cca59 converted to Isar theory format;
wenzelm
parents: 3922
diff changeset
    49
 at_succ: "at(m . q,succ(n)) = at(q,n)"
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    50
17245
1c519a3cca59 converted to Isar theory format;
wenzelm
parents: 3922
diff changeset
    51
ML {* use_legacy_bindings (the_context ()) *}
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    52
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    53
end