Structure containerTheory


Source File Identifier index Theory binding index

signature containerTheory =
sig
  type thm = Thm.thm

  (*  Definitions  *)
    val BAG_OF_FMAP_def : thm
    val BAG_TO_LIST_primitive_def : thm
    val LIST_TO_BAG_def : thm
    val mlt_list_def : thm

  (*  Theorems  *)
    val BAG_IN_BAG_OF_FMAP : thm
    val BAG_IN_MEM : thm
    val BAG_OF_FMAP_THM : thm
    val BAG_TO_LIST_CARD : thm
    val BAG_TO_LIST_EQ_NIL : thm
    val BAG_TO_LIST_IND : thm
    val BAG_TO_LIST_INV : thm
    val BAG_TO_LIST_THM : thm
    val CARD_LIST_TO_BAG : thm
    val EVERY_LIST_TO_BAG : thm
    val FINITE_BAG_OF_FMAP : thm
    val FINITE_LIST_TO_BAG : thm
    val FINITE_LIST_TO_SET : thm
    val IN_LIST_TO_BAG : thm
    val LIST_ELEM_COUNT_LIST_TO_BAG : thm
    val LIST_TO_BAG_APPEND : thm
    val LIST_TO_BAG_DISTINCT : thm
    val LIST_TO_BAG_EQ_EMPTY : thm
    val LIST_TO_BAG_FILTER : thm
    val LIST_TO_BAG_MAP : thm
    val LIST_TO_BAG_alt : thm
    val LIST_TO_SET_APPEND : thm
    val LIST_TO_SET_THM : thm
    val MEM_BAG_TO_LIST : thm
    val MEM_SET_TO_LIST : thm
    val PERM_LIST_TO_BAG : thm
    val SET_TO_LIST_CARD : thm
    val SET_TO_LIST_IND : thm
    val SET_TO_LIST_INV : thm
    val SET_TO_LIST_IN_MEM : thm
    val SET_TO_LIST_SING : thm
    val SET_TO_LIST_THM : thm
    val UNION_APPEND : thm
    val WF_mlt_list : thm

  val container_grammars : type_grammar.grammar * term_grammar.grammar
