7
7
module Relation.Binary.Consequences where
9
9
open import Relation.Binary.Core hiding (refl)
10
open import Relation.Nullary.Core
10
open import Relation.Nullary
11
11
open import Relation.Binary.PropositionalEquality.Core
12
open import Data.Function
13
13
open import Data.Sum
14
14
open import Data.Product
15
15
open import Data.Empty
19
19
open import Relation.Binary.Consequences.Core public
22
∀ {a ℓ₁ ℓ₂} {A : Set a} → {≈ : Rel A ℓ₁} {< : Rel A ℓ₂} →
24
Transitive < → Irreflexive ≈ < → Asymmetric <
22
∀ {a ℓ₁ ℓ₂} {A : Set a} → {_≈_ : Rel A ℓ₁} {_<_ : Rel A ℓ₂} →
24
Transitive _<_ → Irreflexive _≈_ _<_ → Asymmetric _<_
25
25
trans∧irr⟶asym refl trans irrefl = λ x<y y<x →
26
26
irrefl refl (trans x<y y<x)
29
∀ {a ℓ₁ ℓ₂} {A : Set a} {≈ : Rel A ℓ₁} {< : Rel A ℓ₂} →
30
Irreflexive ≈ < → Antisymmetric ≈ < → Asymmetric <
29
∀ {a ℓ₁ ℓ₂} {A : Set a} {_≈_ : Rel A ℓ₁} {_<_ : Rel A ℓ₂} →
30
Irreflexive _≈_ _<_ → Antisymmetric _≈_ _<_ → Asymmetric _<_
31
31
irr∧antisym⟶asym irrefl antisym = λ x<y y<x →
32
32
irrefl (antisym x<y y<x) x<y
35
∀ {a ℓ₁ ℓ₂} {A : Set a} {≈ : Rel A ℓ₁} {< : Rel A ℓ₂} →
36
Asymmetric < → Antisymmetric ≈ <
35
∀ {a ℓ₁ ℓ₂} {A : Set a} {_≈_ : Rel A ℓ₁} {_<_ : Rel A ℓ₂} →
36
Asymmetric _<_ → Antisymmetric _≈_ _<_
37
37
asym⟶antisym asym x<y y<x = ⊥-elim (asym x<y y<x)
40
∀ {a ℓ₁ ℓ₂} {A : Set a} {≈ : Rel A ℓ₁} {< : Rel A ℓ₂} →
41
< Respects₂ ≈ → Symmetric ≈ →
42
Asymmetric < → Irreflexive ≈ <
43
asym⟶irr {< = _<_} resp sym asym {x} {y} x≈y x<y = asym x<y y<x
40
∀ {a ℓ₁ ℓ₂} {A : Set a} {_≈_ : Rel A ℓ₁} {_<_ : Rel A ℓ₂} →
41
_<_ Respects₂ _≈_ → Symmetric _≈_ →
42
Asymmetric _<_ → Irreflexive _≈_ _<_
43
asym⟶irr {_<_ = _<_} resp sym asym {x} {y} x≈y x<y = asym x<y y<x
46
46
y<y = proj₂ resp x≈y x<y
48
48
y<x = proj₁ resp (sym x≈y) y<y
51
∀ {a ℓ₁ ℓ₂} {A : Set a} {≈ : Rel A ℓ₁} {∼ : Rel A ℓ₂} →
52
∼ Respects₂ ≈ → Symmetric ≈ →
54
total⟶refl {≈ = ≈} {∼ = ∼} resp sym total = refl
51
∀ {a ℓ₁ ℓ₂} {A : Set a} {_≈_ : Rel A ℓ₁} {_∼_ : Rel A ℓ₂} →
52
_∼_ Respects₂ _≈_ → Symmetric _≈_ →
54
total⟶refl {_≈_ = _≈_} {_∼_ = _∼_} resp sym total = refl
57
57
refl {x} {y} x≈y with total x y
58
58
... | inj₁ x∼y = x∼y
60
60
proj₁ resp x≈y (proj₂ resp (sym x≈y) y∼x)
63
∀ {a ℓ₁ ℓ₂} {A : Set a} {≈ : Rel A ℓ₁} {≤ : Rel A ℓ₂} →
64
≈ ⇒ ≤ → Antisymmetric ≈ ≤ →
65
Total ≤ → Decidable ≈ → Decidable ≤
66
total+dec⟶dec {≈ = ≈} {≤ = ≤} refl antisym total _≟_ = dec
63
∀ {a ℓ₁ ℓ₂} {A : Set a} {_≈_ : Rel A ℓ₁} {_≤_ : Rel A ℓ₂} →
64
_≈_ ⇒ _≤_ → Antisymmetric _≈_ _≤_ →
65
Total _≤_ → Decidable _≈_ → Decidable _≤_
66
total+dec⟶dec {_≈_ = _≈_} {_≤_ = _≤_} refl antisym total _≟_ = dec
69
69
dec x y with total x y
70
70
... | inj₁ x≤y = yes x≤y
71
71
... | inj₂ y≤x with x ≟ y
73
73
... | no ¬x≈y = no (λ x≤y → ¬x≈y (antisym x≤y y≤x))
76
∀ {a ℓ₁ ℓ₂} {A : Set a} {≈ : Rel A ℓ₁} {< : Rel A ℓ₂} →
77
Trichotomous ≈ < → Asymmetric <
76
∀ {a ℓ₁ ℓ₂} {A : Set a} {_≈_ : Rel A ℓ₁} {_<_ : Rel A ℓ₂} →
77
Trichotomous _≈_ _<_ → Asymmetric _<_
78
78
tri⟶asym tri {x} {y} x<y x>y with tri x y
79
79
... | tri< _ _ x≯y = x≯y x>y
80
80
... | tri≈ _ _ x≯y = x≯y x>y
81
81
... | tri> x≮y _ _ = x≮y x<y
84
∀ {a ℓ₁ ℓ₂} {A : Set a} {≈ : Rel A ℓ₁} {< : Rel A ℓ₂} →
85
< Respects₂ ≈ → Symmetric ≈ →
86
Trichotomous ≈ < → Irreflexive ≈ <
84
∀ {a ℓ₁ ℓ₂} {A : Set a} {_≈_ : Rel A ℓ₁} {_<_ : Rel A ℓ₂} →
85
_<_ Respects₂ _≈_ → Symmetric _≈_ →
86
Trichotomous _≈_ _<_ → Irreflexive _≈_ _<_
87
87
tri⟶irr resp sym tri = asym⟶irr resp sym (tri⟶asym tri)
90
∀ {a ℓ₁ ℓ₂} {A : Set a} {≈ : Rel A ℓ₁} {< : Rel A ℓ₂} →
91
Trichotomous ≈ < → Decidable ≈
90
∀ {a ℓ₁ ℓ₂} {A : Set a} {_≈_ : Rel A ℓ₁} {_<_ : Rel A ℓ₂} →
91
Trichotomous _≈_ _<_ → Decidable _≈_
92
92
tri⟶dec≈ compare x y with compare x y
93
93
... | tri< _ x≉y _ = no x≉y
94
94
... | tri≈ _ x≈y _ = yes x≈y
95
95
... | tri> _ x≉y _ = no x≉y
98
∀ {a ℓ₁ ℓ₂} {A : Set a} {≈ : Rel A ℓ₁} {< : Rel A ℓ₂} →
99
Trichotomous ≈ < → Decidable <
98
∀ {a ℓ₁ ℓ₂} {A : Set a} {_≈_ : Rel A ℓ₁} {_<_ : Rel A ℓ₂} →
99
Trichotomous _≈_ _<_ → Decidable _<_
100
100
tri⟶dec< compare x y with compare x y
101
101
... | tri< x<y _ _ = yes x<y
102
102
... | tri≈ x≮y _ _ = no x≮y