-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMisc.agda
63 lines (49 loc) · 1.67 KB
/
Misc.agda
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
{-# OPTIONS --rewriting #-}
module Misc where
open import Level renaming (suc to lsuc)
open import Data.Nat
open import Data.Nat.Properties using (+-assoc)
import Relation.Binary.PropositionalEquality as Eq
open Eq using (_≡_; refl; cong; sym)
open Eq.≡-Reasoning
open import Data.Vec
-- open import Relation.Binary.HeterogeneousEquality as H using (_≅_; refl)
{-# BUILTIN REWRITE _≡_ #-}
private
variable
ℓ ℓ′ : Level
n m o : ℕ
A : Set ℓ
B : Set ℓ′
n+1 : n + 1 ≡ suc n
n+1 {zero} = refl
n+1 {suc n} = cong suc (n+1 {n})
{-# REWRITE n+1 #-}
n+0 : n + 0 ≡ n
n+0 {zero} = refl
n+0 {suc n} = cong suc (n+0 {n})
{-# REWRITE n+0 #-}
map-++ : (f : A → B) → (as₁ : Vec A n) → (as₂ : Vec A m)
→ map f as₁ ++ map f as₂ ≡ map f (as₁ ++ as₂)
map-++ f [] as₂ = refl
map-++ f (x ∷ as₁) as₂ = cong (f x ∷_) (map-++ f as₁ as₂)
-- {-# REWRITE map-++ #-}
-- Needs heterogeneous equality
-- Already in Data.Vec.Properties.WithK
-- ++-assoc : (as₁ : Vec A n) → (as₂ : Vec A m) → (as₃ : Vec A o)
-- → (as₁ ++ as₂) ++ as₃ ≡ as₁ ++ (as₂ ++ as₃)
-- ++-assoc as₁ as₂ as₃ = ?
{-
-- Triggers an Agda "Internal Error" when used.
module _ where
private
-- Trick to work avoid need for heterogeneous equality
+-assoc′ : ∀ (m n o : ℕ) → (m + n) + o ≡ m + (n + o)
+-assoc′ = +-assoc
{-# REWRITE +-assoc′ #-}
++-assoc : ∀ (as₁ : Vec A m) (as₂ : Vec A n) (as₃ : Vec A o)
→ (as₁ ++ as₂) ++ as₃ ≡ as₁ ++ (as₂ ++ as₃)
++-assoc [] as₂ as₃ = refl
++-assoc (x ∷ as₁) as₂ as₃
rewrite (++-assoc as₁ as₂ as₃) = refl
-}