(* ========================================================================= *)
(* Birthday problem. *)
(* ========================================================================= *)
prioritize_num();;
(* ------------------------------------------------------------------------- *)
(* Restricted function space. *)
(* ------------------------------------------------------------------------- *)
parse_as_infix("-->",(13,"right"));;
let funspace = new_definition
`(s --> t) = {f:A->B | (!x. x IN s ==> f(x) IN t) /\
(!x. ~(x IN s) ==> f(x) = @y. T)}`;;
(* ------------------------------------------------------------------------- *)
(* Sizes. *)
(* ------------------------------------------------------------------------- *)
let FUNSPACE_EMPTY = prove
(`({} --> t) = {(\x. @y. T)}`,
(* ------------------------------------------------------------------------- *)
(* The restriction to injective functions. *)
(* ------------------------------------------------------------------------- *)
(* ------------------------------------------------------------------------- *)
(* So the actual birthday result. *)
(* ------------------------------------------------------------------------- *)
(* ------------------------------------------------------------------------- *)
(* The usual explicit instantiation. *)
(* ------------------------------------------------------------------------- *)