@@ -96,6 +96,9 @@ suc-< p = pred-≤-pred (≤-suc p)
9696≤-predℕ {zero} = ≤-refl
9797≤-predℕ {suc n} = ≤-suc ≤-refl
9898
99+ ≤-reflexive : {m n : ℕ} → m ≡ n → m ≤ n
100+ ≤-reflexive p = 0 , p
101+
99102≤-trans : k ≤ m → m ≤ n → k ≤ n
100103≤-trans {k} {m} {n} (i , p) (j , q) = i + j , l2 ∙ (l1 ∙ q)
101104 where
@@ -200,6 +203,15 @@ predℕ-≤-predℕ {suc m} {suc n} ineq = pred-≤-pred ineq
200203<-+-≤ : m < n → k ≤ l → m + k < n + l
201204<-+-≤ p q = <≤-trans (<-+k p) (≤-k+ q)
202205
206+ <-suc : {n : ℕ} → n < suc n
207+ <-suc = 0 , refl
208+
209+ <SumLeft : {n k : ℕ} → n < n + suc k
210+ <SumLeft {n} {k} = k , +-suc k n ∙ +-comm (suc k) n
211+
212+ <SumRight : {n k : ℕ} → n < suc k + n
213+ <SumRight {n} {k} = k , +-suc k n
214+
203215¬squeeze< : {n m : ℕ} → ¬ (n < m) × (m < suc n)
204216¬squeeze< {n = n} ((zero , p) , t) = ¬m<m (subst (_< suc n) (sym p) t)
205217¬squeeze< {n = n} ((suc diff1 , p) , q) =
@@ -545,3 +557,36 @@ pattern s<s {m} {n} m<n = s≤s {m} {n} m<n
545557≤-∸-≥ n (suc l) zero r = ⊥.rec (¬-<-zero r)
546558≤-∸-≥ zero (suc l) (suc k) r = ≤-refl
547559≤-∸-≥ (suc n) (suc l) (suc k) r = ≤-∸-≥ n l k (pred-≤-pred r)
560+
561+ -- Some facts about increasing functions
562+
563+ isStrictlyIncreasing : (f : ℕ → ℕ) → Type
564+ isStrictlyIncreasing f = {m n : ℕ} → (m < n) → f m < f n
565+
566+ isIncreasing : (f : ℕ → ℕ) → Type
567+ isIncreasing f = {m n : ℕ} → m ≤ n → f m ≤ f n
568+
569+ strictlyIncreasing→Increasing : {f : ℕ → ℕ} → isStrictlyIncreasing f → isIncreasing f
570+ strictlyIncreasing→Increasing {f} fInc {m} {n} m≤n = case (≤-split m≤n) of
571+ λ { (inl m<n) → <-weaken (fInc m<n)
572+ ; (inr m=n) → ≤-reflexive (cong f m=n) }
573+
574+ module _ (f : ℕ → ℕ) (fInc : ((n : ℕ) → f n < f (suc n))) where
575+ open <-Reasoning
576+ sucIncreasing→StrictlyIncreasing : isStrictlyIncreasing f
577+ sucIncreasing→StrictlyIncreasing {m = m} {n = n} (k , m+k+1=n) =
578+ sucIncreasing→strictlyIncreasing' m n k m+k+1=n where
579+
580+ sucIncreasing→strictlyIncreasing' :
581+ (m : ℕ) → (n : ℕ) → (k : ℕ) → (k + suc m ≡ n) → f m < f n
582+
583+ sucIncreasing→strictlyIncreasing' m _ zero m+1=n =
584+ subst (λ n' → f m < f n') m+1=n (fInc m)
585+
586+ sucIncreasing→strictlyIncreasing' m _ (suc k) sk+sm=n =
587+ subst (λ n' → f m < f n') sk+sm=n $
588+ f m
589+ <⟨ sucIncreasing→strictlyIncreasing' m (k + suc m) k refl ⟩
590+ f (k + suc m)
591+ <≡⟨ fInc (k + suc m) ⟩
592+ f (suc k + suc m) ∎
0 commit comments