Section pred_alg.
Context (A : Type).
Definition Pred: Type := A -> Prop.
Instance Pred_Join: Join Pred :=
@fun_Join _ _ Prop_Join.
Instance Pred_SA: SeparationAlgebra Pred :=
@fun_SA _ _ _ Prop_SA.
Instance discPred_R: Relation Pred := pointwise_relation _ discProp_R.
Instance po_discPred_R: PreOrder Krelation := pointwise_preorder _ _ po_discProp_R.
Instance discPred_uSA: @UpwardsClosedSeparationAlgebra Pred discPred_R Pred_Join :=
fun_uSA _ _ discProp_uSA.
Instance discPred_dSA: @DownwardsClosedSeparationAlgebra Pred discPred_R Pred_Join :=
fun_dSA _ _ discProp_dSA.
Instance discPred_unital: @UnitalSeparationAlgebra Pred discPred_R Pred_Join :=
fun_unitSA _ _ discProp_unitSA.
End pred_alg.
(***********************************)
(* Resource Bounds                 *)
(***********************************)
(* (** * Discrete heap *)
Instance discHeap_kiM: KripkeIntuitionisticModel Heap :=
identity_kiM.
Program Instance discHeap_ikiM: IdentityKripkeIntuitionisticModel Heap.
(*Upwards-closed*)
Instance discHeap_dSA:
@UpwardsClosedSeparationAlgebra Heap Heap_Join discHeap_kiM.
(*Downwards-closed*)
Instance discHeap_uSA:
@DownwardsClosedSeparationAlgebra Heap Heap_Join discHeap_kiM.

(*Empty heap is decreasing element*)
Lemma discHeap_empty_decreasing:
@nonpositive Heap discHeap_kiM Heap_Join (fun _ => None).