End join_hom_fun.
Arguments lookup [Key A] _ _ _.

(* Specifications: *)
Lemma join_hom_bij {A: Type} `{Perm_alg A}
{B: Type}
(bij: bijection A B):
@join_hom _ _ _ (Join_bij _ _ _ bij) (bij_f _ _ bij).
(* Some simple properties preserved by join homs *)
Lemma join_hom_join_sub {A}{B}`{Join A}`{Join B}:
forall (f: A -> B) a1 a2, join_sub a1 a2 -> join_hom f -> join_sub (f a1) (f a2).
Lemma join_hom_identity  {A}{B}`{Perm_alg A}{SA: Sep_alg A}{CA: Disj_alg A}`{Perm_alg B}{SB: Sep_alg B}{CB: Disj_alg B}:
forall (f: A -> B) a1, identity a1 -> join_hom f -> identity (f a1).
Lemma join_hom2_identity  {A}{B}{C}
`{Perm_alg A}{SA: Sep_alg A}{CA: Disj_alg A}
`{Perm_alg B}{SB: Sep_alg B}{CB: Disj_alg B}
`{Perm_alg C}{SC: Sep_alg C}{CC: Disj_alg C}:
forall (g: A -> B -> C) a1 b1,
identity a1 -> identity b1 -> join_hom2 g -> identity (g a1 b1).
Lemma join_hom_comparable {A}{B}`{Perm_alg A}{SA: Sep_alg A}`{Perm_alg B}{SB:Sep_alg B}:
forall (f: A -> B) a1 a2, comparable a1 a2 -> join_hom f -> comparable (f a1) (f a2).
Lemma join_hom2_comparable {A}{B}{C}
`{Perm_alg A}{SA: Sep_alg A}`{Perm_alg B}{SB: Sep_alg B}`{Perm_alg C}{SC: Sep_alg C}:
forall (g: A -> B -> C) a1 a2 b1 b2,
comparable a1 a2
-> comparable b1 b2
-> join_hom2 g
-> comparable (g a1 b1) (g a2 b2).