Definition fun_Join (A B: Type) {J_B: Join B}: Join (A -> B) :=
    (fun a b c => forall x, join (a x) (b x) (c x)).Definition fun_SA
             (A B: Type)
             {Join_B: Join B}
             {SA_B: SeparationAlgebra B}: @SeparationAlgebra (A -> B) (fun_Join A B).

(* Specifications: *)
Lemma fun_uSA (A B: Type) {R_B: Relation B} {J_B: Join B} (uSA_B: UpwardsClosedSeparationAlgebra B): @UpwardsClosedSeparationAlgebra (A -> B) (pointwise_relation A R_B) (fun_Join A B).
Lemma fun_dSA (A B: Type) {R_B: Relation B} {J_B: Join B} (dSA_B: DownwardsClosedSeparationAlgebra B): @DownwardsClosedSeparationAlgebra (A -> B) (pointwise_relation A R_B) (fun_Join A B).
Lemma fun_incrSA (A B: Type) {R_B: Relation B} {J_B: Join B} (incr_B: IncreasingSeparationAlgebra B): @IncreasingSeparationAlgebra (A -> B) (pointwise_relation A R_B) (fun_Join A B).
Lemma fun_unitSA (A B: Type) {R_B: Relation B} {J_B: Join B} (USA_B: UnitalSeparationAlgebra B): @UnitalSeparationAlgebra (A -> B) (pointwise_relation A R_B) (fun_Join A B).
Lemma fun_unitSA' (A B: Type) {R_B: Relation B} {J_B: Join B} (USA'_B: UnitalSeparationAlgebra' B): @UnitalSeparationAlgebra' (A -> B) (pointwise_relation A R_B) (fun_Join A B).