src/HOLCF/IOA/meta_theory/Seq.ML
changeset 5976 44290b71a85f
parent 5068 fb28eaa07e01
child 6161 bc2a76ce1ea3
equal deleted inserted replaced
5975:cd19eaa90f45 5976:44290b71a85f
   374 
   374 
   375 Goal "sforall P (sfilter`P`x)";
   375 Goal "sforall P (sfilter`P`x)";
   376 by (simp_tac (simpset() addsimps [sforall_def]) 1);
   376 by (simp_tac (simpset() addsimps [sforall_def]) 1);
   377 by (res_inst_tac[("x","x")] seq.ind 1);
   377 by (res_inst_tac[("x","x")] seq.ind 1);
   378 (* adm *)
   378 (* adm *)
   379 (* FIX should be refined in _one_ tactic *)
       
   380 by (simp_tac (simpset() addsimps [adm_trick_1]) 1);
   379 by (simp_tac (simpset() addsimps [adm_trick_1]) 1);
   381 (* base cases *)
   380 (* base cases *)
   382 by (Simp_tac 1);
   381 by (Simp_tac 1);
   383 by (Simp_tac 1);
   382 by (Simp_tac 1);
   384 (* main case *)
   383 (* main case *)
   458  by (assume_tac 1);
   457  by (assume_tac 1);
   459 by (Asm_full_simp_tac 1);
   458 by (Asm_full_simp_tac 1);
   460 qed"seq_finite_ind";
   459 qed"seq_finite_ind";
   461 
   460 
   462 
   461 
   463 
       
   464 
       
   465 (*
       
   466 (* -----------------------------------------------------------------
       
   467    Fr"uhere Herleitung des endlichen Induktionsprinzips 
       
   468    aus dem seq_finite Induktionsprinzip.
       
   469    Problem bei admissibility von Finite-->seq_finite!
       
   470    Deshalb Finite jetzt induktiv und nicht mehr rekursiv definiert! 
       
   471    ------------------------------------------------------------------ *)
       
   472 
       
   473 Goal "seq_finite nil";
       
   474 by (simp_tac (simpset() addsimps [seq.sfinite_def]) 1);
       
   475 by (res_inst_tac [("x","Suc 0")] exI 1);
       
   476 by (simp_tac (simpset() addsimps seq.rews) 1);
       
   477 qed"seq_finite_nil";
       
   478 
       
   479 Goal "seq_finite UU";
       
   480 by (simp_tac (simpset() addsimps [seq.sfinite_def]) 1);
       
   481 qed"seq_finite_UU";
       
   482 
       
   483 Addsimps[seq_finite_nil,seq_finite_UU];
       
   484 
       
   485 goal HOL.thy "(B-->A) --> (A--> (B-->C))--> (B--> C)";
       
   486 by (fast_tac HOL_cs 1);
       
   487 qed"logic_lemma";
       
   488 
       
   489 
       
   490 Goal "!!P.[| P nil; \
       
   491 \                !!a t. [|a~=UU;Finite t; P t|] ==> P (a##t)|]\
       
   492 \            ==> Finite x --> P x";
       
   493 
       
   494 by (rtac (logic_lemma RS mp RS mp) 1);
       
   495 by (rtac trf_impl_tf 1);
       
   496 by (rtac seq_finite_ind 1);
       
   497 by (simp_tac (simpset() addsimps [Finite_def]) 1);
       
   498 by (simp_tac (simpset() addsimps [Finite_def]) 1);
       
   499 by (asm_full_simp_tac (simpset() addsimps [Finite_def]) 1);
       
   500 qed"Finite_ind";
       
   501 
       
   502 
       
   503 Goal "Finite tr --> seq_finite tr";
       
   504 by (rtac seq.ind 1);
       
   505 (* adm *)
       
   506 (* hier grosses Problem !!!!!!!!!!!!!!! *)
       
   507 
       
   508 by (simp_tac (simpset() addsimps [Finite_def]) 2);
       
   509 by (simp_tac (simpset() addsimps [Finite_def]) 2);
       
   510 
       
   511 (* main case *)
       
   512 by (asm_full_simp_tac (simpset() addsimps [Finite_def,seq.sfinite_def]) 2);
       
   513 by (rtac impI 2);
       
   514 by (rotate_tac 2 2);
       
   515 by (Asm_full_simp_tac 2);
       
   516 by (etac exE 2);
       
   517 by (res_inst_tac [("x","Suc n")] exI 2);
       
   518 by (asm_full_simp_tac (simpset() addsimps seq.rews) 2);
       
   519 qed"tf_is_trf";
       
   520 
       
   521 *)
       
   522