diff --git a/CHANGELOG.md b/CHANGELOG.md index b1e8ab2fa6..afef29bc19 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1760,6 +1760,12 @@ New modules Algebra.Properties.Loop ``` +* Properties of (Commutative)Semiring: the Binomial Theorem + ``` + Algebra.Properties.CommutativeSemiring.Binomial + Algebra.Properties.Semiring.Binomial + ``` + * Some n-ary functions manipulating lists ``` Data.List.Nary.NonDependent @@ -1976,7 +1982,7 @@ Additions to existing modules * Added new proof to `Algebra.Properties.Monoid.Sum`: ```agda - sum-init-last : ∀ {n} (t : Vector _ (suc n)) → sum t ≈ sum (init t) + last t + sum-init-last : (t : Vector _ (suc n)) → sum t ≈ sum (init t) + last t ``` * Added new proofs to `Algebra.Properties.Semigroup`: diff --git a/src/Algebra/Properties/CommutativeSemiring/Binomial.agda b/src/Algebra/Properties/CommutativeSemiring/Binomial.agda new file mode 100644 index 0000000000..7a5524f3e8 --- /dev/null +++ b/src/Algebra/Properties/CommutativeSemiring/Binomial.agda @@ -0,0 +1,24 @@ +------------------------------------------------------------------------ +-- The Agda standard library +-- +-- The Binomial Theorem for Commutative Semirings +------------------------------------------------------------------------ + +{-# OPTIONS --cubical-compatible --safe #-} + +open import Algebra.Bundles + using (CommutativeSemiring) + +module Algebra.Properties.CommutativeSemiring.Binomial {a ℓ} (S : CommutativeSemiring a ℓ) where + +open CommutativeSemiring S +open import Algebra.Properties.Semiring.Exp semiring using (_^_) +import Algebra.Properties.Semiring.Binomial semiring as Binomial +open Binomial public hiding (theorem) + +------------------------------------------------------------------------ +-- Here it is + +theorem : ∀ n x y → (x + y) ^ n ≈ binomialExpansion x y n +theorem n x y = Binomial.theorem x y (*-comm x y) n + diff --git a/src/Algebra/Properties/Monoid/Sum.agda b/src/Algebra/Properties/Monoid/Sum.agda index dacb936285..2d8605a2b0 100644 --- a/src/Algebra/Properties/Monoid/Sum.agda +++ b/src/Algebra/Properties/Monoid/Sum.agda @@ -42,13 +42,17 @@ open import Algebra.Definitions.RawMonoid rawMonoid public ------------------------------------------------------------------------ -- An alternative mathematical-style syntax for sumₜ -infixl 10 sum-syntax +infixl 10 sum-syntax sum⁺-syntax sum-syntax : ∀ n → Vector Carrier n → Carrier sum-syntax _ = sum syntax sum-syntax n (λ i → x) = ∑[ i < n ] x +sum⁺-syntax = sum-syntax ∘ suc + +syntax sum⁺-syntax n (λ i → x) = ∑[ i ≤ n ] x + ------------------------------------------------------------------------ -- Properties diff --git a/src/Algebra/Properties/Semiring/Binomial.agda b/src/Algebra/Properties/Semiring/Binomial.agda new file mode 100644 index 0000000000..b4d5ef81db --- /dev/null +++ b/src/Algebra/Properties/Semiring/Binomial.agda @@ -0,0 +1,235 @@ +------------------------------------------------------------------------ +-- The Agda standard library +-- +-- The Binomial Theorem for *-commuting elements in a Semiring +-- +-- Freely adapted from PR #1287 by Maciej Piechotka (@uzytkownik) +------------------------------------------------------------------------ + +{-# OPTIONS --cubical-compatible --safe #-} + +open import Algebra.Bundles using (Semiring) +open import Data.Bool.Base using (true) +open import Data.Nat.Base as Nat hiding (_+_; _*_; _^_) +open import Data.Nat.Combinatorics + using (_C_; nCn≡1; nC1≡n; nCk+nC[k+1]≡[n+1]C[k+1]) +open import Data.Nat.Properties as Nat + using (<⇒<ᵇ; n<1+n; n∸n≡0; +-∸-assoc) +open import Data.Fin.Base as Fin + using (Fin; zero; suc; toℕ; fromℕ; inject₁) +open import Data.Fin.Patterns using (0F) +open import Data.Fin.Properties as Fin + using (toℕ