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
lcp@104
     1
> goal Nat.thy "m+0 = m";
lcp@104
     2
Level 0
lcp@104
     3
m + 0 = m
lcp@104
     4
 1. m + 0 = m
lcp@104
     5
> by (res_inst_tac [("n","m")] induct 1);
lcp@104
     6
Level 1
lcp@104
     7
m + 0 = m
lcp@104
     8
 1. 0 + 0 = 0
lcp@104
     9
 2. !!x. x + 0 = x ==> Suc(x) + 0 = Suc(x)
lcp@104
    10
> by (simp_tac add_ss 1);
lcp@104
    11
Level 2
lcp@104
    12
m + 0 = m
lcp@104
    13
 1. !!x. x + 0 = x ==> Suc(x) + 0 = Suc(x)
lcp@104
    14
> by (asm_simp_tac add_ss 1);
lcp@104
    15
Level 3
lcp@104
    16
m + 0 = m
lcp@104
    17
No subgoals!
lcp@104
    18
lcp@104
    19
lcp@104
    20
> goal Nat.thy "m+Suc(n) = Suc(m+n)";
lcp@104
    21
Level 0
lcp@104
    22
m + Suc(n) = Suc(m + n)
lcp@104
    23
 1. m + Suc(n) = Suc(m + n)
lcp@104
    24
val it = [] : thm list   
lcp@104
    25
> by (res_inst_tac [("n","m")] induct 1);
lcp@104
    26
Level 1
lcp@104
    27
m + Suc(n) = Suc(m + n)
lcp@104
    28
 1. 0 + Suc(n) = Suc(0 + n)
lcp@104
    29
 2. !!x. x + Suc(n) = Suc(x + n) ==> Suc(x) + Suc(n) = Suc(Suc(x) + n)
lcp@104
    30
val it = () : unit   
lcp@104
    31
> by (simp_tac add_ss 1);
lcp@104
    32
Level 2
lcp@104
    33
m + Suc(n) = Suc(m + n)
lcp@104
    34
 1. !!x. x + Suc(n) = Suc(x + n) ==> Suc(x) + Suc(n) = Suc(Suc(x) + n)
lcp@104
    35
val it = () : unit   
lcp@104
    36
> trace_simp := true;
lcp@104
    37
val it = () : unit   
lcp@104
    38
> by (asm_simp_tac add_ss 1);
lcp@104
    39
Rewriting:
lcp@104
    40
Suc(x) + Suc(n) == Suc(x + Suc(n))
lcp@104
    41
Rewriting:
lcp@104
    42
x + Suc(n) == Suc(x + n)
lcp@104
    43
Rewriting:
lcp@104
    44
Suc(x) + n == Suc(x + n)
lcp@104
    45
Rewriting:
lcp@104
    46
Suc(Suc(x + n)) = Suc(Suc(x + n)) == True
lcp@104
    47
Level 3
lcp@104
    48
m + Suc(n) = Suc(m + n)
lcp@104
    49
No subgoals!
lcp@104
    50
val it = () : unit   
lcp@104
    51
lcp@104
    52
lcp@104
    53
lcp@104
    54
> val prems = goal Nat.thy "(!!n. f(Suc(n)) = Suc(f(n))) ==> f(i+j) = i+f(j)";
lcp@104
    55
Level 0
lcp@104
    56
f(i + j) = i + f(j)
lcp@104
    57
 1. f(i + j) = i + f(j)
lcp@104
    58
> prths prems;
lcp@104
    59
f(Suc(?n)) = Suc(f(?n))  [!!n. f(Suc(n)) = Suc(f(n))]
lcp@104
    60
lcp@104
    61
> by (res_inst_tac [("n","i")] induct 1);
lcp@104
    62
Level 1
lcp@104
    63
f(i + j) = i + f(j)
lcp@104
    64
 1. f(0 + j) = 0 + f(j)
lcp@104
    65
 2. !!x. f(x + j) = x + f(j) ==> f(Suc(x) + j) = Suc(x) + f(j)
lcp@104
    66
> by (simp_tac f_ss 1);
lcp@104
    67
Level 2
lcp@104
    68
f(i + j) = i + f(j)
lcp@104
    69
 1. !!x. f(x + j) = x + f(j) ==> f(Suc(x) + j) = Suc(x) + f(j)
lcp@104
    70
> by (asm_simp_tac (f_ss addrews prems) 1);
lcp@104
    71
Level 3
lcp@104
    72
f(i + j) = i + f(j)
lcp@104
    73
No subgoals!