doc-src/TutorialI/Recdef/Nested0.thy
author paulson
Mon, 19 Mar 2001 10:37:47 +0100
changeset 11212 d06fb91f22da
parent 11196 bb4ede27fcb7
child 11494 23a118849801
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9645
20ae97cd2a16 *** empty log message ***
nipkow
parents:
diff changeset
     1
(*<*)
20ae97cd2a16 *** empty log message ***
nipkow
parents:
diff changeset
     2
theory Nested0 = Main:
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{*
20ae97cd2a16 *** empty log message ***
nipkow
parents:
diff changeset
     6
In \S\ref{sec:nested-datatype} we defined the datatype of terms
20ae97cd2a16 *** empty log message ***
nipkow
parents:
diff changeset
     7
*}
20ae97cd2a16 *** empty log message ***
nipkow
parents:
diff changeset
     8
20ae97cd2a16 *** empty log message ***
nipkow
parents:
diff changeset
     9
datatype ('a,'b)"term" = Var 'a | App 'b "('a,'b)term list"
20ae97cd2a16 *** empty log message ***
nipkow
parents:
diff changeset
    10
20ae97cd2a16 *** empty log message ***
nipkow
parents:
diff changeset
    11
text{*\noindent
20ae97cd2a16 *** empty log message ***
nipkow
parents:
diff changeset
    12
and closed with the observation that the associated schema for the definition
20ae97cd2a16 *** empty log message ***
nipkow
parents:
diff changeset
    13
of primitive recursive functions leads to overly verbose definitions. Moreover,
20ae97cd2a16 *** empty log message ***
nipkow
parents:
diff changeset
    14
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
    15
you needed to declare essentially the same function as @{term"rev"}
11196
bb4ede27fcb7 *** empty log message ***
nipkow
parents: 10885
diff changeset
    16
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
    17
We will now show you how \isacommand{recdef} can simplify
9645
20ae97cd2a16 *** empty log message ***
nipkow
parents:
diff changeset
    18
definitions and proofs about nested recursive datatypes. As an example we
9754
a123a64cadeb *** empty log message ***
nipkow
parents: 9645
diff changeset
    19
choose exercise~\ref{ex:trev-trev}:
9645
20ae97cd2a16 *** empty log message ***
nipkow
parents:
diff changeset
    20
*}
10186
499637e8f2c6 *** empty log message ***
nipkow
parents: 9754
diff changeset
    21
499637e8f2c6 *** empty log message ***
nipkow
parents: 9754
diff changeset
    22
consts trev  :: "('a,'b)term \<Rightarrow> ('a,'b)term"
499637e8f2c6 *** empty log message ***
nipkow
parents: 9754
diff changeset
    23
(*<*)end(*>*)