Theory: partial_functions

Parents


Type constants


Term constants


Axioms


Definitions

empty_part_fun_DEF
|- empty_part_fun = (\y. undefined)
singleton_part_fun_DEF
|- !x s. singleton_part_fun x s = (\y. (x = y) => (lift s) | undefined)
update_fun_DEF
|- !f x y. update_fun f x y = (\z. (x = z) => y | (f z))
modify_part_fun_DEF
|- !f g. modify_part_fun f g = (\x. (g x = undefined) => (f x) | (g x))
part_fun_range_DEF
|- !f. part_fun_range f = (\y. ?x. f x = lift y)
part_fun_domain_DEF
|- !f. part_fun_domain f = (\x. is_defined (f x))
disjoint_domains_DEF
|- !f g.
     disjoint_domains f g = ~(?x. part_fun_domain f x = part_fun_domain g x)
lift_fun_DEF
|- !f. lift_fun f = (\x. lift (f x))
lift_compose_DEF
|- !g f x.
     lift_compose g f x =
     ((is_defined (f x)) => (g (lower (f x))) | undefined)
lift_fun_of_graph_DEF
|- !g x.
     (?y. g x y)
     => (is_defined (lift_fun_of_graph g x) /\
         g x (lower (lift_fun_of_graph g x)))
     | (lift_fun_of_graph g x = undefined)
is_part_fun_graph_DEF
|- !g. is_part_fun_graph g = (!x y1 y2. g x y1 /\ g x y2 ==> (y1 = y2))
mk_part_fun_graph_DEF
|- !f. mk_part_fun_graph f = (\x y. f x = lift y)
graph_compose_DEF
|- !g h. graph_compose g h = (\x z. ?y. h x y /\ g y z)

Theorems

modify_ID
|- !f.
     (modify_part_fun empty_part_fun f = f) /\
     (modify_part_fun f empty_part_fun = f)
part_fun_range_lemma
|- !f x. is_defined (f x) ==> part_fun_range f (lower (f x))
part_fun_domain_lemma
|- !f x. part_fun_domain f x = is_defined (f x)
part_fun_domain_undef_lemma
|- !x. ~(part_fun_domain (\x. undefined) x)
disjoint_domians_modify_commute
|- !f g. disjoint_domains f g ==> (modify_part_fun f g = modify_part_fun g f)
lift_fun_ASSOC_THM
|- !g f x. lift_fun g (f x) = lift_fun (g o f) x
lift_fun_domain_TOTAL
|- !f. part_fun_domain (lift_fun f) = (\x. T)
lift_compose_ASSOC
|- !h g f.
     lift_compose h (lift_compose g f) = lift_compose (lift_compose h g) f
lift_compose_lift_THM
|- !g f x. lift_compose g (lift_fun f) x = g (f x)
lift_compose_lemma
|- !g f.
     lift_compose g f =
     (\x. (is_defined (f x)) => (g (lower (f x))) | undefined)
lift_compose_ID
|- !f.
     (lift_compose f (lift_fun (\x. x)) = f) /\
     (lift_compose (lift_fun (\x. x)) f = f)
lift_fun_compose_COMMUTE
|- !g f. lift_compose (lift_fun g) (lift_fun f) = lift_fun (g o f)
range_compose
|- !f g t.
     part_fun_range f t ==> part_fun_range (lift_compose (lift_fun g) f) (g t)
lift_fun_of_graph_lemma
|- !g x.
     ((lift_fun_of_graph g x = undefined) = (!y. ~(g x y))) /\
     (is_defined (lift_fun_of_graph g x) =
      g x (lower (lift_fun_of_graph g x))) /\
     ((?y. g x y) = g x (lower (lift_fun_of_graph g x)))
fun_graph_fun_THM
|- !f. lift_fun_of_graph (mk_part_fun_graph f) = f
fun_fun_graph_THM
|- !g. (mk_part_fun_graph (lift_fun_of_graph g) = g) = is_part_fun_graph g
graph_lift_compose_COMMUTE
|- !g f.
     graph_compose (mk_part_fun_graph g) (mk_part_fun_graph f) =
     mk_part_fun_graph (lift_compose g f)
lift_graph_compose_is_lift_compose_graph
|- !h g.
     is_part_fun_graph h /\ is_part_fun_graph g ==>
     (lift_fun_of_graph (graph_compose h g) =
      lift_compose (lift_fun_of_graph h) (lift_fun_of_graph g))