module Algebra.Field.Base where open import Level open import Function open import Relation.Binary open import Relation.Nullary as N open import Algebra record IsField {ℓ ℓ'} {Carrier : Set ℓ} (_≈_ : Rel Carrier ℓ') (0# 1# : Carrier) (-_ : Op₁ Carrier) (_+_ _*_ : Op₂ Carrier) (inv : (p : Carrier) (p≠0 : ¬ (p ≈ 0#)) → Carrier) : Set (ℓ ⊔ ℓ') where infix 4 _≉_ _≉_ : Rel Carrier _ x ≉ y = ¬ (x ≈ y) field isCommutativeRing : IsCommutativeRing _≈_ _+_ _*_ -_ 0# 1# hasInverse : (x : Carrier) (x≭0 : ¬ x ≈ 0#) → (x * inv x x≭0) ≈ 1# 0≢1 : 0# ≉ 1# open IsCommutativeRing isCommutativeRing public div : (p q : Carrier) → q ≉ 0# → Carrier div p q q≉0 = p * inv q q≉0 record Field ℓ ℓ' : Set (suc (ℓ ⊔ ℓ')) where constructor fieldc infix 8 -_ infixl 7 _*_ infixl 6 _+_ field Carrier : Set ℓ _≈_ : Rel Carrier ℓ' 0# 1# : Carrier -_ : Op₁ Carrier _+_ _*_ : Op₂ Carrier inv : (p : Carrier) (p≠0 : ¬ (p ≈ 0#)) → Carrier isField : IsField _≈_ 0# 1# -_ _+_ _*_ inv open IsField isField public commutativeRing : CommutativeRing _ _ commutativeRing = record { isCommutativeRing = isCommutativeRing } open CommutativeRing commutativeRing public using ( commutativeSemiring ; ring ; +-rawMagma; +-magma; +-unitalMagma; +-commutativeMagma ; +-semigroup; +-commutativeSemigroup ; *-rawMagma; *-magma; *-commutativeMagma; *-semigroup; *-commutativeSemigroup ; +-rawMonoid; +-monoid; +-commutativeMonoid ; *-rawMonoid; *-monoid; *-commutativeMonoid ; nearSemiring; semiringWithoutOne ; semiringWithoutAnnihilatingZero; semiring ; commutativeSemiringWithoutOne )