Definition mkSec (gT : finGroupType) (G1 G2 : {group gT}) := GSection (G1, G2).Infix "/" := mkSec : section_scope.Implicit Types (G : gTg) (s : seq gTg).Canonical section_eqType := Eval hnf in EqType (section gT) section_eqMixin.Canonical section_choiceType :=
  Eval hnf in ChoiceType (section gT) section_choiceMixin.Canonical section_countType :=
  Eval hnf in CountType (section gT) section_countMixin.Canonical section_finType := Eval hnf in FinType (section gT) section_finMixin.(* A witness of the isomorphism class of a section *)
Definition section_repr s := odflt (1 / 1)%sec (pick (section_isog ^~ s)).Definition mksrepr G1 G2 := section_repr (mkSec G1 G2).Definition mkfactors (G : {group gT}) (s : seq {group gT}) :=
  map section_repr (pairmap (@mkSec _) G s).Local Notation gTg := {group gT}.

(* Specifications: *)
Lemma comps_cons G H s : comps G (H :: s) -> comps H s.
Lemma exists_comps (G : gTg) : exists s, comps G s.
Lemma JordanHolderUniqueness (G : gTg) (s1 s2 : seq gTg) : comps G s1 -> comps G s2 -> perm_eq (mkfactors G s1) (mkfactors G s2).