Version 2.0
===========
The library has been tested using Agda 2.6.4 and 2.6.4.1.
NOTE: Version `2.0` contains various breaking changes and is not backwards
compatible with code written with version `1.X` of the library.
Highlights
----------
* A new tactic `cong!` available from `Tactic.Cong` which automatically
infers the argument to `cong` for you via anti-unification.
* Improved the `solve` tactic in `Tactic.RingSolver` to work in a much
wider range of situations.
* A massive refactoring of the unindexed `Functor`/`Applicative`/`Monad` hierarchy
and the `MonadReader` / `MonadState` type classes. These are now usable with
instance arguments as demonstrated in the tests/monad examples.
* Significant tightening of `import` statements internally in the library,
drastically decreasing the dependencies and hence load time of many key
modules.
* A golden testing library in `Test.Golden`. This allows you to run a set
of tests and make sure their output matches an expected `golden` value.
The test runner has many options: filtering tests by name, dumping the
list of failures to a file, timing the runs, coloured output, etc.
Cf. the comments in `Test.Golden` and the standard library's own tests
in `tests/` for documentation on how to use the library.
Bug-fixes
---------
* In `Algebra.Structures` the records `IsRing` and `IsRingWithoutOne` contained an unnecessary field
`zero : RightZero 0# *`, which could be derived from the other ring axioms.
Consequently this field has been removed from the record, and the record
`IsRingWithoutAnnihilatingZero` in `Algebra.Structures.Biased` has been
deprecated as it is now identical to is `IsRing`.
* In `Algebra.Definitions.RawSemiring` the record `Prime` did not
enforce that the number was not divisible by `1#`. To fix this
`p∤1 : p ∤ 1#` has been added as a field.
* In `Data.Container.FreeMonad`, we give a direct definition of `_⋆_` as an inductive
type rather than encoding it as an instance of `μ`. This ensures Agda notices that
`C ⋆ X` is strictly positive in `X` which in turn allows us to use the free monad
when defining auxiliary (co)inductive types (cf. the `Tap` example in
`README.Data.Container.FreeMonad`).
* In `Data.Fin.Properties` the `i` argument to `opposite-suc` was implicit
but could not be inferred in general. It has been made explicit.
* In `Data.List.Membership.Setoid` the operations `_∷=_` and `_─_`
had an extraneous `{A : Set a}` parameter. This has been removed.
* In `Data.List.Relation.Ternary.Appending.Setoid` the constructors
were re-exported in their full generality which lead to unsolved meta
variables at their use sites. Now versions of the constructors specialised
to use the setoid's carrier set are re-exported.
* In `Data.Nat.DivMod` the parameter `o` in the proof `/-monoˡ-≤` was
implicit but not inferrable. It has been changed to be explicit.
* In `Data.Nat.DivMod` the parameter `m` in the proof `+-distrib-/-∣ʳ` was
implicit but not inferrable, while `n` is explicit but inferrable.
They have been to explicit and implicit respectively.
* In `Data.Nat.GeneralisedArithmetic` the `s` and `z` arguments to the
following functions were implicit but not inferrable:
`fold-+`, `fold-k`, `fold-*`, `fold-pull`. They have been made explicit.
* In `Data.Rational(.Unnormalised).Properties` the module `≤-Reasoning`
exported equality combinators using the generic setoid symbol `_≈_`. They
have been renamed to use the same `_≃_` symbol used for non-propositional
equality over `Rational`s, i.e.
```agda
step-≈ ↦ step-≃
step-≈˘ ↦ step-≃˘
```
with corresponding associated syntax:
```agda
_≈⟨_⟩_ ↦ _≃⟨_⟩_
_≈⟨_⟨_ ↦ _≃⟨_⟨_
```
* In `Function.Construct.Composition` the combinators
`_⟶-∘_`, `_↣-∘_`, `_↠-∘_`, `_⤖-∘_`, `_⇔-∘_`, `_↩-∘_`, `_↪-∘_`, `_↔-∘_`
had their arguments in the wrong order. They have been flipped so they can
actually be used as a composition operator.
* In `Function.Definitions` the definitions of `Surjection`, `Inverseˡ`,
`Inverseʳ` were not being re-exported correctly and therefore had an unsolved
meta-variable whenever this module was explicitly parameterised. This has
been fixed.
* In `System.Exit` the `ExitFailure` constructor is now carrying an integer
rather than a natural. The previous binding was incorrectly assuming that
all exit codes where non-negative.
Non-backwards compatible changes
--------------------------------
### Removed deprecated names
* All modules and names that were deprecated in `v1.2` and before have
been removed.
### Changes to `LeftCancellative` and `RightCancellative` in `Algebra.Definitions`
* The definitions of the types for cancellativity in `Algebra.Definitions` previously
made some of their arguments implicit. This was under the assumption that the operators were
defined by pattern matching on the left argument so that Agda could always infer the
argument on the RHS.
* Although many of the operators defined in the library follow this convention, this is not
always true and cannot be assumed in user's code.
* Therefore the definitions have been changed as follows to make all their arguments explicit:
- `LeftCancellative _∙_`
- From: `∀ x {y z} → (x ∙ y) ≈ (x ∙ z) → y ≈ z`
- To: `∀ x y z → (x ∙ y) ≈ (x ∙ z) → y ≈ z`
- `RightCancellative _∙_`
- From: `∀ {x} y z → (y ∙ x) ≈ (z ∙ x) → y ≈ z`
- To: `∀ x y z → (y ∙ x) ≈ (z ∙ x) → y ≈ z`
- `AlmostLeftCancellative e _∙_`
- From: `∀ {x} y z → ¬ x ≈ e → (x ∙ y) ≈ (x ∙ z) → y ≈ z`
- To: `∀ x y z → ¬ x ≈ e → (x ∙ y) ≈ (x ∙ z) → y ≈ z`
- `AlmostRightCancellative e _∙_`
- From: `∀ {x} y z → ¬ x ≈ e → (y ∙ x) ≈ (z ∙ x) → y ≈ z`
- To: `∀ x y z → ¬ x ≈ e → (y ∙ x) ≈ (z ∙ x) → y ≈ z`
* Correspondingly some proofs of the above types will need additional arguments passed explicitly.
Instances can easily be fixed by adding additional underscores, e.g.
- `∙-cancelˡ x` to `∙-cancelˡ x _ _`
- `∙-cancelʳ y z` to `∙-cancelʳ _ y z`
### Changes to ring structures in `Algebra`
* Several ring-like structures now have the multiplicative structure defined by
its laws rather than as a substructure, to avoid repeated proofs that the
underlying relation is an equivalence. These are:
* `IsNearSemiring`
* `IsSemiringWithoutOne`
* `IsSemiringWithoutAnnihilatingZero`
* `IsRing`
* To aid with migration, structures matching the old style ones have been added
to `Algebra.Structures.Biased`, with conversion functions:
* `IsNearSemiring*` and `isNearSemiring*`
* `IsSemiringWithoutOne*` and `isSemiringWithoutOne*`
* `IsSemiringWithoutAnnihilatingZero*` and `isSemiringWithoutAnnihilatingZero*`
* `IsRing*` and `isRing*`
### Refactoring of lattices in `Algebra.Structures/Bundles` hierarchy
* In order to improve modularity and consistency with `Relation.Binary.Lattice`,
the structures & bundles for `Semilattice`, `Lattice`, `DistributiveLattice`
& `BooleanAlgebra` have been moved out of the `Algebra` modules and into their
own hierarchy in `Algebra.Lattice`.
* All submodules, (e.g. `Algebra.Properties.Semilattice` or `Algebra.Morphism.Lattice`)
have been moved to the corresponding place under `Algebra.Lattice` (e.g.
`Algebra.Lattice.Properties.Semilattice` or `Algebra.Lattice.Morphism.Lattice`). See
the `Deprecated modules` section below for full details.
* The definition of `IsDistributiveLattice` and `IsBooleanAlgebra` have changed so
that they are no longer right-biased which hindered compositionality.
More concretely, `IsDistributiveLattice` now has fields:
```agda
∨-distrib-∧ : ∨ DistributesOver ∧
∧-distrib-∨ : ∧ DistributesOver ∨
```
instead of
```agda
∨-distribʳ-∧ : ∨ DistributesOverʳ ∧
```
and `IsBooleanAlgebra` now has fields:
```agda
∨-complement : Inverse ⊤ ¬ ∨
∧-complement : Inverse ⊥ ¬ ∧
```
instead of:
```agda
∨-complementʳ : RightInverse ⊤ ¬ ∨
∧-complementʳ : RightInverse ⊥ ¬ ∧
```
* To allow construction of these structures via their old form, smart constructors
have been added to a new module `Algebra.Lattice.Structures.Biased`, which are by
re-exported automatically by `Algebra.Lattice`. For example, if before you wrote:
```agda
∧-∨-isDistributiveLattice = record
{ isLattice = ∧-∨-isLattice
; ∨-distribʳ-∧ = ∨-distribʳ-∧
}
```
you can use the smart constructor `isDistributiveLatticeʳʲᵐ` to write:
```agda
∧-∨-isDistributiveLattice = isDistributiveLatticeʳʲᵐ (record
{ isLattice = ∧-∨-isLattice
; ∨-distribʳ-∧ = ∨-distribʳ-∧
})
```
without having to prove full distributivity.
* Added new `IsBoundedSemilattice`/`BoundedSemilattice` records.
* Added new aliases `Is(Meet/Join)(Bounded)Semilattice` for `Is(Bounded)Semilattice`
which can be used to indicate meet/join-ness of the original structures, and
the field names in `IsSemilattice` and `Semilattice` have been renamed from
`∧-cong` to `∙-cong`to indicate their undirected nature.
* Finally, the following auxiliary files have been moved:
```agda
Algebra.Properties.Semilattice ↦ Algebra.Lattice.Properties.Semilattice
Algebra.Properties.Lattice ↦ Algebra.Lattice.Properties.Lattice
Algebra.Properties.DistributiveLattice ↦ Algebra.Lattice.Properties.DistributiveLattice
Algebra.Properties.BooleanAlgebra ↦ Algebra.Lattice.Properties.BooleanAlgebra
Algebra.Properties.BooleanAlgebra.Expression ↦ Algebra.Lattice.Properties.BooleanAlgebra.Expression
Algebra.Morphism.LatticeMonomorphism ↦ Algebra.Lattice.Morphism.LatticeMonomorphism
```
#### Changes to `Algebra.Morphism.Structures`
* Previously the record definitions:
```
IsNearSemiringHomomorphism
IsSemiringHomomorphism
IsRingHomomorphism
```
all had two separate proofs of `IsRelHomomorphism` within them.
* To fix this they have all been redefined to build up from `IsMonoidHomomorphism`,
`IsNearSemiringHomomorphism`, and `IsSemiringHomomorphism` respectively,
adding a single property at each step.
* Similarly, `IsLatticeHomomorphism` is now built as
`IsRelHomomorphism` along with proofs that `_∧_` and `_∨_` are homomorphic.
* Finally `⁻¹-homo` in `IsRingHomomorphism` has been renamed to `-‿homo`.
#### Renamed `Category` modules to `Effect`
* As observed by Wen Kokke in issue #1636, it no longer really makes sense
to group the modules which correspond to the variety of concepts of
(effectful) type constructor arising in functional programming (esp. in Haskell)
such as `Monad`, `Applicative`, `Functor`, etc, under `Category.*`,
as this obstructs the importing of the `agda-categories` development into
the Standard Library, and moreover needlessly restricts the applicability of
categorical concepts to this (highly specific) mode of use.
* Correspondingly, client modules grouped under `*.Categorical.*` which
exploit such structure for effectful programming have been renamed
`*.Effectful`, with the originals being deprecated.
* Full list of moved modules:
```agda
Codata.Sized.Colist.Categorical ↦ Codata.Sized.Colist.Effectful
Codata.Sized.Covec.Categorical ↦ Codata.Sized.Covec.Effectful
Codata.Sized.Delay.Categorical ↦ Codata.Sized.Delay.Effectful
Codata.Sized.Stream.Categorical ↦ Codata.Sized.Stream.Effectful
Data.List.Categorical ↦ Data.List.Effectful
Data.List.Categorical.Transformer ↦ Data.List.Effectful.Transformer
Data.List.NonEmpty.Categorical ↦ Data.List.NonEmpty.Effectful
Data.List.NonEmpty.Categorical.Transformer ↦ Data.List.NonEmpty.Effectful.Transformer
Data.Maybe.Categorical ↦ Data.Maybe.Effectful
Data.Maybe.Categorical.Transformer ↦ Data.Maybe.Effectful.Transformer
Data.Product.Categorical.Examples ↦ Data.Product.Effectful.Examples
Data.Product.Categorical.Left ↦ Data.Product.Effectful.Left
Data.Product.Categorical.Left.Base ↦ Data.Product.Effectful.Left.Base
Data.Product.Categorical.Right ↦ Data.Product.Effectful.Right
Data.Product.Categorical.Right.Base ↦ Data.Product.Effectful.Right.Base
Data.Sum.Categorical.Examples ↦ Data.Sum.Effectful.Examples
Data.Sum.Categorical.Left ↦ Data.Sum.Effectful.Left
Data.Sum.Categorical.Left.Transformer ↦ Data.Sum.Effectful.Left.Transformer
Data.Sum.Categorical.Right ↦ Data.Sum.Effectful.Right
Data.Sum.Categorical.Right.Transformer ↦ Data.Sum.Effectful.Right.Transformer
Data.These.Categorical.Examples ↦ Data.These.Effectful.Examples
Data.These.Categorical.Left ↦ Data.These.Effectful.Left
Data.These.Categorical.Left.Base ↦ Data.These.Effectful.Left.Base
Data.These.Categorical.Right ↦ Data.These.Effectful.Right
Data.These.Categorical.Right.Base ↦ Data.These.Effectful.Right.Base
Data.Vec.Categorical ↦ Data.Vec.Effectful
Data.Vec.Categorical.Transformer ↦ Data.Vec.Effectful.Transformer
Data.Vec.Recursive.Categorical ↦ Data.Vec.Recursive.Effectful
Function.Identity.Categorical ↦ Function.Identity.Effectful
IO.Categorical ↦ IO.Effectful
Reflection.TCM.Categorical ↦ Reflection.TCM.Effectful
```
* Full list of new modules:
```
Algebra.Construct.Initial
Algebra.Construct.Terminal
Data.List.Effectful.Transformer
Data.List.NonEmpty.Effectful.Transformer
Data.Maybe.Effectful.Transformer
Data.Sum.Effectful.Left.Transformer
Data.Sum.Effectful.Right.Transformer
Data.Vec.Effectful.Transformer
Effect.Empty
Effect.Choice
Effect.Monad.Error.Transformer
Effect.Monad.Identity
Effect.Monad.IO
Effect.Monad.IO.Instances
Effect.Monad.Reader.Indexed
Effect.Monad.Reader.Instances
Effect.Monad.Reader.Transformer
Effect.Monad.Reader.Transformer.Base
Effect.Monad.State.Indexed
Effect.Monad.State.Instances
Effect.Monad.State.Transformer
Effect.Monad.State.Transformer.Base
Effect.Monad.Writer
Effect.Monad.Writer.Indexed
Effect.Monad.Writer.Instances
Effect.Monad.Writer.Transformer
Effect.Monad.Writer.Transformer.Base
IO.Effectful
IO.Instances
```
### Refactoring of the unindexed Functor/Applicative/Monad hierarchy in `Effect`
* The unindexed versions are not defined in terms of the named versions anymore.
* The `RawApplicative` and `RawMonad` type classes have been relaxed so that the underlying
functors do not need their domain and codomain to live at the same Set level.
This is needed for level-increasing functors like `IO : Set l → Set (suc l)`.
* `RawApplicative` is now `RawFunctor + pure + _<*>_` and `RawMonad` is now
`RawApplicative` + `_>>=_`.
This reorganisation means in particular that the functor/applicative of a monad
are not computed using `_>>=_`. This may break proofs.
* When `F : Set f → Set f` we moreover have a definable join/μ operator
`join : (M : RawMonad F) → F (F A) → F A`.
* We now have `RawEmpty` and `RawChoice` respectively packing `empty : M A` and
`(<|>) : M A → M A → M A`. `RawApplicativeZero`, `RawAlternative`, `RawMonadZero`,
`RawMonadPlus` are all defined in terms of these.
* `MonadT T` now returns a `MonadTd` record that packs both a proof that the
`Monad M` transformed by `T` is a monad and that we can `lift` a computation
`M A` to a transformed computation `T M A`.
* The monad transformer are not mere aliases anymore, they are record-wrapped
which allows constraints such as `MonadIO (StateT S (ReaderT R IO))` to be
discharged by instance arguments.
* The mtl-style type classes (`MonadState`, `MonadReader`) do not contain a proof
that the underlying functor is a `Monad` anymore. This ensures we do not have
conflicting `Monad M` instances from a pair of `MonadState S M` & `MonadReader R M`
constraints.
* `MonadState S M` is now defined in terms of
```agda
gets : (S → A) → M A
modify : (S → S) → M ⊤
```
with `get` and `put` defined as derived notions.
This is needed because `MonadState S M` does not pack a `Monad M` instance anymore
and so we cannot define `modify f` as `get >>= λ s → put (f s)`.
* `MonadWriter 𝕎 M` is defined similarly:
```agda
writer : W × A → M A
listen : M A → M (W × A)
pass : M ((W → W) × A) → M A
```
with `tell` defined as a derived notion.
Note that `𝕎` is a `RawMonoid`, not a `Set` and `W` is the carrier of the monoid.
#### Moved `Codata` modules to `Codata.Sized`
* Due to the change in Agda 2.6.2 where sized types are no longer compatible
with the `--safe` flag, it has become clear that a third variant of codata
will be needed using coinductive records.
* Therefore all existing modules in `Codata` which used sized types have been
moved inside a new folder named `Codata.Sized`, e.g. `Codata.Stream`
has become `Codata.Sized.Stream`.
### New proof-irrelevant for empty type in `Data.Empty`
* The definition of `⊥` has been changed to
```agda
private
data Empty : Set where
⊥ : Set
⊥ = Irrelevant Empty
```
in order to make ⊥ proof irrelevant. Any two proofs of `⊥` or of a negated
statements are now *judgmentally* equal to each other.
* Consequently the following two definitions have been modified:
+ In `Relation.Nullary.Decidable.Core`, the type of `dec-no` has changed
```agda
dec-no : (p? : Dec P) → ¬ P → ∃ λ ¬p′ → p? ≡ no ¬p′
↦
dec-no : (p? : Dec P) (¬p : ¬ P) → p? ≡ no ¬p
```
+ In `Relation.Binary.PropositionalEquality`, the type of `≢-≟-identity` has changed
```agda
≢-≟-identity : x ≢ y → ∃ λ ¬eq → x ≟ y ≡ no ¬eq
↦
≢-≟-identity : (x≢y : x ≢ y) → x ≟ y ≡ no x≢y
```
### Deprecation of `_≺_` in `Data.Fin.Base`
* In `Data.Fin.Base` the relation `_≺_` and its single constructor `_≻toℕ_`
have been deprecated in favour of their extensional equivalent `_<_`
but omitting the inversion principle which pattern matching on `_≻toℕ_`
would achieve; this instead is proxied by the property `Data.Fin.Properties.toℕ<`.
* Consequently in `Data.Fin.Induction`:
```
≺-Rec
≺-wellFounded
≺-recBuilder
≺-rec
```
these functions are also deprecated.
* Likewise in `Data.Fin.Properties` the proofs `≺⇒<′` and `<′⇒≺` have been deprecated
in favour of their proxy counterparts `<⇒<′` and `<′⇒<`.
### Standardisation of `insertAt`/`updateAt`/`removeAt` in `Data.List`/`Data.Vec`
* Previously, the names and argument order of index-based insertion, update and removal functions for
various types of lists and vectors were inconsistent.
* To fix this the names have all been standardised to `insertAt`/`updateAt`/`removeAt`.
* Correspondingly the following changes have occurred:
* In `Data.List.Base` the following have been added:
```agda
insertAt : (xs : List A) → Fin (suc (length xs)) → A → List A
updateAt : (xs : List A) → Fin (length xs) → (A → A) → List A
removeAt : (xs : List A) → Fin (length xs) → List A
```
and the following has been deprecated
```
_─_ ↦ removeAt
```
* In `Data.Vec.Base`:
```agda
insert ↦ insertAt
remove ↦ removeAt
updateAt : Fin n → (A → A) → Vec A n → Vec A n
↦
updateAt : Vec A n → Fin n → (A → A) → Vec A n
```
* In `Data.Vec.Functional`:
```agda
remove : Fin (suc n) → Vector A (suc n) → Vector A n
↦
removeAt : Vector A (suc n) → Fin (suc n) → Vector A n
updateAt : Fin n → (A → A) → Vector A n → Vector A n
↦
updateAt : Vector A n → Fin n → (A → A) → Vector A n
```
* The old names (and the names of all proofs about these functions) have been deprecated appropriately.
#### Standardisation of `lookup` in `Data.(List/Vec/...)`
* All the types of `lookup` functions (and variants) in the following modules
have been changed to match the argument convention adopted in the `List` module (i.e.
`lookup` takes its container first and the index, whose type may depend on the
container value, second):
```
Codata.Guarded.Stream
Codata.Guarded.Stream.Relation.Binary.Pointwise
Codata.Musical.Colist.Base
Codata.Musical.Colist.Relation.Unary.Any.Properties
Codata.Musical.Covec
Codata.Musical.Stream
Codata.Sized.Colist
Codata.Sized.Covec
Codata.Sized.Stream
Data.Vec.Relation.Unary.All
Data.Star.Environment
Data.Star.Pointer
Data.Star.Vec
Data.Trie
Data.Trie.NonEmpty
Data.Tree.AVL
Data.Tree.AVL.Indexed
Data.Tree.AVL.Map
Data.Tree.AVL.NonEmpty
Data.Vec.Recursive
```
* To accommodate this in in `Data.Vec.Relation.Unary.Linked.Properties`
and `Codata.Guarded.Stream.Relation.Binary.Pointwise`, the proofs
called `lookup` have been renamed `lookup⁺`.
#### Changes to `Data.(Nat/Integer/Rational)` proofs of `NonZero`/`Positive`/`Negative` to use instance arguments
* Many numeric operations in the library require their arguments to be non-zero,
and various proofs require their arguments to be non-zero/positive/negative etc.
As discussed on the [mailing list](https://lists.chalmers.se/pipermail/agda/2021/012693.html),
the previous way of constructing and passing round these proofs was extremely
clunky and lead to messy and difficult to read code.
* We have therefore changed every occurrence where we need a proof of
non-zeroness/positivity/etc. to take it as an irrelevant
[instance argument](https://agda.readthedocs.io/en/latest/language/instance-arguments.html).
See the mailing list discussion for a fuller explanation of the motivation and implementation.
* For example, whereas the type of division over `ℕ` used to be:
```agda
_/_ : (dividend divisor : ℕ) {≢0 : False (divisor ≟ 0)} → ℕ
```
it is now:
```agda
_/_ : (dividend divisor : ℕ) .{{_ : NonZero divisor}} → ℕ
```
* This means that as long as an instance of `NonZero n` is in scope then you can write
`m / n` without having to explicitly provide a proof, as instance search will fill it in
for you. The full list of such operations changed is as follows:
- In `Data.Nat.DivMod`: `_/_`, `_%_`, `_div_`, `_mod_`
- In `Data.Nat.Pseudorandom.LCG`: `Generator`
- In `Data.Integer.DivMod`: `_divℕ_`, `_div_`, `_modℕ_`, `_mod_`
- In `Data.Rational`: `mkℚ+`, `normalize`, `_/_`, `1/_`
- In `Data.Rational.Unnormalised`: `_/_`, `1/_`, `_÷_`
* At the moment, there are 4 different ways such instance arguments can be provided,
listed in order of convenience and clarity:
1. *Automatic basic instances* - the standard library provides instances based on
the constructors of each numeric type in `Data.X.Base`. For example,
`Data.Nat.Base` constrains an instance of `NonZero (suc n)` for any `n`
and `Data.Integer.Base` contains an instance of `NonNegative (+ n)` for any `n`.
Consequently, if the argument is of the required form, these instances will always
be filled in by instance search automatically, e.g.
```agda
0/n≡0 : 0 / suc n ≡ 0
```
2. *Add an instance argument parameter* - You can provide the instance argument as
a parameter to your function and Agda's instance search will automatically use it
in the correct place without you having to explicitly pass it, e.g.
```agda
0/n≡0 : .{{_ : NonZero n}} → 0 / n ≡ 0
```
3. *Define the instance locally* - You can define an instance argument in scope
(e.g. in a `where` clause) and Agda's instance search will again find it automatically,
e.g.
```agda
instance
n≢0 : NonZero n
n≢0 = ...
0/n≡0 : 0 / n ≡ 0
```
4. *Pass the instance argument explicitly* - Finally, if all else fails you can pass the
instance argument explicitly into the function using `{{ }}`, e.g.
```
0/n≡0 : ∀ n (n≢0 : NonZero n) → ((0 / n) {{n≢0}}) ≡ 0
```
* Suitable constructors for `NonZero`/`Positive` etc. can be found in `Data.X.Base`.
* A full list of proofs that have changed to use instance arguments is available
at the end of this file. Notable changes to proofs are now discussed below.
* Previously one of the hacks used in proofs was to explicitly refer to everything
in the correct form, e.g. if the argument `n` had to be non-zero then you would
refer to the argument as `suc n` everywhere instead of `n`, e.g.
```
n/n≡1 : ∀ n → suc n / suc n ≡ 1
```
This made the proofs extremely difficult to use if your term wasn't in the form `suc n`.
After being updated to use instance arguments instead, the proof above becomes:
```
n/n≡1 : ∀ n {{_ : NonZero n}} → n / n ≡ 1
```
However, note that this means that if you passed in the value `x` to these proofs
before, then you will now have to pass in `suc x`. The proofs for which the
arguments have changed form in this way are highlighted in the list at the bottom
of the file.
* Finally, in `Data.Rational.Unnormalised.Base` the definition of `_≢0` is now
redundant and so has been removed. Additionally the following proofs about it have
also been removed from `Data.Rational.Unnormalised.Properties`:
```
p≄0⇒∣↥p∣≢0 : ∀ p → p ≠ 0ℚᵘ → ℤ.∣ (↥ p) ∣ ≢0
∣↥p∣≢0⇒p≄0 : ∀ p → ℤ.∣ (↥ p) ∣ ≢0 → p ≠ 0ℚᵘ
```
### Changes to the definition of `_≤″_` in `Data.Nat.Base` (issue #1919)
* The definition of `_≤″_` was previously:
```agda
record _≤″_ (m n : ℕ) : Set where
constructor less-than-or-equal
field
{k} : ℕ
proof : m + k ≡ n
```
which introduced a spurious additional definition, when this is in fact, modulo
field names and implicit/explicit qualifiers, equivalent to the definition of left-
divisibility, `_∣ˡ_` for the `RawMagma` structure of `_+_`.
* Since the addition of raw bundles to `Data.X.Base`, this definition can now be
made directly. Accordingly, the definition has been changed to:
```agda
_≤″_ : (m n : ℕ) → Set
_≤″_ = _∣ˡ_ +-rawMagma
pattern less-than-or-equal {k} prf = k , prf
```
* Knock-on consequences include the need to retain the old constructor
name, now introduced as a pattern synonym, and introduction of (a function
equivalent to) the former field name/projection function `proof` as
`≤″-proof` in `Data.Nat.Properties`.
### Changes to definition of `Prime` in `Data.Nat.Primality`
* The definition of `Prime` was:
```agda
Prime 0 = ⊥
Prime 1 = ⊥
Prime (suc (suc n)) = (i : Fin n) → 2 + toℕ i ∤ 2 + n
```
which was very hard to reason about as, not only did it involve conversion
to and from the `Fin` type, it also required that the divisor was of the form
`2 + toℕ i`, which has exactly the same problem as the `suc n` hack described
above used for non-zeroness.
* To make it easier to use, reason about and read, the definition has been
changed to:
```agda
record Prime (p : ℕ) : Set where
constructor prime
field
.{{nontrivial}} : NonTrivial p
notComposite : ¬ Composite p
```
where `Composite` is now defined as the diagonal of the new relation
`_HasNonTrivialDivisorLessThan_` in `Data.Nat.Divisibility.Core`.
### Changes to operation reduction behaviour in `Data.Rational(.Unnormalised)`
* Currently arithmetic expressions involving rationals (both normalised and
unnormalised) undergo disastrous exponential normalisation. For example,
`p + q` would often be normalised by Agda to
`(↥ p ℤ.* ↧ q ℤ.+ ↥ q ℤ.* ↧ p) / (↧ₙ p ℕ.* ↧ₙ q)`. While the normalised form
of `p + q + r + s + t + u + v` would be ~700 lines long. This behaviour
often chokes both type-checking and the display of the expressions in the IDE.
* To avoid this expansion and make non-trivial reasoning about rationals actually feasible:
1. the records `ℚᵘ` and `ℚ` have both had the `no-eta-equality` flag enabled
2. definition of arithmetic operations have trivial pattern matching added to
prevent them reducing, e.g.
```agda
p + q = (↥ p ℤ.* ↧ q ℤ.+ ↥ q ℤ.* ↧ p) / (↧ₙ p ℕ.* ↧ₙ q)
```
has been changed to
```
p@record{} + q@record{} = (↥ p ℤ.* ↧ q ℤ.+ ↥ q ℤ.* ↧ p) / (↧ₙ p ℕ.* ↧ₙ q)
```
* As a consequence of this, some proofs that relied either on this reduction behaviour
or on eta-equality may no longer type-check.
* There are several ways to fix this:
1. The principled way is to not rely on this reduction behaviour in the first place.
The `Properties` files for rational numbers have been greatly expanded in `v1.7`
and `v2.0`, and we believe most proofs should be able to be built up from existing
proofs contained within these files.
2. Alternatively, annotating any rational arguments to a proof with either
`@record{}` or `@(mkℚ _ _ _)` should restore the old reduction behaviour for any
terms involving those parameters.
3. Finally, if the above approaches are not viable then you may be forced to explicitly
use `cong` combined with a lemma that proves the old reduction behaviour.
* Similarly, in order to prevent reduction, the equality `_≃_` in `Data.Rational.Base`
has been made into a data type with the single constructor `*≡*`. The destructor
`drop-*≡*` has been added to `Data.Rational.Properties`.
#### Deprecation of old `Function` hierarchy
* The new `Function` hierarchy was introduced in `v1.2` which follows
the same `Core`/`Definitions`/`Bundles`/`Structures` as all the other
hierarchies in the library.
* At the time the old function hierarchy in:
```
Function.Equality
Function.Injection
Function.Surjection
Function.Bijection
Function.LeftInverse
Function.Inverse
Function.HalfAdjointEquivalence
Function.Related
```
was unofficially deprecated, but could not be officially deprecated because
of it's widespread use in the rest of the library.
* Now, the old hierarchy modules have all been officially deprecated. All
uses of them in the rest of the library have been switched to use the
new hierarchy.
* The latter is unfortunately a relatively big breaking change, but was judged
to be unavoidable given how widely used the old hierarchy was.
#### Changes to the new `Function` hierarchy
* In `Function.Bundles` the names of the fields in the records have been
changed from `f`, `g`, `cong₁` and `cong₂` to `to`, `from`, `to-cong`, `from-cong`.
* In `Function.Definitions`, the module no longer has two equalities as
module arguments, as they did not interact as intended with the re-exports
from `Function.Definitions.(Core1/Core2)`. The latter two modules have
been removed and their definitions folded into `Function.Definitions`.
* In `Function.Definitions` the following definitions have been changed from:
```
Surjective f = ∀ y → ∃ λ x → f x ≈₂ y
Inverseˡ f g = ∀ y → f (g y) ≈₂ y
Inverseʳ f g = ∀ x → g (f x) ≈₁ x
```
to:
```
Surjective f = ∀ y → ∃ λ x → ∀ {z} → z ≈₁ x → f z ≈₂ y
Inverseˡ f g = ∀ {x y} → y ≈₁ g x → f y ≈₂ x
Inverseʳ f g = ∀ {x y} → y ≈₂ f x → g y ≈₁ x
```
This is for several reasons:
i) the new definitions compose much more easily,
ii) Agda can better infer the equalities used.
* To ease backwards compatibility:
- the old definitions have been moved to the new names `StrictlySurjective`,
`StrictlyInverseˡ` and `StrictlyInverseʳ`.
- The records in `Function.Structures` and `Function.Bundles` export proofs
of these under the names `strictlySurjective`, `strictlyInverseˡ` and
`strictlyInverseʳ`,
- Conversion functions for the definitions have been added in both directions
to `Function.Consequences(.Propositional/Setoid)`.
- Conversion functions for structures have been added in
`Function.Structures.Biased`.
### New `Function.Strict`
* The module `Strict` has been deprecated in favour of `Function.Strict`
and the definitions of strict application, `_$!_` and `_$!′_`, have been
moved from `Function.Base` to `Function.Strict`.
* The contents of `Function.Strict` is now re-exported by `Function`.
### Change to the definition of `WfRec` in `Induction.WellFounded` (issue #2083)
* Previously, the definition of `WfRec` was:
```agda
WfRec : Rel A r → ∀ {ℓ} → RecStruct A ℓ _
WfRec _<_ P x = ∀ y → y < x → P y
```
which meant that all arguments involving accessibility and wellfoundedness proofs
were polluted by almost-always-inferrable explicit arguments for the `y` position.
* The definition has now been changed to make that argument *implicit*, as
```agda
WfRec : Rel A r → ∀ {ℓ} → RecStruct A ℓ _
WfRec _<_ P x = ∀ {y} → y < x → P y
```
### Reorganisation of `Reflection` modules
* Under the `Reflection` module, there were various impending name clashes
between the core AST as exposed by Agda and the annotated AST defined in
the library.
* While the content of the modules remain the same, the modules themselves
have therefore been renamed as follows:
```
Reflection.Annotated ↦ Reflection.AnnotatedAST
Reflection.Annotated.Free ↦ Reflection.AnnotatedAST.Free
Reflection.Abstraction ↦ Reflection.AST.Abstraction
Reflection.Argument ↦ Reflection.AST.Argument
Reflection.Argument.Information ↦ Reflection.AST.Argument.Information
Reflection.Argument.Quantity ↦ Reflection.AST.Argument.Quantity
Reflection.Argument.Relevance ↦ Reflection.AST.Argument.Relevance
Reflection.Argument.Modality ↦ Reflection.AST.Argument.Modality
Reflection.Argument.Visibility ↦ Reflection.AST.Argument.Visibility
Reflection.DeBruijn ↦ Reflection.AST.DeBruijn
Reflection.Definition ↦ Reflection.AST.Definition
Reflection.Instances ↦ Reflection.AST.Instances
Reflection.Literal ↦ Reflection.AST.Literal
Reflection.Meta ↦ Reflection.AST.Meta
Reflection.Name ↦ Reflection.AST.Name
Reflection.Pattern ↦ Reflection.AST.Pattern
Reflection.Show ↦ Reflection.AST.Show
Reflection.Traversal ↦ Reflection.AST.Traversal
Reflection.Universe ↦ Reflection.AST.Universe
Reflection.TypeChecking.Monad ↦ Reflection.TCM
Reflection.TypeChecking.Monad.Categorical ↦ Reflection.TCM.Categorical
Reflection.TypeChecking.Monad.Format ↦ Reflection.TCM.Format
Reflection.TypeChecking.Monad.Syntax ↦ Reflection.TCM.Instances
Reflection.TypeChecking.Monad.Instances ↦ Reflection.TCM.Syntax
```
* A new module `Reflection.AST` that re-exports the contents of the
submodules has been added.
### Reorganisation of the `Relation.Nullary` hierarchy
* It was very difficult to use the `Relation.Nullary` modules, as
`Relation.Nullary` contained the basic definitions of negation, decidability etc.,
and the operations and proofs about these definitions were spread over
`Relation.Nullary.(Negation/Product/Sum/Implication etc.)`.
* To fix this all the contents of the latter is now exported by `Relation.Nullary`.
* In order to achieve this the following backwards compatible changes have been made:
1. the definition of `Dec` and `recompute` have been moved to `Relation.Nullary.Decidable.Core`
2. the definition of `Reflects` has been moved to `Relation.Nullary.Reflects`
3. the definition of `¬_` has been moved to `Relation.Nullary.Negation.Core`
4. The modules `Relation.Nullary.(Product/Sum/Implication)` have been deprecated
and their contents moved to `Relation.Nullary.(Negation/Reflects/Decidable)`.
5. The proof `T?` has been moved from `Data.Bool.Properties` to `Relation.Nullary.Decidable.Core`
(but is still re-exported by the former).
as well as the following breaking changes:
1. `¬?` has been moved from `Relation.Nullary.Negation.Core` to
`Relation.Nullary.Decidable.Core`
2. `¬-reflects` has been moved from `Relation.Nullary.Negation.Core` to
`Relation.Nullary.Reflects`.
3. `decidable-stable`, `excluded-middle` and `¬-drop-Dec` have been moved
from `Relation.Nullary.Negation` to `Relation.Nullary.Decidable`.
4. `fromDec` and `toDec` have been moved from `Data.Sum.Base` to `Data.Sum`.
### (Issue #2096) Introduction of flipped and negated relation symbols to bundles in `Relation.Binary.Bundles`
* Previously, bundles such as `Preorder`, `Poset`, `TotalOrder` etc. did not have the flipped
and negated versions of the operators exposed. In some cases they could obtained by opening the
relevant `Relation.Binary.Properties.X` file but usually they had to be redefined every time.
* To fix this, these bundles now all export all 4 versions of the operator: normal, converse, negated,
converse-negated. Accordingly they are no longer exported from the corresponding `Properties` file.
* To make this work for `Preorder`, it was necessary to change the name of the relation symbol.
Previously, the symbol was `_∼_` which is (notationally) symmetric, so that its
converse relation could only be discussed *semantically* in terms of `flip _∼_`.
* Now, the `Preorder` record field `_∼_` has been renamed to `_≲_`, with `_≳_`
introduced as a definition in `Relation.Binary.Bundles.Preorder`.
Partial backwards compatible has been achieved by redeclaring a deprecated version
of the old symbol in the record. Therefore, only _declarations_ of `PartialOrder` records will
need their field names updating.
### Changes to definition of `IsStrictTotalOrder` in `Relation.Binary.Structures`
* The previous definition of the record `IsStrictTotalOrder` did not
build upon `IsStrictPartialOrder` as would be expected.
Instead it omitted several fields like irreflexivity as they were derivable from the
proof of trichotomy. However, this led to problems further up the hierarchy where
bundles such as `StrictTotalOrder` which contained multiple distinct proofs of
`IsStrictPartialOrder`.
* To remedy this the definition of `IsStrictTotalOrder` has been changed to so
that it builds upon `IsStrictPartialOrder` as would be expected.
* To aid migration, the old record definition has been moved to
`Relation.Binary.Structures.Biased` which contains the `isStrictTotalOrderᶜ`
smart constructor (which is re-exported by `Relation.Binary`) . Therefore the old code:
```agda
<-isStrictTotalOrder : IsStrictTotalOrder _≡_ _<_
<-isStrictTotalOrder = record
{ isEquivalence = isEquivalence
; trans = <-trans
; compare = <-cmp
}
```
can be migrated either by updating to the new record fields if you have a proof of `IsStrictPartialOrder`
available:
```agda
<-isStrictTotalOrder : IsStrictTotalOrder _≡_ _<_
<-isStrictTotalOrder = record
{ isStrictPartialOrder = <-isStrictPartialOrder
; compare = <-cmp
}
```
or simply applying the smart constructor to the record definition as follows:
```agda
<-isStrictTotalOrder : IsStrictTotalOrder _≡_ _<_
<-isStrictTotalOrder = isStrictTotalOrderᶜ record
{ isEquivalence = isEquivalence
; trans = <-trans
; compare = <-cmp
}
```
### Changes to the interface of `Relation.Binary.Reasoning.Triple`
* The module `Relation.Binary.Reasoning.Base.Triple` now takes an extra proof
that the strict relation is irreflexive.
* This allows the addition of the following new proof combinator:
```agda
begin-contradiction : (r : x IsRelatedTo x) → {s : True (IsStrict? r)} → A
```
that takes a proof that a value is strictly less than itself and then applies the
principle of explosion to derive anything.
* Specialised versions of this combinator are available in the `Reasoning` modules
exported by the following modules:
```
Data.Nat.Properties
Data.Nat.Binary.Properties
Data.Integer.Properties
Data.Rational.Unnormalised.Properties
Data.Rational.Properties
Data.Vec.Relation.Binary.Lex.Strict
Data.Vec.Relation.Binary.Lex.NonStrict
Relation.Binary.Reasoning.StrictPartialOrder
Relation.Binary.Reasoning.PartialOrder
```
### A more modular design for `Relation.Binary.Reasoning`
* Previously, every `Reasoning` module in the library tended to roll it's own set
of syntax for the combinators. This hindered consistency and maintainability.
* To improve the situation, a new module `Relation.Binary.Reasoning.Syntax`
has been introduced which exports a wide range of sub-modules containing
pre-existing reasoning combinator syntax.
* This makes it possible to add new or rename existing reasoning combinators to a
pre-existing `Reasoning` module in just a couple of lines
(e.g. see `∣-Reasoning` in `Data.Nat.Divisibility`)
* One pre-requisite for that is that `≡-Reasoning` has been moved from
`Relation.Binary.PropositionalEquality.Core` (which shouldn't be
imported anyway as it's a `Core` module) to
`Relation.Binary.PropositionalEquality.Properties`.
It is still exported by `Relation.Binary.PropositionalEquality`.
### Renaming of symmetric combinators in `Reasoning` modules
* We've had various complaints about the symmetric version of reasoning combinators
that use the syntax `_R˘⟨_⟩_` for some relation `R`, (e.g. `_≡˘⟨_⟩_` and `_≃˘⟨_⟩_`)
introduced in `v1.0`. In particular:
1. The symbol `˘` is hard to type.
2. The symbol `˘` doesn't convey the direction of the equality
3. The left brackets aren't vertically aligned with the left brackets of the non-symmetric version.
* To address these problems we have renamed all the symmetric versions of the
combinators from `_R˘⟨_⟩_` to `_R⟨_⟨_` (the direction of the last bracket is flipped
to indicate the quality goes from right to left).
* The old combinators still exist but have been deprecated. However due to
[Agda issue #5617](https://github.com/agda/agda/issues/5617), the deprecation warnings
don't fire correctly. We will not remove the old combinators before the above issue is
addressed. However, we still encourage migrating to the new combinators!
* On a Linux-based system, the following command was used to globally migrate all uses of the
old combinators to the new ones in the standard library itself.
It *may* be useful when trying to migrate your own code:
```bash
find . -type f -name "*.agda" -print0 | xargs -0 sed -i -e 's/˘⟨\(.*\)⟩/⟨\1⟨/g'
```
USUAL CAVEATS: It has not been widely tested and the standard library developers are not
responsible for the results of this command. It is strongly recommended you back up your
work before you attempt to run it.
* NOTE: this refactoring may require some extra bracketing around the operator `_⟨_⟩_` from
`Function.Base` if the `_⟨_⟩_` operator is used within the reasoning proof. The symptom
for this is a `Don't know how to parse` error.
### Improvements to `Text.Pretty` and `Text.Regex`
* In `Text.Pretty`, `Doc` is now a record rather than a type alias. This
helps Agda reconstruct the `width` parameter when the module is opened
without it being applied. In particular this allows users to write
width-generic pretty printers and only pick a width when calling the
renderer by using this import style:
```
open import Text.Pretty using (Doc; render)
-- ^-- no width parameter for Doc & render
open module Pretty {w} = Text.Pretty w hiding (Doc; render)
-- ^-- implicit width parameter for the combinators
pretty : Doc w
pretty = ? -- you can use the combinators here and there won't be any
-- issues related to the fact that `w` cannot be reconstructed
-- anymore
main = do
-- you can now use the same pretty with different widths:
putStrLn $ render 40 pretty
putStrLn $ render 80 pretty
```
* In `Text.Regex.Search` the `searchND` function finding infix matches has
been tweaked to make sure the returned solution is a local maximum in terms
of length. It used to be that we would make the match start as late as
possible and finish as early as possible. It's now the reverse.
So `[a-zA-Z]+.agdai?` run on "the path _build/Main.agdai corresponds to"
will return "Main.agdai" when it used to be happy to just return "n.agda".
### Other
* In accordance with changes to the flags in Agda 2.6.3, all modules that previously used
the `--without-K` flag now use the `--cubical-compatible` flag instead.
* In `Algebra.Core` the operations `Opₗ` and `Opᵣ` have moved to `Algebra.Module.Core`.
* In `Algebra.Definitions.RawMagma.Divisibility` the definitions for `_∣ˡ_` and `_∣ʳ_`
have been changed from being defined as raw products to being defined as records. However,
the record constructors are called `_,_` so the changes required are minimal.
* In `Codata.Guarded.Stream` the following functions have been modified to have simpler definitions:
* `cycle`
* `interleave⁺`
* `cantor`
Furthermore, the direction of interleaving of `cantor` has changed. Precisely,
suppose `pair` is the cantor pairing function, then `lookup (pair i j) (cantor xss)`
according to the old definition corresponds to `lookup (pair j i) (cantor xss)`
according to the new definition.
For a concrete example see the one included at the end of the module.
* In `Data.Fin.Base` the relations `_≤_` `_≥_` `_<_` `_>_` have been
generalised so they can now relate `Fin` terms with different indices.
Should be mostly backwards compatible, but very occasionally when proving
properties about the orderings themselves the second index must be provided
explicitly.
* In `Data.Fin.Properties` the proof `inj⇒≟` that an injection from a type
`A` into `Fin n` induces a decision procedure for `_≡_` on `A` has been
generalised to other equivalences over `A` (i.e. to arbitrary setoids), and
renamed from `eq?` to the more descriptive and `inj⇒decSetoid`.
* In `Data.Fin.Properties` the proof `pigeonhole` has been strengthened
so that the a proof that `i < j` rather than a mere `i ≢ j` is returned.
* In `Data.Fin.Substitution.TermSubst` the fixity of `_/Var_` has been changed
from `infix 8` to `infixl 8`.
* In `Data.Integer.DivMod` the previous implementations of
`_divℕ_`, `_div_`, `_modℕ_`, `_mod_` internally converted to the unary
`Fin` datatype resulting in poor performance. The implementation has been
updated to use the corresponding operations from `Data.Nat.DivMod` which are
efficiently implemented using the Haskell backend.
* In `Data.Integer.Properties` the first two arguments of `m≡n⇒m-n≡0`
(now renamed `i≡j⇒i-j≡0`) have been made implicit.
* In `Data.(List|Vec).Relation.Binary.Lex.Strict` the argument `xs` in
`xs≮[]` in introduced in PRs #1648 and #1672 has now been made implicit.
* In `Data.List.NonEmpty` the functions `split`, `flatten` and `flatten-split`
have been removed from. In their place `groupSeqs` and `ungroupSeqs`
have been added to `Data.List.NonEmpty.Base` which morally perform the same
operations but without computing the accompanying proofs. The proofs can be
found in `Data.List.NonEmpty.Properties` under the names `groupSeqs-groups`
and `ungroupSeqs` and `groupSeqs`.
* In `Data.List.Relation.Unary.Grouped.Properties` the proofs `map⁺` and `map⁻`
have had their preconditions weakened so the equivalences no longer require congruence
proofs.
* In `Data.Nat.Divisibility` the proof `m/n/o≡m/[n*o]` has been removed. In it's
place a new more general proof `m/n/o≡m/[n*o]` has been added to `Data.Nat.DivMod`
that doesn't require the `n * o ∣ m` pre-condition.
* In `Data.Product.Relation.Binary.Lex.Strict` the proof of wellfoundedness
of the lexicographic ordering on products, no longer
requires the assumption of symmetry for the first equality relation `_≈₁_`.
* In `Data.Rational.Base` the constructors `+0` and `+[1+_]` from `Data.Integer.Base`
are no longer re-exported by `Data.Rational.Base`. You will have to open `Data.Integer(.Base)`
directly to use them.
* In `Data.Rational(.Unnormalised).Properties` the types of the proofs
`pos⇒1/pos`/`1/pos⇒pos` and `neg⇒1/neg`/`1/neg⇒neg` have been switched,
as the previous naming scheme didn't correctly generalise to e.g. `pos+pos⇒pos`.
For example the types of `pos⇒1/pos`/`1/pos⇒pos` were:
```agda
pos⇒1/pos : ∀ p .{{_ : NonZero p}} .{{Positive (1/ p)}} → Positive p
1/pos⇒pos : ∀ p .{{_ : Positive p}} → Positive (1/ p)
```
but are now:
```agda
pos⇒1/pos : ∀ p .{{_ : Positive p}} → Positive (1/ p)
1/pos⇒pos : ∀ p .{{_ : NonZero p}} .{{Positive (1/ p)}} → Positive p
```
* In `Data.Sum.Base` the definitions `fromDec` and `toDec` have been moved to `Data.Sum`.
* In `Data.Vec.Base` the definition of `_>>=_` under `Data.Vec.Base` has been
moved to the submodule `CartesianBind` in order to avoid clashing with the
new, alternative definition of `_>>=_`, located in the second new submodule
`DiagonalBind`.
* In `Data.Vec.Base` the definitions `init` and `last` have been changed from the `initLast`
view-derived implementation to direct recursive definitions.
* In `Data.Vec.Properties` the type of the proof `zipWith-comm` has been generalised from:
```agda
zipWith-comm : ∀ {f : A → A → B} (comm : ∀ x y → f x y ≡ f y x) (xs ys : Vec A n) →
zipWith f xs ys ≡ zipWith f ys xs
```
to
```agda
zipWith-comm : ∀ {f : A → B → C} {g : B → A → C} (comm : ∀ x y → f x y ≡ g y x) (xs : Vec A n) ys →
zipWith f xs ys ≡ zipWith g ys xs
```
* In `Data.Vec.Relation.Unary.All` the functions `lookup` and `tabulate` have
been moved to `Data.Vec.Relation.Unary.All.Properties` and renamed
`lookup⁺` and `lookup⁻` respectively.
* In `Data.Vec.Base` and `Data.Vec.Functional` the functions `iterate` and `replicate`
now take the length of vector, `n`, as an explicit rather than an implicit argument, i.e.
the new types are:
```agda
iterate : (A → A) → A → ∀ n → Vec A n
replicate : ∀ n → A → Vec A n
```
* In `Relation.Binary.Construct.Closure.Symmetric` the operation
`SymClosure` on relations in has been reimplemented
as a data type `SymClosure _⟶_ a b` that is parameterized by the
input relation `_⟶_` (as well as the elements `a` and `b` of the
domain) so that `_⟶_` can be inferred, which it could not from the
previous implementation using the sum type `a ⟶ b ⊎ b ⟶ a`.
* In `Relation.Nullary.Decidable.Core` the name `excluded-middle` has been
renamed to `¬¬-excluded-middle`.
Other major improvements
------------------------
### Improvements to ring solver tactic
* The ring solver tactic has been greatly improved. In particular:
1. When the solver is used for concrete ring types, e.g. ℤ, the equality can now use
all the ring operations defined natively for that type, rather than having
to use the operations defined in `AlmostCommutativeRing`. For example
previously you could not use `Data.Integer.Base._*_` but instead had to
use `AlmostCommutativeRing._*_`.
2. The solver now supports use of the subtraction operator `_-_` whenever
it is defined immediately in terms of `_+_` and `-_`. This is the case for
`Data.Integer` and `Data.Rational`.
### Moved `_%_` and `_/_` operators to `Data.Nat.Base`
* Previously the division and modulus operators were defined in `Data.Nat.DivMod`
which in turn meant that using them required importing `Data.Nat.Properties`
which is a very heavy dependency.
* To fix this, these operators have been moved to `Data.Nat.Base`. The properties
for them still live in `Data.Nat.DivMod` (which also publicly re-exports them
to provide backwards compatibility).
* Beneficiaries of this change include `Data.Rational.Unnormalised.Base` whose
dependencies are now significantly smaller.
### Moved raw bundles from `Data.X.Properties` to `Data.X.Base`
* Raw bundles by design don't contain any proofs so should in theory be able to live
in `Data.X.Base` rather than `Data.X.Bundles`.
* To achieve this while keeping the dependency footprint small, the definitions of
raw bundles (`RawMagma`, `RawMonoid` etc.) have been moved from `Algebra(.Lattice)Bundles` to
a new module `Algebra(.Lattice).Bundles.Raw` which can be imported at much lower cost
from `Data.X.Base`.
* We have then moved raw bundles defined in `Data.X.Properties` to `Data.X.Base` for
`X` = `Nat`/`Nat.Binary`/`Integer`/`Rational`/`Rational.Unnormalised`.
### Upgrades to `README` sub-library
* The `README` sub-library has been moved to `doc/README` and a new `doc/standard-library-doc.agda-lib` has been added.
* The first consequence is that `README` files now can be type-checked in Emacs
using an out-of-the-box standard Agda installation without altering the main
`standard-library.agda-lib` file.
* The second is that the `README` files are now their own first-class library
and can be imported like an other library.
Deprecated modules
------------------
### Moving `Data.Erased` to `Data.Irrelevant`
* This fixes the fact we had picked the wrong name originally. The erased modality
corresponds to `@0` whereas the irrelevance one corresponds to `.`.
### Deprecation of `Data.Fin.Substitution.Example`
* The module `Data.Fin.Substitution.Example` has been deprecated, and moved to `README.Data.Fin.Substitution.UntypedLambda`
### Deprecation of `Data.Nat.Properties.Core`
* The module `Data.Nat.Properties.Core` has been deprecated, and its one lemma moved to `Data.Nat.Base`, renamed as `s≤s⁻¹`
### Deprecation of `Data.Product.Function.Dependent.Setoid.WithK`
* This module has been deprecated, as none of its contents actually depended on axiom K.
The contents has been moved to `Data.Product.Function.Dependent.Setoid`.
### Moving `Function.Related`
* The module `Function.Related` has been deprecated in favour of `Function.Related.Propositional`
whose code uses the new function hierarchy. This also opens up the possibility of a more
general `Function.Related.Setoid` at a later date. Several of the names have been changed
in this process to bring them into line with the camelcase naming convention used
in the rest of the library:
```agda
reverse-implication ↦ reverseImplication
reverse-injection ↦ reverseInjection
left-inverse ↦ leftInverse
Symmetric-kind ↦ SymmetricKind
Forward-kind ↦ ForwardKind
Backward-kind ↦ BackwardKind
Equivalence-kind ↦ EquivalenceKind
```
### Moving `Relation.Binary.Construct.(Converse/Flip)`
* The following files have been moved:
```agda
Relation.Binary.Construct.Converse ↦ Relation.Binary.Construct.Flip.EqAndOrd
Relation.Binary.Construct.Flip ↦ Relation.Binary.Construct.Flip.Ord
```
### Moving `Relation.Binary.Properties.XLattice`
* The following files have been moved:
```agda
Relation.Binary.Properties.BoundedJoinSemilattice.agda ↦ Relation.Binary.Lattice.Properties.BoundedJoinSemilattice.agda
Relation.Binary.Properties.BoundedLattice.agda ↦ Relation.Binary.Lattice.Properties.BoundedLattice.agda
Relation.Binary.Properties.BoundedMeetSemilattice.agda ↦ Relation.Binary.Lattice.Properties.BoundedMeetSemilattice.agda
Relation.Binary.Properties.DistributiveLattice.agda ↦ Relation.Binary.Lattice.Properties.DistributiveLattice.agda
Relation.Binary.Properties.HeytingAlgebra.agda ↦ Relation.Binary.Lattice.Properties.HeytingAlgebra.agda
Relation.Binary.Properties.JoinSemilattice.agda ↦ Relation.Binary.Lattice.Properties.JoinSemilattice.agda
Relation.Binary.Properties.Lattice.agda ↦ Relation.Binary.Lattice.Properties.Lattice.agda
Relation.Binary.Properties.MeetSemilattice.agda ↦ Relation.Binary.Lattice.Properties.MeetSemilattice.agda
```
Deprecated names
----------------
* In `Algebra.Consequences.Propositional`:
```agda
comm+assoc⇒middleFour ↦ comm∧assoc⇒middleFour
identity+middleFour⇒assoc ↦ identity∧middleFour⇒assoc
identity+middleFour⇒comm ↦ identity∧middleFour⇒comm
comm+distrˡ⇒distrʳ ↦ comm∧distrˡ⇒distrʳ
comm+distrʳ⇒distrˡ ↦ comm∧distrʳ⇒distrˡ
assoc+distribʳ+idʳ+invʳ⇒zeˡ ↦ assoc∧distribʳ∧idʳ∧invʳ⇒zeˡ
assoc+distribˡ+idʳ+invʳ⇒zeʳ ↦ assoc∧distribˡ∧idʳ∧invʳ⇒zeʳ
assoc+id+invʳ⇒invˡ-unique ↦ assoc∧id∧invʳ⇒invˡ-unique
assoc+id+invˡ⇒invʳ-unique ↦ assoc∧id∧invˡ⇒invʳ-unique
subst+comm⇒sym ↦ subst∧comm⇒sym
```
* In `Algebra.Consequences.Setoid`:
```agda
comm+assoc⇒middleFour ↦ comm∧assoc⇒middleFour
identity+middleFour⇒assoc ↦ identity∧middleFour⇒assoc
identity+middleFour⇒comm ↦ identity∧middleFour⇒comm
comm+cancelˡ⇒cancelʳ ↦ comm∧cancelˡ⇒cancelʳ
comm+cancelʳ⇒cancelˡ ↦ comm∧cancelʳ⇒cancelˡ
comm+almostCancelˡ⇒almostCancelʳ ↦ comm∧almostCancelˡ⇒almostCancelʳ
comm+almostCancelʳ⇒almostCancelˡ ↦ comm∧almostCancelʳ⇒almostCancelˡ
comm+idˡ⇒idʳ ↦ comm∧idˡ⇒idʳ
comm+idʳ⇒idˡ ↦ comm∧idʳ⇒idˡ
comm+zeˡ⇒zeʳ ↦ comm∧zeˡ⇒zeʳ
comm+zeʳ⇒zeˡ ↦ comm∧zeʳ⇒zeˡ
comm+invˡ⇒invʳ ↦ comm∧invˡ⇒invʳ
comm+invʳ⇒invˡ ↦ comm∧invʳ⇒invˡ
comm+distrˡ⇒distrʳ ↦ comm∧distrˡ⇒distrʳ
comm+distrʳ⇒distrˡ ↦ comm∧distrʳ⇒distrˡ
assoc+distribʳ+idʳ+invʳ⇒zeˡ ↦ assoc∧distribʳ∧idʳ∧invʳ⇒zeˡ
assoc+distribˡ+idʳ+invʳ⇒zeʳ ↦ assoc∧distribˡ∧idʳ∧invʳ⇒zeʳ
assoc+id+invʳ⇒invˡ-unique ↦ assoc∧id∧invʳ⇒invˡ-unique
assoc+id+invˡ⇒invʳ-unique ↦ assoc∧id∧invˡ⇒invʳ-unique
subst+comm⇒sym ↦ subst∧comm⇒sym
```
* In `Algebra.Construct.Zero`:
```agda
rawMagma ↦ Algebra.Construct.Terminal.rawMagma
magma ↦ Algebra.Construct.Terminal.magma
semigroup ↦ Algebra.Construct.Terminal.semigroup
band ↦ Algebra.Construct.Terminal.band
```
* In `Codata.Guarded.Stream.Properties`:
```agda
map-identity ↦ map-id
map-fusion ↦ map-∘
drop-fusion ↦ drop-drop
```
* In `Codata.Sized.Colist.Properties`:
```agda
map-identity ↦ map-id
map-map-fusion ↦ map-∘
drop-drop-fusion ↦ drop-drop
```
* In `Codata.Sized.Covec.Properties`:
```agda
map-identity ↦ map-id
map-map-fusion ↦ map-∘
```
* In `Codata.Sized.Delay.Properties`:
```agda
map-identity ↦ map-id
map-map-fusion ↦ map-∘
map-unfold-fusion ↦ map-unfold
```
* In `Codata.Sized.M.Properties`:
```agda
map-compose ↦ map-∘
```
* In `Codata.Sized.Stream.Properties`:
```agda
map-identity ↦ map-id
map-map-fusion ↦ map-∘
```
* In `Data.Container.Related`:
```agda
_∼[_]_ ↦ _≲[_]_
```
* In `Data.Bool.Properties` (Issue #2046):
```agda
push-function-into-if ↦ if-float
```
* In `Data.Fin.Base`: two new, hopefully more memorable, names `↑ˡ` `↑ʳ`
for the 'left', resp. 'right' injection of a Fin m into a 'larger' type,
`Fin (m + n)`, resp. `Fin (n + m)`, with argument order to reflect the
position of the `Fin m` argument.
```
inject+ ↦ flip _↑ˡ_
raise ↦ _↑ʳ_
```
* In `Data.Fin.Properties`:
```
toℕ-raise ↦ toℕ-↑ʳ
toℕ-inject+ ↦ toℕ-↑ˡ
splitAt-inject+ ↦ splitAt-↑ˡ m i n
splitAt-raise ↦ splitAt-↑ʳ
Fin0↔⊥ ↦ 0↔⊥
eq? ↦ inj⇒≟
```
* In `Data.Fin.Permutation.Components`:
```
reverse ↦ Data.Fin.Base.opposite
reverse-prop ↦ Data.Fin.Properties.opposite-prop
reverse-involutive ↦ Data.Fin.Properties.opposite-involutive
reverse-suc ↦ Data.Fin.Properties.opposite-suc
```
* In `Data.Integer.DivMod` the operator names have been renamed to
be consistent with those in `Data.Nat.DivMod`:
```
_divℕ_ ↦ _/ℕ_
_div_ ↦ _/_
_modℕ_ ↦ _%ℕ_
_mod_ ↦ _%_
```
* In `Data.Integer.Properties` references to variables in names have
been made consistent so that `m`, `n` always refer to naturals and
`i` and `j` always refer to integers:
```
≤-steps ↦ i≤j⇒i≤k+j
≤-step ↦ i≤j⇒i≤1+j
≤-steps-neg ↦ i≤j⇒i-k≤j
≤-step-neg ↦ i≤j⇒pred[i]≤j
n≮n ↦ i≮i
∣n∣≡0⇒n≡0 ↦ ∣i∣≡0⇒i≡0
∣-n∣≡∣n∣ ↦ ∣-i∣≡∣i∣
0≤n⇒+∣n∣≡n ↦ 0≤i⇒+∣i∣≡i
+∣n∣≡n⇒0≤n ↦ +∣i∣≡i⇒0≤i
+∣n∣≡n⊎+∣n∣≡-n ↦ +∣i∣≡i⊎+∣i∣≡-i
∣m+n∣≤∣m∣+∣n∣ ↦ ∣i+j∣≤∣i∣+∣j∣
∣m-n∣≤∣m∣+∣n∣ ↦ ∣i-j∣≤∣i∣+∣j∣
signₙ◃∣n∣≡n ↦ signᵢ◃∣i∣≡i
◃-≡ ↦ ◃-cong
∣m-n∣≡∣n-m∣ ↦ ∣i-j∣≡∣j-i∣
m≡n⇒m-n≡0 ↦ i≡j⇒i-j≡0
m-n≡0⇒m≡n ↦ i-j≡0⇒i≡j
m≤n⇒m-n≤0 ↦ i≤j⇒i-j≤0
m-n≤0⇒m≤n ↦ i-j≤0⇒i≤j
m≤n⇒0≤n-m ↦ i≤j⇒0≤j-i
0≤n-m⇒m≤n ↦ 0≤i-j⇒j≤i
n≤1+n ↦ i≤suc[i]
n≢1+n ↦ i≢suc[i]
m≤pred[n]⇒m<n ↦ i≤pred[j]⇒i<j
m<n⇒m≤pred[n] ↦ i<j⇒i≤pred[j]
-1*n≡-n ↦ -1*i≡-i
m*n≡0⇒m≡0∨n≡0 ↦ i*j≡0⇒i≡0∨j≡0
∣m*n∣≡∣m∣*∣n∣ ↦ ∣i*j∣≡∣i∣*∣j∣
m≤m+n ↦ i≤i+j
n≤m+n ↦ i≤j+i
m-n≤m ↦ i≤i-j
+-pos-monoʳ-≤ ↦ +-monoʳ-≤
+-neg-monoʳ-≤ ↦ +-monoʳ-≤
*-monoʳ-≤-pos ↦ *-monoʳ-≤-nonNeg
*-monoˡ-≤-pos ↦ *-monoˡ-≤-nonNeg
*-monoʳ-≤-neg ↦ *-monoʳ-≤-nonPos
*-monoˡ-≤-neg ↦ *-monoˡ-≤-nonPos
*-cancelˡ-<-neg ↦ *-cancelˡ-<-nonPos
*-cancelʳ-<-neg ↦ *-cancelʳ-<-nonPos
^-semigroup-morphism ↦ ^-isMagmaHomomorphism
^-monoid-morphism ↦ ^-isMonoidHomomorphism
pos-distrib-* ↦ pos-*
pos-+-commute ↦ pos-+
abs-*-commute ↦ abs-*
+-isAbelianGroup ↦ +-0-isAbelianGroup
```
* In `Data.List.Base`:
```agda
_─_ ↦ removeAt
```
* In `Data.List.Properties`:
```agda
map-id₂ ↦ map-id-local
map-cong₂ ↦ map-cong-local
map-compose ↦ map-∘
map-++-commute ↦ map-++
sum-++-commute ↦ sum-++
reverse-map-commute ↦ reverse-map
reverse-++-commute ↦ reverse-++
zipWith-identityˡ ↦ zipWith-zeroˡ
zipWith-identityʳ ↦ zipWith-zeroʳ
ʳ++-++ ↦ ++-ʳ++
take++drop ↦ take++drop≡id
length-─ ↦ length-removeAt
map-─ ↦ map-removeAt
```
* In `Data.List.NonEmpty.Properties`:
```agda
map-compose ↦ map-∘
map-++⁺-commute ↦ map-++⁺
```
* In `Data.List.Relation.Unary.All.Properties`:
```agda
gmap ↦ gmap⁺
updateAt-id-relative ↦ updateAt-id-local
updateAt-compose-relative ↦ updateAt-updateAt-local
updateAt-compose ↦ updateAt-updateAt
updateAt-cong-relative ↦ updateAt-cong-local
```
* In `Data.List.Relation.Unary.Any.Properties`:
```agda
map-with-∈⁺ ↦ mapWith∈⁺
map-with-∈⁻ ↦ mapWith∈⁻
map-with-∈↔ ↦ mapWith∈↔
```
* In `Data.List.Relation.Binary.Subset.Propositional.Properties`:
```agda
map-with-∈⁺ ↦ mapWith∈⁺
```
* In `Data.List.Zipper.Properties`:
```agda
toList-reverse-commute ↦ toList-reverse
toList-ˡ++-commute ↦ toList-ˡ++
toList-++ʳ-commute ↦ toList-++ʳ
toList-map-commute ↦ toList-map
toList-foldr-commute ↦ toList-foldr
```
* In `Data.Maybe.Properties`:
```agda
map-id₂ ↦ map-id-local
map-cong₂ ↦ map-cong-local
map-compose ↦ map-∘
map-<∣>-commute ↦ map-<∣>
```
* In `Data.Nat.Properties`:
```agda
suc[pred[n]]≡n ↦ suc-pred
≤-step ↦ m≤n⇒m≤1+n
≤-stepsˡ ↦ m≤n⇒m≤o+n
≤-stepsʳ ↦ m≤n⇒m≤n+o
<-step ↦ m<n⇒m<1+n
pred-mono ↦ pred-mono-≤
<-transʳ ↦ ≤-<-trans
<-transˡ ↦ <-≤-trans
```
* In `Data.Rational.Unnormalised.Base`:
```agda
_≠_ ↦ _≄_
+-rawMonoid ↦ +-0-rawMonoid
*-rawMonoid ↦ *-1-rawMonoid
```
* In `Data.Rational.Unnormalised.Properties`:
```agda
↥[p/q]≡p ↦ ↥[n/d]≡n
↧[p/q]≡q ↦ ↧[n/d]≡d
*-monoˡ-≤-pos ↦ *-monoˡ-≤-nonNeg
*-monoʳ-≤-pos ↦ *-monoʳ-≤-nonNeg
≤-steps ↦ p≤q⇒p≤r+q
*-monoˡ-≤-neg ↦ *-monoˡ-≤-nonPos
*-monoʳ-≤-neg ↦ *-monoʳ-≤-nonPos
*-cancelˡ-<-pos ↦ *-cancelˡ-<-nonNeg
*-cancelʳ-<-pos ↦ *-cancelʳ-<-nonNeg
positive⇒nonNegative ↦ pos⇒nonNeg
negative⇒nonPositive ↦ neg⇒nonPos
negative<positive ↦ neg<pos
```
* In `Data.Rational.Base`:
```agda
+-rawMonoid ↦ +-0-rawMonoid
*-rawMonoid ↦ *-1-rawMonoid
```
* In `Data.Rational.Properties`:
```agda
*-monoʳ-≤-neg ↦ *-monoʳ-≤-nonPos
*-monoˡ-≤-neg ↦ *-monoˡ-≤-nonPos
*-monoʳ-≤-pos ↦ *-monoʳ-≤-nonNeg
*-monoˡ-≤-pos ↦ *-monoˡ-≤-nonNeg
*-cancelˡ-<-pos ↦ *-cancelˡ-<-nonNeg
*-cancelʳ-<-pos ↦ *-cancelʳ-<-nonNeg
*-cancelˡ-<-neg ↦ *-cancelˡ-<-nonPos
*-cancelʳ-<-neg ↦ *-cancelʳ-<-nonPos
negative<positive ↦ neg<pos
```
* In `Data.Rational.Unnormalised.Base`:
```agda
+-rawMonoid ↦ +-0-rawMonoid
*-rawMonoid ↦ *-1-rawMonoid
```
* In `Data.Rational.Unnormalised.Properties`:
```agda
≤-steps ↦ p≤q⇒p≤r+q
```
* In `Data.Sum.Properties`:
```agda
[,]-∘-distr ↦ [,]-∘
[,]-map-commute ↦ [,]-map
map-commute ↦ map-map
map₁₂-commute ↦ map₁₂-map₂₁
```
* In `Data.Tree.AVL`:
```agda
_∈?_ ↦ member
```
* In `Data.Tree.AVL.IndexedMap`:
```agda
_∈?_ ↦ member
```
* In `Data.Tree.AVL.Map`:
```agda
_∈?_ ↦ member
```
* In `Data.Tree.AVL.Sets`:
```agda
_∈?_ ↦ member
```
* In `Data.Tree.Binary.Zipper.Properties`:
```agda
toTree-#nodes-commute ↦ toTree-#nodes
toTree-#leaves-commute ↦ toTree-#leaves
toTree-map-commute ↦ toTree-map
toTree-foldr-commute ↦ toTree-foldr
toTree-⟪⟫ˡ-commute ↦ toTree--⟪⟫ˡ
toTree-⟪⟫ʳ-commute ↦ toTree-⟪⟫ʳ
```
* In `Data.Tree.Rose.Properties`:
```agda
map-compose ↦ map-∘
```
* In `Data.Vec.Base`:
```agda
remove ↦ removeAt
insert ↦ insertAt
```
* In `Data.Vec.Properties`:
```agda
take-distr-zipWith ↦ take-zipWith
take-distr-map ↦ take-map
drop-distr-zipWith ↦ drop-zipWith
drop-distr-map ↦ drop-map
updateAt-id-relative ↦ updateAt-id-local
updateAt-compose-relative ↦ updateAt-updateAt-local
updateAt-compose ↦ updateAt-updateAt
updateAt-cong-relative ↦ updateAt-cong-local
[]%=-compose ↦ []%=-∘
[]≔-++-inject+ ↦ []≔-++-↑ˡ
[]≔-++-raise ↦ []≔-++-↑ʳ
idIsFold ↦ id-is-foldr
sum-++-commute ↦ sum-++
take-drop-id ↦ take++drop≡id
map-insert ↦ map-insertAt
insert-lookup ↦ insertAt-lookup
insert-punchIn ↦ insertAt-punchIn
remove-PunchOut ↦ removeAt-punchOut
remove-insert ↦ removeAt-insertAt
insert-remove ↦ insertAt-removeAt
lookup-inject≤-take ↦ lookup-take-inject≤
```
* In `Data.Vec.Functional.Properties`:
```agda
updateAt-id-relative ↦ updateAt-id-local
updateAt-compose-relative ↦ updateAt-updateAt-local
updateAt-compose ↦ updateAt-updateAt
updateAt-cong-relative ↦ updateAt-cong-local
map-updateAt ↦ map-updateAt-local
insert-lookup ↦ insertAt-lookup
insert-punchIn ↦ insertAt-punchIn
remove-punchOut ↦ removeAt-punchOut
remove-insert ↦ removeAt-insertAt
insert-remove ↦ insertAt-removeAt
```
NB. This last one is complicated by the *addition* of a 'global' property `map-updateAt`
* In `Data.Vec.Recursive.Properties`:
```agda
append-cons-commute ↦ append-cons
```
* In `Data.Vec.Relation.Binary.Equality.Setoid`:
```agda
map-++-commute ↦ map-++
```
* In `Function.Base`:
```agda
case_return_of_ ↦ case_returning_of_
```
* In `Function.Construct.Composition`:
```agda
_∘-⟶_ ↦ _⟶-∘_
_∘-↣_ ↦ _↣-∘_
_∘-↠_ ↦ _↠-∘_
_∘-⤖_ ↦ _⤖-∘_
_∘-⇔_ ↦ _⇔-∘_
_∘-↩_ ↦ _↩-∘_
_∘-↪_ ↦ _↪-∘_
_∘-↔_ ↦ _↔-∘_
```
* In `Function.Construct.Identity`:
```agda
id-⟶ ↦ ⟶-id
id-↣ ↦ ↣-id
id-↠ ↦ ↠-id
id-⤖ ↦ ⤖-id
id-⇔ ↦ ⇔-id
id-↩ ↦ ↩-id
id-↪ ↦ ↪-id
id-↔ ↦ ↔-id
```
* In `Function.Construct.Symmetry`:
```agda
sym-⤖ ↦ ⤖-sym
sym-⇔ ↦ ⇔-sym
sym-↩ ↦ ↩-sym
sym-↪ ↦ ↪-sym
sym-↔ ↦ ↔-sym
```
* In `Function.Related.Propositional.Reasoning`:
```agda
_↔⟨⟩_ ↦ _≡⟨⟩_
```
* In `Foreign.Haskell.Either` and `Foreign.Haskell.Pair`:
```agda
toForeign ↦ Foreign.Haskell.Coerce.coerce
fromForeign ↦ Foreign.Haskell.Coerce.coerce
```
* In `Relation.Binary.Properties.Preorder`:
```agda
invIsPreorder ↦ converse-isPreorder
invPreorder ↦ converse-preorder
```
* In `Relation.Binary.PropositionalEquality`:
```agda
isPropositional ↦ Relation.Nullary.Irrelevant
```
* In `Relation.Unary.Consequences`:
```agda
dec⟶recomputable ↦ dec⇒recomputable
```
## Missing fixity declarations added
* An effort has been made to add sensible fixities for many declarations:
```
infix 4 _≟H_ _≟N_ (Algebra.Solver.Ring)
infixr 5 _∷_ (Codata.Guarded.Stream)
infix 4 _[_] (Codata.Guarded.Stream)
infixr 5 _∷_ (Codata.Guarded.Stream.Relation.Binary.Pointwise)
infix 4 _≈∞_ (Codata.Guarded.Stream.Relation.Binary.Pointwise)
infixr 5 _∷_ (Codata.Guarded.Stream.Relation.Unary.All)
infixr 5 _∷_ (Codata.Musical.Colist)
infix 4 _≈_ (Codata.Musical.Conat)
infixr 5 _∷_ (Codata.Musical.Colist.Bisimilarity)
infixr 5 _∷_ (Codata.Musical.Colist.Relation.Unary.All)
infixr 5 _∷_ (Codata.Sized.Colist)
infixr 5 _∷_ (Codata.Sized.Covec)
infixr 5 _∷_ (Codata.Sized.Cowriter)
infixl 1 _>>=_ (Codata.Sized.Cowriter)
infixr 5 _∷_ (Codata.Sized.Stream)
infixr 5 _∷_ (Codata.Sized.Colist.Bisimilarity)
infix 4 _ℕ≤?_ (Codata.Sized.Conat.Properties)
infixr 5 _∷_ (Codata.Sized.Covec.Bisimilarity)
infixr 5 _∷_ (Codata.Sized.Cowriter.Bisimilarity)
infixr 5 _∷_ (Codata.Sized.Stream.Bisimilarity)
infix 4 _ℕ<_ _ℕ≤infinity _ℕ≤_ (Codata.Sized.Conat)
infix 6 _ℕ+_ _+ℕ_ (Codata.Sized.Conat)
infixr 8 _⇒_ _⊸_ (Data.Container.Core)
infixr -1 _<$>_ _<*>_ (Data.Container.FreeMonad)
infixl 1 _>>=_ (Data.Container.FreeMonad)
infix 5 _▷_ (Data.Container.Indexed)
infixr 4 _,_ (Data.Container.Relation.Binary.Pointwise)
infix 4 _≈_ (Data.Float.Base)
infixl 4 _+ _* (Data.List.Kleene.Base)
infixr 4 _++++_ _+++*_ _*+++_ _*++*_ (Data.List.Kleene.Base)
infix 4 _[_]* _[_]+ (Data.List.Kleene.Base)
infix 4 _≢∈_ (Data.List.Membership.Propositional)
infixr 5 _`∷_ (Data.List.Reflection)
infix 4 _≡?_ (Data.List.Relation.Binary.Equality.DecPropositional)
infixr 5 _++ᵖ_ (Data.List.Relation.Binary.Prefix.Heterogeneous)
infixr 5 _++ˢ_ (Data.List.Relation.Binary.Suffix.Heterogeneous)
infixr 5 _++_ _++[] (Data.List.Relation.Ternary.Appending.Propositional)
infixr 5 _∷=_ (Data.List.Relation.Unary.Any)
infixr 5 _++_ (Data.List.Ternary.Appending)
infixl 7 _⊓′_ (Data.Nat.Base)
infixl 6 _⊔′_ (Data.Nat.Base)
infixr 8 _^_ (Data.Nat.Base)
infix 4 _!≢0 _!*_!≢0 (Data.Nat.Properties)
infixl 6.5 _P′_ _P_ _C′_ _C_ (Data.Nat.Combinatorics.Base)
infix 8 _⁻¹ (Data.Parity.Base)
infixr 2 _×-⇔_ _×-↣_ _×-↞_ _×-↠_ _×-↔_ _×-cong_ (Data.Product.Function.NonDependent.Propositional)
infixr 2 _×-⟶_ (Data.Product.Function.NonDependent.Setoid)
infixr 2 _×-equivalence_ _×-injection_ _×-left-inverse_ (Data.Product.Function.NonDependent.Setoid)
infixr 2 _×-surjection_ _×-inverse_ (Data.Product.Function.NonDependent.Setoid)
infix 4 _≃?_ (Data.Rational.Unnormalised.Properties)
infixr 4 _,_ (Data.Refinement)
infixr 1 _⊎-⇔_ _⊎-↣_ _⊎-↞_ _⊎-↠_ _⊎-↔_ _⊎-cong_ (Data.Sum.Function.Propositional)
infixr 1 _⊎-⟶_ (Data.Sum.Function.Setoid)
infixr 1 _⊎-equivalence_ _⊎-injection_ _⊎-left-inverse_ (Data.Sum.Function.Setoid)
infixr 1 _⊎-surjection_ _⊎-inverse_ (Data.Sum.Function.Setoid)
infixr 4 _,_ (Data.Tree.AVL.Value)
infix 4 _≈ₖᵥ_ (Data.Tree.AVL.Map.Membership.Propositional)
infixr 5 _`∷_ (Data.Vec.Reflection)
infixr 5 _∷=_ (Data.Vec.Membership.Setoid)
infix -1 _$ⁿ_ (Data.Vec.N-ary)
infix 4 _≋_ (Data.Vec.Functional.Relation.Binary.Equality.Setoid)
infixl 1 _>>=-cong_ _≡->>=-cong_ (Effect.Monad.Partiality)
infixl 1 _?>=′_ (Effect.Monad.Predicate)
infixl 1 _>>=-cong_ _>>=-congP_ (Effect.Monad.Partiality.All)
infixr 5 _∷_ (Foreign.Haskell.List.NonEmpty)
infixr 4 _,_ (Foreign.Haskell.Pair)
infixr 8 _^_ (Function.Endomorphism.Propositional)
infixr 8 _^_ (Function.Endomorphism.Setoid)
infix 4 _≃_ (Function.HalfAdjointEquivalence)
infix 4 _≈_ _≈ᵢ_ _≤_ (Function.Metric.Bundles)
infixl 6 _∙_ (Function.Metric.Bundles)
infix 4 _≈_ (Function.Metric.Nat.Bundles)
infix 4 _≈_ (Function.Metric.Rational.Bundles)
infix 3 _←_ _↢_ (Function.Related)
infix 4 _<_ (Induction.WellFounded)
infixl 6 _ℕ+_ (Level.Literals)
infixr 4 _,_ (Reflection.AnnotatedAST)
infix 4 _≟_ (Reflection.AST.Definition)
infix 4 _≡ᵇ_ (Reflection.AST.Literal)
infix 4 _≈?_ _≟_ _≈_ (Reflection.AST.Meta)
infix 4 _≈?_ _≟_ _≈_ (Reflection.AST.Name)
infix 4 _≟-Telescope_ (Reflection.AST.Term)
infix 4 _≟_ (Reflection.AST.Argument.Information)
infix 4 _≟_ (Reflection.AST.Argument.Modality)
infix 4 _≟_ (Reflection.AST.Argument.Quantity)
infix 4 _≟_ (Reflection.AST.Argument.Relevance)
infix 4 _≟_ (Reflection.AST.Argument.Visibility)
infixr 4 _,_ (Reflection.AST.Traversal)
infix 4 _∈FV_ (Reflection.AST.DeBruijn)
infixr 9 _;_ (Relation.Binary.Construct.Composition)
infixl 6 _+²_ (Relation.Binary.HeterogeneousEquality.Quotients.Examples)
infixr -1 _atₛ_ (Relation.Binary.Indexed.Heterogeneous.Construct.At)
infixr -1 _atₛ_ (Relation.Binary.Indexed.Homogeneous.Construct.At)
infix 4 _∈_ _∉_ (Relation.Unary.Indexed)
infix 4 _≈_ (Relation.Binary.Bundles)
infixl 6 _∩_ (Relation.Binary.Construct.Intersection)
infix 4 _<₋_ (Relation.Binary.Construct.Add.Infimum.Strict)
infix 4 _≈∙_ (Relation.Binary.Construct.Add.Point.Equality)
infix 4 _≤⁺_ _≤⊤⁺ (Relation.Binary.Construct.Add.Supremum.NonStrict)
infixr 5 _∷ʳ_ (Relation.Binary.Construct.Closure.Transitive)
infixr 6 _∪_ (Relation.Binary.Construct.Union)
infixl 6 _+ℤ_ (Relation.Binary.HeterogeneousEquality.Quotients.Examples)
infix 4 _≉_ _≈ᵢ_ _≤ᵢ_ (Relation.Binary.Indexed.Homogeneous.Bundles)
infixr 9 _⍮_ (Relation.Unary.PredicateTransformer)
infix 8 ∼_ (Relation.Unary.PredicateTransformer)
infix 2 _×?_ _⊙?_ (Relation.Unary.Properties)
infix 10 _~? (Relation.Unary.Properties)
infixr 1 _⊎?_ (Relation.Unary.Properties)
infixr 7 _∩?_ (Relation.Unary.Properties)
infixr 6 _∪?_ (Relation.Unary.Properties)
infixr 5 _∷ᴹ_ _∷⁻¹ᴹ_ (Text.Regex.Search)
infixl 6 _`⊜_ (Tactic.RingSolver)
infix 8 ⊝_ (Tactic.RingSolver.Core.Expression)
infix 4 _∈ᴿ?_ _∉ᴿ?_ _∈?ε _∈?[_] _∈?[^_] (Text.Regex.Properties)
infix 4 _∈?_ _∉?_ (Text.Regex.Derivative.Brzozowski)
infix 4 _∈_ _∉_ _∈?_ _∉?_ (Text.Regex.String.Unsafe)
```
New modules
-----------
* Constructive algebraic structures with apartness relations:
```
Algebra.Apartness
Algebra.Apartness.Bundles
Algebra.Apartness.Structures
Algebra.Apartness.Properties.CommutativeHeytingAlgebra
Relation.Binary.Properties.ApartnessRelation
```
* Algebraic structures obtained by flipping their binary operations:
```
Algebra.Construct.Flip.Op
```
* Algebraic structures when freely adding an identity element:
```
Algebra.Construct.Add.Identity
```
* Definitions for algebraic modules:
```
Algebra.Module
Algebra.Module.Core
Algebra.Module.Definitions.Bi.Simultaneous
Algebra.Module.Morphism.Construct.Composition
Algebra.Module.Morphism.Construct.Identity
Algebra.Module.Morphism.Definitions
Algebra.Module.Morphism.ModuleHomomorphism
Algebra.Module.Morphism.Structures
Algebra.Module.Properties
```
* Identity morphisms and composition of morphisms between algebraic structures:
```
Algebra.Morphism.Construct.Composition
Algebra.Morphism.Construct.Identity
```
* Properties of various new algebraic structures:
```
Algebra.Properties.MoufangLoop
Algebra.Properties.Quasigroup
Algebra.Properties.MiddleBolLoop
Algebra.Properties.Loop
Algebra.Properties.KleeneAlgebra
```
* Properties of rings without a unit
```
Algebra.Properties.RingWithoutOne`
```
* Proof of the Binomial Theorem for semirings
```
Algebra.Properties.Semiring.Binomial
Algebra.Properties.CommutativeSemiring.Binomial
```
* 'Optimised' tail-recursive exponentiation properties:
```
Algebra.Properties.Semiring.Exp.TailRecursiveOptimised
```
* An implementation of M-types with `--guardedness` flag:
```
Codata.Guarded.M
```
* A definition of infinite streams using coinductive records:
```
Codata.Guarded.Stream
Codata.Guarded.Stream.Properties
Codata.Guarded.Stream.Relation.Binary.Pointwise
Codata.Guarded.Stream.Relation.Unary.All
Codata.Guarded.Stream.Relation.Unary.Any
```
* A small library for function arguments with default values:
```
Data.Default
```
* A small library defining a structurally recursive view of `Fin n`:
```
Data.Fin.Relation.Unary.Top
```
* A small library for a non-empty fresh list:
```
Data.List.Fresh.NonEmpty
```
* A small library defining a structurally inductive view of lists:
```
Data.List.Relation.Unary.Sufficient
```
* Combinations and permutations for ℕ.
```
Data.Nat.Combinatorics
Data.Nat.Combinatorics.Base
Data.Nat.Combinatorics.Spec
```
* A small library defining parity and its algebra:
```
Data.Parity
Data.Parity.Base
Data.Parity.Instances
Data.Parity.Properties
```
* New base module for `Data.Product` containing only the basic definitions.
```
Data.Product.Base
```
* Reflection utilities for some specific types:
```
Data.List.Reflection
Data.Vec.Reflection
```
* The `All` predicate over non-empty lists:
```
Data.List.NonEmpty.Relation.Unary.All
```
* Some n-ary functions manipulating lists
```
Data.List.Nary.NonDependent
```
* Added Logarithm base 2 on natural numbers:
```
Data.Nat.Logarithm.Core
Data.Nat.Logarithm
```
* Show module for unnormalised rationals:
```
Data.Rational.Unnormalised.Show
```
* Membership relations for maps and sets
```
Data.Tree.AVL.Map.Membership.Propositional
Data.Tree.AVL.Map.Membership.Propositional.Properties
Data.Tree.AVL.Sets.Membership
Data.Tree.AVL.Sets.Membership.Properties
```
* Port of `Linked` to `Vec`:
```
Data.Vec.Relation.Unary.Linked
Data.Vec.Relation.Unary.Linked.Properties
```
* Combinators for propositional equational reasoning on vectors with different indices
```
Data.Vec.Relation.Binary.Equality.Cast
```
* Relations on indexed sets
```
Function.Indexed.Bundles
```
* Properties of various types of functions:
```
Function.Consequences
Function.Consequences.Setoid
Function.Consequences.Propositional
Function.Properties.Bijection
Function.Properties.RightInverse
Function.Properties.Surjection
Function.Construct.Constant
```
* New interface for `NonEmpty` Haskell lists:
```
Foreign.Haskell.List.NonEmpty
```
* In order to improve modularity, the contents of `Relation.Binary.Lattice` has been
split out into the standard:
```
Relation.Binary.Lattice.Definitions
Relation.Binary.Lattice.Structures
Relation.Binary.Lattice.Bundles
```
All contents is re-exported by `Relation.Binary.Lattice` as before.
* Added relational reasoning over apartness relations:
```
Relation.Binary.Reasoning.Base.Apartness`
```
* Algebraic properties of `_∩_` and `_∪_` for predicates
```
Relation.Unary.Algebra
```
* Both versions of equality on predicates are equivalences
```
Relation.Unary.Relation.Binary.Equality
```
* The subset relations on predicates define an order
```
Relation.Unary.Relation.Binary.Subset
```
* Polymorphic versions of some unary relations and their properties
```
Relation.Unary.Polymorphic
Relation.Unary.Polymorphic.Properties
```
* Alpha equality over reflected terms
```
Reflection.AST.AlphaEquality
```
* Various system types and primitives:
```
System.Clock.Primitive
System.Clock
System.Console.ANSI
System.Directory.Primitive
System.Directory
System.FilePath.Posix.Primitive
System.FilePath.Posix
System.Process.Primitive
System.Process
```
* A new `cong!` tactic for automatically deriving arguments to `cong`
```
Tactic.Cong
```
* A golden testing library with test pools, an options parser, a runner:
```
Test.Golden
```
Additions to existing modules
-----------------------------
* The module `Algebra` now publicly re-exports the contents of
`Algebra.Structures.Biased`.
* Added new definitions to `Algebra.Bundles`:
```agda
record UnitalMagma c ℓ : Set (suc (c ⊔ ℓ))
record InvertibleMagma c ℓ : Set (suc (c ⊔ ℓ))
record InvertibleUnitalMagma c ℓ : Set (suc (c ⊔ ℓ))
record Quasigroup c ℓ : Set (suc (c ⊔ ℓ))
record Loop c ℓ : Set (suc (c ⊔ ℓ))
record RingWithoutOne c ℓ : Set (suc (c ⊔ ℓ))
record IdempotentSemiring c ℓ : Set (suc (c ⊔ ℓ))
record KleeneAlgebra c ℓ : Set (suc (c ⊔ ℓ))
record Quasiring c ℓ : Set (suc (c ⊔ ℓ))
record Nearring c ℓ : Set (suc (c ⊔ ℓ))
record IdempotentMagma c ℓ : Set (suc (c ⊔ ℓ))
record AlternateMagma c ℓ : Set (suc (c ⊔ ℓ))
record FlexibleMagma c ℓ : Set (suc (c ⊔ ℓ))
record MedialMagma c ℓ : Set (suc (c ⊔ ℓ))
record SemimedialMagma c ℓ : Set (suc (c ⊔ ℓ))
record LeftBolLoop c ℓ : Set (suc (c ⊔ ℓ))
record RightBolLoop c ℓ : Set (suc (c ⊔ ℓ))
record MoufangLoop c ℓ : Set (suc (c ⊔ ℓ))
record NonAssociativeRing c ℓ : Set (suc (c ⊔ ℓ))
record MiddleBolLoop c ℓ : Set (suc (c ⊔ ℓ))
```
* Added new definitions to `Algebra.Bundles.Raw`:
```agda
record RawLoop c ℓ : Set (suc (c ⊔ ℓ))
record RawQuasiGroup c ℓ : Set (suc (c ⊔ ℓ))
record RawRingWithoutOne c ℓ : Set (suc (c ⊔ ℓ))
```
* Added new definitions to `Algebra.Structures`:
```agda
record IsUnitalMagma (_∙_ : Op₂ A) (ε : A) : Set (a ⊔ ℓ)
record IsInvertibleMagma (_∙_ : Op₂ A) (ε : A) (_⁻¹ : Op₁ A) : Set (a ⊔ ℓ)
record IsInvertibleUnitalMagma (_∙_ : Op₂ A) (ε : A) (⁻¹ : Op₁ A) : Set (a ⊔ ℓ)
record IsQuasigroup (∙ \\ // : Op₂ A) : Set (a ⊔ ℓ)
record IsLoop (∙ \\ // : Op₂ A) (ε : A) : Set (a ⊔ ℓ)
record IsRingWithoutOne (+ * : Op₂ A) (-_ : Op₁ A) (0# : A) : Set (a ⊔ ℓ)
record IsIdempotentSemiring (+ * : Op₂ A) (0# 1# : A) : Set (a ⊔ ℓ)
record IsKleeneAlgebra (+ * : Op₂ A) (⋆ : Op₁ A) (0# 1# : A) : Set (a ⊔ ℓ)
record IsQuasiring (+ * : Op₂ A) (0# 1# : A) : Set (a ⊔ ℓ) where
record IsNearring (+ * : Op₂ A) (0# 1# : A) (_⁻¹ : Op₁ A) : Set (a ⊔ ℓ) where
record IsIdempotentMagma (∙ : Op₂ A) : Set (a ⊔ ℓ)
record IsAlternativeMagma (∙ : Op₂ A) : Set (a ⊔ ℓ)
record IsFlexibleMagma (∙ : Op₂ A) : Set (a ⊔ ℓ)
record IsMedialMagma (∙ : Op₂ A) : Set (a ⊔ ℓ)
record IsSemimedialMagma (∙ : Op₂ A) : Set (a ⊔ ℓ)
record IsLeftBolLoop (∙ \\ // : Op₂ A) (ε : A) : Set (a ⊔ ℓ)
record IsRightBolLoop (∙ \\ // : Op₂ A) (ε : A) : Set (a ⊔ ℓ)
record IsMoufangLoop (∙ \\ // : Op₂ A) (ε : A) : Set (a ⊔ ℓ)
record IsNonAssociativeRing (+ * : Op₂ A) (-_ : Op₁ A) (0# 1# : A) : Set (a ⊔ ℓ)
record IsMiddleBolLoop (∙ \\ // : Op₂ A) (ε : A) : Set (a ⊔ ℓ)
```
* Added new proof to `Algebra.Consequences.Base`:
```agda
reflexive∧selfInverse⇒involutive : Reflexive _≈_ → SelfInverse _≈_ f → Involutive _≈_ f
```
* Added new proofs to `Algebra.Consequences.Propositional`:
```agda
comm∧assoc⇒middleFour : Commutative _∙_ → Associative _∙_ → _∙_ MiddleFourExchange _∙_
identity∧middleFour⇒assoc : Identity e _∙_ → _∙_ MiddleFourExchange _∙_ → Associative _∙_
identity∧middleFour⇒comm : Identity e _+_ → _∙_ MiddleFourExchange _+_ → Commutative _∙_
```
* Added new proofs to `Algebra.Consequences.Setoid`:
```agda
comm∧assoc⇒middleFour : Congruent₂ _∙_ → Commutative _∙_ → Associative _∙_ → _∙_ MiddleFourExchange _∙_
identity∧middleFour⇒assoc : Congruent₂ _∙_ → Identity e _∙_ → _∙_ MiddleFourExchange _∙_ → Associative _∙_
identity∧middleFour⇒comm : Congruent₂ _∙_ → Identity e _+_ → _∙_ MiddleFourExchange _+_ → Commutative _∙_
involutive⇒surjective : Involutive f → Surjective f
selfInverse⇒involutive : SelfInverse f → Involutive f
selfInverse⇒congruent : SelfInverse f → Congruent f
selfInverse⇒inverseᵇ : SelfInverse f → Inverseᵇ f f
selfInverse⇒surjective : SelfInverse f → Surjective f
selfInverse⇒injective : SelfInverse f → Injective f
selfInverse⇒bijective : SelfInverse f → Bijective f
comm∧idˡ⇒id : Commutative _∙_ → LeftIdentity e _∙_ → Identity e _∙_
comm∧idʳ⇒id : Commutative _∙_ → RightIdentity e _∙_ → Identity e _∙_
comm∧zeˡ⇒ze : Commutative _∙_ → LeftZero e _∙_ → Zero e _∙_
comm∧zeʳ⇒ze : Commutative _∙_ → RightZero e _∙_ → Zero e _∙_
comm∧invˡ⇒inv : Commutative _∙_ → LeftInverse e _⁻¹ _∙_ → Inverse e _⁻¹ _∙_
comm∧invʳ⇒inv : Commutative _∙_ → RightInverse e _⁻¹ _∙_ → Inverse e _⁻¹ _∙_
comm∧distrˡ⇒distr : Commutative _∙_ → _∙_ DistributesOverˡ _◦_ → _∙_ DistributesOver _◦_
comm∧distrʳ⇒distr : Commutative _∙_ → _∙_ DistributesOverʳ _◦_ → _∙_ DistributesOver _◦_
distrib∧absorbs⇒distribˡ : Associative _∙_ → Commutative _◦_ → _∙_ Absorbs _◦_ → _◦_ Absorbs _∙_ → _◦_ DistributesOver _∙_ → _∙_ DistributesOverˡ _◦_
```
* Added new functions to `Algebra.Construct.DirectProduct`:
```agda
rawSemiring : RawSemiring a ℓ₁ → RawSemiring b ℓ₂ → RawSemiring (a ⊔ b) (ℓ₁ ⊔ ℓ₂)
rawRing : RawRing a ℓ₁ → RawRing b ℓ₂ → RawRing (a ⊔ b) (ℓ₁ ⊔ ℓ₂)
semiringWithoutAnnihilatingZero : SemiringWithoutAnnihilatingZero a ℓ₁ →
SemiringWithoutAnnihilatingZero b ℓ₂ →
SemiringWithoutAnnihilatingZero (a ⊔ b) (ℓ₁ ⊔ ℓ₂)
semiring : Semiring a ℓ₁ → Semiring b ℓ₂ → Semiring (a ⊔ b) (ℓ₁ ⊔ ℓ₂)
commutativeSemiring : CommutativeSemiring a ℓ₁ →
CommutativeSemiring b ℓ₂ →
CommutativeSemiring (a ⊔ b) (ℓ₁ ⊔ ℓ₂)
ring : Ring a ℓ₁ → Ring b ℓ₂ → Ring (a ⊔ b) (ℓ₁ ⊔ ℓ₂)
commutativeRing : CommutativeRing a ℓ₁ → CommutativeRing b ℓ₂ → CommutativeRing (a ⊔ b) (ℓ₁ ⊔ ℓ₂)
rawQuasigroup : RawQuasigroup a ℓ₁ → RawQuasigroup b ℓ₂ → RawQuasigroup (a ⊔ b) (ℓ₁ ⊔ ℓ₂)
rawLoop : RawLoop a ℓ₁ → RawLoop b ℓ₂ → RawLoop (a ⊔ b) (ℓ₁ ⊔ ℓ₂)
unitalMagma : UnitalMagma a ℓ₁ → UnitalMagma b ℓ₂ → UnitalMagma (a ⊔ b) (ℓ₁ ⊔ ℓ₂)
invertibleMagma : InvertibleMagma a ℓ₁ → InvertibleMagma b ℓ₂ → InvertibleMagma (a ⊔ b) (ℓ₁ ⊔ ℓ₂)
invertibleUnitalMagma : InvertibleUnitalMagma a ℓ₁ →
InvertibleUnitalMagma b ℓ₂ →
InvertibleUnitalMagma (a ⊔ b) (ℓ₁ ⊔ ℓ₂)
quasigroup : Quasigroup a ℓ₁ → Quasigroup b ℓ₂ → Quasigroup (a ⊔ b) (ℓ₁ ⊔ ℓ₂)
loop : Loop a ℓ₁ → Loop b ℓ₂ → Loop (a ⊔ b) (ℓ₁ ⊔ ℓ₂)
idempotentSemiring : IdempotentSemiring a ℓ₁ →
IdempotentSemiring b ℓ₂ →
IdempotentSemiring (a ⊔ b) (ℓ₁ ⊔ ℓ₂)
idempotentMagma : IdempotentMagma a ℓ₁ → IdempotentMagma b ℓ₂ → IdempotentMagma (a ⊔ b) (ℓ₁ ⊔ ℓ₂)
alternativeMagma : AlternativeMagma a ℓ₁ → AlternativeMagma b ℓ₂ → AlternativeMagma (a ⊔ b) (ℓ₁ ⊔ ℓ₂)
flexibleMagma : FlexibleMagma a ℓ₁ → FlexibleMagma b ℓ₂ → FlexibleMagma (a ⊔ b) (ℓ₁ ⊔ ℓ₂)
medialMagma : MedialMagma a ℓ₁ → MedialMagma b ℓ₂ → MedialMagma (a ⊔ b) (ℓ₁ ⊔ ℓ₂)
semimedialMagma : SemimedialMagma a ℓ₁ → SemimedialMagma b ℓ₂ → SemimedialMagma (a ⊔ b) (ℓ₁ ⊔ ℓ₂)
kleeneAlgebra : KleeneAlgebra a ℓ₁ → KleeneAlgebra b ℓ₂ → KleeneAlgebra (a ⊔ b) (ℓ₁ ⊔ ℓ₂)
leftBolLoop : LeftBolLoop a ℓ₁ → LeftBolLoop b ℓ₂ → LeftBolLoop (a ⊔ b) (ℓ₁ ⊔ ℓ₂)
rightBolLoop : RightBolLoop a ℓ₁ → RightBolLoop b ℓ₂ → RightBolLoop (a ⊔ b) (ℓ₁ ⊔ ℓ₂)
middleBolLoop : MiddleBolLoop a ℓ₁ → MiddleBolLoop b ℓ₂ → MiddleBolLoop (a ⊔ b) (ℓ₁ ⊔ ℓ₂)
moufangLoop : MoufangLoop a ℓ₁ → MoufangLoop b ℓ₂ → MoufangLoop (a ⊔ b) (ℓ₁ ⊔ ℓ₂)
rawRingWithoutOne : RawRingWithoutOne a ℓ₁ → RawRingWithoutOne b ℓ₂ → RawRingWithoutOne (a ⊔ b) (ℓ₁ ⊔ ℓ₂)
ringWithoutOne : RingWithoutOne a ℓ₁ → RingWithoutOne b ℓ₂ → RingWithoutOne (a ⊔ b) (ℓ₁ ⊔ ℓ₂)
nonAssociativeRing : NonAssociativeRing a ℓ₁ →
NonAssociativeRing b ℓ₂ →
NonAssociativeRing (a ⊔ b) (ℓ₁ ⊔ ℓ₂)
quasiring : Quasiring a ℓ₁ → Quasiring b ℓ₂ → Quasiring (a ⊔ b) (ℓ₁ ⊔ ℓ₂)
nearring : Nearring a ℓ₁ → Nearring b ℓ₂ → Nearring (a ⊔ b) (ℓ₁ ⊔ ℓ₂)
```
* Added new definition to `Algebra.Definitions`:
```agda
_*_ MiddleFourExchange _+_ = ∀ w x y z → ((w + x) * (y + z)) ≈ ((w + y) * (x + z))
SelfInverse f = ∀ {x y} → f x ≈ y → f y ≈ x
LeftDividesˡ _∙_ _\\_ = ∀ x y → (x ∙ (x \\ y)) ≈ y
LeftDividesʳ _∙_ _\\_ = ∀ x y → (x \\ (x ∙ y)) ≈ y
RightDividesˡ _∙_ _//_ = ∀ x y → ((y // x) ∙ x) ≈ y
RightDividesʳ _∙_ _//_ = ∀ x y → ((y ∙ x) // x) ≈ y
LeftDivides ∙ \\ = (LeftDividesˡ ∙ \\) × (LeftDividesʳ ∙ \\)
RightDivides ∙ // = (RightDividesˡ ∙ //) × (RightDividesʳ ∙ //)
LeftInvertible e _∙_ x = ∃[ x⁻¹ ] (x⁻¹ ∙ x) ≈ e
RightInvertible e _∙_ x = ∃[ x⁻¹ ] (x ∙ x⁻¹) ≈ e
Invertible e _∙_ x = ∃[ x⁻¹ ] ((x⁻¹ ∙ x) ≈ e) × ((x ∙ x⁻¹) ≈ e)
StarRightExpansive e _+_ _∙_ _⁻* = ∀ x → (e + (x ∙ (x ⁻*))) ≈ (x ⁻*)
StarLeftExpansive e _+_ _∙_ _⁻* = ∀ x → (e + ((x ⁻*) ∙ x)) ≈ (x ⁻*)
StarExpansive e _+_ _∙_ _* = (StarLeftExpansive e _+_ _∙_ _*) × (StarRightExpansive e _+_ _∙_ _*)
StarLeftDestructive _+_ _∙_ _* = ∀ a b x → (b + (a ∙ x)) ≈ x → ((a *) ∙ b) ≈ x
StarRightDestructive _+_ _∙_ _* = ∀ a b x → (b + (x ∙ a)) ≈ x → (b ∙ (a *)) ≈ x
StarDestructive _+_ _∙_ _* = (StarLeftDestructive _+_ _∙_ _*) × (StarRightDestructive _+_ _∙_ _*)
LeftAlternative _∙_ = ∀ x y → ((x ∙ x) ∙ y) ≈ (x ∙ (y ∙ y))
RightAlternative _∙_ = ∀ x y → (x ∙ (y ∙ y)) ≈ ((x ∙ y) ∙ y)
Alternative _∙_ = (LeftAlternative _∙_ ) × (RightAlternative _∙_)
Flexible _∙_ = ∀ x y → ((x ∙ y) ∙ x) ≈ (x ∙ (y ∙ x))
Medial _∙_ = ∀ x y u z → ((x ∙ y) ∙ (u ∙ z)) ≈ ((x ∙ u) ∙ (y ∙ z))
LeftSemimedial _∙_ = ∀ x y z → ((x ∙ x) ∙ (y ∙ z)) ≈ ((x ∙ y) ∙ (x ∙ z))
RightSemimedial _∙_ = ∀ x y z → ((y ∙ z) ∙ (x ∙ x)) ≈ ((y ∙ x) ∙ (z ∙ x))
Semimedial _∙_ = (LeftSemimedial _∙_) × (RightSemimedial _∙_)
LeftBol _∙_ = ∀ x y z → (x ∙ (y ∙ (x ∙ z))) ≈ ((x ∙ (y ∙ z)) ∙ z )
RightBol _∙_ = ∀ x y z → (((z ∙ x) ∙ y) ∙ x) ≈ (z ∙ ((x ∙ y) ∙ x))
MiddleBol _∙_ _\\_ _//_ = ∀ x y z → (x ∙ ((y ∙ z) \\ x)) ≈ ((x // z) ∙ (y \\ x))
```
* Added new functions to `Algebra.Definitions.RawSemiring`:
```agda
_^[_]*_ : A → ℕ → A → A
_^ᵗ_ : A → ℕ → A
```
* In `Algebra.Bundles.Lattice` the existing record `Lattice` now provides
```agda
∨-commutativeSemigroup : CommutativeSemigroup c ℓ
∧-commutativeSemigroup : CommutativeSemigroup c ℓ
```
and their corresponding algebraic sub-bundles.
* In `Algebra.Lattice.Structures` the record `IsLattice` now provides
```
∨-isCommutativeSemigroup : IsCommutativeSemigroup ∨
∧-isCommutativeSemigroup : IsCommutativeSemigroup ∧
```
and their corresponding algebraic substructures.
* The module `Algebra.Properties.Magma.Divisibility` now re-exports operations
`_∣ˡ_`, `_∤ˡ_`, `_∣ʳ_`, `_∤ʳ_` from `Algebra.Definitions.Magma`.
* Added new records to `Algebra.Morphism.Structures`:
```agda
record IsQuasigroupHomomorphism (⟦_⟧ : A → B) : Set (a ⊔ ℓ₁ ⊔ ℓ₂)
record IsQuasigroupMonomorphism (⟦_⟧ : A → B) : Set (a ⊔ ℓ₁ ⊔ ℓ₂)
record IsQuasigroupIsomorphism (⟦_⟧ : A → B) : Set (a ⊔ b ⊔ ℓ₁ ⊔ ℓ₂)
record IsLoopHomomorphism (⟦_⟧ : A → B) : Set (a ⊔ ℓ₁ ⊔ ℓ₂)
record IsLoopMonomorphism (⟦_⟧ : A → B) : Set (a ⊔ ℓ₁ ⊔ ℓ₂)
record IsLoopIsomorphism (⟦_⟧ : A → B) : Set (a ⊔ b ⊔ ℓ₁ ⊔ ℓ₂)
record IsRingWithoutOneHomomorphism (⟦_⟧ : A → B) : Set (a ⊔ ℓ₁ ⊔ ℓ₂)
record IsRingWithoutOneMonomorphism (⟦_⟧ : A → B) : Set (a ⊔ ℓ₁ ⊔ ℓ₂)
record IsRingWithoutOneIsoMorphism (⟦_⟧ : A → B) : Set (a ⊔ b ⊔ ℓ₁ ⊔ ℓ₂)
record IsKleeneAlgebraHomomorphism (⟦_⟧ : A → B) : Set (a ⊔ ℓ₁ ⊔ ℓ₂)
record IsKleeneAlgebraMonomorphism (⟦_⟧ : A → B) : Set (a ⊔ ℓ₁ ⊔ ℓ₂)
record IsKleeneAlgebraIsomorphism (⟦_⟧ : A → B) : Set (a ⊔ b ⊔ ℓ₁ ⊔ ℓ₂)
```
* Added new proofs to `Algebra.Properties.CommutativeSemigroup`:
```agda
xy∙xx≈x∙yxx : (x ∙ y) ∙ (x ∙ x) ≈ x ∙ (y ∙ (x ∙ x))
interchange : Interchangable _∙_ _∙_
leftSemimedial : LeftSemimedial _∙_
rightSemimedial : RightSemimedial _∙_
middleSemimedial : (x ∙ y) ∙ (z ∙ x) ≈ (x ∙ z) ∙ (y ∙ x)
semimedial : Semimedial _∙_
```
* Added new functions to `Algebra.Properties.CommutativeMonoid`
```agda
invertibleˡ⇒invertibleʳ : LeftInvertible _≈_ 0# _+_ x → RightInvertible _≈_ 0# _+_ x
invertibleʳ⇒invertibleˡ : RightInvertible _≈_ 0# _+_ x → LeftInvertible _≈_ 0# _+_ x
invertibleˡ⇒invertible : LeftInvertible _≈_ 0# _+_ x → Invertible _≈_ 0# _+_ x
invertibleʳ⇒invertible : RightInvertible _≈_ 0# _+_ x → Invertible _≈_ 0# _+_ x
```
* Added new proof to `Algebra.Properties.Monoid.Mult`:
```agda
×-congˡ : (_× x) Preserves _≡_ ⟶ _≈_
```
* Added new proof to `Algebra.Properties.Monoid.Sum`:
```agda
sum-init-last : (t : Vector _ (suc n)) → sum t ≈ sum (init t) + last t
```
* Added new proofs to `Algebra.Properties.Semigroup`:
```agda
leftAlternative : LeftAlternative _∙_
rightAlternative : RightAlternative _∙_
alternative : Alternative _∙_
flexible : Flexible _∙_
```
* Added new proofs to `Algebra.Properties.Semiring.Exp`:
```agda
^-congʳ : (x ^_) Preserves _≡_ ⟶ _≈_
y*x^m*y^n≈x^m*y^[n+1] : x * y ≈ y * x → y * (x ^ m * y ^ n) ≈ x ^ m * y ^ suc n
```
* Added new proofs to `Algebra.Properties.Semiring.Mult`:
```agda
1×-identityʳ : 1 × x ≈ x
×-comm-* : x * (n × y) ≈ n × (x * y)
×-assoc-* : (n × x) * y ≈ n × (x * y)
```
* Added new proofs to `Algebra.Properties.Ring`:
```agda
-1*x≈-x : - 1# * x ≈ - x
x+x≈x⇒x≈0 : x + x ≈ x → x ≈ 0#
x[y-z]≈xy-xz : x * (y - z) ≈ x * y - x * z
[y-z]x≈yx-zx : (y - z) * x ≈ (y * x) - (z * x)
```
* Added new functions in `Codata.Guarded.Stream`:
```
transpose : List (Stream A) → Stream (List A)
transpose⁺ : List⁺ (Stream A) → Stream (List⁺ A)
concat : Stream (List⁺ A) → Stream A
```
* Added new proofs in `Codata.Guarded.Stream.Properties`:
```
cong-concat : ass ≈ bss → concat ass ≈ concat bss
map-concat : map f (concat ass) ≈ concat (map (List⁺.map f) ass)
lookup-transpose : lookup n (transpose ass) ≡ List.map (lookup n) ass
lookup-transpose⁺ : lookup n (transpose⁺ ass) ≡ List⁺.map (lookup n) ass
```
* Added new proofs in `Data.Bool.Properties`:
```agda
<-wellFounded : WellFounded _<_
∨-conicalˡ : LeftConical false _∨_
∨-conicalʳ : RightConical false _∨_
∨-conical : Conical false _∨_
∧-conicalˡ : LeftConical true _∧_
∧-conicalʳ : RightConical true _∧_
∧-conical : Conical true _∧_
true-xor : true xor x ≡ not x
xor-same : x xor x ≡ false
not-distribˡ-xor : not (x xor y) ≡ (not x) xor y
not-distribʳ-xor : not (x xor y) ≡ x xor (not y)
xor-assoc : Associative _xor_
xor-comm : Commutative _xor_
xor-identityˡ : LeftIdentity false _xor_
xor-identityʳ : RightIdentity false _xor_
xor-identity : Identity false _xor_
xor-inverseˡ : LeftInverse true not _xor_
xor-inverseʳ : RightInverse true not _xor_
xor-inverse : Inverse true not _xor_
∧-distribˡ-xor : _∧_ DistributesOverˡ _xor_
∧-distribʳ-xor : _∧_ DistributesOverʳ _xor_
∧-distrib-xor : _∧_ DistributesOver _xor_
xor-annihilates-not : (not x) xor (not y) ≡ x xor y
```
* Exposed container combinator conversion functions from `Data.Container.Combinator.Properties`
separately from their correctness proofs in `Data.Container.Combinator`:
```
to-id : F.id A → ⟦ id ⟧ A
from-id : ⟦ id ⟧ A → F.id A
to-const : A → ⟦ const A ⟧ B
from-const : ⟦ const A ⟧ B → A
to-∘ : ⟦ C₁ ⟧ (⟦ C₂ ⟧ A) → ⟦ C₁ ∘ C₂ ⟧ A
from-∘ : ⟦ C₁ ∘ C₂ ⟧ A → ⟦ C₁ ⟧ (⟦ C₂ ⟧ A)
to-× : ⟦ C₁ ⟧ A P.× ⟦ C₂ ⟧ A → ⟦ C₁ × C₂ ⟧ A
from-× : ⟦ C₁ × C₂ ⟧ A → ⟦ C₁ ⟧ A P.× ⟦ C₂ ⟧ A
to-Π : (∀ i → ⟦ Cᵢ i ⟧ A) → ⟦ Π I Cᵢ ⟧ A
from-Π : ⟦ Π I Cᵢ ⟧ A → ∀ i → ⟦ Cᵢ i ⟧ A
to-⊎ : ⟦ C₁ ⟧ A S.⊎ ⟦ C₂ ⟧ A → ⟦ C₁ ⊎ C₂ ⟧ A
from-⊎ : ⟦ C₁ ⊎ C₂ ⟧ A → ⟦ C₁ ⟧ A S.⊎ ⟦ C₂ ⟧ A
to-Σ : (∃ λ i → ⟦ C i ⟧ A) → ⟦ Σ I C ⟧ A
from-Σ : ⟦ Σ I C ⟧ A → ∃ λ i → ⟦ C i ⟧ A
```
* Added new functions in `Data.Fin.Base`:
```
finToFun : Fin (m ^ n) → (Fin n → Fin m)
funToFin : (Fin m → Fin n) → Fin (n ^ m)
quotient : Fin (m * n) → Fin m
remainder : Fin (m * n) → Fin n
```
* Added new proofs in `Data.Fin.Induction`:
```agda
spo-wellFounded : IsStrictPartialOrder _≈_ _⊏_ → WellFounded _⊏_
spo-noetherian : IsStrictPartialOrder _≈_ _⊏_ → WellFounded (flip _⊏_)
<-weakInduction-startingFrom : P i → (∀ j → P (inject₁ j) → P (suc j)) → ∀ {j} → j ≥ i → P j
```
* Added new definitions and proofs in `Data.Fin.Permutation`:
```agda
insert : Fin (suc m) → Fin (suc n) → Permutation m n → Permutation (suc m) (suc n)
insert-punchIn : insert i j π ⟨$⟩ʳ punchIn i k ≡ punchIn j (π ⟨$⟩ʳ k)
insert-remove : insert i (π ⟨$⟩ʳ i) (remove i π) ≈ π
remove-insert : remove i (insert i j π) ≈ π
```
* Added new proofs in `Data.Fin.Properties`:
```
1↔⊤ : Fin 1 ↔ ⊤
2↔Bool : Fin 2 ↔ Bool
0≢1+n : zero ≢ suc i
↑ˡ-injective : i ↑ˡ n ≡ j ↑ˡ n → i ≡ j
↑ʳ-injective : n ↑ʳ i ≡ n ↑ʳ j → i ≡ j
finTofun-funToFin : funToFin ∘ finToFun ≗ id
funTofin-funToFun : finToFun (funToFin f) ≗ f
^↔→ : Extensionality _ _ → Fin (m ^ n) ↔ (Fin n → Fin m)
toℕ-mono-< : i < j → toℕ i ℕ.< toℕ j
toℕ-mono-≤ : i ≤ j → toℕ i ℕ.≤ toℕ j
toℕ-cancel-≤ : toℕ i ℕ.≤ toℕ j → i ≤ j
toℕ-cancel-< : toℕ i ℕ.< toℕ j → i < j
splitAt⁻¹-↑ˡ : splitAt m {n} i ≡ inj₁ j → j ↑ˡ n ≡ i
splitAt⁻¹-↑ʳ : splitAt m {n} i ≡ inj₂ j → m ↑ʳ j ≡ i
toℕ-combine : toℕ (combine i j) ≡ k ℕ.* toℕ i ℕ.+ toℕ j
combine-injectiveˡ : combine i j ≡ combine k l → i ≡ k
combine-injectiveʳ : combine i j ≡ combine k l → j ≡ l
combine-injective : combine i j ≡ combine k l → i ≡ k × j ≡ l
combine-surjective : ∀ i → ∃₂ λ j k → combine j k ≡ i
combine-monoˡ-< : i < j → combine i k < combine j l
ℕ-ℕ≡toℕ‿ℕ- : n ℕ-ℕ i ≡ toℕ (n ℕ- i)
lower₁-injective : lower₁ i n≢i ≡ lower₁ j n≢j → i ≡ j
pinch-injective : suc i ≢ j → suc i ≢ k → pinch i j ≡ pinch i k → j ≡ k
i<1+i : i < suc i
injective⇒≤ : ∀ {f : Fin m → Fin n} → Injective f → m ℕ.≤ n
<⇒notInjective : ∀ {f : Fin m → Fin n} → n ℕ.< m → ¬ (Injective f)
ℕ→Fin-notInjective : ∀ (f : ℕ → Fin n) → ¬ (Injective f)
cantor-schröder-bernstein : ∀ {f : Fin m → Fin n} {g : Fin n → Fin m} → Injective f → Injective g → m ≡ n
cast-is-id : cast eq k ≡ k
subst-is-cast : subst Fin eq k ≡ cast eq k
cast-trans : cast eq₂ (cast eq₁ k) ≡ cast (trans eq₁ eq₂) k
fromℕ≢inject₁ : {i : Fin n} → fromℕ n ≢ inject₁ i
inject≤-trans : inject≤ (inject≤ i m≤n) n≤o ≡ inject≤ i (≤-trans m≤n n≤o)
inject≤-irrelevant : inject≤ i m≤n ≡ inject≤ i m≤n′
i≤inject₁[j]⇒i≤1+j : i ≤ inject₁ j → i ≤ suc j
```
* Added new lemmas in `Data.Fin.Substitution.Lemmas.TermLemmas`:
```
map-var≡ : (∀ x → lookup ρ₁ x ≡ f x) → (∀ x → lookup ρ₂ x ≡ T.var (f x)) → map var ρ₁ ≡ ρ₂
wk≡wk : map var VarSubst.wk ≡ T.wk {n = n}
id≡id : map var VarSubst.id ≡ T.id {n = n}
sub≡sub : map var (VarSubst.sub x) ≡ T.sub (T.var x)
↑≡↑ : map var (ρ VarSubst.↑) ≡ map T.var ρ T.↑
/Var≡/ : t /Var ρ ≡ t T./ map T.var ρ
sub-renaming-commutes : t /Var VarSubst.sub x T./ ρ ≡ t T./ ρ T.↑ T./ T.sub (lookup ρ x)
sub-commutes-with-renaming : t T./ T.sub t′ /Var ρ ≡ t /Var ρ VarSubst.↑ T./ T.sub (t′ /Var ρ)
```
* Added new functions and definitions in `Data.Integer.Base`:
```agda
_^_ : ℤ → ℕ → ℤ
+-0-rawGroup : Rawgroup 0ℓ 0ℓ
*-rawMagma : RawMagma 0ℓ 0ℓ
*-1-rawMonoid : RawMonoid 0ℓ 0ℓ
```
* Added new proofs in `Data.Integer.Properties`:
```agda
sign-cong′ : s₁ ◃ n₁ ≡ s₂ ◃ n₂ → s₁ ≡ s₂ ⊎ (n₁ ≡ 0 × n₂ ≡ 0)
≤-⊖ : m ℕ.≤ n → n ⊖ m ≡ + (n ∸ m)
∣⊖∣-≤ : m ℕ.≤ n → ∣ m ⊖ n ∣ ≡ n ∸ m
∣-∣-≤ : i ≤ j → + ∣ i - j ∣ ≡ j - i
i^n≡0⇒i≡0 : i ^ n ≡ 0ℤ → i ≡ 0ℤ
^-identityʳ : i ^ 1 ≡ i
^-zeroˡ : 1 ^ n ≡ 1
^-*-assoc : (i ^ m) ^ n ≡ i ^ (m ℕ.* n)
^-distribˡ-+-* : i ^ (m ℕ.+ n) ≡ i ^ m * i ^ n
^-isMagmaHomomorphism : IsMagmaHomomorphism ℕ.+-rawMagma *-rawMagma (i ^_)
^-isMonoidHomomorphism : IsMonoidHomomorphism ℕ.+-0-rawMonoid *-1-rawMonoid (i ^_)
```
* Added new proofs in `Data.Integer.GCD`:
```agda
gcd-assoc : Associative gcd
gcd-zeroˡ : LeftZero 1ℤ gcd
gcd-zeroʳ : RightZero 1ℤ gcd
gcd-zero : Zero 1ℤ gcd
```
* Added new functions and definitions to `Data.List.Base`:
```agda
takeWhileᵇ : (A → Bool) → List A → List A
dropWhileᵇ : (A → Bool) → List A → List A
filterᵇ : (A → Bool) → List A → List A
partitionᵇ : (A → Bool) → List A → List A × List A
spanᵇ : (A → Bool) → List A → List A × List A
breakᵇ : (A → Bool) → List A → List A × List A
linesByᵇ : (A → Bool) → List A → List (List A)
wordsByᵇ : (A → Bool) → List A → List (List A)
derunᵇ : (A → A → Bool) → List A → List A
deduplicateᵇ : (A → A → Bool) → List A → List A
findᵇ : (A → Bool) → List A -> Maybe A
findIndexᵇ : (A → Bool) → (xs : List A) → Maybe $ Fin (length xs)
findIndicesᵇ : (A → Bool) → (xs : List A) → List $ Fin (length xs)
find : Decidable P → List A → Maybe A
findIndex : Decidable P → (xs : List A) → Maybe $ Fin (length xs)
findIndices : Decidable P → (xs : List A) → List $ Fin (length xs)
catMaybes : List (Maybe A) → List A
ap : List (A → B) → List A → List B
++-rawMagma : Set a → RawMagma a _
++-[]-rawMonoid : Set a → RawMonoid a _
iterate : (A → A) → A → ℕ → List A
insertAt : (xs : List A) → Fin (suc (length xs)) → A → List A
updateAt : (xs : List A) → Fin (length xs) → (A → A) → List A
```
* Added new proofs in `Data.List.Relation.Binary.Lex.Strict`:
```agda
xs≮[] : ¬ xs < []
```
* Added new proofs to `Data.List.Relation.Binary.Permutation.Propositional.Properties`:
```agda
Any-resp-[σ⁻¹∘σ] : (σ : xs ↭ ys) → (ix : Any P xs) → Any-resp-↭ (trans σ (↭-sym σ)) ix ≡ ix
∈-resp-[σ⁻¹∘σ] : (σ : xs ↭ ys) → (ix : x ∈ xs) → ∈-resp-↭ (trans σ (↭-sym σ)) ix ≡ ix
```
* In `Data.List.Relation.Binary.Permutation.Setoid.Properties`:
```agda
foldr-commMonoid : xs ↭ ys → foldr _∙_ ε xs ≈ foldr _∙_ ε ys
```
* Added new function to `Data.List.Relation.Binary.Permutation.Propositional.Properties`
```agda
↭-reverse : reverse xs ↭ xs
```
* Added new proofs to `Data.List.Relation.Binary.Sublist.Setoid.Properties`:
```
⊆-mergeˡ : xs ⊆ merge _≤?_ xs ys
⊆-mergeʳ : ys ⊆ merge _≤?_ xs ys
```
* Added new functions in `Data.List.Relation.Unary.All`:
```
decide : Π[ P ∪ Q ] → Π[ All P ∪ Any Q ]
```
* Added new proof to `Data.List.Relation.Unary.All.Properties`:
```agda
gmap⁻ : Q ∘ f ⋐ P → All Q ∘ map f ⋐ All P
```
* Added new functions in `Data.List.Fresh.Relation.Unary.All`:
```
decide : Π[ P ∪ Q ] → Π[ All {R = R} P ∪ Any Q ]
```
* Added new proofs to `Data.List.Membership.Propositional.Properties`:
```agda
mapWith∈-id : mapWith∈ xs (λ {x} _ → x) ≡ xs
map-mapWith∈ : map g (mapWith∈ xs f) ≡ mapWith∈ xs (g ∘′ f)
```
* Added new proofs to `Data.List.Membership.Setoid.Properties`:
```agda
mapWith∈-id : mapWith∈ xs (λ {x} _ → x) ≡ xs
map-mapWith∈ : map g (mapWith∈ xs f) ≡ mapWith∈ xs (g ∘′ f)
index-injective : index x₁∈xs ≡ index x₂∈xs → x₁ ≈ x₂
∈-++⁺∘++⁻ : (p : v ∈ xs ++ ys) → [ ∈-++⁺ˡ , ∈-++⁺ʳ xs ]′ (∈-++⁻ xs p) ≡ p
∈-++⁻∘++⁺ : (p : v ∈ xs ⊎ v ∈ ys) → ∈-++⁻ xs ([ ∈-++⁺ˡ , ∈-++⁺ʳ xs ]′ p) ≡ p
∈-++↔ : (v ∈ xs ⊎ v ∈ ys) ↔ v ∈ xs ++ ys
∈-++-comm : v ∈ xs ++ ys → v ∈ ys ++ xs
∈-++-comm∘++-comm : (p : v ∈ xs ++ ys) → ∈-++-comm ys xs (∈-++-comm xs ys p) ≡ p
∈-++↔++ : v ∈ xs ++ ys ↔ v ∈ ys ++ xs
```
* Add new proofs in `Data.List.Properties`:
```agda
∈⇒∣product : n ∈ ns → n ∣ product ns
∷ʳ-++ : xs ∷ʳ a ++ ys ≡ xs ++ a ∷ ys
concatMap-cong : f ≗ g → concatMap f ≗ concatMap g
concatMap-pure : concatMap [_] ≗ id
concatMap-map : concatMap g (map f xs) ≡ concatMap (g ∘′ f) xs
map-concatMap : map f ∘′ concatMap g ≗ concatMap (map f ∘′ g)
length-isMagmaHomomorphism : (A : Set a) → IsMagmaHomomorphism (++-rawMagma A) +-rawMagma length
length-isMonoidHomomorphism : (A : Set a) → IsMonoidHomomorphism (++-[]-rawMonoid A) +-0-rawMonoid length
take-map : take n (map f xs) ≡ map f (take n xs)
drop-map : drop n (map f xs) ≡ map f (drop n xs)
head-map : head (map f xs) ≡ Maybe.map f (head xs)
take-suc : take (suc m) xs ≡ take m xs ∷ʳ lookup xs i
take-suc-tabulate : take (suc m) (tabulate f) ≡ take m (tabulate f) ∷ʳ f i
drop-take-suc : drop m (take (suc m) xs) ≡ [ lookup xs i ]
drop-take-suc-tabulate : drop m (take (suc m) (tabulate f)) ≡ [ f i ]
take-all : n ≥ length xs → take n xs ≡ xs
drop-all : n ≥ length xs → drop n xs ≡ []
take-[] : take m [] ≡ []
drop-[] : drop m [] ≡ []
drop-drop : drop n (drop m xs) ≡ drop (m + n) xs
lookup-replicate : lookup (replicate n x) i ≡ x
map-replicate : map f (replicate n x) ≡ replicate n (f x)
zipWith-replicate : zipWith _⊕_ (replicate n x) (replicate n y) ≡ replicate n (x ⊕ y)
length-iterate : length (iterate f x n) ≡ n
iterate-id : iterate id x n ≡ replicate n x
lookup-iterate : lookup (iterate f x n) (cast (sym (length-iterate f x n)) i) ≡ ℕ.iterate f x (toℕ i)
length-insertAt : length (insertAt xs i v) ≡ suc (length xs)
length-removeAt′ : length xs ≡ suc (length (removeAt xs k))
removeAt-insertAt : removeAt (insertAt xs i v) ((cast (sym (length-insertAt xs i v)) i)) ≡ xs
insertAt-removeAt : insertAt (removeAt xs i) (cast (sym (lengthAt-removeAt xs i)) i) (lookup xs i) ≡ xs
cartesianProductWith-zeroˡ : cartesianProductWith f [] ys ≡ []
cartesianProductWith-zeroʳ : cartesianProductWith f xs [] ≡ []
cartesianProductWith-distribʳ-++ : cartesianProductWith f (xs ++ ys) zs ≡
cartesianProductWith f xs zs ++ cartesianProductWith f ys zs
foldr-map : foldr f x (map g xs) ≡ foldr (g -⟨ f ∣) x xs
foldl-map : foldl f x (map g xs) ≡ foldl (∣ f ⟩- g) x xs
```
* In `Data.List.NonEmpty.Base`:
```agda
drop+ : ℕ → List⁺ A → List⁺ A
```
* Added new proofs in `Data.List.NonEmpty.Properties`:
```agda
length-++⁺ : length (xs ++⁺ ys) ≡ length xs + length ys
length-++⁺-tail : length (xs ++⁺ ys) ≡ suc (length xs + length (tail ys))
++-++⁺ : (xs ++ ys) ++⁺ zs ≡ xs ++⁺ ys ++⁺ zs
++⁺-cancelˡ′ : xs ++⁺ zs ≡ ys ++⁺ zs′ → List.length xs ≡ List.length ys → zs ≡ zs′
++⁺-cancelˡ : xs ++⁺ ys ≡ xs ++⁺ zs → ys ≡ zs
drop+-++⁺ : drop+ (length xs) (xs ++⁺ ys) ≡ ys
map-++⁺-commute : map f (xs ++⁺ ys) ≡ map f xs ++⁺ map f ys
length-map : length (map f xs) ≡ length xs
map-cong : f ≗ g → map f ≗ map g
map-compose : map (g ∘ f) ≗ map g ∘ map f
```
* Added new proof to `Data.Maybe.Properties`
```agda
<∣>-idem : Idempotent _<∣>_
```
* Added new patterns and definitions to `Data.Nat.Base`:
```agda
pattern z<s {n} = s≤s (z≤n {n})
pattern s<s {m} {n} m<n = s≤s {m} {n} m<n
s≤s⁻¹ : suc m ≤ suc n → m ≤ n
s<s⁻¹ : suc m < suc n → m < n
pattern <′-base = ≤′-refl
pattern <′-step {n} m<′n = ≤′-step {n} m<′n
pattern ≤″-offset k = less-than-or-equal {k} refl
pattern <″-offset k = ≤″-offset k
s≤″s⁻¹ : suc m ≤″ suc n → m ≤″ n
s<″s⁻¹ : suc m <″ suc n → m <″ n
pattern 2+ n = suc (suc n)
pattern 1<2+n {n} = s<s (z<s {n})
NonTrivial : Pred ℕ 0ℓ
instance nonTrivial : NonTrivial (2+ n)
n>1⇒nonTrivial : 1 < n → NonTrivial n
nonZero⇒≢1⇒nonTrivial : .{{NonZero n}} → n ≢ 1 → NonTrivial n
recompute-nonTrivial : .{{NonTrivial n}} → NonTrivial n
nonTrivial⇒nonZero : .{{NonTrivial n}} → NonZero n
nonTrivial⇒n>1 : .{{NonTrivial n}} → 1 < n
nonTrivial⇒≢1 : .{{NonTrivial n}} → n ≢ 1
_⊔′_ : ℕ → ℕ → ℕ
_⊓′_ : ℕ → ℕ → ℕ
∣_-_∣′ : ℕ → ℕ → ℕ
_! : ℕ → ℕ
parity : ℕ → Parity
+-rawMagma : RawMagma 0ℓ 0ℓ
+-0-rawMonoid : RawMonoid 0ℓ 0ℓ
*-rawMagma : RawMagma 0ℓ 0ℓ
*-1-rawMonoid : RawMonoid 0ℓ 0ℓ
+-*-rawNearSemiring : RawNearSemiring 0ℓ 0ℓ
+-*-rawSemiring : RawSemiring 0ℓ 0ℓ
```
* Added a new proof to `Data.Nat.Binary.Properties`:
```agda
suc-injective : Injective _≡_ _≡_ suc
toℕ-inverseˡ : Inverseˡ _≡_ _≡_ toℕ fromℕ
toℕ-inverseʳ : Inverseʳ _≡_ _≡_ toℕ fromℕ
toℕ-inverseᵇ : Inverseᵇ _≡_ _≡_ toℕ fromℕ
<-asym : Asymmetric _<_
```
* Added a new pattern synonym and a new definition to `Data.Nat.Divisibility.Core`:
```agda
pattern divides-refl q = divides q refl
record _HasNonTrivialDivisorLessThan_ (m n : ℕ) : Set where
```
* Added new proofs to `Data.Nat.Divisibility`:
```agda
hasNonTrivialDivisor-≢ : .{{NonTrivial d}} → .{{NonZero n}} → d ≢ n → d ∣ n → n HasNonTrivialDivisorLessThan n
hasNonTrivialDivisor-∣ : m HasNonTrivialDivisorLessThan n → m ∣ o → o HasNonTrivialDivisorLessThan n
hasNonTrivialDivisor-≤ : m HasNonTrivialDivisorLessThan n → n ≤ o → m HasNonTrivialDivisorLessThan o
```
* Added new definitions, smart constructors and proofs to `Data.Nat.Primality`:
```agda
infix 10 _Rough_
_Rough_ : ℕ → Pred ℕ _
0-rough : 0 Rough n
1-rough : 1 Rough n
2-rough : 2 Rough n
rough⇒≤ : .{{NonTrivial n}} → m Rough n → m ≤ n
∤⇒rough-suc : m ∤ n → m Rough n → (suc m) Rough n
rough∧∣⇒rough : m Rough o → n ∣ o → m Rough n
Composite : ℕ → Set
composite-≢ : .{{NonTrivial d}} → .{{NonZero n}} → d ≢ n → d ∣ n → Composite n
composite-∣ : .{{NonZero n}} → Composite m → m ∣ n → Composite n
composite? : Decidable Composite
Irreducible : ℕ → Set
irreducible? : Decidable Irreducible
composite⇒¬prime : Composite n → ¬ Prime n
¬composite⇒prime : .{{NonTrivial n} → ¬ Composite n → Prime n
prime⇒¬composite : Prime n → ¬ Composite n
¬prime⇒composite : .{{NonTrivial n} → ¬ Prime n → Composite n
prime⇒irreducible : Prime p → Irreducible p
irreducible⇒prime : .{{NonTrivial p}} → Irreducible p → Prime p
euclidsLemma : Prime p → p ∣ m * n → p ∣ m ⊎ p ∣ n
```
* Added new proofs in `Data.Nat.Properties`:
```agda
nonZero? : Decidable NonZero
n≮0 : n ≮ 0
n+1+m≢m : n + suc m ≢ m
m*n≡0⇒m≡0 : .{{_ : NonZero n}} → m * n ≡ 0 → m ≡ 0
n>0⇒n≢0 : n > 0 → n ≢ 0
m*n≢0 : .{{_ : NonZero m}} .{{_ : NonZero n}} → NonZero (m * n)
m*n≢0⇒m≢0 : .{{NonZero (m * n)}} → NonZero m
m*n≢0⇒n≢0 : .{{NonZero (m * n)}} → NonZero n
m≢0∧n>1⇒m*n>1 : .{{_ : NonZero m}} .{{_ : NonTrivial n}} → NonTrivial (m * n)
n≢0∧m>1⇒m*n>1 : .{{_ : NonZero n}} .{{_ : NonTrivial m}} → NonTrivial (m * n)
m^n≢0 : .{{_ : NonZero m}} → NonZero (m ^ n)
m≤n⇒n∸m≤n : m ≤ n → n ∸ m ≤ n
s<s-injective : s<s p ≡ s<s q → p ≡ q
<-step : m < n → m < 1 + n
m<1+n⇒m<n∨m≡n : m < suc n → m < n ⊎ m ≡ n
pred-mono-≤ : m ≤ n → pred m ≤ pred n
pred-mono-< : .{{_ : NonZero m}} → m < n → pred m < pred n
z<′s : zero <′ suc n
s<′s : m <′ n → suc m <′ suc n
<⇒<′ : m < n → m <′ n
<′⇒< : m <′ n → m < n
≤″-proof : (le : m ≤″ n) → let less-than-or-equal {k} _ = le in m + k ≡ n
m+n≤p⇒m≤p∸n : m + n ≤ p → m ≤ p ∸ n
m≤p∸n⇒m+n≤p : n ≤ p → m ≤ p ∸ n → m + n ≤ p
1≤n! : 1 ≤ n !
_!≢0 : NonZero (n !)
_!*_!≢0 : NonZero (m ! * n !)
anyUpTo? : ∀ (P? : U.Decidable P) (v : ℕ) → Dec (∃ λ n → n < v × P n)
allUpTo? : ∀ (P? : U.Decidable P) (v : ℕ) → Dec (∀ {n} → n < v → P n)
n≤1⇒n≡0∨n≡1 : n ≤ 1 → n ≡ 0 ⊎ n ≡ 1
m^n>0 : .{{_ : NonZero m}} n → m ^ n > 0
^-monoˡ-≤ : (_^ n) Preserves _≤_ ⟶ _≤_
^-monoʳ-≤ : .{{_ : NonZero m}} → (m ^_) Preserves _≤_ ⟶ _≤_
^-monoˡ-< : .{{_ : NonZero n}} → (_^ n) Preserves _<_ ⟶ _<_
^-monoʳ-< : 1 < m → (m ^_) Preserves _<_ ⟶ _<_
n≡⌊n+n/2⌋ : n ≡ ⌊ n + n /2⌋
n≡⌈n+n/2⌉ : n ≡ ⌈ n + n /2⌉
m<n⇒m<n*o : .{{_ : NonZero o}} → m < n → m < n * o
m<n⇒m<o*n : .{{_ : NonZero o}} → m < n → m < o * n
∸-monoˡ-< : m < o → n ≤ m → m ∸ n < o ∸ n
m≤n⇒∣m-n∣≡n∸m : m ≤ n → ∣ m - n ∣ ≡ n ∸ m
⊔≡⊔′ : m ⊔ n ≡ m ⊔′ n
⊓≡⊓′ : m ⊓ n ≡ m ⊓′ n
∣-∣≡∣-∣′ : ∣ m - n ∣ ≡ ∣ m - n ∣′
nonTrivial? : Decidable NonTrivial
eq? : A ↣ ℕ → DecidableEquality A
≤-<-connex : Connex _≤_ _<_
≥->-connex : Connex _≥_ _>_
<-≤-connex : Connex _<_ _≤_
>-≥-connex : Connex _>_ _≥_
<-cmp : Trichotomous _≡_ _<_
anyUpTo? : (P? : Decidable P) → ∀ v → Dec (∃ λ n → n < v × P n)
allUpTo? : (P? : Decidable P) → ∀ v → Dec (∀ {n} → n < v → P n)
```
* Added new proofs in `Data.Nat.Combinatorics`:
```agda
[n-k]*[n-k-1]!≡[n-k]! : k < n → (n ∸ k) * (n ∸ suc k) ! ≡ (n ∸ k) !
[n-k]*d[k+1]≡[k+1]*d[k] : k < n → (n ∸ k) * ((suc k) ! * (n ∸ suc k) !) ≡ (suc k) * (k ! * (n ∸ k) !)
k![n∸k]!∣n! : k ≤ n → k ! * (n ∸ k) ! ∣ n !
nP1≡n : n P 1 ≡ n
nC1≡n : n C 1 ≡ n
nCk+nC[k+1]≡[n+1]C[k+1] : n C k + n C (suc k) ≡ suc n C suc k
```
* Added new proofs in `Data.Nat.DivMod`:
```agda
m%n≤n : .{{_ : NonZero n}} → m % n ≤ n
m*n/m!≡n/[m∸1]! : .{{_ : NonZero m}} → m * n / m ! ≡ n / (pred m) !
%-congˡ : .{{_ : NonZero o}} → m ≡ n → m % o ≡ n % o
%-congʳ : .{{_ : NonZero m}} .{{_ : NonZero n}} → m ≡ n → o % m ≡ o % n
m≤n⇒[n∸m]%m≡n%m : .{{_ : NonZero m}} → m ≤ n → (n ∸ m) % m ≡ n % m
m*n≤o⇒[o∸m*n]%n≡o%n : .{{_ : NonZero n}} → m * n ≤ o → (o ∸ m * n) % n ≡ o % n
m∣n⇒o%n%m≡o%m : .{{_ : NonZero m}} .{{_ : NonZero n}} → m ∣ n → o % n % m ≡ o % m
m<n⇒m%n≡m : .{{_ : NonZero n}} → m < n → m % n ≡ m
m*n/o*n≡m/o : .{{_ : NonZero o}} {{_ : NonZero (o * n)}} → m * n / (o * n) ≡ m / o
m<n*o⇒m/o<n : .{{_ : NonZero o}} → m < n * o → m / o < n
[m∸n]/n≡m/n∸1 : .{{_ : NonZero n}} → (m ∸ n) / n ≡ pred (m / n)
[m∸n*o]/o≡m/o∸n : .{{_ : NonZero o}} → (m ∸ n * o) / o ≡ m / o ∸ n
m/n/o≡m/[n*o] : .{{_ : NonZero n}} .{{_ : NonZero o}} .{{_ : NonZero (n * o)}} → m / n / o ≡ m / (n * o)
m%[n*o]/o≡m/o%n : .{{_ : NonZero n}} .{{_ : NonZero o}} {{_ : NonZero (n * o)}} → m % (n * o) / o ≡ m / o % n
m%n*o≡m*o%[n*o] : .{{_ : NonZero n}} {{_ : NonZero (n * o)}} → m % n * o ≡ m * o % (n * o)
[m*n+o]%[p*n]≡[m*n]%[p*n]+o : {{_ : NonZero (p * n)}} → o < n → (m * n + o) % (p * n) ≡ (m * n) % (p * n) + o
```
* Added new proofs in `Data.Nat.Divisibility`:
```agda
n∣m*n*o : n ∣ m * n * o
m*n∣⇒m∣ : m * n ∣ i → m ∣ i
m*n∣⇒n∣ : m * n ∣ i → n ∣ i
m≤n⇒m!∣n! : m ≤ n → m ! ∣ n !
m/n/o≡m/[n*o] : .{{NonZero n}} .{{NonZero o}} → n * o ∣ m → (m / n) / o ≡ m / (n * o)
```
* Added new proofs in `Data.Nat.GCD`:
```agda
gcd-assoc : Associative gcd
gcd-identityˡ : LeftIdentity 0 gcd
gcd-identityʳ : RightIdentity 0 gcd
gcd-identity : Identity 0 gcd
gcd-zeroˡ : LeftZero 1 gcd
gcd-zeroʳ : RightZero 1 gcd
gcd-zero : Zero 1 gcd
```
* Added new patterns in `Data.Nat.Reflection`:
```agda
pattern `ℕ = def (quote ℕ) []
pattern `zero = con (quote ℕ.zero) []
pattern `suc x = con (quote ℕ.suc) (x ⟨∷⟩ [])
```
* Added new functions and proofs in `Data.Nat.GeneralisedArithmetic`:
```agda
iterate : (A → A) → A → ℕ → A
iterate-is-fold : fold z s m ≡ iterate s z m
```
* Added new proofs in `Data.Parity.Properties`:
```agda
suc-homo-⁻¹ : (parity (suc n)) ⁻¹ ≡ parity n
+-homo-+ : parity (m ℕ.+ n) ≡ parity m ℙ.+ parity n
*-homo-* : parity (m ℕ.* n) ≡ parity m ℙ.* parity n
parity-isMagmaHomomorphism : IsMagmaHomomorphism ℕ.+-rawMagma ℙ.+-rawMagma parity
parity-isMonoidHomomorphism : IsMonoidHomomorphism ℕ.+-0-rawMonoid ℙ.+-0-rawMonoid parity
parity-isNearSemiringHomomorphism : IsNearSemiringHomomorphism ℕ.+-*-rawNearSemiring ℙ.+-*-rawNearSemiring parity
parity-isSemiringHomomorphism : IsSemiringHomomorphism ℕ.+-*-rawSemiring ℙ.+-*-rawSemiring parity
```
* Added new rounding functions in `Data.Rational.Base`:
```agda
floor ceiling truncate round ⌊_⌋ ⌈_⌉ [_] : ℚ → ℤ
fracPart : ℚ → ℚ
```
* Added new definitions and proofs in `Data.Rational.Properties`:
```agda
↥ᵘ-toℚᵘ : ↥ᵘ (toℚᵘ p) ≡ ↥ p
↧ᵘ-toℚᵘ : ↧ᵘ (toℚᵘ p) ≡ ↧ p
↥p≡↥q≡0⇒p≡q : ↥ p ≡ 0ℤ → ↥ q ≡ 0ℤ → p ≡ q
_≥?_ : Decidable _≥_
_>?_ : Decidable _>_
+-*-rawNearSemiring : RawNearSemiring 0ℓ 0ℓ
+-*-rawSemiring : RawSemiring 0ℓ 0ℓ
toℚᵘ-isNearSemiringHomomorphism-+-* : IsNearSemiringHomomorphism +-*-rawNearSemiring ℚᵘ.+-*-rawNearSemiring toℚᵘ
toℚᵘ-isNearSemiringMonomorphism-+-* : IsNearSemiringMonomorphism +-*-rawNearSemiring ℚᵘ.+-*-rawNearSemiring toℚᵘ
toℚᵘ-isSemiringHomomorphism-+-* : IsSemiringHomomorphism +-*-rawSemiring ℚᵘ.+-*-rawSemiring toℚᵘ
toℚᵘ-isSemiringMonomorphism-+-* : IsSemiringMonomorphism +-*-rawSemiring ℚᵘ.+-*-rawSemiring toℚᵘ
pos⇒nonZero : .{{Positive p}} → NonZero p
neg⇒nonZero : .{{Negative p}} → NonZero p
nonZero⇒1/nonZero : .{{_ : NonZero p}} → NonZero (1/ p)
<-dense : Dense _<_
<-isDenseLinearOrder : IsDenseLinearOrder _≡_ _<_
<-denseLinearOrder : DenseLinearOrder 0ℓ 0ℓ 0ℓ
```
* Added new rounding functions in `Data.Rational.Unnormalised.Base`:
```agda
floor ceiling truncate round ⌊_⌋ ⌈_⌉ [_] : ℚᵘ → ℤ
fracPart : ℚᵘ → ℚᵘ
```
* Added new definitions in `Data.Rational.Unnormalised.Properties`:
```agda
↥p≡0⇒p≃0 : ↥ p ≡ 0ℤ → p ≃ 0ℚᵘ
p≃0⇒↥p≡0 : p ≃ 0ℚᵘ → ↥ p ≡ 0ℤ
↥p≡↥q≡0⇒p≃q : ↥ p ≡ 0ℤ → ↥ q ≡ 0ℤ → p ≃ q
+-*-rawNearSemiring : RawNearSemiring 0ℓ 0ℓ
+-*-rawSemiring : RawSemiring 0ℓ 0ℓ
≰⇒≥ : _≰_ ⇒ _≥_
_≥?_ : Decidable _≥_
_>?_ : Decidable _>_
*-mono-≤-nonNeg : .{{_ : NonNegative p}} .{{_ : NonNegative r}} → p ≤ q → r ≤ s → p * r ≤ q * s
*-mono-<-nonNeg : .{{_ : NonNegative p}} .{{_ : NonNegative r}} → p < q → r < s → p * r < q * s
1/-antimono-≤-pos : .{{_ : Positive p}} .{{_ : Positive q}} → p ≤ q → 1/ q ≤ 1/ p
⊓-mono-< : _⊓_ Preserves₂ _<_ ⟶ _<_ ⟶ _<_
⊔-mono-< : _⊔_ Preserves₂ _<_ ⟶ _<_ ⟶ _<_
pos⇒nonZero : .{{_ : Positive p}} → NonZero p
neg⇒nonZero : .{{_ : Negative p}} → NonZero p
pos+pos⇒pos : .{{_ : Positive p}} .{{_ : Positive q}} → Positive (p + q)
nonNeg+nonNeg⇒nonNeg : .{{_ : NonNegative p}} .{{_ : NonNegative q}} → NonNegative (p + q)
pos*pos⇒pos : .{{_ : Positive p}} .{{_ : Positive q}} → Positive (p * q)
nonNeg*nonNeg⇒nonNeg : .{{_ : NonNegative p}} .{{_ : NonNegative q}} → NonNegative (p * q)
pos⊓pos⇒pos : .{{_ : Positive p}} .{{_ : Positive q}} → Positive (p ⊓ q)
pos⊔pos⇒pos : .{{_ : Positive p}} .{{_ : Positive q}} → Positive (p ⊔ q)
1/nonZero⇒nonZero : .{{_ : NonZero p}} → NonZero (1/ p)
0≄1 : 0ℚᵘ ≄ 1ℚᵘ
≃-≄-irreflexive : Irreflexive _≃_ _≄_
≄-symmetric : Symmetric _≄_
≄-cotransitive : Cotransitive _≄_
≄⇒invertible : p ≄ q → Invertible _≃_ 1ℚᵘ _*_ (p - q)
<-dense : Dense _<_
<-isDenseLinearOrder : IsDenseLinearOrder _≃_ _<_
+-*-isHeytingCommutativeRing : IsHeytingCommutativeRing _≃_ _≄_ _+_ _*_ -_ 0ℚᵘ 1ℚᵘ
+-*-isHeytingField : IsHeytingField _≃_ _≄_ _+_ _*_ -_ 0ℚᵘ 1ℚᵘ
<-denseLinearOrder : DenseLinearOrder 0ℓ 0ℓ 0ℓ
+-*-heytingCommutativeRing : HeytingCommutativeRing 0ℓ 0ℓ 0ℓ
+-*-heytingField : HeytingField 0ℓ 0ℓ 0ℓ
module ≃-Reasoning = SetoidReasoning ≃-setoid
```
* Added new functions to `Data.Product.Nary.NonDependent`:
```agda
zipWith : (∀ k → Projₙ as k → Projₙ bs k → Projₙ cs k) → Product n as → Product n bs → Product n cs
```
* Added new proof to `Data.Product.Properties`:
```agda
map-cong : f ≗ g → h ≗ i → map f h ≗ map g i
```
* Added new definitions to `Data.Product.Properties`:
```
Σ-≡,≡→≡ : (∃ λ (p : proj₁ p₁ ≡ proj₁ p₂) → subst B p (proj₂ p₁) ≡ proj₂ p₂) → p₁ ≡ p₂
Σ-≡,≡←≡ : p₁ ≡ p₂ → (∃ λ (p : proj₁ p₁ ≡ proj₁ p₂) → subst B p (proj₂ p₁) ≡ proj₂ p₂)
×-≡,≡→≡ : (proj₁ p₁ ≡ proj₁ p₂ × proj₂ p₁ ≡ proj₂ p₂) → p₁ ≡ p₂
×-≡,≡←≡ : p₁ ≡ p₂ → (proj₁ p₁ ≡ proj₁ p₂ × proj₂ p₁ ≡ proj₂ p₂)
```
* Added new proofs to `Data.Product.Relation.Binary.Lex.Strict`
```agda
×-respectsʳ : Transitive _≈₁_ → _<₁_ Respectsʳ _≈₁_ → _<₂_ Respectsʳ _≈₂_ → _<ₗₑₓ_ Respectsʳ _≋_
×-respectsˡ : Symmetric _≈₁_ → Transitive _≈₁_ → _<₁_ Respectsˡ _≈₁_ → _<₂_ Respectsˡ _≈₂_ → _<ₗₑₓ_ Respectsˡ _≋_
×-wellFounded' : Transitive _≈₁_ → _<₁_ Respectsʳ _≈₁_ → WellFounded _<₁_ → WellFounded _<₂_ → WellFounded _<ₗₑₓ_
```
* Added new definitions to `Data.Sign.Base`:
```agda
*-rawMagma : RawMagma 0ℓ 0ℓ
*-1-rawMonoid : RawMonoid 0ℓ 0ℓ
*-1-rawGroup : RawGroup 0ℓ 0ℓ
```
* Added new proofs to `Data.Sign.Properties`:
```agda
*-inverse : Inverse + id _*_
*-isCommutativeSemigroup : IsCommutativeSemigroup _*_
*-isCommutativeMonoid : IsCommutativeMonoid _*_ +
*-isGroup : IsGroup _*_ + id
*-isAbelianGroup : IsAbelianGroup _*_ + id
*-commutativeSemigroup : CommutativeSemigroup 0ℓ 0ℓ
*-commutativeMonoid : CommutativeMonoid 0ℓ 0ℓ
*-group : Group 0ℓ 0ℓ
*-abelianGroup : AbelianGroup 0ℓ 0ℓ
≡-isDecEquivalence : IsDecEquivalence _≡_
```
* Added new functions in `Data.String.Base`:
```agda
wordsByᵇ : (Char → Bool) → String → List String
linesByᵇ : (Char → Bool) → String → List String
```
* Added new proofs in `Data.String.Properties`:
```agda
≤-isDecTotalOrder-≈ : IsDecTotalOrder _≈_ _≤_
≤-decTotalOrder-≈ : DecTotalOrder _ _ _
```
* Added new definitions in `Data.Sum.Properties`:
```agda
swap-↔ : (A ⊎ B) ↔ (B ⊎ A)
```
* Added new proofs in `Data.Sum.Properties`:
```agda
map-assocˡ : map (map f g) h ∘ assocˡ ≗ assocˡ ∘ map f (map g h)
map-assocʳ : map f (map g h) ∘ assocʳ ≗ assocʳ ∘ map (map f g) h
```
* Made `Map` public in `Data.Tree.AVL.IndexedMap`
* Added new definitions in `Data.Vec.Base`:
```agda
truncate : m ≤ n → Vec A n → Vec A m
pad : m ≤ n → A → Vec A m → Vec A n
FoldrOp A B = A → B n → B (suc n)
FoldlOp A B = B n → A → B (suc n)
foldr′ : (A → B → B) → B → Vec A n → B
foldl′ : (B → A → B) → B → Vec A n → B
countᵇ : (A → Bool) → Vec A n → ℕ
iterate : (A → A) → A → Vec A n
diagonal : Vec (Vec A n) n → Vec A n
DiagonalBind._>>=_ : Vec A n → (A → Vec B n) → Vec B n
_ʳ++_ : Vec A m → Vec A n → Vec A (m + n)
cast : .(eq : m ≡ n) → Vec A m → Vec A n
```
* Added new instance in `Data.Vec.Effectful`:
```agda
monad : RawMonad (λ (A : Set a) → Vec A n)
```
* Added new proofs in `Data.Vec.Properties`:
```agda
padRight-refl : padRight ≤-refl a xs ≡ xs
padRight-replicate : replicate a ≡ padRight le a (replicate a)
padRight-trans : padRight (≤-trans m≤n n≤p) a xs ≡ padRight n≤p a (padRight m≤n a xs)
truncate-refl : truncate ≤-refl xs ≡ xs
truncate-trans : truncate (≤-trans m≤n n≤p) xs ≡ truncate m≤n (truncate n≤p xs)
truncate-padRight : truncate m≤n (padRight m≤n a xs) ≡ xs
map-const : map (const x) xs ≡ replicate x
map-⊛ : map f xs ⊛ map g xs ≡ map (f ˢ g) xs
map-++ : map f (xs ++ ys) ≡ map f xs ++ map f ys
map-is-foldr : map f ≗ foldr (Vec B) (λ x ys → f x ∷ ys) []
map-∷ʳ : map f (xs ∷ʳ x) ≡ (map f xs) ∷ʳ (f x)
map-reverse : map f (reverse xs) ≡ reverse (map f xs)
map-ʳ++ : map f (xs ʳ++ ys) ≡ map f xs ʳ++ map f ys
map-insert : map f (insert xs i x) ≡ insert (map f xs) i (f x)
toList-map : toList (map f xs) ≡ List.map f (toList xs)
lookup-concat : lookup (concat xss) (combine i j) ≡ lookup (lookup xss i) j
⊛-is->>= : fs ⊛ xs ≡ fs >>= flip map xs
lookup-⊛* : lookup (fs ⊛* xs) (combine i j) ≡ (lookup fs i $ lookup xs j)
++-is-foldr : xs ++ ys ≡ foldr ((Vec A) ∘ (_+ n)) _∷_ ys xs
[]≔-++-↑ʳ : (xs ++ ys) [ m ↑ʳ i ]≔ y ≡ xs ++ (ys [ i ]≔ y)
unfold-ʳ++ : xs ʳ++ ys ≡ reverse xs ++ ys
foldl-universal : (e : C zero) → ∀ {n} → Vec A n → C n) →
(∀ ... → h C g e [] ≡ e) →
(∀ ... → h C g e ∘ (x ∷_) ≗ h (C ∘ suc) g (g e x)) →
h B f e ≗ foldl B f e
foldl-fusion : h d ≡ e → (∀ ... → h (f b x) ≡ g (h b) x) → h ∘ foldl B f d ≗ foldl C g e
foldl-∷ʳ : foldl B f e (ys ∷ʳ y) ≡ f (foldl B f e ys) y
foldl-[] : foldl B f e [] ≡ e
foldl-reverse : foldl B {n} f e ∘ reverse ≗ foldr B (flip f) e
foldr-[] : foldr B f e [] ≡ e
foldr-++ : foldr B f e (xs ++ ys) ≡ foldr (B ∘ (_+ n)) f (foldr B f e ys) xs
foldr-∷ʳ : foldr B f e (ys ∷ʳ y) ≡ foldr (B ∘ suc) f (f y e) ys
foldr-ʳ++ : foldr B f e (xs ʳ++ ys) ≡ foldl (B ∘ (_+ n)) (flip f) (foldr B f e ys) xs
foldr-reverse : foldr B f e ∘ reverse ≗ foldl B (flip f) e
∷ʳ-injective : xs ∷ʳ x ≡ ys ∷ʳ y → xs ≡ ys × x ≡ y
∷ʳ-injectiveˡ : xs ∷ʳ x ≡ ys ∷ʳ y → xs ≡ ys
∷ʳ-injectiveʳ : xs ∷ʳ x ≡ ys ∷ʳ y → x ≡ y
unfold-∷ʳ : cast eq (xs ∷ʳ x) ≡ xs ++ [ x ]
init-∷ʳ : init (xs ∷ʳ x) ≡ xs
last-∷ʳ : last (xs ∷ʳ x) ≡ x
cast-∷ʳ : cast eq (xs ∷ʳ x) ≡ (cast (cong pred eq) xs) ∷ʳ x
++-∷ʳ : cast eq ((xs ++ ys) ∷ʳ z) ≡ xs ++ (ys ∷ʳ z)
∷ʳ-++ : cast eq ((xs ∷ʳ a) ++ ys) ≡ xs ++ (a ∷ ys)
reverse-∷ : reverse (x ∷ xs) ≡ reverse xs ∷ʳ x
reverse-involutive : Involutive _≡_ reverse
reverse-reverse : reverse xs ≡ ys → reverse ys ≡ xs
reverse-injective : reverse xs ≡ reverse ys → xs ≡ ys
transpose-replicate : transpose (replicate xs) ≡ map replicate xs
toList-replicate : toList (replicate {n = n} a) ≡ List.replicate n a
toList-++ : toList (xs ++ ys) ≡ toList xs List.++ toList ys
cast-is-id : cast eq xs ≡ xs
subst-is-cast : subst (Vec A) eq xs ≡ cast eq xs
cast-sym : cast eq xs ≡ ys → cast (sym eq) ys ≡ xs
cast-trans : cast eq₂ (cast eq₁ xs) ≡ cast (trans eq₁ eq₂) xs
map-cast : map f (cast eq xs) ≡ cast eq (map f xs)
lookup-cast : lookup (cast eq xs) (Fin.cast eq i) ≡ lookup xs i
lookup-cast₁ : lookup (cast eq xs) i ≡ lookup xs (Fin.cast (sym eq) i)
lookup-cast₂ : lookup xs (Fin.cast eq i) ≡ lookup (cast (sym eq) xs) i
cast-reverse : cast eq ∘ reverse ≗ reverse ∘ cast eq
cast-++ˡ : cast (cong (_+ n) eq) (xs ++ ys) ≡ cast eq xs ++ ys
cast-++ʳ : cast (cong (m +_) eq) (xs ++ ys) ≡ xs ++ cast eq ys
iterate-id : iterate id x n ≡ replicate x
take-iterate : take n (iterate f x (n + m)) ≡ iterate f x n
drop-iterate : drop n (iterate f x n) ≡ []
lookup-iterate : lookup (iterate f x n) i ≡ ℕ.iterate f x (toℕ i)
toList-iterate : toList (iterate f x n) ≡ List.iterate f x n
zipwith-++ : zipWith f (xs ++ ys) (xs' ++ ys') ≡ zipWith f xs xs' ++ zipWith f ys ys'
++-assoc : cast eq ((xs ++ ys) ++ zs) ≡ xs ++ (ys ++ zs)
++-identityʳ : cast eq (xs ++ []) ≡ xs
init-reverse : init ∘ reverse ≗ reverse ∘ tail
last-reverse : last ∘ reverse ≗ head
reverse-++ : cast eq (reverse (xs ++ ys)) ≡ reverse ys ++ reverse xs
toList-cast : toList (cast eq xs) ≡ toList xs
cast-fromList : cast _ (fromList xs) ≡ fromList ys
fromList-map : cast _ (fromList (List.map f xs)) ≡ map f (fromList xs)
fromList-++ : cast _ (fromList (xs List.++ ys)) ≡ fromList xs ++ fromList ys
fromList-reverse : cast (Listₚ.length-reverse xs) (fromList (List.reverse xs)) ≡ reverse (fromList xs)
∷-ʳ++ : cast eq ((a ∷ xs) ʳ++ ys) ≡ xs ʳ++ (a ∷ ys)
++-ʳ++ : cast eq ((xs ++ ys) ʳ++ zs) ≡ ys ʳ++ (xs ʳ++ zs)
ʳ++-ʳ++ : cast eq ((xs ʳ++ ys) ʳ++ zs) ≡ ys ʳ++ (xs ++ zs)
length-toList : List.length (toList xs) ≡ length xs
toList-insertAt : toList (insertAt xs i v) ≡ List.insertAt (toList xs) (Fin.cast (cong suc (sym (length-toList xs))) i) v
truncate≡take : .(eq : n ≡ m + o) → truncate m≤n xs ≡ take m (cast eq xs)
take≡truncate : take m xs ≡ truncate (m≤m+n m n) xs
lookup-truncate : lookup (truncate m≤n xs) i ≡ lookup xs (Fin.inject≤ i m≤n)
lookup-take-inject≤ : lookup (take m xs) i ≡ lookup xs (Fin.inject≤ i (m≤m+n m n))
```
* Added new proofs in `Data.Vec.Membership.Propositional.Properties`:
```agda
index-∈-fromList⁺ : Any.index (∈-fromList⁺ v∈xs) ≡ indexₗ v∈xs
```
* Added new isomorphisms to `Data.Unit.Polymorphic.Properties`:
```agda
⊤↔⊤* : ⊤ ↔ ⊤*
```
* Added new proofs in `Data.Vec.Functional.Properties`:
```
map-updateAt : f ∘ g ≗ h ∘ f → map f (updateAt i g xs) ≗ updateAt i h (map f xs)
```
* Added new proofs in `Data.Vec.Relation.Binary.Lex.Strict`:
```agda
xs≮[] : ¬ xs < []
<-respectsˡ : IsPartialEquivalence _≈_ → _≺_ Respectsˡ _≈_ → _<_ Respectsˡ _≋_
<-respectsʳ : IsPartialEquivalence _≈_ → _≺_ Respectsʳ _≈_ → _<_ _Respectsʳ _≋_
<-wellFounded : Transitive _≈_ → _≺_ Respectsʳ _≈_ → WellFounded _≺_ → WellFounded _<_
```
* Added new function to `Data.Vec.Relation.Binary.Pointwise.Inductive`
```agda
cong-[_]≔ : Pointwise _∼_ xs ys → Pointwise _∼_ (xs [ i ]≔ p) (ys [ i ]≔ p)
```
* Added new function to `Data.Vec.Relation.Binary.Equality.Setoid`
```agda
map-[]≔ : map f (xs [ i ]≔ p) ≋ map f xs [ i ]≔ f p
```
* Added new functions in `Data.Vec.Relation.Unary.Any`:
```
lookup : Any P xs → A
```
* Added new functions in `Data.Vec.Relation.Unary.All`:
```
decide : Π[ P ∪ Q ] → Π[ All P ∪ Any Q ]
lookupAny : All P xs → (i : Any Q xs) → (P ∩ Q) (Any.lookup i)
lookupWith : ∀[ P ⇒ Q ⇒ R ] → All P xs → (i : Any Q xs) → R (Any.lookup i)
lookup : All P xs → (∀ {x} → x ∈ₚ xs → P x)
lookupₛ : P Respects _≈_ → All P xs → (∀ {x} → x ∈ xs → P x)
```
* Added vector associativity proof to `Data.Vec.Relation.Binary.Equality.Setoid`:
```
++-assoc : (xs ++ ys) ++ zs ≋ xs ++ (ys ++ zs)
```
* Added new isomorphisms to `Data.Vec.N-ary`:
```agda
Vec↔N-ary : ∀ n → (Vec A n → B) ↔ N-ary n A B
```
* Added new isomorphisms to `Data.Vec.Recursive`:
```agda
lift↔ : A ↔ B → A ^ n ↔ B ^ n
Fin[m^n]↔Fin[m]^n : Fin (m ^ n) ↔ Fin m Vec.^ n
```
* Added new functions in `Effect.Monad.State`:
```
runState : State s a → s → a × s
evalState : State s a → s → a
execState : State s a → s → s
```
* Added a non-dependent version of `flip` in `Function.Base`:
```agda
flip′ : (A → B → C) → (B → A → C)
```
* Added new proofs and definitions in `Function.Bundles`:
```agda
LeftInverse.isSplitSurjection : LeftInverse → IsSplitSurjection to
LeftInverse.surjection : LeftInverse → Surjection
SplitSurjection = LeftInverse
_⟨$⟩_ = Func.to
```
* Added new proofs to `Function.Properties.Inverse`:
```agda
↔-refl : Reflexive _↔_
↔-sym : Symmetric _↔_
↔-trans : Transitive _↔_
↔⇒↣ : A ↔ B → A ↣ B
↔-fun : A ↔ B → C ↔ D → (A → C) ↔ (B → D)
Inverse⇒Injection : Inverse S T → Injection S T
```
* Added new proofs in `Function.Construct.Symmetry`:
```
bijective : Bijective ≈₁ ≈₂ f → Symmetric ≈₂ → Transitive ≈₂ → Congruent ≈₁ ≈₂ f → Bijective ≈₂ ≈₁ f⁻¹
isBijection : IsBijection ≈₁ ≈₂ f → Congruent ≈₂ ≈₁ f⁻¹ → IsBijection ≈₂ ≈₁ f⁻¹
isBijection-≡ : IsBijection ≈₁ _≡_ f → IsBijection _≡_ ≈₁ f⁻¹
bijection : Bijection R S → Congruent IB.Eq₂._≈_ IB.Eq₁._≈_ f⁻¹ → Bijection S R
bijection-≡ : Bijection R (setoid B) → Bijection (setoid B) R
sym-⤖ : A ⤖ B → B ⤖ A
```
* Added new operations in `Function.Strict`:
```
_!|>_ : (a : A) → (∀ a → B a) → B a
_!|>′_ : A → (A → B) → B
```
* Added new proof and record in `Function.Structures`:
```agda
record IsSplitSurjection (f : A → B) : Set (a ⊔ b ⊔ ℓ₁ ⊔ ℓ₂)
```
* Added new definition to the `Surjection` module in `Function.Related.Surjection`:
```
f⁻ = proj₁ ∘ surjective
```
* Added new proof to `Induction.WellFounded`
```agda
Acc-resp-flip-≈ : _<_ Respectsʳ (flip _≈_) → (Acc _<_) Respects _≈_
acc⇒asym : Acc _<_ x → x < y → ¬ (y < x)
wf⇒asym : WellFounded _<_ → Asymmetric _<_
wf⇒irrefl : _<_ Respects₂ _≈_ → Symmetric _≈_ → WellFounded _<_ → Irreflexive _≈_ _<_
```
* Added new operations in `IO`:
```
Colist.forM : Colist A → (A → IO B) → IO (Colist B)
Colist.forM′ : Colist A → (A → IO B) → IO ⊤
List.forM : List A → (A → IO B) → IO (List B)
List.forM′ : List A → (A → IO B) → IO ⊤
```
* Added new operations in `IO.Base`:
```
lift! : IO A → IO (Lift b A)
_<$_ : B → IO A → IO B
_=<<_ : (A → IO B) → IO A → IO B
_<<_ : IO B → IO A → IO B
lift′ : Prim.IO ⊤ → IO {a} ⊤
when : Bool → IO ⊤ → IO ⊤
unless : Bool → IO ⊤ → IO ⊤
whenJust : Maybe A → (A → IO ⊤) → IO ⊤
untilJust : IO (Maybe A) → IO A
untilRight : (A → IO (A ⊎ B)) → A → IO B
```
* Added new functions in `Reflection.AST.Term`:
```
stripPis : Term → List (String × Arg Type) × Term
prependLams : List (String × Visibility) → Term → Term
prependHLams : List String → Term → Term
prependVLams : List String → Term → Term
```
* Added new types and operations to `Reflection.TCM`:
```
Blocker : Set
blockerMeta : Meta → Blocker
blockerAny : List Blocker → Blocker
blockerAll : List Blocker → Blocker
blockTC : Blocker → TC A
```
* Added new operations in `Relation.Binary.Construct.Closure.Equivalence`:
```
fold : IsEquivalence _∼_ → _⟶_ ⇒ _∼_ → EqClosure _⟶_ ⇒ _∼_
gfold : IsEquivalence _∼_ → _⟶_ =[ f ]⇒ _∼_ → EqClosure _⟶_ =[ f ]⇒ _∼_
return : _⟶_ ⇒ EqClosure _⟶_
join : EqClosure (EqClosure _⟶_) ⇒ EqClosure _⟶_
_⋆ : _⟶₁_ ⇒ EqClosure _⟶₂_ → EqClosure _⟶₁_ ⇒ EqClosure _⟶₂_
```
* Added new operations in `Relation.Binary.Construct.Closure.Symmetric`:
```
fold : Symmetric _∼_ → _⟶_ ⇒ _∼_ → SymClosure _⟶_ ⇒ _∼_
gfold : Symmetric _∼_ → _⟶_ =[ f ]⇒ _∼_ → SymClosure _⟶_ =[ f ]⇒ _∼_
return : _⟶_ ⇒ SymClosure _⟶_
join : SymClosure (SymClosure _⟶_) ⇒ SymClosure _⟶_
_⋆ : _⟶₁_ ⇒ SymClosure _⟶₂_ → SymClosure _⟶₁_ ⇒ SymClosure _⟶₂_
```
* Added new proofs to `Relation.Binary.Lattice.Properties.{Join,Meet}Semilattice`:
```agda
isPosemigroup : IsPosemigroup _≈_ _≤_ _∨_
posemigroup : Posemigroup c ℓ₁ ℓ₂
≈-dec⇒≤-dec : Decidable _≈_ → Decidable _≤_
≈-dec⇒isDecPartialOrder : Decidable _≈_ → IsDecPartialOrder _≈_ _≤_
```
* Added new proofs to `Relation.Binary.Lattice.Properties.Bounded{Join,Meet}Semilattice`:
```agda
isCommutativePomonoid : IsCommutativePomonoid _≈_ _≤_ _∨_ ⊥
commutativePomonoid : CommutativePomonoid c ℓ₁ ℓ₂
```
* Added new proofs to `Relation.Binary.Properties.Poset`:
```agda
≤-dec⇒≈-dec : Decidable _≤_ → Decidable _≈_
≤-dec⇒isDecPartialOrder : Decidable _≤_ → IsDecPartialOrder _≈_ _≤_
```
* Added new proofs in `Relation.Binary.Properties.StrictPartialOrder`:
```agda
>-strictPartialOrder : StrictPartialOrder s₁ s₂ s₃
```
* Added new proofs in `Relation.Binary.PropositionalEquality.Properties`:
```
subst-application′ : subst Q eq (f x p) ≡ f y (subst P eq p)
sym-cong : sym (cong f p) ≡ cong f (sym p)
```
* Added new proofs in `Relation.Binary.HeterogeneousEquality`:
```
subst₂-removable : subst₂ _∼_ eq₁ eq₂ p ≅ p
```
* Added new definitions in `Relation.Unary`:
```
_≐_ : Pred A ℓ₁ → Pred A ℓ₂ → Set _
_≐′_ : Pred A ℓ₁ → Pred A ℓ₂ → Set _
_∖_ : Pred A ℓ₁ → Pred A ℓ₂ → Pred A _
```
* Added new proofs in `Relation.Unary.Properties`:
```
⊆-reflexive : _≐_ ⇒ _⊆_
⊆-antisym : Antisymmetric _≐_ _⊆_
⊆-min : Min _⊆_ ∅
⊆-max : Max _⊆_ U
⊂⇒⊆ : _⊂_ ⇒ _⊆_
⊂-trans : Trans _⊂_ _⊂_ _⊂_
⊂-⊆-trans : Trans _⊂_ _⊆_ _⊂_
⊆-⊂-trans : Trans _⊆_ _⊂_ _⊂_
⊂-respʳ-≐ : _⊂_ Respectsʳ _≐_
⊂-respˡ-≐ : _⊂_ Respectsˡ _≐_
⊂-resp-≐ : _⊂_ Respects₂ _≐_
⊂-irrefl : Irreflexive _≐_ _⊂_
⊂-antisym : Antisymmetric _≐_ _⊂_
∅-⊆′ : (P : Pred A ℓ) → ∅ ⊆′ P
⊆′-U : (P : Pred A ℓ) → P ⊆′ U
⊆′-refl : Reflexive {A = Pred A ℓ} _⊆′_
⊆′-reflexive : _≐′_ ⇒ _⊆′_
⊆′-trans : Trans _⊆′_ _⊆′_ _⊆′_
⊆′-antisym : Antisymmetric _≐′_ _⊆′_
⊆′-min : Min _⊆′_ ∅
⊆′-max : Max _⊆′_ U
⊂′-trans : Trans _⊂′_ _⊂′_ _⊂′_
⊂′-⊆′-trans : Trans _⊂′_ _⊆′_ _⊂′_
⊆′-⊂′-trans : Trans _⊆′_ _⊂′_ _⊂′_
⊂′-respʳ-≐′ : _⊂′_ Respectsʳ _≐′_
⊂′-respˡ-≐′ : _⊂′_ Respectsˡ _≐′_
⊂′-resp-≐′ : _⊂′_ Respects₂ _≐′_
⊂′-irrefl : Irreflexive _≐′_ _⊂′_
⊂′-antisym : Antisymmetric _≐′_ _⊂′_
⊂′⇒⊆′ : _⊂′_ ⇒ _⊆′_
⊆⇒⊆′ : _⊆_ ⇒ _⊆′_
⊆′⇒⊆ : _⊆′_ ⇒ _⊆_
⊂⇒⊂′ : _⊂_ ⇒ _⊂′_
⊂′⇒⊂ : _⊂′_ ⇒ _⊂_
≐-refl : Reflexive _≐_
≐-sym : Sym _≐_ _≐_
≐-trans : Trans _≐_ _≐_ _≐_
≐′-refl : Reflexive _≐′_
≐′-sym : Sym _≐′_ _≐′_
≐′-trans : Trans _≐′_ _≐′_ _≐′_
≐⇒≐′ : _≐_ ⇒ _≐′_
≐′⇒≐ : _≐′_ ⇒ _≐_
U-irrelevant : Irrelevant U
∁-irrelevant : (P : Pred A ℓ) → Irrelevant (∁ P)
```
* Generalised proofs in `Relation.Unary.Properties`:
```
⊆-trans : Trans _⊆_ _⊆_ _⊆_
```
* Added new proofs in `Relation.Binary.Properties.Setoid`:
```
≈-isPreorder : IsPreorder _≈_ _≈_
≈-isPartialOrder : IsPartialOrder _≈_ _≈_
≈-preorder : Preorder a ℓ ℓ
≈-poset : Poset a ℓ ℓ
```
* Added new definitions in `Relation.Binary.Definitions`:
```
RightTrans R S = Trans R S R
LeftTrans S R = Trans S R R
Dense _<_ = x < y → ∃[ z ] x < z × z < y
Cotransitive _#_ = x # y → ∀ z → (x # z) ⊎ (z # y)
Tight _≈_ _#_ = (¬ x # y → x ≈ y) × (x ≈ y → ¬ x # y)
Monotonic₁ _≤_ _⊑_ f = f Preserves _≤_ ⟶ _⊑_
Antitonic₁ _≤_ _⊑_ f = f Preserves (flip _≤_) ⟶ _⊑_
Monotonic₂ _≤_ _⊑_ _≼_ ∙ = ∙ Preserves₂ _≤_ ⟶ _⊑_ ⟶ _≼_
MonotonicAntitonic _≤_ _⊑_ _≼_ ∙ = ∙ Preserves₂ _≤_ ⟶ (flip _⊑_) ⟶ _≼_
AntitonicMonotonic _≤_ _⊑_ _≼_ ∙ = ∙ Preserves₂ (flip _≤_) ⟶ _⊑_ ⟶ _≼_
Antitonic₂ _≤_ _⊑_ _≼_ ∙ = ∙ Preserves₂ (flip _≤_) ⟶ (flip _⊑_) ⟶ _≼_
Adjoint _≤_ _⊑_ f g = (f x ⊑ y → x ≤ g y) × (x ≤ g y → f x ⊑ y)
```
* Added new definitions in `Relation.Binary.Bundles`:
```
record DenseLinearOrder c ℓ₁ ℓ₂ : Set (suc (c ⊔ ℓ₁ ⊔ ℓ₂)) where
record ApartnessRelation c ℓ₁ ℓ₂ : Set (suc (c ⊔ ℓ₁ ⊔ ℓ₂)) where
```
* Added new definitions in `Relation.Binary.Structures`:
```
record IsDenseLinearOrder (_<_ : Rel A ℓ₂) : Set (a ⊔ ℓ ⊔ ℓ₂) where
record IsApartnessRelation (_#_ : Rel A ℓ₂) : Set (a ⊔ ℓ ⊔ ℓ₂) where
```
* Added new proofs to `Relation.Binary.Consequences`:
```
sym⇒¬-sym : Symmetric _∼_ → Symmetric (¬_ ∘₂ _∼_)
cotrans⇒¬-trans : Cotransitive _∼_ → Transitive (¬_ ∘₂ _∼_)
irrefl⇒¬-refl : Reflexive _≈_ → Irreflexive _≈_ _∼_ → Reflexive (¬_ ∘₂ _∼_)
mono₂⇒cong₂ : Symmetric ≈₁ → ≈₁ ⇒ ≤₁ → Antisymmetric ≈₂ ≤₂ → ∀ {f} →
f Preserves₂ ≤₁ ⟶ ≤₁ ⟶ ≤₂ →
f Preserves₂ ≈₁ ⟶ ≈₁ ⟶ ≈₂
```
* Added new proofs to `Relation.Binary.Construct.Closure.Transitive`:
```
accessible⁻ : Acc _∼⁺_ x → Acc _∼_ x
wellFounded⁻ : WellFounded _∼⁺_ → WellFounded _∼_
accessible : Acc _∼_ x → Acc _∼⁺_ x
```
* Added new operations in `Relation.Binary.PropositionalEquality.Properties`:
```
J : (B : (y : A) → x ≡ y → Set b) (p : x ≡ y) → B x refl → B y p
dcong : (p : x ≡ y) → subst B p (f x) ≡ f y
dcong₂ : (p : x₁ ≡ x₂) → subst B p y₁ ≡ y₂ → f x₁ y₁ ≡ f x₂ y₂
dsubst₂ : (p : x₁ ≡ x₂) → subst B p y₁ ≡ y₂ → C x₁ y₁ → C x₂ y₂
ddcong₂ : (p : x₁ ≡ x₂) (q : subst B p y₁ ≡ y₂) → dsubst₂ C p q (f x₁ y₁) ≡ f x₂ y₂
isPartialOrder : IsPartialOrder _≡_ _≡_
poset : Set a → Poset _ _ _
```
* Added new proof in `Relation.Nullary.Reflects`:
```agda
T-reflects : Reflects (T b) b
T-reflects-elim : Reflects (T a) b → b ≡ a
```
* Added new operations in `System.Exit`:
```
isSuccess : ExitCode → Bool
isFailure : ExitCode → Bool
```
NonZero/Positive/Negative changes
---------------------------------
This is a full list of proofs that have changed form to use irrelevant instance arguments:
* In `Data.Nat.Base`:
```
≢-nonZero⁻¹ : ∀ {n} → .(NonZero n) → n ≢ 0
>-nonZero⁻¹ : ∀ {n} → .(NonZero n) → n > 0
```
* In `Data.Nat.Properties`:
```
*-cancelʳ-≡ : ∀ m n {o} → m * suc o ≡ n * suc o → m ≡ n
*-cancelˡ-≡ : ∀ {m n} o → suc o * m ≡ suc o * n → m ≡ n
*-cancelʳ-≤ : ∀ m n o → m * suc o ≤ n * suc o → m ≤ n
*-cancelˡ-≤ : ∀ {m n} o → suc o * m ≤ suc o * n → m ≤ n
*-monoˡ-< : ∀ n → (_* suc n) Preserves _<_ ⟶ _<_
*-monoʳ-< : ∀ n → (suc n *_) Preserves _<_ ⟶ _<_
m≤m*n : ∀ m {n} → 0 < n → m ≤ m * n
m≤n*m : ∀ m {n} → 0 < n → m ≤ n * m
m<m*n : ∀ {m n} → 0 < m → 1 < n → m < m * n
suc[pred[n]]≡n : ∀ {n} → n ≢ 0 → suc (pred n) ≡ n
```
* In `Data.Nat.Coprimality`:
```
¬0-coprimeTo-2+ : ∀ {n} → ¬ Coprime 0 (2 + n)
Bézout-coprime : ∀ {i j d} → Bézout.Identity (suc d) (i * suc d) (j * suc d) → Coprime i j
prime⇒coprime : ∀ m → Prime m → ∀ n → 0 < n → n < m → Coprime m n
```
* In `Data.Nat.Divisibility`
```agda
m%n≡0⇒n∣m : ∀ m n → m % suc n ≡ 0 → suc n ∣ m
n∣m⇒m%n≡0 : ∀ m n → suc n ∣ m → m % suc n ≡ 0
m%n≡0⇔n∣m : ∀ m n → m % suc n ≡ 0 ⇔ suc n ∣ m
∣⇒≤ : ∀ {m n} → m ∣ suc n → m ≤ suc n
>⇒∤ : ∀ {m n} → m > suc n → m ∤ suc n
*-cancelˡ-∣ : ∀ {i j} k → suc k * i ∣ suc k * j → i ∣ j
```
* In `Data.Nat.DivMod`:
```
m≡m%n+[m/n]*n : ∀ m n → m ≡ m % suc n + (m / suc n) * suc n
m%n≡m∸m/n*n : ∀ m n → m % suc n ≡ m ∸ (m / suc n) * suc n
n%n≡0 : ∀ n → suc n % suc n ≡ 0
m%n%n≡m%n : ∀ m n → m % suc n % suc n ≡ m % suc n
[m+n]%n≡m%n : ∀ m n → (m + suc n) % suc n ≡ m % suc n
[m+kn]%n≡m%n : ∀ m k n → (m + k * (suc n)) % suc n ≡ m % suc n
m*n%n≡0 : ∀ m n → (m * suc n) % suc n ≡ 0
m%n<n : ∀ m n → m % suc n < suc n
m%n≤m : ∀ m n → m % suc n ≤ m
m≤n⇒m%n≡m : ∀ {m n} → m ≤ n → m % suc n ≡ m
m/n<m : ∀ m n {≢0} → m ≥ 1 → n ≥ 2 → (m / n) {≢0} < m
```
* In `Data.Nat.GCD`
```
GCD-* : ∀ {m n d c} → GCD (m * suc c) (n * suc c) (d * suc c) → GCD m n d
gcd[m,n]≤n : ∀ m n → gcd m (suc n) ≤ suc n
```
* In `Data.Integer.Properties`:
```
positive⁻¹ : ∀ {i} → Positive i → i > 0ℤ
negative⁻¹ : ∀ {i} → Negative i → i < 0ℤ
nonPositive⁻¹ : ∀ {i} → NonPositive i → i ≤ 0ℤ
nonNegative⁻¹ : ∀ {i} → NonNegative i → i ≥ 0ℤ
negative<positive : ∀ {i j} → Negative i → Positive j → i < j
sign-◃ : ∀ s n → sign (s ◃ suc n) ≡ s
sign-cong : ∀ {s₁ s₂ n₁ n₂} → s₁ ◃ suc n₁ ≡ s₂ ◃ suc n₂ → s₁ ≡ s₂
-◃<+◃ : ∀ m n → Sign.- ◃ (suc m) < Sign.+ ◃ n
m⊖1+n<m : ∀ m n → m ⊖ suc n < + m
*-cancelʳ-≡ : ∀ i j k → k ≢ + 0 → i * k ≡ j * k → i ≡ j
*-cancelˡ-≡ : ∀ i j k → i ≢ + 0 → i * j ≡ i * k → j ≡ k
*-cancelʳ-≤-pos : ∀ m n o → m * + suc o ≤ n * + suc o → m ≤ n
≤-steps : ∀ n → i ≤ j → i ≤ + n + j
≤-steps-neg : ∀ n → i ≤ j → i - + n ≤ j
n≤m+n : ∀ n → i ≤ + n + i
m≤m+n : ∀ n → i ≤ i + + n
m-n≤m : ∀ i n → i - + n ≤ i
*-cancelʳ-≤-pos : ∀ m n o → m * + suc o ≤ n * + suc o → m ≤ n
*-cancelˡ-≤-pos : ∀ m j k → + suc m * j ≤ + suc m * k → j ≤ k
*-cancelˡ-≤-neg : ∀ m {j k} → -[1+ m ] * j ≤ -[1+ m ] * k → j ≥ k
*-cancelʳ-≤-neg : ∀ {n o} m → n * -[1+ m ] ≤ o * -[1+ m ] → n ≥ o
*-cancelˡ-<-nonNeg : ∀ n → + n * i < + n * j → i < j
*-cancelʳ-<-nonNeg : ∀ n → i * + n < j * + n → i < j
*-monoʳ-≤-nonNeg : ∀ n → (_* + n) Preserves _≤_ ⟶ _≤_
*-monoˡ-≤-nonNeg : ∀ n → (+ n *_) Preserves _≤_ ⟶ _≤_
*-monoˡ-≤-nonPos : ∀ i → NonPositive i → (i *_) Preserves _≤_ ⟶ _≥_
*-monoʳ-≤-nonPos : ∀ i → NonPositive i → (_* i) Preserves _≤_ ⟶ _≥_
*-monoˡ-<-pos : ∀ n → (+[1+ n ] *_) Preserves _<_ ⟶ _<_
*-monoʳ-<-pos : ∀ n → (_* +[1+ n ]) Preserves _<_ ⟶ _<_
*-monoˡ-<-neg : ∀ n → (-[1+ n ] *_) Preserves _<_ ⟶ _>_
*-monoʳ-<-neg : ∀ n → (_* -[1+ n ]) Preserves _<_ ⟶ _>_
*-cancelˡ-<-nonPos : ∀ n → NonPositive n → n * i < n * j → i > j
*-cancelʳ-<-nonPos : ∀ n → NonPositive n → i * n < j * n → i > j
*-distribˡ-⊓-nonNeg : ∀ m j k → + m * (j ⊓ k) ≡ (+ m * j) ⊓ (+ m * k)
*-distribʳ-⊓-nonNeg : ∀ m j k → (j ⊓ k) * + m ≡ (j * + m) ⊓ (k * + m)
*-distribˡ-⊓-nonPos : ∀ i → NonPositive i → ∀ j k → i * (j ⊓ k) ≡ (i * j) ⊔ (i * k)
*-distribʳ-⊓-nonPos : ∀ i → NonPositive i → ∀ j k → (j ⊓ k) * i ≡ (j * i) ⊔ (k * i)
*-distribˡ-⊔-nonNeg : ∀ m j k → + m * (j ⊔ k) ≡ (+ m * j) ⊔ (+ m * k)
*-distribʳ-⊔-nonNeg : ∀ m j k → (j ⊔ k) * + m ≡ (j * + m) ⊔ (k * + m)
*-distribˡ-⊔-nonPos : ∀ i → NonPositive i → ∀ j k → i * (j ⊔ k) ≡ (i * j) ⊓ (i * k)
*-distribʳ-⊔-nonPos : ∀ i → NonPositive i → ∀ j k → (j ⊔ k) * i ≡ (j * i) ⊓ (k * i)
```
* In `Data.Integer.Divisibility`:
```
*-cancelˡ-∣ : ∀ k {i j} → k ≢ + 0 → k * i ∣ k * j → i ∣ j
*-cancelʳ-∣ : ∀ k {i j} → k ≢ + 0 → i * k ∣ j * k → i ∣ j
```
* In `Data.Integer.Divisibility.Signed`:
```
*-cancelˡ-∣ : ∀ k {i j} → k ≢ + 0 → k * i ∣ k * j → i ∣ j
*-cancelʳ-∣ : ∀ k {i j} → k ≢ + 0 → i * k ∣ j * k → i ∣ j
```
* In `Data.Rational.Unnormalised.Properties`:
```agda
positive⁻¹ : ∀ {q} → .(Positive q) → q > 0ℚᵘ
nonNegative⁻¹ : ∀ {q} → .(NonNegative q) → q ≥ 0ℚᵘ
negative⁻¹ : ∀ {q} → .(Negative q) → q < 0ℚᵘ
nonPositive⁻¹ : ∀ {q} → .(NonPositive q) → q ≤ 0ℚᵘ
positive⇒nonNegative : ∀ {p} → Positive p → NonNegative p
negative⇒nonPositive : ∀ {p} → Negative p → NonPositive p
negative<positive : ∀ {p q} → .(Negative p) → .(Positive q) → p < q
nonNeg∧nonPos⇒0 : ∀ {p} → .(NonNegative p) → .(NonPositive p) → p ≃ 0ℚᵘ
p≤p+q : ∀ {p q} → NonNegative q → p ≤ p + q
p≤q+p : ∀ {p} → NonNegative p → ∀ {q} → q ≤ p + q
*-cancelʳ-≤-pos : ∀ {r} → Positive r → ∀ {p q} → p * r ≤ q * r → p ≤ q
*-cancelˡ-≤-pos : ∀ {r} → Positive r → ∀ {p q} → r * p ≤ r * q → p ≤ q
*-cancelʳ-≤-neg : ∀ r → Negative r → ∀ {p q} → p * r ≤ q * r → q ≤ p
*-cancelˡ-≤-neg : ∀ r → Negative r → ∀ {p q} → r * p ≤ r * q → q ≤ p
*-cancelˡ-<-nonNeg : ∀ {r} → NonNegative r → ∀ {p q} → r * p < r * q → p < q
*-cancelʳ-<-nonNeg : ∀ {r} → NonNegative r → ∀ {p q} → p * r < q * r → p < q
*-cancelˡ-<-nonPos : ∀ r → NonPositive r → ∀ {p q} → r * p < r * q → q < p
*-cancelʳ-<-nonPos : ∀ r → NonPositive r → ∀ {p q} → p * r < q * r → q < p
*-monoˡ-≤-nonNeg : ∀ {r} → NonNegative r → (_* r) Preserves _≤_ ⟶ _≤_
*-monoʳ-≤-nonNeg : ∀ {r} → NonNegative r → (r *_) Preserves _≤_ ⟶ _≤_
*-monoˡ-≤-nonPos : ∀ r → NonPositive r → (_* r) Preserves _≤_ ⟶ _≥_
*-monoʳ-≤-nonPos : ∀ r → NonPositive r → (r *_) Preserves _≤_ ⟶ _≥_
*-monoˡ-<-pos : ∀ {r} → Positive r → (_* r) Preserves _<_ ⟶ _<_
*-monoʳ-<-pos : ∀ {r} → Positive r → (r *_) Preserves _<_ ⟶ _<_
*-monoˡ-<-neg : ∀ r → Negative r → (_* r) Preserves _<_ ⟶ _>_
*-monoʳ-<-neg : ∀ r → Negative r → (r *_) Preserves _<_ ⟶ _>_
pos⇒1/pos : ∀ p (p>0 : Positive p) → Positive ((1/ p) {{pos⇒≢0 p p>0}})
neg⇒1/neg : ∀ p (p<0 : Negative p) → Negative ((1/ p) {{neg⇒≢0 p p<0}})
*-distribʳ-⊓-nonNeg : ∀ p → NonNegative p → ∀ q r → (q ⊓ r) * p ≃ (q * p) ⊓ (r * p)
*-distribˡ-⊓-nonNeg : ∀ p → NonNegative p → ∀ q r → p * (q ⊓ r) ≃ (p * q) ⊓ (p * r)
*-distribˡ-⊔-nonNeg : ∀ p → NonNegative p → ∀ q r → p * (q ⊔ r) ≃ (p * q) ⊔ (p * r)
*-distribʳ-⊔-nonNeg : ∀ p → NonNegative p → ∀ q r → (q ⊔ r) * p ≃ (q * p) ⊔ (r * p)
*-distribˡ-⊔-nonPos : ∀ p → NonPositive p → ∀ q r → p * (q ⊔ r) ≃ (p * q) ⊓ (p * r)
*-distribʳ-⊔-nonPos : ∀ p → NonPositive p → ∀ q r → (q ⊔ r) * p ≃ (q * p) ⊓ (r * p)
*-distribˡ-⊓-nonPos : ∀ p → NonPositive p → ∀ q r → p * (q ⊓ r) ≃ (p * q) ⊔ (p * r)
*-distribʳ-⊓-nonPos : ∀ p → NonPositive p → ∀ q r → (q ⊓ r) * p ≃ (q * p) ⊔ (r * p)
```
* In `Data.Rational.Properties`:
```
positive⁻¹ : Positive p → p > 0ℚ
nonNegative⁻¹ : NonNegative p → p ≥ 0ℚ
negative⁻¹ : Negative p → p < 0ℚ
nonPositive⁻¹ : NonPositive p → p ≤ 0ℚ
negative<positive : Negative p → Positive q → p < q
nonNeg≢neg : ∀ p q → NonNegative p → Negative q → p ≢ q
pos⇒nonNeg : ∀ p → Positive p → NonNegative p
neg⇒nonPos : ∀ p → Negative p → NonPositive p
nonNeg∧nonZero⇒pos : ∀ p → NonNegative p → NonZero p → Positive p
*-cancelʳ-≤-pos : ∀ r → Positive r → ∀ {p q} → p * r ≤ q * r → p ≤ q
*-cancelˡ-≤-pos : ∀ r → Positive r → ∀ {p q} → r * p ≤ r * q → p ≤ q
*-cancelʳ-≤-neg : ∀ r → Negative r → ∀ {p q} → p * r ≤ q * r → p ≥ q
*-cancelˡ-≤-neg : ∀ r → Negative r → ∀ {p q} → r * p ≤ r * q → p ≥ q
*-cancelˡ-<-nonNeg : ∀ r → NonNegative r → ∀ {p q} → r * p < r * q → p < q
*-cancelʳ-<-nonNeg : ∀ r → NonNegative r → ∀ {p q} → p * r < q * r → p < q
*-cancelˡ-<-nonPos : ∀ r → NonPositive r → ∀ {p q} → r * p < r * q → p > q
*-cancelʳ-<-nonPos : ∀ r → NonPositive r → ∀ {p q} → p * r < q * r → p > q
*-monoʳ-≤-nonNeg : ∀ r → NonNegative r → (_* r) Preserves _≤_ ⟶ _≤_
*-monoˡ-≤-nonNeg : ∀ r → NonNegative r → (r *_) Preserves _≤_ ⟶ _≤_
*-monoʳ-≤-nonPos : ∀ r → NonPositive r → (_* r) Preserves _≤_ ⟶ _≥_
*-monoˡ-≤-nonPos : ∀ r → NonPositive r → (r *_) Preserves _≤_ ⟶ _≥_
*-monoˡ-<-pos : ∀ r → Positive r → (_* r) Preserves _<_ ⟶ _<_
*-monoʳ-<-pos : ∀ r → Positive r → (r *_) Preserves _<_ ⟶ _<_
*-monoˡ-<-neg : ∀ r → Negative r → (_* r) Preserves _<_ ⟶ _>_
*-monoʳ-<-neg : ∀ r → Negative r → (r *_) Preserves _<_ ⟶ _>_
*-distribˡ-⊓-nonNeg : ∀ p → NonNegative p → ∀ q r → p * (q ⊓ r) ≡ (p * q) ⊓ (p * r)
*-distribʳ-⊓-nonNeg : ∀ p → NonNegative p → ∀ q r → (q ⊓ r) * p ≡ (q * p) ⊓ (r * p)
*-distribˡ-⊔-nonNeg : ∀ p → NonNegative p → ∀ q r → p * (q ⊔ r) ≡ (p * q) ⊔ (p * r)
*-distribʳ-⊔-nonNeg : ∀ p → NonNegative p → ∀ q r → (q ⊔ r) * p ≡ (q * p) ⊔ (r * p)
*-distribˡ-⊔-nonPos : ∀ p → NonPositive p → ∀ q r → p * (q ⊔ r) ≡ (p * q) ⊓ (p * r)
*-distribʳ-⊔-nonPos : ∀ p → NonPositive p → ∀ q r → (q ⊔ r) * p ≡ (q * p) ⊓ (r * p)
*-distribˡ-⊓-nonPos : ∀ p → NonPositive p → ∀ q r → p * (q ⊓ r) ≡ (p * q) ⊔ (p * r)
*-distribʳ-⊓-nonPos : ∀ p → NonPositive p → ∀ q r → (q ⊓ r) * p ≡ (q * p) ⊔ (r * p)
pos⇒1/pos : ∀ p (p>0 : Positive p) → Positive ((1/ p) {{pos⇒≢0 p p>0}})
neg⇒1/neg : ∀ p (p<0 : Negative p) → Negative ((1/ p) {{neg⇒≢0 p p<0}})
1/pos⇒pos : ∀ p .{{_ : NonZero p}} → (1/p : Positive (1/ p)) → Positive p
1/neg⇒neg : ∀ p .{{_ : NonZero p}} → (1/p : Negative (1/ p)) → Negative p
```