{-# OPTIONS --without-K --safe #-} -- Polynomials over a commutative ring in sparse Horner normal form. -- -- Much of the implementation is inspired by: -- -- B. Grégoire and A. Mahboubi, ‘Proving Equalities in a Commutative -- Ring Done Right in Coq’, in Theorem Proving in Higher Order -- Logics, Berlin, Heidelberg, 2005, vol. 3603, pp. 98–113. -- -- The main sources of efficience come from: -- -- * Careful arrangement of operators to maintain *syntactic equality*. -- -- * Avoiding of identities (like *1 or +0) with specialised data -- structures. open import Polynomial.Parameters module Polynomial.NormalForm {r₁ r₂ r₃} (homo : Homomorphism r₁ r₂ r₃) where open Homomorphism homo -- The "injection index" is what allows us to store the nested -- polynomials sparsely. open import Polynomial.NormalForm.InjectionIndex public -- The definition and types for the polynomial. open import Polynomial.NormalForm.Definition coeffs public -- Normalizing constructors. open import Polynomial.NormalForm.Construction coeffs public -- Definition of arithmetic operations etc. open import Polynomial.NormalForm.Operations coeffs public -- "Running" the polynomial on some input. open import Polynomial.NormalForm.Semantics homo public