doc-src/TutorialI/Recdef/Nested0.thy
author nipkow
Fri, 18 Aug 2000 11:14:23 +0200
changeset 9645 20ae97cd2a16
child 9754 a123a64cadeb
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
20ae97cd2a16 *** empty log message ***
nipkow
parents:
diff changeset
    15
you needed to reprove many lemmas reminiscent of similar lemmas about
20ae97cd2a16 *** empty log message ***
nipkow
parents:
diff changeset
    16
@{term"rev"}. We will now show you how \isacommand{recdef} can simplify
20ae97cd2a16 *** empty log message ***
nipkow
parents:
diff changeset
    17
definitions and proofs about nested recursive datatypes. As an example we
20ae97cd2a16 *** empty log message ***
nipkow
parents:
diff changeset
    18
chose exercise~\ref{ex:trev-trev}:
20ae97cd2a16 *** empty log message ***
nipkow
parents:
diff changeset
    19
20ae97cd2a16 *** empty log message ***
nipkow
parents:
diff changeset
    20
FIXME: declare trev now!
20ae97cd2a16 *** empty log message ***
nipkow
parents:
diff changeset
    21
*}
20ae97cd2a16 *** empty log message ***
nipkow
parents:
diff changeset
    22
(* consts trev  :: "('a,'b)term => ('a,'b)term" *)
20ae97cd2a16 *** empty log message ***
nipkow
parents:
diff changeset
    23
(*<*)
20ae97cd2a16 *** empty log message ***
nipkow
parents:
diff changeset
    24
end
20ae97cd2a16 *** empty log message ***
nipkow
parents:
diff changeset
    25
(*>*)