Source code on Github{-# OPTIONS --safe --without-K #-}
module Tactic.Solver.Ring.Tests.CommutativeRing where
open import Algebra using (CommutativeRing)
open import Relation.Binary.PropositionalEquality using (_≡_)
open import Tactic.Solver.Ring using (solve-≈)
module TestsℤCRConcrete where
open import Data.Integer using (+_)
open import Data.Integer.Properties using (+-*-commutativeRing)
open CommutativeRing +-*-commutativeRing using (_≈_; _+_; _*_; _-_; -_)
comm+ : ∀ a b → (a + b) ≈ (b + a)
comm+ = solve-≈ +-*-commutativeRing
assoc* : ∀ a b c → ((a * b) * c) ≈ (a * (b * c))
assoc* = solve-≈ +-*-commutativeRing
distrib-test : ∀ a b c → a * (b + c) ≈ a * b + a * c
distrib-test = solve-≈ +-*-commutativeRing
neg-comm : ∀ a b → - (a + b) ≈ - a + - b
neg-comm = solve-≈ +-*-commutativeRing
neg-double : ∀ a → - (- a) ≈ a
neg-double = solve-≈ +-*-commutativeRing
sub-as-add-neg : ∀ a b → a - b ≈ a + (- b)
sub-as-add-neg = solve-≈ +-*-commutativeRing
distrib-over-sub : ∀ a b c → a * (b - c) ≈ a * b - a * c
distrib-over-sub = solve-≈ +-*-commutativeRing
cancel-sub : ∀ a → a - a ≈ (+ 0)
cancel-sub = solve-≈ +-*-commutativeRing
lit-add : (+ 1) + (+ 1) ≈ (+ 2)
lit-add = solve-≈ +-*-commutativeRing
comm+-lit : ∀ a → (a + (+ 1)) ≈ ((+ 1) + a)
comm+-lit = solve-≈ +-*-commutativeRing
module TestsAbstractCR {c ℓ} (R : CommutativeRing c ℓ) where
open CommutativeRing R
comm+ : ∀ a b → (a + b) ≈ (b + a)
comm+ = solve-≈ R
assoc+ : ∀ a b c → ((a + b) + c) ≈ (a + (b + c))
assoc+ = solve-≈ R
comm* : ∀ a b → (a * b) ≈ (b * a)
comm* = solve-≈ R
assoc* : ∀ a b c → ((a * b) * c) ≈ (a * (b * c))
assoc* = solve-≈ R
distrib-test : ∀ a b c → a * (b + c) ≈ a * b + a * c
distrib-test = solve-≈ R
zero-add : ∀ a → 0# + a ≈ a
zero-add = solve-≈ R
one-mul : ∀ a → 1# * a ≈ a
one-mul = solve-≈ R
zero-mul : ∀ a → 0# * a ≈ 0#
zero-mul = solve-≈ R
one-mul' : ∀ a → a * 1# ≈ a
one-mul' = solve-≈ R
neg-self : ∀ a → - a ≈ - a
neg-self = solve-≈ R
neg-zero : - 0# ≈ 0#
neg-zero = solve-≈ R
neg-double : ∀ a → - (- a) ≈ a
neg-double = solve-≈ R
neg-comm : ∀ a b → - (a + b) ≈ - a + - b
neg-comm = solve-≈ R
add-inverse-right : ∀ a → a + (- a) ≈ 0#
add-inverse-right = solve-≈ R
add-inverse-left : ∀ a → (- a) + a ≈ 0#
add-inverse-left = solve-≈ R
sub-self : ∀ a → a - a ≈ 0#
sub-self = solve-≈ R
sub-as-add-neg : ∀ a b → a - b ≈ a + (- b)
sub-as-add-neg = solve-≈ R
sub-comm-via-neg : ∀ a b → a - b ≈ - (b - a)
sub-comm-via-neg = solve-≈ R
distrib-over-sub : ∀ a b c → a * (b - c) ≈ a * b - a * c
distrib-over-sub = solve-≈ R
binomial-neg : ∀ a b → (a - b) * (a + b) ≈ a * a - b * b
binomial-neg = solve-≈ R
perfect-square-neg : ∀ a b → (a - b) * (a - b) ≈ (a * a - (1# + 1#) * a * b) + b * b
perfect-square-neg = solve-≈ R
neg-distrib-mul : ∀ a b → (- a) * b ≈ - (a * b)
neg-distrib-mul = solve-≈ R
neg-times-neg : ∀ a b → (- a) * (- b) ≈ a * b
neg-times-neg = solve-≈ R