src/HOL/Data_Structures/Reverse.thy
author nipkow
Wed, 31 Jul 2024 10:36:28 +0200
changeset 80628 161286c9d426
parent 79969 4aeb25ba90f3
permissions -rw-r--r--
tuned names
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
72642
d152890dd17e new theory
nipkow
parents:
diff changeset
     1
theory Reverse
79495
8a2511062609 more uses of define_time_fun
nipkow
parents: 72642
diff changeset
     2
imports Define_Time_Function
72642
d152890dd17e new theory
nipkow
parents:
diff changeset
     3
begin
d152890dd17e new theory
nipkow
parents:
diff changeset
     4
79969
4aeb25ba90f3 more uniform command names
nipkow
parents: 79495
diff changeset
     5
time_fun append
4aeb25ba90f3 more uniform command names
nipkow
parents: 79495
diff changeset
     6
time_fun rev
72642
d152890dd17e new theory
nipkow
parents:
diff changeset
     7
d152890dd17e new theory
nipkow
parents:
diff changeset
     8
lemma T_append: "T_append xs ys = length xs + 1"
d152890dd17e new theory
nipkow
parents:
diff changeset
     9
by(induction xs) auto
d152890dd17e new theory
nipkow
parents:
diff changeset
    10
d152890dd17e new theory
nipkow
parents:
diff changeset
    11
lemma T_rev: "T_rev xs \<le> (length xs + 1)^2"
d152890dd17e new theory
nipkow
parents:
diff changeset
    12
by(induction xs) (auto simp: T_append power2_eq_square)
d152890dd17e new theory
nipkow
parents:
diff changeset
    13
d152890dd17e new theory
nipkow
parents:
diff changeset
    14
fun itrev :: "'a list \<Rightarrow> 'a list \<Rightarrow> 'a list" where
d152890dd17e new theory
nipkow
parents:
diff changeset
    15
"itrev [] ys = ys" |
d152890dd17e new theory
nipkow
parents:
diff changeset
    16
"itrev (x#xs) ys = itrev xs (x # ys)"
d152890dd17e new theory
nipkow
parents:
diff changeset
    17
d152890dd17e new theory
nipkow
parents:
diff changeset
    18
lemma itrev: "itrev xs ys = rev xs @ ys"
d152890dd17e new theory
nipkow
parents:
diff changeset
    19
by(induction xs arbitrary: ys) auto
d152890dd17e new theory
nipkow
parents:
diff changeset
    20
d152890dd17e new theory
nipkow
parents:
diff changeset
    21
lemma itrev_Nil: "itrev xs [] = rev xs"
d152890dd17e new theory
nipkow
parents:
diff changeset
    22
by(simp add: itrev)
d152890dd17e new theory
nipkow
parents:
diff changeset
    23
79969
4aeb25ba90f3 more uniform command names
nipkow
parents: 79495
diff changeset
    24
time_fun itrev
72642
d152890dd17e new theory
nipkow
parents:
diff changeset
    25
d152890dd17e new theory
nipkow
parents:
diff changeset
    26
lemma T_itrev: "T_itrev xs ys = length xs + 1"
d152890dd17e new theory
nipkow
parents:
diff changeset
    27
by(induction xs arbitrary: ys) auto
d152890dd17e new theory
nipkow
parents:
diff changeset
    28
d152890dd17e new theory
nipkow
parents:
diff changeset
    29
end