src/HOLCF/IOA/meta_theory/Sequence.ML
changeset 19550 ae77a20f6995
parent 18559 05b3f033c72d
child 19551 4103954f3668
equal deleted inserted replaced
19549:a8ed346f8635 19550:ae77a20f6995
   279 by (REPEAT(rtac Def_not_UU 1));
   279 by (REPEAT(rtac Def_not_UU 1));
   280 qed"Cons_inject_eq";
   280 qed"Cons_inject_eq";
   281 
   281 
   282 Goal "(a>>s<<b>>t) = (a = b & s<<t)";
   282 Goal "(a>>s<<b>>t) = (a = b & s<<t)";
   283 by (simp_tac (simpset() addsimps [Consq_def2]) 1);
   283 by (simp_tac (simpset() addsimps [Consq_def2]) 1);
   284 by (stac (Def_inject_less_eq RS sym) 1);
   284 by (simp_tac (simpset() addsimps [seq.inverts]) 1);
       
   285 (*by (stac (Def_inject_less_eq RS sym) 1);
   285 back();
   286 back();
   286 by (rtac iffI 1);
   287 by (rtac iffI 1);
   287 (* 1 *)
       
   288 by (etac (hd seq.inverts) 1);
   288 by (etac (hd seq.inverts) 1);
   289 by (REPEAT(rtac Def_not_UU 1));
   289 by (REPEAT(rtac Def_not_UU 1));
   290 (* 2 *)
       
   291 by (Asm_full_simp_tac 1);
   290 by (Asm_full_simp_tac 1);
   292 by (etac conjE 1);
   291 by (etac conjE 1);
   293 by (etac monofun_cfun_arg 1);
   292 by (etac monofun_cfun_arg 1);*)
   294 qed"Cons_inject_less_eq";
   293 qed"Cons_inject_less_eq";
   295 
   294 
   296 Goal "seq_take (Suc n)$(a>>x) = a>> (seq_take n$x)";
   295 Goal "seq_take (Suc n)$(a>>x) = a>> (seq_take n$x)";
   297 by (simp_tac (simpset() addsimps [Consq_def]) 1);
   296 by (simp_tac (simpset() addsimps [Consq_def]) 1);
   298 qed"seq_take_Cons";
   297 qed"seq_take_Cons";
   842 
   841 
   843 section "take_lemma";
   842 section "take_lemma";
   844 
   843 
   845 Goal "(!n. seq_take n$x = seq_take n$x') = (x = x')";
   844 Goal "(!n. seq_take n$x = seq_take n$x') = (x = x')";
   846 by (rtac iffI 1);
   845 by (rtac iffI 1);
   847 by (resolve_tac seq.take_lemmas 1);
   846 by (resolve_tac [seq.take_lemmas] 1);
   848 by Auto_tac;
   847 by Auto_tac;
   849 qed"seq_take_lemma";
   848 qed"seq_take_lemma";
   850 
   849 
   851 Goal
   850 Goal
   852 "  ! n. ((! k. k < n --> seq_take k$y1 = seq_take k$y2) \
   851 "  ! n. ((! k. k < n --> seq_take k$y1 = seq_take k$y2) \
   930 \                         ==> ! n. seq_take n$(f (s1 @@ y>>s2)) \
   929 \                         ==> ! n. seq_take n$(f (s1 @@ y>>s2)) \
   931 \                                = seq_take n$(g (s1 @@ y>>s2)) |] \
   930 \                                = seq_take n$(g (s1 @@ y>>s2)) |] \
   932 \              ==> A x --> (f x)=(g x)";
   931 \              ==> A x --> (f x)=(g x)";
   933 by (case_tac "Forall Q x" 1);
   932 by (case_tac "Forall Q x" 1);
   934 by (auto_tac (claset() addSDs [divide_Seq3],simpset()));
   933 by (auto_tac (claset() addSDs [divide_Seq3],simpset()));
   935 by (resolve_tac seq.take_lemmas 1);
   934 by (resolve_tac [seq.take_lemmas] 1);
   936 by Auto_tac;
   935 by Auto_tac;
   937 qed"take_lemma_principle2";
   936 qed"take_lemma_principle2";
   938 
   937 
   939 
   938 
   940 (* Note: in the following proofs the ordering of proof steps is very
   939 (* Note: in the following proofs the ordering of proof steps is very
   951 \                         Forall Q s1; Finite s1; ~ Q y; A (s1 @@ y>>s2) |] \
   950 \                         Forall Q s1; Finite s1; ~ Q y; A (s1 @@ y>>s2) |] \
   952 \                         ==>   seq_take (Suc n)$(f (s1 @@ y>>s2)) \
   951 \                         ==>   seq_take (Suc n)$(f (s1 @@ y>>s2)) \
   953 \                             = seq_take (Suc n)$(g (s1 @@ y>>s2)) |] \
   952 \                             = seq_take (Suc n)$(g (s1 @@ y>>s2)) |] \
   954 \              ==> A x --> (f x)=(g x)";
   953 \              ==> A x --> (f x)=(g x)";
   955 by (rtac impI 1);
   954 by (rtac impI 1);
   956 by (resolve_tac seq.take_lemmas 1);
   955 by (resolve_tac [seq.take_lemmas] 1);
   957 by (rtac mp 1);
   956 by (rtac mp 1);
   958 by (assume_tac 2);
   957 by (assume_tac 2);
   959 by (res_inst_tac [("x","x")] spec 1);
   958 by (res_inst_tac [("x","x")] spec 1);
   960 by (rtac nat_induct 1);
   959 by (rtac nat_induct 1);
   961 by (Simp_tac 1);
   960 by (Simp_tac 1);
   973 \                         Forall Q s1; Finite s1; ~ Q y; A (s1 @@ y>>s2) |] \
   972 \                         Forall Q s1; Finite s1; ~ Q y; A (s1 @@ y>>s2) |] \
   974 \                         ==>   seq_take n$(f (s1 @@ y>>s2)) \
   973 \                         ==>   seq_take n$(f (s1 @@ y>>s2)) \
   975 \                             = seq_take n$(g (s1 @@ y>>s2)) |] \
   974 \                             = seq_take n$(g (s1 @@ y>>s2)) |] \
   976 \              ==> A x --> (f x)=(g x)";
   975 \              ==> A x --> (f x)=(g x)";
   977 by (rtac impI 1);
   976 by (rtac impI 1);
   978 by (resolve_tac seq.take_lemmas 1);
   977 by (resolve_tac [seq.take_lemmas] 1);
   979 by (rtac mp 1);
   978 by (rtac mp 1);
   980 by (assume_tac 2);
   979 by (assume_tac 2);
   981 by (res_inst_tac [("x","x")] spec 1);
   980 by (res_inst_tac [("x","x")] spec 1);
   982 by (rtac nat_less_induct 1);
   981 by (rtac nat_less_induct 1);
   983 by (rtac allI 1);
   982 by (rtac allI 1);
   996 \                    A (y>>s) |]   \
   995 \                    A (y>>s) |]   \
   997 \                    ==>   seq_take (Suc n)$(f (y>>s)) \
   996 \                    ==>   seq_take (Suc n)$(f (y>>s)) \
   998 \                        = seq_take (Suc n)$(g (y>>s)) |] \
   997 \                        = seq_take (Suc n)$(g (y>>s)) |] \
   999 \              ==> A x --> (f x)=(g x)";
   998 \              ==> A x --> (f x)=(g x)";
  1000 by (rtac impI 1);
   999 by (rtac impI 1);
  1001 by (resolve_tac seq.take_lemmas 1);
  1000 by (resolve_tac [seq.take_lemmas] 1);
  1002 by (rtac mp 1);
  1001 by (rtac mp 1);
  1003 by (assume_tac 2);
  1002 by (assume_tac 2);
  1004 by (res_inst_tac [("x","x")] spec 1);
  1003 by (res_inst_tac [("x","x")] spec 1);
  1005 by (rtac nat_induct 1);
  1004 by (rtac nat_induct 1);
  1006 by (Simp_tac 1);
  1005 by (Simp_tac 1);