Skip to content

Commit b33b5b5

Browse files
Refactor proofs to be steppable
Break semicolon and comma-chained tactics into individual lines per code review feedback from @jdchristensen. Each tactic is now on its own line, making proofs easier to step through interactively.
1 parent 7236d28 commit b33b5b5

File tree

1 file changed

+89
-38
lines changed

1 file changed

+89
-38
lines changed

theories/Categories/Additive/SemiAdditive.v

Lines changed: 89 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -91,22 +91,32 @@ Section BiproductSwap.
9191

9292
(** Swapping components of a biproduct morphism. *)
9393
Lemma biproduct_prod_swap (A B : object C) (f g : morphism C A B)
94-
: biproduct_prod_mor (semiadditive_biproduct B B) A g f
94+
: biproduct_prod_mor (semiadditive_biproduct B B) A g f
9595
= (biproduct_swap B o biproduct_prod_mor (semiadditive_biproduct B B) A f g)%morphism.
9696
Proof.
97-
symmetry; rapply biproduct_prod_unique; rewrite <- Category.Core.associativity; unfold biproduct_swap;
98-
[rewrite biproduct_prod_beta_l; rapply biproduct_prod_beta_r | rewrite biproduct_prod_beta_r; rapply biproduct_prod_beta_l].
97+
symmetry.
98+
rapply biproduct_prod_unique.
99+
- rewrite <- Category.Core.associativity.
100+
unfold biproduct_swap.
101+
rewrite biproduct_prod_beta_l.
102+
rapply biproduct_prod_beta_r.
103+
- rewrite <- Category.Core.associativity.
104+
unfold biproduct_swap.
105+
rewrite biproduct_prod_beta_r.
106+
rapply biproduct_prod_beta_l.
99107
Qed.
100108

101109
(** Swap composed with left injection gives right injection. *)
102110
Lemma swap_inl (Y : object C)
103111
: (biproduct_swap Y o Biproducts.inl (biproduct_data (semiadditive_biproduct Y Y)))%morphism
104112
= Biproducts.inr (biproduct_data (semiadditive_biproduct Y Y)).
105113
Proof.
106-
unfold biproduct_swap; rewrite biproduct_prod_comp;
107-
rewrite (beta_l (biproduct_is (semiadditive_biproduct Y Y))),
108-
(mixed_r (biproduct_is (semiadditive_biproduct Y Y))),
109-
biproduct_prod_zero_l, Category.Core.right_identity;
114+
unfold biproduct_swap.
115+
rewrite biproduct_prod_comp.
116+
rewrite (beta_l (biproduct_is (semiadditive_biproduct Y Y))).
117+
rewrite (mixed_r (biproduct_is (semiadditive_biproduct Y Y))).
118+
rewrite biproduct_prod_zero_l.
119+
rewrite Category.Core.right_identity.
110120
reflexivity.
111121
Qed.
112122

@@ -115,31 +125,42 @@ Section BiproductSwap.
115125
: (biproduct_swap Y o Biproducts.inr (biproduct_data (semiadditive_biproduct Y Y)))%morphism
116126
= Biproducts.inl (biproduct_data (semiadditive_biproduct Y Y)).
117127
Proof.
118-
unfold biproduct_swap; rewrite biproduct_prod_comp;
119-
rewrite (mixed_l (biproduct_is (semiadditive_biproduct Y Y))),
120-
(beta_r (biproduct_is (semiadditive_biproduct Y Y))),
121-
biproduct_prod_zero_r, Category.Core.right_identity;
128+
unfold biproduct_swap.
129+
rewrite biproduct_prod_comp.
130+
rewrite (mixed_l (biproduct_is (semiadditive_biproduct Y Y))).
131+
rewrite (beta_r (biproduct_is (semiadditive_biproduct Y Y))).
132+
rewrite biproduct_prod_zero_r.
133+
rewrite Category.Core.right_identity.
122134
reflexivity.
123135
Qed.
124136

