src/Doc/Tutorial/Recdef/Nested0.thy
author wenzelm
Wed, 25 Mar 2015 11:39:52 +0100
changeset 59809 87641097d0f3
parent 48985 5386df44a037
child 67406 23307fd33906
permissions -rw-r--r--
tuned signature;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9645
20ae97cd2a16 *** empty log message ***
nipkow
parents:
diff changeset
     1
(*<*)
16417
9bc16273c2d4 migrated theory headers to new format
haftmann
parents: 11494
diff changeset
     2
theory Nested0 imports Main begin
9645
20ae97cd2a16 *** empty log message ***
nipkow
parents:
diff changeset
     3
(*>*)
20ae97cd2a16 *** empty log message ***
nipkow
parents:
diff changeset
     4
20ae97cd2a16 *** empty log message ***
nipkow
parents:
diff changeset
     5
text{*
11494
23a118849801 revisions and indexing
paulson
parents: 11196
diff changeset
     6
\index{datatypes!nested}%
9645
20ae97cd2a16 *** empty log message ***
nipkow
parents:
diff changeset
     7
In \S\ref{sec:nested-datatype} we defined the datatype of terms
20ae97cd2a16 *** empty log message ***
nipkow
parents:
diff changeset
     8
*}
20ae97cd2a16 *** empty log message ***
nipkow
parents:
diff changeset
     9
20ae97cd2a16 *** empty log message ***
nipkow
parents:
diff changeset
    10
datatype ('a,'b)"term" = Var 'a | App 'b "('a,'b)term list"
20ae97cd2a16 *** empty log message ***
nipkow
parents:
diff changeset
    11
20ae97cd2a16 *** empty log message ***
nipkow
parents:
diff changeset
    12
text{*\noindent
20ae97cd2a16 *** empty log message ***
nipkow
parents:
diff changeset
    13
and closed with the observation that the associated schema for the definition
20ae97cd2a16 *** empty log message ***
nipkow
parents:
diff changeset
    14
of primitive recursive functions leads to overly verbose definitions. Moreover,
20ae97cd2a16 *** empty log message ***
nipkow
parents:
diff changeset
    15
if you have worked exercise~\ref{ex:trev-trev} you will have noticed that
10885
90695f46440b lcp's pass over the book, chapters 1-8
paulson
parents: 10186
diff changeset
    16
you needed to declare essentially the same function as @{term"rev"}
11196
bb4ede27fcb7 *** empty log message ***
nipkow
parents: 10885
diff changeset
    17
and prove many standard properties of list reversal all over again. 
10885
90695f46440b lcp's pass over the book, chapters 1-8
paulson
parents: 10186
diff changeset
    18
We will now show you how \isacommand{recdef} can simplify
9645
20ae97cd2a16 *** empty log message ***
nipkow
parents:
diff changeset
    19
definitions and proofs about nested recursive datatypes. As an example we
9754
a123a64cadeb *** empty log message ***
nipkow
parents: 9645
diff changeset
    20
choose exercise~\ref{ex:trev-trev}:
9645
20ae97cd2a16 *** empty log message ***
nipkow
parents:
diff changeset
    21
*}
10186
499637e8f2c6 *** empty log message ***
nipkow
parents: 9754
diff changeset
    22
499637e8f2c6 *** empty log message ***
nipkow
parents: 9754
diff changeset
    23
consts trev  :: "('a,'b)term \<Rightarrow> ('a,'b)term"
499637e8f2c6 *** empty log message ***
nipkow
parents: 9754
diff changeset
    24
(*<*)end(*>*)