MyNixOS website logo
Description

Algebraic structures on oriented entities and limits as a tool kit to solve algebraic problems.

Basic definition of algebraic structures on oriented entities.

First of all we define entities (OAlg.Entity.Definition). Based on them and since we look at algebra through the lens of categories, we define oriented (OAlg.Structure.Oriented.Definition) structures on which, by means of a suitable partially defined multiplication, multiplicative (OAlg.Structure.Multiplicative.Definition) structures are defined. If one provides such a multiplicative structure with a matching additive (OAlg.Structure.Additive.Definition) structure, one obtains distributive (OAlg.Structure.Distributive.Definition) structures on which matrices (OAlg.Entity.Matrix.Definition) are build. If an additive structure is provided with a matching scalar multiplication, vectorial (OAlg.Structure.Vectorial.Definition) structures are obtained, which then form - together with the distributive structures - the basis for algebraic (OAlg.Structure.Algebraic.Definition) structures

Limits (OAlg.Limes.Limits) - in context of categories - serve as a backbone for solving algebraic problems, e. g. finding all solutions of the equation a * x == 0 is given by the kernel (OAlg.Limes.KernelsAndCokernels) of a.

Particular attention is paid to the duality (OAlg.Data.Dualisable) of concepts - viewed through the lens of categories - so that the implementation of the dual concept could be traced back to the original one to avoid duplicate or redundant implementation efforts.

A central feature in this package is that all functions defined here - unless otherwise stated - are total and means if the input values are valid (OAlg.Data.Validable) then the resulting value is also valid. Most functions do not check their preconditions. Therefore, all data structures defined here are provided with a property section that is translated into a corresponding statement (OAlg.Data.Statement.Definition) so that they can be validated (OAlg.Control.Validate) as needed. If there is an exception to this rule - such as for partially defined algebraic operators - the rule is extended by if the input values are valid and fulfill the additional required properties, then the resulting value is also valid. Most of the algebraic operators do check there additional required preconditions.

Since the algebraic operators - such as (*), (+), (.)... - have been redefined here, one should exclude the standard Prelude when using this package, to avoid ambiguity, and use the Prelude (OAlg.Prelude) provided here.

Throughout the descripitions in this package we denote type variables in bold lower case letters to distinguishing them from variables for values of a type.

Since we take the view that a value of a data structure or an instance of a class must strictly fulfill the required properties to be valid, Double, for example, has not been implemented as a numerical type.

Please see also the README on GitHub at https://github.com/zErichGut/oalg-main/blob/main/oalg-base/README.md

oalg-base

A package for solving algebraic problems purely written in Haskell. See the contents in the provided documentation.

Metadata

Version

1.1.4.0

Platforms (75)

    Darwin
    FreeBSD
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64_be-none
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-darwin
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • i686-darwin
  • i686-freebsd
  • i686-genode
  • i686-linux
  • i686-netbsd
  • i686-none
  • i686-openbsd
  • i686-windows
  • javascript-ghcjs
  • loongarch64-linux
  • m68k-linux
  • m68k-netbsd
  • m68k-none
  • microblaze-linux
  • microblaze-none
  • microblazeel-linux
  • microblazeel-none
  • mips-linux
  • mips-none
  • mips64-linux
  • mips64-none
  • mips64el-linux
  • mipsel-linux
  • mipsel-netbsd
  • mmix-mmixware
  • msp430-none
  • or1k-none
  • powerpc-netbsd
  • powerpc-none
  • powerpc64-linux
  • powerpc64le-linux
  • powerpcle-none
  • riscv32-linux
  • riscv32-netbsd
  • riscv32-none
  • riscv64-linux
  • riscv64-netbsd
  • riscv64-none
  • rx-none
  • s390-linux
  • s390-none
  • s390x-linux
  • s390x-none
  • vc4-none
  • wasm32-wasi
  • wasm64-wasi
  • x86_64-cygwin
  • x86_64-darwin
  • x86_64-freebsd
  • x86_64-genode
  • x86_64-linux
  • x86_64-netbsd
  • x86_64-none
  • x86_64-openbsd
  • x86_64-redox
  • x86_64-solaris
  • x86_64-windows