Module mathcomp.classical.unstable
From HB Require Import structures.From mathcomp Require Import boot order finmap ssralg ssrnum ssrint.
From mathcomp Require Import vector archimedean interval matrix.
Attributes warn(note="The unstable.v file should only be used inside analysis.",
cats="internal-analysis").
Set Implicit Arguments.
Unset Strict Implicit.
Unset Printing Implicit Defensive.
Import Order.TTheory GRing.Theory Num.Theory.
Local Open Scope ring_scope.
Section Clamp.
Context { : realDomainType} (
Source code
Source code
Hypothesis
Source code
Definition
Source code
Lemma
Source code
Lemma
Source code
Definition
Source code
Lemma
Source code
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
End Clamp.
Module
Source code
Import Order.
Definition
clamp_gele : forall {R : realDomainType} [min max : R], (min <= max)%R -> (forall x : R, (min <= clamp min max x)%R) * (forall x : R, (clamp min max x <= max)%R) clamp_gele is not universe polymorphic Arguments clamp_gele {R} [min max]%_ring_scope minmax clamp_gele is transparent Expands to: Constant mathcomp.classical.unstable.clamp_gele Declared in library mathcomp.classical.unstable, line 70, characters 11-21
Source code
End Order.
Definition
Source code
Section DFunWith.
Variables ( : eqType) ( : I' -> Type) ( : forall , T i).
Lemma
Source code
End DFunWith.
Lemma
Source code
( : 'M[V]_(m, n1)) ( : 'M[V]_(m, n2)) :
row_mx A1 A2 - row_mx B1 B2 = row_mx (A1 - B1) (A2 - B2).
Proof.
Section IntervalNumDomain.
Variable : numDomainType.
Implicit Types x : R.
Lemma
Source code
(- x \in Interval (BInfty _ ba) (BSide bb xb)) =
(x \in Interval (BSide (~~ bb) (- xb)) (BInfty _ (~~ ba))).
Lemma
Source code
(- x \in Interval (BSide ba xa) (BInfty _ bb)) =
(x \in Interval (BInfty _ (~~ bb)) (BSide (~~ ba) (- xa))).
End IntervalNumDomain.
Lemma
Source code
( : seq I) :
all (coprime (F a)) [seq F i | <- [seq <- l | P i]] ->
coprime (F a) (\prod_( <- l | P j) F j).
Proof.
Lemma
Source code
( : nat) :
pairwise coprime [seq F i | <- [seq <- r | P i]] ->
reflect (forall , i \in r -> P i -> F i %| n)
(\prod_( <- r | P i) F i %| n).
Proof.
by rewrite big_nil dvd1n; apply: ReflectT => i; rewrite in_nil.
rewrite big_cons; case: ifP => [Pa|nPa]; last first.
move/HI/equivP; apply; split=> [Fidvdn i|Fidvdn i il].
by rewrite in_cons => /predU1P[->|]; [rewrite nPa|exact: Fidvdn].
by apply: Fidvdn; rewrite in_cons il orbT.
rewrite map_cons pairwise_cons => /andP[allcoprimea pairwisecoprime].
rewrite Gauss_dvd; first exact: coprime_prodr.
apply: (equivP (andPP idP (HI pairwisecoprime))).
split=> [[Fadvdn Fidvdn] i|Fidvdn].
by rewrite in_cons => /predU1P[->//|]; exact: Fidvdn.
split=> [|i il].
by apply: Fidvdn => //; exact: mem_head.
by apply: Fidvdn; rewrite in_cons il orbT.
Qed.
Lemma
Source code
( : nat) :
((\prod_( <- r | P i) F i) ^ n = \prod_( <- r | P i) (F i) ^ n)%N.
Proof.
Lemma
Source code
(\prod_(m <= < y) i * \prod_(n <= < x) i <= \prod_(n + m <= < x + y) i)%N.
Proof.
rewrite [in leqRHS]/index_iota -addnBAC// iotaD big_cat/=.
rewrite mulnC leq_mul//.
by apply: leq_prod; move=> i _; rewrite leq_addr.
rewrite subnKC//.
rewrite -[in leqLHS](add0n m) big_addn.
rewrite [in leqRHS](_ : y - m = ((y - m + x) - x))%N.
by rewrite -addnBA// subnn addn0.
rewrite -[X in iota X _](add0n x) big_addn -addnBA// subnn addn0.
by apply: leq_prod => i _; rewrite leq_add2r leq_addr.
Qed.
Lemma
Source code
(x`! * y`! * ((n + m).+1)`! <= n`! * m`! * ((x + y).+1)`!)%N.
Proof.
rewrite (fact_split nx) -!mulnA leq_mul2l; apply/orP; right.
rewrite (fact_split my) mulnCA -!mulnA leq_mul2l; apply/orP; right.
rewrite [leqRHS](_ : _ =
(n + m).+1`! * \prod_((n + m).+2 <= < (x + y).+2) i)%N.
by rewrite -fact_split// ltnS leq_add.
rewrite mulnA mulnC leq_mul2l; apply/orP; right.
do 2 rewrite -addSn -addnS.
exact: leq_Mprod_prodD.
Qed.
Notation
Source code
Lemma
Source code
Proof.
have [m2n|nm2] := ltnP m.+2 (2 ^ n.+1)%N.
by exists n; rewrite m2n andbT (leq_trans h1).
exists n.+1; rewrite nm2/= -addn1.
rewrite -[X in (_ <= X)%N]prednK ?expn_gt0// -[X in (_ <= X)%N]addn1 leq_add2r.
by rewrite (leq_trans h2)// -subn1 leq_subRL ?expn_gt0// add1n ltn_exp2l.
Qed.
Notation "'nondecreasing_fun' f" := ({homo f : / (n <= m)%O >-> (n <= m)%O})
(at level 10).
Notation "'nonincreasing_fun' f" := ({homo f : / (n <= m)%O >-> (n >= m)%O})
(at level 10).
Notation "'increasing_fun' f" := ({mono f : / (n <= m)%O >-> (n <= m)%O})
(at level 10).
Notation "'decreasing_fun' f" := ({mono f : / (n <= m)%O >-> (n >= m)%O})
(at level 10).
Notation "'nondecreasing_seq' f" := ({homo f : / (n <= m)%nat >-> (n <= m)%O})
(at level 10).
Notation "'nonincreasing_seq' f" := ({homo f : / (n <= m)%nat >-> (n >= m)%O})
(at level 10).
Definition
Source code
( : predType T) ( : pT) ( : T -> T') :=
{in A &, nondecreasing f} \/ {in A &, {homo f : /~ (x <= y)%O}}.
Definition
Order.default_display : disp_t Order.default_display is not universe polymorphic Order.default_display is transparent Expands to: Constant mathcomp.classical.unstable.Order.default_display Declared in library mathcomp.classical.unstable, line 88, characters 11-26
Source code
( : predType T) ( : pT) ( : T -> T') :=
{in A &, {homo f : / (x < y)%O}} \/ {in A &, {homo f : /~ (x < y)%O}}.
Lemma
Source code
( : predType T) ( : pT) ( : T -> T') :
strict_monotonic A f -> monotonic A f.
Proof.
Lemma
Source code
Proof.
by rewrite ltn_neqAle fincr (inj_eq (incn_inj fincr)) -ltn_neqAle.
Qed.
Section path_lt.
Context { : orderType d}.
Implicit Types (a b c : T) (s : seq T).
Lemma
Source code
P a -> P (last a [seq <- s | P x]).
Proof.
Lemma
Source code
Proof.
apply: eq_in_filter => x xs.
by apply/negbTE; have := sa _ xs; rewrite ltNge; apply: contra => /ltW.
Qed.
Lemma
Source code
Proof.
by apply: eq_in_filter => x xs; exact: sa.
Qed.
Lemma
Source code
Lemma
Source code
(a < c)%O -> (c < b)%O -> path <%O a s -> last a s = b ->
last c [seq <- s | (c < x)%O] = b.
Proof.
move=> a b c ac cb _ ab.
by apply/eqP; rewrite eq_le (ltW cb) -ab (ltW ac).
rewrite rcons_path => /andP[ah ht]; rewrite last_rcons => tb.
by rewrite filter_rcons tb cb last_rcons.
Qed.
Lemma
Source code
Proof.
End path_lt.
Arguments last_filterP {d T a} P s.
Inductive
Source code
Source code
Reserved Notation "`1- r" (format "`1- r", at level 2).
Reserved Notation "f \^-1" (at level 1, format "f \^-1").
Lemma
Source code
( : X -> nat) : A != fset0 ->
(exists , i \in A /\ forall , j \in A -> f j <= f i)%nat.
Proof.
Lemma
Source code
(exists , i <= n /\ forall , j <= n -> f j <= f i)%N.
Proof.
Arguments big_rmcond {R idx op I r} P.
Arguments big_rmcond_in {R idx op I r} P.
Reserved Notation "`1- x" (format "`1- x", at level 2).
Lemma
Source code
( : I -> {set T}) :
(#|\bigcup_( <- r | P i) F i| <= \sum_( <- r | P i) #|F i|)%N.
Proof.
by rewrite (leq_trans (leq_card_setU _ _))// leq_add.
Qed.
Definition
proj : forall {I : Type} {T : I -> Type} (i : I), (forall i0 : I, T i0) -> T i proj is not universe polymorphic Arguments proj {I}%_type_scope {T}%_function_scope i f%_function_scope proj is transparent Expands to: Constant mathcomp.classical.unstable.proj Declared in library mathcomp.classical.unstable, line 93, characters 11-15 monotonic : forall [d : disp_t] [T : porderType d] [d' : disp_t] [T' : porderType d'] [pT : predType T], pT -> (T -> T') -> Prop monotonic is not universe polymorphic Arguments monotonic [d T d' T' pT] A f%_function_scope monotonic is transparent Expands to: Constant mathcomp.classical.unstable.monotonic Declared in library mathcomp.classical.unstable, line 224, characters 11-20 strict_monotonic : forall [d : disp_t] [T : porderType d] [d' : disp_t] [T' : porderType d'] [pT : predType T], pT -> (T -> T') -> Prop strict_monotonic is not universe polymorphic Arguments strict_monotonic [d T d' T' pT] A f%_function_scope strict_monotonic is transparent Expands to: Constant mathcomp.classical.unstable.strict_monotonic Declared in library mathcomp.classical.unstable, line 228, characters 11-27 onem : forall {R : pzRingType}, R -> R onem is not universe polymorphic Arguments onem {R} r%_ring_scope onem is transparent Expands to: Constant mathcomp.classical.unstable.onem Declared in library mathcomp.classical.unstable, line 332, characters 11-15
Source code
#[deprecated(since="mathcomp-analysis 1.15.0")]
Notation "`1- r" := (onem r) : ring_scope.
Reserved Notation "p '.~'" (format "p .~", at level 1).
Notation "p '.~'" := (onem p) : ring_scope.
Section onem_ring.
Context { : pzRingType}.
Implicit Type r : R.
Lemma
Source code
Lemma
Source code
Lemma
Source code
Proof.
Lemma
Source code
Lemma
Source code
Lemma
Source code
Lemma
Source code
End onem_ring.
Section onem_order.
Variable : numDomainType.
Implicit Types r : R.
Lemma
Source code
Proof.
Lemma
Source code
Lemma
Source code
Lemma
Source code
Lemma
Source code
Proof.
Lemma
Source code
End onem_order.
Lemma
Source code
(0 <= x <= 1 -> `| x.~ | <= 1)%R.
Proof.
Lemma
Source code
Lemma
Source code
(s / (s + t)).~ = t / (s + t).
Proof.
Lemma
Source code
Proof.
Lemma
Source code
reflect (forall , z > y -> x <= z) (x <= y).
Proof.
Lemma
Source code
reflect (forall , z < x -> z <= y) (x <= y).
Proof.
Definition
inv_fun : forall {T : Type} {R : unitRingType}, (T -> R) -> T -> R inv_fun is not universe polymorphic Arguments inv_fun {T}%_type_scope {R} f%_function_scope x / The reduction tactics unfold inv_fun when applied to 4 arguments inv_fun is transparent Expands to: Constant mathcomp.classical.unstable.inv_fun Declared in library mathcomp.classical.unstable, line 422, characters 11-18
Source code
Notation "f \^-1" := (inv_fun f) : ring_scope.
Arguments inv_fun {T R} _ _ /.
Definition
bound_side : forall [d : disp_t] [T : porderType d], bool -> itv_bound T -> bool bound_side is not universe polymorphic Arguments bound_side [d T] c%_bool_scope x bound_side is transparent Expands to: Constant mathcomp.classical.unstable.bound_side Declared in library mathcomp.classical.unstable, line 426, characters 11-21
Source code
if x is BSide c' _ then c == c' else false.
Lemma
Source code
x - y \is Num.real -> (`|x - y| < e) = (x - e < y < x + e).
Proof.
Definition
swap : forall {T1 T2 : Type}, T1 * T2 -> T2 * T1 swap is not universe polymorphic Arguments swap {T1 T2}%_type_scope x swap is transparent Expands to: Constant mathcomp.classical.unstable.swap Declared in library mathcomp.classical.unstable, line 433, characters 11-15
Source code
Section reassociate_products.
Context { : Type}.
Definition
prodA : forall {X Y Z : Type}, X * Y * Z -> X * (Y * Z) prodA is not universe polymorphic Arguments prodA {X Y Z}%_type_scope xyz prodA is transparent Expands to: Constant mathcomp.classical.unstable.prodA Declared in library mathcomp.classical.unstable, line 438, characters 11-16
Source code
Source code
(xyz.1.1, (xyz.1.2, xyz.2)).
Definition
prodAr : forall {X Y Z : Type}, X * (Y * Z) -> X * Y * Z prodAr is not universe polymorphic Arguments prodAr {X Y Z}%_type_scope xyz prodAr is transparent Expands to: Constant mathcomp.classical.unstable.prodAr Declared in library mathcomp.classical.unstable, line 441, characters 11-17
Source code
Source code
((xyz.1, xyz.2.1), xyz.2.2).
Lemma
Source code
Proof.
Lemma
Source code
Proof.
End reassociate_products.
Lemma
Source code
Proof.
Definition
map_pair : forall {S U : Type}, (S -> U) -> S * S -> U * U map_pair is not universe polymorphic Arguments map_pair {S U}%_type_scope f%_function_scope x map_pair is transparent Expands to: Constant mathcomp.classical.unstable.map_pair Declared in library mathcomp.classical.unstable, line 455, characters 11-19
Source code
(f x.1, f x.2).
Section order_min.
Variables ( : Order.disp_t) ( : orderType d).
Lemma
Source code
Proof.
End order_min.
Section bijection_forall.
Lemma
Source code
bijective f -> (forall , P y) <-> (forall , P (f x)).
Proof.
End bijection_forall.
Lemma
Source code
{in p, forall , P x /\ Q x} <->
{in p, forall , P x} /\ {in p, forall , Q x}.
Proof.
by split; [apply: cnd1 | apply: cnd2].
Qed.
Lemma
Source code
{in `[a, b] &, {mono f : / (x <= y)%O}} ->
{homo f : / x \in `[a, b] >-> x \in `[f a, f b]}.
Proof.
Lemma
Source code
{in `[a, b] &, {mono f : /~ (x <= y)%O}} ->
{homo f : / x \in `[a, b] >-> x \in `[f b, f a]}.
Proof.
Definition
sigT_fun : forall {I : Type} {X : I -> Type} {T : Type}, (forall i : I, X i -> T) -> {i : I & X i} -> T sigT_fun is not universe polymorphic Arguments sigT_fun {I}%_type_scope {X}%_function_scope {T}%_type_scope f%_function_scope x sigT_fun is transparent Expands to: Constant mathcomp.classical.unstable.sigT_fun Declared in library mathcomp.classical.unstable, line 504, characters 11-19
Source code
( : forall , X i -> T) ( : { & X i}) : T :=
(f (projT1 x) (projT2 x)).
Section FsetPartitions.
Variables : choiceType.
Implicit Types (x y z : T) (A B D X : {fset T}) (P Q : {fset {fset T}}).
Implicit Types (J : pred I) (F : I -> {fset T}).
Variables ( : Type) (
Source code
Let
Source code
(\big[op/idx]_( <- P) \big[op/idx]_( <- A | K x) E x)%fset.
Let
Source code
Lemma
Source code
( : {fset I}) :
(forall , i \in K -> j \in K -> i != j -> [disjoint F i & F j])%fset ->
\big[op/idx]_( <- \big[fsetU/fset0]_( <- K) (F x)) f i =
\big[op/idx]_( <- K) (\big[op/idx]_( <- F k) f i).
Proof.
have trivP : trivIfset P.
apply/trivIfsetP => _ _ /imfsetP[i iK ->] /imfsetP[j jK ->] neqFij.
move: iK; rewrite !inE/= => /andP[iK Fi0].
move: jK; rewrite !inE/= => /andP[jK Fj0].
by apply: (disjF _ _ iK jK); apply: contraNneq neqFij => ->.
have -> : (\bigcup_( <- K) F i)%fset = fcover P.
apply/esym; rewrite /P fcover_imfset big_mkcond /=; apply eq_bigr => i _.
by case: ifPn => // /negPn/eqP.
rewrite big_trivIfset // /rhs big_imfset => [i j iK /andP[jK notFj0] eqFij|] /=.
move: iK; rewrite !inE/= => /andP[iK Fi0].
by apply: contraNeq (disjF _ _ iK jK) _; rewrite -fsetI_eq0 eqFij fsetIid.
rewrite big_filter big_mkcond; apply eq_bigr => i _.
by case: ifPn => // /negPn /eqP ->; rewrite big_seq_fset0.
Qed.
End FsetPartitions.
Lemma
Source code
(forall , x \in s -> 0 <= x <= 1)%R -> (\prod_( <- s) j <= 1)%R.
Proof.
have /andP[y0 y1] : (0 <= y <= 1)%R by rewrite xs01// mem_head.
rewrite mulr_ile1 ?andbT//.
rewrite big_seq prodr_ge0// => x xs.
by have := xs01 x; rewrite inE xs orbT => /(_ _)/andP[].
by rewrite ih// => e xs; rewrite xs01// in_cons xs orbT.
Qed.
Lemma
Source code
Proof.
Lemma
Source code
[ : pred I] [ : I -> R] :
has P r ->
(forall : I, P i -> F i < G i) ->
\sum_( <- r | P i) F i < \sum_( <- r | P i) G i.
Proof.
case: filter (filter_all P r) => //= x {}r /andP[Px Pr] _ ltFG.
rewrite !big_cons ltr_leD// ?ltFG// -(all_filterP Pr) !big_filter.
by rewrite ler_sum => // i Pi; rewrite ltW ?ltFG.
Qed.
Lemma
Source code
(m < n)%N -> (forall : nat, (m <= i < n)%N -> F i < G i) ->
\sum_(m <= < n) F i < \sum_(m <= < n) G i.
Proof.
Lemma
Source code
(forall , P x <-> P' x) ->
(exists2 , P x & Q x) <-> (exists2 , P' x & Q x).
Proof.
Qed.
Lemma
Source code
(forall , Q x <-> Q' x) ->
(exists2 , P x & Q x) <-> (exists2 , P x & Q' x).
Proof.
Declare Scope signature_scope.
Delimit Scope signature_scope with signature.
Import -(notations) Morphisms.
Arguments Proper {A}%_type R%_signature m.
Arguments respectful {A B}%_type (R R')%_signature _ _.
Module
Source code
Notation " R ++> R' " := (@respectful _ _ (R%signature) (R'%signature))
(right associativity, at level 55) : signature_scope.
Notation " R ==> R' " := (@respectful _ _ (R%signature) (R'%signature))
(right associativity, at level 55) : signature_scope.
Notation " R ~~> R' " := (@respectful _ _ (Program.Basics.flip (R%signature)) (R'%signature))
(right associativity, at level 55) : signature_scope.
Export -(notations) Morphisms.
End ProperNotations.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
x \is Num.real -> x < (Num.bound x)%:R.
Proof.
Lemma
Source code
x \is Num.real -> - x < (Num.bound x)%:R.
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Module
Source code
.
Source code
Source code
Source code
Source code
norm0 : norm 0 = 0 ;
norm_ge0 : forall , 0 <= norm x ;
ler_normD : forall , norm (x + y) <= norm x + norm y ;
normZ : forall , norm (r *: x) = `|r| * norm x
}.
Source code
.
Source code
Source code
Source code
Source code
.
Source code
Source code
Source code
Source code
(norm : L -> K) := { norm0_eq0 : forall , norm x = 0 -> x = 0 }.
Source code
.
Source code
Source code
Source code
{
Source code
Module Import
Source code
Section Theory.
Variables ( : numDomainType) ( : lmodType K) (
Source code
Lemma
Source code
Proof.
Lemma
Source code
Lemma
Source code
norm (\sum_( <- r) F i) <= \sum_( <- r) norm (F i).
End Theory.
End Theory.
Module Import
Source code
End Norm.
Export Norm.Exports.
From mathcomp Require Import interval_inference.
Module
Source code
Section max_nng_comlaw.
Import Num.Def.
Context { : realFieldType}.
Let
Source code
Proof.
rewrite -leNgt => x0.
apply/eqP; rewrite eq_le x0 andbT.
(* NB: the goal is `widen_itv 0%:itv <= x`, which does not match the syntax to
trigger the hint for `ge0` as can be seen at
https://github.com/math-comp/math-comp/blob/900e37912dbecbd3c04d3c1b320efe721d3f56dd/algebra/interval_inference.v#L770 *)
by rewrite -num_le/=.
Qed.
.
Source code
Source code
Monoid.isComLaw.Build {nonneg K} 0%:nng maxr maxA maxC nng_max0r.
End max_nng_comlaw.
End MaxNngComLaw.
Module
Source code
Section ProdNormedZmodule.
Context { : numDomainType} { : normedZmodType R}.
Definition
ProdNormedZmodule.norm : forall {R : numDomainType} {U V : normedZmodType R}, U * V -> R ProdNormedZmodule.norm is not universe polymorphic Arguments ProdNormedZmodule.norm {R U V} x ProdNormedZmodule.norm is transparent Expands to: Constant mathcomp.classical.unstable.ProdNormedZmodule.norm Declared in library mathcomp.classical.unstable, line 712, characters 11-15
Source code
Lemma
Source code
Proof.
by rewrite comparable_le_max ?lexx ?orbT// real_comparable.
Qed.
Lemma
Source code
Proof.
Lemma
Source code
Lemma
Source code
Source code
.
Source code
Source code
Source code
normD norm_eq0 normMn normrN.
Lemma
Source code
Proof.
End ProdNormedZmodule.
Module
Source code
HB.reexport.
Definition
prod_normE : forall [R : numDomainType] [U V : normedZmodType R] (x : U * V), `|x|%R = maxr `|x.1|%R `|x.2|%R prod_normE is not universe polymorphic Arguments prod_normE [R U V] x prod_normE is transparent Expands to: Constant mathcomp.classical.unstable.ProdNormedZmodule.Exports.prod_normE Declared in library mathcomp.classical.unstable, line 743, characters 11-21
Source code
End Exports.
End ProdNormedZmodule.
Export ProdNormedZmodule.Exports.