Theory "finite_map"

Parents     pair one numeral sum

Signature

Type Arity
fmap 2
Constant Type
FEMPTY :'a |-> 'b
FUNION :('a |-> 'b) -> ('a |-> 'b) -> ('a |-> 'b)
FUN_FMAP :('a -> 'b) -> ('a -> bool) -> ('a |-> 'b)
f_o :('b |-> 'c) -> ('a -> 'b) -> ('a |-> 'c)
FINITE_PRED :('a -> bool) -> bool
fmap_ABS :('a -> 'b + one) -> ('a |-> 'b)
FUPDATE :('a |-> 'b) -> 'a # 'b -> ('a |-> 'b)
o_f :('b -> 'c) -> ('a |-> 'b) -> ('a |-> 'c)
rep :('a |-> 'b) -> 'a -> 'b + one
FEVERY :('a # 'b -> bool) -> ('a |-> 'b) -> bool
f_o_f :('b |-> 'c) -> ('a |-> 'b) -> ('a |-> 'c)
FRANGE :('a |-> 'b) -> 'b -> bool
fmap_REP :('a |-> 'b) -> 'a -> 'b + one
SUBMAP :('a |-> 'b) -> ('a |-> 'b) -> bool
RRESTRICT :('a |-> 'b) -> ('b -> bool) -> ('a |-> 'b)
DRESTRICT :('a |-> 'b) -> ('a -> bool) -> ('a |-> 'b)
FDOMDEL :('a -> bool) -> 'a -> 'a -> bool
FAPPLY :('a |-> 'b) -> 'a -> 'b
is_fmap :('a -> 'b + one) -> bool
FLOOKUP :('a |-> 'b) -> 'a -> 'b + one
FCARD :('a |-> 'b) -> num
FDOM :('a |-> 'b) -> 'a -> bool

Definitions

is_fmap
|- is_fmap =
   (\a0.
      !is_fmap'.
        (!a0.
           (a0 = (\a. INR ())) \/
           (?f a b.
              (a0 = (\x. (if x = a then INL b else f x))) /\ is_fmap' f) ==>
           is_fmap' a0) ==>
        is_fmap' a0)
fmap_TY_DEF
|- ?rep'. TYPE_DEFINITION is_fmap rep'
fmap_ISO_DEF
|- (!a. fmap_ABS (fmap_REP a) = a) /\
   !r. is_fmap r = (fmap_REP (fmap_ABS r) = r)
FUPDATE_DEF
|- !f x y.
     FUPDATE f (x,y) = fmap_ABS (\a. (if a = x then INL y else fmap_REP f a))
FEMPTY_DEF
|- FEMPTY = fmap_ABS (\a. INR ())
FAPPLY_DEF
|- !f x. FAPPLY f x = OUTL (fmap_REP f x)
FDOM_DEF
|- !f x. FDOM f x = ISL (fmap_REP f x)
FDOMDEL_DEF
|- !d x a. FDOMDEL d x a = d a /\ ~(a = x)
FCARD_DEF
|- (FCARD FEMPTY = 0) /\
   !f x y.
     FCARD (FUPDATE f (x,y)) = (if FDOM f x then FCARD f else SUC (FCARD f))
SUBMAP_DEF
|- !f g. f SUBMAP g = !x. FDOM f x ==> FDOM g x /\ (FAPPLY f x = FAPPLY g x)
DRESTRICT_DEF
|- !f r.
     (!x. FDOM (DRESTRICT f r) x = FDOM f x /\ r x) /\
     !x.
       FAPPLY (DRESTRICT f r) x =
       (if FDOM f x /\ r x then FAPPLY f x else FAPPLY FEMPTY x)
FUNION_DEF
|- !f g.
     (!x. FDOM (FUNION f g) x = FDOM f x \/ FDOM g x) /\
     !x. FAPPLY (FUNION f g) x = (if FDOM f x then FAPPLY f x else FAPPLY g x)
lookup_DEF
|- !f x. FLOOKUP f x = (if FDOM f x then INL (FAPPLY f x) else INR ())
FEVERY_DEF
|- !P f. FEVERY P f = !x. FDOM f x ==> P (x,FAPPLY f x)
rep
|- !f. rep f = (\x. (if FDOM f x then INL (FAPPLY f x) else INR ()))
f_o_f_DEF
|- !f g.
     (!x. FDOM (f f_o_f g) x = FDOM g x /\ FDOM f (FAPPLY g x)) /\
     !x. FDOM (f f_o_f g) x ==> (FAPPLY (f f_o_f g) x = FAPPLY f (FAPPLY g x))
o_f_DEF
|- !f g.
     (!x. FDOM (f o_f g) x = FDOM g x) /\
     !x. FDOM (f o_f g) x ==> (FAPPLY (f o_f g) x = f (FAPPLY g x))
FRANGE_DEF
|- !f y. FRANGE f y = ?x. FDOM f x /\ (FAPPLY f x = y)
RRESTRICT_DEF
|- !f r.
     (!x. FDOM (RRESTRICT f r) x = FDOM f x /\ r (FAPPLY f x)) /\
     !x.
       FAPPLY (RRESTRICT f r) x =
       (if FDOM f x /\ r (FAPPLY f x) then FAPPLY f x else FAPPLY FEMPTY x)
FINITE_PRED
|- FINITE_PRED =
   (\a0.
      !FINITE_PRED'.
        (!a0.
           (a0 = (\a. F)) \/
           (?f a. (a0 = (\x. (x = a) \/ f x)) /\ FINITE_PRED' f) ==>
           FINITE_PRED' a0) ==>
        FINITE_PRED' a0)
FUN_FMAP_DEF
|- !f P.
     FINITE_PRED P ==>
     (!x. FDOM (FUN_FMAP f P) x = P x) /\
     !x. P x ==> (FAPPLY (FUN_FMAP f P) x = f x)
f_o_DEF
|- !f g. f f_o g = f f_o_f FUN_FMAP g (\x. FDOM f (g x))


Theorems

is_fmap_rules
|- is_fmap (\a. INR ()) /\
   !f a b. is_fmap f ==> is_fmap (\x. (if x = a then INL b else f x))
is_fmap_ind
|- !is_fmap'.
     is_fmap' (\a. INR ()) /\
     (!f a b.
        is_fmap' f ==> is_fmap' (\x. (if x = a then INL b else f x))) ==>
     !a0. is_fmap a0 ==> is_fmap' a0
is_fmap_cases
|- !a0.
     is_fmap a0 =
     (a0 = (\a. INR ())) \/
     ?f a b. (a0 = (\x. (if x = a then INL b else f x))) /\ is_fmap f
FAPPLY_FUPDATE
|- !f x y. FAPPLY (FUPDATE f (x,y)) x = y
NOT_EQ_FAPPLY
|- !f a x y. ~(a = x) ==> (FAPPLY (FUPDATE f (x,y)) a = FAPPLY f a)
FUPDATE_COMMUTES
|- !f a b c d.
     ~(a = c) ==>
     (FUPDATE (FUPDATE f (a,b)) (c,d) = FUPDATE (FUPDATE f (c,d)) (a,b))
FUPDATE_EQ
|- !f a b c. FUPDATE (FUPDATE f (a,b)) (a,c) = FUPDATE f (a,c)
FDOM_FEMPTY
|- !a. FDOM FEMPTY a = F
FDOM_FUPDATE
|- !f a b x. FDOM (FUPDATE f (a,b)) x = (x = a) \/ FDOM f x
FAPPLY_FUPDATE_THM
|- !f a b x. FAPPLY (FUPDATE f (a,b)) x = (if x = a then b else FAPPLY f x)
NOT_EQ_FEMPTY_FUPDATE
|- !f a b. ~(FEMPTY = FUPDATE f (a,b))
FDOM_EQ_FDOM_FUPDATE
|- !f x. FDOM f x ==> !y. FDOM (FUPDATE f (x,y)) = FDOM f
fmap_SIMPLE_INDUCT
|- !P. P FEMPTY /\ (!f. P f ==> !x y. P (FUPDATE f (x,y))) ==> !f. P f
FDOM_F_FEMPTY1
|- !f. (!a. ~FDOM f a) = (f = FEMPTY)
FCARD_FEMPTY
|- FCARD FEMPTY = 0
FCARD_FUPDATE
|- !f x y.
     FCARD (FUPDATE f (x,y)) = (if FDOM f x then FCARD f else SUC (FCARD f))
FCARD_0_FEMPTY
|- !f. (FCARD f = 0) = (f = FEMPTY)
fmap_INDUCT
|- !P.
     P FEMPTY /\ (!f. P f ==> !x y. ~FDOM f x ==> P (FUPDATE f (x,y))) ==>
     !f. P f
NOT_FDOM_FAPPLY_FEMPTY
|- !f x. ~FDOM f x ==> (FAPPLY f x = FAPPLY FEMPTY x)
fmap_EQ
|- !f g. (FDOM f = FDOM g) /\ (FAPPLY f = FAPPLY g) = (f = g)
fmap_EQ_THM
|- !f g.
     (FDOM f = FDOM g) /\ (!x. FDOM f x ==> (FAPPLY f x = FAPPLY g x)) =
     (f = g)
SUBMAP_FEMPTY
|- !f. FEMPTY SUBMAP f
SUBMAP_REFL
|- !f. f SUBMAP f
SUBMAP_ANTISYM
|- !f g. f SUBMAP g /\ g SUBMAP f = (f = g)
DRESTRICT_FEMPTY
|- !r. DRESTRICT FEMPTY r = FEMPTY
DRESTRICT_FUPDATE
|- !f r x y.
     DRESTRICT (FUPDATE f (x,y)) r =
     (if r x then FUPDATE (DRESTRICT f r) (x,y) else DRESTRICT f r)
STRONG_DRESTRICT_FUPDATE
|- !f r x y.
     r x ==>
     (DRESTRICT (FUPDATE f (x,y)) r =
      FUPDATE (DRESTRICT f (\v. ~(v = x) /\ r v)) (x,y))
FDOM_DRESTRICT
|- !f r x. ~r x ==> ~FDOM (DRESTRICT f r) x
NOT_FDOM_DRESTRICT
|- !f x. ~FDOM f x ==> (DRESTRICT f (\a. ~(a = x)) = f)
DRESTRICT_SUBMAP
|- !f r. DRESTRICT f r SUBMAP f
DRESTRICT_DRESTRICT
|- !f P Q. DRESTRICT (DRESTRICT f P) Q = DRESTRICT f (\x. P x /\ Q x)
DRESTRICT_IS_FEMPTY
|- !r. (!x. ~r x) ==> !f. DRESTRICT f r = FEMPTY
FUPDATE_DRESTRICT
|- !f x y. FUPDATE f (x,y) = FUPDATE (DRESTRICT f (\v. ~(v = x))) (x,y)
STRONG_DRESTRICT_FUPDATE_THM
|- !f r x y.
     DRESTRICT (FUPDATE f (x,y)) r =
     (if r x then
        FUPDATE (DRESTRICT f (\v. ~(v = x) /\ r v)) (x,y)
      else
        DRESTRICT f (\v. ~(v = x) /\ r v))
FUNION_FEMPTY_1
|- !g. FUNION FEMPTY g = g
FUNION_FEMPTY_2
|- !f. FUNION f FEMPTY = f
FUNION_FUPDATE_1
|- !f g x y. FUNION (FUPDATE f (x,y)) g = FUPDATE (FUNION f g) (x,y)
FUNION_FUPDATE_2
|- !f g x y.
     FUNION f (FUPDATE g (x,y)) =
     (if FDOM f x then FUNION f g else FUPDATE (FUNION f g) (x,y))
FDOM_FUNION
|- !f g x. FDOM (FUNION f g) x = FDOM f x \/ FDOM g x
DRESTRICT_FUNION
|- !f r q.
     DRESTRICT f (\x. r x \/ q x) = FUNION (DRESTRICT f r) (DRESTRICT f q)
DRESTRICT_TRUE
|- !f. DRESTRICT f (\x. T) = f
FUPDATE_EXISTING
|- !f v t. FDOM f v /\ (FAPPLY f v = t) = (f = FUPDATE f (v,t))
FINITE_FMAP
|- !f. ?g n. !x. FDOM f x = ?i. i < n /\ (g i = x)
f_o_f_FEMPTY_1
|- !f. FEMPTY f_o_f f = FEMPTY
f_o_f_FEMPTY_2
|- !f. f f_o_f FEMPTY = FEMPTY
o_f_FDOM
|- !f g x. FDOM g x = FDOM (f o_f g) x
o_f_APPLY
|- !f g x. FDOM g x ==> (FAPPLY (f o_f g) x = f (FAPPLY g x))
FRANGE_FEMPTY
|- !x. ~FRANGE FEMPTY x
FRANGE_FUPDATE
|- !f x y b.
     FRANGE (FUPDATE f (x,y)) b =
     (y = b) \/ FRANGE (DRESTRICT f (\a. ~(a = x))) b
SUBMAP_FRANGE
|- !f g. f SUBMAP g ==> !x. FRANGE f x ==> FRANGE g x
RRESTRICT_FEMPTY
|- !r. RRESTRICT FEMPTY r = FEMPTY
RRESTRICT_FUPDATE
|- !f r x y.
     RRESTRICT (FUPDATE f (x,y)) r =
     (if r y then
        FUPDATE (RRESTRICT f r) (x,y)
      else
        RRESTRICT (DRESTRICT f (\a. ~(a = x))) r)
FINITE_PRED_rules
|- FINITE_PRED (\a. F) /\
   !f a. FINITE_PRED f ==> FINITE_PRED (\x. (x = a) \/ f x)
FINITE_PRED_ind
|- !FINITE_PRED'.
     FINITE_PRED' (\a. F) /\
     (!f a. FINITE_PRED' f ==> FINITE_PRED' (\x. (x = a) \/ f x)) ==>
     !a0. FINITE_PRED a0 ==> FINITE_PRED' a0
FINITE_PRED_cases
|- !a0.
     FINITE_PRED a0 =
     (a0 = (\a. F)) \/ ?f a. (a0 = (\x. (x = a) \/ f x)) /\ FINITE_PRED f
FDOM_f_o
|- !f g.
     FINITE_PRED (\x. FDOM f (g x)) ==> !x. FDOM (f f_o g) x = FDOM f (g x)
FAPPLY_f_o
|- !f g.
     FINITE_PRED (\x. FDOM f (g x)) ==>
     !x. FDOM (f f_o g) x ==> (FAPPLY (f f_o g) x = FAPPLY f (g x))
FINITE_PRED_11
|- !g. (!x y. (g x = g y) = (x = y)) ==> !f. FINITE_PRED (\x. FDOM f (g x))