diff options
author | Helmut Grohne <helmut@subdivi.de> | 2012-08-30 15:33:46 +0200 |
---|---|---|
committer | Helmut Grohne <helmut@subdivi.de> | 2012-08-30 15:59:29 +0200 |
commit | 359f4a9b2297558e26b82d3971810d12de607382 (patch) | |
tree | 8652945075a39f128210b12d72e8993e6ffb38f9 | |
parent | 7391996c5907714d75adba63c8a8063da77a655b (diff) | |
download | bidiragda-359f4a9b2297558e26b82d3971810d12de607382.tar.gz |
prove half of the bijection in LiftGet
-rw-r--r-- | LiftGet.agda | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/LiftGet.agda b/LiftGet.agda index b2273f0..4c0f57d 100644 --- a/LiftGet.agda +++ b/LiftGet.agda @@ -47,22 +47,36 @@ length-toList (x ∷V xs) = cong suc (length-toList xs) vec-length : {A : Set} {n m : ℕ} → n ≡ m → Vec A n → Vec A m vec-length refl v = v +toList-fromList : {A : Set} → (l : List A) → toList (fromList l) ≡ l +toList-fromList [] = refl +toList-fromList (x ∷ xs) = cong (_∷_ x) (toList-fromList xs) + +vec-length-same : {A : Set} → (l : List A) → {n : ℕ} → (p : length l ≡ n) → toList (vec-length p (fromList l)) ≡ l +vec-length-same l refl = toList-fromList l + +getList-to-getVec-length-property : (get : get-type) → {C : Set} → {m : ℕ} → (v : Vec C m) → length (get (toList v)) ≡ length (get (replicate m tt)) +getList-to-getVec-length-property get {_} {m} v = begin + length (get (toList v)) + ≡⟨ getList-length get (toList v) ⟩ + length (get (replicate (length (toList v)) tt)) + ≡⟨ cong (length ∘ get ∘ flip replicate tt) (length-toList v) ⟩ + length (get (replicate m tt)) ∎ + getList-to-getVec : get-type → ∃ λ (getlen : ℕ → ℕ) → (getV-type getlen) getList-to-getVec get = getlen , get' where getlen : ℕ → ℕ getlen = getList-to-getlen get - length-prop : {C : Set} → (m : ℕ) → (v : Vec C m) → length (get (toList v)) ≡ length (get (replicate m tt)) - length-prop m v = begin - length (get (toList v)) - ≡⟨ getList-length get (toList v) ⟩ - length (get (replicate (length (toList v)) tt)) - ≡⟨ cong (length ∘ get ∘ flip replicate tt) (length-toList v) ⟩ - length (get (replicate m tt)) ∎ get' : {C : Set} {m : ℕ} → Vec C m → Vec C (getlen m) - get' {_} {m} v = vec-length (length-prop m v) (fromList (get (toList v))) + get' v = vec-length (getList-to-getVec-length-property get v) (fromList (get (toList v))) get-trafo-1 : (get : get-type) → {B : Set} → getVec-to-getList (proj₂ (getList-to-getVec get)) {B} ≗ get {B} get-trafo-1 get l = begin getVec-to-getList (proj₂ (getList-to-getVec get)) l - ≡⟨ {!!} ⟩ - get l ∎
\ No newline at end of file + ≡⟨ refl ⟩ + toList (proj₂ (getList-to-getVec get) (fromList l)) + ≡⟨ refl ⟩ + toList (vec-length (getList-to-getVec-length-property get (fromList l)) (fromList (get (toList (fromList l))))) + ≡⟨ vec-length-same (get (toList (fromList l))) (getList-to-getVec-length-property get (fromList l)) ⟩ + get (toList (fromList l)) + ≡⟨ cong get (toList-fromList l) ⟩ + get l ∎ |