The library has been tested using Agda 2.6.4.
NOTE: Version 2.0
contains various breaking changes and is not backwards
compatible with code written with version 1.X
of the library.
-
A new tactic
cong!
available fromTactic.Cong
which automatically infers the argument tocong
for you via anti-unification. -
Improved the
solve
tactic inTactic.RingSolver
to work in a much wider range of situations. -
A massive refactoring of the unindexed
Functor
/Applicative
/Monad
hierarchy and theMonadReader
/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 expectedgolden
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 inTest.Golden
and the standard library's own tests intests/
for documentation on how to use the library.
-
In
Algebra.Definitions.RawSemiring
the recordPrime
did not enforce that the number was not divisible by1#
. To fix thisp∤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 thatC ⋆ X
is strictly positive inX
which in turn allows us to use the free monad when defining auxiliary (co)inductive types (cf. theTap
example inREADME.Data.Container.FreeMonad
). -
In
Data.Fin.Properties
thei
argument toopposite-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 parametero
in the proof/-monoˡ-≤
was implicit but not inferrable. It has been changed to be explicit. -
In
Data.Nat.DivMod
the parameterm
in the proof+-distrib-/-∣ʳ
was implicit but not inferrable, whilen
is explicit but inferrable. They have been to explicit and implicit respectively. -
In
Data.Nat.GeneralisedArithmetic
thes
andz
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 overRational
s, i.e.step-≈ ↦ step-≃ step-≈˘ ↦ step-≃˘
with corresponding associated syntax:
_≈⟨_⟩_ ↦ _≃⟨_⟩_ _≈⟨_⟨_ ↦ _≃⟨_⟨_
-
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 ofSurjection
,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
theExitFailure
constructor is now carrying an integer rather than a natural. The previous binding was incorrectly assuming that all exit codes where non-negative.
- All modules and names that were deprecated in
v1.2
and before have been removed.
-
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
- From:
-
RightCancellative _•_
- From:
∀ {x} y z → (y • x) ≈ (z • x) → y ≈ z
- To:
∀ x y z → (y • x) ≈ (z • x) → y ≈ z
- From:
-
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
- From:
-
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
- From:
-
-
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
-
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*
andisNearSemiring*
IsSemiringWithoutOne*
andisSemiringWithoutOne*
IsSemiringWithoutAnnihilatingZero*
andisSemiringWithoutAnnihilatingZero*
IsRing*
andisRing*
-
In order to improve modularity and consistency with
Relation.Binary.Lattice
, the structures & bundles forSemilattice
,Lattice
,DistributiveLattice
&BooleanAlgebra
have been moved out of theAlgebra
modules and into their own hierarchy inAlgebra.Lattice
. -
All submodules, (e.g.
Algebra.Properties.Semilattice
orAlgebra.Morphism.Lattice
) have been moved to the corresponding place underAlgebra.Lattice
(e.g.Algebra.Lattice.Properties.Semilattice
orAlgebra.Lattice.Morphism.Lattice
). See theDeprecated modules
section below for full details. -
The definition of
IsDistributiveLattice
andIsBooleanAlgebra
have changed so that they are no longer right-biased which hindered compositionality. More concretely,IsDistributiveLattice
now has fields:∨-distrib-∧ : ∨ DistributesOver ∧ ∧-distrib-∨ : ∧ DistributesOver ∨
instead of
∨-distribʳ-∧ : ∨ DistributesOverʳ ∧
and
IsBooleanAlgebra
now has fields:∨-complement : Inverse ⊤ ¬ ∨ ∧-complement : Inverse ⊥ ¬ ∧
instead of:
∨-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 byAlgebra.Lattice
. For example, if before you wrote:∧-∨-isDistributiveLattice = record { isLattice = ∧-∨-isLattice ; ∨-distribʳ-∧ = ∨-distribʳ-∧ }
you can use the smart constructor
isDistributiveLatticeʳʲᵐ
to write:∧-∨-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
forIs(Bounded)Semilattice
which can be used to indicate meet/join-ness of the original structures. -
Finally, the following auxiliary files have been moved:
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
-
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
, andIsSemiringHomomorphism
respectively, adding a single property at each step. -
Similarly,
IsLatticeHomomorphism
is now built asIsRelHomomorphism
along with proofs that_∧_
and_∨_
are homomorphic. -
Finally
⁻¹-homo
inIsRingHomomorphism
has been renamed to-‿homo
.
-
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, underCategory.*
, as this obstructs the importing of theagda-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:
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
-
The unindexed versions are not defined in terms of the named versions anymore.
-
The
RawApplicative
andRawMonad
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 likeIO : Set l → Set (suc l)
. -
RawApplicative
is nowRawFunctor + pure + _<*>_
andRawMonad
is nowRawApplicative
+_>>=_
. 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/μ operatorjoin : (M : RawMonad F) → F (F A) → F A
. -
We now have
RawEmpty
andRawChoice
respectively packingempty : M A
and(<|>) : M A → M A → M A
.RawApplicativeZero
,RawAlternative
,RawMonadZero
,RawMonadPlus
are all defined in terms of these. -
MonadT T
now returns aMonadTd
record that packs both a proof that theMonad M
transformed byT
is a monad and that we canlift
a computationM A
to a transformed computationT 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 aMonad
anymore. This ensures we do not have conflictingMonad M
instances from a pair ofMonadState S M
&MonadReader R M
constraints. -
MonadState S M
is now defined in terms ofgets : (S → A) → M A modify : (S → S) → M ⊤
with
get
andput
defined as derived notions. This is needed becauseMonadState S M
does not pack aMonad M
instance anymore and so we cannot definemodify f
asget >>= λ s → put (f s)
. -
MonadWriter 𝕎 M
is defined similarly: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 aRawMonoid
, not aSet
andW
is the carrier of the monoid.
-
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 namedCodata.Sized
, e.g.Codata.Stream
has becomeCodata.Sized.Stream
.
-
The definition of
⊥
has been changed toprivate 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 ofdec-no
has changeddec-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≢-≟-identity : x ≢ y → ∃ λ ¬eq → x ≟ y ≡ no ¬eq ↦ ≢-≟-identity : (x≢y : x ≢ y) → x ≟ y ≡ no x≢y
-
-
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 propertyData.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<′⇒<
.
-
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: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
: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
: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.
-
All the types of
lookup
functions (and variants) in the following modules have been changed to match the argument convention adopted in theList
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
andCodata.Guarded.Stream.Relation.Binary.Pointwise
, the proofs calledlookup
have been renamedlookup⁺
.
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, 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. 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:_/_ : (dividend divisor : ℕ) {≢0 : False (divisor ≟ 0)} → ℕ
it is now:
_/_ : (dividend divisor : ℕ) .{{_ : NonZero divisor}} → ℕ
-
This means that as long as an instance of
NonZero n
is in scope then you can writem / 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/_
,_÷_
- In
-
At the moment, there are 4 different ways such instance arguments can be provided, listed in order of convenience and clarity:
-
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 ofNonZero (suc n)
for anyn
andData.Integer.Base
contains an instance ofNonNegative (+ n)
for anyn
. Consequently, if the argument is of the required form, these instances will always be filled in by instance search automatically, e.g.0/n≡0 : 0 / suc n ≡ 0
-
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.
0/n≡0 : .{{_ : NonZero n}} → 0 / n ≡ 0
-
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.instance n≢0 : NonZero n n≢0 = ... 0/n≡0 : 0 / n ≡ 0
-
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 inData.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 assuc n
everywhere instead ofn
, 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 insuc 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 fromData.Rational.Unnormalised.Properties
:p≄0⇒∣↥p∣≢0 : ∀ p → p ≠ 0ℚᵘ → ℤ.∣ (↥ p) ∣ ≢0 ∣↥p∣≢0⇒p≄0 : ∀ p → ℤ.∣ (↥ p) ∣ ≢0 → p ≠ 0ℚᵘ
-
The definition of
_≤″_
was previously: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 theRawMagma
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:_≤″_ : (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
inData.Nat.Properties
.
-
The definition of
Prime
was: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 form2 + toℕ i
, which has exactly the same problem as thesuc n
hack described above used for non-zeroness. -
To make it easier to use, reason about and read, the definition has been changed to:
Prime 0 = ⊥ Prime 1 = ⊥ Prime n = ∀ {d} → 2 ≤ d → d < n → d ∤ n
-
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 ofp + 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:
- the records
ℚᵘ
andℚ
have both had theno-eta-equality
flag enabled - definition of arithmetic operations have trivial pattern matching added to
prevent them reducing, e.g.
has been changed to
p + q = (↥ p ℤ.* ↧ q ℤ.+ ↥ q ℤ.* ↧ p) / (↧ₙ p ℕ.* ↧ₙ q)
p@record{} + q@record{} = (↥ p ℤ.* ↧ q ℤ.+ ↥ q ℤ.* ↧ p) / (↧ₙ p ℕ.* ↧ₙ q)
- the records
-
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:
-
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 inv1.7
andv2.0
, and we believe most proofs should be able to be built up from existing proofs contained within these files. -
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. -
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
_≃_
inData.Rational.Base
has been made into a data type with the single constructor*≡*
. The destructordrop-*≡*
has been added toData.Rational.Properties
.
-
The new
Function
hierarchy was introduced inv1.2
which follows the sameCore
/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.
-
In
Function.Bundles
the names of the fields in the records have been changed fromf
,g
,cong₁
andcong₂
toto
,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 fromFunction.Definitions.(Core1/Core2)
. The latter two modules have been removed and their definitions folded intoFunction.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ˡ
andStrictlyInverseʳ
. - The records in
Function.Structures
andFunction.Bundles
export proofs of these under the namesstrictlySurjective
,strictlyInverseˡ
andstrictlyInverseʳ
, - Conversion functions have been added in both directions to
Function.Consequences(.Propositional)
.
- the old definitions have been moved to the new names
-
The module
Strict
has been deprecated in favour ofFunction.Strict
and the definitions of strict application,_$!_
and_$!′_
, have been moved fromFunction.Base
toFunction.Strict
. -
The contents of
Function.Strict
is now re-exported byFunction
.
-
Previously, the definition of
WfRec
was: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
WfRec : Rel A r → ∀ {ℓ} → RecStruct A ℓ _ WfRec _<_ P x = ∀ {y} → y < x → P y
-
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.
-
It was very difficult to use the
Relation.Nullary
modules, asRelation.Nullary
contained the basic definitions of negation, decidability etc., and the operations and proofs about these definitions were spread overRelation.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:
-
the definition of
Dec
andrecompute
have been moved toRelation.Nullary.Decidable.Core
-
the definition of
Reflects
has been moved toRelation.Nullary.Reflects
-
the definition of
¬_
has been moved toRelation.Nullary.Negation.Core
-
The modules
Relation.Nullary.(Product/Sum/Implication)
have been deprecated and their contents moved toRelation.Nullary.(Negation/Reflects/Decidable)
.
as well as the following breaking changes:
-
¬?
has been moved fromRelation.Nullary.Negation.Core
toRelation.Nullary.Decidable.Core
-
¬-reflects
has been moved fromRelation.Nullary.Negation.Core
toRelation.Nullary.Reflects
. -
decidable-stable
,excluded-middle
and¬-drop-Dec
have been moved fromRelation.Nullary.Negation
toRelation.Nullary.Decidable
. -
fromDec
andtoDec
have been moved fromData.Sum.Base
toData.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 relevantRelation.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 offlip _∼_
. -
Now, the
Preorder
record field_∼_
has been renamed to_≲_
, with_≳_
introduced as a definition inRelation.Binary.Bundles.Preorder
. Partial backwards compatible has been achieved by redeclaring a deprecated version of the old symbol in the record. Therefore, only declarations ofPartialOrder
records will need their field names updating.
-
The previous definition of the record
IsStrictTotalOrder
did not build uponIsStrictPartialOrder
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 asStrictTotalOrder
which contained multiple distinct proofs ofIsStrictPartialOrder
. -
To remedy this the definition of
IsStrictTotalOrder
has been changed to so that it builds uponIsStrictPartialOrder
as would be expected. -
To aid migration, the old record definition has been moved to
Relation.Binary.Structures.Biased
which contains theisStrictTotalOrderᶜ
smart constructor (which is re-exported byRelation.Binary
) . Therefore the old code:<-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:<-isStrictTotalOrder : IsStrictTotalOrder _≡_ _<_ <-isStrictTotalOrder = record { isStrictPartialOrder = <-isStrictPartialOrder ; compare = <-cmp }
or simply applying the smart constructor to the record definition as follows:
<-isStrictTotalOrder : IsStrictTotalOrder _≡_ _<_ <-isStrictTotalOrder = isStrictTotalOrderᶜ record { isEquivalence = isEquivalence ; trans = <-trans ; compare = <-cmp }
-
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:
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
-
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
inData.Nat.Divisibility
) -
One pre-requisite for that is that
≡-Reasoning
has been moved fromRelation.Binary.PropositionalEquality.Core
(which shouldn't be imported anyway as it's aCore
module) toRelation.Binary.PropositionalEquality.Properties
. It is still exported byRelation.Binary.PropositionalEquality
.
-
We've had various complaints about the symmetric version of reasoning combinators that use the syntax
_R˘⟨_⟩_
for some relationR
, (e.g._≡˘⟨_⟩_
and_≃˘⟨_⟩_
) introduced inv1.0
. In particular:- The symbol
˘
is hard to type. - The symbol
˘
doesn't convey the direction of the equality - The left brackets aren't vertically aligned with the left brackets of the non-symmetric version.
- The symbol
-
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, 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:
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
_⟨_⟩_
fromFunction.Base
if the_⟨_⟩_
operator is used within the reasoning proof. The symptom for this is aDon't know how to parse
error.
-
In
Text.Pretty
,Doc
is now a record rather than a type alias. This helps Agda reconstruct thewidth
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
thesearchND
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".
-
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 operationsOpₗ
andOpᵣ
have moved toAlgebra.Module.Core
. -
In
Codata.Guarded.Stream
the following functions have been modified to have simpler definitions:cycle
interleave⁺
cantor
Furthermore, the direction of interleaving ofcantor
has changed. Precisely, supposepair
is the cantor pairing function, thenlookup (pair i j) (cantor xss)
according to the old definition corresponds tolookup (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 relateFin
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 proofinj⇒≟
that an injection from a typeA
intoFin n
induces a decision procedure for_≡_
onA
has been generalised to other equivalences overA
(i.e. to arbitrary setoids), and renamed fromeq?
to the more descriptive andinj⇒decSetoid
. -
In
Data.Fin.Properties
the proofpigeonhole
has been strengthened so that the a proof thati < j
rather than a merei ≢ j
is returned. -
In
Data.Fin.Substitution.TermSubst
the fixity of_/Var_
has been changed frominfix 8
toinfixl 8
. -
In
Data.Integer.DivMod
the previous implementations of_divℕ_
,_div_
,_modℕ_
,_mod_
internally converted to the unaryFin
datatype resulting in poor performance. The implementation has been updated to use the corresponding operations fromData.Nat.DivMod
which are efficiently implemented using the Haskell backend. -
In
Data.Integer.Properties
the first two arguments ofm≡n⇒m-n≡0
(now renamedi≡j⇒i-j≡0
) have been made implicit. -
In
Data.(List|Vec).Relation.Binary.Lex.Strict
the argumentxs
inxs≮[]
in introduced in PRs #1648 and #1672 has now been made implicit. -
In
Data.List.NonEmpty
the functionssplit
,flatten
andflatten-split
have been removed from. In their placegroupSeqs
andungroupSeqs
have been added toData.List.NonEmpty.Base
which morally perform the same operations but without computing the accompanying proofs. The proofs can be found inData.List.NonEmpty.Properties
under the namesgroupSeqs-groups
andungroupSeqs
andgroupSeqs
. -
In
Data.List.Relation.Unary.Grouped.Properties
the proofsmap⁺
andmap⁻
have had their preconditions weakened so the equivalences no longer require congruence proofs. -
In
Data.Nat.Divisibility
the proofm/n/o≡m/[n*o]
has been removed. In it's place a new more general proofm/n/o≡m/[n*o]
has been added toData.Nat.DivMod
that doesn't require then * 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+_]
fromData.Integer.Base
are no longer re-exported byData.Rational.Base
. You will have to openData.Integer(.Base)
directly to use them. -
In
Data.Rational(.Unnormalised).Properties
the types of the proofspos⇒1/pos
/1/pos⇒pos
andneg⇒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 ofpos⇒1/pos
/1/pos⇒pos
were:pos⇒1/pos : ∀ p .{{_ : NonZero p}} .{{Positive (1/ p)}} → Positive p 1/pos⇒pos : ∀ p .{{_ : Positive p}} → Positive (1/ p)
but are now:
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 definitionsfromDec
andtoDec
have been moved toData.Sum
. -
In
Data.Vec.Base
the definition of_>>=_
underData.Vec.Base
has been moved to the submoduleCartesianBind
in order to avoid clashing with the new, alternative definition of_>>=_
, located in the second new submoduleDiagonalBind
. -
In
Data.Vec.Base
the definitionsinit
andlast
have been changed from theinitLast
view-derived implementation to direct recursive definitions. -
In
Data.Vec.Properties
the type of the proofzipWith-comm
has been generalised from: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
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 functionslookup
andtabulate
have been moved toData.Vec.Relation.Unary.All.Properties
and renamedlookup⁺
andlookup⁻
respectively. -
In
Data.Vec.Base
andData.Vec.Functional
the functionsiterate
andreplicate
now take the length of vector,n
, as an explicit rather than an implicit argument, i.e. the new types are:iterate : (A → A) → A → ∀ n → Vec A n replicate : ∀ n → A → Vec A n
-
In
Relation.Binary.Construct.Closure.Symmetric
the operationSymClosure
on relations in has been reimplemented as a data typeSymClosure _⟶_ a b
that is parameterized by the input relation_⟶_
(as well as the elementsa
andb
of the domain) so that_⟶_
can be inferred, which it could not from the previous implementation using the sum typea ⟶ b ⊎ b ⟶ a
. -
In
Relation.Nullary.Decidable.Core
the nameexcluded-middle
has been renamed to¬¬-excluded-middle
.
-
The ring solver tactic has been greatly improved. In particular:
-
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 useData.Integer.Base._*_
but instead had to useAlmostCommutativeRing._*_
. -
The solver now supports use of the subtraction operator
_-_
whenever it is defined immediately in terms of_+_
and-_
. This is the case forData.Integer
andData.Rational
.
-
-
Previously the division and modulus operators were defined in
Data.Nat.DivMod
which in turn meant that using them required importingData.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 inData.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.
-
Raw bundles by design don't contain any proofs so should in theory be able to live in
Data.X.Base
rather thanData.X.Bundles
. -
To achieve this while keeping the dependency footprint small, the definitions of raw bundles (
RawMagma
,RawMonoid
etc.) have been moved fromAlgebra(.Lattice)Bundles
to a new moduleAlgebra(.Lattice).Bundles.Raw
which can be imported at much lower cost fromData.X.Base
. -
We have then moved raw bundles defined in
Data.X.Properties
toData.X.Base
forX
=Nat
/Nat.Binary
/Integer
/Rational
/Rational.Unnormalised
.
- This fixes the fact we had picked the wrong name originally. The erased modality
corresponds to
@0
whereas the irrelevance one corresponds to.
.
- The module
Data.Fin.Substitution.Example
has been deprecated, and moved toREADME.Data.Fin.Substitution.UntypedLambda
- The module
Data.Nat.Properties.Core
has been deprecated, and its one lemma moved toData.Nat.Base
, renamed ass≤s⁻¹
- 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
.
- The module
Function.Related
has been deprecated in favour ofFunction.Related.Propositional
whose code uses the new function hierarchy. This also opens up the possibility of a more generalFunction.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:reverse-implication ↦ reverseImplication reverse-injection ↦ reverseInjection left-inverse ↦ leftInverse Symmetric-kind ↦ SymmetricKind Forward-kind ↦ ForwardKind Backward-kind ↦ BackwardKind Equivalence-kind ↦ EquivalenceKind
- The following files have been moved:
Relation.Binary.Construct.Converse ↦ Relation.Binary.Construct.Flip.EqAndOrd Relation.Binary.Construct.Flip ↦ Relation.Binary.Construct.Flip.Ord
- The following files have been moved:
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
-
In
Algebra.Construct.Zero
: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
:map-identity ↦ map-id map-fusion ↦ map-∘ drop-fusion ↦ drop-drop
-
In
Codata.Sized.Colist.Properties
:map-identity ↦ map-id map-map-fusion ↦ map-∘ drop-drop-fusion ↦ drop-drop
-
In
Codata.Sized.Covec.Properties
:map-identity ↦ map-id map-map-fusion ↦ map-∘
-
In
Codata.Sized.Delay.Properties
:map-identity ↦ map-id map-map-fusion ↦ map-∘ map-unfold-fusion ↦ map-unfold
-
In
Codata.Sized.M.Properties
:map-compose ↦ map-∘
-
In
Codata.Sized.Stream.Properties
:map-identity ↦ map-id map-map-fusion ↦ map-∘
-
In
Data.Container.Related
:_∼[_]_ ↦ _≲[_]_
-
In
Data.Bool.Properties
(Issue #2046):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 theFin 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 inData.Nat.DivMod
:_divℕ_ ↦ _/ℕ_ _div_ ↦ _/_ _modℕ_ ↦ _%ℕ_ _mod_ ↦ _%_
-
In
Data.Integer.Properties
references to variables in names have been made consistent so thatm
,n
always refer to naturals andi
andj
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
:_─_ ↦ removeAt
-
In
Data.List.Properties
: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
:map-compose ↦ map-∘ map-++⁺-commute ↦ map-++⁺
-
In
Data.List.Relation.Unary.All.Properties
: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
:map-with-∈⁺ ↦ mapWith∈⁺ map-with-∈⁻ ↦ mapWith∈⁻ map-with-∈↔ ↦ mapWith∈↔
-
In
Data.List.Relation.Binary.Subset.Propositional.Properties
:map-with-∈⁺ ↦ mapWith∈⁺
-
In
Data.List.Zipper.Properties
: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
:map-id₂ ↦ map-id-local map-cong₂ ↦ map-cong-local map-compose ↦ map-∘ map-<∣>-commute ↦ map-<∣>
-
In
Data.Nat.Properties
: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
:_≠_ ↦ _≄_ +-rawMonoid ↦ +-0-rawMonoid *-rawMonoid ↦ *-1-rawMonoid
-
In
Data.Rational.Unnormalised.Properties
:↥[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
:+-rawMonoid ↦ +-0-rawMonoid *-rawMonoid ↦ *-1-rawMonoid
-
In
Data.Rational.Properties
:*-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
:+-rawMonoid ↦ +-0-rawMonoid *-rawMonoid ↦ *-1-rawMonoid
-
In
Data.Rational.Unnormalised.Properties
:≤-steps ↦ p≤q⇒p≤r+q
-
In
Data.Sum.Properties
:[,]-∘-distr ↦ [,]-∘ [,]-map-commute ↦ [,]-map map-commute ↦ map-map map₁₂-commute ↦ map₁₂-map₂₁
-
In
Data.Tree.AVL
:_∈?_ ↦ member
-
In
Data.Tree.AVL.IndexedMap
:_∈?_ ↦ member
-
In
Data.Tree.AVL.Map
:_∈?_ ↦ member
-
In
Data.Tree.AVL.Sets
:_∈?_ ↦ member
-
In
Data.Tree.Binary.Zipper.Properties
: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
:map-compose ↦ map-∘
-
In
Data.Vec.Base
:remove ↦ removeAt insert ↦ insertAt
-
In
Data.Vec.Properties
: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
: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
:append-cons-commute ↦ append-cons
-
In
Data.Vec.Relation.Binary.Equality.Setoid
:map-++-commute ↦ map-++
-
In
Function.Base
:case_return_of_ ↦ case_returning_of_
-
In
Function.Construct.Composition
:_∘-⟶_ ↦ _⟶-∘_ _∘-↣_ ↦ _↣-∘_ _∘-↠_ ↦ _↠-∘_ _∘-⤖_ ↦ _⤖-∘_ _∘-⇔_ ↦ _⇔-∘_ _∘-↩_ ↦ _↩-∘_ _∘-↪_ ↦ _↪-∘_ _∘-↔_ ↦ _↔-∘_
- In
Function.Construct.Identity
:
id-⟶ ↦ ⟶-id id-↣ ↦ ↣-id id-↠ ↦ ↠-id id-⤖ ↦ ⤖-id id-⇔ ↦ ⇔-id id-↩ ↦ ↩-id id-↪ ↦ ↪-id id-↔ ↦ ↔-id
- In
-
In
Function.Construct.Symmetry
:sym-⤖ ↦ ⤖-sym sym-⇔ ↦ ⇔-sym sym-↩ ↦ ↩-sym sym-↪ ↦ ↪-sym sym-↔ ↦ ↔-sym
-
In
Function.Related.Propositional.Reasoning
:_↔⟨⟩_ ↦ _≡⟨⟩_
-
In
Foreign.Haskell.Either
andForeign.Haskell.Pair
:toForeign ↦ Foreign.Haskell.Coerce.coerce fromForeign ↦ Foreign.Haskell.Coerce.coerce
-
In
Relation.Binary.Properties.Preorder
:invIsPreorder ↦ converse-isPreorder invPreorder ↦ converse-preorder
- 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)
-
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
toVec
: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.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 predicatesRelation.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 tocong
Tactic.Cong
-
A golden testing library with test pools, an options parser, a runner:
Test.Golden
-
The module
Algebra
now publicly re-exports the contents ofAlgebra.Structures.Biased
. -
Added new definitions to
Algebra.Bundles
: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
:record RawLoop c ℓ : Set (suc (c ⊔ ℓ)) record RawQuasiGroup c ℓ : Set (suc (c ⊔ ℓ)) record RawRingWithoutOne c ℓ : Set (suc (c ⊔ ℓ))
-
Added new definitions to
Algebra.Structures
: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
:reflexive+selfInverse⇒involutive : Reflexive _≈_ → SelfInverse _≈_ f → Involutive _≈_ f
-
Added new proofs to
Algebra.Consequences.Propositional
: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
: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
: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
:_*_ 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
:_^[_]*_ : A → ℕ → A → A _^ᵗ_ : A → ℕ → A
-
In
Algebra.Bundles.Lattice
the existing recordLattice
now provides∨-commutativeSemigroup : CommutativeSemigroup c ℓ ∧-commutativeSemigroup : CommutativeSemigroup c ℓ
and their corresponding algebraic sub-bundles.
-
In
Algebra.Lattice.Structures
the recordIsLattice
now provides∨-isCommutativeSemigroup : IsCommutativeSemigroup ∨ ∧-isCommutativeSemigroup : IsCommutativeSemigroup ∧
and their corresponding algebraic substructures.
-
The module
Algebra.Properties.Magma.Divisibility
now re-exports operations_∣ˡ_
,_∤ˡ_
,_∣ʳ_
,_∤ʳ_
fromAlgebra.Definitions.Magma
. -
Added new records to
Algebra.Morphism.Structures
: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
: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
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
:×-congˡ : (_× x) Preserves _≡_ ⟶ _≈_
-
Added new proof to
Algebra.Properties.Monoid.Sum
:sum-init-last : (t : Vector _ (suc n)) → sum t ≈ sum (init t) + last t
-
Added new proofs to
Algebra.Properties.Semigroup
:leftAlternative : LeftAlternative _∙_ rightAlternative : RightAlternative _∙_ alternative : Alternative _∙_ flexible : Flexible _∙_
-
Added new proofs to
Algebra.Properties.Semiring.Exp
:^-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
: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
:-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
:<-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 inData.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
: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
: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
:_^_ : ℤ → ℕ → ℤ +-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
: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
: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
:xs≮[] : ¬ xs < []
-
Added new proofs to
Data.List.Relation.Binary.Permutation.Propositional.Properties
: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
:foldr-commMonoid : xs ↭ ys → foldr _∙_ ε xs ≈ foldr _∙_ ε ys
-
Added new function to
Data.List.Relation.Binary.Permutation.Propositional.Properties
↭-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
: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
: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
: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
:∈⇒∣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
:drop+ : ℕ → List⁺ A → List⁺ A
-
Added new proofs in
Data.List.NonEmpty.Properties
: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
<∣>-idem : Idempotent _<∣>_
-
Added new patterns and definitions to
Data.Nat.Base
: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 _⊔′_ : ℕ → ℕ → ℕ _⊓′_ : ℕ → ℕ → ℕ ∣_-_∣′ : ℕ → ℕ → ℕ _! : ℕ → ℕ 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
: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 to
Data.Nat.Divisibility.Core
:pattern divides-refl q = divides q refl
-
Added new definitions and proofs to
Data.Nat.Primality
:Composite : ℕ → Set composite? : Decidable Composite composite⇒¬prime : Composite n → ¬ Prime n ¬composite⇒prime : 2 ≤ n → ¬ Composite n → Prime n prime⇒¬composite : Prime n → ¬ Composite n ¬prime⇒composite : 2 ≤ n → ¬ Prime n → Composite n euclidsLemma : Prime p → p ∣ m * n → p ∣ m ⊎ p ∣ n
-
Added new proofs in
Data.Nat.Properties
: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 (m ^ n) m*n≢0 : .{{_ : NonZero m}} .{{_ : NonZero n}} → 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 ∣′ nonZero? : Decidable NonZero 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
:[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
: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
: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
: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
:pattern `ℕ = def (quote ℕ) [] pattern `zero = con (quote ℕ.zero) [] pattern `suc x = con (quote ℕ.suc) (x ⟨∷⟩ [])
-
Added new functions and proofs in
Data.Nat.GeneralisedArithmetic
:iterate : (A → A) → A → ℕ → A iterate-is-fold : fold z s m ≡ iterate s z m
-
Added new proofs in
Data.Parity.Properties
: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
:floor ceiling truncate round ⌊_⌋ ⌈_⌉ [_] : ℚ → ℤ fracPart : ℚ → ℚ
-
Added new definitions and proofs in
Data.Rational.Properties
:↥ᵘ-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
:floor ceiling truncate round ⌊_⌋ ⌈_⌉ [_] : ℚᵘ → ℤ fracPart : ℚᵘ → ℚᵘ
-
Added new definitions in
Data.Rational.Unnormalised.Properties
:↥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
: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
: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
×-respectsʳ : Transitive _≈₁_ → _<₁_ Respectsʳ _≈₁_ → _<₂_ Respectsʳ _≈₂_ → _<ₗₑₓ_ Respectsʳ _≋_ ×-respectsˡ : Symmetric _≈₁_ → Transitive _≈₁_ → _<₁_ Respectsˡ _≈₁_ → _<₂_ Respectsˡ _≈₂_ → _<ₗₑₓ_ Respectsˡ _≋_ ×-wellFounded' : Transitive _≈₁_ → _<₁_ Respectsʳ _≈₁_ → WellFounded _<₁_ → WellFounded _<₂_ → WellFounded _<ₗₑₓ_
-
Added new definitions to
Data.Sign.Base
:*-rawMagma : RawMagma 0ℓ 0ℓ *-1-rawMonoid : RawMonoid 0ℓ 0ℓ *-1-rawGroup : RawGroup 0ℓ 0ℓ
-
Added new proofs to
Data.Sign.Properties
:*-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
:wordsByᵇ : (Char → Bool) → String → List String linesByᵇ : (Char → Bool) → String → List String
-
Added new proofs in
Data.String.Properties
:≤-isDecTotalOrder-≈ : IsDecTotalOrder _≈_ _≤_ ≤-decTotalOrder-≈ : DecTotalOrder _ _ _
-
Added new definitions in
Data.Sum.Properties
:swap-↔ : (A ⊎ B) ↔ (B ⊎ A)
-
Added new proofs in
Data.Sum.Properties
: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 inData.Tree.AVL.IndexedMap
-
Added new definitions in
Data.Vec.Base
: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
:monad : RawMonad (λ (A : Set a) → Vec A n)
-
Added new proofs in
Data.Vec.Properties
: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
:index-∈-fromList⁺ : Any.index (∈-fromList⁺ v∈xs) ≡ indexₗ v∈xs
-
Added new isomorphisms to
Data.Unit.Polymorphic.Properties
:⊤↔⊤* : ⊤ ↔ ⊤*
-
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
: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
cong-[_]≔ : Pointwise _∼_ xs ys → Pointwise _∼_ (xs [ i ]≔ p) (ys [ i ]≔ p)
-
Added new function to
Data.Vec.Relation.Binary.Equality.Setoid
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
:Vec↔N-ary : ∀ n → (Vec A n → B) ↔ N-ary n A B
-
Added new isomorphisms to
Data.Vec.Recursive
: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
inFunction.Base
:flip′ : (A → B → C) → (B → A → C)
-
Added new proofs and definitions in
Function.Bundles
:LeftInverse.isSplitSurjection : LeftInverse → IsSplitSurjection to LeftInverse.surjection : LeftInverse → Surjection SplitSurjection = LeftInverse _⟨$⟩_ = Func.to
-
Added new proofs to
Function.Properties.Inverse
:↔-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
:record IsSplitSurjection (f : A → B) : Set (a ⊔ b ⊔ ℓ₁ ⊔ ℓ₂)
-
Added new definition to the
Surjection
module inFunction.Related.Surjection
:f⁻ = proj₁ ∘ surjective
-
Added new proof to
Induction.WellFounded
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
: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
:isCommutativePomonoid : IsCommutativePomonoid _≈_ _≤_ _∨_ ⊥ commutativePomonoid : CommutativePomonoid c ℓ₁ ℓ₂
-
Added new proofs to
Relation.Binary.Properties.Poset
:≤-dec⇒≈-dec : Decidable _≤_ → Decidable _≈_ ≤-dec⇒isDecPartialOrder : Decidable _≤_ → IsDecPartialOrder _≈_ _≤_
-
Added new proofs in
Relation.Binary.Properties.StrictPartialOrder
:>-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 operations in
System.Exit
:isSuccess : ExitCode → Bool isFailure : ExitCode → Bool
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
:Bézout-coprime : ∀ {i j d} → Bézout.Identity (suc d) (i * suc d) (j * suc d) → Coprime i j
-
In
Data.Nat.Divisibility
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
: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