src/HOL/Library/Countable_Set_Type.thy
author Andreas Lochbihler
Wed, 08 Apr 2015 15:02:40 +0200
changeset 59956 e936c2828bec
parent 59954 5ee7e9721eac
child 60059 8a6d947cc756
permissions -rw-r--r--
consistent naming
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
55075
b3d0a02a756d dissolved BNF session
blanchet
parents: 55070
diff changeset
     1
(*  Title:      HOL/Library/Countable_Set_Type.thy
48975
7f79f94a432c added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
blanchet
parents:
diff changeset
     2
    Author:     Andrei Popescu, TU Muenchen
59954
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
     3
    Author:     Andreas Lochbihler, ETH Zurich
48975
7f79f94a432c added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
blanchet
parents:
diff changeset
     4
    Copyright   2012
7f79f94a432c added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
blanchet
parents:
diff changeset
     5
54539
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
     6
Type of (at most) countable sets.
48975
7f79f94a432c added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
blanchet
parents:
diff changeset
     7
*)
7f79f94a432c added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
blanchet
parents:
diff changeset
     8
58881
b9556a055632 modernized header;
wenzelm
parents: 57398
diff changeset
     9
section {* Type of (at Most) Countable Sets *}
48975
7f79f94a432c added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
blanchet
parents:
diff changeset
    10
54539
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
    11
theory Countable_Set_Type
59954
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
    12
imports Countable_Set Cardinal_Notations Conditionally_Complete_Lattices
48975
7f79f94a432c added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
blanchet
parents:
diff changeset
    13
begin
7f79f94a432c added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
blanchet
parents:
diff changeset
    14
55070
235c7661a96b rationalized dependencies
blanchet
parents: 54841
diff changeset
    15
50144
885deccc264e renamed BNF/Countable_Set to Countable_Type and moved its generic stuff to Library/Countable_Set
hoelzl
parents: 49834
diff changeset
    16
subsection{* Cardinal stuff *}
48975
7f79f94a432c added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
blanchet
parents:
diff changeset
    17
50144
885deccc264e renamed BNF/Countable_Set to Countable_Type and moved its generic stuff to Library/Countable_Set
hoelzl
parents: 49834
diff changeset
    18
lemma countable_card_of_nat: "countable A \<longleftrightarrow> |A| \<le>o |UNIV::nat set|"
885deccc264e renamed BNF/Countable_Set to Countable_Type and moved its generic stuff to Library/Countable_Set
hoelzl
parents: 49834
diff changeset
    19
  unfolding countable_def card_of_ordLeq[symmetric] by auto
48975
7f79f94a432c added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
blanchet
parents:
diff changeset
    20
50144
885deccc264e renamed BNF/Countable_Set to Countable_Type and moved its generic stuff to Library/Countable_Set
hoelzl
parents: 49834
diff changeset
    21
lemma countable_card_le_natLeq: "countable A \<longleftrightarrow> |A| \<le>o natLeq"
885deccc264e renamed BNF/Countable_Set to Countable_Type and moved its generic stuff to Library/Countable_Set
hoelzl
parents: 49834
diff changeset
    22
  unfolding countable_card_of_nat using card_of_nat ordLeq_ordIso_trans ordIso_symmetric by blast
48975
7f79f94a432c added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
blanchet
parents:
diff changeset
    23
7f79f94a432c added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
blanchet
parents:
diff changeset
    24
lemma countable_or_card_of:
7f79f94a432c added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
blanchet
parents:
diff changeset
    25
assumes "countable A"
7f79f94a432c added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
blanchet
parents:
diff changeset
    26
shows "(finite A \<and> |A| <o |UNIV::nat set| ) \<or>
7f79f94a432c added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
blanchet
parents:
diff changeset
    27
       (infinite A  \<and> |A| =o |UNIV::nat set| )"
55070
235c7661a96b rationalized dependencies
blanchet
parents: 54841
diff changeset
    28
by (metis assms countable_card_of_nat infinite_iff_card_of_nat ordIso_iff_ordLeq
235c7661a96b rationalized dependencies
blanchet
parents: 54841
diff changeset
    29
      ordLeq_iff_ordLess_or_ordIso)
48975
7f79f94a432c added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
blanchet
parents:
diff changeset
    30
50144
885deccc264e renamed BNF/Countable_Set to Countable_Type and moved its generic stuff to Library/Countable_Set
hoelzl
parents: 49834
diff changeset
    31
lemma countable_cases_card_of[elim]:
885deccc264e renamed BNF/Countable_Set to Countable_Type and moved its generic stuff to Library/Countable_Set
hoelzl
parents: 49834
diff changeset
    32
  assumes "countable A"
885deccc264e renamed BNF/Countable_Set to Countable_Type and moved its generic stuff to Library/Countable_Set
hoelzl
parents: 49834
diff changeset
    33
  obtains (Fin) "finite A" "|A| <o |UNIV::nat set|"
885deccc264e renamed BNF/Countable_Set to Countable_Type and moved its generic stuff to Library/Countable_Set
hoelzl
parents: 49834
diff changeset
    34
        | (Inf) "infinite A" "|A| =o |UNIV::nat set|"
885deccc264e renamed BNF/Countable_Set to Countable_Type and moved its generic stuff to Library/Countable_Set
hoelzl
parents: 49834
diff changeset
    35
  using assms countable_or_card_of by blast
48975
7f79f94a432c added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
blanchet
parents:
diff changeset
    36
50144
885deccc264e renamed BNF/Countable_Set to Countable_Type and moved its generic stuff to Library/Countable_Set
hoelzl
parents: 49834
diff changeset
    37
lemma countable_or:
885deccc264e renamed BNF/Countable_Set to Countable_Type and moved its generic stuff to Library/Countable_Set
hoelzl
parents: 49834
diff changeset
    38
  "countable A \<Longrightarrow> (\<exists> f::'a\<Rightarrow>nat. finite A \<and> inj_on f A) \<or> (\<exists> f::'a\<Rightarrow>nat. infinite A \<and> bij_betw f A UNIV)"
