Module docstring
{"# The type of nonnegative elements
This file defines instances and prove some properties about the nonnegative elements
{x : α // 0 ≤ x} of an arbitrary type α.
Currently we only state instances and states some simp/norm_cast lemmas.
When α is ℝ, this will give us some properties about ℝ≥0.
Implementation Notes
Instead of {x : α // 0 ≤ x} we could also use Set.Ici (0 : α), which is definitionally equal.
However, using the explicit subtype has a big advantage: when writing an element explicitly
with a proof of nonnegativity as ⟨x, hx⟩, the hx is expected to have type 0 ≤ x. If we would
use Ici 0, then the type is expected to be x ∈ Ici 0. Although these types are definitionally
equal, this often confuses the elaborator. Similar problems arise when doing cases on an element.
The disadvantage is that we have to duplicate some instances about Set.Ici to this subtype.
"}