Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Expanding on the naming conventions #793

Draft
wants to merge 36 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from 28 commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
5d1c20b
expanding naming conventions
EgbertRijke Sep 21, 2023
18e63c4
separate file for naming conventions
EgbertRijke Sep 21, 2023
efd8af3
separate file for naming conventions
EgbertRijke Sep 21, 2023
d8a9cd6
make pre-commit
EgbertRijke Sep 21, 2023
671b890
Merge branch 'master' of github.com:UniMath/agda-unimath into naming
EgbertRijke Sep 21, 2023
0b4e67b
explaining the naming of underlying objects
EgbertRijke Sep 21, 2023
1f470b1
make pre-commit
EgbertRijke Sep 21, 2023
3d521a8
Update NAMING.md
EgbertRijke Sep 21, 2023
92c28a4
fix broken links
EgbertRijke Sep 21, 2023
f1e82f9
Merge branch 'naming' of github.com:EgbertRijke/agda-unimath into naming
EgbertRijke Sep 21, 2023
d9ee159
sectioning
EgbertRijke Sep 21, 2023
e91cf2e
adding gregor
EgbertRijke Sep 21, 2023
0ab40db
make pre-commit
EgbertRijke Sep 21, 2023
a44bd45
further explaining our naming conventions
EgbertRijke Sep 22, 2023
2b17fa6
make pre-commit
EgbertRijke Sep 22, 2023
1d30aa6
further comments
EgbertRijke Sep 22, 2023
c922269
revised introduction
EgbertRijke Sep 22, 2023
4ac7ec8
update examples
EgbertRijke Sep 22, 2023
cc82fac
updating the general scheme
EgbertRijke Sep 22, 2023
e91085b
incorporating some of Vojtech's comments
EgbertRijke Sep 22, 2023
88a9226
Update NAMING-CONVENTIONS.md
EgbertRijke Sep 22, 2023
74e0697
Update NAMING-CONVENTIONS.md
EgbertRijke Sep 22, 2023
a8bfc8f
Update NAMING-CONVENTIONS.md
EgbertRijke Sep 22, 2023
6f88244
Update NAMING-CONVENTIONS.md
EgbertRijke Sep 22, 2023
fa770b4
make pre-commit
EgbertRijke Sep 22, 2023
633b471
Update NAMING-CONVENTIONS.md
EgbertRijke Sep 22, 2023
bd3ed0b
make pre-commit
EgbertRijke Sep 22, 2023
0b27816
list of common descriptors
EgbertRijke Sep 22, 2023
63a0091
Update NAMING-CONVENTIONS.md
EgbertRijke Sep 22, 2023
1f95642
make pre-commit
EgbertRijke Sep 22, 2023
fdea201
equiv and htpy in the table
EgbertRijke Sep 22, 2023
693cb0f
work
EgbertRijke Sep 23, 2023
1fbc9b9
merge conflicts
EgbertRijke Sep 23, 2023
6006e80
explaining the goals
EgbertRijke Sep 23, 2023
81f66b8
predictability
EgbertRijke Sep 23, 2023
fce34cd
clarify use of
EgbertRijke Sep 23, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
90 changes: 9 additions & 81 deletions CODINGSTYLE.md → CODING-STYLE.md
Original file line number Diff line number Diff line change
Expand Up @@ -245,64 +245,6 @@ the `agda-unimath` library:
at the moment. All variables are declared either as parameters of an anonymous
module or in the type specification of a construction.

## Naming conventions

One of the key strategies to make our library easy to navigate is our naming
convention. We strive for a direct correspondence between a construction's name
and its type. Take, for instance, the proof that the successor function on
integers is an equivalence. It has the type `is-equiv succ-ℤ`, so we name it
`is-equiv-succ-ℤ`. Note how we prefer lowercase and use hyphens to separate
words.

We also reflect the type of hypotheses used in the construction within the name.
However, the crux of a name primarily describes the type of the constructed
term; descriptions of the hypotheses follow this. For instance,
`is-equiv-is-contr-map` is a function of type `is-contr-map f → is-equiv f`,
where `f` is a given function. Notice how the term `is-equiv-is-contr-map H`
places the descriptor `is-contr-map` right next to the variable `H` it refers
to.

While abbreviations might seem like a good way to shorten names, we use them
sparingly. They might save a couple of keystrokes for the author, but in the
grand scheme of things, they will likely compromise readability and
maintainability, especially for newcomers and maintainers. We aim for clarity,
not brevity.

Here is a list of our naming conventions:

- Names are unique; we steer clear of namespace overloading.

- Names should accurately convey the concept of its construction.

- We use US English spelling of words in names.

- Important concepts can be capitalized. Usually, these are categories like
`Prop`, `Set`, `Semigroup`, `Monoid`, `Group`, `Preorder`, `Poset`,
`Precategory`, `Category`, `Directed-Graph`, `Undirected-Graph`, and so on.

- As a general rule of thumb, names should start out with an all lowercase
portion with words separated by hyphens, and may have a capitalized portion at
the end that describes which larger mathematical framework the definition
takes place in -- for instance, if it is constructed internally to a certain
subuniverse or category of mathematical objects.

