Structure bagTheory
signature bagTheory =
sig
type thm = Thm.thm
(* Definitions *)
val BAG_ALL_DISTINCT : thm
val BAG_CARD : thm
val BAG_CARD_RELn : thm
val BAG_CHOICE_DEF : thm
val BAG_DELETE : thm
val BAG_DIFF : thm
val BAG_DISJOINT : thm
val BAG_EVERY : thm
val BAG_FILTER_DEF : thm
val BAG_GEN_PROD_def : thm
val BAG_GEN_SUM_def : thm
val BAG_IMAGE_DEF : thm
val BAG_IN : thm
val BAG_INN : thm
val BAG_INSERT : thm
val BAG_INTER : thm
val BAG_MERGE : thm
val BAG_OF_SET : thm
val BAG_REST_DEF : thm
val BAG_UNION : thm
val BIG_BAG_UNION_def : thm
val EL_BAG : thm
val EMPTY_BAG : thm
val FINITE_BAG : thm
val ITBAG_curried_def : thm
val ITBAG_tupled_primitive_def : thm
val PSUB_BAG : thm
val SET_OF_BAG : thm
val SING_BAG : thm
val SUB_BAG : thm
val bag_size_def : thm
val dominates_def : thm
val mlt1_def : thm
(* Theorems *)
val ASSOC_BAG_UNION : thm
val BAG_ALL_DISTINCT_BAG_INN : thm
val BAG_ALL_DISTINCT_BAG_MERGE : thm
val BAG_ALL_DISTINCT_BAG_OF_SET : thm
val BAG_ALL_DISTINCT_BAG_UNION : thm
val BAG_ALL_DISTINCT_DELETE : thm
val BAG_ALL_DISTINCT_DIFF : thm
val BAG_ALL_DISTINCT_EXTENSION : thm
val BAG_ALL_DISTINCT_SET : thm
val BAG_ALL_DISTINCT_THM : thm
val BAG_CARD_BAG_INN : thm
val BAG_CARD_DIFF : thm
val BAG_CARD_EMPTY : thm
val BAG_CARD_THM : thm
val BAG_CARD_UNION : thm
val BAG_CHOICE_SING : thm
val BAG_DECOMPOSE : thm
val BAG_DELETE_11 : thm
val BAG_DELETE_BAG_IN : thm
val BAG_DELETE_BAG_IN_down : thm
val BAG_DELETE_BAG_IN_up : thm
val BAG_DELETE_EMPTY : thm
val BAG_DELETE_INSERT : thm
val BAG_DELETE_PSUB_BAG : thm
val BAG_DELETE_SING : thm
val BAG_DELETE_TWICE : thm
val BAG_DELETE_commutes : thm
val BAG_DELETE_concrete : thm
val BAG_DIFF_2L : thm
val BAG_DIFF_2R : thm
val BAG_DIFF_EMPTY : thm
val BAG_DIFF_EMPTY_simple : thm
val BAG_DIFF_EQ_EMPTY : thm
val BAG_DIFF_INSERT : thm
val BAG_DIFF_INSERT_SUB_BAG : thm
val BAG_DIFF_INSERT_same : thm
val BAG_DIFF_UNION_eliminate : thm
val BAG_DISJOINT_BAG_IN : thm
val BAG_DISJOINT_BAG_INSERT : thm
val BAG_DISJOINT_BAG_UNION : thm
val BAG_DISJOINT_DIFF : thm
val BAG_DISJOINT_EMPTY : thm
val BAG_EVERY_MERGE : thm
val BAG_EVERY_SET : thm
val BAG_EVERY_THM : thm
val BAG_EVERY_UNION : thm
val BAG_EXTENSION : thm
val BAG_FILTER_BAG_INSERT : thm
val BAG_FILTER_EMPTY : thm
val BAG_FILTER_EQ_EMPTY : thm
val BAG_FILTER_FILTER : thm
val BAG_FILTER_SUB_BAG : thm
val BAG_GEN_PROD_ALL_ONES : thm
val BAG_GEN_PROD_EMPTY : thm
val BAG_GEN_PROD_EQ_1 : thm
val BAG_GEN_PROD_POSITIVE : thm
val BAG_GEN_PROD_REC : thm
val BAG_GEN_PROD_TAILREC : thm
val BAG_GEN_PROD_UNION : thm
val BAG_GEN_PROD_UNION_LEM : thm
val BAG_GEN_SUM_EMPTY : thm
val BAG_GEN_SUM_REC : thm
val BAG_GEN_SUM_TAILREC : thm
val BAG_IMAGE_COMPOSE : thm
val BAG_IMAGE_EMPTY : thm
val BAG_IMAGE_EQ_EMPTY : thm
val BAG_IMAGE_FINITE : thm
val BAG_IMAGE_FINITE_I : thm
val BAG_IMAGE_FINITE_INSERT : thm
val BAG_IMAGE_FINITE_RESTRICTED_I : thm
val BAG_IMAGE_FINITE_UNION : thm
val BAG_INN_0 : thm
val BAG_INN_BAG_DELETE : thm
val BAG_INN_BAG_FILTER : thm
val BAG_INN_BAG_INSERT : thm
val BAG_INN_BAG_INSERT_STRONG : thm
val BAG_INN_BAG_MERGE : thm
val BAG_INN_BAG_UNION : thm
val BAG_INN_EMPTY_BAG : thm
val BAG_INN_LESS : thm
val BAG_INSERT_CHOICE_REST : thm
val BAG_INSERT_DIFF : thm
val BAG_INSERT_EQUAL : thm
val BAG_INSERT_EQ_UNION : thm
val BAG_INSERT_NOT_EMPTY : thm
val BAG_INSERT_ONE_ONE : thm
val BAG_INSERT_SUB_BAG_E : thm
val BAG_INSERT_UNION : thm
val BAG_INSERT_commutes : thm
val BAG_INTER_FINITE : thm
val BAG_INTER_SUB_BAG : thm
val BAG_IN_BAG_DELETE : thm
val BAG_IN_BAG_DIFF_ALL_DISTINCT : thm
val BAG_IN_BAG_FILTER : thm
val BAG_IN_BAG_INSERT : thm
val BAG_IN_BAG_MERGE : thm
val BAG_IN_BAG_OF_SET : thm
val BAG_IN_BAG_UNION : thm
val BAG_IN_BIG_BAG_UNION : thm
val BAG_IN_DIFF_E : thm
val BAG_IN_DIFF_I : thm
val BAG_IN_DIVIDES : thm
val BAG_IN_FINITE_BAG_IMAGE : thm
val BAG_LESS_ADD : thm
val BAG_MERGE_IDEM : thm
val BAG_NOT_LESS_EMPTY : thm
val BAG_OF_EMPTY : thm
val BAG_REST_SING : thm
val BAG_SIZE_EMPTY : thm
val BAG_SIZE_INSERT : thm
val BAG_UNION_DIFF : thm
val BAG_UNION_DIFF_eliminate : thm
val BAG_UNION_EMPTY : thm
val BAG_UNION_EQ_LCANCEL1 : thm
val BAG_UNION_EQ_LEFT : thm
val BAG_UNION_EQ_RCANCEL1 : thm
val BAG_UNION_INSERT : thm
val BAG_UNION_LEFT_CANCEL : thm
val BAG_UNION_RIGHT_CANCEL : thm
val BAG_cases : thm
val BCARD_0 : thm
val BCARD_SUC : thm
val BIG_BAG_UNION_DELETE : thm
val BIG_BAG_UNION_EMPTY : thm
val BIG_BAG_UNION_EQ_ELEMENT : thm
val BIG_BAG_UNION_EQ_EMPTY_BAG : thm
val BIG_BAG_UNION_INSERT : thm
val BIG_BAG_UNION_ITSET_BAG_UNION : thm
val BIG_BAG_UNION_UNION : thm
val COMMUTING_ITBAG_INSERT : thm
val COMMUTING_ITBAG_RECURSES : thm
val COMM_BAG_UNION : thm
val C_BAG_INSERT_ONE_ONE : thm
val EL_BAG_11 : thm
val EL_BAG_BAG_INSERT : thm
val EL_BAG_INSERT_squeeze : thm
val EL_BAG_SUB_BAG : thm
val EMPTY_BAG_alt : thm
val FINITE_BAG_DIFF : thm
val FINITE_BAG_DIFF_dual : thm
val FINITE_BAG_FILTER : thm
val FINITE_BAG_INDUCT : thm
val FINITE_BAG_INSERT : thm
val FINITE_BAG_THM : thm
val FINITE_BAG_UNION : thm
val FINITE_BIG_BAG_UNION : thm
val FINITE_EMPTY_BAG : thm
val FINITE_SET_OF_BAG : thm
val FINITE_SUB_BAG : thm
val IN_SET_OF_BAG : thm
val ITBAG_EMPTY : thm
val ITBAG_IND : thm
val ITBAG_INSERT : thm
val ITBAG_THM : thm
val MEMBER_NOT_EMPTY : thm
val NOT_BAG_IN : thm
val NOT_IN_BAG_DIFF : thm
val NOT_IN_EMPTY_BAG : thm
val NOT_IN_SUB_BAG_INSERT : thm
val NOT_mlt_EMPTY : thm
val PSUB_BAG_ANTISYM : thm
val PSUB_BAG_CARD : thm
val PSUB_BAG_IRREFL : thm
val PSUB_BAG_NOT_EQ : thm
val PSUB_BAG_REST : thm
val PSUB_BAG_SUB_BAG : thm
val PSUB_BAG_TRANS : thm
val SET_BAG_I : thm
val SET_OF_BAG_DIFF_SUBSET_down : thm
val SET_OF_BAG_DIFF_SUBSET_up : thm
val SET_OF_BAG_EQ_EMPTY : thm
val SET_OF_BAG_EQ_INSERT : thm
val SET_OF_BAG_IMAGE : thm
val SET_OF_BAG_INSERT : thm
val SET_OF_BAG_MERGE : thm
val SET_OF_BAG_UNION : thm
val SET_OF_EL_BAG : thm
val SET_OF_EMPTY : thm
val SING_BAG_THM : thm
val SING_EL_BAG : thm
val STRONG_FINITE_BAG_INDUCT : thm
val SUB_BAG_ALL_DISTINCT : thm
val SUB_BAG_ANTISYM : thm
val SUB_BAG_BAG_DIFF : thm
val SUB_BAG_BAG_IN : thm
val SUB_BAG_CARD : thm
val SUB_BAG_DIFF : thm
val SUB_BAG_DIFF_EQ : thm
val SUB_BAG_DIFF_simple : thm
val SUB_BAG_EL_BAG : thm
val SUB_BAG_EMPTY : thm
val SUB_BAG_EXISTS : thm
val SUB_BAG_INSERT : thm
val SUB_BAG_INSERT_I : thm
val SUB_BAG_LEQ : thm
val SUB_BAG_PSUB_BAG : thm
val SUB_BAG_REFL : thm
val SUB_BAG_REST : thm
val SUB_BAG_SET : thm
val SUB_BAG_SING : thm
val SUB_BAG_TRANS : thm
val SUB_BAG_UNION : thm
val SUB_BAG_UNION_DIFF : thm
val SUB_BAG_UNION_MONO : thm
val SUB_BAG_UNION_down : thm
val SUB_BAG_UNION_eliminate : thm
val TC_mlt1_FINITE_BAG : thm
val TC_mlt1_UNION1_I : thm
val TC_mlt1_UNION2_I : thm
val WF_mlt1 : thm
val bdominates_BAG_DIFF : thm
val dominates_DIFF : thm
val dominates_EMPTY : thm
val dominates_SUBSET : thm
val mlt1_INSERT_CANCEL : thm
val mlt1_all_accessible : thm
val mltLT_SING0 : thm
val mlt_INSERT_CANCEL : thm
val mlt_INSERT_CANCEL_I : thm
val mlt_NOT_REFL : thm
val mlt_UNION_CANCEL_EQN : thm
val mlt_UNION_EMPTY_EQN : thm
val mlt_UNION_LCANCEL : thm
val mlt_UNION_LCANCEL_I : thm
val mlt_UNION_RCANCEL : thm
val mlt_UNION_RCANCEL_I : thm
val mlt_dominates_thm1 : thm
val mlt_dominates_thm2 : thm
val move_BAG_UNION_over_eq : thm
val bag_grammars : type_grammar.grammar * term_grammar.grammar
(*
[divides] Parent theory of "bag"
[list] Parent theory of "bag"
[BAG_ALL_DISTINCT] Definition
|- ∀b. BAG_ALL_DISTINCT b ⇔ ∀e. b e ≤ 1
[BAG_CARD] Definition
|- ∀b. FINITE_BAG b ⇒ BAG_CARD_RELn b (BAG_CARD b)
[BAG_CARD_RELn] Definition
|- ∀b n.
BAG_CARD_RELn b n ⇔
∀P.
P {||} 0 ∧ (∀b n. P b n ⇒ ∀e. P (BAG_INSERT e b) (SUC n)) ⇒
P b n
[BAG_CHOICE_DEF] Definition
|- ∀b. b ≠ {||} ⇒ BAG_CHOICE b ⋲ b
[BAG_DELETE] Definition
|- ∀b0 e b. BAG_DELETE b0 e b ⇔ b0 = BAG_INSERT e b
[BAG_DIFF] Definition
|- ∀b1 b2. b1 − b2 = (λx. b1 x − b2 x)
[BAG_DISJOINT] Definition
|- ∀b1 b2.
BAG_DISJOINT b1 b2 ⇔ DISJOINT (SET_OF_BAG b1) (SET_OF_BAG b2)
[BAG_EVERY] Definition
|- ∀P b. BAG_EVERY P b ⇔ ∀e. e ⋲ b ⇒ P e
[BAG_FILTER_DEF] Definition
|- ∀P b. BAG_FILTER P b = (λe. if P e then b e else 0)
[BAG_GEN_PROD_def] Definition
|- ∀bag n. BAG_GEN_PROD bag n = ITBAG $* bag n
[BAG_GEN_SUM_def] Definition
|- ∀bag n. BAG_GEN_SUM bag n = ITBAG $+ bag n
[BAG_IMAGE_DEF] Definition
|- ∀f b.
BAG_IMAGE f b =
(λe.
(let sb = BAG_FILTER (λe0. f e0 = e) b
in
if FINITE_BAG sb then BAG_CARD sb else 1))
[BAG_IN] Definition
|- ∀e b. e ⋲ b ⇔ BAG_INN e 1 b
[BAG_INN] Definition
|- ∀e n b. BAG_INN e n b ⇔ b e ≥ n
[BAG_INSERT] Definition
|- ∀e b. BAG_INSERT e b = (λx. if x = e then b e + 1 else b x)
[BAG_INTER] Definition
|- ∀b1 b2. BAG_INTER b1 b2 = (λx. if b1 x < b2 x then b1 x else b2 x)
[BAG_MERGE] Definition
|- ∀b1 b2. BAG_MERGE b1 b2 = (λx. if b1 x < b2 x then b2 x else b1 x)
[BAG_OF_SET] Definition
|- ∀P. BAG_OF_SET P = (λx. if x ∈ P then 1 else 0)
[BAG_REST_DEF] Definition
|- ∀b. BAG_REST b = b − EL_BAG (BAG_CHOICE b)
[BAG_UNION] Definition
|- ∀b c. b ⊎ c = (λx. b x + c x)
[BIG_BAG_UNION_def] Definition
|- ∀sob. BIG_BAG_UNION sob = (λx. ∑ (λb. b x) sob)
[EL_BAG] Definition
|- ∀e. EL_BAG e = {|e|}
[EMPTY_BAG] Definition
|- {||} = K 0
[FINITE_BAG] Definition
|- ∀b.
FINITE_BAG b ⇔
∀P. P {||} ∧ (∀b. P b ⇒ ∀e. P (BAG_INSERT e b)) ⇒ P b
[ITBAG_curried_def] Definition
|- ∀f x x1. ITBAG f x x1 = ITBAG_tupled f (x,x1)
[ITBAG_tupled_primitive_def] Definition
|- ∀f.
ITBAG_tupled f =
WFREC
(@R.
WF R ∧
∀acc b.
FINITE_BAG b ∧ b ≠ {||} ⇒
R (BAG_REST b,f (BAG_CHOICE b) acc) (b,acc))
(λITBAG_tupled a.
case a of
(b,acc) =>
I
(if FINITE_BAG b then
if b = {||} then acc
else
ITBAG_tupled (BAG_REST b,f (BAG_CHOICE b) acc)
else ARB))
[PSUB_BAG] Definition
|- ∀b1 b2. b1 < b2 ⇔ b1 ≤ b2 ∧ b1 ≠ b2
[SET_OF_BAG] Definition
|- ∀b. SET_OF_BAG b = (λx. x ⋲ b)
[SING_BAG] Definition
|- ∀b. SING_BAG b ⇔ ∃x. b = {|x|}
[SUB_BAG] Definition
|- ∀b1 b2. b1 ≤ b2 ⇔ ∀x n. BAG_INN x n b1 ⇒ BAG_INN x n b2
[bag_size_def] Definition
|- ∀eltsize b.
bag_size eltsize b = ITBAG (λe acc. 1 + eltsize e + acc) b 0
[dominates_def] Definition
|- ∀R s1 s2. dominates R s1 s2 ⇔ ∀x. x ∈ s1 ⇒ ∃y. y ∈ s2 ∧ R x y
[mlt1_def] Definition
|- ∀r b1 b2.
mlt1 r b1 b2 ⇔
FINITE_BAG b1 ∧ FINITE_BAG b2 ∧
∃e rep res.
b1 = rep ⊎ res ∧ b2 = res ⊎ {|e|} ∧ ∀e'. e' ⋲ rep ⇒ r e' e
[ASSOC_BAG_UNION] Theorem
|- ∀b1 b2 b3. b1 ⊎ (b2 ⊎ b3) = b1 ⊎ b2 ⊎ b3
[BAG_ALL_DISTINCT_BAG_INN] Theorem
|- ∀b n e.
BAG_ALL_DISTINCT b ⇒ (BAG_INN e n b ⇔ n = 0 ∨ n = 1 ∧ e ⋲ b)
[BAG_ALL_DISTINCT_BAG_MERGE] Theorem
|- ∀b1 b2.
BAG_ALL_DISTINCT (BAG_MERGE b1 b2) ⇔
BAG_ALL_DISTINCT b1 ∧ BAG_ALL_DISTINCT b2
[BAG_ALL_DISTINCT_BAG_OF_SET] Theorem
|- BAG_ALL_DISTINCT (BAG_OF_SET s)
[BAG_ALL_DISTINCT_BAG_UNION] Theorem
|- ∀b1 b2.
BAG_ALL_DISTINCT (b1 ⊎ b2) ⇔
BAG_ALL_DISTINCT b1 ∧ BAG_ALL_DISTINCT b2 ∧ BAG_DISJOINT b1 b2
[BAG_ALL_DISTINCT_DELETE] Theorem
|- BAG_ALL_DISTINCT b ⇔ ∀e. e ⋲ b ⇒ ¬(e ⋲ b − {|e|})
[BAG_ALL_DISTINCT_DIFF] Theorem
|- ∀b1 b2. BAG_ALL_DISTINCT b1 ⇒ BAG_ALL_DISTINCT (b1 − b2)
[BAG_ALL_DISTINCT_EXTENSION] Theorem
|- ∀b1 b2.
BAG_ALL_DISTINCT b1 ∧ BAG_ALL_DISTINCT b2 ⇒
(b1 = b2 ⇔ ∀x. x ⋲ b1 ⇔ x ⋲ b2)
[BAG_ALL_DISTINCT_SET] Theorem
|- BAG_ALL_DISTINCT b ⇔ BAG_OF_SET (SET_OF_BAG b) = b
[BAG_ALL_DISTINCT_THM] Theorem
|- BAG_ALL_DISTINCT {||} ∧
∀e b.
BAG_ALL_DISTINCT (BAG_INSERT e b) ⇔
¬(e ⋲ b) ∧ BAG_ALL_DISTINCT b
[BAG_CARD_BAG_INN] Theorem
|- ∀b. FINITE_BAG b ⇒ ∀n e. BAG_INN e n b ⇒ n ≤ BAG_CARD b
[BAG_CARD_DIFF] Theorem
|- ∀b.
FINITE_BAG b ⇒
∀c. c ≤ b ⇒ BAG_CARD (b − c) = BAG_CARD b − BAG_CARD c
[BAG_CARD_EMPTY] Theorem
|- BAG_CARD {||} = 0
[BAG_CARD_THM] Theorem
|- BAG_CARD {||} = 0 ∧
∀b. FINITE_BAG b ⇒ ∀e. BAG_CARD (BAG_INSERT e b) = BAG_CARD b + 1
[BAG_CARD_UNION] Theorem
|- ∀b1 b2.
FINITE_BAG b1 ∧ FINITE_BAG b2 ⇒
BAG_CARD (b1 ⊎ b2) = BAG_CARD b1 + BAG_CARD b2
[BAG_CHOICE_SING] Theorem
|- BAG_CHOICE {|x|} = x
[BAG_DECOMPOSE] Theorem
|- ∀e b. e ⋲ b ⇒ ∃b'. b = BAG_INSERT e b'
[BAG_DELETE_11] Theorem
|- ∀b0 e1 e2 b1 b2.
BAG_DELETE b0 e1 b1 ∧ BAG_DELETE b0 e2 b2 ⇒ (e1 = e2 ⇔ b1 = b2)
[BAG_DELETE_BAG_IN] Theorem
|- ∀b0 b e. BAG_DELETE b0 e b ⇒ e ⋲ b0
[BAG_DELETE_BAG_IN_down] Theorem
|- ∀b0 b e1 e2. BAG_DELETE b0 e1 b ∧ e1 ≠ e2 ∧ e2 ⋲ b0 ⇒ e2 ⋲ b
[BAG_DELETE_BAG_IN_up] Theorem
|- ∀b0 b e. BAG_DELETE b0 e b ⇒ ∀e'. e' ⋲ b ⇒ e' ⋲ b0
[BAG_DELETE_EMPTY] Theorem
|- ∀e b. ¬BAG_DELETE {||} e b
[BAG_DELETE_INSERT] Theorem
|- ∀x y b1 b2.
BAG_DELETE (BAG_INSERT x b1) y b2 ⇒
x = y ∧ b1 = b2 ∨ (∃b3. BAG_DELETE b1 y b3) ∧ x ≠ y
[BAG_DELETE_PSUB_BAG] Theorem
|- ∀b0 e b. BAG_DELETE b0 e b ⇒ b < b0
[BAG_DELETE_SING] Theorem
|- ∀b e. BAG_DELETE b e {||} ⇒ SING_BAG b
[BAG_DELETE_TWICE] Theorem
|- ∀b0 e1 e2 b1 b2.
BAG_DELETE b0 e1 b1 ∧ BAG_DELETE b0 e2 b2 ∧ b1 ≠ b2 ⇒
∃b. BAG_DELETE b1 e2 b ∧ BAG_DELETE b2 e1 b
[BAG_DELETE_commutes] Theorem
|- ∀b0 b1 b2 e1 e2.
BAG_DELETE b0 e1 b1 ∧ BAG_DELETE b1 e2 b2 ⇒
∃b'. BAG_DELETE b0 e2 b' ∧ BAG_DELETE b' e1 b2
[BAG_DELETE_concrete] Theorem
|- ∀b0 b e.
BAG_DELETE b0 e b ⇔
b0 e > 0 ∧ b = (λx. if x = e then b0 e − 1 else b0 x)
[BAG_DIFF_2L] Theorem
|- ∀X Y Z. X − Y − Z = X − (Y ⊎ Z)
[BAG_DIFF_2R] Theorem
|- ∀A B C. C ≤ B ⇒ A − (B − C) = A ⊎ C − B
[BAG_DIFF_EMPTY] Theorem
|- (∀b. b − b = {||}) ∧ (∀b. b − {||} = b) ∧ (∀b. {||} − b = {||}) ∧
∀b1 b2. b1 ≤ b2 ⇒ b1 − b2 = {||}
[BAG_DIFF_EMPTY_simple] Theorem
|- (∀b. b − b = {||}) ∧ (∀b. b − {||} = b) ∧ ∀b. {||} − b = {||}
[BAG_DIFF_EQ_EMPTY] Theorem
|- b − c = {||} ⇔ b ≤ c
[BAG_DIFF_INSERT] Theorem
|- ∀x b1 b2.
¬(x ⋲ b1) ⇒ BAG_INSERT x b2 − b1 = BAG_INSERT x (b2 − b1)
[BAG_DIFF_INSERT_SUB_BAG] Theorem
|- c ≤ b ⇒ BAG_INSERT e b − c = BAG_INSERT e (b − c)
[BAG_DIFF_INSERT_same] Theorem
|- ∀x b1 b2. BAG_INSERT x b1 − BAG_INSERT x b2 = b1 − b2
[BAG_DIFF_UNION_eliminate] Theorem
|- ∀b1 b2 b3.
b1 ⊎ b2 − (b1 ⊎ b3) = b2 − b3 ∧ b1 ⊎ b2 − (b3 ⊎ b1) = b2 − b3 ∧
b2 ⊎ b1 − (b1 ⊎ b3) = b2 − b3 ∧ b2 ⊎ b1 − (b3 ⊎ b1) = b2 − b3
[BAG_DISJOINT_BAG_IN] Theorem
|- ∀b1 b2. BAG_DISJOINT b1 b2 ⇔ ∀e. ¬(e ⋲ b1) ∨ ¬(e ⋲ b2)
[BAG_DISJOINT_BAG_INSERT] Theorem
|- (∀b1 b2 e1.
BAG_DISJOINT (BAG_INSERT e1 b1) b2 ⇔
¬(e1 ⋲ b2) ∧ BAG_DISJOINT b1 b2) ∧
∀b1 b2 e2.
BAG_DISJOINT b1 (BAG_INSERT e2 b2) ⇔
¬(e2 ⋲ b1) ∧ BAG_DISJOINT b1 b2
[BAG_DISJOINT_BAG_UNION] Theorem
|- (BAG_DISJOINT b1 (b2 ⊎ b3) ⇔
BAG_DISJOINT b1 b2 ∧ BAG_DISJOINT b1 b3) ∧
(BAG_DISJOINT (b1 ⊎ b2) b3 ⇔
BAG_DISJOINT b1 b3 ∧ BAG_DISJOINT b2 b3)
[BAG_DISJOINT_DIFF] Theorem
|- ∀B1 B2. BAG_DISJOINT (B1 − B2) (B2 − B1)
[BAG_DISJOINT_EMPTY] Theorem
|- ∀b. BAG_DISJOINT b {||} ∧ BAG_DISJOINT {||} b
[BAG_EVERY_MERGE] Theorem
|- BAG_EVERY P (BAG_MERGE b1 b2) ⇔ BAG_EVERY P b1 ∧ BAG_EVERY P b2
[BAG_EVERY_SET] Theorem
|- BAG_EVERY P b ⇔ SET_OF_BAG b ⊆ {x | P x}
[BAG_EVERY_THM] Theorem
|- (∀P. BAG_EVERY P {||}) ∧
∀P e b. BAG_EVERY P (BAG_INSERT e b) ⇔ P e ∧ BAG_EVERY P b
[BAG_EVERY_UNION] Theorem
|- BAG_EVERY P (b1 ⊎ b2) ⇔ BAG_EVERY P b1 ∧ BAG_EVERY P b2
[BAG_EXTENSION] Theorem
|- ∀b1 b2. b1 = b2 ⇔ ∀n e. BAG_INN e n b1 ⇔ BAG_INN e n b2
[BAG_FILTER_BAG_INSERT] Theorem
|- BAG_FILTER P (BAG_INSERT e b) =
if P e then BAG_INSERT e (BAG_FILTER P b) else BAG_FILTER P b
[BAG_FILTER_EMPTY] Theorem
|- BAG_FILTER P {||} = {||}
[BAG_FILTER_EQ_EMPTY] Theorem
|- BAG_FILTER P b = {||} ⇔ BAG_EVERY ($~ o P) b
[BAG_FILTER_FILTER] Theorem
|- BAG_FILTER P (BAG_FILTER Q b) = BAG_FILTER (λa. P a ∧ Q a) b
[BAG_FILTER_SUB_BAG] Theorem
|- ∀P b. BAG_FILTER P b ≤ b
[BAG_GEN_PROD_ALL_ONES] Theorem
|- ∀b. FINITE_BAG b ⇒ BAG_GEN_PROD b 1 = 1 ⇒ ∀x. x ⋲ b ⇒ x = 1
[BAG_GEN_PROD_EMPTY] Theorem
|- ∀n. BAG_GEN_PROD {||} n = n
[BAG_GEN_PROD_EQ_1] Theorem
|- ∀b. FINITE_BAG b ⇒ ∀e. BAG_GEN_PROD b e = 1 ⇒ e = 1
[BAG_GEN_PROD_POSITIVE] Theorem
|- ∀b. FINITE_BAG b ⇒ (∀x. x ⋲ b ⇒ 0 < x) ⇒ 0 < BAG_GEN_PROD b 1
[BAG_GEN_PROD_REC] Theorem
|- ∀b.
FINITE_BAG b ⇒
∀x a. BAG_GEN_PROD (BAG_INSERT x b) a = x * BAG_GEN_PROD b a
[BAG_GEN_PROD_TAILREC] Theorem
|- ∀b.
FINITE_BAG b ⇒
∀x a. BAG_GEN_PROD (BAG_INSERT x b) a = BAG_GEN_PROD b (x * a)
[BAG_GEN_PROD_UNION] Theorem
|- ∀b1 b2.
FINITE_BAG b1 ∧ FINITE_BAG b2 ⇒
BAG_GEN_PROD (b1 ⊎ b2) 1 = BAG_GEN_PROD b1 1 * BAG_GEN_PROD b2 1
[BAG_GEN_PROD_UNION_LEM] Theorem
|- ∀b1.
FINITE_BAG b1 ⇒
∀b2 a b.
FINITE_BAG b2 ⇒
BAG_GEN_PROD (b1 ⊎ b2) (a * b) =
BAG_GEN_PROD b1 a * BAG_GEN_PROD b2 b
[BAG_GEN_SUM_EMPTY] Theorem
|- ∀n. BAG_GEN_SUM {||} n = n
[BAG_GEN_SUM_REC] Theorem
|- ∀b.
FINITE_BAG b ⇒
∀x a. BAG_GEN_SUM (BAG_INSERT x b) a = x + BAG_GEN_SUM b a
[BAG_GEN_SUM_TAILREC] Theorem
|- ∀b.
FINITE_BAG b ⇒
∀x a. BAG_GEN_SUM (BAG_INSERT x b) a = BAG_GEN_SUM b (x + a)
[BAG_IMAGE_COMPOSE] Theorem
|- ∀f g b.
FINITE_BAG b ⇒ BAG_IMAGE (f o g) b = BAG_IMAGE f (BAG_IMAGE g b)
[BAG_IMAGE_EMPTY] Theorem
|- ∀f. BAG_IMAGE f {||} = {||}
[BAG_IMAGE_EQ_EMPTY] Theorem
|- FINITE_BAG b ⇒ (BAG_IMAGE f b = {||} ⇔ b = {||})
[BAG_IMAGE_FINITE] Theorem
|- ∀b. FINITE_BAG b ⇒ FINITE_BAG (BAG_IMAGE f b)
[BAG_IMAGE_FINITE_I] Theorem
|- ∀b. FINITE_BAG b ⇒ BAG_IMAGE I b = b
[BAG_IMAGE_FINITE_INSERT] Theorem
|- ∀b f e.
FINITE_BAG b ⇒
BAG_IMAGE f (BAG_INSERT e b) = BAG_INSERT (f e) (BAG_IMAGE f b)
[BAG_IMAGE_FINITE_RESTRICTED_I] Theorem
|- ∀b. FINITE_BAG b ∧ BAG_EVERY (λe. f e = e) b ⇒ BAG_IMAGE f b = b
[BAG_IMAGE_FINITE_UNION] Theorem
|- ∀b1 b2 f.
FINITE_BAG b1 ∧ FINITE_BAG b2 ⇒
BAG_IMAGE f (b1 ⊎ b2) = BAG_IMAGE f b1 ⊎ BAG_IMAGE f b2
[BAG_INN_0] Theorem
|- ∀b e. BAG_INN e 0 b
[BAG_INN_BAG_DELETE] Theorem
|- ∀b n e. BAG_INN e n b ∧ n > 0 ⇒ ∃b'. BAG_DELETE b e b'
[BAG_INN_BAG_FILTER] Theorem
|- BAG_INN e n (BAG_FILTER P b) ⇔ n = 0 ∨ P e ∧ BAG_INN e n b
[BAG_INN_BAG_INSERT] Theorem
|- ∀b e1 e2.
BAG_INN e1 n (BAG_INSERT e2 b) ⇔
BAG_INN e1 (n − 1) b ∧ e1 = e2 ∨ BAG_INN e1 n b
[BAG_INN_BAG_INSERT_STRONG] Theorem
|- ∀b n e1 e2.
BAG_INN e1 n (BAG_INSERT e2 b) ⇔
BAG_INN e1 (n − 1) b ∧ e1 = e2 ∨ BAG_INN e1 n b ∧ e1 ≠ e2
[BAG_INN_BAG_MERGE] Theorem
|- ∀n e b1 b2.
BAG_INN e n (BAG_MERGE b1 b2) ⇔ BAG_INN e n b1 ∨ BAG_INN e n b2
[BAG_INN_BAG_UNION] Theorem
|- ∀n e b1 b2.
BAG_INN e n (b1 ⊎ b2) ⇔
∃m1 m2. n = m1 + m2 ∧ BAG_INN e m1 b1 ∧ BAG_INN e m2 b2
[BAG_INN_EMPTY_BAG] Theorem
|- ∀e n. BAG_INN e n {||} ⇔ n = 0
[BAG_INN_LESS] Theorem
|- ∀b e n m. BAG_INN e n b ∧ m < n ⇒ BAG_INN e m b
[BAG_INSERT_CHOICE_REST] Theorem
|- ∀b. b ≠ {||} ⇒ b = BAG_INSERT (BAG_CHOICE b) (BAG_REST b)
[BAG_INSERT_DIFF] Theorem
|- ∀x b. BAG_INSERT x b ≠ b
[BAG_INSERT_EQUAL] Theorem
|- BAG_INSERT a M = BAG_INSERT b N ⇔
M = N ∧ a = b ∨ ∃k. M = BAG_INSERT b k ∧ N = BAG_INSERT a k
[BAG_INSERT_EQ_UNION] Theorem
|- ∀e b1 b2 b. BAG_INSERT e b = b1 ⊎ b2 ⇒ e ⋲ b1 ∨ e ⋲ b2
[BAG_INSERT_NOT_EMPTY] Theorem
|- ∀x b. BAG_INSERT x b ≠ {||}
[BAG_INSERT_ONE_ONE] Theorem
|- ∀b1 b2 x. BAG_INSERT x b1 = BAG_INSERT x b2 ⇔ b1 = b2
[BAG_INSERT_SUB_BAG_E] Theorem
|- BAG_INSERT e b ≤ c ⇒ e ⋲ c ∧ b ≤ c
[BAG_INSERT_UNION] Theorem
|- ∀b e. BAG_INSERT e b = EL_BAG e ⊎ b
[BAG_INSERT_commutes] Theorem
|- ∀b e1 e2.
BAG_INSERT e1 (BAG_INSERT e2 b) =
BAG_INSERT e2 (BAG_INSERT e1 b)
[BAG_INTER_FINITE] Theorem
|- FINITE_BAG b1 ∨ FINITE_BAG b2 ⇒ FINITE_BAG (BAG_INTER b1 b2)
[BAG_INTER_SUB_BAG] Theorem
|- BAG_INTER b1 b2 ≤ b1 ∧ BAG_INTER b1 b2 ≤ b2
[BAG_IN_BAG_DELETE] Theorem
|- ∀b e. e ⋲ b ⇒ ∃b'. BAG_DELETE b e b'
[BAG_IN_BAG_DIFF_ALL_DISTINCT] Theorem
|- ∀b1 b2 e. BAG_ALL_DISTINCT b1 ⇒ (e ⋲ b1 − b2 ⇔ e ⋲ b1 ∧ ¬(e ⋲ b2))
[BAG_IN_BAG_FILTER] Theorem
|- e ⋲ BAG_FILTER P b ⇔ P e ∧ e ⋲ b
[BAG_IN_BAG_INSERT] Theorem
|- ∀b e1 e2. e1 ⋲ BAG_INSERT e2 b ⇔ e1 = e2 ∨ e1 ⋲ b
[BAG_IN_BAG_MERGE] Theorem
|- ∀e b1 b2. e ⋲ BAG_MERGE b1 b2 ⇔ e ⋲ b1 ∨ e ⋲ b2
[BAG_IN_BAG_OF_SET] Theorem
|- ∀P p. p ⋲ BAG_OF_SET P ⇔ p ∈ P
[BAG_IN_BAG_UNION] Theorem
|- ∀b1 b2 e. e ⋲ b1 ⊎ b2 ⇔ e ⋲ b1 ∨ e ⋲ b2
[BAG_IN_BIG_BAG_UNION] Theorem
|- FINITE P ⇒ (e ⋲ BIG_BAG_UNION P ⇔ ∃b. e ⋲ b ∧ b ∈ P)
[BAG_IN_DIFF_E] Theorem
|- e ⋲ b1 − b2 ⇒ e ⋲ b1
[BAG_IN_DIFF_I] Theorem
|- e ⋲ b1 ∧ ¬(e ⋲ b2) ⇒ e ⋲ b1 − b2
[BAG_IN_DIVIDES] Theorem
|- ∀b x a. FINITE_BAG b ∧ x ⋲ b ⇒ divides x (BAG_GEN_PROD b a)
[BAG_IN_FINITE_BAG_IMAGE] Theorem
|- FINITE_BAG b ⇒ (x ⋲ BAG_IMAGE f b ⇔ ∃y. f y = x ∧ y ⋲ b)
[BAG_LESS_ADD] Theorem
|- mlt1 r N (M0 ⊎ {|a|}) ⇒
(∃M. mlt1 r M M0 ∧ N = M ⊎ {|a|}) ∨
∃KK. (∀b. b ⋲ KK ⇒ r b a) ∧ N = M0 ⊎ KK
[BAG_MERGE_IDEM] Theorem
|- ∀b. BAG_MERGE b b = b
[BAG_NOT_LESS_EMPTY] Theorem
|- ¬mlt1 r b {||}
[BAG_OF_EMPTY] Theorem
|- SET_OF_BAG {||} = ∅
[BAG_REST_SING] Theorem
|- BAG_REST {|x|} = {||}
[BAG_SIZE_EMPTY] Theorem
|- bag_size eltsize {||} = 0
[BAG_SIZE_INSERT] Theorem
|- FINITE_BAG b ⇒
bag_size eltsize (BAG_INSERT e b) =
1 + eltsize e + bag_size eltsize b
[BAG_UNION_DIFF] Theorem
|- ∀X Y Z. Z ≤ Y ⇒ X ⊎ (Y − Z) = X ⊎ Y − Z ∧ Y − Z ⊎ X = X ⊎ Y − Z
[BAG_UNION_DIFF_eliminate] Theorem
|- b ⊎ c − c = b ∧ c ⊎ b − c = b
[BAG_UNION_EMPTY] Theorem
|- (∀b. b ⊎ {||} = b) ∧ (∀b. {||} ⊎ b = b) ∧
∀b1 b2. b1 ⊎ b2 = {||} ⇔ b1 = {||} ∧ b2 = {||}
[BAG_UNION_EQ_LCANCEL1] Theorem
|- b = b ⊎ c ⇔ c = {||}
[BAG_UNION_EQ_LEFT] Theorem
|- ∀b c d. b ⊎ c = b ⊎ d ⇒ c = d
[BAG_UNION_EQ_RCANCEL1] Theorem
|- b = c ⊎ b ⇔ c = {||}
[BAG_UNION_INSERT] Theorem
|- ∀e b1 b2.
BAG_INSERT e b1 ⊎ b2 = BAG_INSERT e (b1 ⊎ b2) ∧
b1 ⊎ BAG_INSERT e b2 = BAG_INSERT e (b1 ⊎ b2)
[BAG_UNION_LEFT_CANCEL] Theorem
|- ∀b b1 b2. b ⊎ b1 = b ⊎ b2 ⇔ b1 = b2
[BAG_UNION_RIGHT_CANCEL] Theorem
|- ∀b b1 b2. b1 ⊎ b = b2 ⊎ b ⇔ b1 = b2
[BAG_cases] Theorem
|- ∀b. b = {||} ∨ ∃b0 e. b = BAG_INSERT e b0
[BCARD_0] Theorem
|- ∀b. FINITE_BAG b ⇒ (BAG_CARD b = 0 ⇔ b = {||})
[BCARD_SUC] Theorem
|- ∀b.
FINITE_BAG b ⇒
∀n.
BAG_CARD b = SUC n ⇔
∃b0 e. b = BAG_INSERT e b0 ∧ BAG_CARD b0 = n
[BIG_BAG_UNION_DELETE] Theorem
|- FINITE sob ⇒
BIG_BAG_UNION (sob DELETE b) =
if b ∈ sob then BIG_BAG_UNION sob − b else BIG_BAG_UNION sob
[BIG_BAG_UNION_EMPTY] Theorem
|- BIG_BAG_UNION ∅ = {||}
[BIG_BAG_UNION_EQ_ELEMENT] Theorem
|- FINITE sob ∧ b ∈ sob ⇒
(BIG_BAG_UNION sob = b ⇔ ∀b'. b' ∈ sob ⇒ b' = b ∨ b' = {||})
[BIG_BAG_UNION_EQ_EMPTY_BAG] Theorem
|- ∀sob.
FINITE sob ⇒ (BIG_BAG_UNION sob = {||} ⇔ ∀b. b ∈ sob ⇒ b = {||})
[BIG_BAG_UNION_INSERT] Theorem
|- FINITE sob ⇒
BIG_BAG_UNION (b INSERT sob) = b ⊎ BIG_BAG_UNION (sob DELETE b)
[BIG_BAG_UNION_ITSET_BAG_UNION] Theorem
|- ∀sob. FINITE sob ⇒ BIG_BAG_UNION sob = ITSET $⊎ sob {||}
[BIG_BAG_UNION_UNION] Theorem
|- FINITE s1 ∧ FINITE s2 ⇒
BIG_BAG_UNION (s1 ∪ s2) =
BIG_BAG_UNION s1 ⊎ BIG_BAG_UNION s2 − BIG_BAG_UNION (s1 ∩ s2)
[COMMUTING_ITBAG_INSERT] Theorem
|- ∀f b.
(∀x y z. f x (f y z) = f y (f x z)) ∧ FINITE_BAG b ⇒
∀x a. ITBAG f (BAG_INSERT x b) a = ITBAG f b (f x a)
[COMMUTING_ITBAG_RECURSES] Theorem
|- ∀f e b a.
(∀x y z. f x (f y z) = f y (f x z)) ∧ FINITE_BAG b ⇒
ITBAG f (BAG_INSERT e b) a = f e (ITBAG f b a)
[COMM_BAG_UNION] Theorem
|- ∀b1 b2. b1 ⊎ b2 = b2 ⊎ b1
[C_BAG_INSERT_ONE_ONE] Theorem
|- ∀x y b. BAG_INSERT x b = BAG_INSERT y b ⇔ x = y
[EL_BAG_11] Theorem
|- ∀x y. EL_BAG x = EL_BAG y ⇒ x = y
[EL_BAG_BAG_INSERT] Theorem
|- {|x|} = BAG_INSERT y b ⇔ x = y ∧ b = {||}
[EL_BAG_INSERT_squeeze] Theorem
|- ∀x b y. EL_BAG x = BAG_INSERT y b ⇒ x = y ∧ b = {||}
[EL_BAG_SUB_BAG] Theorem
|- {|x|} ≤ b ⇔ x ⋲ b
[EMPTY_BAG_alt] Theorem
|- {||} = (λx. 0)
[FINITE_BAG_DIFF] Theorem
|- ∀b1. FINITE_BAG b1 ⇒ ∀b2. FINITE_BAG (b1 − b2)
[FINITE_BAG_DIFF_dual] Theorem
|- ∀b1. FINITE_BAG b1 ⇒ ∀b2. FINITE_BAG (b2 − b1) ⇒ FINITE_BAG b2
[FINITE_BAG_FILTER] Theorem
|- ∀b. FINITE_BAG b ⇒ FINITE_BAG (BAG_FILTER P b)
[FINITE_BAG_INDUCT] Theorem
|- ∀P.
P {||} ∧ (∀b. P b ⇒ ∀e. P (BAG_INSERT e b)) ⇒
∀b. FINITE_BAG b ⇒ P b
[FINITE_BAG_INSERT] Theorem
|- ∀b. FINITE_BAG b ⇒ ∀e. FINITE_BAG (BAG_INSERT e b)
[FINITE_BAG_THM] Theorem
|- FINITE_BAG {||} ∧ ∀e b. FINITE_BAG (BAG_INSERT e b) ⇔ FINITE_BAG b
[FINITE_BAG_UNION] Theorem
|- ∀b1 b2. FINITE_BAG (b1 ⊎ b2) ⇔ FINITE_BAG b1 ∧ FINITE_BAG b2
[FINITE_BIG_BAG_UNION] Theorem
|- ∀sob.
FINITE sob ∧ (∀b. b ∈ sob ⇒ FINITE_BAG b) ⇒
FINITE_BAG (BIG_BAG_UNION sob)
[FINITE_EMPTY_BAG] Theorem
|- FINITE_BAG {||}
[FINITE_SET_OF_BAG] Theorem
|- ∀b. FINITE (SET_OF_BAG b) ⇔ FINITE_BAG b
[FINITE_SUB_BAG] Theorem
|- ∀b1. FINITE_BAG b1 ⇒ ∀b2. b2 ≤ b1 ⇒ FINITE_BAG b2
[IN_SET_OF_BAG] Theorem
|- ∀x b. x ∈ SET_OF_BAG b ⇔ x ⋲ b
[ITBAG_EMPTY] Theorem
|- ∀f acc. ITBAG f {||} acc = acc
[ITBAG_IND] Theorem
|- ∀P.
(∀b acc.
(FINITE_BAG b ∧ b ≠ {||} ⇒
P (BAG_REST b) (f (BAG_CHOICE b) acc)) ⇒
P b acc) ⇒
∀v v1. P v v1
[ITBAG_INSERT] Theorem
|- ∀f acc.
FINITE_BAG b ⇒
ITBAG f (BAG_INSERT x b) acc =
ITBAG f (BAG_REST (BAG_INSERT x b))
(f (BAG_CHOICE (BAG_INSERT x b)) acc)
[ITBAG_THM] Theorem
|- ∀b f acc.
FINITE_BAG b ⇒
ITBAG f b acc =
if b = {||} then acc
else ITBAG f (BAG_REST b) (f (BAG_CHOICE b) acc)
[MEMBER_NOT_EMPTY] Theorem
|- ∀b. (∃x. x ⋲ b) ⇔ b ≠ {||}
[NOT_BAG_IN] Theorem
|- ∀b x. b x = 0 ⇔ ¬(x ⋲ b)
[NOT_IN_BAG_DIFF] Theorem
|- ∀x b1 b2. ¬(x ⋲ b1) ⇒ b1 − BAG_INSERT x b2 = b1 − b2
[NOT_IN_EMPTY_BAG] Theorem
|- ∀x. ¬(x ⋲ {||})
[NOT_IN_SUB_BAG_INSERT] Theorem
|- ∀b1 b2 e. ¬(e ⋲ b1) ⇒ (b1 ≤ BAG_INSERT e b2 ⇔ b1 ≤ b2)
[NOT_mlt_EMPTY] Theorem
|- ¬mlt R b {||}
[PSUB_BAG_ANTISYM] Theorem
|- ∀b1 b2. ¬(b1 < b2 ∧ b2 < b1)
[PSUB_BAG_CARD] Theorem
|- ∀b1 b2. FINITE_BAG b2 ∧ b1 < b2 ⇒ BAG_CARD b1 < BAG_CARD b2
[PSUB_BAG_IRREFL] Theorem
|- ∀b. ¬(b < b)
[PSUB_BAG_NOT_EQ] Theorem
|- ∀b1 b2. b1 < b2 ⇒ b1 ≠ b2
[PSUB_BAG_REST] Theorem
|- ∀b. b ≠ {||} ⇒ BAG_REST b < b
[PSUB_BAG_SUB_BAG] Theorem
|- ∀b1 b2. b1 < b2 ⇒ b1 ≤ b2
[PSUB_BAG_TRANS] Theorem
|- ∀b1 b2 b3. b1 < b2 ∧ b2 < b3 ⇒ b1 < b3
[SET_BAG_I] Theorem
|- ∀s. SET_OF_BAG (BAG_OF_SET s) = s
[SET_OF_BAG_DIFF_SUBSET_down] Theorem
|- ∀b1 b2. SET_OF_BAG b1 DIFF SET_OF_BAG b2 ⊆ SET_OF_BAG (b1 − b2)
[SET_OF_BAG_DIFF_SUBSET_up] Theorem
|- ∀b1 b2. SET_OF_BAG (b1 − b2) ⊆ SET_OF_BAG b1
[SET_OF_BAG_EQ_EMPTY] Theorem
|- ∀b. (∅ = SET_OF_BAG b ⇔ b = {||}) ∧ (SET_OF_BAG b = ∅ ⇔ b = {||})
[SET_OF_BAG_EQ_INSERT] Theorem
|- ∀b e s.
e INSERT s = SET_OF_BAG b ⇔
∃b0 eb.
b = eb ⊎ b0 ∧ s = SET_OF_BAG b0 ∧ (∀e'. e' ⋲ eb ⇒ e' = e) ∧
(e ∉ s ⇒ e ⋲ eb)
[SET_OF_BAG_IMAGE] Theorem
|- SET_OF_BAG (BAG_IMAGE f b) = IMAGE f (SET_OF_BAG b)
[SET_OF_BAG_INSERT] Theorem
|- ∀e b. SET_OF_BAG (BAG_INSERT e b) = e INSERT SET_OF_BAG b
[SET_OF_BAG_MERGE] Theorem
|- ∀b1 b2.
SET_OF_BAG (BAG_MERGE b1 b2) = SET_OF_BAG b1 ∪ SET_OF_BAG b2
[SET_OF_BAG_UNION] Theorem
|- ∀b1 b2. SET_OF_BAG (b1 ⊎ b2) = SET_OF_BAG b1 ∪ SET_OF_BAG b2
[SET_OF_EL_BAG] Theorem
|- ∀e. SET_OF_BAG (EL_BAG e) = {e}
[SET_OF_EMPTY] Theorem
|- BAG_OF_SET ∅ = {||}
[SING_BAG_THM] Theorem
|- ∀e. SING_BAG {|e|}
[SING_EL_BAG] Theorem
|- ∀e. SING_BAG (EL_BAG e)
[STRONG_FINITE_BAG_INDUCT] Theorem
|- ∀P.
P {||} ∧ (∀b. FINITE_BAG b ∧ P b ⇒ ∀e. P (BAG_INSERT e b)) ⇒
∀b. FINITE_BAG b ⇒ P b
[SUB_BAG_ALL_DISTINCT] Theorem
|- ∀b1 b2. BAG_ALL_DISTINCT b1 ⇒ (b1 ≤ b2 ⇔ ∀x. x ⋲ b1 ⇒ x ⋲ b2)
[SUB_BAG_ANTISYM] Theorem
|- ∀b1 b2. b1 ≤ b2 ∧ b2 ≤ b1 ⇒ b1 = b2
[SUB_BAG_BAG_DIFF] Theorem
|- ∀X Y Y' Z W. X − Y ≤ Z − W ⇒ X − (Y ⊎ Y') ≤ Z − (W ⊎ Y')
[SUB_BAG_BAG_IN] Theorem
|- ∀x b1 b2. BAG_INSERT x b1 ≤ b2 ⇒ x ⋲ b2
[SUB_BAG_CARD] Theorem
|- ∀b1 b2. FINITE_BAG b2 ∧ b1 ≤ b2 ⇒ BAG_CARD b1 ≤ BAG_CARD b2
[SUB_BAG_DIFF] Theorem
|- (∀b1 b2. b1 ≤ b2 ⇒ ∀b3. b1 − b3 ≤ b2) ∧
∀b1 b2 b3 b4.
b2 ≤ b1 ⇒ b4 ≤ b3 ⇒ (b1 − b2 ≤ b3 − b4 ⇔ b1 ⊎ b4 ≤ b2 ⊎ b3)
[SUB_BAG_DIFF_EQ] Theorem
|- ∀b1 b2. b1 ≤ b2 ⇒ b2 = b1 ⊎ (b2 − b1)
[SUB_BAG_DIFF_simple] Theorem
|- b − c ≤ b
[SUB_BAG_EL_BAG] Theorem
|- ∀e b. EL_BAG e ≤ b ⇔ e ⋲ b
[SUB_BAG_EMPTY] Theorem
|- (∀b. {||} ≤ b) ∧ ∀b. b ≤ {||} ⇔ b = {||}
[SUB_BAG_EXISTS] Theorem
|- ∀b1 b2. b1 ≤ b2 ⇔ ∃b. b2 = b1 ⊎ b
[SUB_BAG_INSERT] Theorem
|- ∀e b1 b2. BAG_INSERT e b1 ≤ BAG_INSERT e b2 ⇔ b1 ≤ b2
[SUB_BAG_INSERT_I] Theorem
|- ∀b c e. b ≤ c ⇒ b ≤ BAG_INSERT e c
[SUB_BAG_LEQ] Theorem
|- b1 ≤ b2 ⇔ ∀x. b1 x ≤ b2 x
[SUB_BAG_PSUB_BAG] Theorem
|- ∀b1 b2. b1 ≤ b2 ⇔ b1 < b2 ∨ b1 = b2
[SUB_BAG_REFL] Theorem
|- ∀b. b ≤ b
[SUB_BAG_REST] Theorem
|- ∀b. BAG_REST b ≤ b
[SUB_BAG_SET] Theorem
|- ∀b1 b2. b1 ≤ b2 ⇒ SET_OF_BAG b1 ⊆ SET_OF_BAG b2
[SUB_BAG_SING] Theorem
|- b ≤ {|e|} ⇔ b = {||} ∨ b = {|e|}
[SUB_BAG_TRANS] Theorem
|- ∀b1 b2 b3. b1 ≤ b2 ∧ b2 ≤ b3 ⇒ b1 ≤ b3
[SUB_BAG_UNION] Theorem
|- (∀b1 b2. b1 ≤ b2 ⇒ ∀b. b1 ≤ b2 ⊎ b) ∧
(∀b1 b2. b1 ≤ b2 ⇒ ∀b. b1 ≤ b ⊎ b2) ∧
(∀b1 b2 b3. b1 ≤ b2 ⊎ b3 ⇒ ∀b. b1 ≤ b2 ⊎ b ⊎ b3) ∧
(∀b1 b2 b3. b1 ≤ b2 ⊎ b3 ⇒ ∀b. b1 ≤ b ⊎ b2 ⊎ b3) ∧
(∀b1 b2 b3. b1 ≤ b3 ⊎ b2 ⇒ ∀b. b1 ≤ b3 ⊎ (b2 ⊎ b)) ∧
(∀b1 b2 b3. b1 ≤ b3 ⊎ b2 ⇒ ∀b. b1 ≤ b3 ⊎ (b ⊎ b2)) ∧
(∀b1 b2 b3 b4. b1 ≤ b3 ⇒ b2 ≤ b4 ⇒ b1 ⊎ b2 ≤ b3 ⊎ b4) ∧
(∀b1 b2 b3 b4. b1 ≤ b4 ⇒ b2 ≤ b3 ⇒ b1 ⊎ b2 ≤ b3 ⊎ b4) ∧
(∀b1 b2 b3 b4 b5.
b1 ≤ b3 ⊎ b5 ⇒ b2 ≤ b4 ⇒ b1 ⊎ b2 ≤ b3 ⊎ b4 ⊎ b5) ∧
(∀b1 b2 b3 b4 b5.
b1 ≤ b4 ⊎ b5 ⇒ b2 ≤ b3 ⇒ b1 ⊎ b2 ≤ b3 ⊎ b4 ⊎ b5) ∧
(∀b1 b2 b3 b4 b5.
b2 ≤ b3 ⊎ b5 ⇒ b1 ≤ b4 ⇒ b1 ⊎ b2 ≤ b3 ⊎ b4 ⊎ b5) ∧
(∀b1 b2 b3 b4 b5.
b2 ≤ b4 ⊎ b5 ⇒ b1 ≤ b3 ⇒ b1 ⊎ b2 ≤ b3 ⊎ b4 ⊎ b5) ∧
(∀b1 b2 b3 b4 b5.
b1 ≤ b5 ⊎ b3 ⇒ b2 ≤ b4 ⇒ b2 ⊎ b1 ≤ b5 ⊎ (b3 ⊎ b4)) ∧
(∀b1 b2 b3 b4 b5.
b1 ≤ b5 ⊎ b4 ⇒ b2 ≤ b3 ⇒ b2 ⊎ b1 ≤ b5 ⊎ (b3 ⊎ b4)) ∧
(∀b1 b2 b3 b4 b5.
b2 ≤ b5 ⊎ b3 ⇒ b1 ≤ b4 ⇒ b2 ⊎ b1 ≤ b5 ⊎ (b3 ⊎ b4)) ∧
(∀b1 b2 b3 b4 b5.
b2 ≤ b5 ⊎ b4 ⇒ b1 ≤ b3 ⇒ b2 ⊎ b1 ≤ b5 ⊎ (b3 ⊎ b4)) ∧
(∀b1 b2 b3 b4 b5.
b1 ⊎ b2 ≤ b4 ⇒ b3 ≤ b5 ⇒ b1 ⊎ b3 ⊎ b2 ≤ b4 ⊎ b5) ∧
(∀b1 b2 b3 b4 b5.
b1 ⊎ b2 ≤ b5 ⇒ b3 ≤ b4 ⇒ b1 ⊎ b3 ⊎ b2 ≤ b4 ⊎ b5) ∧
(∀b1 b2 b3 b4 b5.
b3 ⊎ b2 ≤ b4 ⇒ b1 ≤ b5 ⇒ b1 ⊎ b3 ⊎ b2 ≤ b4 ⊎ b5) ∧
(∀b1 b2 b3 b4 b5.
b3 ⊎ b2 ≤ b5 ⇒ b1 ≤ b4 ⇒ b1 ⊎ b3 ⊎ b2 ≤ b4 ⊎ b5) ∧
(∀b1 b2 b3 b4 b5.
b2 ⊎ b1 ≤ b4 ⇒ b3 ≤ b5 ⇒ b2 ⊎ (b1 ⊎ b3) ≤ b5 ⊎ b4) ∧
(∀b1 b2 b3 b4 b5.
b2 ⊎ b1 ≤ b5 ⇒ b3 ≤ b4 ⇒ b2 ⊎ (b1 ⊎ b3) ≤ b5 ⊎ b4) ∧
(∀b1 b2 b3 b4 b5.
b2 ⊎ b3 ≤ b4 ⇒ b1 ≤ b5 ⇒ b2 ⊎ (b1 ⊎ b3) ≤ b5 ⊎ b4) ∧
∀b1 b2 b3 b4 b5. b2 ⊎ b3 ≤ b5 ⇒ b1 ≤ b4 ⇒ b2 ⊎ (b1 ⊎ b3) ≤ b5 ⊎ b4
[SUB_BAG_UNION_DIFF] Theorem
|- ∀b1 b2 b3. b1 ≤ b3 ⇒ (b2 ≤ b3 − b1 ⇔ b1 ⊎ b2 ≤ b3)
[SUB_BAG_UNION_MONO] Theorem
|- (∀x y. x ≤ x ⊎ y) ∧ ∀x y. x ≤ y ⊎ x
[SUB_BAG_UNION_down] Theorem
|- ∀b1 b2 b3. b1 ⊎ b2 ≤ b3 ⇒ b1 ≤ b3 ∧ b2 ≤ b3
[SUB_BAG_UNION_eliminate] Theorem
|- ∀b1 b2 b3.
(b1 ⊎ b2 ≤ b1 ⊎ b3 ⇔ b2 ≤ b3) ∧ (b1 ⊎ b2 ≤ b3 ⊎ b1 ⇔ b2 ≤ b3) ∧
(b2 ⊎ b1 ≤ b1 ⊎ b3 ⇔ b2 ≤ b3) ∧ (b2 ⊎ b1 ≤ b3 ⊎ b1 ⇔ b2 ≤ b3)
[TC_mlt1_FINITE_BAG] Theorem
|- ∀b1 b2. mlt R b1 b2 ⇒ FINITE_BAG b1 ∧ FINITE_BAG b2
[TC_mlt1_UNION1_I] Theorem
|- ∀b2 b1.
FINITE_BAG b2 ∧ FINITE_BAG b1 ∧ b1 ≠ {||} ⇒ mlt R b2 (b1 ⊎ b2)
[TC_mlt1_UNION2_I] Theorem
|- ∀b2 b1.
FINITE_BAG b2 ∧ FINITE_BAG b1 ∧ b2 ≠ {||} ⇒ mlt R b1 (b1 ⊎ b2)
[WF_mlt1] Theorem
|- WF R ⇒ WF (mlt1 R)
[bdominates_BAG_DIFF] Theorem
|- WF R ∧ transitive R ∧ bdominates R x y ∧ FINITE_BAG i ∧ i ≤ x ∧
i ≤ y ⇒
bdominates R (x − i) (y − i)
[dominates_DIFF] Theorem
|- WF R ∧ transitive R ∧ dominates R x y ∧ FINITE i ∧ i ⊆ x ∧ i ⊆ y ⇒
dominates R (x DIFF i) (y DIFF i)
[dominates_EMPTY] Theorem
|- dominates R ∅ b
[dominates_SUBSET] Theorem
|- transitive R ∧ FINITE Y ∧ dominates R Y X ∧ X ⊆ Y ∧ X ≠ ∅ ⇒
∃x. x ∈ X ∧ R x x
[mlt1_INSERT_CANCEL] Theorem
|- WF R ⇒ (mlt1 R (BAG_INSERT e a) (BAG_INSERT e b) ⇔ mlt1 R a b)
[mlt1_all_accessible] Theorem
|- WF R ⇒ ∀M. WFP (mlt1 R) M
[mltLT_SING0] Theorem
|- mlt $< {|0|} b ⇔ FINITE_BAG b ∧ b ≠ {|0|} ∧ b ≠ {||}
[mlt_INSERT_CANCEL] Theorem
|- transitive R ∧ WF R ⇒
(mlt R (BAG_INSERT e a) (BAG_INSERT e b) ⇔ mlt R a b)
[mlt_INSERT_CANCEL_I] Theorem
|- ∀a b. mlt R a b ⇒ mlt R (BAG_INSERT e a) (BAG_INSERT e b)
[mlt_NOT_REFL] Theorem
|- WF R ⇒ ¬mlt R a a
[mlt_UNION_CANCEL_EQN] Theorem
|- WF R ⇒
(mlt R b1 (b1 ⊎ b2) ⇔ FINITE_BAG b1 ∧ FINITE_BAG b2 ∧ b2 ≠ {||}) ∧
(mlt R b1 (b2 ⊎ b1) ⇔ FINITE_BAG b1 ∧ FINITE_BAG b2 ∧ b2 ≠ {||})
[mlt_UNION_EMPTY_EQN] Theorem
|- T
[mlt_UNION_LCANCEL] Theorem
|- WF R ∧ transitive R ⇒
(mlt R (c ⊎ a) (c ⊎ b) ⇔ mlt R a b ∧ FINITE_BAG c)
[mlt_UNION_LCANCEL_I] Theorem
|- mlt R a b ∧ FINITE_BAG c ⇒ mlt R (c ⊎ a) (c ⊎ b)
[mlt_UNION_RCANCEL] Theorem
|- WF R ∧ transitive R ⇒
(mlt R (a ⊎ c) (b ⊎ c) ⇔ mlt R a b ∧ FINITE_BAG c)
[mlt_UNION_RCANCEL_I] Theorem
|- mlt R a b ∧ FINITE_BAG c ⇒ mlt R (a ⊎ c) (b ⊎ c)
[mlt_dominates_thm1] Theorem
|- transitive R ⇒
∀b1 b2.
mlt R b1 b2 ⇔
FINITE_BAG b1 ∧ FINITE_BAG b2 ∧
∃x y. x ≠ {||} ∧ x ≤ b2 ∧ b1 = b2 − x ⊎ y ∧ bdominates R y x
[mlt_dominates_thm2] Theorem
|- WF R ∧ transitive R ⇒
∀b1 b2.
mlt R b1 b2 ⇔
FINITE_BAG b1 ∧ FINITE_BAG b2 ∧
∃x y.
x ≠ {||} ∧ x ≤ b2 ∧ BAG_DISJOINT x y ∧ b1 = b2 − x ⊎ y ∧
bdominates R y x
[move_BAG_UNION_over_eq] Theorem
|- ∀X Y Z. X ⊎ Y = Z ⇒ X = Z − Y
*)
end
HOL 4, Kananaskis-10