(* Prevent these Instances from going global! *)
(** We can turn any set into a Pos_alg by making no element join
     with any other element (including itself): the discrete PSA *)

  Instance Join_discrete (A : Type): Join A := fun a1 a2 a3 : A => False.Instance Perm_discrete (A: Type)  : @Perm_alg A (Join_discrete A).Instance psa_discrete (A: Type) :  @Pos_alg A  (Join_discrete A).Definition lifted : Type := sig nonunit.Definition lifted_obj (la: lifted) : A := proj1_sig la.Definition mk_lifted (a : A) (pf : nonunit a) : lifted :=
    exist nonunit a pf.Instance Join_lift: Join lifted := fun a1 a2 a3 : lifted => @join A J_A a1 a2 a3.Instance Perm_lift: Perm_alg lifted.Instance Pos_lift: Pos_alg lifted.Instance Canc_lift {CA: Canc_alg A}: Canc_alg lifted.Instance Disj_lift {DA: Disj_alg A}: Disj_alg lifted.

Lemma lifted_pjoins : forall a b : lifted, joins a b = @joins A J_A a b.