src/HOL/ex/Seq.thy
author Christian Sternagel
Thu, 30 Aug 2012 15:44:03 +0900
changeset 49093 fdc301f592c4
parent 44962 5554ed48b13f
child 58249 180f1b3508ed
permissions -rw-r--r--
forgot to add lemmas
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
44962
5554ed48b13f finite sequences as useful as introductory example;
wenzelm
parents:
diff changeset
     1
(*  Title:      HOL/ex/Seq.thy
5554ed48b13f finite sequences as useful as introductory example;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
5554ed48b13f finite sequences as useful as introductory example;
wenzelm
parents:
diff changeset
     3
*)
5554ed48b13f finite sequences as useful as introductory example;
wenzelm
parents:
diff changeset
     4
5554ed48b13f finite sequences as useful as introductory example;
wenzelm
parents:
diff changeset
     5
header {* Finite sequences *}
5554ed48b13f finite sequences as useful as introductory example;
wenzelm
parents:
diff changeset
     6
5554ed48b13f finite sequences as useful as introductory example;
wenzelm
parents:
diff changeset
     7
theory Seq
5554ed48b13f finite sequences as useful as introductory example;
wenzelm
parents:
diff changeset
     8
imports Main
5554ed48b13f finite sequences as useful as introductory example;
wenzelm
parents:
diff changeset
     9
begin
5554ed48b13f finite sequences as useful as introductory example;
wenzelm
parents:
diff changeset
    10
5554ed48b13f finite sequences as useful as introductory example;
wenzelm
parents:
diff changeset
    11
datatype 'a seq = Empty | Seq 'a "'a seq"
5554ed48b13f finite sequences as useful as introductory example;
wenzelm
parents:
diff changeset
    12
5554ed48b13f finite sequences as useful as introductory example;
wenzelm
parents:
diff changeset
    13
fun conc :: "'a seq \<Rightarrow> 'a seq \<Rightarrow> 'a seq"
5554ed48b13f finite sequences as useful as introductory example;
wenzelm
parents:
diff changeset
    14
where
5554ed48b13f finite sequences as useful as introductory example;
wenzelm
parents:
diff changeset
    15
  "conc Empty ys = ys"
5554ed48b13f finite sequences as useful as introductory example;
wenzelm
parents:
diff changeset
    16
| "conc (Seq x xs) ys = Seq x (conc xs ys)"
5554ed48b13f finite sequences as useful as introductory example;
wenzelm
parents:
diff changeset
    17
5554ed48b13f finite sequences as useful as introductory example;
wenzelm
parents:
diff changeset
    18
fun reverse :: "'a seq \<Rightarrow> 'a seq"
5554ed48b13f finite sequences as useful as introductory example;
wenzelm
parents:
diff changeset
    19
where
5554ed48b13f finite sequences as useful as introductory example;
wenzelm
parents:
diff changeset
    20
  "reverse Empty = Empty"
5554ed48b13f finite sequences as useful as introductory example;
wenzelm
parents:
diff changeset
    21
| "reverse (Seq x xs) = conc (reverse xs) (Seq x Empty)"
5554ed48b13f finite sequences as useful as introductory example;
wenzelm
parents:
diff changeset
    22
5554ed48b13f finite sequences as useful as introductory example;
wenzelm
parents:
diff changeset
    23
lemma conc_empty: "conc xs Empty = xs"
5554ed48b13f finite sequences as useful as introductory example;
wenzelm
parents:
diff changeset
    24
  by (induct xs) simp_all
5554ed48b13f finite sequences as useful as introductory example;
wenzelm
parents:
diff changeset
    25
5554ed48b13f finite sequences as useful as introductory example;
wenzelm
parents:
diff changeset
    26
lemma conc_assoc: "conc (conc xs ys) zs = conc xs (conc ys zs)"
5554ed48b13f finite sequences as useful as introductory example;
wenzelm
parents:
diff changeset
    27
  by (induct xs) simp_all
5554ed48b13f finite sequences as useful as introductory example;
wenzelm
parents:
diff changeset
    28
5554ed48b13f finite sequences as useful as introductory example;
wenzelm
parents:
diff changeset
    29
lemma reverse_conc: "reverse (conc xs ys) = conc (reverse ys) (reverse xs)"
5554ed48b13f finite sequences as useful as introductory example;
wenzelm
parents:
diff changeset
    30
  by (induct xs) (simp_all add: conc_empty conc_assoc)
5554ed48b13f finite sequences as useful as introductory example;
wenzelm
parents:
diff changeset
    31
5554ed48b13f finite sequences as useful as introductory example;
wenzelm
parents:
diff changeset
    32
lemma reverse_reverse: "reverse (reverse xs) = xs"
5554ed48b13f finite sequences as useful as introductory example;
wenzelm
parents:
diff changeset
    33
  by (induct xs) (simp_all add: reverse_conc)
5554ed48b13f finite sequences as useful as introductory example;
wenzelm
parents:
diff changeset
    34
5554ed48b13f finite sequences as useful as introductory example;
wenzelm
parents:
diff changeset
    35
end