Skip to content

Commit ad0450c

Browse files
committed
vlookup
1 parent 347926a commit ad0450c

File tree

3 files changed

+25
-10
lines changed

3 files changed

+25
-10
lines changed

Core.agda

+6-10
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,7 @@ _≅_ : ∀ {a b} {α : Level a} {β : Level b} {A : Univ α} {B : Univ β} ->
5555

5656
data Desc {i b} {ι : Level i} (I : Type ι) (β : Level b) : Set where
5757
var : ⟦ I ⟧ -> Desc I β
58-
π : {a} {α : Level a} .{{_ : a ≤ₘ b}}
59-
-> (A : Univ α) -> (⟦ A ⟧ -> Desc I β) -> Desc I β
58+
π : {a} {α : Level a} .{{_ : a ≤ₘ b}} -> (A : Univ α) -> (⟦ A ⟧ -> Desc I β) -> Desc I β
6059
_⊛_ : Desc I β -> Desc I β -> Desc I β
6160

6261
⟦_⟧ᵈ : {i a} {ι : Level i} {α : Level a} {I : Type ι}
@@ -97,15 +96,12 @@ data Univ where
9796
nat : Type₀
9897
enum :-> Type₀
9998
univ : {a} ->: Level a) -> Type α
100-
σ : {a b} {α : Level a} {β : Level b}
101-
-> (A : Univ α) -> (⟦ A ⟧ -> Univ β) -> Univ (α ⊔ β)
102-
π : {a b} {α : Level a} {β : Level b}
103-
-> (A : Univ α) -> (⟦ A ⟧ -> Univ β) -> Univ (α ⊔₀ β)
99+
σ : {a b} {α : Level a} {β : Level b} -> (A : Univ α) -> (⟦ A ⟧ -> Univ β) -> Univ (α ⊔ β)
100+
π : {a b} {α : Level a} {β : Level b} -> (A : Univ α) -> (⟦ A ⟧ -> Univ β) -> Univ (α ⊔₀ β)
104101
desc : {a i} {ι : Level i} -> Type ι ->: Level a) -> Type α
105102
imu : {i a} {ι : Level i} {α : Level a} {I : Type ι} -> Desc I α -> ⟦ I ⟧ -> Univ α
106103

107-
⟦_⟧ⁱ : {a b} {α : Level a} {β : Level b} {A : Univ α}
108-
-> (⟦ A ⟧ -> Univ β) -> ⟦ A ⟧ -> Set
104+
⟦_⟧ⁱ : {a b} {α : Level a} {β : Level b} {A : Univ α} -> (⟦ A ⟧ -> Univ β) -> ⟦ A ⟧ -> Set
109105
⟦ B ⟧ⁱ x = ⟦ B x ⟧
110106

111107
⟦ bot ⟧ =
@@ -243,8 +239,8 @@ mu D = imu D triv
243239
liftDesc : {i a b} {ι : Level i} {α : Level a} {β : Level b} {I : Type ι} .{{_ : a ≤ₘ b}}
244240
-> Desc I α -> Desc I β
245241
liftDesc (var i) = var i
246-
liftDesc {b = b} {{q₁}} (π {c} {{q₂}} A D) = π
247-
{{pright (pcong (c ⊔ₘ_) q₁) (ptrans (pcong (b ⊔ₘ_) q₂) q₁)}} A λ x -> liftDesc (D x)
242+
liftDesc {b = b} {{q₁}} (π {c} {{q₂}} A D) =
243+
π {{pright (pcong (c ⊔ₘ_) q₁) (ptrans (pcong (b ⊔ₘ_) q₂) q₁)}} A λ x -> liftDesc (D x)
248244
liftDesc (D ⊛ E) = liftDesc D ⊛ liftDesc E
249245

250246
var-inj : {i b} {ι : Level i} {I : Type ι} {β : Level b} {j₁ j₂ : ⟦ I ⟧}

Data/Vec.agda

+13
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
module OTT.Data.Vec where
22

33
open import OTT.Main
4+
open import OTT.Data.Fin
45

56
infixr 5 _∷ᵥ_
67

@@ -53,3 +54,15 @@ elimVec : ∀ {n a p} {α : Level a} {π : Level p} {A : Univ α}
5354
-> (xs : Vec A n)
5455
-> ⟦ P xs ⟧
5556
elimVec P f z = elim P (fromTuple (z , λ n x xs -> f x))
57+
58+
vlookupₑ : {n m a} {α : Level a} {A : Univ α} -> ⟦ n ≅ m ⇒ fin n ⇒ vec A m ⇒ A ⟧
59+
vlookupₑ p (fzeroₑ q) (vconsₑ r x xs) = x
60+
vlookupₑ {n} {m} p (fsucₑ {n′} q i) (vconsₑ {m′} r x xs) =
61+
vlookupₑ (left (suc n′) {m} {suc m′} (trans (suc n′) {n} {m} q p) r) i xs
62+
vlookupₑ {n} {m} p (fzeroₑ {n′} q) (vnilₑ r) =
63+
⊥-elim $ left (suc n′) {m} {0} (trans (suc n′) {n} {m} q p) r
64+
vlookupₑ {n} {m} p (fsucₑ {n′} q i) (vnilₑ r) =
65+
⊥-elim $ left (suc n′) {m} {0} (trans (suc n′) {n} {m} q p) r
66+
67+
vlookup : {n a} {α : Level a} {A : Univ α} -> Fin n -> Vec A n -> ⟦ A ⟧
68+
vlookup {n} = vlookupₑ (refl n)

Prelude.agda

+6
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,12 @@ tag-inj : ∀ {α β} {A : Set α} {B : A -> Set β} {x} {y₁ y₂ : B x}
4545
-> tag {B = B} y₁ ≡ tag y₂ -> y₁ ≡ y₂
4646
tag-inj prefl = prefl
4747

48+
data Match {ι α} {I : Set ι} {i} (A : I -> Set α) (x : A i) : Set (ι ⊔ₘ α) where
49+
matched : {j} -> (x′ : A j) -> [ A ] x ≅ x′ -> Match A x
50+
51+
match : {ι α} {I : Set ι} {i} -> (A : I -> Set α) -> (x : A i) -> Match A x
52+
match A x = matched x irefl
53+
4854
data IMatch {ι α β} {I : Set ι} {i} (A : I -> Set α) {x : A i}
4955
(B : {i} -> A i -> Set β) (y : B x) : Set (ι ⊔ₘ α ⊔ₘ β) where
5056
imatched : {i} {x : A i} -> (y′ : B x) -> [ A ][ B ] y ≅ y′ -> IMatch A B y

0 commit comments

Comments
 (0)