Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 264d33e

Browse files
committed
docs(control/traversable/lemmas): Add module docstring (#9927)
1 parent c4760b9 commit 264d33e

File tree

2 files changed

+43
-35
lines changed

2 files changed

+43
-35
lines changed

docs/references.bib

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -527,8 +527,7 @@ @InProceedings{ Gallier2011Notes
527527

528528
@Article{ ghys87:groupes,
529529
author = {Étienne Ghys},
530-
title = {Groupes d'homéomorphismes du cercle et cohomologie
531-
bornée},
530+
title = {Groupes d'homéomorphismes du cercle et cohomologie bornée},
532531
journal = {Contemporary Mathematics},
533532
year = 1987,
534533
volume = 58,
@@ -538,6 +537,23 @@ @Article{ ghys87:groupes
538537
language = {french}
539538
}
540539

540+
@Article{ gibbons2009,
541+
title = {The essence of the Iterator pattern},
542+
volume = {19},
543+
issn = {0956-7968, 1469-7653},
544+
url = {https://www.cambridge.org/core/product/identifier/S0956796809007291/type/journal_article},
545+
doi = {10.1017/S0956796809007291},
546+
language = {en},
547+
number = {3-4},
548+
urldate = {2021-10-24},
549+
journal = {Journal of Functional Programming},
550+
author = {Gibbons, Jeremy and Oliveira, BRUNO C. d. S.},
551+
month = jul,
552+
year = {2009},
553+
pages = {377--402},
554+
}
555+
556+
541557
@Book{ GierzEtAl1980,
542558
author = {Gierz, Gerhard and Hofmann, Karl Heinrich and Keimel,
543559
Klaus and Lawson, Jimmie D. and Mislove, Michael W. and

src/control/traversable/lemmas.lean

Lines changed: 25 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,20 @@
22
Copyright (c) 2018 Simon Hudon. All rights reserved.
33
Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Simon Hudon
5+
-/
6+
import control.applicative
7+
import control.traversable.basic
8+
9+
/-!
10+
# Traversing collections
511
6-
Lemmas about traversing collections.
12+
This file proves basic properties of traversable and applicative functors and defines
13+
`pure_transformation F`, the natural applicative transformation from the identity functor to `F`.
714
8-
Inspired by:
15+
## References
916
10-
The Essence of the Iterator Pattern
11-
Jeremy Gibbons and Bruno César dos Santos Oliveira
12-
In Journal of Functional Programming. Vol. 19. No. 3&4. Pages 377−402. 2009.
13-
<http://www.cs.ox.ac.uk/jeremy.gibbons/publications/iterator.pdf>
17+
Inspired by [The Essence of the Iterator Pattern][gibbons2009].
1418
-/
15-
import control.traversable.basic
16-
import control.applicative
1719

1820
universes u
1921

@@ -42,19 +44,16 @@ to `F`, defined by `pure : Π {α}, α → F α`. -/
4244
def pure_transformation : applicative_transformation id F :=
4345
{ app := @pure F _,
4446
preserves_pure' := λ α x, rfl,
45-
preserves_seq' := λ α β f x, by simp; refl }
46-
47-
@[simp] theorem pure_transformation_apply {α} (x : id α) :
48-
(pure_transformation F) x = pure x := rfl
47+
preserves_seq' := λ α β f x, by { simp only [map_pure, seq_pure], refl } }
4948

49+
@[simp] theorem pure_transformation_apply {α} (x : id α) : pure_transformation F x = pure x := rfl
5050

5151
variables {F G} (x : t β)
5252

5353
lemma map_eq_traverse_id : map f = @traverse t _ _ _ _ _ (id.mk ∘ f) :=
5454
funext $ λ y, (traverse_eq_map_id f y).symm
5555

56-
theorem map_traverse (x : t α) :
57-
map f <$> traverse g x = traverse (map f ∘ g) x :=
56+
theorem map_traverse (x : t α) : map f <$> traverse g x = traverse (map f ∘ g) x :=
5857
begin
5958
rw @map_eq_traverse_id t _ _ _ _ f,
6059
refine (comp_traverse (id.mk ∘ f) g x).symm.trans _,
@@ -69,14 +68,12 @@ begin
6968
congr, apply comp.applicative_id_comp
7069
end
7170

72-
lemma pure_traverse (x : t α) :
73-
traverse pure x = (pure x : F (t α)) :=
71+
lemma pure_traverse (x : t α) : traverse pure x = (pure x : F (t α)) :=
7472
by have : traverse pure x = pure (traverse id.mk x) :=
7573
(naturality (pure_transformation F) id.mk x).symm;
7674
rwa id_traverse at this
7775

78-
lemma id_sequence (x : t α) :
79-
sequence (id.mk <$> x) = id.mk x :=
76+
lemma id_sequence (x : t α) : sequence (id.mk <$> x) = id.mk x :=
8077
by simp [sequence, traverse_map, id_traverse]; refl
8178

8279
lemma comp_sequence (x : t (F (G α))) :
@@ -88,34 +85,29 @@ lemma naturality' (η : applicative_transformation F G) (x : t (F α)) :
8885
by simp [sequence, naturality, traverse_map]
8986

9087
@[functor_norm]
91-
lemma traverse_id :
92-
traverse id.mk = (id.mk : t α → id (t α)) :=
93-
by ext; simp [id_traverse]; refl
88+
lemma traverse_id : traverse id.mk = (id.mk : t α → id (t α)) :=
89+
by { ext, exact id_traverse _ }
9490

9591
@[functor_norm]
9692
lemma traverse_comp (g : α → F β) (h : β → G γ) :
9793
traverse (comp.mk ∘ map h ∘ g) =
9894
(comp.mk ∘ map (traverse h) ∘ traverse g : t α → comp F G (t γ)) :=
99-
by ext; simp [comp_traverse]
95+
by { ext, exact comp_traverse _ _ _ }
10096

101-
lemma traverse_eq_map_id' (f : β → γ) :
102-
traverse (id.mk ∘ f) =
103-
id.mk ∘ (map f : t β → t γ) :=
104-
by ext;rw traverse_eq_map_id
97+
lemma traverse_eq_map_id' (f : β → γ) : traverse (id.mk ∘ f) = id.mk ∘ (map f : t β → t γ) :=
98+
by { ext, exact traverse_eq_map_id _ _ }
10599

106100
-- @[functor_norm]
107101
lemma traverse_map' (g : α → β) (h : β → G γ) :
108-
traverse (h ∘ g) =
109-
(traverse h ∘ map g : t α → G (t γ)) :=
110-
by ext; simp [traverse_map]
102+
traverse (h ∘ g) = (traverse h ∘ map g : t α → G (t γ)) :=
103+
by { ext, rw [comp_app, traverse_map] }
111104

112105
lemma map_traverse' (g : α → G β) (h : β → γ) :
113-
traverse (map h ∘ g) =
114-
(map (map h) ∘ traverse g : t α → G (t γ)) :=
115-
by ext; simp [map_traverse]
106+
traverse (map h ∘ g) = (map (map h) ∘ traverse g : t α → G (t γ)) :=
107+
by { ext, rw [comp_app, map_traverse] }
116108

117109
lemma naturality_pf (η : applicative_transformation F G) (f : α → F β) :
118110
traverse (@η _ ∘ f) = @η _ ∘ (traverse f : t α → F (t β)) :=
119-
by ext; simp [naturality]
111+
by { ext, rw [comp_app, naturality] }
120112

121113
end traversable

0 commit comments

Comments
 (0)