src/HOL/Induct/Acc.ML
changeset 5163 c0e18afae433
parent 5143 b94cd208f073
child 5168 adafef6eb295
equal deleted inserted replaced
5162:53e505c6019c 5163:c0e18afae433
    21 Goal "[| b: acc(r);  (a,b): r |] ==> a: acc(r)";
    21 Goal "[| b: acc(r);  (a,b): r |] ==> a: acc(r)";
    22 by (etac acc.elim 1);
    22 by (etac acc.elim 1);
    23 by (rewtac pred_def);
    23 by (rewtac pred_def);
    24 by (Fast_tac 1);
    24 by (Fast_tac 1);
    25 qed "acc_downward";
    25 qed "acc_downward";
       
    26 
       
    27 Goal "(b,a) : r^* ==> a : acc r --> b : acc r";
       
    28 be rtrancl_induct 1;
       
    29 by(Blast_tac 1);
       
    30  by(blast_tac (claset() addDs [acc_downward]) 1);
       
    31 val lemma = result();
       
    32 Goal "[| a : acc r; (b,a) : r^* |] ==> b : acc r";
       
    33 by(blast_tac (claset() addDs [lemma]) 1);
       
    34 qed "acc_downwards";
    26 
    35 
    27 val [major,indhyp] = goal Acc.thy
    36 val [major,indhyp] = goal Acc.thy
    28     "[| a : acc(r);                                             \
    37     "[| a : acc(r);                                             \
    29 \       !!x. [| x: acc(r);  ALL y. (y,x):r --> P(y) |] ==> P(x) \
    38 \       !!x. [| x: acc(r);  ALL y. (y,x):r --> P(y) |] ==> P(x) \
    30 \    |] ==> P(a)";
    39 \    |] ==> P(a)";