The library has been tested using Agda 2.6.2.
-
A golden testing library in
Test.Golden. This allows you to run a set of tests and make sure their output matches an expectedgoldenvalue. 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.Goldenand the standard library's own tests intests/for documentation on how to use the library. -
A new tactic
cong!available fromTactic.Congwhich automatically infers the argument tocongfor you via anti-unification. -
Improved the
solvetactic inTactic.RingSolverto work in a much wider range of situations. -
Added
⌊log₂_⌋and⌈log₂_⌉on Natural Numbers. -
A massive refactoring of the unindexed Functor/Applicative/Monad hierarchy and the MonadReader / MonadState type classes. These are now usable with instance arguments as demonstrated in the tests/monad examples.
-
In
System.Exit, theExitFailureconstructor is now carrying an integer rather than a natural. The previous binding was incorrectly assuming that all exit codes where non-negative. -
In
/-monoˡ-≤inData.Nat.DivModthe parameterowas implicit but not inferrable. It has been changed to be explicit. -
In
+-distrib-/-∣ʳinData.Nat.DivModthe parametermwas implicit but not inferrable, whilenis explicit but inferrable. They have been changed. -
In
Function.Definitionsthe 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. -
Add module
Algebra.Modulethat re-exports the contents ofAlgebra.Module.(Definitions/Structures/Bundles) -
Various module-like bundles in
Algebra.Module.Bundleswere missing a fixity declaration for_*ᵣ_. This has been fixed. -
In
Algebra.Definitions.RawSemiringthe recordprimeaddp∤1 : p ∤ 1#to the field. -
In
Data.List.Relation.Ternary.Appending.Setoidwe re-export specialised versions of the constructors using the setoid's carrier set. Prior to that, the constructor were re-exported in their full generality which would lead to unsolved meta variables at their use sites. -
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 ⋆ Xis strictly positive inXwhich in turn allows us to use the free monad when defining auxiliary (co)inductive types (cf. theTapexample inREADME.Data.Container.FreeMonad). -
In
Data.Maybe.Basethe fixity declaration of_<∣>_was missing. This has been fixed.
- All modules and names that were deprecated in v1.2 and before have been removed.
- Due to the change in Agda 2.6.2 where sized types are no longer compatible
with the
--safeflag, it has become clear that a third variant of codata will be needed using coinductive records. Therefore all existing modules inCodatawhich used sized types have been moved inside a new folder namedSized, e.g.Codata.Streamhas becomeCodata.Sized.Stream.
- 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-categoriesdevelopment into the Standard Library, and moreover needlessly restricts the applicability of categorical concepts to this (highly specific) mode of use. Correspondingly, modules grouped under*.Categorical.*which exploited these structures for effectful programming have been renamed*.Effectful.
-
In
Text.Pretty,Docis now a record rather than a type alias. This helps Agda reconstruct thewidthparameter 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.SearchthesearchNDfunction 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 order to improve modularity and consistency with
Relation.Binary.Lattice, the structures & bundles forSemilattice,Lattice,DistributiveLattice&BooleanAlgebrahave been moved out of theAlgebramodules and into their own hierarchy inAlgebra.Lattice. -
All submodules, (e.g.
Algebra.Properties.SemilatticeorAlgebra.Morphism.Lattice) have been moved to the corresponding place underAlgebra.Lattice(e.g.Algebra.Lattice.Properties.SemilatticeorAlgebra.Lattice.Morphism.Lattice). See theDeprecated modulessection below for full details. -
Changed definition of
IsDistributiveLatticeandIsBooleanAlgebraso that they are no longer right-biased which hinders compositionality. More concretely,IsDistributiveLatticenow has fields:∨-distrib-∧ : ∨ DistributesOver ∧ ∧-distrib-∨ : ∧ DistributesOver ∨
instead of
∨-distribʳ-∧ : ∨ DistributesOverʳ ∧
and
IsBooleanAlgebranow 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/BoundedSemilatticerecords. -
Added new aliases
Is(Meet/Join)(Bounded)SemilatticeforIs(Bounded)Semilatticewhich can be used to indicate meet/join-ness of the original structures.
-
The switch to the new function hierarchy is complete and the following definitions now use the new definitions instead of the old ones:
Algebra.Lattice.Properties.BooleanAlgebraAlgebra.Properties.CommutativeMonoid.SumAlgebra.Properties.Latticereplace-equality
Data.Fin.Properties∀-cons-⇔⊎⇔∃
Data.Fin.Subset.Propertiesout⊆-⇔in⊆in-⇔out⊂in-⇔out⊂out-⇔in⊂in-⇔x∈⁅y⁆⇔x≡y∩⇔×∪⇔⊎∃-Subset-[]-⇔∃-Subset-∷-⇔
Data.List.Countdownempty
Data.List.Fresh.Relation.Unary.Any⊎⇔Any
Data.List.NonEmptyData.List.Relation.Binary.Lex[]<[]-⇔∷<∷-⇔
Data.List.Relation.Binary.Sublist.Heterogeneous.Properties∷⁻¹∷ʳ⁻¹Sublist-[x]-bijection
Data.List.Relation.Binary.Sublist.Setoid.Properties∷⁻¹∷ʳ⁻¹[x]⊆xs⤖x∈xs
Data.List.Relation.Unary.Grouped.PropertiesData.Maybe.Relation.Binary.Connectedjust-equivalence
Data.Maybe.Relation.Binary.Pointwisejust-equivalence
Data.Maybe.Relation.Unary.Alljust-equivalence
Data.Maybe.Relation.Unary.Anyjust-equivalence
Data.Nat.Divisibilitym%n≡0⇔n∣m
Data.Nat.Propertieseq?
Data.Vec.N-aryuncurry-∀ⁿuncurry-∃ⁿ
Data.Vec.Relation.Binary.Lex.CoreP⇔[]<[]∷<∷-⇔
Data.Vec.Relation.Binary.Pointwise.ExtensionalequivalentPointwise-≡↔≡
Data.Vec.Relation.Binary.Pointwise.InductivePointwise-≡↔≡
Effect.Monad.Partialitycorrect
Relation.Binary.Construct.Closure.Reflexive.Properties⊎⇔Refl
Relation.Binary.Construct.Closure.Transitiveequivalent
Relation.Binary.Reflectionsolve₁
Relation.Nullary.Decidablemap
-
The names of the fields in the records of the new hierarchy have been changed from
f,g,cong₁,cong₂toto,from,to-cong,from-cong.
-
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 for a fuller explanation of the motivation and implementation.
-
For example, whereas the type signature of division used to be:
_/_ : (dividend divisor : ℕ) {≢0 : False (divisor ≟ 0)} → ℕit is now:
_/_ : (dividend divisor : ℕ) .{{_ : NonZero divisor}} → ℕwhich means that as long as an instance of
NonZero nis in scope then you can writem / nwithout 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.Baseconstains an instance ofNonZero (suc n)for anynandData.Integer.Basecontains 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 - Take the instance as an argument - 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
whereclause) 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.Suitable constructors for0/n≡0 : ∀ n (n≢0 : NonZero n) → ((0 / n) {{n≢0}}) ≡ 0NonZero/Positiveetc. can be found inData.X.Base.
- Automatic basic instances - the standard library provides instances based on the constructors of each
numeric type in
-
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
nhad to be non-zero then you would refer to the argument assuc neverywhere instead ofn, e.g.n/n≡1 : ∀ n → suc n / suc n ≡ 1This made the proofs extremely difficult to use if your term wasn't in the right form. After being updated to use instance arguments instead, the proof above becomes:
n/n≡1 : ∀ n {{_ : NonZero n}} → n / n ≡ 1However, note that this means that if you passed in the value
xto 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, the definition of
_≢0has been removed fromData.Rational.Unnormalised.Baseand the following proofs about it have been removed fromData.Rational.Unnormalised.Properties:p≄0⇒∣↥p∣≢0 : ∀ p → p ≠ 0ℚᵘ → ℤ.∣ (↥ p) ∣ ≢0 ∣↥p∣≢0⇒p≄0 : ∀ p → ℤ.∣ (↥ p) ∣ ≢0 → p ≠ 0ℚᵘ
-
Currently arithmetic expressions involving rationals (both normalised and unnormalised) undergo disastorous exponential normalisation. For example,
p + qwould often be normalised by Agda to(↥ p ℤ.* ↧ q ℤ.+ ↥ q ℤ.* ↧ p) / (↧ₙ p ℕ.* ↧ₙ q). While the normalised form ofp + q + r + s + t + u + vwould 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-equalityflag 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 on this reduction behaviour or on eta-equality may no longer go through. There are several ways to fix this:
- The principled way is to not rely on this reduction behaviour in the first place.
The
Propertiesfiles for rational numbers have been greatly expanded inv1.7andv2.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
congcombined with a lemma that proves the old reduction behaviour.
- The principled way is to not rely on this reduction behaviour in the first place.
The
-
The definitions of the types for cancellativity in
Algebra.Definitionspreviously 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ˡ xto∙-cancelˡ x _ _∙-cancelʳ y zto∙-cancelʳ _ y z
-
The definition of
PrimeinData.Nat.Primalitywas: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
Fintype, it also required that the divisor was of the form2 + toℕ i, which has exactly the same problem as thesuc nhack 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
-
Under the
Reflectionmodule, 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.ASTthat re-exports the contents of the submodules has been addeed.
- The previous implementations of
_divℕ_,_div_,_modℕ_,_mod_inData.Integer.DivModinternally converted to the unaryFindatatype resulting in poor performance. The implementation has been updated to use the corresponding operations fromData.Nat.DivModwhich are efficiently implemented using the Haskell backend.
-
The module
Stricthas been deprecated in favour ofFunction.Strictand the definitions of strict application,_$!_and_$!′_, have been moved fromFunction.BasetoFunction.Strict. -
The contents of
Function.Strictis now re-exported byFunction.
- 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:
IsNearSemiringIsSemiringWithoutOneIsSemiringWithoutAnnihilatingZeroIsRing
- To aid with migration, structures matching the old style ones have been added
to
Algebra.Structures.Biased, with conversionFunctions:IsNearSemiring*andisNearSemiring*IsSemiringWithoutOne*andisSemiringWithoutOne*IsSemiringWithoutAnnihilatingZero*andisSemiringWithoutAnnihilatingZero*IsRing*andisRing*
-
The definition of ⊥ has been changed to
private data Empty : Set where ⊥ : Set ⊥ = Irrelevant Empty
in order to make ⊥ proof irrelevant. Any two proofs of
⊥or of a negated statements are now judgementally equal to each other. -
Consequently we have modified the following definitions:
- In
Relation.Nullary.Decidable.Core, the type ofdec-nohas 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≢-≟-identityhas changed≢-≟-identity : x ≢ y → ∃ λ ¬eq → x ≟ y ≡ no ¬eq ↦ ≢-≟-identity : (x≢y : x ≢ y) → x ≟ y ≡ no x≢y
- In
-
It was very difficult to use the
Relation.Nullarymodules, asRelation.Nullarycontained the basic definitions of negation, decidability etc., and the operations and proofs were smeared overRelation.Nullary.(Negation/Product/Sum/Implication etc.). -
In order to fix this:
- the definition of
Decandrecomputehave been moved toRelation.Nullary.Decidable.Core - the definition of
Reflectshas been moved toRelation.Nullary.Reflects - the definition of
¬_has been moved toRelation.Nullary.Negation.Core
- the definition of
-
Backwards compatibility has been maintained, as
Relation.Nullarystill re-exports these publicly. -
The modules:
Relation.Nullary.Product Relation.Nullary.Sum Relation.Nullary.Implicationhave been deprecated and their contents moved to
Relation.Nullary.(Negation/Reflects/Decidable)however all their contents is re-exported byRelation.Nullarywhich is the easiest way to access it now. -
In order to facilitate this reorganisation the following breaking moves have occured:
¬?has been moved fromRelation.Nullary.Negation.CoretoRelation.Nullary.Decidable.Core¬-reflectshas been moved fromRelation.Nullary.Negation.CoretoRelation.Nullary.Reflects.decidable-stable,excluded-middleand¬-drop-Dechave been moved fromRelation.Nullary.NegationtoRelation.Nullary.Decidable.fromDecandtoDechave been mvoed fromData.Sum.BasetoData.Sum.
-
The unindexed versions are not defined in terms of the named versions anymore
-
The
RawApplicativeandRawMonadtype 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). -
RawApplicativeis nowRawFunctor + pure + _<*>_andRawMonadis nowRawApplicative+_>>=_and soreturnis not used anywhere anymore. This fixes the conflict withcase_return_of(#356) This reorganisation means in particular that the functor/applicative of a monad are not computed using_>>=_. This may break proofs. -
We now have
RawEmptyandRawChoicerespectively packingempty : M Aand(<|>) : M A → M A → M A.RawApplicativeZero,RawAlternative,RawMonadZero,RawMonadPlusare all defined in terms of these. -
MonadT Tnow returns aMonadTdrecord that packs both a proof that theMonad Mtransformed byTis a monad and that we canlifta computationM Ato a trasnformed 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 aMonadanymore. This ensures we do not have conflictingMonad Minstances from a pair ofMonadState S M&MonadReader R Mconstraints. -
MonadState S Mis now defined in terms ofgets : (S → A) → M A modify : (S → S) → M ⊤
with
getandputdefined as derived notions. This is needed becauseMonadState S Mdoes not pack aMonad Minstance anymore and so we cannot definemodify fasget >>= λ s → put (f s). -
MonadWriter 𝕎 Mis defined similarly:writer : W × A → M A listen : M A → M (W × A) pass : M ((W → W) × A) → M A
with
telldefined as a derived notion. Note that𝕎is aRawMonoid, not aSetandWis the carrier of the monoid. -
New modules:
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 first two arguments of
m≡n⇒m-n≡0(nowi≡j⇒i-j≡0) inData.Integer.Basehave been made implicit. -
The relations
_≤__≥__<__>_inData.Fin.Basehave been generalised so they can now relateFinterms 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. -
The operation
SymClosureon relations inRelation.Binary.Construct.Closure.Symmetrichas been reimplemented as a data typeSymClosure _⟶_ a bthat is parameterized by the input relation_⟶_(as well as the elementsaandbof the domain) so that_⟶_can be inferred, which it could not from the previous implementation using the sum typea ⟶ b ⊎ b ⟶ a. -
In
Algebra.Morphism.Structures,IsNearSemiringHomomorphism,IsSemiringHomomorphism, andIsRingHomomorphismhave been redeisgned to build up fromIsMonoidHomomorphism,IsNearSemiringHomomorphism, andIsSemiringHomomorphismrespectively, adding a single property at each step. This means that they no longer need to have two separate proofs ofIsRelHomomorphism. Similarly,IsLatticeHomomorphismis now built asIsRelHomomorphismalong with proofs that_∧_and_∨_are homorphic.Also,
⁻¹-homoinIsRingHomomorphismhas been renamed to-‿homo. -
Moved definition of
_>>=_underData.Vec.Baseto its submoduleCartesianBindin order to keep another new definition of_>>=_, located inDiagonalBindwhich is also a submodule ofData.Vec.Base. -
The functions
split,flattenandflatten-splithave been removed fromData.List.NonEmpty. In their placegroupSeqsandungroupSeqshave been added toData.List.NonEmpty.Basewhich morally perform the same operations but without computing the accompanying proofs. The proofs can be found inData.List.NonEmpty.Propertiesunder the namesgroupSeqs-groupsandungroupSeqsandgroupSeqs. -
The constructors
+0and+[1+_]fromData.Integer.Baseare no longer exported byData.Rational.Base. You will have to openData.Integer(.Base)directly to use them. -
The types of the proofs
pos⇒1/pos/1/pos⇒posandneg⇒1/neg/1/neg⇒neginData.Rational(.Unnormalised).Propertieshave 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⇒poswere: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 -
OpₗandOpᵣhave moved fromAlgebra.CoretoAlgebra.Module.Core. -
In
Data.Nat.GeneralisedArithmetic, thesandzarguments to the following functions have been made explicit:fold-+fold-kfold-*fold-pull
-
In
Data.Fin.Properties:- the
iargument toopposite-suchas been made explicit; pigeonholehas been strengthened: wlog, we return a proof thati < jrather than a merei ≢ j.
- the
-
In
Data.Sum.Basethe definitionsfromDecandtoDechave been moved toData.Sum. -
In
Codata.Guarded.Streamthe following functions have been modified to have simpler definitions:cycleinterleave⁺cantorFurthermore, the direction of interleaving ofcantorhas changed. Precisely, supposepairis 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.
-
Removed
m/n/o≡m/[n*o]fromData.Nat.Divisibilityand added a more generalm/n/o≡m/[n*o]toData.Nat.DivModthat doesn't requiren * o ∣ m. -
Updated
lookupfunctions (and variants) to match the conventions adopted in theListmodule i.e.lookuptakes its container first and the index (whose type may depend on the container value) second. This affects modules: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 Tactic.RingSolver Tactic.RingSolver.Core.NatSet- Moved & renamed from
Data.Vec.Relation.Unary.AlltoData.Vec.Relation.Unary.All.Properties:lookup ↦ lookup⁺ tabulate ↦ lookup⁻ - Renamed in
Data.Vec.Relation.Unary.Linked.PropertiesandCodata.Guarded.Stream.Relation.Binary.Pointwise:lookup ↦ lookup⁺ - Added the following new definitions to
Data.Vec.Relation.Unary.All: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)
- Moved & renamed from
- 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.IntegerandData.Rational.
- 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
-
Previously the division and modulus operators were defined in
Data.Nat.DivModwhich in turn meant that using them required importingData.Nat.Propertieswhich 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 compatability). -
Beneficieries of this change include
Data.Rational.Unnormalised.Basewhose dependencies are now significantly smaller.
- As mentioned by MatthewDaggitt in Issue #1755, Raw bundles defined in Data.X.Properties
should be defined in Data.X.Base as they don't require any properties.
- Moved raw bundles From
Data.Nat.PropertiestoData.Nat.Base - Moved raw bundles From
Data.Nat.Binary.PropertiestoData.Nat.Binary.Base - Moved raw bundles From
Data.Rational.PropertiestoData.Rational.Base - Moved raw bundles From
Data.Rational.Unnormalised.PropertiestoData.Rational.Unnormalised.Base
- Moved raw bundles From
- A new module
Algebra.Bundles.Rawcontaining the definitions of the raw bundles can be imported at much lower cost fromData.X.Base. The following definitions have been moved:RawMagmaRawMonoidRawGroupRawNearSemiringRawSemiringRawRingWithoutOneRawRingRawQuasigroupRawLoop
- A new module
Algebra.Lattice.Bundles.Rawis also introduced.RawLatticehas been moved fromAlgebra.Lattice.Bundlesto this new module.
- The module
Function.Relatedhas been deprecated in favour ofFunction.Related.Propositionalwhose code uses the new function hierarchy. This also opens up the possibility of a more generalFunction.Related.Setoidat 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
- As discussed above the following 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
- 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.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
- The module
Data.Nat.Properties.Corehas been deprecated, and its one entry moved toData.Nat.Properties
-
In
Codata.Guarded.Stream.Properties:map-identity ↦ map-id map-fusion ↦ map-∘
-
In
Codata.Sized.Colist.Properties:map-identity ↦ map-id map-map-fusion ↦ map-∘
-
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.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 margument.inject+ ↦ flip _↑ˡ_ raise ↦ _↑ʳ_Issue #1726: 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ℕ<. -
In
Data.Fin.Induction:≺-Rec ≺-wellFounded ≺-recBuilder ≺-recAs with Issue #1726 above: the deprecation of relation
_≺_means that these definitions associated with wf-recursion are deprecated in favour of their_<_counterparts. But it's not quite sensible to say that these definiton should be renamed to anything, least of all those counterparts... the type confusion would be intolerable. -
In
Data.Fin.Properties:toℕ-raise ↦ toℕ-↑ʳ toℕ-inject+ ↦ toℕ-↑ˡ splitAt-inject+ ↦ splitAt-↑ˡ m i n splitAt-raise ↦ splitAt-↑ʳ Fin0↔⊥ ↦ 0↔⊥ eq? ↦ inj⇒≟Likewise under issue #1726: the properties
≺⇒<′and<′⇒≺have been deprecated in favour of their proxy counterparts<⇒<′and<′⇒<. -
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.DivModthe operator names have been renamed to be consistent with those inData.Nat.DivMod:_divℕ_ ↦ _/ℕ_ _div_ ↦ _/_ _modℕ_ ↦ _%ℕ_ _mod_ ↦ _%_ -
In
Data.Integer.Propertiesreferences to variables in names have been made consistent so thatm,nalways refer to naturals andiandjalways 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.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ʳ
-
In
Data.List.NonEmpty.Properties:map-compose ↦ map-∘ map-++⁺-commute ↦ map-++⁺
-
In
Data.List.Relation.Unary.All.Properties:updateAt-id-relative ↦ updateAt-id-local updateAt-compose-relative ↦ updateAt-∘-local updateAt-compose ↦ updateAt-∘ updateAt-cong-relative ↦ updateAt-cong-local
-
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.List.Relation.Binary.Subset.Propositional.Properties:map-with-∈⁺ ↦ mapWith∈⁺ -
In
Data.List.Relation.Unary.Any.Properties:map-with-∈⁺ ↦ mapWith∈⁺ map-with-∈⁻ ↦ mapWith∈⁻ map-with-∈↔ ↦ mapWith∈↔ -
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 -
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.Sum.Properties:[,]-∘-distr ↦ [,]-∘ [,]-map-commute ↦ [,]-map map-commute ↦ map-map map₁₂-commute ↦ map₁₂-map₂₁
-
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.Properties:updateAt-id-relative ↦ updateAt-id-local updateAt-compose-relative ↦ updateAt-∘-local updateAt-compose ↦ updateAt-∘ updateAt-cong-relative ↦ updateAt-cong-local []%=-compose ↦ []%=-∘ []≔-++-inject+ ↦ []≔-++-↑ˡ []≔-++-raise ↦ []≔-++-↑ʳ idIsFold ↦ id-is-foldr sum-++-commute ↦ sum-++and the type of the proof
zipWith-commhas 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 xsto
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.Functional.Properties:updateAt-id-relative ↦ updateAt-id-local updateAt-compose-relative ↦ updateAt-∘-local updateAt-compose ↦ updateAt-∘ updateAt-cong-relative ↦ updateAt-cong-local map-updateAt ↦ map-updateAt-localNB. 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.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
Foreign.Haskell.EitherandForeign.Haskell.Pair:toForeign ↦ Foreign.Haskell.Coerce.coerce fromForeign ↦ Foreign.Haskell.Coerce.coerce -
In
Relation.Binary.Properties.Preorder:invIsPreorder ↦ converse-isPreorder invPreorder ↦ converse-preorder
- This fixes the fact we had picked the wrong name originally. The erased modality
corresponds to @0 whereas the irrelevance one corresponds to
..
-
Algebraic structures when freely adding an identity element:
Algebra.Construct.Add.Identity -
Operations for module-like algebraic structures:
Algebra.Module.Core -
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 -
Morphisms between module-like algebraic structures:
Algebra.Module.Morphism.Construct.Composition Algebra.Module.Morphism.Construct.Identity Algebra.Module.Morphism.Definitions Algebra.Module.Morphism.Structures Algebra.Module.Properties -
Identity morphisms and composition of morphisms between algebraic structures:
Algebra.Morphism.Construct.Composition Algebra.Morphism.Construct.Identity -
Ordered algebraic structures (pomonoids, posemigroups, etc.)
Algebra.Ordered Algebra.Ordered.Bundles Algebra.Ordered.Structures -
'Optimised' tail-recursive exponentiation properties:
Algebra.Properties.Semiring.Exp.TailRecursiveOptimised -
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 for a non-empty fresh list:
Data.List.Fresh.NonEmpty -
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.Productcontaining only the basic definitions.Data.Product.Base -
Reflection utilities for some specific types:
Data.List.Reflection Data.Vec.Reflection -
The
Allpredicate over non-empty lists:Data.List.NonEmpty.Relation.Unary.All -
A small library for heterogenous equational reasoning on vectors:
Data.Vec.Properties.Heterogeneous -
Show module for unnormalised rationals:
Data.Rational.Unnormalised.Show -
Properties of bijections:
Function.Consequences Function.Properties.Bijection Function.Properties.RightInverse Function.Properties.Surjection -
In order to improve modularity, the contents of
Relation.Binary.Latticehas been split out into the standard:Relation.Binary.Lattice.Definitions Relation.Binary.Lattice.Structures Relation.Binary.Lattice.BundlesAll contents is re-exported by
Relation.Binary.Latticeas before. -
Algebraic properties of
_∩_and_∪_for predicatesRelation.Unary.Algebra -
Both versions of equality on predications 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 -
cong!tactic for deriving arguments tocongTactic.Cong -
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 golden testing library with test pools, an options parser, a runner:
Test.Golden -
New interfaces for using Haskell datatypes:
Foreign.Haskell.List.NonEmpty -
Added new module
Algebra.Properties.RingWithoutOne:-‿distribˡ-* : ∀ x y → - (x * y) ≈ - x * y -‿distribʳ-* : ∀ x y → - (x * y) ≈ x * - y -
An implementation of M-types with
--guardednessflag:Codata.Guarded.M -
Port of
LinkedtoVec:Data.Vec.Relation.Unary.Linked Data.Vec.Relation.Unary.Linked.Properties -
Added Logarithm base 2 on Natural Numbers:
Data.Nat.Logarithm.Core Data.Nat.Logarithm -
Proofs of some axioms of linearity:
Algebra.Module.Morphism.ModuleHomomorphism Algebra.Module.Properties -
Properties of MoufangLoop
Algebra.Properties.MoufangLoop -
Properties of Quasigroup
Algebra.Properties.Quasigroup -
Properties of MiddleBolLoop
Algebra.Properties.MiddleBolLoop -
Properties of Loop
Algebra.Properties.Loop -
Some n-ary functions manipulating lists
Data.List.Nary.NonDependent -
Properties of KleeneAlgebra
Algebra.Properties.KleeneAlgebra
-
Added new proof to
Data.Maybe.Properties<∣>-idem : Idempotent _<∣>_
-
The module
Algebranow 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 RawQuasiGroup c ℓ : Set (suc (c ⊔ ℓ)) record Quasigroup c ℓ : Set (suc (c ⊔ ℓ)) record RawLoop 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 RawRingWithoutOne c ℓ : Set (suc (c ⊔ ℓ)) record Quasiring c ℓ : Set (suc (c ⊔ ℓ)) where record Nearring c ℓ : Set (suc (c ⊔ ℓ)) where 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 ⊔ ℓ))
and the existing record
Latticenow provides∨-commutativeSemigroup : CommutativeSemigroup c ℓ ∧-commutativeSemigroup : CommutativeSemigroup c ℓ
and their corresponding algebraic subbundles.
-
Added new proofs to
Algebra.Consequences.Setoid: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`:
```agda
LeftDividesˡ : Op₂ A → Op₂ A → Set _
LeftDividesʳ : Op₂ A → Op₂ A → Set _
RightDividesˡ : Op₂ A → Op₂ A → Set _
RightDividesʳ : Op₂ A → Op₂ A → Set _
LeftDivides : Op₂ A → Op₂ A → Set _
RightDivides : Op₂ A → Op₂ A → Set _
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
-
Algebra.Properties.Magma.Divisibilitynow re-exports operations_∣ˡ_,_∤ˡ_,_∣ʳ_,_∤ʳ_fromAlgebra.Definitions.Magma. -
Added new proofs to
Algebra.Properties.CommutativeSemigroup:interchange : Interchangable _∙_ _∙_ xy∙xx≈x∙yxx : ∀ x y → (x ∙ y) ∙ (x ∙ x) ≈ x ∙ (y ∙ (x ∙ x)) leftSemimedial : LeftSemimedial _∙_ rightSemimedial : RightSemimedial _∙_ middleSemimedial : ∀ x y z → (x ∙ y) ∙ (z ∙ x) ≈ (x ∙ z) ∙ (y ∙ x) semimedial : Semimedial _∙_
-
Added new proofs to
Algebra.Properties.Semigroup:leftAlternative : LeftAlternative _∙_ rightAlternative : RightAlternative _∙_ alternative : Alternative _∙_ flexible : Flexible _∙_
-
Added new proofs to
Algebra.Properties.Ring:-1*x≈-x : ∀ x → - 1# * x ≈ - x x+x≈x⇒x≈0 : ∀ x → x + x ≈ x → x ≈ 0# x[y-z]≈xy-xz : ∀ x y z → x * (y - z) ≈ x * y - x * z [y-z]x≈yx-zx : ∀ x y z → (y - z) * x ≈ (y * x) - (z * x)
-
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 ⊔ ℓ)
and the existing record
IsLatticenow provides∨-isCommutativeSemigroup : IsCommutativeSemigroup ∨ ∧-isCommutativeSemigroup : IsCommutativeSemigroup ∧and their corresponding algebraic substructures.
-
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 ⊔ ℓ₁ ⊔ ℓ₂)
-
Added new proofs in
Data.Bool.Properties:<-wellFounded : WellFounded _<_
-
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: every (strict) partial order is well-founded and Noetherian.spo-wellFounded : ∀ {r} {_⊏_ : Rel (Fin n) r} → IsStrictPartialOrder _≈_ _⊏_ → WellFounded _⊏_ spo-noetherian : ∀ {r} {_⊏_ : Rel (Fin n) r} → IsStrictPartialOrder _≈_ _⊏_ → WellFounded (flip _⊏_)
-
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 π) ≈ π
-
In
Data.Fin.Properties: the proof that an injection from a typeAintoFin ninduces a decision procedure for_≡_onAhas been generalized to other equivalences overA(i.e. to arbitrary setoids), and renamed fromeq?to the more descriptiveinj⇒≟andinj⇒decSetoid. -
Added new proofs in
Data.Fin.Properties:1↔⊤ : Fin 1 ↔ ⊤ 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 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 -
Added new functions 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 in
Data.List: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
-
Added new functions and definitions to
Data.List.Base:catMaybes : List (Maybe A) → List A ap : List (A → B) → List A → List B ++-rawMagma : Set a → RawMagma a _ ++-[]-rawMonoid : Set a → RawMonoid 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
-
Added new functions in
Data.List.Relation.Unary.All:decide : Π[ P ∪ Q ] → Π[ All P ∪ Any Q ] -
Added new functions in
Data.List.Fresh.Relation.Unary.All:decide : Π[ P ∪ Q ] → Π[ All {R = R} P ∪ Any Q ] -
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
-
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 pattern <′-base = ≤′-refl pattern <′-step {n} m<′n = ≤′-step {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 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 ≤-pred : suc m ≤ suc n → m ≤ n s<s-injective : ∀ {p q : m < n} → s<s p ≡ s<s q → p ≡ q <-pred : suc m < suc n → m < n <-step : m < n → m < 1 + n m<1+n⇒m<n∨m≡n : m < suc n → m < n ⊎ m ≡ n z<′s : zero <′ suc n s<′s : m <′ n → suc m <′ suc n <⇒<′ : m < n → m <′ n <′⇒< : m <′ n → m < n 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 2^n>0 : 2 ^ n > 0 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 ∣′
-
Re-exported additional functions from
Data.Nat: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.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 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 _≥?_ : 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)
-
Added new rounding functions in
Data.Rational.Unnormalised.Base:floor ceiling truncate round ⌊_⌋ ⌈_⌉ [_] : ℚᵘ → ℤ fracPart : ℚᵘ → ℚᵘ
-
Added new definitions in
Data.Rational.Unnormalised.Properties:+-*-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)
-
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.PropertiesandFunction.Related.TypeIsomorphismsfor convenience:Σ-≡,≡→≡ : (∃ λ (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 proof to
Data.Product.Relation.Binary.Lex.Strict×-respectsʳ : Transitive _≈₁_ → _<₁_ Respectsʳ _≈₁_ → _<₂_ Respectsʳ _≈₂_ → _<ₗₑₓ_ Respectsʳ _≋_ ×-respectsˡ : Symmetric _≈₁_ → Transitive _≈₁_ → _<₁_ Respectsˡ _≈₁_ → _<₂_ Respectsˡ _≈₂_ → _<ₗₑₓ_ Respectsˡ _≋_ ×-wellFounded' : Symmetric _≈₁_ → 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ˡ : (f : A → C) (g : B → D) (h : C → F) → map (map f g) h ∘ assocˡ ≗ assocˡ ∘ map f (map g h) map-assocʳ : (f : A → C) (g : B → D) (h : C → F) → map f (map g h) ∘ assocʳ ≗ assocʳ ∘ map (map f g) h -
Made
Mappublic 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 = ∀ {n} → A → B n → B (suc n) FoldlOp A B = ∀ {n} → 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 join : Vec (Vec A n) n → Vec A 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.Categorical: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 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 : ∀ (h : ∀ {c} (C : ℕ → Set c) (g : FoldlOp A C) (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 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-cast : toList (cast eq xs) ≡ toList xs cast-is-id : cast eq xs ≡ xs subst-is-cast : subst (Vec A) eq xs ≡ cast eq 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
-
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≮[] : ∀ {n} (xs : Vec A n) → ¬ xs < []
-
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 ] -
Added vector associativity proof to
Data.Vec.Relation.Binary.Equality.Setoid:++-assoc : (xs ++ ys) ++ zs ≋ xs ++ (ys ++ zs) -
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 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 definition to the
Surjectionmodule inFunction.Related.Surjection:f⁻ = proj₁ ∘ surjective -
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 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 {A = A} 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:Cotransitive _#_ = ∀ {x y} → x # y → ∀ z → (x # z) ⊎ (z # y) Tight _≈_ _#_ = ∀ x y → (¬ 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 = ∀ {x y} → (f x ⊑ y → x ≤ g y) × (x ≤ g y → f x ⊑ y) -
Added new definitions in
Relation.Binary.Bundles:record ApartnessRelation c ℓ₁ ℓ₂ : Set (suc (c ⊔ ℓ₁ ⊔ ℓ₂)) where -
Added new definitions in
Relation.Binary.Structures: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 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 -
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 : Stream (List⁺.List⁺ A)} → ass ≈ bss → concat ass ≈ concat bss map-concat : ∀ (f : A → B) ass → map f (concat ass) ≈ concat (map (List⁺.map f) ass) lookup-transpose : ∀ n (ass : List (Stream A)) → lookup n (transpose ass) ≡ List.map (lookup n) ass lookup-transpose⁺ : ∀ n (ass : List⁺ (Stream A)) → lookup n (transpose⁺ ass) ≡ List⁺.map (lookup n) ass -
Added new corollaries in
Data.List.Membership.Setoid.Properties:∈-++⁺∘++⁻ : ∀ {v} xs {ys} (p : v ∈ xs ++ ys) → [ ∈-++⁺ˡ , ∈-++⁺ʳ xs ]′ (∈-++⁻ xs p) ≡ p ∈-++⁻∘++⁺ : ∀ {v} xs {ys} (p : v ∈ xs ⊎ v ∈ ys) → ∈-++⁻ xs ([ ∈-++⁺ˡ , ∈-++⁺ʳ xs ]′ p) ≡ p ∈-++↔ : ∀ {v xs ys} → (v ∈ xs ⊎ v ∈ ys) ↔ v ∈ xs ++ ys ∈-++-comm : ∀ {v} xs ys → v ∈ xs ++ ys → v ∈ ys ++ xs ∈-++-comm∘++-comm : ∀ {v} xs {ys} (p : v ∈ xs ++ ys) → ∈-++-comm ys xs (∈-++-comm xs ys p) ≡ p ∈-++↔++ : ∀ {v} xs ys → v ∈ xs ++ ys ↔ v ∈ ys ++ xs -
Exposed container combinator conversion functions from
Data.Container.Combinator.Propertiesseparate from their correctness proofs inData.Container.Combinator:to-id : F.id A → ⟦ id ⟧ A from-id : ⟦ id ⟧ A → F.id A to-const : (A : Set s) → A → ⟦ const A ⟧ B from-const : (A : Set s) → ⟦ const A ⟧ B → A to-∘ : (C₁ : Container s₁ p₁) (C₂ : Container s₂ p₂) → ⟦ C₁ ⟧ (⟦ C₂ ⟧ A) → ⟦ C₁ ∘ C₂ ⟧ A from-∘ : (C₁ : Container s₁ p₁) (C₂ : Container s₂ p₂) → ⟦ C₁ ∘ C₂ ⟧ A → ⟦ C₁ ⟧ (⟦ C₂ ⟧ A) to-× : (C₁ : Container s₁ p₁) (C₂ : Container s₂ p₂) → ⟦ C₁ ⟧ A P.× ⟦ C₂ ⟧ A → ⟦ C₁ × C₂ ⟧ A from-× : (C₁ : Container s₁ p₁) (C₂ : Container s₂ p₂) → ⟦ C₁ × C₂ ⟧ A → ⟦ C₁ ⟧ A P.× ⟦ C₂ ⟧ A to-Π : (I : Set i) (Cᵢ : I → Container s p) → (∀ i → ⟦ Cᵢ i ⟧ A) → ⟦ Π I Cᵢ ⟧ A from-Π : (I : Set i) (Cᵢ : I → Container s p) → ⟦ Π I Cᵢ ⟧ A → ∀ i → ⟦ Cᵢ i ⟧ A to-⊎ : (C₁ : Container s₁ p) (C₂ : Container s₂ p) → ⟦ C₁ ⟧ A S.⊎ ⟦ C₂ ⟧ A → ⟦ C₁ ⊎ C₂ ⟧ A from-⊎ : (C₁ : Container s₁ p) (C₂ : Container s₂ p) → ⟦ C₁ ⊎ C₂ ⟧ A → ⟦ C₁ ⟧ A S.⊎ ⟦ C₂ ⟧ A to-Σ : (I : Set i) (C : I → Container s p) → (∃ λ i → ⟦ C i ⟧ A) → ⟦ Σ I C ⟧ A from-Σ : (I : Set i) (C : I → Container s p) → ⟦ Σ I C ⟧ A → ∃ λ i → ⟦ C i ⟧ A -
Added a non-dependent version of
Function.Base.flipdue to an issue noted in Pull Request #1812:flip′ : (A → B → C) → (B → A → C)
-
Added new proofs to
Data.List.PropertiescartesianProductWith-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
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.Divisibilitym%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.GCDGCD-* : ∀ {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ℚᵘ ≤-steps : ∀ {p q r} → NonNegative r → p ≤ q → p ≤ r + q 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 -
In
Data.List.NonEmpty.Base:drop+ : ℕ → List⁺ A → List⁺ A
When drop+ping more than the size of the length of the list, the last element remains.
-
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 functions and proofs in
Data.Nat.GeneralisedArithmetic:iterate : (A → A) → A → ℕ → A iterate-is-fold : ∀ (z : A) s m → fold z s m ≡ iterate s z m
-
Added new proofs to
Function.Properties.Inverse:Inverse⇒Injection : Inverse S T → Injection S T ↔⇒↣ : A ↔ B → A ↣ B
-
Added a new isomorphism to
Data.Fin.Properties:2↔Bool : Fin 2 ↔ Bool
-
Added new isomorphisms to
Data.Unit.Polymorphic.Properties:⊤↔⊤* : ⊤ {ℓ} ↔ ⊤*
-
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↔ : ∀ n → A ↔ B → A ^ n ↔ B ^ n Fin[m^n]↔Fin[m]^n : ∀ m n → Fin (m ^ n) ↔ Fin m Vec.^ n
-
Added new functions to
Function.Properties.Inverse:↔-refl : Reflexive _↔_ ↔-sym : Symmetric _↔_ ↔-trans : Transitive _↔_
-
Added new isomorphisms to
Function.Properties.Inverse:↔-fun : A ↔ B → C ↔ D → (A → C) ↔ (B → D)
-
Added new function to
Data.Fin.Propertiesi≤inject₁[j]⇒i≤1+j : i ≤ inject₁ j → i ≤ suc j
-
Added new function to
Data.Fin.Induction<-weakInduction-startingFrom : P i → (∀ j → P (inject₁ j) → P (suc j)) → ∀ {j} → j ≥ i → P j