- ADELKEY_AFUPDKEY
-
⊢ ∀ls f x y.
x ≠ y ⇒ (ADELKEY x (AFUPDKEY y f ls) = AFUPDKEY y f (ADELKEY x ls))
- ADELKEY_AFUPDKEY_same
-
⊢ ∀fd f ls. ADELKEY fd (AFUPDKEY fd f ls) = ADELKEY fd ls
- ADELKEY_unchanged
-
⊢ ∀x ls. (ADELKEY x ls = ls) ⇔ ¬MEM x (MAP FST ls)
- AFUPDKEY_ALOOKUP
-
⊢ ALOOKUP (AFUPDKEY k2 f al) k1 =
case ALOOKUP al k1 of
NONE => NONE
| SOME v => if k1 = k2 then SOME (f v) else SOME v
- AFUPDKEY_I
-
⊢ AFUPDKEY n I = I
- AFUPDKEY_comm
-
⊢ ∀k1 k2 f1 f2 l.
k1 ≠ k2 ⇒
(AFUPDKEY k2 f2 (AFUPDKEY k1 f1 l) = AFUPDKEY k1 f1 (AFUPDKEY k2 f2 l))
- AFUPDKEY_def
-
⊢ (∀k f. AFUPDKEY k f [] = []) ∧
∀v rest k' k f.
AFUPDKEY k f ((k',v)::rest) =
if k = k' then (k,f v)::rest else (k',v)::AFUPDKEY k f rest
- AFUPDKEY_eq
-
⊢ ∀k f1 l f2.
(∀v. (ALOOKUP l k = SOME v) ⇒ (f1 v = f2 v)) ⇒
(AFUPDKEY k f1 l = AFUPDKEY k f2 l)
- AFUPDKEY_ind
-
⊢ ∀P. (∀k f. P k f []) ∧
(∀k f k' v rest. (k ≠ k' ⇒ P k f rest) ⇒ P k f ((k',v)::rest)) ⇒
∀v v1 v2. P v v1 v2
- AFUPDKEY_o
-
⊢ AFUPDKEY k f1 (AFUPDKEY k f2 al) = AFUPDKEY k (f1 ∘ f2) al
- AFUPDKEY_unchanged
-
⊢ ∀k f alist.
(∀v. (ALOOKUP alist k = SOME v) ⇒ (f v = v)) ⇒
(AFUPDKEY k f alist = alist)
- ALL_DISTINCT_FEVERY_alist_to_fmap
-
⊢ ALL_DISTINCT (MAP FST ls) ⇒ (FEVERY P (alist_to_fmap ls) ⇔ EVERY P ls)
- ALL_DISTINCT_fmap_to_alist_keys
-
⊢ ∀fm. ALL_DISTINCT (MAP FST (fmap_to_alist fm))
- ALOOKUP_ADELKEY
-
⊢ ∀al. ALOOKUP (ADELKEY k1 al) k2 = if k1 = k2 then NONE else ALOOKUP al k2
- ALOOKUP_ALL_DISTINCT_EL
-
⊢ ∀ls n.
n < LENGTH ls ∧ ALL_DISTINCT (MAP FST ls) ⇒
(ALOOKUP ls (FST (EL n ls)) = SOME (SND (EL n ls)))
- ALOOKUP_ALL_DISTINCT_MEM
-
⊢ ALL_DISTINCT (MAP FST al) ∧ MEM (k,v) al ⇒ (ALOOKUP al k = SOME v)
- ALOOKUP_ALL_DISTINCT_PERM_same
-
⊢ ∀l1 l2.
ALL_DISTINCT (MAP FST l1) ∧ PERM (MAP FST l1) (MAP FST l2) ∧
(LIST_TO_SET l1 = LIST_TO_SET l2) ⇒
(ALOOKUP l1 = ALOOKUP l2)
- ALOOKUP_APPEND
-
⊢ ∀l1 l2 k.
ALOOKUP (l1 ++ l2) k =
case ALOOKUP l1 k of NONE => ALOOKUP l2 k | SOME v => SOME v
- ALOOKUP_APPEND_same
-
⊢ ∀l1 l2 l.
(ALOOKUP l1 = ALOOKUP l2) ⇒ (ALOOKUP (l1 ++ l) = ALOOKUP (l2 ++ l))
- ALOOKUP_EQ_FLOOKUP
-
⊢ (FLOOKUP (alist_to_fmap al) = ALOOKUP al) ∧
(ALOOKUP (fmap_to_alist fm) = FLOOKUP fm)
- ALOOKUP_FAILS
-
⊢ (ALOOKUP l x = NONE) ⇔ ∀k v. MEM (k,v) l ⇒ k ≠ x
- ALOOKUP_FILTER
-
⊢ ∀ls x.
ALOOKUP (FILTER (λ(k,v). P k) ls) x = if P x then ALOOKUP ls x else NONE
- ALOOKUP_IN_FRANGE
-
⊢ ∀ls k v. (ALOOKUP ls k = SOME v) ⇒ v ∈ FRANGE (alist_to_fmap ls)
- ALOOKUP_LEAST_EL
-
⊢ ∀ls k.
ALOOKUP ls k =
if MEM k (MAP FST ls) then
SOME (EL (LEAST n. EL n (MAP FST ls) = k) (MAP SND ls))
else NONE
- ALOOKUP_MAP
-
⊢ ∀f al. ALOOKUP (MAP (λ(x,y). (x,f y)) al) = OPTION_MAP f ∘ ALOOKUP al
- ALOOKUP_MAP_2
-
⊢ ∀f al x.
ALOOKUP (MAP (λ(x,y). (x,f x y)) al) x = OPTION_MAP (f x) (ALOOKUP al x)
- ALOOKUP_MEM
-
⊢ ∀al k v. (ALOOKUP al k = SOME v) ⇒ MEM (k,v) al
- ALOOKUP_NONE
-
⊢ ∀l x. (ALOOKUP l x = NONE) ⇔ ¬MEM x (MAP FST l)
- ALOOKUP_SOME_FAPPLY_alist_to_fmap
-
⊢ ∀al k v. (ALOOKUP al k = SOME v) ⇒ (alist_to_fmap al ' k = v)
- ALOOKUP_TABULATE
-
⊢ MEM x l ⇒ (ALOOKUP (MAP (λk. (k,f k)) l) x = SOME (f x))
- ALOOKUP_ZIP_MAP_SND
-
⊢ ∀l1 l2 k f.
(LENGTH l1 = LENGTH l2) ⇒
(ALOOKUP (ZIP (l1,MAP f l2)) = OPTION_MAP f ∘ ALOOKUP (ZIP (l1,l2)))
- ALOOKUP_def
-
⊢ (∀q. ALOOKUP [] q = NONE) ∧
∀y x t q. ALOOKUP ((x,y)::t) q = if x = q then SOME y else ALOOKUP t q
- ALOOKUP_ind
-
⊢ ∀P. (∀q. P [] q) ∧ (∀x y t q. (x ≠ q ⇒ P t q) ⇒ P ((x,y)::t) q) ⇒
∀v v1. P v v1
- ALOOKUP_prefix
-
⊢ ∀ls k ls2.
((ALOOKUP ls k = SOME v) ⇒ (ALOOKUP (ls ++ ls2) k = SOME v)) ∧
((ALOOKUP ls k = NONE) ⇒ (ALOOKUP (ls ++ ls2) k = ALOOKUP ls2 k))
- FDOM_alist_to_fmap
-
⊢ ∀al. FDOM (alist_to_fmap al) = LIST_TO_SET (MAP FST al)
- FEVERY_alist_to_fmap
-
⊢ EVERY P ls ⇒ FEVERY P (alist_to_fmap ls)
- FLOOKUP_FUPDATE_LIST_ALOOKUP_NONE
-
⊢ (ALOOKUP ls k = NONE) ⇒ (FLOOKUP (fm |++ REVERSE ls) k = FLOOKUP fm k)
- FLOOKUP_FUPDATE_LIST_ALOOKUP_SOME
-
⊢ (ALOOKUP ls k = SOME v) ⇒ (FLOOKUP (fm |++ REVERSE ls) k = SOME v)
- FRANGE_alist_to_fmap_SUBSET
-
⊢ FRANGE (alist_to_fmap ls) ⊆ IMAGE SND (LIST_TO_SET ls)
- FUNION_alist_to_fmap
-
⊢ ∀ls fm. alist_to_fmap ls FUNION fm = fm |++ REVERSE ls
- FUPDATE_LIST_EQ_APPEND_REVERSE
-
⊢ ∀ls fm. fm |++ ls = alist_to_fmap (REVERSE ls ++ fmap_to_alist fm)
- IN_FRANGE_alist_to_fmap_suff
-
⊢ (∀v. MEM v (MAP SND ls) ⇒ P v) ⇒ ∀v. v ∈ FRANGE (alist_to_fmap ls) ⇒ P v
- LENGTH_AFUPDKEY
-
⊢ ∀ls. LENGTH (AFUPDKEY k f ls) = LENGTH ls
- LENGTH_fmap_to_alist
-
⊢ ∀fm. LENGTH (fmap_to_alist fm) = CARD (FDOM fm)
- MAP_FST_AFUPDKEY
-
⊢ MAP FST (AFUPDKEY f k alist) = MAP FST alist
- MAP_KEYS_I
-
⊢ ∀fm. MAP_KEYS I fm = fm
- MAP_values_fmap_to_alist
-
⊢ ∀f fm. MAP (λ(k,v). (k,f v)) (fmap_to_alist fm) = fmap_to_alist (f o_f fm)
- MEM_ADELKEY
-
⊢ ∀al. MEM (k1,v) (ADELKEY k2 al) ⇔ k1 ≠ k2 ∧ MEM (k1,v) al
- MEM_fmap_to_alist
-
⊢ MEM (x,y) (fmap_to_alist fm) ⇔ x ∈ FDOM fm ∧ (fm ' x = y)
- MEM_fmap_to_alist_FLOOKUP
-
⊢ ∀p fm. MEM p (fmap_to_alist fm) ⇔ (FLOOKUP fm (FST p) = SOME (SND p))
- MEM_pair_fmap_to_alist_FLOOKUP
-
⊢ ∀x y fm. MEM (x,y) (fmap_to_alist fm) ⇔ (FLOOKUP fm x = SOME y)
- PERM_fmap_to_alist
-
⊢ PERM (fmap_to_alist fm1) (fmap_to_alist fm2) ⇔ (fm1 = fm2)
- alist_to_fmap_APPEND
-
⊢ ∀l1 l2. alist_to_fmap (l1 ++ l2) = alist_to_fmap l1 FUNION alist_to_fmap l2
- alist_to_fmap_FAPPLY_MEM
-
⊢ ∀al z. z ∈ FDOM (alist_to_fmap al) ⇒ MEM (z,alist_to_fmap al ' z) al
- alist_to_fmap_MAP
-
⊢ ∀f1 f2 al.
INJ f1 (LIST_TO_SET (MAP FST al)) 𝕌(:β) ⇒
(alist_to_fmap (MAP (λ(x,y). (f1 x,f2 y)) al) =
MAP_KEYS f1 (f2 o_f alist_to_fmap al))
- alist_to_fmap_MAP_matchable
-
⊢ ∀f1 f2 al mal v.
INJ f1 (LIST_TO_SET (MAP FST al)) 𝕌(:β) ∧
(mal = MAP (λ(x,y). (f1 x,f2 y)) al) ∧
(v = MAP_KEYS f1 (f2 o_f alist_to_fmap al)) ⇒
(alist_to_fmap mal = v)
- alist_to_fmap_MAP_values
-
⊢ ∀f al. alist_to_fmap (MAP (λ(k,v). (k,f v)) al) = f o_f alist_to_fmap al
- alist_to_fmap_PERM
-
⊢ ∀l1 l2.
PERM l1 l2 ∧ ALL_DISTINCT (MAP FST l1) ⇒
(alist_to_fmap l1 = alist_to_fmap l2)
- alist_to_fmap_prefix
-
⊢ ∀ls l1 l2.
(alist_to_fmap l1 = alist_to_fmap l2) ⇒
(alist_to_fmap (ls ++ l1) = alist_to_fmap (ls ++ l2))
- alist_to_fmap_thm
-
⊢ (alist_to_fmap [] = FEMPTY) ∧
(alist_to_fmap ((k,v)::t) = alist_to_fmap t |+ (k,v))
- alist_to_fmap_to_alist
-
⊢ ∀al.
fmap_to_alist (alist_to_fmap al) =
MAP (λk. (k,THE (ALOOKUP al k))) (SET_TO_LIST (LIST_TO_SET (MAP FST al)))
- alist_to_fmap_to_alist_PERM
-
⊢ ∀al. ALL_DISTINCT (MAP FST al) ⇒ PERM (fmap_to_alist (alist_to_fmap al)) al
- alookup_distinct_reverse
-
⊢ ∀l k. ALL_DISTINCT (MAP FST l) ⇒ (ALOOKUP (REVERSE l) k = ALOOKUP l k)
- alookup_filter
-
⊢ ∀f l x. ALOOKUP l x = ALOOKUP (FILTER (λ(x',y). x = x') l) x
- alookup_stable_sorted
-
⊢ ∀R sort x l.
transitive R ∧ total R ∧ STABLE sort (inv_image R FST) ⇒
(ALOOKUP (sort (inv_image R FST) l) x = ALOOKUP l x)
- flookup_fupdate_list
-
⊢ ∀l k m.
FLOOKUP (m |++ l) k =
case ALOOKUP (REVERSE l) k of NONE => FLOOKUP m k | SOME v => SOME v
- fmap_to_alist_FEMPTY
-
⊢ fmap_to_alist FEMPTY = []
- fmap_to_alist_inj
-
⊢ ∀f1 f2. (fmap_to_alist f1 = fmap_to_alist f2) ⇒ (f1 = f2)
- fmap_to_alist_preserves_FDOM
-
⊢ ∀fm1 fm2.
(FDOM fm1 = FDOM fm2) ⇒
(MAP FST (fmap_to_alist fm1) = MAP FST (fmap_to_alist fm2))
- fmap_to_alist_to_fmap
-
⊢ alist_to_fmap (fmap_to_alist fm) = fm
- fupdate_list_funion
-
⊢ ∀m l. m |++ l = FEMPTY |++ l FUNION m
- mem_to_flookup
-
⊢ ∀x y l.
ALL_DISTINCT (MAP FST l) ∧ MEM (x,y) l ⇒
(FLOOKUP (FEMPTY |++ l) x = SOME y)
- set_MAP_FST_fmap_to_alist
-
⊢ LIST_TO_SET (MAP FST (fmap_to_alist fm)) = FDOM fm