Poly.v
This commit is contained in:
parent
ec45376417
commit
027cc8dc14
1 changed files with 42 additions and 15 deletions
57
Poly.v
57
Poly.v
|
@ -406,18 +406,29 @@ Definition list123''' := [1; 2; 3].
|
||||||
Theorem app_nil_r : forall (X:Type), forall l:list X,
|
Theorem app_nil_r : forall (X:Type), forall l:list X,
|
||||||
l ++ [] = l.
|
l ++ [] = l.
|
||||||
Proof.
|
Proof.
|
||||||
(* FILL IN HERE *) Admitted.
|
intros H L.
|
||||||
|
induction L.
|
||||||
|
- reflexivity.
|
||||||
|
- simpl. rewrite -> IHL. reflexivity.
|
||||||
|
Qed.
|
||||||
|
|
||||||
Theorem app_assoc : forall A (l m n:list A),
|
Theorem app_assoc : forall A (l m n:list A),
|
||||||
l ++ m ++ n = (l ++ m) ++ n.
|
l ++ m ++ n = (l ++ m) ++ n.
|
||||||
Proof.
|
Proof.
|
||||||
(* FILL IN HERE *) Admitted.
|
intros A.
|
||||||
|
induction l.
|
||||||
|
- reflexivity.
|
||||||
|
- intros m n. simpl. rewrite <- IHl. reflexivity.
|
||||||
|
Qed.
|
||||||
|
|
||||||
Lemma app_length : forall (X:Type) (l1 l2 : list X),
|
Lemma app_length : forall (X:Type) (l1 l2 : list X),
|
||||||
length (l1 ++ l2) = length l1 + length l2.
|
length (l1 ++ l2) = length l1 + length l2.
|
||||||
Proof.
|
Proof.
|
||||||
(* FILL IN HERE *) Admitted.
|
intros X.
|
||||||
(** [] *)
|
induction l1.
|
||||||
|
- reflexivity.
|
||||||
|
- intros l2. simpl. rewrite <- IHl1. reflexivity.
|
||||||
|
Qed.
|
||||||
|
|
||||||
(** **** Exercise: 2 stars, standard, optional (more_poly_exercises)
|
(** **** Exercise: 2 stars, standard, optional (more_poly_exercises)
|
||||||
|
|
||||||
|
@ -426,13 +437,25 @@ Proof.
|
||||||
Theorem rev_app_distr: forall X (l1 l2 : list X),
|
Theorem rev_app_distr: forall X (l1 l2 : list X),
|
||||||
rev (l1 ++ l2) = rev l2 ++ rev l1.
|
rev (l1 ++ l2) = rev l2 ++ rev l1.
|
||||||
Proof.
|
Proof.
|
||||||
(* FILL IN HERE *) Admitted.
|
intros X.
|
||||||
|
induction l1. induction l2.
|
||||||
|
- reflexivity.
|
||||||
|
- simpl. rewrite -> app_nil_r. reflexivity.
|
||||||
|
- intros l2. simpl. rewrite -> IHl1. rewrite <- app_assoc. reflexivity.
|
||||||
|
Qed.
|
||||||
|
|
||||||
Theorem rev_involutive : forall X : Type, forall l : list X,
|
Theorem rev_involutive : forall X : Type, forall l : list X,
|
||||||
rev (rev l) = l.
|
rev (rev l) = l.
|
||||||
Proof.
|
Proof.
|
||||||
(* FILL IN HERE *) Admitted.
|
intros X.
|
||||||
(** [] *)
|
induction l.
|
||||||
|
- reflexivity.
|
||||||
|
- simpl.
|
||||||
|
rewrite -> rev_app_distr.
|
||||||
|
simpl.
|
||||||
|
rewrite -> IHl.
|
||||||
|
reflexivity.
|
||||||
|
Qed.
|
||||||
|
|
||||||
(* ================================================================= *)
|
(* ================================================================= *)
|
||||||
(** ** Polymorphic Pairs *)
|
(** ** Polymorphic Pairs *)
|
||||||
|
@ -515,13 +538,17 @@ Fixpoint combine {X Y : Type} (lx : list X) (ly : list Y)
|
||||||
given unit test. *)
|
given unit test. *)
|
||||||
|
|
||||||
Fixpoint split {X Y : Type} (l : list (X*Y))
|
Fixpoint split {X Y : Type} (l : list (X*Y))
|
||||||
: (list X) * (list Y)
|
: (list X) * (list Y) :=
|
||||||
(* REPLACE THIS LINE WITH ":= _your_definition_ ." *). Admitted.
|
match l with
|
||||||
|
| nil => (nil, nil)
|
||||||
|
| (x, y) :: t => match split t with
|
||||||
|
| (a, b) => (x :: a, y :: b)
|
||||||
|
end
|
||||||
|
end.
|
||||||
|
|
||||||
Example test_split:
|
Example test_split:
|
||||||
split [(1,false);(2,false)] = ([1;2],[false;false]).
|
split [(1,false);(2,false)] = ([1;2],[false;false]).
|
||||||
Proof.
|
Proof. reflexivity. Qed.
|
||||||
(* FILL IN HERE *) Admitted.
|
|
||||||
(** [] *)
|
(** [] *)
|
||||||
|
|
||||||
(* ================================================================= *)
|
(* ================================================================= *)
|
||||||
|
@ -696,16 +723,16 @@ Proof. reflexivity. Qed.
|
||||||
and returns a list of just those that are even and greater than
|
and returns a list of just those that are even and greater than
|
||||||
7. *)
|
7. *)
|
||||||
|
|
||||||
Definition filter_even_gt7 (l : list nat) : list nat
|
Definition filter_even_gt7 (l : list nat) : list nat :=
|
||||||
(* REPLACE THIS LINE WITH ":= _your_definition_ ." *). Admitted.
|
filter (fun n => andb (7 <? n) (evenb n)) l.
|
||||||
|
|
||||||
Example test_filter_even_gt7_1 :
|
Example test_filter_even_gt7_1 :
|
||||||
filter_even_gt7 [1;2;6;9;10;3;12;8] = [10;12;8].
|
filter_even_gt7 [1;2;6;9;10;3;12;8] = [10;12;8].
|
||||||
(* FILL IN HERE *) Admitted.
|
Proof. reflexivity. Qed.
|
||||||
|
|
||||||
Example test_filter_even_gt7_2 :
|
Example test_filter_even_gt7_2 :
|
||||||
filter_even_gt7 [5;2;6;19;129] = [].
|
filter_even_gt7 [5;2;6;19;129] = [].
|
||||||
(* FILL IN HERE *) Admitted.
|
Proof. reflexivity. Qed.
|
||||||
(** [] *)
|
(** [] *)
|
||||||
|
|
||||||
(** **** Exercise: 3 stars, standard (partition)
|
(** **** Exercise: 3 stars, standard (partition)
|
||||||
|
|
Loading…
Reference in a new issue