Skip to content

Commit 01daaf6

Browse files
committed
abstract out fmap_pair in Prod.v
Signed-off-by: Ali Caglayan <[email protected]>
1 parent 10bcb54 commit 01daaf6

File tree

2 files changed

+36
-24
lines changed

2 files changed

+36
-24
lines changed

theories/WildCat/Bifunctor.v

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ Definition fmap11 {A B C : Type} `{IsGraph A, IsGraph B, IsGraph C}
5858
(F : A -> B -> C) `{!Is0Bifunctor F} {a0 a1 : A} (f : a0 $-> a1)
5959
{b0 b1 : B} (g : b0 $-> b1)
6060
: F a0 b0 $-> F a1 b1
61-
:= fmap (uncurry F) (a := (a0, b0)) (b := (a1, b1)) (f, g).
61+
:= fmap_pair (uncurry F) f g.
6262

6363
(** As with [Is0Bifunctor], we store redundant information. In addition, we store the proofs that they are consistent with each other. *)
6464
Class Is1Bifunctor {A B C : Type}
@@ -92,13 +92,11 @@ Proof.
9292
- exact (is1functor_functor_uncurried01 (uncurry F)).
9393
- exact (is1functor_functor_uncurried10 (uncurry F)).
9494
- intros a0 a1 f b0 b1 g.
95-
refine (fmap2 (uncurry F) _^$ $@ fmap_comp (uncurry F)
96-
(a := (a0, b0)) (b := (a1, b0)) (c := (a1, b1)) (f, Id b0) (Id a1, g)).
97-
exact (cat_idl _, cat_idr _).
95+
refine (_^$ $@ fmap_pair_comp (uncurry F) f (Id b0) (Id a1) g).
96+
exact (fmap2_pair (uncurry F) (cat_idl _) (cat_idr _)).
9897
- intros a0 a1 f b0 b1 g.
99-
refine (fmap2 (uncurry F) _^$ $@ fmap_comp (uncurry F)
100-
(a := (a0, b0)) (b := (a0, b1)) (c := (a1, b1)) (Id a0, g) (f, Id b1)).
101-
exact (cat_idr _, cat_idl _).
98+
refine (_^$ $@ fmap_pair_comp (uncurry F) (Id a0) g f (Id b1)).
99+
exact (fmap2_pair (uncurry F) (cat_idr _) (cat_idl _)).
102100
Defined.
103101

104102
Definition Build_Is1Bifunctor'' {A B C : Type}
@@ -149,11 +147,8 @@ Definition fmap02 {A B C : Type} `{Is1Cat A, Is1Cat B, Is1Cat C}
149147
Definition fmap12 {A B C : Type} `{Is1Cat A, Is1Cat B, Is1Cat C}
150148
(F : A -> B -> C) `{!Is0Bifunctor F, !Is1Bifunctor F}
151149
{a0 a1 : A} (f : a0 $-> a1) {b0 b1 : B} {g g' : b0 $-> b1} (q : g $== g')
152-
: fmap11 F f g $== fmap11 F f g'.
153-
Proof.
154-
refine (fmap2 (uncurry F) _).
155-
exact (Id _, q).
156-
Defined.
150+
: fmap11 F f g $== fmap11 F f g'
151+
:= fmap2_pair (uncurry F) (Id _) q.
157152

158153
Definition fmap20 {A B C : Type} `{Is1Cat A, Is1Cat B, Is1Cat C}
159154
(F : A -> B -> C) `{!Is0Bifunctor F, !Is1Bifunctor F}
@@ -164,21 +159,15 @@ Definition fmap20 {A B C : Type} `{Is1Cat A, Is1Cat B, Is1Cat C}
164159
Definition fmap21 {A B C : Type} `{Is1Cat A, Is1Cat B, Is1Cat C}
165160
(F : A -> B -> C) `{!Is0Bifunctor F, !Is1Bifunctor F}
166161
{a0 a1 : A} {f f' : a0 $-> a1} (p : f $== f') {b0 b1 : B} (g : b0 $-> b1)
167-
: fmap11 F f g $== fmap11 F f' g.
168-
Proof.
169-
refine (fmap2 (uncurry F) _).
170-
exact (p, Id _).
171-
Defined.
162+
: fmap11 F f g $== fmap11 F f' g
163+
:= fmap2_pair (uncurry F) p (Id _).
172164

