- DISJ_EQ_IMP
-
⊢ P ∨ Q ⇔ ¬P ⇒ Q
- HD_APPEND
-
⊢ HD (xs ++ ys) = if xs = [] then HD ys else HD xs
- HD_MAP
-
⊢ xs ≠ [] ⇒ (HD (MAP f xs) = f (HD xs))
- HD_MEM
-
⊢ xs ≠ [] ⇒ MEM (HD xs) xs
- LAST_APPEND
-
⊢ LAST (xs ++ ys) = if ys = [] then LAST xs else LAST ys
- alist_repr_choice_trans_left
-
⊢ sorted_alist_repr R al f ∧
sorted_alist_repr R al' (option_choice_f (ALOOKUP al) g) ⇒
sorted_alist_repr R al' (option_choice_f f g)
- alist_repr_refl
-
⊢ ∀al.
irreflexive R ∧ transitive R ⇒
SORTED R (MAP FST al) ⇒
sorted_alist_repr R al (ALOOKUP al)
- alookup_append_option_choice_f
-
⊢ ALOOKUP (xs ++ ys) = option_choice_f (ALOOKUP xs) (ALOOKUP ys)
- alookup_empty_option_choice_f
-
⊢ (option_choice_f (ALOOKUP []) f = f) ∧ (option_choice_f f (ALOOKUP []) = f)
- alookup_to_option_choice
-
⊢ (ALOOKUP (x::y::zs) = option_choice_f (ALOOKUP [x]) (ALOOKUP (y::zs))) ∧
(option_choice_f (ALOOKUP []) g = g)
- balance_l
-
⊢ count_append i xs (count_append j ys zs) =
count_append ARB (count_append ARB xs ys) zs
- balance_r
-
⊢ count_append i (count_append j xs ys) zs =
count_append ARB xs (count_append ARB ys zs)
- count_append_HD_LAST
-
⊢ (HD (count_append i (count_append j xs ys) zs) =
HD (count_append 0 xs (count_append 0 ys zs))) ∧
(HD (count_append i (x::xs) ys) = x) ∧ (HD (count_append i [] ys) = HD ys) ∧
(LAST (count_append i xs (count_append j ys zs)) =
LAST (count_append 0 (count_append 0 xs ys) zs)) ∧
(LAST (count_append i xs (y::ys)) = LAST (y::ys)) ∧
(LAST (count_append i xs []) = LAST xs) ∧ (HD (x::xs) = x) ∧
(LAST (x::y::zs) = LAST (y::zs)) ∧ (LAST [x] = x) ∧
((count_append i (count_append j xs ys) zs = []) ⇔
(count_append 0 xs (count_append 0 ys zs) = [])) ∧
((count_append i [] ys = []) ⇔ (ys = [])) ∧
((count_append i (x::xs) ys = []) ⇔ F) ∧ ((x::xs = []) ⇔ F)
- empty_is_ALOOKUP
-
⊢ (λx. NONE) = ALOOKUP []
- insert_fl_R
-
⊢ is_insert fl fr R k x al al' ⇒
fl ⇒
SORTED R (MAP FST al) ⇒
irreflexive R ∧ transitive R ⇒
(k = FST (HD al)) ∨ R (HD (MAP FST al)) k
- insert_fl_R_append
-
⊢ is_insert T fr R k x r r' ⇒
SORTED R (MAP FST (l ++ r)) ⇒
irreflexive R ∧ transitive R ⇒
¬MEM k (MAP FST l)
- is_insert_centre
-
⊢ ∀R n k x.
l ≠ [] ⇒
R (FST (LAST l)) k ⇒
r ≠ [] ⇒
R k (FST (HD r)) ⇒
is_insert T T R k x (count_append n l r)
(count_append ARB l (count_append ARB [(k,x)] r))
- is_insert_centre_rule
-
⊢ (fl ⇒ l ≠ []) ⇒
(l ≠ [] ⇒ R (FST (LAST l)) k) ⇒
(fr ⇒ r ≠ []) ⇒
(r ≠ [] ⇒ R k (FST (HD r))) ⇒
is_insert fl fr R k x (count_append n l r)
(count_append ARB l (count_append ARB [(k,x)] r))
- is_insert_far_left
-
⊢ ∀R k x xs.
xs ≠ [] ⇒
R k (FST (HD xs)) ⇒
is_insert F T R k x xs (count_append ARB [(k,x)] xs)
- is_insert_far_right
-
⊢ ∀R k x xs.
xs ≠ [] ⇒
R (FST (LAST xs)) k ⇒
is_insert T F R k x xs (count_append ARB xs [(k,x)])
- is_insert_l
-
⊢ ∀n. is_insert fl T R k x l l' ⇒
is_insert fl T R k x (count_append n l r) (count_append ARB l' r)
- is_insert_overwrite
-
⊢ ∀R k x v. (FST v = k) ⇒ is_insert T T R k x [v] [(k,x)]
- is_insert_r
-
⊢ ∀n. is_insert T fr R k x r r' ⇒
is_insert T fr R k x (count_append n l r) (count_append ARB l r')
- is_insert_to_empty
-
⊢ ∀R k x. is_insert F F R k x [] [(k,x)]
- is_lookup_centre
-
⊢ ∀R n l r k.
l ≠ [] ⇒
R (FST (LAST l)) k ⇒
r ≠ [] ⇒
R k (FST (HD r)) ⇒
is_lookup T T R (count_append n l r) k NONE
- is_lookup_empty
-
⊢ ∀R k al. (al = []) ⇒ is_lookup F F R al k NONE
- is_lookup_far_left
-
⊢ ∀R k k' v. R k k' ⇒ is_lookup F T R [(k',v)] k NONE
- is_lookup_far_right
-
⊢ ∀R k k' v. R k' k ⇒ is_lookup T F R [(k',v)] k NONE
- is_lookup_hit
-
⊢ ∀R k k' v. (k' = k) ⇒ is_lookup T T R [(k',v)] k (SOME v)
- is_lookup_l
-
⊢ ∀n. is_lookup fl T R l x res ⇒ is_lookup fl T R (count_append n l r) x res
- is_lookup_r
-
⊢ ∀n. is_lookup T fr R r x res ⇒ is_lookup T fr R (count_append n l r) x res
- lookup_repr
-
⊢ sorted_alist_repr R al f ∧ is_lookup fl fr R al x r ⇒ (f x = r)
- option_choice_f_assoc
-
⊢ option_choice_f (option_choice_f f g) h =
option_choice_f f (option_choice_f g h)
- repr_insert
-
⊢ sorted_alist_repr R al f ∧ is_insert fl fr R k x al al' ⇒
sorted_alist_repr R al' (option_choice_f (ALOOKUP [(k,x)]) f)
- set_count
-
⊢ ∀j. count_append i xs ys = count_append j xs ys
- sorted_fst_insert_centre
-
⊢ ∀k. SORTED R (MAP FST l ++ MAP FST r) ⇒
(l ≠ [] ⇒ R (FST (LAST l)) k) ⇒
(r ≠ [] ⇒ R k (FST (HD r))) ⇒
SORTED R (MAP FST l ++ k::MAP FST r)