module Library.LessThan.Reasoning where

open import Library.Nat
open import Library.LessThan
open import Library.Equality

infix  1 begin_
infixr 2 _<=⟨⟩_ _<=⟨_⟩_ _==⟨_⟩_ _<⟨_⟩_ _<⟨⟩_
infix  3 _end

begin_ : {x y : ℕ} -> x <= y -> x <= y
begin_ p = p

_end : (x : ℕ) -> x <= x
_end _ = le-refl

_==⟨_⟩_ : (x : ℕ) {y z : ℕ} -> x == y -> y <= z -> x <= z
_==⟨_⟩_ _ refl p = p

_<=⟨_⟩_ : (x : ℕ) {y z : ℕ} -> x <= y -> y <= z -> x <= z
_<=⟨_⟩_ _ = le-trans

_<=⟨⟩_ : (x : ℕ) {y : ℕ} -> x <= y -> x <= y
_ <=⟨⟩ p = p

_<⟨_⟩_ : (x : ℕ) {y z : ℕ} -> x < y -> y <= z -> x < z
_<⟨_⟩_ _ = le-trans

_<⟨⟩_ : (x : ℕ) {y : ℕ} -> succ x <= y -> x < y
_ <⟨⟩ p = p