(* Copyright 2012 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * *   http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * Authors: Russell O'Connor *)
Require Vector.
Set Asymmetric Patterns.
Set Implicit Arguments.
Unset Strict Implicit.

(* Specifications: *)
Lemma Vector_map_id n a (f : a -> a) (v : Vector.t a n) :
(forall x, f x = x) -> (Vector.map f v) = v.
Lemma Vector_map_compose n a b c (g : b -> c) (f : a -> b) (h : a -> c) (v : Vector.t a n) :
(forall x, g (f x) = h x) -> Vector.map g (Vector.map f v) = Vector.map h v.
Lemma Vector_map_append n m a b (f : a -> b) (v1 : Vector.t a n) (v2 : Vector.t a m) :
Vector.map f (Vector.append v1 v2) = Vector.append (Vector.map f v1) (Vector.map f v2).
Lemma append_inj a n m (v1 v1' : Vector.t a n) (v2 v2' : Vector.t a m) :
Vector.append v1 v2 = Vector.append v1' v2' -> v1 = v1' /\ v2 = v2'.
Lemma append_assoc a n m p (v1 : Vector.t a n) (v2 : Vector.t a m) (v3 : Vector.t a p)
(e : n + (m + p) = n + m + p) :
eq_rect _ _ (Vector.append v1 (Vector.append v2 v3)) _ e = Vector.append (Vector.append v1 v2) v3.
Lemma to_list_eq A n m (e: n = m) : forall (v1 : Vector.t A n) (v2 : Vector.t A m),
Vector.to_list v1 = Vector.to_list v2 -> eq_rect _ (Vector.t A) v1 _ e = v2.