src/HOL/ex/Seq.thy
author wenzelm
Sun, 02 Nov 2014 18:21:45 +0100
changeset 58889 5b7a9633cfa8
parent 58616 4257a7f2bf39
permissions -rw-r--r--
modernized header uniformly as section;
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
58889
5b7a9633cfa8 modernized header uniformly as section;
wenzelm
parents: 58616
diff changeset
     5
section \<open>Finite sequences\<close>
44962
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
58310
91ea607a34d8 updated news
blanchet
parents: 58249
diff changeset
    11
datatype 'a seq = Empty | Seq 'a "'a seq"
44962
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