module Data.Bool.Order where
The implication ordering on Bool🔗
private R : Bool → Bool → Type R false _ = ⊤ R true true = ⊤ R true false = ⊥ record _≤_ (x y : Bool) : Type where constructor lift field .lower : R x y
≤-refl : ∀ {x} → x ≤ x ≤-refl {true} = lift tt ≤-refl {false} = lift tt ≤-trans : ∀ {x y z} → x ≤ y → y ≤ z → x ≤ z ≤-trans {true} {true} {true} p q = _ ≤-trans {false} {true} {true} p q = _ ≤-trans {false} {false} {true} p q = _ ≤-trans {false} {false} {false} p q = _ ≤-antisym : ∀ {x y} → x ≤ y → y ≤ x → x ≡ y ≤-antisym {true} {true} p q = refl ≤-antisym {false} {false} p q = refl
implies→≤ : ∀ {x y} → (So x → So y) → x ≤ y implies→≤ {true} {true} f = _ implies→≤ {false} {true} f = _ implies→≤ {false} {false} f = _ implies→≤ {true} {false} f with () ← f oh ≤→implies : ∀ {x y} → x ≤ y → So x → So y ≤→implies {true} {true} p q = oh so-antisym : ∀ {x y} → (So x → So y) → (So y → So x) → x ≡ y so-antisym p q = ≤-antisym (implies→≤ p) (implies→≤ q)
and-≤l : ∀ x y → and x y ≤ x and-≤l true true = _ and-≤l true false = _ and-≤l false true = _ and-≤l false false = _ and-≤r : ∀ x y → and x y ≤ y and-≤r true true = _ and-≤r true false = _ and-≤r false true = _ and-≤r false false = _ and-univ : ∀ x y z → x ≤ y → x ≤ z → x ≤ and y z and-univ false _ _ _ _ = _ and-univ true true true _ _ = _ or-≤l : ∀ x y → x ≤ or x y or-≤l true true = _ or-≤l true false = _ or-≤l false true = _ or-≤l false false = _ or-≤r : ∀ x y → y ≤ or x y or-≤r true true = _ or-≤r true false = _ or-≤r false true = _ or-≤r false false = _ or-univ : ∀ x y z → y ≤ x → z ≤ x → or y z ≤ x or-univ true true true _ _ = _ or-univ true true false _ _ = _ or-univ true false true _ _ = _ or-univ true false false _ _ = _ or-univ false false false _ _ = _ ≤-not : ∀ x y → x ≤ y → not y ≤ not x ≤-not true true _ = _ ≤-not false true _ = _ ≤-not false false _ = _ not-≤ : ∀ x y → not x ≤ not y → y ≤ x not-≤ true true _ = _ not-≤ true false _ = _ not-≤ false false _ = _