| 105 |      1 | > goal Nat.thy "(k+m)+n = k+(m+n)";
 | 
|  |      2 | Level 0
 | 
|  |      3 | k + m + n = k + (m + n)
 | 
|  |      4 |  1. k + m + n = k + (m + n)
 | 
|  |      5 | val it = [] : thm list
 | 
|  |      6 | > by (resolve_tac [induct] 1);
 | 
|  |      7 | Level 1
 | 
|  |      8 | k + m + n = k + (m + n)
 | 
|  |      9 |  1. k + m + n = 0
 | 
|  |     10 |  2. !!x. k + m + n = x ==> k + m + n = Suc(x)
 | 
|  |     11 | val it = () : unit
 | 
|  |     12 | > back();
 | 
|  |     13 | Level 1
 | 
|  |     14 | k + m + n = k + (m + n)
 | 
|  |     15 |  1. k + m + n = k + 0
 | 
|  |     16 |  2. !!x. k + m + n = k + x ==> k + m + n = k + Suc(x)
 | 
|  |     17 | val it = () : unit
 | 
|  |     18 | > back();
 | 
|  |     19 | Level 1
 | 
|  |     20 | k + m + n = k + (m + n)
 | 
|  |     21 |  1. k + m + 0 = k + (m + 0)
 | 
|  |     22 |  2. !!x. k + m + x = k + (m + x) ==> k + m + Suc(x) = k + (m + Suc(x))
 | 
|  |     23 | val it = () : unit
 | 
|  |     24 | > back();
 | 
|  |     25 | Level 1
 | 
|  |     26 | k + m + n = k + (m + n)
 | 
|  |     27 |  1. k + m + n = k + (m + 0)
 | 
|  |     28 |  2. !!x. k + m + n = k + (m + x) ==> k + m + n = k + (m + Suc(x))
 | 
|  |     29 | val it = () : unit
 | 
|  |     30 | 
 | 
|  |     31 | > val nat_congs = prths (mk_congs Nat.thy ["Suc", "op +"]);
 | 
|  |     32 | ?Xa = ?Ya ==> Suc(?Xa) = Suc(?Ya)
 | 
|  |     33 | 
 | 
|  |     34 | [| ?Xa = ?Ya; ?Xb = ?Yb |] ==> ?Xa + ?Xb = ?Ya + ?Yb
 | 
|  |     35 | 
 | 
|  |     36 | ?Xa = ?Ya ==> Suc(?Xa) = Suc(?Ya)
 | 
|  |     37 | [| ?Xa = ?Ya; ?Xb = ?Yb |] ==> ?Xa + ?Xb = ?Ya + ?Yb
 | 
|  |     38 | val nat_congs = [, ] : thm list
 | 
|  |     39 | > val add_ss = FOL_ss  addcongs nat_congs
 | 
|  |     40 | #                    addrews  [add_0, add_Suc];
 | 
|  |     41 | val add_ss = ? : simpset
 | 
|  |     42 | > goal Nat.thy "(k+m)+n = k+(m+n)";
 | 
|  |     43 | Level 0
 | 
|  |     44 | k + m + n = k + (m + n)
 | 
|  |     45 |  1. k + m + n = k + (m + n)
 | 
|  |     46 | val it = [] : thm list
 | 
|  |     47 | > by (res_inst_tac [("n","k")] induct 1);
 | 
|  |     48 | Level 1
 | 
|  |     49 | k + m + n = k + (m + n)
 | 
|  |     50 |  1. 0 + m + n = 0 + (m + n)
 | 
|  |     51 |  2. !!x. x + m + n = x + (m + n) ==> Suc(x) + m + n = Suc(x) + (m + n)
 | 
|  |     52 | val it = () : unit
 | 
|  |     53 | > by (SIMP_TAC add_ss 1);
 | 
|  |     54 | Level 2
 | 
|  |     55 | k + m + n = k + (m + n)
 | 
|  |     56 |  1. !!x. x + m + n = x + (m + n) ==> Suc(x) + m + n = Suc(x) + (m + n)
 | 
|  |     57 | val it = () : unit
 | 
|  |     58 | > by (ASM_SIMP_TAC add_ss 1);
 | 
|  |     59 | Level 3
 | 
|  |     60 | k + m + n = k + (m + n)
 | 
|  |     61 | No subgoals!
 | 
|  |     62 | val it = () : unit
 | 
|  |     63 | > val add_assoc = result();
 | 
|  |     64 | ?k + ?m + ?n = ?k + (?m + ?n)
 | 
|  |     65 | val add_assoc =  : thm
 |