52662
c7cae5ce217d use transfer/lifting for proving countable set and multisets being BNFs
traytel
parents: 52660
diff changeset
    39
  by (elim countable_enum_cases) fastforce+
48975
7f79f94a432c added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
blanchet
parents:
diff changeset
    40
50144
885deccc264e renamed BNF/Countable_Set to Countable_Type and moved its generic stuff to Library/Countable_Set
hoelzl
parents: 49834
diff changeset
    41
lemma countable_cases[elim]:
885deccc264e renamed BNF/Countable_Set to Countable_Type and moved its generic stuff to Library/Countable_Set
hoelzl
parents: 49834
diff changeset
    42
  assumes "countable A"
885deccc264e renamed BNF/Countable_Set to Countable_Type and moved its generic stuff to Library/Countable_Set
hoelzl
parents: 49834
diff changeset
    43
  obtains (Fin) f :: "'a\<Rightarrow>nat" where "finite A" "inj_on f A"
885deccc264e renamed BNF/Countable_Set to Countable_Type and moved its generic stuff to Library/Countable_Set
hoelzl
parents: 49834
diff changeset
    44
        | (Inf) f :: "'a\<Rightarrow>nat" where "infinite A" "bij_betw f A UNIV"
885deccc264e renamed BNF/Countable_Set to Countable_Type and moved its generic stuff to Library/Countable_Set
hoelzl
parents: 49834
diff changeset
    45
  using assms countable_or by metis
48975
7f79f94a432c added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
blanchet
parents:
diff changeset
    46
7f79f94a432c added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
blanchet
parents:
diff changeset
    47
lemma countable_ordLeq:
7f79f94a432c added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
blanchet
parents:
diff changeset
    48
assumes "|A| \<le>o |B|" and "countable B"
7f79f94a432c added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
blanchet
parents:
diff changeset
    49
shows "countable A"
7f79f94a432c added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
blanchet
parents:
diff changeset
    50
using assms unfolding countable_card_of_nat by(rule ordLeq_transitive)
7f79f94a432c added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
blanchet
parents:
diff changeset
    51
7f79f94a432c added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
blanchet
parents:
diff changeset
    52
lemma countable_ordLess:
7f79f94a432c added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
blanchet
parents:
diff changeset
    53
assumes AB: "|A| <o |B|" and B: "countable B"
7f79f94a432c added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
blanchet
parents:
diff changeset
    54
shows "countable A"
7f79f94a432c added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
blanchet
parents:
diff changeset
    55
using countable_ordLeq[OF ordLess_imp_ordLeq[OF AB] B] .
7f79f94a432c added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
blanchet
parents:
diff changeset
    56
54539
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
    57
subsection {* The type of countable sets *}
48975
7f79f94a432c added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
blanchet
parents:
diff changeset
    58
52662
c7cae5ce217d use transfer/lifting for proving countable set and multisets being BNFs
traytel
parents: 52660
diff changeset
    59
typedef 'a cset = "{A :: 'a set. countable A}" morphisms rcset acset
c7cae5ce217d use transfer/lifting for proving countable set and multisets being BNFs
traytel
parents: 52660
diff changeset
    60
  by (rule exI[of _ "{}"]) simp
48975
7f79f94a432c added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
blanchet
parents:
diff changeset
    61
52662
c7cae5ce217d use transfer/lifting for proving countable set and multisets being BNFs
traytel
parents: 52660
diff changeset
    62
setup_lifting type_definition_cset
48975
7f79f94a432c added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
blanchet
parents:
diff changeset
    63
52662
c7cae5ce217d use transfer/lifting for proving countable set and multisets being BNFs
traytel
parents: 52660
diff changeset
    64
declare
c7cae5ce217d use transfer/lifting for proving countable set and multisets being BNFs
traytel
parents: 52660
diff changeset
    65
  rcset_inverse[simp]
c7cae5ce217d use transfer/lifting for proving countable set and multisets being BNFs
traytel
parents: 52660
diff changeset
    66
  acset_inverse[Transfer.transferred, unfolded mem_Collect_eq, simp]
c7cae5ce217d use transfer/lifting for proving countable set and multisets being BNFs
traytel
parents: 52660
diff changeset
    67
  acset_inject[Transfer.transferred, unfolded mem_Collect_eq, simp]
c7cae5ce217d use transfer/lifting for proving countable set and multisets being BNFs
traytel
parents: 52660
diff changeset
    68
  rcset[Transfer.transferred, unfolded mem_Collect_eq, simp]
48975
7f79f94a432c added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
blanchet
parents:
diff changeset
    69
59954
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
    70
instantiation cset :: (type) "{bounded_lattice_bot, distrib_lattice, minus}"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
    71
begin
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
    72
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
    73
interpretation lifting_syntax .
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
    74
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
    75
lift_definition bot_cset :: "'a cset" is "{}" parametric empty_transfer by simp 
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
    76
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
    77
lift_definition less_eq_cset :: "'a cset \<Rightarrow> 'a cset \<Rightarrow> bool"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
    78
  is subset_eq parametric subset_transfer .
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
    79
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
    80
definition less_cset :: "'a cset \<Rightarrow> 'a cset \<Rightarrow> bool"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
    81
where "xs < ys \<equiv> xs \<le> ys \<and> xs \<noteq> (ys::'a cset)"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
    82
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
    83
lemma less_cset_transfer[transfer_rule]:
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
    84
  assumes [transfer_rule]: "bi_unique A" 
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
    85
  shows "((pcr_cset A) ===> (pcr_cset A) ===> op =) op \<subset> op <"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
    86
unfolding less_cset_def[abs_def] psubset_eq[abs_def] by transfer_prover
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
    87
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
    88