125137
(** The codiagonal is invariant under swapping. *)
126138
Lemma codiagonal_swap_invariant (Y : object C)
127-
: (biproduct_coprod_mor (semiadditive_biproduct Y Y) Y 1%morphism 1%morphism o biproduct_swap Y)%morphism
139+
: (biproduct_coprod_mor (semiadditive_biproduct Y Y) Y 1%morphism 1%morphism o biproduct_swap Y)%morphism
128140
= biproduct_coprod_mor (semiadditive_biproduct Y Y) Y 1%morphism 1%morphism.
129141
Proof.
130-
rapply (biproduct_coprod_unique (semiadditive_biproduct Y Y)); rewrite Category.Core.associativity;
131-
[rewrite swap_inl; rapply biproduct_coprod_beta_r | rewrite swap_inr; rapply biproduct_coprod_beta_l].
142+
rapply (biproduct_coprod_unique (semiadditive_biproduct Y Y)).
143+
- rewrite Category.Core.associativity.
144+
rewrite swap_inl.
145+
rapply biproduct_coprod_beta_r.
146+
- rewrite Category.Core.associativity.
147+
rewrite swap_inr.
148+
rapply biproduct_coprod_beta_l.
132149
Qed.
133150

134151
End BiproductSwap.
135152

136153
(** ** Commutativity of morphism addition *)
137154

138-
Theorem morphism_addition_commutative (C : SemiAdditiveCategory)
139-
(X Y : object C) : Commutative (@sgop_morphism C X Y).
155+
Theorem morphism_addition_commutative (C : SemiAdditiveCategory)
156+
(X Y : object C)
157+
: Commutative (@sgop_morphism C X Y).
140158
Proof.
141-
intros f g; unfold sgop_morphism;
142-
rewrite (biproduct_prod_swap C X Y f g), <- Category.Core.associativity, codiagonal_swap_invariant;
159+
intros f g.
160+
unfold sgop_morphism.
161+
rewrite (biproduct_prod_swap C X Y f g).
162+
rewrite <- Category.Core.associativity.
163+
rewrite codiagonal_swap_invariant.
143164
reflexivity.
144165
Qed.
145166

@@ -149,13 +170,17 @@ Section Associativity.
149170
Context (C : SemiAdditiveCategory).
150171

151172
Lemma codiagonal_postcompose_any (Y Y' : object C) (a : morphism C Y Y')
152-
: (a o biproduct_coprod_mor (semiadditive_biproduct Y Y) Y
173+
: (a o biproduct_coprod_mor (semiadditive_biproduct Y Y) Y
153174
1%morphism 1%morphism)%morphism
154175
= biproduct_coprod_mor (semiadditive_biproduct Y Y) Y' a a.
155176
Proof.
156-
rapply (biproduct_coprod_unique (semiadditive_biproduct Y Y) Y' a a);
157-
rewrite Category.Core.associativity;
158-
[rewrite biproduct_coprod_beta_l | rewrite biproduct_coprod_beta_r]; rapply Category.Core.right_identity.
177+
rapply (biproduct_coprod_unique (semiadditive_biproduct Y Y) Y' a a).
178+
- rewrite Category.Core.associativity.
179+
rewrite biproduct_coprod_beta_l.
180+
rapply Category.Core.right_identity.
181+
- rewrite Category.Core.associativity.
182+
rewrite biproduct_coprod_beta_r.
183+
rapply Category.Core.right_identity.
159184
Qed.
160185

161186
Lemma addition_precompose
@@ -177,10 +202,18 @@ Section Associativity.
177202
(a o outr (biproduct_data (semiadditive_biproduct Y Y)))
178203
o biproduct_prod_mor (semiadditive_biproduct Y Y) X f g)%morphism.
179204
Proof.
180-
symmetry; rapply biproduct_prod_unique;
181-
(rewrite <- Category.Core.associativity, biproduct_prod_beta_l, Category.Core.associativity, biproduct_prod_beta_l
182-
|| rewrite <- Category.Core.associativity, biproduct_prod_beta_r, Category.Core.associativity, biproduct_prod_beta_r);
183-
reflexivity.
205+
symmetry.
206+
rapply biproduct_prod_unique.
207+
- rewrite <- Category.Core.associativity.
208+
rewrite biproduct_prod_beta_l.
209+
rewrite Category.Core.associativity.
210+
rewrite biproduct_prod_beta_l.
211+
reflexivity.
212+
- rewrite <- Category.Core.associativity.
213+
rewrite biproduct_prod_beta_r.
214+
rewrite Category.Core.associativity.
215+
rewrite biproduct_prod_beta_r.
216+
reflexivity.
184217
Qed.
185218

186219
Lemma codiagonal_pair_inl (Y Y' : object C) (a b : morphism C Y Y')
@@ -191,9 +224,14 @@ Section Associativity.
191224
o Biproducts.inl (biproduct_data (semiadditive_biproduct Y Y))))%morphism
192225
= a.
193226
Proof.
194-
rewrite <- Category.Core.associativity, addition_precompose.
195-
rewrite Category.Core.associativity, (beta_l (biproduct_is (semiadditive_biproduct Y Y))), Category.Core.right_identity.
196-
rewrite Category.Core.associativity, (mixed_r (biproduct_is (semiadditive_biproduct Y Y))), zero_morphism_right.
227+
rewrite <- Category.Core.associativity.
228+
rewrite addition_precompose.
229+
rewrite Category.Core.associativity.
230+
rewrite (beta_l (biproduct_is (semiadditive_biproduct Y Y))).
231+
rewrite Category.Core.right_identity.
232+
rewrite Category.Core.associativity.
233+
rewrite (mixed_r (biproduct_is (semiadditive_biproduct Y Y))).
234+
rewrite zero_morphism_right.
197235
apply zero_right_identity.
198236
Qed.
199237

