src/HOL/Hoare/Hoare.ML
changeset 10918 9679326489cd
parent 10642 5be46cd1f94a
child 11605 8e45a16295ed
equal deleted inserted replaced
10917:1044648b3f84 10918:9679326489cd
   145 (**Simp_tacs**)
   145 (**Simp_tacs**)
   146 
   146 
   147 val before_set2pred_simp_tac =
   147 val before_set2pred_simp_tac =
   148   (simp_tac (HOL_basic_ss addsimps [Collect_conj_eq RS sym,Compl_Collect]));
   148   (simp_tac (HOL_basic_ss addsimps [Collect_conj_eq RS sym,Compl_Collect]));
   149 
   149 
   150 val split_simp_tac = (simp_tac (HOL_basic_ss addsimps [split]));
   150 val split_simp_tac = (simp_tac (HOL_basic_ss addsimps [split_conv]));
   151 
   151 
   152 (*****************************************************************************)
   152 (*****************************************************************************)
   153 (** set2pred transforms sets inclusion into predicates implication,         **)
   153 (** set2pred transforms sets inclusion into predicates implication,         **)
   154 (** maintaining the original variable names.                                **)
   154 (** maintaining the original variable names.                                **)
   155 (** Ex. "{x. x=0} <= {x. x <= 1}" -set2pred-> "x=0 --> x <= 1"              **)
   155 (** Ex. "{x. x=0} <= {x. x <= 1}" -set2pred-> "x=0 --> x <= 1"              **)
   169           (EVERY [rtac subsetI i, 
   169           (EVERY [rtac subsetI i, 
   170                   rtac CollectI i,
   170                   rtac CollectI i,
   171                   dtac CollectD i,
   171                   dtac CollectD i,
   172                   (TRY(split_all_tac i)) THEN_MAYBE
   172                   (TRY(split_all_tac i)) THEN_MAYBE
   173                   ((rename_tac var_string i) THEN
   173                   ((rename_tac var_string i) THEN
   174                    (full_simp_tac (HOL_basic_ss addsimps [split]) i)) ])) thm
   174                    (full_simp_tac (HOL_basic_ss addsimps [split_conv]) i)) ])) thm
   175       end;
   175       end;
   176 
   176 
   177 (*****************************************************************************)
   177 (*****************************************************************************)
   178 (** BasicSimpTac is called to simplify all verification conditions. It does **)
   178 (** BasicSimpTac is called to simplify all verification conditions. It does **)
   179 (** a light simplification by applying "mem_Collect_eq", then it calls      **)
   179 (** a light simplification by applying "mem_Collect_eq", then it calls      **)
   184 
   184 
   185 fun MaxSimpTac tac = FIRST'[rtac subset_refl, set2pred THEN_MAYBE' tac];
   185 fun MaxSimpTac tac = FIRST'[rtac subset_refl, set2pred THEN_MAYBE' tac];
   186 
   186 
   187 fun BasicSimpTac tac =
   187 fun BasicSimpTac tac =
   188   simp_tac
   188   simp_tac
   189     (HOL_basic_ss addsimps [mem_Collect_eq,split] addsimprocs [record_simproc])
   189     (HOL_basic_ss addsimps [mem_Collect_eq,split_conv] addsimprocs [record_simproc])
   190   THEN_MAYBE' MaxSimpTac tac;
   190   THEN_MAYBE' MaxSimpTac tac;
   191 
   191 
   192 (** HoareRuleTac **)
   192 (** HoareRuleTac **)
   193 
   193 
   194 fun WlpTac Mlem tac i = rtac SeqRule i THEN  HoareRuleTac Mlem tac false (i+1)
   194 fun WlpTac Mlem tac i = rtac SeqRule i THEN  HoareRuleTac Mlem tac false (i+1)