Skip to content

Algebra

Thirty-three laws for the abstract-algebra trait tower: monoid and commutative-monoid, group and abelian-group, ring and commutative-ring, field and real-field, module and algebra over a ring, division algebra, conjugation (star), norm, semilattice, and the verdict lattice. Proved in lean/DeepCausalityFormal/Algebra/ and checked by law-tests in deep_causality_algebra/tests/formalization_lean/. These are the laws the Uniform Math surface relies on.

Every row is proved in Lean. The Lean proof and Rust witness cells give the file and theorem/test name, relative to the directories above.

id statement Lean proof Rust witness Test
algebra.add_monoid.assoc (a+b)+c = a+(b+c) for AddMonoid Monoid.lean :: add_monoid_assoc monoid_tests.rs :: test_add_monoid_assoc
algebra.add_monoid.identity a+0 = a ∧ 0+a = a for AddMonoid Monoid.lean :: add_monoid_identity monoid_tests.rs :: test_add_monoid_identity
algebra.monoid.left_id empty().combine(x) = x for the generic Monoid (Mathlib one_mul) MonoidGeneric.lean :: monoid_left_id monoid_generic_tests.rs :: test_generic_monoid_laws
algebra.monoid.right_id x.combine(empty()) = x (Mathlib mul_one) MonoidGeneric.lean :: monoid_right_id monoid_generic_tests.rs :: test_generic_monoid_laws
algebra.monoid.assoc combine associativity (Mathlib mul_assoc) MonoidGeneric.lean :: monoid_assoc monoid_generic_tests.rs :: test_generic_monoid_laws
algebra.commutative_monoid.comm x.combine(y) = y.combine(x) for CommutativeMonoid (Mathlib mul_comm) CommutativeMonoid.lean :: commutative_monoid_comm commutative_monoid_tests.rs :: test_commutative_monoid_comm
algebra.group.mul_inv a * a⁻¹ = 1 for Group Group.lean :: group_mul_inv group_tests.rs :: test_group_mul_inv
algebra.add_group.neg_cancel -a + a = 0 for AddGroup Group.lean :: add_group_neg_cancel group_tests.rs :: test_add_group_neg_cancel
algebra.abelian_group.add_comm a + b = b + a for AbelianGroup Group.lean :: abelian_group_add_comm group_tests.rs :: test_abelian_group_add_comm
algebra.ring.left_distrib a*(b+c) = a*b + a*c for Ring Ring.lean :: ring_left_distrib ring_tests.rs :: test_ring_left_distrib
algebra.ring.right_distrib (a+b)*c = a*c + b*c for Ring Ring.lean :: ring_right_distrib ring_tests.rs :: test_ring_right_distrib
algebra.ring.mul_assoc (a*b)*c = a*(b*c) for AssociativeRing Ring.lean :: ring_mul_assoc ring_tests.rs :: test_ring_mul_assoc
algebra.commutative_ring.mul_comm a*b = b*a for CommutativeRing Ring.lean :: commutative_ring_mul_comm ring_tests.rs :: test_commutative_ring_mul_comm
algebra.field.mul_inv_cancel a ≠ 0 → a * a⁻¹ = 1 for Field Field.lean :: field_mul_inv_cancel field_tests.rs :: test_field_mul_inv_cancel
algebra.field.inv_mul_cancel a ≠ 0 → a⁻¹ * a = 1 for Field Field.lean :: field_inv_mul_cancel field_tests.rs :: test_field_inv_mul_cancel
algebra.real_field.mul_pos 0<a → 0<b → 0<a*b for the ordered RealField Field.lean :: real_field_mul_pos field_tests.rs :: test_real_field_mul_pos
algebra.module.smul_add r•(x+y) = r•x + r•y for Module Module.lean :: module_smul_add module_tests.rs :: test_module_smul_add
algebra.module.add_smul (r+s)•x = r•x + s•x for Module Module.lean :: module_add_smul module_tests.rs :: test_module_add_smul
algebra.module.one_smul 1•x = x for Module Module.lean :: module_one_smul module_tests.rs :: test_module_one_smul
algebra.module.mul_smul (r*s)•x = r•(s•x) for Module Module.lean :: module_mul_smul module_tests.rs :: test_module_mul_smul
algebra.algebra.smul_mul_assoc r•(a*b) = (r•a)*b for Algebra over a ring Module.lean :: algebra_smul_mul_assoc module_tests.rs :: test_algebra_smul_mul_assoc
algebra.algebra.mul_smul_comm r•(a*b) = a*(r•b) for Algebra over a ring Module.lean :: algebra_mul_smul_comm module_tests.rs :: test_algebra_mul_smul_comm
algebra.division_algebra.mul_inv a ≠ 0 → a * a⁻¹ = 1 for DivisionAlgebra DivisionAlgebra.lean :: division_algebra_mul_inv division_algebra_tests.rs :: test_division_algebra_mul_inv
algebra.conjugate.star_star star (star a) = a for ConjugateScalar Scalar.lean :: conjugate_star_star scalar_tests.rs :: test_conjugate_star_star
algebra.conjugate.star_mul star (a*b) = star b * star a for ConjugateScalar Scalar.lean :: conjugate_star_mul scalar_tests.rs :: test_conjugate_star_mul
algebra.conjugate.star_add star (a+b) = star a + star b for ConjugateScalar Scalar.lean :: conjugate_star_add scalar_tests.rs :: test_conjugate_star_add
algebra.normed.norm_mul ‖a*b‖ = ‖a‖*‖b‖ for Normed Scalar.lean :: normed_norm_mul scalar_tests.rs :: test_normed_norm_mul
algebra.normed.norm_nonneg 0 ≤ ‖a‖ for Normed Scalar.lean :: normed_norm_nonneg scalar_tests.rs :: test_normed_norm_nonneg
algebra.semilattice.idempotent x.combine(x) = x for the boolean ∧-semilattice (Conjunction) CommutativeMonoid.lean :: semilattice_idempotent commutative_monoid_tests.rs :: test_semilattice_idempotent
algebra.semilattice.assoc associativity of the boolean ∧-semilattice CommutativeMonoid.lean :: semilattice_assoc commutative_monoid_tests.rs :: test_semilattice_assoc_and_comm
algebra.semilattice.comm commutativity of the boolean ∧-semilattice CommutativeMonoid.lean :: semilattice_comm commutative_monoid_tests.rs :: test_semilattice_assoc_and_comm
algebra.verdict.lattice_laws boolean verdict lattice: meet commutativity + absorption Verdict.lean :: verdict_meet_comm / verdict_absorption verdict_tests.rs :: test_verdict_lattice_laws
algebra.verdict.complement complement involution + De Morgan (Boolean); MV-algebra complement 1−p (Prob) Verdict.lean :: verdict_compl_compl / verdict_de_morgan verdict_tests.rs :: test_verdict_complement