lift_definition sup_cset :: "'a cset \<Rightarrow> 'a cset \<Rightarrow> 'a cset"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
    89
is union parametric union_transfer by simp
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
    90
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
    91
lift_definition inf_cset :: "'a cset \<Rightarrow> 'a cset \<Rightarrow> 'a cset"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
    92
is inter parametric inter_transfer by simp
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
    93
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
    94
lift_definition minus_cset :: "'a cset \<Rightarrow> 'a cset \<Rightarrow> 'a cset"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
    95
is minus parametric Diff_transfer by simp
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
    96
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
    97
instance by default(transfer, fastforce)+
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
    98
end
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
    99
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   100
abbreviation cempty :: "'a cset" where "cempty \<equiv> bot"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   101
abbreviation csubset_eq :: "'a cset \<Rightarrow> 'a cset \<Rightarrow> bool" where "csubset_eq xs ys \<equiv> xs \<le> ys"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   102
abbreviation csubset :: "'a cset \<Rightarrow> 'a cset \<Rightarrow> bool" where "csubset xs ys \<equiv> xs < ys"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   103
abbreviation cUn :: "'a cset \<Rightarrow> 'a cset \<Rightarrow> 'a cset" where "cUn xs ys \<equiv> sup xs ys"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   104
abbreviation cInt :: "'a cset \<Rightarrow> 'a cset \<Rightarrow> 'a cset" where "cInt xs ys \<equiv> inf xs ys"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   105
abbreviation cDiff :: "'a cset \<Rightarrow> 'a cset \<Rightarrow> 'a cset" where "cDiff xs ys \<equiv> minus xs ys"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   106
52662
c7cae5ce217d use transfer/lifting for proving countable set and multisets being BNFs
traytel
parents: 52660
diff changeset
   107
lift_definition cin :: "'a \<Rightarrow> 'a cset \<Rightarrow> bool" is "op \<in>" parametric member_transfer
55565
f663fc1e653b simplify proofs because of the stronger reflexivity prover
kuncar
parents: 55414
diff changeset
   108
  .
53013
3fbcfa911863 remove unnecessary dependencies on Library/Quotient_*
kuncar
parents: 52662
diff changeset
   109
lift_definition cinsert :: "'a \<Rightarrow> 'a cset \<Rightarrow> 'a cset" is insert parametric Lifting_Set.insert_transfer
52662
c7cae5ce217d use transfer/lifting for proving countable set and multisets being BNFs
traytel
parents: 52660
diff changeset
   110
  by (rule countable_insert)
59954
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   111
abbreviation csingle :: "'a \<Rightarrow> 'a cset" where "csingle x \<equiv> cinsert x cempty"
52662
c7cae5ce217d use transfer/lifting for proving countable set and multisets being BNFs
traytel
parents: 52660
diff changeset
   112
lift_definition cimage :: "('a \<Rightarrow> 'b) \<Rightarrow> 'a cset \<Rightarrow> 'b cset" is "op `" parametric image_transfer
c7cae5ce217d use transfer/lifting for proving countable set and multisets being BNFs
traytel
parents: 52660
diff changeset
   113
  by (rule countable_image)
59954
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   114
lift_definition cBall :: "'a cset \<Rightarrow> ('a \<Rightarrow> bool) \<Rightarrow> bool" is Ball parametric Ball_transfer .
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   115
lift_definition cBex :: "'a cset \<Rightarrow> ('a \<Rightarrow> bool) \<Rightarrow> bool" is Bex parametric Bex_transfer .
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   116
lift_definition cUNION :: "'a cset \<Rightarrow> ('a \<Rightarrow> 'b cset) \<Rightarrow> 'b cset"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   117
  is "UNION" parametric UNION_transfer by simp
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   118
definition cUnion :: "'a cset cset \<Rightarrow> 'a cset" where "cUnion A = cUNION A id"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   119
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   120
lemma Union_conv_UNION: "Union A = UNION A id"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   121
by auto
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   122
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   123
lemma cUnion_transfer [transfer_rule]:
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   124
  "rel_fun (pcr_cset (pcr_cset A)) (pcr_cset A) Union cUnion"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   125
