aboutsummaryrefslogtreecommitdiff
path: root/CONTRIBUTING.md
diff options
context:
space:
mode:
Diffstat (limited to 'CONTRIBUTING.md')
-rw-r--r--CONTRIBUTING.md78
1 files changed, 78 insertions, 0 deletions
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..02b4431
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,78 @@
+# Contribution Guide for the Mathematical Components library
+
+We describe here best practices for contributing to the library. In
+particular we explain what conventions are used in the library. When
+contributing, you should comply to these conventions to get your code
+integrated to the library.
+
+This file is not comprehensive yet and might still contain mistakes or
+unclear indications, please consider contributing.
+
+## Proof style.
+### General guidelines
+- **A line should have no more than 80 characters**. If a line is
+longer than that, it should be cut semantically. If there is no way to
+make a semantic cut (e.g. the user provides an explicit term that is
+too long to fit on one line), then just cut it over several lines to
+make it readable.
+- Lines end with a point `.` and only have `;` inside them.
+- Lines that close a goal must start with a terminator (`by` or
+ `exact`). You should consider using an editor that highlight those
+ terminators in a specific color (e.g. red).
+
+### Spaces
+We write
+- `move=>` and `move:` (no space between `move` and `=>` or `:`)
+- `apply/` and `apply:` (no space between `apply` and `/` or `:`)
+- `rewrite /definition` (there is a space between `rewrite` and an unfold)
+
+### Indentation in proof scripts
+- When two subgoals are created, the first subgoal is indented by 2
+ spaces, the second is not. Use `last first` to bring the
+ smallest/less meaningful goal first, and keep the main flow of the
+ proof unindented.
+- When more than two subgoals are created, bullets are used `-` for
+ the first level, `+` for the second and `*` for the third as in:
+ ```
+ tactic.
+ - tactic.
+ + tactic.
+ * tactic.
+ * tactic.
+ * tactic.
+ + tactic.
+ + tactic.
+ - tactic
+ - tactic
+ ```
+
+ If all the subgoals have the same importance, use bullets for all of
+ them, however, if one goal is more important than the others
+ (i.e. is main flow of the proof). Then you might remove the bullet
+ for this last one and unindent it as in:
+ ```
+ tactic.
+ - tactic. (* secondary subgoal 1 *)
+ - tactic. (* secondary subgoal 2 *)
+ tactic. (* third subgoal is the main one *)
+ ```
+
+## Statements of lemmas, theorems and definitions.
+
+- Universal quantifications with dependent variable should appear on the left hand side of the colon, until we reach the first non dependent variable. e.g.
+ `Lemma example x y : x < y -> x >= y = false`
+
+### Term style.
+- Operators are surrounded by space, for example `n*m` should be written `n * m`.
+This particular example can be problematic if matrix.v is imported because then, `M *m N` is matrix product.
+
+### Naming of variables
+- Variable names follow the following conventions.
+ + Hypothesis should not be named `H`, `H'`,... (these collide with
+ subgroup variable conventions) but have meaningful names. For
+ example, an hypothesis `n > 0` should be named `n_gt0`.
+ + Induction Hypothesies are prefixed by `IH` or `ih` (e.g. induction hypothesis on `n` is called `IH`).
+ + Natural numbers and integers should be names `m`, `n`, `p`, `d`, ...
+ + Elements of another ring should be named `x`, `y`, `z`, `u`, `v`, `w`, ...
+ + Polynomials are named by lower case letter `p`, `q`, `r` ... (to avoid collision with properties named `P`, `Q`, ...)
+ + Matrices are named `M`, `N`, `D`, ...