Inductive lower_join: option A -> option A -> option A -> Prop :=
  | lower_None1: forall a, lower_join None a a
  | lower_None2: forall a, lower_join a None a
  | lower_Some: forall a1 a2 a3,  join a1 a2 a3 -> 
        lower_join (Some a1) (Some a2) (Some a3).Inductive lower_join: option A -> option A -> option A -> Prop :=
  | lower_None1: forall a, lower_join None a a
  | lower_None2: forall a, lower_join a None a
  | lower_Some: forall a1 a2 a3,  join a1 a2 a3 -> 
        lower_join (Some a1) (Some a2) (Some a3).Inductive lower_join: option A -> option A -> option A -> Prop :=
  | lower_None1: forall a, lower_join None a a
  | lower_None2: forall a, lower_join a None a
  | lower_Some: forall a1 a2 a3,  join a1 a2 a3 -> 
        lower_join (Some a1) (Some a2) (Some a3).Inductive lower_join: option A -> option A -> option A -> Prop :=
  | lower_None1: forall a, lower_join None a a
  | lower_None2: forall a, lower_join a None a
  | lower_Some: forall a1 a2 a3,  join a1 a2 a3 -> 
        lower_join (Some a1) (Some a2) (Some a3).Instance Join_lower: Join (option A) := lower_join.Instance Perm_lower: @Perm_alg (option A) Join_lower.Instance Sep_lower: @Sep_alg _ Join_lower.Instance Sing_lower: @Sing_alg _ Join_lower _.Instance Canc_lower {psa_A: Pos_alg A}{CA: Canc_alg A}: @Canc_alg _ Join_lower.Instance Disj_lower {psa_A: Pos_alg A}{DA: Disj_alg A}: @Disj_alg _ Join_lower.

Lemma None_unit {A}{JOIN: Join A}: forall x: option A, @unit_for (option A) (@Join_lower _ _) None x.