Definition sub_silhouette {A} `{Perm_alg A} (a b: A) : Prop :=
    forall c, joins c b -> joins c a.Definition same_silhouette {A} `{Perm_alg A} (a b: A) : Prop :=
    forall c, joins c a <-> joins c b.

(* Specifications: *)
Lemma sub_silhouette_refl {A} `{Perm_alg A}: forall a, sub_silhouette a a.
Lemma sub_silhouette_trans {A} `{Perm_alg A}: forall a b c, sub_silhouette a b -> sub_silhouette b c -> sub_silhouette a c.
Lemma same_silhouette_refl {A} `{Perm_alg A}: forall a, same_silhouette a a.
Lemma same_silhouette_sym {A} `{Perm_alg A}: forall a b, same_silhouette a b -> same_silhouette b a.
Lemma same_silhouette_trans {A} `{Perm_alg A}: forall a b c, same_silhouette a b -> same_silhouette b c -> same_silhouette a c.
Lemma same_silhouette_sub1{A} `{Perm_alg A}: forall a b, same_silhouette a b -> sub_silhouette a b.
Lemma same_silhouette_sub2 {A} `{Perm_alg A}: forall a b, same_silhouette a b -> sub_silhouette b a.
Lemma sub_same_silhouette {A} `{Perm_alg A}: forall a b, sub_silhouette a b -> sub_silhouette b a -> same_silhouette a b.
Lemma same_silhouette_join {A} `{HA: Perm_alg A}: forall phi phi' phiy phiz phiz', same_silhouette phi phi' -> join phi phiy phiz -> join phi' phiy phiz' -> same_silhouette phiz phiz'.