- The start of a name describes the object that is being constructed. For some
theorems, the latter part of a name describes the hypotheses.

- Names never reference variables.

- We use Unicode symbols sparingly and only when they align with established
mathematical practice.

- Just as we do with abbreviations, we use special symbols sparingly in names.

- If a symbol is not available, we describe the concept concisely in words.

- We prioritize the readability of the code and avoid subtly different
variations of the same symbol. An important exception is the use of the
[full width equals sign](https://codepoints.net/U+ff1d) for the identity type,
as the standard equals sign is a reserved symbol in Agda.

## <a name="formatting"></a>Formatting: Indentation, line breaks, and parentheses

Code formatting is like punctuation in a novel - it helps readers make sense of
Expand Down Expand Up @@ -405,14 +347,6 @@ the story. Here's how we handle indentation and line breaks in the

## Coding practices we tend to avoid

- Using Unicode characters in names is entirely permissible, but we recommend
restraint to maintain readability. Just a few well-placed symbols can often
express a lot.

- To enhance conceptual clarity, we suggest names of constructions avoid
referring to variable names. This makes code more understandable, even at a
glance, and easier to work with in subsequent code.

- We encourage limiting the depth increase of indentation levels to two spaces.
This practice tends to keep our code reader-friendly, especially on smaller
screens, by keeping more code on the left-hand side of the screen. In
Expand All @@ -421,6 +355,15 @@ the story. Here's how we handle indentation and line breaks in the
maintainability of the code, and you may find that it violates some of our
other conventions as well.

- Using the projection functions `pr1` and `pr2`, particularly their
compositions, can lead to short code, but we recommend to avoid doing so. When
constructions contain a lot of projections throughout their definition, the
projections reveal little of what is going on in that part of the projections.
We therefore prefer naming the projections. When a type of the form `Σ A B` is
given a name, naming its projections too can enhance readability and will
provide more informative responses when jumping to the definition.
Furthermore, it makes it easier to change the definition later on.

- The use of `where` blocks in definitions is perfectly fine but keeping them
short and specific to the definition of the current object is beneficial. Note
that definitions made in a `where` block in a definition cannot be reused
Expand All @@ -433,21 +376,6 @@ the story. Here's how we handle indentation and line breaks in the
However, when the identity type isn't as critical, feel free to use record
types as they can be convenient.

- Using the projection functions `pr1` and `pr2`, particularly their
compositions, can lead to short code, but we recommend to avoid doing so. When
constructions contain a lot of projections throughout their definition, the
projections reveal little of what is going on in that part of the projections.
We therefore prefer naming the projections. When a type of the form `Σ A B` is
given a name, naming its projections too can enhance readability and will
provide more informative responses when jumping to the definition.
Furthermore, it makes it easier to change the definition later on.

- Lastly, we recommend not naming constructions after infix notation of
operations included in them. Preferring primary prefix notation over infix
notation can help keep our code consistent. For example, it's preferred to use
`commutative-prod` instead of `commutative-×` for denoting the commutativity
of cartesian products.

These guidelines are here to make everyone's coding experience more enjoyable
and productive. As always, your contributions to the `agda-unimath` library are
valued, and these suggestions are here to help ensure that your code is clear,
Expand Down
6 changes: 3 additions & 3 deletions HOWTO-INSTALL.md → HOW-TO-INSTALL.md
Original file line number Diff line number Diff line change
Expand Up @@ -216,8 +216,8 @@ width equals sign `=`. While you're at it, you can also add the key sequence
#### 80-character limit

The `agda-unimath` library maintains an 80-character limit on the length of most
lines in the source code (see [CODINGSTYLE](CODINGSTYLE.md#character-limit) for
a list of exceptions). This limit is to improve readability, both in your
lines in the source code (see [CODING-STYLE](CODING-STYLE.md#character-limit)
for a list of exceptions). This limit is to improve readability, both in your
programming environment and on our website. To display a vertical ruler marking
the 80th column in Emacs, add:

Expand Down Expand Up @@ -300,7 +300,7 @@ in the library.
We welcome and appreciate contributions from the community. If you're interested
in contributing to the `agda-unimath` library, you can follow the instructions
below to ensure a smooth setup and workflow. Also, please make sure to follow
our [coding style](CODINGSTYLE.md) and
our [coding style](CODING-STYLE.md) and
[design principles](DESIGN-PRINCIPLES.md).

### <a name="pre-commit-hooks"></a>Pre-commit hooks and Python dependencies
Expand Down
5 changes: 3 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,18 @@ TIME ?= time
METAFILES := \
ART.md \
CITE-THIS-LIBRARY.md \
CODINGSTYLE.md \
CODING-STYLE.md \
CONTRIBUTING.md \
CONTRIBUTORS.md \
FILE-CONVENTIONS.md \
DESIGN-PRINCIPLES.md \
GRANT-ACKNOWLEDGEMENTS.md \
HOME.md \
HOWTO-INSTALL.md \
HOW-TO-INSTALL.md \
LICENSE.md \
MIXFIX-OPERATORS.md \
MAINTAINERS.md \
NAMING-CONVENTIONS.md \
README.md \
STATEMENT-OF-INCLUSION.md \
SUMMARY.md \
Expand Down
Loading
Loading