doc-src/TutorialI/Recdef/Nested0.thy
author paulson
Fri, 12 Jan 2001 16:32:01 +0100
changeset 10885 90695f46440b
parent 10186 499637e8f2c6
child 11196 bb4ede27fcb7
permissions -rw-r--r--
lcp's pass over the book, chapters 1-8
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"}
90695f46440b lcp's pass over the book, chapters 1-8
paulson
parents: 10186
diff changeset
    16
and prove many standard properties of list reverse all over again. 
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(*>*)