unfolding cUnion_def[abs_def] Union_conv_UNION[abs_def] by transfer_prover
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   126
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   127
lemmas cset_eqI = set_eqI[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   128
lemmas cset_eq_iff[no_atp] = set_eq_iff[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   129
lemmas cBallI[intro!] = ballI[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   130
lemmas cbspec[dest?] = bspec[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   131
lemmas cBallE[elim] = ballE[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   132
lemmas cBexI[intro] = bexI[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   133
lemmas rev_cBexI[intro?] = rev_bexI[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   134
lemmas cBexCI = bexCI[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   135
lemmas cBexE[elim!] = bexE[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   136
lemmas cBall_triv[simp] = ball_triv[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   137
lemmas cBex_triv[simp] = bex_triv[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   138
lemmas cBex_triv_one_point1[simp] = bex_triv_one_point1[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   139
lemmas cBex_triv_one_point2[simp] = bex_triv_one_point2[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   140
lemmas cBex_one_point1[simp] = bex_one_point1[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   141
lemmas cBex_one_point2[simp] = bex_one_point2[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   142
lemmas cBall_one_point1[simp] = ball_one_point1[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   143
lemmas cBall_one_point2[simp] = ball_one_point2[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   144
lemmas cBall_conj_distrib = ball_conj_distrib[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   145
lemmas cBex_disj_distrib = bex_disj_distrib[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   146
lemmas cBall_cong = ball_cong[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   147
lemmas cBex_cong = bex_cong[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   148
lemmas csubsetI[intro!] = subsetI[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   149
lemmas csubsetD[elim, intro?] = subsetD[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   150
lemmas rev_csubsetD[no_atp,intro?] = rev_subsetD[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   151
lemmas csubsetCE[no_atp,elim] = subsetCE[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   152
lemmas csubset_eq[no_atp] = subset_eq[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   153
lemmas contra_csubsetD[no_atp] = contra_subsetD[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   154
lemmas csubset_refl = subset_refl[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   155
lemmas csubset_trans = subset_trans[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   156
lemmas cset_rev_mp = set_rev_mp[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   157
lemmas cset_mp = set_mp[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   158
lemmas csubset_not_fsubset_eq[code] = subset_not_subset_eq[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   159
lemmas eq_cmem_trans = eq_mem_trans[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   160
lemmas csubset_antisym[intro!] = subset_antisym[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   161
lemmas cequalityD1 = equalityD1[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   162
lemmas cequalityD2 = equalityD2[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   163
lemmas cequalityE = equalityE[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   164
lemmas cequalityCE[elim] = equalityCE[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   165
lemmas eqcset_imp_iff = eqset_imp_iff[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   166
lemmas eqcelem_imp_iff = eqelem_imp_iff[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   167
lemmas cempty_iff[simp] = empty_iff[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   168
lemmas cempty_fsubsetI[iff] = empty_subsetI[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   169
lemmas equals_cemptyI = equals0I[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   170
lemmas equals_cemptyD = equals0D[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   171
lemmas cBall_cempty[simp] = ball_empty[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   172
lemmas cBex_cempty[simp] = bex_empty[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   173
lemmas cInt_iff[simp] = Int_iff[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   174
lemmas cIntI[intro!] = IntI[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   175
lemmas cIntD1 = IntD1[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   176
lemmas cIntD2 = IntD2[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   177
lemmas cIntE[elim!] = IntE[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   178
lemmas cUn_iff[simp] = Un_iff[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   179
lemmas cUnI1[elim?] = UnI1[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   180
lemmas cUnI2[elim?] = UnI2[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   181
lemmas cUnCI[intro!] = UnCI[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   182
lemmas cuUnE[elim!] = UnE[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   183
lemmas cDiff_iff[simp] = Diff_iff[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   184
lemmas cDiffI[intro!] = DiffI[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   185
lemmas cDiffD1 = DiffD1[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   186
lemmas cDiffD2 = DiffD2[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   187
lemmas cDiffE[elim!] = DiffE[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   188
lemmas cinsert_iff[simp] = insert_iff[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   189
lemmas cinsertI1 = insertI1[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   190
lemmas cinsertI2 = insertI2[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   191
lemmas cinsertE[elim!] = insertE[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   192
lemmas cinsertCI[intro!] = insertCI[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   193
lemmas csubset_cinsert_iff = subset_insert_iff[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   194
lemmas cinsert_ident = insert_ident[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   195
lemmas csingletonI[intro!,no_atp] = singletonI[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   196
lemmas csingletonD[dest!,no_atp] = singletonD[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   197
lemmas fsingletonE = csingletonD [elim_format]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   198
lemmas csingleton_iff = singleton_iff[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   199
lemmas csingleton_inject[dest!] = singleton_inject[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   200
lemmas csingleton_finsert_inj_eq[iff,no_atp] = singleton_insert_inj_eq[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   201
lemmas csingleton_finsert_inj_eq'[iff,no_atp] = singleton_insert_inj_eq'[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   202
lemmas csubset_csingletonD = subset_singletonD[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   203
lemmas cDiff_single_cinsert = diff_single_insert[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   204
lemmas cdoubleton_eq_iff = doubleton_eq_iff[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   205
lemmas cUn_csingleton_iff = Un_singleton_iff[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   206
lemmas csingleton_cUn_iff = singleton_Un_iff[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   207
lemmas cimage_eqI[simp, intro] = image_eqI[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   208
lemmas cimageI = imageI[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   209
lemmas rev_cimage_eqI = rev_image_eqI[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   210
lemmas cimageE[elim!] = imageE[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   211
lemmas Compr_cimage_eq = Compr_image_eq[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   212
lemmas cimage_cUn = image_Un[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   213
lemmas cimage_iff = image_iff[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   214
lemmas cimage_csubset_iff[no_atp] = image_subset_iff[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   215
lemmas cimage_csubsetI = image_subsetI[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   216
lemmas cimage_ident[simp] = image_ident[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   217
lemmas split_if_cin1 = split_if_mem1[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   218
lemmas split_if_cin2 = split_if_mem2[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   219
lemmas cpsubsetI[intro!,no_atp] = psubsetI[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   220
lemmas cpsubsetE[elim!,no_atp] = psubsetE[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   221
lemmas cpsubset_finsert_iff = psubset_insert_iff[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   222
lemmas cpsubset_eq = psubset_eq[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   223
lemmas cpsubset_imp_fsubset = psubset_imp_subset[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   224
lemmas cpsubset_trans = psubset_trans[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   225
lemmas cpsubsetD = psubsetD[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   226
lemmas cpsubset_csubset_trans = psubset_subset_trans[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   227
lemmas csubset_cpsubset_trans = subset_psubset_trans[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   228
lemmas cpsubset_imp_ex_fmem = psubset_imp_ex_mem[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   229
lemmas csubset_cinsertI = subset_insertI[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   230
lemmas csubset_cinsertI2 = subset_insertI2[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   231
lemmas csubset_cinsert = subset_insert[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   232
lemmas cUn_upper1 = Un_upper1[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   233
lemmas cUn_upper2 = Un_upper2[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   234
lemmas cUn_least = Un_least[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   235
lemmas cInt_lower1 = Int_lower1[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   236
lemmas cInt_lower2 = Int_lower2[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   237
lemmas cInt_greatest = Int_greatest[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   238
lemmas cDiff_csubset = Diff_subset[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   239
lemmas cDiff_csubset_conv = Diff_subset_conv[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   240
lemmas csubset_cempty[simp] = subset_empty[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   241
lemmas not_cpsubset_cempty[iff] = not_psubset_empty[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   242
lemmas cinsert_is_cUn = insert_is_Un[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   243
lemmas cinsert_not_cempty[simp] = insert_not_empty[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   244
lemmas cempty_not_cinsert = empty_not_insert[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   245
lemmas cinsert_absorb = insert_absorb[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   246
lemmas cinsert_absorb2[simp] = insert_absorb2[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   247
lemmas cinsert_commute = insert_commute[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   248
lemmas cinsert_csubset[simp] = insert_subset[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   249
lemmas cinsert_cinter_cinsert[simp] = insert_inter_insert[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   250
lemmas cinsert_disjoint[simp,no_atp] = insert_disjoint[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   251
lemmas disjoint_cinsert[simp,no_atp] = disjoint_insert[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   252
lemmas cimage_cempty[simp] = image_empty[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   253
lemmas cimage_cinsert[simp] = image_insert[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   254
lemmas cimage_constant = image_constant[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   255
lemmas cimage_constant_conv = image_constant_conv[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   256
lemmas cimage_cimage = image_image[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   257
lemmas cinsert_cimage[simp] = insert_image[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   258
lemmas cimage_is_cempty[iff] = image_is_empty[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   259
lemmas cempty_is_cimage[iff] = empty_is_image[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   260
lemmas cimage_cong = image_cong[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   261
lemmas cimage_cInt_csubset = image_Int_subset[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   262
lemmas cimage_cDiff_csubset = image_diff_subset[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   263
lemmas cInt_absorb = Int_absorb[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   264
lemmas cInt_left_absorb = Int_left_absorb[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   265
lemmas cInt_commute = Int_commute[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   266
lemmas cInt_left_commute = Int_left_commute[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   267
lemmas cInt_assoc = Int_assoc[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   268
lemmas cInt_ac = Int_ac[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   269
lemmas cInt_absorb1 = Int_absorb1[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   270
lemmas cInt_absorb2 = Int_absorb2[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   271
lemmas cInt_cempty_left = Int_empty_left[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   272
lemmas cInt_cempty_right = Int_empty_right[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   273
lemmas disjoint_iff_cnot_equal = disjoint_iff_not_equal[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   274
lemmas cInt_cUn_distrib = Int_Un_distrib[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   275
lemmas cInt_cUn_distrib2 = Int_Un_distrib2[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   276
lemmas cInt_csubset_iff[no_atp, simp] = Int_subset_iff[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   277
lemmas cUn_absorb = Un_absorb[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   278
lemmas cUn_left_absorb = Un_left_absorb[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   279
lemmas cUn_commute = Un_commute[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   280
lemmas cUn_left_commute = Un_left_commute[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   281
lemmas cUn_assoc = Un_assoc[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   282
lemmas cUn_ac = Un_ac[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   283
lemmas cUn_absorb1 = Un_absorb1[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   284
lemmas cUn_absorb2 = Un_absorb2[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   285
lemmas cUn_cempty_left = Un_empty_left[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   286
lemmas cUn_cempty_right = Un_empty_right[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   287
lemmas cUn_cinsert_left[simp] = Un_insert_left[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   288
lemmas cUn_cinsert_right[simp] = Un_insert_right[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   289
lemmas cInt_cinsert_left = Int_insert_left[Transfer.transferred]
59956
e936c2828bec consistent naming
Andreas Lochbihler
parents: 59954
diff changeset
   290
lemmas cInt_cinsert_left_if0[simp] = Int_insert_left_if0[Transfer.transferred]
59954
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   291
lemmas cInt_cinsert_left_if1[simp] = Int_insert_left_if1[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   292
lemmas cInt_cinsert_right = Int_insert_right[Transfer.transferred]
59956
e936c2828bec consistent naming
Andreas Lochbihler
parents: 59954
diff changeset
   293
lemmas cInt_cinsert_right_if0[simp] = Int_insert_right_if0[Transfer.transferred]
59954
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   294
lemmas cInt_cinsert_right_if1[simp] = Int_insert_right_if1[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   295
lemmas cUn_cInt_distrib = Un_Int_distrib[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   296
lemmas cUn_cInt_distrib2 = Un_Int_distrib2[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   297
lemmas cUn_cInt_crazy = Un_Int_crazy[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   298
lemmas csubset_cUn_eq = subset_Un_eq[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   299
lemmas cUn_cempty[iff] = Un_empty[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   300
lemmas cUn_csubset_iff[no_atp, simp] = Un_subset_iff[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   301
lemmas cUn_cDiff_cInt = Un_Diff_Int[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   302
lemmas cDiff_cInt2 = Diff_Int2[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   303
lemmas cUn_cInt_assoc_eq = Un_Int_assoc_eq[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   304
lemmas cBall_cUn = ball_Un[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   305
lemmas cBex_cUn = bex_Un[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   306
lemmas cDiff_eq_cempty_iff[simp,no_atp] = Diff_eq_empty_iff[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   307
lemmas cDiff_cancel[simp] = Diff_cancel[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   308
lemmas cDiff_idemp[simp] = Diff_idemp[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   309
lemmas cDiff_triv = Diff_triv[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   310
lemmas cempty_cDiff[simp] = empty_Diff[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   311
lemmas cDiff_cempty[simp] = Diff_empty[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   312
lemmas cDiff_cinsert0[simp,no_atp] = Diff_insert0[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   313
lemmas cDiff_cinsert = Diff_insert[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   314
lemmas cDiff_cinsert2 = Diff_insert2[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   315
lemmas cinsert_cDiff_if = insert_Diff_if[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   316
lemmas cinsert_cDiff1[simp] = insert_Diff1[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   317
lemmas cinsert_cDiff_single[simp] = insert_Diff_single[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   318
lemmas cinsert_cDiff = insert_Diff[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   319
lemmas cDiff_cinsert_absorb = Diff_insert_absorb[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   320
lemmas cDiff_disjoint[simp] = Diff_disjoint[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   321
lemmas cDiff_partition = Diff_partition[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   322
lemmas double_cDiff = double_diff[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   323
lemmas cUn_cDiff_cancel[simp] = Un_Diff_cancel[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   324
lemmas cUn_cDiff_cancel2[simp] = Un_Diff_cancel2[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   325
lemmas cDiff_cUn = Diff_Un[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   326
lemmas cDiff_cInt = Diff_Int[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   327
lemmas cUn_cDiff = Un_Diff[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   328
lemmas cInt_cDiff = Int_Diff[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   329
lemmas cDiff_cInt_distrib = Diff_Int_distrib[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   330
lemmas cDiff_cInt_distrib2 = Diff_Int_distrib2[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   331
lemmas cset_eq_csubset = set_eq_subset[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   332
lemmas csubset_iff[no_atp] = subset_iff[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   333
lemmas csubset_iff_pfsubset_eq = subset_iff_psubset_eq[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   334
lemmas all_not_cin_conv[simp] = all_not_in_conv[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   335
lemmas ex_cin_conv = ex_in_conv[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   336
lemmas cimage_mono = image_mono[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   337
lemmas cinsert_mono = insert_mono[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   338
lemmas cunion_mono = Un_mono[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   339
lemmas cinter_mono = Int_mono[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   340
lemmas cminus_mono = Diff_mono[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   341
lemmas cin_mono = in_mono[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   342
lemmas cLeast_mono = Least_mono[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   343
lemmas cequalityI = equalityI[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   344
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   345
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   346
subsection {* Additional lemmas*}
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   347
59956
e936c2828bec consistent naming
Andreas Lochbihler
parents: 59954
diff changeset
   348
subsubsection {* @{text cempty} *}
59954
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   349
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   350
lemma cemptyE [elim!]: "cin a cempty \<Longrightarrow> P" by simp
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   351
59956
e936c2828bec consistent naming
Andreas Lochbihler
parents: 59954
diff changeset
   352
subsubsection {* @{text cinsert} *}
59954
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   353
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   354
lemma countable_insert_iff: "countable (insert x A) \<longleftrightarrow> countable A"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   355
by (metis Diff_eq_empty_iff countable_empty countable_insert subset_insertI uncountable_minus_countable)
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   356
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   357
lemma set_cinsert:
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   358
  assumes "cin x A"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   359
  obtains B where "A = cinsert x B" and "\<not> cin x B"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   360
using assms by transfer(erule Set.set_insert, simp add: countable_insert_iff)
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   361
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   362
lemma mk_disjoint_cinsert: "cin a A \<Longrightarrow> \<exists>B. A = cinsert a B \<and> \<not> cin a B"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   363
  by (rule exI[where x = "cDiff A (csingle a)"]) blast
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   364
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   365
subsubsection {* @{text cimage} *}
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   366
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   367
lemma subset_cimage_iff: "csubset_eq B (cimage f A) \<longleftrightarrow> (\<exists>AA. csubset_eq AA A \<and> B = cimage f AA)"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   368
by transfer (metis countable_subset image_mono mem_Collect_eq subset_imageE) 
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   369
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   370
subsubsection {* bounded quantification *}
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   371
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   372
lemma cBex_simps [simp, no_atp]:
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   373
  "\<And>A P Q. cBex A (\<lambda>x. P x \<and> Q) = (cBex A P \<and> Q)" 
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   374
  "\<And>A P Q. cBex A (\<lambda>x. P \<and> Q x) = (P \<and> cBex A Q)"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   375
  "\<And>P. cBex cempty P = False" 
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   376
  "\<And>a B P. cBex (cinsert a B) P = (P a \<or> cBex B P)"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   377
  "\<And>A P f. cBex (cimage f A) P = cBex A (\<lambda>x. P (f x))"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   378
  "\<And>A P. (\<not> cBex A P) = cBall A (\<lambda>x. \<not> P x)"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   379
by auto
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   380
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   381
lemma cBall_simps [simp, no_atp]:
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   382
  "\<And>A P Q. cBall A (\<lambda>x. P x \<or> Q) = (cBall A P \<or> Q)"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   383
  "\<And>A P Q. cBall A (\<lambda>x. P \<or> Q x) = (P \<or> cBall A Q)"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   384
  "\<And>A P Q. cBall A (\<lambda>x. P \<longrightarrow> Q x) = (P \<longrightarrow> cBall A Q)"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   385
  "\<And>A P Q. cBall A (\<lambda>x. P x \<longrightarrow> Q) = (cBex A P \<longrightarrow> Q)"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   386
  "\<And>P. cBall cempty P = True"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   387
  "\<And>a B P. cBall (cinsert a B) P = (P a \<and> cBall B P)"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   388
  "\<And>A P f. cBall (cimage f A) P = cBall A (\<lambda>x. P (f x))"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   389
  "\<And>A P. (\<not> cBall A P) = cBex A (\<lambda>x. \<not> P x)"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   390
by auto
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   391
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   392
lemma atomize_cBall:
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   393
    "(\<And>x. cin x A ==> P x) == Trueprop (cBall A (\<lambda>x. P x))"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   394
apply (simp only: atomize_all atomize_imp)
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   395
apply (rule equal_intr_rule)
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   396
by (transfer, simp)+
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   397
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   398
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   399
subsection {* Setup for Lifting/Transfer *}
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   400
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   401
subsubsection {* Relator and predicator properties *}
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   402
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   403
lift_definition rel_cset :: "('a \<Rightarrow> 'b \<Rightarrow> bool) \<Rightarrow> 'a cset \<Rightarrow> 'b cset \<Rightarrow> bool"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   404
  is rel_set parametric rel_set_transfer .
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   405
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   406
lemma rel_cset_alt_def:
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   407
  "rel_cset R a b \<longleftrightarrow>
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   408
   (\<forall>t \<in> rcset a. \<exists>u \<in> rcset b. R t u) \<and>
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   409
   (\<forall>t \<in> rcset b. \<exists>u \<in> rcset a. R u t)"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   410
by(simp add: rel_cset_def rel_set_def)
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   411
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   412
lemma rel_cset_iff:
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   413
  "rel_cset R a b \<longleftrightarrow>
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   414
   (\<forall>t. cin t a \<longrightarrow> (\<exists>u. cin u b \<and> R t u)) \<and>
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   415
   (\<forall>t. cin t b \<longrightarrow> (\<exists>u. cin u a \<and> R u t))"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   416
by transfer(auto simp add: rel_set_def)
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   417
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   418
subsubsection {* Transfer rules for the Transfer package *}
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   419
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   420
text {* Unconditional transfer rules *}
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   421
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   422
context begin interpretation lifting_syntax .
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   423
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   424
lemmas cempty_parametric [transfer_rule] = empty_transfer[Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   425
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   426
lemma cinsert_parametric [transfer_rule]:
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   427
  "(A ===> rel_cset A ===> rel_cset A) cinsert cinsert"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   428
  unfolding rel_fun_def rel_cset_iff by blast
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   429
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   430
lemma cUn_parametric [transfer_rule]:
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   431
  "(rel_cset A ===> rel_cset A ===> rel_cset A) cUn cUn"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   432
  unfolding rel_fun_def rel_cset_iff by blast
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   433
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   434
lemma cUnion_parametric [transfer_rule]:
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   435
  "(rel_cset (rel_cset A) ===> rel_cset A) cUnion cUnion"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   436
  unfolding rel_fun_def by transfer(simp, fast dest: rel_setD1 rel_setD2 intro!: rel_setI)
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   437
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   438
lemma cimage_parametric [transfer_rule]:
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   439
  "((A ===> B) ===> rel_cset A ===> rel_cset B) cimage cimage"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   440
  unfolding rel_fun_def rel_cset_iff by blast
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   441
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   442
lemma cBall_parametric [transfer_rule]:
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   443
  "(rel_cset A ===> (A ===> op =) ===> op =) cBall cBall"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   444
  unfolding rel_cset_iff rel_fun_def by blast
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   445
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   446
lemma cBex_parametric [transfer_rule]:
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   447
  "(rel_cset A ===> (A ===> op =) ===> op =) cBex cBex"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   448
  unfolding rel_cset_iff rel_fun_def by blast
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   449
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   450
lemma rel_cset_parametric [transfer_rule]:
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   451
  "((A ===> B ===> op =) ===> rel_cset A ===> rel_cset B ===> op =) rel_cset rel_cset"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   452
  unfolding rel_fun_def
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   453
  using rel_set_transfer[unfolded rel_fun_def, rule_format, Transfer.transferred, where A = A and B = B]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   454
  by simp
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   455
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   456
text {* Rules requiring bi-unique, bi-total or right-total relations *}
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   457
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   458
lemma cin_parametric [transfer_rule]:
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   459
  "bi_unique A \<Longrightarrow> (A ===> rel_cset A ===> op =) cin cin"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   460
unfolding rel_fun_def rel_cset_iff bi_unique_def by metis
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   461
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   462
lemma cInt_parametric [transfer_rule]:
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   463
  "bi_unique A \<Longrightarrow> (rel_cset A ===> rel_cset A ===> rel_cset A) cInt cInt"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   464
unfolding rel_fun_def 
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   465
using inter_transfer[unfolded rel_fun_def, rule_format, Transfer.transferred]
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   466
by blast
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   467
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   468
lemma cDiff_parametric [transfer_rule]:
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   469
  "bi_unique A \<Longrightarrow> (rel_cset A ===> rel_cset A ===> rel_cset A) cDiff cDiff"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   470
unfolding rel_fun_def
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   471
using Diff_transfer[unfolded rel_fun_def, rule_format, Transfer.transferred] by blast
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   472
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   473
lemma csubset_parametric [transfer_rule]:
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   474
  "bi_unique A \<Longrightarrow> (rel_cset A ===> rel_cset A ===> op =) csubset_eq csubset_eq"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   475
unfolding rel_fun_def
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   476
using subset_transfer[unfolded rel_fun_def, rule_format, Transfer.transferred] by blast
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   477
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   478
end
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   479
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   480
lifting_update cset.lifting
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   481
lifting_forget cset.lifting
48975
7f79f94a432c added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
blanchet
parents:
diff changeset
   482
54539
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   483
subsection {* Registration as BNF *}
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   484
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   485
lemma card_of_countable_sets_range:
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   486
fixes A :: "'a set"
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   487
shows "|{X. X \<subseteq> A \<and> countable X \<and> X \<noteq> {}}| \<le>o |{f::nat \<Rightarrow> 'a. range f \<subseteq> A}|"
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   488
apply(rule card_of_ordLeqI[of from_nat_into]) using inj_on_from_nat_into
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   489
unfolding inj_on_def by auto
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   490
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   491
lemma card_of_countable_sets_Func:
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   492
"|{X. X \<subseteq> A \<and> countable X \<and> X \<noteq> {}}| \<le>o |A| ^c natLeq"
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   493
using card_of_countable_sets_range card_of_Func_UNIV[THEN ordIso_symmetric]
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   494
unfolding cexp_def Field_natLeq Field_card_of
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   495
by (rule ordLeq_ordIso_trans)
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   496
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   497
lemma ordLeq_countable_subsets:
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   498
"|A| \<le>o |{X. X \<subseteq> A \<and> countable X}|"
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   499
apply (rule card_of_ordLeqI[of "\<lambda> a. {a}"]) unfolding inj_on_def by auto
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   500
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   501
lemma finite_countable_subset:
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   502
"finite {X. X \<subseteq> A \<and> countable X} \<longleftrightarrow> finite A"
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   503
apply default
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   504
 apply (erule contrapos_pp)
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   505
 apply (rule card_of_ordLeq_infinite)
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   506
 apply (rule ordLeq_countable_subsets)
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   507
 apply assumption
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   508
apply (rule finite_Collect_conjI)
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   509
apply (rule disjI1)
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   510
by (erule finite_Collect_subsets)
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   511
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   512
lemma rcset_to_rcset: "countable A \<Longrightarrow> rcset (the_inv rcset A) = A"
59954
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   513
  including cset.lifting
54539
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   514
  apply (rule f_the_inv_into_f[unfolded inj_on_def image_iff])
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   515
   apply transfer' apply simp
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   516
  apply transfer' apply simp
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   517
  done
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   518
59954
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   519
lemma Collect_Int_Times: "{(x, y). R x y} \<inter> A \<times> B = {(x, y). R x y \<and> x \<in> A \<and> y \<in> B}"
54539
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   520
by auto
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   521
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   522
55934
800e155d051a renamed 'cset_rel' to 'rel_cset'
blanchet
parents: 55565
diff changeset
   523
lemma rel_cset_aux:
54539
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   524
"(\<forall>t \<in> rcset a. \<exists>u \<in> rcset b. R t u) \<and> (\<forall>t \<in> rcset b. \<exists>u \<in> rcset a. R u t) \<longleftrightarrow>
59954
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   525
 ((BNF_Def.Grp {x. rcset x \<subseteq> {(a, b). R a b}} (cimage fst))\<inverse>\<inverse> OO
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   526
   BNF_Def.Grp {x. rcset x \<subseteq> {(a, b). R a b}} (cimage snd)) a b" (is "?L = ?R")
54539
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   527
proof
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   528
  assume ?L
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   529
  def R' \<equiv> "the_inv rcset (Collect (split R) \<inter> (rcset a \<times> rcset b))"
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   530
  (is "the_inv rcset ?L'")
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   531
  have L: "countable ?L'" by auto
55070
235c7661a96b rationalized dependencies
blanchet
parents: 54841
diff changeset
   532
  hence *: "rcset R' = ?L'" unfolding R'_def by (intro rcset_to_rcset)
59954
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   533
  thus ?R unfolding Grp_def relcompp.simps conversep.simps including cset.lifting
55414
eab03e9cee8a renamed '{prod,sum,bool,unit}_case' to 'case_...'
blanchet
parents: 55075
diff changeset
   534
  proof (intro CollectI case_prodI exI[of _ a] exI[of _ b] exI[of _ R'] conjI refl)
54539
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   535
    from * `?L` show "a = cimage fst R'" by transfer (auto simp: image_def Collect_Int_Times)
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   536
    from * `?L` show "b = cimage snd R'" by transfer (auto simp: image_def Collect_Int_Times)
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   537
  qed simp_all
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   538
next
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   539
  assume ?R thus ?L unfolding Grp_def relcompp.simps conversep.simps
59954
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   540
    by (simp add: subset_eq Ball_def)(transfer, auto simp add: cimage.rep_eq, metis snd_conv, metis fst_conv)
54539
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   541
qed
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   542
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   543
bnf "'a cset"
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   544
  map: cimage
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   545
  sets: rcset
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   546
  bd: natLeq
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   547
  wits: "cempty"
55934
800e155d051a renamed 'cset_rel' to 'rel_cset'
blanchet
parents: 55565
diff changeset
   548
  rel: rel_cset
54539
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   549
proof -
59954
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   550
  show "cimage id = id" by auto
54539
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   551
next
59954
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   552
  fix f g show "cimage (g \<circ> f) = cimage g \<circ> cimage f" by fastforce
54539
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   553
next
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   554
  fix C f g assume eq: "\<And>a. a \<in> rcset C \<Longrightarrow> f a = g a"
59954
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   555
  thus "cimage f C = cimage g C" including cset.lifting by transfer force
54539
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   556
next
59954
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   557
  fix f show "rcset \<circ> cimage f = op ` f \<circ> rcset" including cset.lifting by transfer' fastforce
54539
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   558
next
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   559
  show "card_order natLeq" by (rule natLeq_card_order)
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   560
next
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   561
  show "cinfinite natLeq" by (rule natLeq_cinfinite)
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   562
next
59954
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   563
  fix C show "|rcset C| \<le>o natLeq"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   564
    including cset.lifting by transfer (unfold countable_card_le_natLeq)
54539
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   565
next
54841
af71b753c459 express weak pullback property of bnfs only in terms of the relator
traytel
parents: 54539
diff changeset
   566
  fix R S
55934
800e155d051a renamed 'cset_rel' to 'rel_cset'
blanchet
parents: 55565
diff changeset
   567
  show "rel_cset R OO rel_cset S \<le> rel_cset (R OO S)"
59954
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   568
    unfolding rel_cset_alt_def[abs_def] by fast
54539
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   569
next
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   570
  fix R
55934
800e155d051a renamed 'cset_rel' to 'rel_cset'
blanchet
parents: 55565
diff changeset
   571
  show "rel_cset R =
59954
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   572
        (BNF_Def.Grp {x. rcset x \<subseteq> Collect (split R)} (cimage fst))\<inverse>\<inverse> OO
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   573
         BNF_Def.Grp {x. rcset x \<subseteq> Collect (split R)} (cimage snd)"
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   574
  unfolding rel_cset_alt_def[abs_def] rel_cset_aux by simp
5ee7e9721eac more lemmas and operations on cset (adapted from FSet)
Andreas Lochbihler
parents: 58881
diff changeset
   575
qed(simp add: bot_cset.rep_eq)
54539
bbab2ebda234 move registration of countable set type as BNF to its own theory file (+ renamed theory)
blanchet
parents: 53013
diff changeset
   576
48975
7f79f94a432c added new (co)datatype package + theories of ordinals and cardinals (with Dmitriy and Andrei)
blanchet
parents:
diff changeset
   577
end