60 lines
1.5 KiB
Coq
60 lines
1.5 KiB
Coq
From mathcomp Require Import all_ssreflect.
|
|
|
|
Fail Compute \sum_(0 < i < 12.*2 | odd i) i.
|
|
(* Fail Compute \sum_i(0 < i < 12.*2 | odd i) i. *)
|
|
|
|
From CoqEAL Require Import hrel param refinements trivial_seq.
|
|
From CoqEAL Require Import binnat binint seqpoly binord seqmx.
|
|
Check refines_rel.
|
|
|
|
Check 3.-tuple.
|
|
Search ".-tuple".
|
|
Print nil_tuple.
|
|
Check tval.
|
|
|
|
Definition foo (n:nat): n.-tuple bool -> seq bool -> Type :=
|
|
fun btup bseq => tval btup = bseq.
|
|
|
|
|
|
Lemma sum_odd_n (n: nat): \sum_(0 <= i < n.*2 | odd i) i = n^2.
|
|
Proof.
|
|
rewrite unlock.
|
|
Fail rewrite bigop_unlock.
|
|
Restart.
|
|
elim: n.
|
|
by rewrite unlock /=.
|
|
rewrite unlock /=.
|
|
Restart.
|
|
elim: n => [ | n IH].
|
|
rewrite double0.
|
|
rewrite -mulnn muln0.
|
|
by rewrite big_geq.
|
|
Check big_ord_recr.
|
|
Search "big" nat.
|
|
rewrite -big_ord_recr.
|
|
rewrite (@big_cat_nat _ _ _ (n.*2)).
|
|
rewrite big_ord_recr.
|
|
|
|
|
|
(* rewrite unlock. *)
|
|
Search bigop "_ind".
|
|
Search bigop "_rec".
|
|
(* elim/big_ind2. *)
|
|
(* Search reducebig. *)
|
|
(* rewrite -bigop_unlock. *)
|
|
(* move=> n. *)
|
|
Abort.
|
|
|
|
|
|
|
|
Lemma sum_odd_n (n: nat) : \sum_(0 <= i < n.*2 | odd i) i = n^2.
|
|
Proof.
|
|
elim: n => [//=|n IH]; first by rewrite double0 -mulnn muln0 big_geq.
|
|
rewrite (@big_cat_nat _ _ _ n.*2) //=; last by rewrite -!addnn leq_add.
|
|
rewrite IH -!mulnn mulSnr mulnSr -addnA.
|
|
congr (_ + _).
|
|
rewrite big_ltn_cond ?ifF ?odd_double //.
|
|
rewrite big_ltn_cond /ifT ?oddS ?odd_double //=.
|
|
by rewrite big_geq ?addn0 -addnn addnS // -addnn addSn.
|
|
Qed.
|