Local Notation fmodA := (fmod_of abelA).Implicit Types (x y z : gT) (u v w : fmodA).Definition fmval u := val (f2sub u).Local Notation valA := (@val _ _ fmod_subType) (only parsing).Canonical fmod_eqType := Eval hnf in EqType fmodA fmod_eqMixin.Canonical fmod_choiceType := Eval hnf in ChoiceType fmodA fmod_choiceMixin.Canonical fmod_countType := Eval hnf in CountType fmodA fmod_countMixin.Canonical fmod_finType := Eval hnf in FinType fmodA fmod_finMixin.Definition fmod x := sub2f (subg A x).Definition fmod_opp u := sub2f u^-1.Definition fmod_add u v := sub2f (u * v).Fact fmod_add0r : left_id (sub2f 1) fmod_add.Fact fmod_addrA : associative fmod_add.Fact fmod_addNr : left_inverse (sub2f 1) fmod_opp fmod_add.Fact fmod_addrC : commutative fmod_add.Definition fmod_zmodMixin := 
  ZmodMixin fmod_addrA fmod_addrC fmod_add0r fmod_addNr.Canonical fmod_zmodType := Eval hnf in ZmodType fmodA fmod_zmodMixin.

(* Specifications: *)
Lemma fmod_inj : injective fmval.
Lemma congr_fmod u v : u = v -> fmval u = fmval v.
Lemma fmval0 : valA 0 = 1%g.