mirror of
https://github.com/Smaug123/agdaproofs
synced 2025-10-13 15:48:39 +00:00
41 lines
2.2 KiB
Agda
41 lines
2.2 KiB
Agda
{-# OPTIONS --safe --warning=error --without-K #-}
|
||
|
||
open import LogicalFormulae
|
||
open import Rings.Definition
|
||
open import Setoids.Setoids
|
||
open import Sets.EquivalenceRelations
|
||
open import Rings.IntegralDomains.Definition
|
||
open import Rings.IntegralDomains.Lemmas
|
||
|
||
open import Agda.Primitive using (Level; lzero; lsuc; _⊔_)
|
||
|
||
module Fields.FieldOfFractions.Setoid {a b : _} {A : Set a} {S : Setoid {a} {b} A} {_+_ : A → A → A} {_*_ : A → A → A} {R : Ring S _+_ _*_} (I : IntegralDomain R) where
|
||
|
||
record fieldOfFractionsSet : Set (a ⊔ b) where
|
||
field
|
||
num : A
|
||
denom : A
|
||
.denomNonzero : (Setoid._∼_ S denom (Ring.0R R) → False)
|
||
|
||
fieldOfFractionsSetoid : Setoid fieldOfFractionsSet
|
||
Setoid._∼_ fieldOfFractionsSetoid (record { num = a ; denom = b ; denomNonzero = b!=0 }) (record { num = c ; denom = d ; denomNonzero = d!=0 }) = Setoid._∼_ S (a * d) (b * c)
|
||
Equivalence.reflexive (Setoid.eq fieldOfFractionsSetoid) {record { num = a ; denom = b ; denomNonzero = b!=0 }} = Ring.*Commutative R
|
||
Equivalence.symmetric (Setoid.eq fieldOfFractionsSetoid) {record { num = a ; denom = b ; denomNonzero = b!=0 }} {record { num = c ; denom = d ; denomNonzero = d!=0 }} ad=bc = transitive (Ring.*Commutative R) (transitive (symmetric ad=bc) (Ring.*Commutative R))
|
||
where
|
||
open Equivalence (Setoid.eq S)
|
||
Equivalence.transitive (Setoid.eq fieldOfFractionsSetoid) {record { num = a ; denom = b ; denomNonzero = b!=0 }} {record { num = c ; denom = d ; denomNonzero = d!=0 }} {record { num = e ; denom = f ; denomNonzero = f!=0 }} ad=bc cf=de = p5
|
||
where
|
||
open Setoid S
|
||
open Ring R
|
||
open Equivalence eq
|
||
p : (a * d) * f ∼ (b * c) * f
|
||
p = Ring.*WellDefined R ad=bc reflexive
|
||
p2 : (a * f) * d ∼ b * (d * e)
|
||
p2 = transitive (transitive (symmetric *Associative) (transitive (*WellDefined reflexive *Commutative) *Associative)) (transitive p (transitive (symmetric *Associative) (*WellDefined reflexive cf=de)))
|
||
p3 : (a * f) * d ∼ (b * e) * d
|
||
p3 = transitive p2 (transitive (*WellDefined reflexive *Commutative) *Associative)
|
||
p4 : ((d ∼ 0R) → False) → ((a * f) ∼ (b * e))
|
||
p4 = cancelIntDom I (transitive *Commutative (transitive p3 *Commutative))
|
||
p5 : (a * f) ∼ (b * e)
|
||
p5 = p4 λ t → exFalso (d!=0 t)
|