End optionSA.
Section exponentialSA.
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: *)
(* Exponential is upwards closed *)
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).
(* Exponential is downwards closed *)
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).
(* Exponential is increasing *)
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).
(* Exponential is Unital*)
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).
(* Exponential is Unital' *)
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).