diff --git a/CHANGELOG.md b/CHANGELOG.md index 2420e8ff38..21d17f71ad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -73,6 +73,24 @@ Additions to existing modules ≟-≡ : (eq : i ≡ j) → (i ≟ j) ≡ yes eq ≟-≡-refl : (i : Fin n) → (i ≟ i) ≡ yes refl ≟-≢ : (i≢j : i ≢ j) → (i ≟ j) ≡ no i≢j + inject-< : inject j < i + + record Least⟨_⟩ (P : Pred (Fin n) p) : Set p where + constructor least + field + witness : Fin n + example : P witness + minimal : ∀ {j} → .(j < witness) → ¬ P j + + record Least⟨¬_⟩ (P : Pred (Fin n) p) : Set p where + constructor μ + field + witness : Fin n + .contra : ¬ P witness + minimal : ∀ {j} → .(j < witness) → P j + + search-least⟨¬_⟩ : Decidable P → Π[ P ] ⊎ Least⟨¬ P ⟩ + ¬¬least⇒least : Decidable P → Least⟨¬ ∁ P ⟩ → Least⟨ P ⟩ ``` * In `Data.Nat.ListAction.Properties` diff --git a/src/Data/Fin/Properties.agda b/src/Data/Fin/Properties.agda index 2b3e2f1285..9366a0a09a 100644 --- a/src/Data/Fin/Properties.agda +++ b/src/Data/Fin/Properties.agda @@ -48,17 +48,18 @@ open import Relation.Binary.PropositionalEquality.Properties as ≡ open import Relation.Binary.PropositionalEquality as ≡ using (≡-≟-identity; ≢-≟-identity) open import Relation.Nullary.Decidable as Dec - using (Dec; _because_; yes; no; _×-dec_; _⊎-dec_; map′) + using (Dec; _because_; yes; no; _×-dec_; _⊎-dec_; map′; decidable-stable) open import Relation.Nullary.Negation.Core using (¬_; contradiction; contradiction′) +open import Relation.Nullary.Recomputable using (¬-recompute) open import Relation.Nullary.Reflects using (invert) open import Relation.Unary as U - using (U; Pred; Decidable; _⊆_; Satisfiable; Universal) + using (U; Pred; Decidable; _⊆_; ∁; Satisfiable; Universal) open import Relation.Unary.Properties using (U?) private variable - a : Level + a p q : Level A : Set a m n o : ℕ i j : Fin n @@ -470,6 +471,10 @@ toℕ-inject : ∀ {i : Fin n} (j : Fin′ i) → toℕ (inject j) ≡ toℕ j toℕ-inject {i = suc i} zero = refl toℕ-inject {i = suc i} (suc j) = cong suc (toℕ-inject j) +inject-< : ∀ {i : Fin n} (j : Fin′ i) → inject j < i +inject-< {i = suc i} zero = z