(* Title: ZF/simpdata.ML Author: Lawrence C Paulson, Cambridge University Computer Laboratory Copyright 1991 University of Cambridge Rewriting for ZF set theory: specialized extraction of rewrites from theorems. *) (*** New version of mk_rew_rules ***) (*Should False yield False<->True, or should it solve goals some other way?*) (*Analyse a theorem to atomic rewrite rules*) fun atomize (conn_pairs, mem_pairs) th = let fun tryrules pairs t = case head_of t of Const(a,_) => (case AList.lookup (op =) pairs a of SOME rls => maps (atomize (conn_pairs, mem_pairs)) ([th] RL rls) | NONE => [th]) | _ => [th] in case Thm.concl_of th of Const(\<^const_name>\Trueprop\,_) $ P => (case P of Const(\<^const_name>\mem\,_) $ a $ b => tryrules mem_pairs b | Const(\<^const_name>\True\,_) => [] | Const(\<^const_name>\False\,_) => [] | A => tryrules conn_pairs A) | _ => [th] end; (*Analyse a rigid formula*) val ZF_conn_pairs = [(\<^const_name>\Ball\, [@{thm bspec}]), (\<^const_name>\All\, [@{thm spec}]), (\<^const_name>\imp\, [@{thm mp}]), (\<^const_name>\conj\, [@{thm conjunct1}, @{thm conjunct2}])]; (*Analyse a:b, where b is rigid*) val ZF_mem_pairs = [(\<^const_name>\Collect\, [@{thm CollectD1}, @{thm CollectD2}]), (\<^const_name>\Diff\, [@{thm DiffD1}, @{thm DiffD2}]), (\<^const_name>\Int\, [@{thm IntD1}, @{thm IntD2}])]; val ZF_atomize = atomize (ZF_conn_pairs, ZF_mem_pairs);