@@ -205,9 +243,14 @@ Section Associativity.
205243
o Biproducts.inr (biproduct_data (semiadditive_biproduct Y Y))))%morphism
206244
= b.
207245
Proof.
208-
rewrite <- Category.Core.associativity, addition_precompose.
209-
rewrite Category.Core.associativity, (mixed_l (biproduct_is (semiadditive_biproduct Y Y))), zero_morphism_right.
210-
rewrite Category.Core.associativity, (beta_r (biproduct_is (semiadditive_biproduct Y Y))), Category.Core.right_identity.
246+
rewrite <- Category.Core.associativity.
247+
rewrite addition_precompose.
248+
rewrite Category.Core.associativity.
249+
rewrite (mixed_l (biproduct_is (semiadditive_biproduct Y Y))).
250+
rewrite zero_morphism_right.
251+
rewrite Category.Core.associativity.
252+
rewrite (beta_r (biproduct_is (semiadditive_biproduct Y Y))).
253+
rewrite Category.Core.right_identity.
211254
apply zero_left_identity.
212255
Qed.
213256

@@ -218,9 +261,11 @@ Section Associativity.
218261
(b o outr (biproduct_data (semiadditive_biproduct Y Y))))%morphism
219262
= biproduct_coprod_mor (semiadditive_biproduct Y Y) Y' a b.
220263
Proof.
221-
rapply (biproduct_coprod_unique (semiadditive_biproduct Y Y) Y' a b);
222-
rewrite Category.Core.associativity;
223-
[rapply codiagonal_pair_inl | rapply codiagonal_pair_inr].
264+
rapply (biproduct_coprod_unique (semiadditive_biproduct Y Y) Y' a b).
265+
- rewrite Category.Core.associativity.
266+
rapply codiagonal_pair_inl.
267+
- rewrite Category.Core.associativity.
268+
rapply codiagonal_pair_inr.
224269
Qed.
225270

226271
Lemma addition_postcompose
@@ -245,9 +290,15 @@ Section Associativity.
245290
(sgop_morphism C X Y f1 f2)
246291
(sgop_morphism C X Y g1 g2).
247292
Proof.
248-
rapply biproduct_prod_unique;
249-
rewrite ?addition_postcompose, ?biproduct_prod_beta_l, ?biproduct_prod_beta_r;
250-
reflexivity.
293+
rapply biproduct_prod_unique.
294+
- rewrite addition_postcompose.
295+
rewrite biproduct_prod_beta_l.
296+
rewrite biproduct_prod_beta_l.
297+
reflexivity.
298+
- rewrite addition_postcompose.
299+
rewrite biproduct_prod_beta_r.
300+
rewrite biproduct_prod_beta_r.
301+
reflexivity.
251302
Qed.
252303

253304
Theorem morphism_addition_associative

0 commit comments

Comments
 (0)