-
Notifications
You must be signed in to change notification settings - Fork 245
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[ refactor ] (Re)define (Is)TightApartness
and (Is)HeytingCommutativeRing
/(Is)HeytingField
#2588
base: master
Are you sure you want to change the base?
Changes from 15 commits
d171042
d07718c
7f2f4af
408433d
92f8248
55a7384
3786f55
5da81d0
31b51a6
f891093
a8d6284
1f9a4c1
48bef4a
cdc57d2
fb2da3e
8dcb5b6
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,85 @@ | ||
------------------------------------------------------------------------ | ||
-- The Agda standard library | ||
-- | ||
-- Properties of Heyting Fields | ||
------------------------------------------------------------------------ | ||
|
||
{-# OPTIONS --cubical-compatible --safe #-} | ||
|
||
open import Algebra.Apartness.Bundles using (HeytingField) | ||
|
||
module Algebra.Apartness.Properties.HeytingField | ||
{c ℓ₁ ℓ₂} (HF : HeytingField c ℓ₁ ℓ₂) where | ||
|
||
open import Function.Base using (_∘_) | ||
open import Data.Product.Base using (_,_; proj₁; proj₂) | ||
open import Algebra.Bundles using (CommutativeRing) | ||
|
||
open HeytingField HF | ||
open CommutativeRing commutativeRing using (ring; *-commutativeMonoid) | ||
|
||
open import Algebra.Definitions _≈_ | ||
using (Invertible; LeftInvertible; RightInvertible) | ||
open import Algebra.Properties.CommutativeMonoid *-commutativeMonoid | ||
using (invertibleˡ⇒invertible; invertibleʳ⇒invertible) | ||
open import Algebra.Properties.Ring ring | ||
using (x-0#≈x; -‿distribˡ-*; -‿distribʳ-*; -‿anti-homo-+; -‿involutive) | ||
open import Relation.Binary.Definitions using (Symmetric) | ||
import Relation.Binary.Reasoning.Setoid as ≈-Reasoning | ||
|
||
private | ||
variable | ||
x y z : Carrier | ||
|
||
|
||
invertibleˡ⇒# : LeftInvertible 1# _*_ (x - y) → x # y | ||
invertibleˡ⇒# = invertible⇒# ∘ invertibleˡ⇒invertible | ||
|
||
invertibleʳ⇒# : RightInvertible 1# _*_ (x - y) → x # y | ||
invertibleʳ⇒# = invertible⇒# ∘ invertibleʳ⇒invertible | ||
|
||
1#0 : 1# # 0# | ||
1#0 = invertibleˡ⇒# (1# , 1*[x-0]≈x) | ||
where | ||
1*[x-0]≈x : 1# * (x - 0#) ≈ x | ||
1*[x-0]≈x {x} = trans (*-identityˡ (x - 0#)) (x-0#≈x x) | ||
|
||
x#0y#0→xy#0 : x # 0# → y # 0# → x * y # 0# | ||
x#0y#0→xy#0 {x} {y} x#0 y#0 = helper (#⇒invertible x#0) (#⇒invertible y#0) | ||
Comment on lines
+47
to
+48
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @JacquesCarette 's wanting to refactor the proofs (and FTR, largely inherited from the original PR #1968 ...) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Er... no, in fact. Those properties require There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Could be. I was thinking of analogs to the There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Indeed: please raise a PR addressing #2288 ! |
||
where | ||
open ≈-Reasoning setoid | ||
|
||
helper : Invertible 1# _*_ (x - 0#) → Invertible 1# _*_ (y - 0#) → x * y # 0# | ||
helper (x⁻¹ , x⁻¹*x≈1 , x*x⁻¹≈1) (y⁻¹ , y⁻¹*y≈1 , y*y⁻¹≈1) | ||
= invertibleˡ⇒# (y⁻¹ * x⁻¹ , y⁻¹*x⁻¹*x*y≈1) | ||
where | ||
|
||
y⁻¹*x⁻¹*x*y≈1 : y⁻¹ * x⁻¹ * (x * y - 0#) ≈ 1# | ||
y⁻¹*x⁻¹*x*y≈1 = begin | ||
y⁻¹ * x⁻¹ * (x * y - 0#) ≈⟨ *-congˡ (x-0#≈x (x * y)) ⟩ | ||
y⁻¹ * x⁻¹ * (x * y) ≈⟨ *-assoc y⁻¹ x⁻¹ (x * y) ⟩ | ||
y⁻¹ * (x⁻¹ * (x * y)) ≈⟨ *-congˡ (*-assoc x⁻¹ x y) ⟨ | ||
y⁻¹ * ((x⁻¹ * x) * y) ≈⟨ *-congˡ (*-congʳ (*-congˡ (x-0#≈x x))) ⟨ | ||
y⁻¹ * ((x⁻¹ * (x - 0#)) * y) ≈⟨ *-congˡ (*-congʳ x⁻¹*x≈1) ⟩ | ||
y⁻¹ * (1# * y) ≈⟨ *-congˡ (*-identityˡ y) ⟩ | ||
y⁻¹ * y ≈⟨ *-congˡ (x-0#≈x y) ⟨ | ||
y⁻¹ * (y - 0#) ≈⟨ y⁻¹*y≈1 ⟩ | ||
1# ∎ | ||
|
||
#-congʳ : x ≈ y → x # z → y # z | ||
#-congʳ {x} {y} {z} x≈y = helper ∘ #⇒invertible | ||
where | ||
open ≈-Reasoning setoid | ||
|
||
helper : Invertible 1# _*_ (x - z) → y # z | ||
helper (x-z⁻¹ , x-z⁻¹*x-z≈1# , x-z*x-z⁻¹≈1#) | ||
= invertibleˡ⇒# (x-z⁻¹ , x-z⁻¹*y-z≈1) | ||
where | ||
x-z⁻¹*y-z≈1 : x-z⁻¹ * (y - z) ≈ 1# | ||
x-z⁻¹*y-z≈1 = begin | ||
x-z⁻¹ * (y - z) ≈⟨ *-congˡ (+-congʳ x≈y) ⟨ | ||
x-z⁻¹ * (x - z) ≈⟨ x-z⁻¹*x-z≈1# ⟩ | ||
1# ∎ | ||
|
||
#-congˡ : y ≈ z → x # y → x # z | ||
#-congˡ y≈z = #-sym ∘ #-congʳ y≈z ∘ #-sym |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I know this is a draft, but in the final version it would be good to explain broadly what the refactorings actually are here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
See latest commits, hopefully enough, but not too much, detail now!