playground/coq/mathcomp/sumj.v

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.