src/HOL/Lifting_Set.thy
changeset 68521 1bad08165162
parent 67399 eab6ce8368fa
child 69275 9bbd5497befd
--- a/src/HOL/Lifting_Set.thy	Tue Jun 26 23:39:28 2018 +0200
+++ b/src/HOL/Lifting_Set.thy	Wed Jun 27 10:18:03 2018 +0200
@@ -215,6 +215,12 @@
   shows "(rel_set A ===> rel_set A ===> (=)) (\<subseteq>) (\<subseteq>)"
   unfolding subset_eq [abs_def] by transfer_prover
 
+lemma strict_subset_transfer [transfer_rule]:
+  includes lifting_syntax
+  assumes [transfer_rule]: "bi_unique A"
+  shows "(rel_set A ===> rel_set A ===> (=)) (\<subset>) (\<subset>)"
+  unfolding subset_not_subset_eq by transfer_prover
+
 declare right_total_UNIV_transfer[transfer_rule]
 
 lemma UNIV_transfer [transfer_rule]:
@@ -259,6 +265,20 @@
   by (rule rel_funI, erule (1) bi_unique_rel_set_lemma)
      (simp add: card_image)
 
+lemma vimage_right_total_transfer[transfer_rule]:
+  includes lifting_syntax
+  assumes [transfer_rule]: "bi_unique B" "right_total A"
+  shows "((A ===> B) ===> rel_set B ===> rel_set A) (\<lambda>f X. f -` X \<inter> Collect (Domainp A)) vimage"
+proof -
+  let ?vimage = "(\<lambda>f B. {x. f x \<in> B \<and> Domainp A x})"
+  have "((A ===> B) ===> rel_set B ===> rel_set A) ?vimage vimage"
+    unfolding vimage_def
+    by transfer_prover
+  also have "?vimage = (\<lambda>f X. f -` X \<inter> Collect (Domainp A))"
+    by auto
+  finally show ?thesis .
+qed
+
 lemma vimage_parametric [transfer_rule]:
   assumes [transfer_rule]: "bi_total A" "bi_unique B"
   shows "((A ===> B) ===> rel_set B ===> rel_set A) vimage vimage"
@@ -270,6 +290,12 @@
   by (intro rel_funI rel_setI)
     (force dest: rel_setD1 bi_uniqueDr[OF assms], force dest: rel_setD2 bi_uniqueDl[OF assms])
 
+lemma inj_on_transfer[transfer_rule]:
+  "((A ===> B) ===> rel_set A ===> (=)) inj_on inj_on"
+  if [transfer_rule]: "bi_unique A" "bi_unique B"
+  unfolding inj_on_def
+  by transfer_prover
+
 end
 
 lemma (in comm_monoid_set) F_parametric [transfer_rule]: