Theory "container"

Parents     bag list

Signature

Constant Type
LIST_TO_SET :'a list -> 'a -> bool
BAG_TO_LIST :('a -> num) -> 'a list
SET_TO_LIST :('a -> bool) -> 'a list
LIST_TO_BAG :'a list -> 'a -> num

Definitions

SET_TO_LIST_primitive
|- SET_TO_LIST =
   WFREC (@R. WF R /\ !s. FINITE s /\ ~(s = {}) ==> R (REST s) s)
     (\SET_TO_LIST' a.
        (if FINITE a then
           (if a = {} then [] else CHOICE a::SET_TO_LIST' (REST a))
         else
           ARB))
LIST_TO_SET
|- (LIST_TO_SET [] = {}) /\ !h t. LIST_TO_SET (h::t) = h INSERT LIST_TO_SET t
LIST_TO_BAG
|- (LIST_TO_BAG [] = {||}) /\
   !h t. LIST_TO_BAG (h::t) = BAG_INSERT h (LIST_TO_BAG t)
BAG_TO_LIST_primitive
|- BAG_TO_LIST =
   WFREC
     (@R.
        WF R /\
        !bag. FINITE_BAG bag /\ ~(bag = {||}) ==> R (BAG_REST bag) bag)
     (\BAG_TO_LIST' a.
        (if FINITE_BAG a then
           (if a = {||} then [] else BAG_CHOICE a::BAG_TO_LIST' (BAG_REST a))
         else
           ARB))


Theorems

SET_TO_LIST_THM
|- FINITE s ==>
   (SET_TO_LIST s = (if s = {} then [] else CHOICE s::SET_TO_LIST (REST s)))
SET_TO_LIST_IND
|- !P. (!s. (FINITE s /\ ~(s = {}) ==> P (REST s)) ==> P s) ==> !v. P v
SET_TO_LIST_INV
|- !s. FINITE s ==> (LIST_TO_SET (SET_TO_LIST s) = s)
SET_TO_LIST_CARD
|- !s. FINITE s ==> (LENGTH (SET_TO_LIST s) = CARD s)
SET_TO_LIST_IN_MEM
|- !s. FINITE s ==> !x. x IN s = IS_EL x (SET_TO_LIST s)
UNION_APPEND
|- !l1 l2. LIST_TO_SET l1 UNION LIST_TO_SET l2 = LIST_TO_SET (APPEND l1 l2)
BAG_TO_LIST_THM
|- FINITE_BAG bag ==>
   (BAG_TO_LIST bag =
    (if bag = {||} then [] else BAG_CHOICE bag::BAG_TO_LIST (BAG_REST bag)))
BAG_TO_LIST_IND
|- !P.
     (!bag.
        (FINITE_BAG bag /\ ~(bag = {||}) ==> P (BAG_REST bag)) ==> P bag) ==>
     !v. P v
BAG_TO_LIST_INV
|- !b. FINITE_BAG b ==> (LIST_TO_BAG (BAG_TO_LIST b) = b)
BAG_TO_LIST_CARD
|- !b. FINITE_BAG b ==> (LENGTH (BAG_TO_LIST b) = BAG_CARD b)
BAG_IN_MEM
|- !b. FINITE_BAG b ==> !x. BAG_IN x b = IS_EL x (BAG_TO_LIST b)