Section PSA_LIFT.
Variable A : Type.
Variable J_A: Join A.
Variable PA_A : Perm_alg A.
Definition lifted : Type := sig nonunit.
Definition lifted_obj (la: lifted) : A := proj1_sig la.
(*  Definition lifted_nonidentity (la : lifted) : nonidentity (lifted_obj la) := proj2_sig la. *)
Coercion lifted_obj : lifted >-> A.
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.
(** General facts about lifting *)

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