src/HOL/ex/Efficient_Nat_examples.thy
author krauss
Tue, 28 Sep 2010 09:54:07 +0200
changeset 39754 150f831ce4a3
parent 29938 a0e54cf21fd4
child 41413 64cd30d6b0b8
permissions -rw-r--r--
no longer declare .psimps rules as [simp]. This regularly caused confusion (e.g., they show up in simp traces when the regular simp rules are disabled). In the few places where the rules are used, explicitly mentioning them actually clarifies the proof text.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
25963
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
     1
(*  Title:      HOL/ex/Efficient_Nat_examples.thy
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
     2
    Author:     Florian Haftmann, TU Muenchen
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
     3
*)
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
     4
28523
5818d9cfb2e7 tuned whitespace
haftmann
parents: 26469
diff changeset
     5
header {* Simple examples for Efficient\_Nat theory. *}
25963
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
     6
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
     7
theory Efficient_Nat_examples
29938
a0e54cf21fd4 clarified import
haftmann
parents: 28661
diff changeset
     8
imports Complex_Main Efficient_Nat
25963
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
     9
begin
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    10
28661
a287d0e8aa9d slightly tuned
haftmann
parents: 28523
diff changeset
    11
fun to_n :: "nat \<Rightarrow> nat list" where
25963
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    12
  "to_n 0 = []"
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    13
  | "to_n (Suc 0) = []"
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    14
  | "to_n (Suc (Suc 0)) = []"
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    15
  | "to_n (Suc n) = n # to_n n"
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    16
28661
a287d0e8aa9d slightly tuned
haftmann
parents: 28523
diff changeset
    17
definition naive_prime :: "nat \<Rightarrow> bool" where
25963
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    18
  "naive_prime n \<longleftrightarrow> n \<ge> 2 \<and> filter (\<lambda>m. n mod m = 0) (to_n n) = []"
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    19
28661
a287d0e8aa9d slightly tuned
haftmann
parents: 28523
diff changeset
    20
primrec fac :: "nat \<Rightarrow> nat" where
25963
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    21
  "fac 0 = 1"
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    22
  | "fac (Suc n) = Suc n * fac n"
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    23
28661
a287d0e8aa9d slightly tuned
haftmann
parents: 28523
diff changeset
    24
primrec rat_of_nat :: "nat \<Rightarrow> rat" where
25963
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    25
  "rat_of_nat 0 = 0"
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    26
  | "rat_of_nat (Suc n) = rat_of_nat n + 1"
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    27
28661
a287d0e8aa9d slightly tuned
haftmann
parents: 28523
diff changeset
    28
primrec harmonic :: "nat \<Rightarrow> rat" where
25963
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    29
  "harmonic 0 = 0"
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    30
  | "harmonic (Suc n) = 1 / rat_of_nat (Suc n) + harmonic n"
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    31
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    32
lemma "harmonic 200 \<ge> 5"
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    33
  by eval
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    34
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    35
lemma "harmonic 200 \<ge> 5"
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    36
  by evaluation
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    37
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    38
lemma "harmonic 20 \<ge> 3"
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    39
  by normalization
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    40
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    41
lemma "naive_prime 89"
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    42
  by eval
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    43
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    44
lemma "naive_prime 89"
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    45
  by evaluation
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    46
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    47
lemma "naive_prime 89"
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    48
  by normalization
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    49
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    50
lemma "\<not> naive_prime 87"
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    51
  by eval
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    52
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    53
lemma "\<not> naive_prime 87"
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    54
  by evaluation
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    55
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    56
lemma "\<not> naive_prime 87"
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    57
  by normalization
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    58
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    59
lemma "fac 10 > 3000000"
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    60
  by eval
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    61
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    62
lemma "fac 10 > 3000000"
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    63
  by evaluation
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    64
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    65
lemma "fac 10 > 3000000"
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    66
  by normalization
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    67
07e08dad8a77 distinguished examples for Efficient_Nat.thy
haftmann
parents:
diff changeset
    68
end