173165
Definition fmap22 {A B C : Type} `{Is1Cat A, Is1Cat B, Is1Cat C}
174166
(F : A -> B -> C) `{!Is0Bifunctor F, !Is1Bifunctor F}
175167
{a0 a1 : A} {f f' : a0 $-> a1} (p : f $== f')
176168
{b0 b1 : B} {g g' : b0 $-> b1} (q : g $== g')
177-
: fmap11 F f g $== fmap11 F f' g'.
178-
Proof.
179-
refine (fmap2 (uncurry F) _).
180-
exact (p, q).
181-
Defined.
169+
: fmap11 F f g $== fmap11 F f' g'
170+
:= fmap2_pair (uncurry F) p q.
182171

183172
(** *** Identity preservation *)
184173

@@ -230,8 +219,7 @@ Definition fmap11_comp {A B C : Type} `{Is1Cat A, Is1Cat B, Is1Cat C}
230219
{a0 a1 a2 : A} (g : a1 $-> a2) (f : a0 $-> a1)
231220
{b0 b1 b2 : B} (k : b1 $-> b2) (h : b0 $-> b1)
232221
: fmap11 F (g $o f) (k $o h) $== fmap11 F g k $o fmap11 F f h
233-
:= fmap_comp (uncurry F)
234-
(a := (a0, b0)) (b := (a1, b1)) (c := (a2, b2)) (_, _) (_, _).
222+
:= fmap_pair_comp (uncurry F) _ _ _ _.
235223

236224
(** *** Equivalence preservation *)
237225

theories/WildCat/Prod.v

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,3 +227,27 @@ Definition fmap11_uncurry {A B C : Type} `{IsGraph A, IsGraph B, IsGraph C}
227227
{a0 a1 : A} (f : a0 $-> a1) {b0 b1 : B} (g : b0 $-> b1)
228228
: F a0 b0 $-> F a1 b1
229229
:= @fmap _ _ _ _ (uncurry F) H2 (a0, b0) (a1, b1) (f, g).
230+
231+
Definition fmap_pair {A B C : Type}
232+
`{IsGraph A, IsGraph B, IsGraph C}
233+
(F : A * B -> C) `{!Is0Functor F}
234+
{a0 a1 : A} (f : a0 $-> a1) {b0 b1 : B} (g : b0 $-> b1)
235+
: F (a0, b0) $-> F (a1, b1)
236+
:= fmap (a:=(a0,b0)) (b:=(a1,b1)) F (f,g).
237+
238+
Definition fmap_pair_comp {A B C : Type}
239+
`{Is1Cat A, Is1Cat B, Is1Cat C}
240+
(F : A * B -> C) `{!Is0Functor F, !Is1Functor F}
241+
{a0 a1 a2 : A} {b0 b1 b2 : B}
242+
(f : a0 $-> a1) (h : b0 $-> b1) (g : a1 $-> a2) (i : b1 $-> b2)
243+
: fmap_pair F (g $o f) (i $o h)
244+
$== fmap_pair F g i $o fmap_pair F f h
245+
:= fmap_comp (a:=(a0,b0)) (b:=(a1,b1)) (c:=(a2,b2)) F (f,h) (g,i).
246+
247+
Definition fmap2_pair {A B C : Type}
248+
`{Is1Cat A, Is1Cat B, Is1Cat C}
249+
(F : A * B -> C) `{!Is0Functor F, !Is1Functor F}
250+
{a0 a1 : A} {f f' : a0 $-> a1} (p : f $== f')
251+
{b0 b1 : B} {g g' : b0 $-> b1} (q : g $== g')
252+
: fmap_pair F f g $== fmap_pair F f' g'
253+
:= fmap2 F (a:=(a0,b0)) (b:=(a1,b1)) (f:=(f,g)) (g:=(f',g')) (p,q).

0 commit comments

Comments
 (0)