Skip to content

Commit a6cf6b5

Browse files
Change implementation of Inductive Order on Nat (#1283)
* use boolean comparison in `Nat.Order.Inductive`, add non-strict and flipped inductive order, make faster instance search in `Fin.Literals` * fix typo
1 parent 16e6988 commit a6cf6b5

File tree

4 files changed

+41
-11
lines changed

4 files changed

+41
-11
lines changed

Cubical/CW/Approximation.agda

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -380,8 +380,7 @@ finCWmap→CellMap n C D f =
380380
... | inr n>m | inr n>sucm =
381381
cong (CW↪ D m)
382382
(funExt⁻ (cong (fmap ϕ) (ΣPathP (refl , (isProp<ᵗ _ _)))) x)
383-
∙ fcomm ϕ (m , <→<ᵗ n>m) x
384-
∙ funExt⁻ (cong (fmap ϕ) (ΣPathP (refl , (isProp<ᵗ _ _)))) _
383+
∙ fcomm ϕ (m , <ᵗ-trans (<→<ᵗ n>sucm) <ᵗsucm) x
385384

386385
silly : (x : _) smap ψ n x ≡ fmap ϕ (n , <ᵗsucm {n}) x
387386
silly x with (Dichotomyℕ n n)

Cubical/Data/Fin/Base.agda

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,10 @@ fromℕ≤ : (m n : ℕ) → m ≤′ n → Fin (suc n)
6565
fromℕ≤ zero _ _ = fzero
6666
fromℕ≤ (suc m) (suc n) m≤n = fsuc (fromℕ≤ m n m≤n)
6767

68+
-- Conversion from ℕ with an inductive definition of ≤
69+
fromℕ≤ᵗ : (m n : ℕ) m ≤ᵗ n Fin (suc n)
70+
fromℕ≤ᵗ m n t = m , t
71+
6872
-- A case analysis helper for induction.
6973
fsplit
7074
: (fj : Fin (suc k))

Cubical/Data/Fin/Literals.agda

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ open import Agda.Builtin.Nat
66
open import Agda.Builtin.FromNat
77
renaming (Number to HasFromNat)
88
open import Cubical.Data.Fin.Base
9-
using (Fin; fromℕ≤)
10-
open import Cubical.Data.Nat.Order.Recursive
11-
using (_≤_)
9+
using (Fin; fromℕ≤)
10+
open import Cubical.Data.Nat.Order.Inductive
11+
using (_≤ᵗ_)
1212

1313
instance
1414
fromNatFin : {n : _} HasFromNat (Fin (suc n))
1515
fromNatFin {n} = record
16-
{ Constraint = λ m m ≤ n
17-
; fromNat = λ m ⦃ m≤n ⦄ fromℕ≤ m n m≤n
16+
{ Constraint = λ m m ≤ n
17+
; fromNat = λ m ⦃ m≤n ⦄ fromℕ≤ m n m≤n
1818
}

Cubical/Data/Nat/Order/Inductive.agda

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,44 @@ open import Cubical.Data.Empty as ⊥
99
open import Cubical.Data.Unit
1010
open import Cubical.Data.Sigma
1111

12+
open import Cubical.Data.Bool.Base hiding (_≟_)
13+
1214
open import Cubical.Induction.WellFounded
1315

1416
open import Cubical.Relation.Nullary
1517

1618
-- TODO: unify with recursive.agda
1719

18-
-- inductive definition of <
20+
-- alternative definition of <
1921
_<ᵗ_ : (n m : ℕ) Type
20-
n <ᵗ zero =
21-
zero <ᵗ suc m = Unit
22-
suc n <ᵗ suc m = n <ᵗ m
22+
n <ᵗ m = Bool→Type (n <ᵇ m)
23+
24+
_≤ᵗ_ : (n m : ℕ) Type
25+
n ≤ᵗ m = n <ᵗ suc m
26+
27+
_>ᵗ_ : (n m : ℕ) Type
28+
n >ᵗ m = m <ᵗ n
29+
30+
_≥ᵗ_ : (n m : ℕ) Type
31+
n ≥ᵗ m = m ≤ᵗ n
32+
33+
-- <ᵗ satisfies the following judgmental equalities,
34+
-- which give <ᵗ an "inductive" presentation, justifying the module name:
35+
private
36+
_ : {n} n <ᵗ zero ≡ ⊥
37+
_ = refl
38+
39+
_ : {m} zero <ᵗ suc m ≡ Unit
40+
_ = refl
41+
42+
_ : {n m} suc n <ᵗ suc m ≡ n <ᵗ m
43+
_ = refl
44+
45+
-- direct inductive definition (avoided for performance reasons):
46+
-- _<ᵗ_ : (n m : ℕ) Type
47+
-- n <ᵗ zero = ⊥
48+
-- zero <ᵗ suc m = Unit
49+
-- suc n <ᵗ suc m = n <ᵗ m
2350

2451
data Trichotomyᵗ (m n : ℕ) : Type₀ where
2552
lt : m <ᵗ n Trichotomyᵗ m n

0 commit comments

Comments
 (0)