src/Doc/Tutorial/Misc/Tree.thy
author wenzelm
Sat, 05 Jan 2019 17:24:33 +0100
changeset 69597 ff784d5a5bfb
parent 67406 23307fd33906
permissions -rw-r--r--
isabelle update -u control_cartouches;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8745
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
     1
(*<*)
16417
9bc16273c2d4 migrated theory headers to new format
haftmann
parents: 11456
diff changeset
     2
theory Tree imports Main begin
8745
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
     3
(*>*)
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
     4
67406
23307fd33906 isabelle update_cartouches -c;
wenzelm
parents: 58860
diff changeset
     5
text\<open>\noindent
11456
7eb63f63e6c6 revisions and indexing
paulson
parents: 10795
diff changeset
     6
Define the datatype of \rmindex{binary trees}:
67406
23307fd33906 isabelle update_cartouches -c;
wenzelm
parents: 58860
diff changeset
     7
\<close>
8745
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
     8
58860
fee7cfa69c50 eliminated spurious semicolons;
wenzelm
parents: 48985
diff changeset
     9
datatype 'a tree = Tip | Node "'a tree" 'a "'a tree"(*<*)
8745
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
    10
27015
f8537d69f514 *** empty log message ***
nipkow
parents: 16417
diff changeset
    11
primrec mirror :: "'a tree \<Rightarrow> 'a tree" where
f8537d69f514 *** empty log message ***
nipkow
parents: 16417
diff changeset
    12
"mirror Tip = Tip" |
58860
fee7cfa69c50 eliminated spurious semicolons;
wenzelm
parents: 48985
diff changeset
    13
"mirror (Node l x r) = Node (mirror r) x (mirror l)"(*>*)
8745
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
    14
67406
23307fd33906 isabelle update_cartouches -c;
wenzelm
parents: 58860
diff changeset
    15
text\<open>\noindent
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 67406
diff changeset
    16
Define a function \<^term>\<open>mirror\<close> that mirrors a binary tree
10795
9e888d60d3e5 minor edits to Chapters 1-3
paulson
parents: 9792
diff changeset
    17
by swapping subtrees recursively. Prove
67406
23307fd33906 isabelle update_cartouches -c;
wenzelm
parents: 58860
diff changeset
    18
\<close>
8745
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
    19
58860
fee7cfa69c50 eliminated spurious semicolons;
wenzelm
parents: 48985
diff changeset
    20
lemma mirror_mirror: "mirror(mirror t) = t"
8745
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
    21
(*<*)
58860
fee7cfa69c50 eliminated spurious semicolons;
wenzelm
parents: 48985
diff changeset
    22
apply(induct_tac t)
fee7cfa69c50 eliminated spurious semicolons;
wenzelm
parents: 48985
diff changeset
    23
by(auto)
8745
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
    24
27015
f8537d69f514 *** empty log message ***
nipkow
parents: 16417
diff changeset
    25
primrec flatten :: "'a tree => 'a list" where
f8537d69f514 *** empty log message ***
nipkow
parents: 16417
diff changeset
    26
"flatten Tip = []" |
58860
fee7cfa69c50 eliminated spurious semicolons;
wenzelm
parents: 48985
diff changeset
    27
"flatten (Node l x r) = flatten l @ [x] @ flatten r"
9493
494f8cd34df7 *** empty log message ***
nipkow
parents: 9458
diff changeset
    28
(*>*)
494f8cd34df7 *** empty log message ***
nipkow
parents: 9458
diff changeset
    29
67406
23307fd33906 isabelle update_cartouches -c;
wenzelm
parents: 58860
diff changeset
    30
text\<open>\noindent
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 67406
diff changeset
    31
Define a function \<^term>\<open>flatten\<close> that flattens a tree into a list
9493
494f8cd34df7 *** empty log message ***
nipkow
parents: 9458
diff changeset
    32
by traversing it in infix order. Prove
67406
23307fd33906 isabelle update_cartouches -c;
wenzelm
parents: 58860
diff changeset
    33
\<close>
9493
494f8cd34df7 *** empty log message ***
nipkow
parents: 9458
diff changeset
    34
58860
fee7cfa69c50 eliminated spurious semicolons;
wenzelm
parents: 48985
diff changeset
    35
lemma "flatten(mirror t) = rev(flatten t)"
9493
494f8cd34df7 *** empty log message ***
nipkow
parents: 9458
diff changeset
    36
(*<*)
58860
fee7cfa69c50 eliminated spurious semicolons;
wenzelm
parents: 48985
diff changeset
    37
apply(induct_tac t)
fee7cfa69c50 eliminated spurious semicolons;
wenzelm
parents: 48985
diff changeset
    38
by(auto)
9493
494f8cd34df7 *** empty log message ***
nipkow
parents: 9458
diff changeset
    39
8745
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
    40
end
13b32661dde4 I wonder which files i forgot.
nipkow
parents:
diff changeset
    41
(*>*)