src/HOL/Sexp.ML
changeset 1264 3eb91524b938
parent 972 e61b058d58d2
child 1465 5d7a7e439cec
equal deleted inserted replaced
1263:290c4dfc34ba 1264:3eb91524b938
    85 
    85 
    86 val pred_sexp_trans1 = pred_sexp_t1 RSN (2, trans_trancl RS transD)
    86 val pred_sexp_trans1 = pred_sexp_t1 RSN (2, trans_trancl RS transD)
    87 and pred_sexp_trans2 = pred_sexp_t2 RSN (2, trans_trancl RS transD);
    87 and pred_sexp_trans2 = pred_sexp_t2 RSN (2, trans_trancl RS transD);
    88 
    88 
    89 (*Proves goals of the form (M,N):pred_sexp^+ provided M,N:sexp*)
    89 (*Proves goals of the form (M,N):pred_sexp^+ provided M,N:sexp*)
    90 val pred_sexp_simps =
    90 Addsimps (sexp.intrs @ [pred_sexp_t1, pred_sexp_t2,
    91             sexp.intrs @
    91 	                pred_sexp_trans1, pred_sexp_trans2, cut_apply]);
    92 	    [pred_sexp_t1, pred_sexp_t2,
       
    93 	     pred_sexp_trans1, pred_sexp_trans2, cut_apply];
       
    94 val pred_sexp_ss = HOL_ss addsimps pred_sexp_simps;
       
    95 
    92 
    96 val major::prems = goalw Sexp.thy [pred_sexp_def]
    93 val major::prems = goalw Sexp.thy [pred_sexp_def]
    97     "[| p : pred_sexp;  \
    94     "[| p : pred_sexp;  \
    98 \       !!M N. [| p = (M, M$N);  M: sexp;  N: sexp |] ==> R; \
    95 \       !!M N. [| p = (M, M$N);  M: sexp;  N: sexp |] ==> R; \
    99 \       !!M N. [| p = (N, M$N);  M: sexp;  N: sexp |] ==> R  \
    96 \       !!M N. [| p = (N, M$N);  M: sexp;  N: sexp |] ==> R  \
   128 qed "sexp_rec_Numb";
   125 qed "sexp_rec_Numb";
   129 
   126 
   130 goal Sexp.thy "!!M. [| M: sexp;  N: sexp |] ==> \
   127 goal Sexp.thy "!!M. [| M: sexp;  N: sexp |] ==> \
   131 \    sexp_rec (M$N) c d h = h M N (sexp_rec M c d h) (sexp_rec N c d h)";
   128 \    sexp_rec (M$N) c d h = h M N (sexp_rec M c d h) (sexp_rec N c d h)";
   132 by (rtac (sexp_rec_unfold RS trans) 1);
   129 by (rtac (sexp_rec_unfold RS trans) 1);
   133 by (asm_simp_tac(HOL_ss addsimps
   130 by (asm_simp_tac (!simpset addsimps [sexp_case_Scons,pred_sexpI1,pred_sexpI2])
   134                [sexp_case_Scons,pred_sexpI1,pred_sexpI2,cut_apply])1);
   131     1);
   135 qed "sexp_rec_Scons";
   132 qed "sexp_rec_Scons";