(*
   [bag] Parent theory of "container"

   [finite_map] Parent theory of "container"

   [BAG_OF_FMAP_def]  Definition

      |- ∀f b.
           BAG_OF_FMAP f b =
           (λx. CARD (λk. k ∈ FDOM b ∧ (x = f k (b ' k))))

   [BAG_TO_LIST_primitive_def]  Definition

      |- BAG_TO_LIST =
         WFREC
           (@R.
              WF R ∧
              ∀bag. FINITE_BAG bag ∧ bag ≠ {||} ⇒ R (BAG_REST bag) bag)
           (λBAG_TO_LIST bag.
              I
                (if FINITE_BAG bag then
                   if bag = {||} then []
                   else BAG_CHOICE bag::BAG_TO_LIST (BAG_REST bag)
                 else ARB))

   [LIST_TO_BAG_def]  Definition

      |- (LIST_TO_BAG [] = {||}) ∧
         ∀h t. LIST_TO_BAG (h::t) = BAG_INSERT h (LIST_TO_BAG t)

   [mlt_list_def]  Definition

      |- ∀R.
           mlt_list R =
           (λl1 l2.
              ∃h t list.
                (l1 = list ++ t) ∧ (l2 = h::t) ∧ ∀e. MEM e list ⇒ R e h)

   [BAG_IN_BAG_OF_FMAP]  Theorem

      |- ∀x f b. x ⋲ BAG_OF_FMAP f b ⇔ ∃k. k ∈ FDOM b ∧ (x = f k (b ' k))

   [BAG_IN_MEM]  Theorem

      |- ∀b. FINITE_BAG b ⇒ ∀x. x ⋲ b ⇔ MEM x (BAG_TO_LIST b)

   [BAG_OF_FMAP_THM]  Theorem

      |- (∀f. BAG_OF_FMAP f FEMPTY = {||}) ∧
         ∀f b k v.
           BAG_OF_FMAP f (b |+ (k,v)) =
           BAG_INSERT (f k v) (BAG_OF_FMAP f (b \\ k))

   [BAG_TO_LIST_CARD]  Theorem

      |- ∀b. FINITE_BAG b ⇒ (LENGTH (BAG_TO_LIST b) = BAG_CARD b)

   [BAG_TO_LIST_EQ_NIL]  Theorem

      |- FINITE_BAG b ⇒
         (([] = BAG_TO_LIST b) ⇔ (b = {||})) ∧
         ((BAG_TO_LIST b = []) ⇔ (b = {||}))

   [BAG_TO_LIST_IND]  Theorem

      |- ∀P.
           (∀bag.
              (FINITE_BAG bag ∧ bag ≠ {||} ⇒ P (BAG_REST bag)) ⇒ P bag) ⇒
           ∀v. P v

   [BAG_TO_LIST_INV]  Theorem

      |- ∀b. FINITE_BAG b ⇒ (LIST_TO_BAG (BAG_TO_LIST b) = b)

   [BAG_TO_LIST_THM]  Theorem

      |- FINITE_BAG bag ⇒
         (BAG_TO_LIST bag =
          if bag = {||} then []
          else BAG_CHOICE bag::BAG_TO_LIST (BAG_REST bag))

   [CARD_LIST_TO_BAG]  Theorem

      |- BAG_CARD (LIST_TO_BAG ls) = LENGTH ls

   [EVERY_LIST_TO_BAG]  Theorem

      |- BAG_EVERY P (LIST_TO_BAG ls) ⇔ EVERY P ls

   [FINITE_BAG_OF_FMAP]  Theorem

      |- ∀f b. FINITE_BAG (BAG_OF_FMAP f b)

   [FINITE_LIST_TO_BAG]  Theorem

      |- FINITE_BAG (LIST_TO_BAG ls)

   [FINITE_LIST_TO_SET]  Theorem

      |- ∀l. FINITE (set l)

   [IN_LIST_TO_BAG]  Theorem

      |- ∀h l. h ⋲ LIST_TO_BAG l ⇔ MEM h l

   [LIST_ELEM_COUNT_LIST_TO_BAG]  Theorem

      |- LIST_ELEM_COUNT e ls = LIST_TO_BAG ls e

   [LIST_TO_BAG_APPEND]  Theorem

      |- ∀l1 l2. LIST_TO_BAG (l1 ++ l2) = LIST_TO_BAG l1 ⊎ LIST_TO_BAG l2

   [LIST_TO_BAG_DISTINCT]  Theorem

      |- BAG_ALL_DISTINCT (LIST_TO_BAG b) ⇔ ALL_DISTINCT b

   [LIST_TO_BAG_EQ_EMPTY]  Theorem

      |- ∀l. (LIST_TO_BAG l = {||}) ⇔ (l = [])

   [LIST_TO_BAG_FILTER]  Theorem

      |- LIST_TO_BAG (FILTER f b) = BAG_FILTER f (LIST_TO_BAG b)

   [LIST_TO_BAG_MAP]  Theorem

      |- LIST_TO_BAG (MAP f b) = BAG_IMAGE f (LIST_TO_BAG b)

   [LIST_TO_BAG_alt]  Theorem

      |- ∀l x. LIST_TO_BAG l x = LENGTH (FILTER ($= x) l)

   [LIST_TO_SET_APPEND]  Theorem

      |- ∀l1 l2. set (l1 ++ l2) = set l1 ∪ set l2

   [LIST_TO_SET_THM]  Theorem

      |- (set [] = ∅) ∧ (set (h::t) = h INSERT set t)

   [MEM_BAG_TO_LIST]  Theorem

      |- ∀b. FINITE_BAG b ⇒ ∀x. MEM x (BAG_TO_LIST b) ⇔ x ⋲ b

   [MEM_SET_TO_LIST]  Theorem

      |- ∀s. FINITE s ⇒ ∀x. MEM x (SET_TO_LIST s) ⇔ x ∈ s

   [PERM_LIST_TO_BAG]  Theorem

      |- ∀l1 l2. (LIST_TO_BAG l1 = LIST_TO_BAG l2) ⇔ PERM l1 l2

   [SET_TO_LIST_CARD]  Theorem

      |- ∀s. FINITE s ⇒ (LENGTH (SET_TO_LIST s) = CARD s)

   [SET_TO_LIST_IND]  Theorem

      |- ∀P. (∀s. (FINITE s ∧ s ≠ ∅ ⇒ P (REST s)) ⇒ P s) ⇒ ∀v. P v

   [SET_TO_LIST_INV]  Theorem

      |- ∀s. FINITE s ⇒ (set (SET_TO_LIST s) = s)

   [SET_TO_LIST_IN_MEM]  Theorem

      |- ∀s. FINITE s ⇒ ∀x. x ∈ s ⇔ MEM x (SET_TO_LIST s)

   [SET_TO_LIST_SING]  Theorem

      |- SET_TO_LIST {x} = [x]

   [SET_TO_LIST_THM]  Theorem

      |- FINITE s ⇒
         (SET_TO_LIST s =
          if s = ∅ then [] else CHOICE s::SET_TO_LIST (REST s))

   [UNION_APPEND]  Theorem

      |- ∀l1 l2. set l1 ∪ set l2 = set (l1 ++ l2)

   [WF_mlt_list]  Theorem

      |- ∀R. WF R ⇒ WF (mlt_list R)


*)
end


Source File Identifier index Theory binding index

HOL 4, Kananaskis-11