Skip to content

Commit 518742c

Browse files
Merge pull request #1886 from gio256/bifunctors
Update bifunctors
2 parents 07d3120 + 31562d0 commit 518742c

File tree

12 files changed

+446
-206
lines changed

12 files changed

+446
-206
lines changed

contrib/SetoidRewrite.v

Lines changed: 6 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ Defined.
7171

7272
Open Scope signatureT_scope.
7373

74-
#[export] Instance symmetry_flip {A B: Type} {f : A -> B}
74+
#[export] Instance symmetry_flip {A B : Type} {f : A -> B}
7575
{R : Relation A} {R' : Relation B} `{Symmetric _ R}
7676
(H0 : CMorphisms.Proper (R ++> R') f)
7777
: CMorphisms.Proper (R --> R') f.
@@ -80,15 +80,15 @@ Proof.
8080
apply H0. unfold CRelationClasses.flip. symmetry. exact Rab.
8181
Defined.
8282

83-
#[export] Instance symmetric_flip_snd {A B C: Type} {R : Relation A}
83+
#[export] Instance symmetric_flip_snd {A B C : Type} {R : Relation A}
8484
{R' : Relation B} {R'' : Relation C} `{Symmetric _ R'}
8585
(f : A -> B -> C) (H1 : CMorphisms.Proper (R ++> R' ++> R'') f)
8686
: CMorphisms.Proper (R ++> R' --> R'') f.
8787
Proof.
8888
intros a b Rab x y R'yx. apply H1; [ assumption | symmetry; assumption ].
8989
Defined.
9090

91-
#[export] Instance IsProper_fmap {A B: Type} `{Is1Cat A}
91+
#[export] Instance IsProper_fmap {A B : Type} `{Is1Cat A}
9292
`{Is1Cat A} (F : A -> B) `{Is1Functor _ _ F} (a b : A)
9393
: CMorphisms.Proper (GpdHom ==> GpdHom) (@fmap _ _ _ _ F _ a b) := fun _ _ eq => fmap2 F eq.
9494

@@ -99,7 +99,7 @@ Proof.
9999
intros f1 f2.
100100
apply (is0functor_postcomp a b c g ).
101101
Defined.
102-
102+
103103
#[export] Instance IsProper_catcomp {A : Type} `{Is1Cat A}
104104
{a b c : A}
105105
: CMorphisms.Proper (GpdHom ==> GpdHom ==> GpdHom)
@@ -111,45 +111,14 @@ Proof.
111111
exact eq_g.
112112
Defined.
113113

114-
#[export] Instance gpd_hom_to_hom_proper {A B: Type} `{Is0Gpd A}
114+
#[export] Instance gpd_hom_to_hom_proper {A B : Type} `{Is0Gpd A}
115115
{R : Relation B} (F : A -> B)
116116
`{CMorphisms.Proper _ (GpdHom ==> R) F}
117117
: CMorphisms.Proper (Hom ==> R) F.
118118
Proof.
119119
intros a b eq_ab; apply H2; exact eq_ab.
120120
Defined.
121121

122-
#[export] Instance Is1Functor_uncurry_bifunctor {A B C : Type}
123-
`{Is1Cat A, Is1Cat B, Is1Cat C}
124-
(F : A -> B -> C)
125-
`{!IsBifunctor F}
126-
`{forall a, Is1Functor (F a)}
127-
`{forall b, Is1Functor (flip F b)}
128-
: Is1Functor (uncurry F).
129-
Proof.
130-
nrapply Build_Is1Functor.
131-
- intros [a1 a2] [b1 b2] [f1 f2] [g1 g2] [eq_fg1 eq_fg2];
132-
cbn in f1, f2, g1, g2, eq_fg1, eq_fg2. cbn.
133-
rewrite eq_fg1, eq_fg2.
134-
reflexivity.
135-
- intros [a b]; cbn.
136-
(* rewrite fmap_id generates an extra goal. Not sure how to get typeclass resolution to figure this out automatically. *)
137-
rewrite (fmap_id _).
138-
rewrite (fmap_id _).
139-
rewrite cat_idl.
140-
reflexivity.
141-
- intros [a1 b1] [a2 b2] [a3 b3] [f1 f2] [g1 g2];
142-
cbn in f1, f2, g1, g2.
143-
cbn.
144-
rewrite (fmap_comp _).
145-
rewrite (fmap_comp _).
146-
rewrite cat_assoc.
147-
rewrite <- (cat_assoc _ (fmap (F a1) g2)).
148-
rewrite <- (bifunctor_isbifunctor F f1 g2).
149-
rewrite ! cat_assoc.
150-
reflexivity.
151-
Defined.
152-
153122
#[export] Instance gpd_hom_is_proper1 {A : Type} `{Is0Gpd A}
154123
: CMorphisms.Proper
155124
(Hom ==> Hom ==> CRelationClasses.arrow) Hom.
@@ -194,7 +163,7 @@ Defined.
194163

195164
Proposition nat_equiv_faithful {A B : Type}
196165
{F G : A -> B} `{Is1Functor _ _ F}
197-
`{!Is0Functor G, !Is1Functor G}
166+
`{!Is0Functor G, !Is1Functor G}
198167
`{!HasEquivs B} (tau : NatEquiv F G)
199168
: Faithful F -> Faithful G.
200169
Proof.

theories/Algebra/AbGroups/AbHom.v

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,42 @@ Proof.
6363
by apply equiv_path_grouphomomorphism.
6464
Defined.
6565

66-
Global Instance isbifunctor_ab_hom `{Funext}
67-
: IsBifunctor (ab_hom : Group^op -> AbGroup -> AbGroup).
66+
Global Instance is1functor_ab_hom01 `{Funext} {A : Group^op}
67+
: Is1Functor (ab_hom A).
6868
Proof.
69-
snrapply Build_IsBifunctor.
70-
1-2: exact _.
69+
nrapply Build_Is1Functor.
70+
- intros B B' f g p phi.
71+
apply equiv_path_grouphomomorphism; intro a; cbn.
72+
exact (p (phi a)).
73+
- intros B phi.
74+
by apply equiv_path_grouphomomorphism.
75+
- intros B C D f g phi.
76+
by apply equiv_path_grouphomomorphism.
77+
Defined.
78+
79+
Global Instance is1functor_ab_hom10 `{Funext} {B : AbGroup@{u}}
80+
: Is1Functor (flip (ab_hom : Group^op -> AbGroup -> AbGroup) B).
81+
Proof.
82+
nrapply Build_Is1Functor.
83+
- intros A A' f g p phi.
84+
apply equiv_path_grouphomomorphism; intro a; cbn.
85+
exact (ap phi (p a)).
86+
- intros A phi.
87+
by apply equiv_path_grouphomomorphism.
88+
- intros A C D f g phi.
89+
by apply equiv_path_grouphomomorphism.
90+
Defined.
91+
92+
Global Instance is0bifunctor_ab_hom `{Funext}
93+
: Is0Bifunctor (ab_hom : Group^op -> AbGroup -> AbGroup).
94+
Proof.
95+
rapply Build_Is0Bifunctor.
96+
Defined.
97+
98+
Global Instance is1bifunctor_ab_hom `{Funext}
99+
: Is1Bifunctor (ab_hom : Group^op -> AbGroup -> AbGroup).
100+
Proof.
101+
rapply Build_Is1Bifunctor.
71102
intros A A' f B B' g phi; cbn.
72103
by apply equiv_path_grouphomomorphism.
73104
Defined.

theories/Algebra/AbSES/BaerSum.v

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,19 @@ Proof.
5151
apply abses_pushout_pullback_reorder'.
5252
Defined.
5353

54-
Global Instance isbifunctor_abses' `{Univalence}
55-
: IsBifunctor (AbSES' : AbGroup^op -> AbGroup -> Type).
54+
Global Instance is0bifunctor_abses' `{Univalence}
55+
: Is0Bifunctor (AbSES' : AbGroup^op -> AbGroup -> Type).
5656
Proof.
57-
eapply Build_IsBifunctor.
57+
rapply Build_Is0Bifunctor.
58+
Defined.
59+
60+
Global Instance is1bifunctor_abses' `{Univalence}
61+
: Is1Bifunctor (AbSES' : AbGroup^op -> AbGroup -> Type).
62+
Proof.
63+
snrapply Build_Is1Bifunctor.
64+
1,2: exact _.
5865
intros ? ? g ? ? f E; cbn.
59-
apply abses_pushout_pullback_reorder.
66+
exact (abses_pushout_pullback_reorder E f g).
6067
Defined.
6168

6269
(** Given a short exact sequence [A -> E -> B] and maps [f : A -> A'], [g : B' -> B], we can change the order of pushing out along [f] and pulling back along [g]. *)
@@ -222,10 +229,17 @@ Proof.
222229
- intro; apply baer_sum_unit_r.
223230
Defined.
224231

225-
Global Instance isbifunctor_abses `{Univalence}
226-
: IsBifunctor (AbSES : AbGroup^op -> AbGroup -> pType).
232+
Global Instance is0bifunctor_abses `{Univalence}
233+
: Is0Bifunctor (AbSES : AbGroup^op -> AbGroup -> pType).
234+
Proof.
235+
rapply Build_Is0Bifunctor.
236+
Defined.
237+
238+
Global Instance is1bifunctor_abses `{Univalence}
239+
: Is1Bifunctor (AbSES : AbGroup^op -> AbGroup -> pType).
227240
Proof.
228-
econstructor.
241+
snrapply Build_Is1Bifunctor.
242+
1,2: exact _.
229243
intros ? ? f ? ? g.
230244
rapply hspace_phomotopy_from_homotopy.
231245
1: apply ishspace_abses.

theories/Algebra/AbSES/Ext.v

Lines changed: 53 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ Require Import Basics Types Truncations.Core.
22
Require Import Pointed WildCat.
33
Require Import Truncations.SeparatedTrunc.
44
Require Import AbelianGroup AbHom AbProjective.
5-
Require Import AbSES.Pullback AbSES.BaerSum AbSES.Core.
5+
Require Import AbSES.Pullback AbSES.Pushout AbSES.BaerSum AbSES.Core.
66

77
Local Open Scope mc_scope.
88
Local Open Scope mc_add_scope.
@@ -11,6 +11,14 @@ Local Open Scope mc_add_scope.
1111

1212
Definition Ext (B A : AbGroup@{u}) := pTr 0 (AbSES B A).
1313

14+
Global Instance is0bifunctor_ext `{Univalence}
15+
: Is0Bifunctor (Ext : AbGroup^op -> AbGroup -> pType)
16+
:= is0bifunctor_compose _ _ (bf:=is0bifunctor_abses).
17+
18+
Global Instance is1bifunctor_ext `{Univalence}
19+
: Is1Bifunctor (Ext : AbGroup^op -> AbGroup -> pType)
20+
:= is1bifunctor_compose _ _ (bf:=is1bifunctor_abses).
21+
1422
(** An extension [E : AbSES B A] is trivial in [Ext B A] if and only if [E] merely splits. *)
1523
Proposition iff_ab_ext_trivial_split `{Univalence} {B A : AbGroup} (E : AbSES B A)
1624
: merely {s : GroupHomomorphism B E & (projection _) $o s == idmap}
@@ -24,9 +32,13 @@ Defined.
2432

2533
Definition Ext' (B A : AbGroup@{u}) := Tr 0 (AbSES' B A).
2634

27-
Global Instance isbifunctor_ext'@{u v w | u < v, v < w} `{Univalence}
28-
: IsBifunctor@{v v w u u v v} (Ext' : AbGroup@{u}^op -> AbGroup@{u} -> Type@{v})
29-
:= isbifunctor_compose _ _ (P:=isbifunctor_abses').
35+
Global Instance is0bifunctor_ext' `{Univalence}
36+
: Is0Bifunctor (Ext' : AbGroup^op -> AbGroup -> Type)
37+
:= is0bifunctor_compose _ _ (bf:=is0bifunctor_abses').
38+
39+
Global Instance is1bifunctor_ext' `{Univalence}
40+
: Is1Bifunctor (Ext' : AbGroup^op -> AbGroup -> Type)
41+
:= is1bifunctor_compose _ _ (bf:=is1bifunctor_abses').
3042

3143
(** [Ext B A] is an abelian group for any [A B : AbGroup]. The proof of commutativity is a bit faster if we separate out the proof that [Ext B A] is a group. *)
3244
Definition grp_ext `{Univalence} (B A : AbGroup@{u}) : Group.
@@ -60,39 +72,65 @@ Proof.
6072
apply baer_sum_commutative.
6173
Defined.
6274

63-
Global Instance is01functor_ext `{Univalence} (B : AbGroup^op)
75+
Global Instance is0functor_abext01 `{Univalence} (B : AbGroup^op)
6476
: Is0Functor (ab_ext B).
6577
Proof.
6678
srapply Build_Is0Functor; intros ? ? f.
6779
snrapply Build_GroupHomomorphism.
68-
1: exact (fmap01 (A:=AbGroup^op) Ext' B f).
80+
1: exact (fmap (Ext B) f).
6981
rapply Trunc_ind; intro E0.
7082
rapply Trunc_ind; intro E1.
7183
apply (ap tr); cbn.
7284
apply baer_sum_pushout.
7385
Defined.
7486

75-
Global Instance is10functor_ext `{Univalence} (A : AbGroup)
87+
Global Instance is0functor_abext10 `{Univalence} (A : AbGroup)
7688
: Is0Functor (fun B : AbGroup^op => ab_ext B A).
7789
Proof.
7890
srapply Build_Is0Functor; intros ? ? f; cbn.
7991
snrapply Build_GroupHomomorphism.
80-
1: exact (fmap10 (A:=AbGroup^op) Ext' f A).
92+
1: exact (fmap (fun (B : AbGroup^op) => Ext B A) f).
8193
rapply Trunc_ind; intro E0.
8294
rapply Trunc_ind; intro E1.
8395
apply (ap tr); cbn.
8496
apply baer_sum_pullback.
8597
Defined.
8698

87-
Global Instance isbifunctor_ext `{Univalence}
88-
: IsBifunctor (A:=AbGroup^op) ab_ext.
99+
Global Instance is1functor_abext01 `{Univalence} (B : AbGroup^op)
100+
: Is1Functor (ab_ext B).
101+
Proof.
102+
snrapply Build_Is1Functor.
103+
- intros A C f g.
104+
exact (fmap2 (Ext B)).
105+
- exact (fmap_id (Ext B)).
106+
- intros A C D.
107+
exact (fmap_comp (Ext B)).
108+
Defined.
109+
110+
Global Instance is1functor_abext10 `{Univalence} (A : AbGroup)
111+
: Is1Functor (fun B : AbGroup^op => ab_ext B A).
112+
Proof.
113+
snrapply Build_Is1Functor.
114+
- intros B C f g.
115+
exact (fmap2 (fun B : AbGroup^op => Ext B A)).
116+
- exact (fmap_id (fun B : AbGroup^op => Ext B A)).
117+
- intros B C D.
118+
exact (fmap_comp (fun B : AbGroup^op => Ext B A)).
119+
Defined.
120+
121+
Global Instance is0bifunctor_abext `{Univalence}
122+
: Is0Bifunctor (A:=AbGroup^op) ab_ext.
123+
Proof.
124+
rapply Build_Is0Bifunctor.
125+
Defined.
126+
127+
Global Instance is1bifunctor_abext `{Univalence}
128+
: Is1Bifunctor (A:=AbGroup^op) ab_ext.
89129
Proof.
90-
snrapply Build_IsBifunctor.
130+
snrapply Build_Is1Bifunctor.
91131
1,2: exact _.
92-
intros B B' f A A' g.
93-
rapply Trunc_ind; intro E.
94-
apply (ap tr).
95-
apply abses_pushout_pullback_reorder.
132+
intros A B.
133+
exact (bifunctor_isbifunctor (Ext : AbGroup^op -> AbGroup -> pType)).
96134
Defined.
97135

98136
(** We can push out a fixed extension while letting the map vary, and this defines a group homomorphism. *)

theories/Homotopy/Join/Core.v

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -560,16 +560,23 @@ Section FunctorJoin.
560560
Definition equiv_functor_join {A B C D} (f : A <~> C) (g : B <~> D)
561561
: Join A B <~> Join C D := Build_Equiv _ _ (functor_join f g) _.
562562

563-
Global Instance isbifunctor_join : IsBifunctor Join.
564-
Proof.
565-
snrapply Build_IsBifunctor.
566-
- intro A; snrapply Build_Is0Functor; intros B D g.
567-
exact (functor_join idmap g).
568-
- intro B; snrapply Build_Is0Functor; intros A C f.
569-
exact (functor_join f idmap).
570-
- intros A C f B D g x.
571-
lhs_V nrapply functor_join_compose.
572-
nrapply functor_join_compose.
563+
Global Instance is0bifunctor_join : Is0Bifunctor Join.
564+
Proof.
565+
rapply Build_Is0Bifunctor'.
566+
apply Build_Is0Functor.
567+
intros A B [f g].
568+
exact (functor_join f g).
569+
Defined.
570+
571+
Global Instance is1bifunctor_join : Is1Bifunctor Join.
572+
Proof.
573+
snrapply Build_Is1Bifunctor'.
574+
nrapply Build_Is1Functor.
575+
- intros A B f g [p q].
576+
exact (functor2_join p q).
577+
- intros A; exact functor_join_idmap.
578+
- intros A B C [f g] [h k].
579+
exact (functor_join_compose f g h k).
573580
Defined.
574581

575582
End FunctorJoin.

0 commit comments

Comments
 (0)