skolem declarations for built-in theorems
authorpaulson
Tue, 08 Aug 2006 18:40:56 +0200
changeset 20362 bbff23c3e2ca
parent 20361 1aaf9ebe248d
child 20363 f34c5dbe74d5
skolem declarations for built-in theorems
src/HOL/Library/FuncSet.thy
src/HOL/Main.thy
src/HOL/Tools/res_axioms.ML
--- a/src/HOL/Library/FuncSet.thy	Tue Aug 08 18:40:20 2006 +0200
+++ b/src/HOL/Library/FuncSet.thy	Tue Aug 08 18:40:56 2006 +0200
@@ -219,4 +219,16 @@
         g \<in> B\<rightarrow>A; inj_on g B; finite A; finite B|] ==> card(A) = card(B)"
   by (blast intro: card_inj order_antisym)
 
+
+(*The following declarations generate polymorphic Skolem functions for 
+  these theorems. Eventually they should become redundant, once this 
+  is done automatically.*)
+
+declare FuncSet.Pi_I [skolem]
+declare FuncSet.Pi_mono [skolem]
+declare FuncSet.extensionalityI [skolem]
+declare FuncSet.funcsetI [skolem]
+declare FuncSet.restrictI [skolem]
+declare FuncSet.restrict_in_funcset [skolem]
+
 end
--- a/src/HOL/Main.thy	Tue Aug 08 18:40:20 2006 +0200
+++ b/src/HOL/Main.thy	Tue Aug 08 18:40:56 2006 +0200
@@ -19,4 +19,88 @@
 
 setup ResAxioms.setup
 
+
+(*The following declarations generate polymorphic Skolem functions for 
+  these theorems. NOTE: We need an automatic mechanism to ensure that this
+  happens for all theorems stored in descendant theories.*)
+
+(*HOL*)
+declare ext [skolem]
+
+(*Finite_Set*)
+declare setprod_nonneg [skolem]
+declare setprod_pos [skolem]
+declare setsum_bounded [skolem]
+declare setsum_mono [skolem]
+declare setsum_nonneg [skolem]
+declare setsum_nonpos [skolem]
+declare setsum_0' [skolem]
+declare setprod_1' [skolem]
+
+declare Fun.image_INT [skolem]
+
+(*List. Only none look useful.*)
+declare Cons_eq_append_conv [skolem]
+declare Cons_eq_map_D [skolem]
+declare Cons_eq_map_conv [skolem]
+declare append_eq_Cons_conv [skolem]
+declare map_eq_Cons_D [skolem]
+declare map_eq_Cons_conv [skolem]
+
+declare Orderings.max_leastL [skolem]
+declare Orderings.max_leastR [skolem]
+
+declare Product_Type.Sigma_mono [skolem]
+
+(*Relation*)
+declare Domain_iff [skolem]
+declare Image_iff [skolem]
+declare Range_iff [skolem]
+declare antisym_def [skolem]
+declare reflI [skolem]
+declare rel_compEpair [skolem]
+declare refl_def [skolem]
+declare sym_def [skolem]
+declare trans_def [skolem]
+declare single_valued_def [skolem]  
+
+(*Relation_Power*)
+declare rel_pow_E2 [skolem]
+declare rel_pow_E [skolem]
+declare rel_pow_Suc_D2 [skolem]
+declare rel_pow_Suc_D2' [skolem]
+declare rel_pow_Suc_E [skolem]
+
+(*Set*)
+declare Collect_mono [skolem]
+declare INT_anti_mono [skolem]
+declare INT_greatest [skolem]
+declare INT_subset_iff [skolem]
+declare Int_Collect_mono [skolem]
+declare Inter_greatest[skolem]
+declare UN_least [skolem]
+declare UN_mono [skolem]
+declare UN_subset_iff [skolem]
+declare Union_least [skolem]
+declare Union_disjoint [skolem]
+declare disjoint_iff_not_equal [skolem]
+declare image_subsetI [skolem]
+declare image_subset_iff [skolem]
+declare subset_def [skolem]
+declare subset_iff [skolem]
+
+(*Transitive_Closure*)
+declare converse_rtranclE [skolem]
+declare irrefl_trancl_rD [skolem]
+declare rtranclE [skolem]
+declare tranclD [skolem]
+declare tranclE [skolem]
+
+(*Wellfounded_Recursion*)
+declare acyclicI [skolem]
+declare acyclic_def [skolem]
+declare wfI [skolem]
+declare wf_def [skolem]
+declare wf_eq_minimal [skolem]
+
 end
--- a/src/HOL/Tools/res_axioms.ML	Tue Aug 08 18:40:20 2006 +0200
+++ b/src/HOL/Tools/res_axioms.ML	Tue Aug 08 18:40:56 2006 +0200
@@ -347,19 +347,12 @@
 
 (**** Convert all theorems of a claset/simpset into clauses (ResClause.clause, or ResHolClause.clause) ****)
 
-(*These should include any plausibly-useful theorems, especially if they need
-  Skolem functions. FIXME: this list is VERY INCOMPLETE*)
-val default_initial_thms = map pairname
-  [refl_def, antisym_def, sym_def, trans_def, single_valued_def,
-   subset_refl, Union_least, Inter_greatest];
-
 (*Setup function: takes a theory and installs ALL simprules and claset rules 
   into the clause cache*)
 fun clause_cache_setup thy =
   let val simps = simpset_rules_of_thy thy
       and clas  = claset_rules_of_thy thy
-      and thy0  = List.foldl skolem_cache thy default_initial_thms
-      val thy1  = List.foldl skolem_cache thy0 clas
+      val thy1  = List.foldl skolem_cache thy clas
   in List.foldl skolem_cache thy1 simps end;
 (*Could be duplicate theorem names, due to multiple attributes*)