doc-src/Ref/simplifier-eg.txt
author lcp
Wed, 10 Nov 1993 05:00:57 +0100
changeset 104 d8205bb279a7
child 359 b5a2e9503a7a
permissions -rw-r--r--
Initial revision
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
     1
> goal Nat.thy "m+0 = m";
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
     2
Level 0
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
     3
m + 0 = m
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
     4
 1. m + 0 = m
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
     5
> by (res_inst_tac [("n","m")] induct 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
     6
Level 1
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
     7
m + 0 = m
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
     8
 1. 0 + 0 = 0
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
     9
 2. !!x. x + 0 = x ==> Suc(x) + 0 = Suc(x)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    10
> by (simp_tac add_ss 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    11
Level 2
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    12
m + 0 = m
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    13
 1. !!x. x + 0 = x ==> Suc(x) + 0 = Suc(x)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    14
> by (asm_simp_tac add_ss 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    15
Level 3
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    16
m + 0 = m
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    17
No subgoals!
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    18
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    19
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    20
> goal Nat.thy "m+Suc(n) = Suc(m+n)";
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    21
Level 0
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    22
m + Suc(n) = Suc(m + n)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    23
 1. m + Suc(n) = Suc(m + n)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    24
val it = [] : thm list   
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    25
> by (res_inst_tac [("n","m")] induct 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    26
Level 1
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    27
m + Suc(n) = Suc(m + n)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    28
 1. 0 + Suc(n) = Suc(0 + n)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    29
 2. !!x. x + Suc(n) = Suc(x + n) ==> Suc(x) + Suc(n) = Suc(Suc(x) + n)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    30
val it = () : unit   
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    31
> by (simp_tac add_ss 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    32
Level 2
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    33
m + Suc(n) = Suc(m + n)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    34
 1. !!x. x + Suc(n) = Suc(x + n) ==> Suc(x) + Suc(n) = Suc(Suc(x) + n)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    35
val it = () : unit   
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    36
> trace_simp := true;
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    37
val it = () : unit   
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    38
> by (asm_simp_tac add_ss 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    39
Rewriting:
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    40
Suc(x) + Suc(n) == Suc(x + Suc(n))
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    41
Rewriting:
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    42
x + Suc(n) == Suc(x + n)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    43
Rewriting:
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    44
Suc(x) + n == Suc(x + n)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    45
Rewriting:
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    46
Suc(Suc(x + n)) = Suc(Suc(x + n)) == True
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    47
Level 3
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    48
m + Suc(n) = Suc(m + n)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    49
No subgoals!
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    50
val it = () : unit   
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    51
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    52
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    53
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    54
> val prems = goal Nat.thy "(!!n. f(Suc(n)) = Suc(f(n))) ==> f(i+j) = i+f(j)";
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    55
Level 0
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    56
f(i + j) = i + f(j)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    57
 1. f(i + j) = i + f(j)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    58
> prths prems;
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    59
f(Suc(?n)) = Suc(f(?n))  [!!n. f(Suc(n)) = Suc(f(n))]
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    60
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    61
> by (res_inst_tac [("n","i")] induct 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    62
Level 1
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    63
f(i + j) = i + f(j)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    64
 1. f(0 + j) = 0 + f(j)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    65
 2. !!x. f(x + j) = x + f(j) ==> f(Suc(x) + j) = Suc(x) + f(j)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    66
> by (simp_tac f_ss 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    67
Level 2
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    68
f(i + j) = i + f(j)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    69
 1. !!x. f(x + j) = x + f(j) ==> f(Suc(x) + j) = Suc(x) + f(j)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    70
> by (asm_simp_tac (f_ss addrews prems) 1);
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    71
Level 3
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    72
f(i + j) = i + f(j)
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    73
No subgoals!