src/ZF/ex/ListN.ML
author wenzelm
Mon, 03 Nov 1997 12:24:13 +0100
changeset 4091 771b1f6422a8
parent 2469 b50b8c0eec01
child 5068 fb28eaa07e01
permissions -rw-r--r--
isatool fixclasimp;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 782
diff changeset
     1
(*  Title:      ZF/ex/listn
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     2
    ID:         $Id$
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 782
diff changeset
     3
    Author:     Lawrence C Paulson, Cambridge University Computer Laboratory
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     4
    Copyright   1993  University of Cambridge
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     5
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     6
Inductive definition of lists of n elements
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     7
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     8
See Ch. Paulin-Mohring, Inductive Definitions in the System Coq.
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     9
Research Report 92-49, LIP, ENS Lyon.  Dec 1992.
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    10
*)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    11
515
abcc438e7c27 installation of new inductive/datatype sections
lcp
parents: 496
diff changeset
    12
open ListN;
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    13
71
729fe026c5f3 sample datatype defs now use datatype_intrs, datatype_elims
lcp
parents: 56
diff changeset
    14
goal ListN.thy "!!l. l:list(A) ==> <length(l),l> : listn(A)";
515
abcc438e7c27 installation of new inductive/datatype sections
lcp
parents: 496
diff changeset
    15
by (etac list.induct 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1732
diff changeset
    16
by (ALLGOALS Asm_simp_tac);
515
abcc438e7c27 installation of new inductive/datatype sections
lcp
parents: 496
diff changeset
    17
by (REPEAT (ares_tac listn.intrs 1));
782
200a16083201 added bind_thm for theorems defined by "standard ..."
clasohm
parents: 515
diff changeset
    18
qed "list_into_listn";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    19
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    20
goal ListN.thy "<n,l> : listn(A) <-> l:list(A) & length(l)=n";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    21
by (rtac iffI 1);
1732
38776e927da8 Updated for new form of induction rules
paulson
parents: 1461
diff changeset
    22
by (etac listn.induct 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 2469
diff changeset
    23
by (safe_tac (claset() addSIs (list_typechecks @
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 782
diff changeset
    24
                            [length_Nil, length_Cons, list_into_listn])));
782
200a16083201 added bind_thm for theorems defined by "standard ..."
clasohm
parents: 515
diff changeset
    25
qed "listn_iff";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    26
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    27
goal ListN.thy "listn(A)``{n} = {l:list(A). length(l)=n}";
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    28
by (rtac equality_iffI 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 2469
diff changeset
    29
by (simp_tac (simpset() addsimps [listn_iff,separation,image_singleton_iff]) 1);
782
200a16083201 added bind_thm for theorems defined by "standard ..."
clasohm
parents: 515
diff changeset
    30
qed "listn_image_eq";
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    31
515
abcc438e7c27 installation of new inductive/datatype sections
lcp
parents: 496
diff changeset
    32
goalw ListN.thy listn.defs "!!A B. A<=B ==> listn(A) <= listn(B)";
16
0b033d50ca1c ex/{bin.ML,comb.ML,prop.ML}: replaced NewSext by Syntax.simple_sext
lcp
parents: 7
diff changeset
    33
by (rtac lfp_mono 1);
515
abcc438e7c27 installation of new inductive/datatype sections
lcp
parents: 496
diff changeset
    34
by (REPEAT (rtac listn.bnd_mono 1));
16
0b033d50ca1c ex/{bin.ML,comb.ML,prop.ML}: replaced NewSext by Syntax.simple_sext
lcp
parents: 7
diff changeset
    35
by (REPEAT (ares_tac ([univ_mono,Sigma_mono,list_mono] @ basic_monos) 1));
782
200a16083201 added bind_thm for theorems defined by "standard ..."
clasohm
parents: 515
diff changeset
    36
qed "listn_mono";
16
0b033d50ca1c ex/{bin.ML,comb.ML,prop.ML}: replaced NewSext by Syntax.simple_sext
lcp
parents: 7
diff changeset
    37
71
729fe026c5f3 sample datatype defs now use datatype_intrs, datatype_elims
lcp
parents: 56
diff changeset
    38
goal ListN.thy
729fe026c5f3 sample datatype defs now use datatype_intrs, datatype_elims
lcp
parents: 56
diff changeset
    39
    "!!n l. [| <n,l> : listn(A);  <n',l'> : listn(A) |] ==> \
729fe026c5f3 sample datatype defs now use datatype_intrs, datatype_elims
lcp
parents: 56
diff changeset
    40
\           <n#+n', l@l'> : listn(A)";
1732
38776e927da8 Updated for new form of induction rules
paulson
parents: 1461
diff changeset
    41
by (etac listn.induct 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 2469
diff changeset
    42
by (ALLGOALS (asm_simp_tac (simpset() addsimps listn.intrs)));
782
200a16083201 added bind_thm for theorems defined by "standard ..."
clasohm
parents: 515
diff changeset
    43
qed "listn_append";
71
729fe026c5f3 sample datatype defs now use datatype_intrs, datatype_elims
lcp
parents: 56
diff changeset
    44
515
abcc438e7c27 installation of new inductive/datatype sections
lcp
parents: 496
diff changeset
    45
val Nil_listn_case = listn.mk_cases list.con_defs "<i,Nil> : listn(A)"
abcc438e7c27 installation of new inductive/datatype sections
lcp
parents: 496
diff changeset
    46
and Cons_listn_case = listn.mk_cases list.con_defs "<i,Cons(x,l)> : listn(A)";
85
914270f33f2d minor changes e.g. datatype_elims
lcp
parents: 71
diff changeset
    47
515
abcc438e7c27 installation of new inductive/datatype sections
lcp
parents: 496
diff changeset
    48
val zero_listn_case = listn.mk_cases list.con_defs "<0,l> : listn(A)"
abcc438e7c27 installation of new inductive/datatype sections
lcp
parents: 496
diff changeset
    49
and succ_listn_case = listn.mk_cases list.con_defs "<succ(i),l> : listn(A)";