Definition eqopp (p1 p2 : option (SS.elt * SS.elt)) :=
match p1,p2 with
| None, None => True
| Some s1, Some s2 => True
| _, _ => False
end.

(* Specifications: *)
Lemma proper_3 : Proper (S.Equal ==> SS.Equal ==> eq ==> eqopp) pick_varieties_aux.
Lemma pick_varieties_ok_1 : forall s1 s2 ss st,
pick_varieties ss st = Some(s1,s2) ->
SS.In s1 ss.
Lemma pick_varieties_ok_2 : forall s1 s2 ss st,
pick_varieties ss st = Some(s1,s2) ->
SS.In s2 (SS.remove s1 ss).
Lemma proper_3 : Proper (S.Equal ==> SS.Equal ==> eq ==> eqopp) pick_lines_aux.
Lemma pick_lines_ok_1 : forall s1 s2 ss sp,
pick_lines ss sp = Some(s1,s2) ->
SS.In s1 ss.
Lemma pick_lines_ok_2 : forall s1 s2 ss sp,
pick_lines ss sp = Some(s1,s2) ->
SS.In s2 (SS.remove s1 ss).