Built with Alectryon, running Coq+SerAPI v8.19.0+0.19.3. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use ⌘ instead of Ctrl.
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
(** * Projective abelian groups *)(** We define projective abelian groups and show that [P] is projective if and only if every epimorphism [A -> P] merely splits. *)(** An abelian group [P] is projective if for any map [P -> B] and epimorphism [A -> B], there merely exists a lift [P -> A] making the following triangle commute: A ^ | l / | | e / | V P ---> B f*)ClassIsAbProjective@{u +} (P : AbGroup@{u}) : Type :=
isabprojective : forall (AB : AbGroup@{u}), forall (e : A $-> B),
forall (f : P $-> B), IsSurjection e -> merely (existsl : P $-> A, e $o l == f).(** An abelian group is projective iff epis into it merely split. *)
P: AbGroup
IsAbProjective P <->
(forall (A : AbGroup) (p : A $-> P),
IsConnMap (Tr (-1)) p ->
merely {s : P $-> A & p $o s == grp_homo_id})
P: AbGroup
IsAbProjective P <->
(forall (A : AbGroup) (p : A $-> P),
IsConnMap (Tr (-1)) p ->
merely {s : P $-> A & p $o s == grp_homo_id})
P: AbGroup
IsAbProjective P ->
forall (A : AbGroup) (p : A $-> P),
IsConnMap (Tr (-1)) p ->
merely {s : P $-> A & p $o s == grp_homo_id}
P: AbGroup
(forall (A : AbGroup) (p : A $-> P),
IsConnMap (Tr (-1)) p ->
merely {s : P $-> A & p $o s == grp_homo_id}) ->
IsAbProjective P
P: AbGroup
IsAbProjective P ->
forall (A : AbGroup) (p : A $-> P),
IsConnMap (Tr (-1)) p ->
merely {s : P $-> A & p $o s == grp_homo_id}
P: AbGroup H: IsAbProjective P A: AbGroup B: A $-> P
IsConnMap (Tr (-1)) B ->
merely {s : P $-> A & B $o s == grp_homo_id}
apply H.
P: AbGroup
(forall (A : AbGroup) (p : A $-> P),
IsConnMap (Tr (-1)) p ->
merely {s : P $-> A & p $o s == grp_homo_id}) ->
IsAbProjective P
P: AbGroup H: forall (A : AbGroup) (p : A $-> P),
IsConnMap (Tr (-1)) p ->
merely {s : P $-> A & p $o s == grp_homo_id} A, B: AbGroup e: A $-> B f: P $-> B H1: IsConnMap (Tr (-1)) e
merely {l : P $-> A & e $o l == f}
P: AbGroup H: forall (A : AbGroup) (p : A $-> P),
IsConnMap (Tr (-1)) p ->
merely {s : P $-> A & p $o s == grp_homo_id} A, B: AbGroup e: A $-> B f: P $-> B H1: IsConnMap (Tr (-1)) e s: merely
{s : P $-> ab_pullback f e &
grp_pullback_pr1 f e $o s == grp_homo_id}
merely {l : P $-> A & e $o l == f}
P: AbGroup H: forall (A : AbGroup) (p : A $-> P),
IsConnMap (Tr (-1)) p ->
merely {s : P $-> A & p $o s == grp_homo_id} A, B: AbGroup e: A $-> B f: P $-> B H1: IsConnMap (Tr (-1)) e s: {s : P $-> ab_pullback f e &
grp_pullback_pr1 f e $o s == grp_homo_id}
merely {l : P $-> A & e $o l == f}
P: AbGroup H: forall (A : AbGroup) (p : A $-> P),
IsConnMap (Tr (-1)) p ->
merely {s : P $-> A & p $o s == grp_homo_id} A, B: AbGroup e: A $-> B f: P $-> B H1: IsConnMap (Tr (-1)) e s: P $-> ab_pullback f e h: grp_pullback_pr1 f e $o s == grp_homo_id
merely {l : P $-> A & e $o l == f}
P: AbGroup H: forall (A : AbGroup) (p : A $-> P),
IsConnMap (Tr (-1)) p ->
merely {s : P $-> A & p $o s == grp_homo_id} A, B: AbGroup e: A $-> B f: P $-> B H1: IsConnMap (Tr (-1)) e s: P $-> ab_pullback f e h: grp_pullback_pr1 f e $o s == grp_homo_id x: P
(e $o (grp_pullback_pr2 f e $o s)) x = f x
P: AbGroup H: forall (A : AbGroup) (p : A $-> P),
IsConnMap (Tr (-1)) p ->
merely {s : P $-> A & p $o s == grp_homo_id} A, B: AbGroup e: A $-> B f: P $-> B H1: IsConnMap (Tr (-1)) e s: P $-> ab_pullback f e h: grp_pullback_pr1 f e $o s == grp_homo_id x: P