Built with Alectryon, running Coq+SerAPI v8.15.0+0.15.0. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use ⌘ instead of Ctrl.
(* mathcomp analysis (c) 2022 Inria and AIST. License: CeCILL-C. *)Require Import BinPos.From mathcomp Require choice.(* Missing coercion (done before Import to avoid redeclaration error, thanks to KS for the trick) *)(* MathComp 1.15 addition *)Coercionchoice.Choice.mixin : choice.Choice.class_of >-> choice.Choice.mixin_of.
Notation"[ predI _ & _ ]" was already used in scope
fun_scope. [notation-overridden,parsing]
Notation"[ predU _ & _ ]" was already used in scope
fun_scope. [notation-overridden,parsing]
Notation"[ predD _ & _ ]" was already used in scope
fun_scope. [notation-overridden,parsing]
Notation"[ predC _ ]" was already used in scope
fun_scope. [notation-overridden,parsing]
Notation"[ preim _ of _ ]" was already used in scope
fun_scope. [notation-overridden,parsing]
Notation"_ + _" was already used in scope nat_scope.
[notation-overridden,parsing]
Notation"_ - _" was already used in scope nat_scope.
[notation-overridden,parsing]
Notation"_ <= _" was already used in scope nat_scope.
[notation-overridden,parsing]
Notation"_ < _" was already used in scope nat_scope.
[notation-overridden,parsing]
Notation"_ >= _" was already used in scope nat_scope.
[notation-overridden,parsing]
Notation"_ > _" was already used in scope nat_scope.
[notation-overridden,parsing]
Notation"_ <= _ <= _" was already used in scope
nat_scope. [notation-overridden,parsing]
Notation"_ < _ <= _" was already used in scope
nat_scope. [notation-overridden,parsing]
Notation"_ <= _ < _" was already used in scope
nat_scope. [notation-overridden,parsing]
Notation"_ < _ < _" was already used in scope
nat_scope. [notation-overridden,parsing]
Notation"_ * _" was already used in scope nat_scope.
[notation-overridden,parsing]
New coercion path [GRing.subring_closedM;
GRing.smulr_closedN] : GRing.subring_closed >-> GRing.oppr_closed is ambiguous with existing
[GRing.subring_closedB; GRing.zmod_closedN] : GRing.subring_closed >-> GRing.oppr_closed.
[ambiguous-paths,typechecker]
New coercion path [GRing.subring_closed_semi;
GRing.semiring_closedM] : GRing.subring_closed >-> GRing.mulr_closed is ambiguous with existing
[GRing.subring_closedM; GRing.smulr_closedM] : GRing.subring_closed >-> GRing.mulr_closed.
New coercion path [GRing.subring_closed_semi;
GRing.semiring_closedD] : GRing.subring_closed >-> GRing.addr_closed is ambiguous with existing
[GRing.subring_closedB; GRing.zmod_closedD] : GRing.subring_closed >-> GRing.addr_closed.
[ambiguous-paths,typechecker]
New coercion path [GRing.sdivr_closed_div;
GRing.divr_closedM] : GRing.sdivr_closed >-> GRing.mulr_closed is ambiguous with existing
[GRing.sdivr_closedM; GRing.smulr_closedM] : GRing.sdivr_closed >-> GRing.mulr_closed.
[ambiguous-paths,typechecker]
New coercion path [GRing.subalg_closedBM;
GRing.subring_closedB] : GRing.subalg_closed >-> GRing.zmod_closed is ambiguous with existing
[GRing.subalg_closedZ; GRing.submod_closedB] : GRing.subalg_closed >-> GRing.zmod_closed.
[ambiguous-paths,typechecker]
New coercion path [GRing.divring_closed_div;
GRing.sdivr_closedM] : GRing.divring_closed >-> GRing.smulr_closed is ambiguous with existing
[GRing.divring_closedBM; GRing.subring_closedM] : GRing.divring_closed >-> GRing.smulr_closed.
[ambiguous-paths,typechecker]
New coercion path [GRing.divalg_closedBdiv;
GRing.divring_closedBM] : GRing.divalg_closed >-> GRing.subring_closed is ambiguous with existing
[GRing.divalg_closedZ; GRing.subalg_closedBM] : GRing.divalg_closed >-> GRing.subring_closed.
[ambiguous-paths,typechecker]
New coercion path [GRing.Pred.subring_smul;
GRing.Pred.smul_mul] : GRing.Pred.subring >-> GRing.Pred.mul is ambiguous with existing
[GRing.Pred.subring_semi; GRing.Pred.semiring_mul] : GRing.Pred.subring >-> GRing.Pred.mul.
[ambiguous-paths,typechecker]
From mathcomp Require Import finset interval.(***************************)(* MathComp 1.15 additions *)(***************************)(******************************************************************************)(* This files contains lemmas and definitions missing from MathComp. *)(* *)(* f \max g := fun x => Num.max (f x) (g x) *)(* oflit f := Some \o f *)(* pred_oapp T D := [pred x | oapp (mem D) false x] *)(* f \* g := fun x => f x * g x *)(* \- f := fun x => - f x *)(* lteBSide, bnd_simp == multirule to simplify inequalities between *)(* interval bounds *)(* miditv i == middle point of interval i *)(* *)(* proj i f == f i, where f : forall i, T i *)(* dfwith f x == fun j => x if j = i, and f j otherwise *)(* given x : T i *)(* swap x := (x.2, x.1) *)(* *)(******************************************************************************)Set Implicit Arguments.Unset Strict Implicit.Unset Printing Implicit Defensive.Reserved Notation"f \* g" (at level40, left associativity).Reserved Notation"f \- g" (at level50, left associativity).Reserved Notation"\- f" (at level35, f at level35).Reserved Notation"f \max g" (at level50, left associativity).Number Notationpositive Pos.of_num_int Pos.to_num_uint : AC_scope.
I, T: Type D: pred I P, Q: I -> T -> Prop
T ->
(forallx : I, D x -> {y : T | P x y & Q x y}) ->
{f : I -> T | forallx : I, D x -> P x (f x) &
forallx : I, D x -> Q x (f x)}
2
bymove=> /all_sig_cond/[apply]-[f Pf]; existsf => i Di; have [] := Pf i Di.Qed.DefinitionoliftaTrT (f : aT -> rT) := Some \o f.
aT, rT, sT: Type f: aT -> rT g: rT -> sT x: sT
oapp (g \o f) x =1 ((oapp (rT:=sT))^~ x) g \o omap f
b
bycase.Qed.
e f 10
olift (g \o f) = olift g \o f
15
by [].Qed.
A, B, C, D: Type f: B -> A g: C -> B h: D -> C
f \o (g \o h) = (f \o g) \o h
1b
by [].Qed.
rT, aT: Type A: {pred aT} f g: rT -> aT
{in A, cancel f g} ->
{in A, pcancel f (funy : rT => Some (g y))}
25
bymove=> fK x Ax; rewrite fK.Qed.
28 29 f g: rT -> option aT
{in A, pcancel f g} -> {in A &, injective f}
2e
bymove=> fK x y Ax Ay /(congr1 g); rewrite !fK// => -[].Qed.Definitionpred_oappT (D : {pred T}) : pred (option T) :=
[pred x | oapp (mem D) false x].
A, B, C: Type D: {pred B} D': {pred C} f: B -> option A h: C -> option B f': A -> B h': B -> C
{homo h : x / x \in D' >-> x \in pred_oapp D} ->
{in D, ocancel f f'} ->
{in D', ocancel h h'} ->
{in D', ocancel (obind f \o h) (h' \o f')}
35
38 39 3a 3b 3c 3d 3e hD: {homo h : x / x \in D' >-> x \in pred_oapp D} fK: {in D, ocancel f f'} hK: {in D', ocancel h h'} c: C cD: c \in D' b: B hcE: h c = Some b
oapp (h' \o f') c (f b) = h' b
38 39 3a 3b 3c 3d 3e 45 46 47 48 49 4a 4b bD: b \in D
4c
byrewrite -[b in RHS]fK; case: (f b) => //=; have /hK := cD; rewrite hcE.Qed.
b1, b2: bool
b1 = b2 -> b2 -> b1
53
bymove->.Qed.Definitionmul_funT (R : ringType) (fg : T -> R) x := (f x * g x)%R.
Notation"_ \* _" was already used in scope
ring_scope. [notation-overridden,parsing]
Arguments mul_fun {T R} _ _ _ /.Definitionopp_funT (R : zmodType) (f : T -> R) x := (- f x)%R.
Notation"\- _" was already used in scope ring_scope.
[notation-overridden,parsing]
Arguments opp_fun {T R} _ _ /.Coercionpair_of_interval T (I : interval T) : itv_bound T * itv_bound T :=
let: Interval b1 b2 := I in (b1, b2).Import Order.TTheory GRing.Theory Num.Theory.Sectionitv_simp.Variables (d : unit) (T : porderType d).Implicit Types (xy : T) (b : bool).
d: unit T: porderType d x, y: T b, b': bool
(BSide b x < BSide b' y)%O =
(x < y ?<= if b && ~~ b')%O
5c
by [].Qed.
5e
(BSide b x <= BSide b' y)%O =
(x < y ?<= if b' ==> b)%O
66
by [].Qed.DefinitionlteBSide := (ltBSide, leBSide).
5f 60 61 b: bool
(BSide b x < BLeft y)%O = (x < y)%O
6b
bycase: b.Qed.
5f 60 BLeft_ltE: forallxyb,
(BSide b x < BLeft y)%O = (x < y)%O 61 6e
(BSide b x <= BRight y)%O = (x <= y)%O
72
bycase: b.Qed.
5f 60 75 BRight_leE: forallxyb,
(BSide b x <= BRight y)%O = (x <= y)%O 61
5f 60 75 7c 83 8a 91 98 9f a6 ae b5 bc c3 ca d1 d8 df e6 e7 x: T
(a <= BLeft x)%O ->
Interval a (BRight x)
=i [predU1 x & Interval a (BLeft x)]
f1
5f 60 75 7c 83 8a 91 98 9f a6 ae b5 bc c3 ca d1 d8 df e6 e7 f4 ax: (a <= BLeft x)%O z: T
(a <= BLeft z)%O && (z <= x)%O =
(z == x) || [&& (a <= BLeft z)%O, z != x & (z <= x)%O]
bycase: (eqVneq z x) => [->|]//=; rewrite lexx ax.Qed.
f3
(BRight x <= a)%O ->
Interval (BLeft x) a
=i [predU1 x & Interval (BRight x) a]
ff
5f 60 75 7c 83 8a 91 98 9f a6 ae b5 bc c3 ca d1 d8 df e6 e7 f4 ax: (BRight x <= a)%O fc
(x <= z)%O && (BRight z <= a)%O =
(z == x)
|| (x != z) && (x <= z)%O && (BRight z <= a)%O
bycase: (eqVneq z x) => [->|]//=; rewrite lexx ax.Qed.Enditv_simp.Definitionmiditv (R : numDomainType) (i : interval R) : R :=
match i with
| Interval (BSide _ a) (BSide _ b) => (a + b) / 2%:R
| Interval -oo%O (BSide _ b) => b - 1
| Interval (BSide _ a) +oo%O => a + 1
| Interval -oo%O +oo%O => 0
| _ => 0end.Sectionmiditv_lemmas.VariableR : numFieldType.Implicit Typesi : interval R.
1d9 1da op: Monoid.com_law idx I: eqType r, s: seq I 15e 15f
perm_eq [seq i <- r | P i & F i != idx]
[seq i <- s | P i & F i != idx] ->
\big[op/idx]_(i <- r | P i) F i =
\big[op/idx]_(i <- s | P i) F i
1e7
1d9 1da 1ea 1eb 1ec 15e 15f prs: perm_eq [seq i <- r | P i & F i != idx] [seq i <- s | P i & F i != idx]
op (\big[op/idx]_(i <- r | P i && (F i == idx)) F i)
(\big[op/idx]_(i <- r | P i && (F i != idx)) F i) =
op (\big[op/idx]_(i <- s | P i && (F i == idx)) F i)
(\big[op/idx]_(i <- s | P i && (F i != idx)) F i)
1f2
\big[op/idx]_(i <- r | P i && (F i != idx)) F i =
op (\big[op/idx]_(i <- s | P i && (F i == idx)) F i)
(\big[op/idx]_(i <- s | P i && (F i != idx)) F i)
1f2
\big[op/idx]_(i <- r | P i && (F i != idx)) F i =
\big[op/idx]_(i <- s | P i && (F i != idx)) F i
byrewrite big_seq_fsetE/= sum1_card cardfE.Qed.Arguments big_rmcond {R idx op I r} P.Arguments big_rmcond_in {R idx op I r} P.(*******************************)(* MathComp > 1.15.0 additions *)(*******************************)Sectionbigminr_maxr.Import Num.Def.
R: realDomainType 15c 15d 15e 15f 219
\big[minr/x]_(i <- r | P i) F i =
- (\big[maxr/(- x)]_(i <- r | P i) - F i)
2cd
byelim/big_rec2: _ => [|i y _ _ ->]; rewrite?oppr_max opprK.Qed.Endbigminr_maxr.SectionSemiGroupProperties.Variables (R : Type) (op : R -> R -> R).HypothesisopA : associative op.(* Convert an AC op : R -> R -> R to a com_law on option R *)DefinitionAC_subdefofassociativeop & commutative op :=
funx => oapp (funy => Some (oapp (op^~ y) y x)) x.DefinitionoAC := nosimpl AC_subdef.HypothesisopC : commutative op.
R: Type op: R -> R -> R opA: associative op opC: commutative op
left_commutative op
2d4
bymove=> x *; rewrite !opA (opC x).Qed.
2d7 2d8 2d9 2da opCA: left_commutative op
right_commutative op
2de
bymove=> *; rewrite -!opA [X in op _ X]opC.Qed.Hypothesisopyy : idempotent op.Local Notationoop := (oAC opA opC).
2d7 2d8 2d9 2da 2e1 opAC: right_commutative op opyy: idempotent op 206
\big[op/x]_(i <- r | P i) F i =
\big[op/x]_(i <- r) (if P i then F i else x) ->
(if P i
then op (F i) (\big[op/x]_(j <- r | P j) F j)
else \big[op/x]_(j <- r | P j) F j) =
op (if P i then F i else x)
(\big[op/x]_(j <- r) (if P j then F j else x))
bycase: ifPn => Pi ->//; rewrite -[in LHS]big_id_idem.Qed.
2d7 2d8 2d9 2da 2e1 2e8 2e9 219 31e 15c 15d 15e F1, F2: I -> R
\big[op/x]_(i <- r | P i) op (F1 i) (F2 i) =
op (\big[op/x]_(i <- r | P i) F1 i)
(\big[op/x]_(i <- r | P i) F2 i)
2d7 2d8 2d9 2da 2e1 2e8 2e9 219 I: finType j: I 15e 15f
P j ->
\big[op/x]_(i | P i) F i =
op (F j) (\big[op/x]_(i | P i && (i != j)) F i)
351
bymove=> /[!big_ACE] /(bigD1 _)->; case: (bigop _ _) => /=.Qed.Variablele : rel R.Hypothesisle_refl : reflexive le.Hypothesisop_incr : forallxy, le x (op x y).
2d7 2d8 2d9 2da 2e1 2e8 2e9 219 le: rel R le_refl: reflexive le op_incr: forallxy : R, le x (op x y) 15c s: seq I P, P': {pred I} 15f
(foralli : I, P i -> P' i) ->
le (\big[op/x]_(i <- s | P i) F i)
(\big[op/x]_(i <- s | P' i) F i)
359
2d7 2d8 2d9 2da 2e1 2e8 2e9 219 35c 35d 35e 15c 35f 360 15f PP': foralli : I, P i -> P' i
le
(oapp (op^~ x) x
(\big[oop/None]_(i <- s | P i) Some (F i)))
(oapp (op^~ x) x
(oop
(\big[oop/None]_(i <- s | P' i && P i)
Some (F i))
(\big[oop/None]_(i <- s | P' i && ~~ P i)
Some (F i))))
366
le
(oapp (op^~ x) x
(\big[oop/None]_(i <- s | P i) Some (F i)))
(oapp (op^~ x) x
(oop (\big[oop/None]_(i <- s | P i) Some (F i))
(\big[oop/None]_(i <- s | P' i && ~~ P i)
Some (F i))))
2d7 2d8 2d9 2da 2e1 2e8 2e9 219 35c 35d 35e 15c 35f 360 15f 367 y, z: R
le
(odflt x
(oop
(\big[opAC_com_law/None]_(i <- mask m s' |
P i) Some (F i)) (Some x)))
(odflt x
(oop (\big[oop/None]_(i <- s' | P i) Some (F i))
(Some x)))
2d7 2d8 2d9 2da 2e1 2e8 2e9 219 35c 35d 35e 1eb 37f P, P': pred I 15f
(foralli : I,
(count_mem i [seq x <- s | P x] <=
count_mem i [seq x <- s' | P' x])%N) ->
le (\big[op/x]_(i <- s | P i) F i)
(\big[op/x]_(i <- s' | P' i) F i)
uniq [seq x <- s | P x] ->
uniq [seq x <- s' | P' x] ->
{subset [seq i <- s | P i] <= [seq i <- s' | P' i]} ->
le (\big[op/x]_(i <- s | P i) F i)
(\big[op/x]_(i <- s' | P' i) F i)
39e
bymove=> u u' /(uniq_sub_big xpredT F u u'); rewrite !big_filter.Qed.
(n' <= n)%N ->
(m <= m')%N ->
(foralli : nat, (n <= i < m)%N -> P i -> P' i) ->
le (\big[op/x]_(n <= i < m | P i) F i)
(\big[op/x]_(n' <= i < m' | P' i) F i)
3e8
2d7 2d8 2d9 2da 2e1 2e8 2e9 219 35c 35d 35e 3eb 3ec 3cd len'n: (n' <= n)%N lemm': (m <= m')%N PP'i: foralli : nat, (n <= i < m)%N -> P i -> P' i
{subset [seq i <- index_iota n m | P i]
<= [seq i <- index_iota n' m' | P' i]}
2d7 2d8 2d9 2da 2e1 2e8 2e9 219 35c 35d 35e 3eb 3ec 3cd 3f3 3f4 3f5 i: nat_eqType Pi: P i ni: (n <= i)%N im: (i < m)%N
\big[max/x]_(i <- r | P i) F i =
max (\big[max/x]_(i <- r | P i) F i) x
441
byrewrite [LHS]bigmax_idl maxC.Qed.
5f 13d 15c 15d f4 342 431
\big[max/x]_(i <- r | P i) F i =
max (\big[max/x]_(i <- r | P i && a i) F i)
(\big[max/x]_(i <- r | P i && ~~ a i) F i)
446
byrewrite (bigID_idem maxA maxC _ _ a) ?maxxx.Qed.Endbigmax_Type.
5f 13d 61
x <= max x y
44c
byrewrite le_maxr lexx.Qed.
5f 13d le_maxr_id: forallxy : T, x <= max x y x0: T 15c 35f 360 431
(foralli : I, P i -> P' i) ->
\big[max/x0]_(i <- s | P i) F i <=
\big[max/x0]_(i <- s | P' i) F i
452
exact: (sub_big maxA maxC).Qed.
5f 13d 455 456 1eb 3a6 305 431
{subset s <= s'} ->
\big[max/x0]_(i <- s | P i) F i <=
\big[max/x0]_(i <- s' | P i) F i
45a
exact: (sub_big_idem maxA maxC maxxx).Qed.
5f 13d 455 456 1eb 37f 3b2 431
{subset [seq i <- s | P i] <= [seq i <- s' | P' i]} ->
\big[max/x0]_(i <- s | P i) F i <=
\big[max/x0]_(i <- s' | P' i) F i
460
exact: (sub_big_idem_cond maxA maxC maxxx).Qed.
5f 13d 455 456 1eb 35f 360 431
{in s, foralli : I, P i -> P' i} ->
\big[max/x0]_(i <- s | P i) F i <=
\big[max/x0]_(i <- s | P' i) F i
466
exact: (sub_in_big maxA maxC).Qed.
5f 13d 455 456 n, m, n', m': Order.NatOrder.porderType 404 F: nat -> T
n' <= n ->
m <= m' ->
\big[max/x0]_(n <= i < m | P i) F i <=
\big[max/x0]_(n' <= i < m' | P i) F i
46c
exact: (le_big_nat maxA maxC).Qed.
5f 13d 455 456 3eb 3ec 470
(n' <= n)%N ->
(m <= m')%N ->
(foralli : Order.NatOrder.porderType,
n <= i < m -> P i -> P' i) ->
\big[max/x0]_(n <= i < m | P i) F i <=
\big[max/x0]_(n' <= i < m' | P' i) F i
474
exact: (le_big_nat_cond maxA maxC).Qed.
5f 13d 455 456 3cb 3cc 470
(n <= m)%N ->
\big[max/x0]_(i < n | P i) F i <=
\big[max/x0]_(i < m | P i) F i
47a
exact: (le_big_ord maxA maxC).Qed.
5f 13d 455 456 3cb 3ec 470
(n <= m)%N ->
(foralli : 'I_n, P i -> P' i) ->
\big[max/x0]_(i < n | P i) F i <=
\big[max/x0]_(i < m | P' i) F i
480
exact: (le_big_ord_cond maxA maxC).Qed.
5f 13d 455 456 354 3d4 431
A \subset A' ->
\big[max/x0]_(i in A | P i) F i <=
\big[max/x0]_(i in A' | P i) F i
486
exact: (subset_big maxA maxC).Qed.
5f 13d 455 456 354 3e4 431
[set i in A | P i] \subset [set i in A' | P' i] ->
\big[max/x0]_(i in A | P i) F i <=
\big[max/x0]_(i in A' | P' i) F i
48c
exact: (subset_big_cond maxA maxC).Qed.Sectionbigmax_finType.Variables (I : finType) (x : T).Implicit Types (P : pred I) (F : I -> T).
5f 13d 455 354 f4 355 15e 431
P j ->
\big[max/x]_(i | P i) F i =
max (F j) (\big[max/x]_(i | P i && (i != j)) F i)
(foralli : I, P i -> F1 i <= F2 i) ->
\big[max/x]_(i | P i) F1 i <=
\big[max/x]_(i | P i) F2 i
4e0
5f 13d 455 354 f4 15e 438 FG: foralli : I, P i -> F1 i <= F2 i a, b, e, f: T ba: b <= a fe: f <= e
max b f <= max a e
5f 13d 455 354 f4 15e 438 4e9 4ea 4eb 4ec af: a < f
b <= e
byrewrite (le_trans ba) // (le_trans _ fe) // ltW.Qed.Endbigmax_finType.Endbigmax.Arguments bigmax_mkcond {d T I r}.Arguments bigmaxID {d T I r}.Arguments bigmaxD1 {d T I x} j.Arguments bigmax_sup {d T I x} j.Arguments bigmax_eq_arg {d T I} x j.Arguments eq_bigmax {d T I x} j.Sectionbigmin.Local Notationmin := Order.min.LocalOpen Scope order_scope.Variables (d : _) (T : orderType d).Sectionbigmin_Type.Variable (I : Type) (r : seq I) (x : T).Implicit Types (Pa : pred I) (F : I -> T).
430
\big[min/x]_(i <- r | P i) F i =
\big[min/x]_(i <- r) (if P i then F i else x)
\big[min/x]_(i <- r | P i) F i =
min (\big[min/x]_(i <- r | P i) F i) x
504
byrewrite [LHS]bigmin_idl minC.Qed.
448
\big[min/x]_(i <- r | P i) F i =
min (\big[min/x]_(i <- r | P i && a i) F i)
(\big[min/x]_(i <- r | P i && ~~ a i) F i)
509
byrewrite (bigID_idem minA minC _ _ a) ?minxx.Qed.Endbigmin_Type.
44e
min x y <= x
50e
byrewrite le_minl lexx.Qed.
5f 13d le_minr_id: forallxy : T, min x y <= x 456 15c 35f 360 431
(foralli : I, P' i -> P i) ->
\big[min/x0]_(i <- s | P i) F i <=
\big[min/x0]_(i <- s | P' i) F i
513
exact: (sub_big minA minC ge_refl).Qed.
5f 13d 516 456 1eb 37f 3b2 431
{subset [seq i <- s | P i] <= [seq i <- s' | P' i]} ->
\big[min/x0]_(i <- s' | P' i) F i <=
\big[min/x0]_(i <- s | P i) F i
51a
exact: (sub_big_idem_cond minA minC minxx ge_refl).Qed.
5f 13d 516 456 1eb 3a6 305 431
{subset s' <= s} ->
\big[min/x0]_(i <- s | P i) F i <=
\big[min/x0]_(i <- s' | P i) F i
520
exact: (sub_big_idem minA minC minxx ge_refl).Qed.
5f 13d 516 456 1eb 35f 360 431
{in s, foralli : I, P' i -> P i} ->
\big[min/x0]_(i <- s | P i) F i <=
\big[min/x0]_(i <- s | P' i) F i
526
exact: (sub_in_big minA minC ge_refl).Qed.
5f 13d 516 456 3eb 404 470
(n <= n')%N ->
(m' <= m)%N ->
\big[min/x0]_(n <= i < m | P i) F i <=
\big[min/x0]_(n' <= i < m' | P i) F i
52c
exact: (le_big_nat minA minC ge_refl).Qed.
5f 13d 516 456 3eb P, P': pred nat 470
(n <= n')%N ->
(m' <= m)%N ->
(foralli : Order.NatOrder.porderType,
n' <= i < m' -> P' i -> P i) ->
\big[min/x0]_(n <= i < m | P i) F i <=
\big[min/x0]_(n' <= i < m' | P' i) F i
532
exact: (le_big_nat_cond minA minC ge_refl).Qed.
5f 13d 516 456 3cb P: pred nat 470
(m <= n)%N ->
\big[min/x0]_(i < n | P i) F i <=
\big[min/x0]_(i < m | P i) F i
539
exact: (le_big_ord minA minC ge_refl).Qed.
5f 13d 516 456 3cb 535 470
(m <= n)%N ->
(foralli : 'I_m, P' i -> P i) ->
\big[min/x0]_(i < n | P i) F i <=
\big[min/x0]_(i < m | P' i) F i
540
exact: (le_big_ord_cond minA minC ge_refl).Qed.
5f 13d 516 456 354 3d4 431
A' \subset A ->
\big[min/x0]_(i in A | P i) F i <=
\big[min/x0]_(i in A' | P i) F i
546
exact: (subset_big minA minC ge_refl).Qed.
5f 13d 516 456 354 3e4 431
[set i in A' | P' i] \subset [set i in A | P i] ->
\big[min/x0]_(i in A | P i) F i <=
\big[min/x0]_(i in A' | P' i) F i
54c
exact: (subset_big_cond minA minC ge_refl).Qed.Sectionbigmin_finType.Variable (I : finType) (x : T).Implicit Types (P : pred I) (F : I -> T).
5f 13d 516 354 f4 355 15e 431
P j ->
\big[min/x]_(i | P i) F i =
min (F j) (\big[min/x]_(i | P i && (i != j)) F i)
552
bymove/(bigD1_AC minA minC) ->.Qed.
554
P j -> \big[min/x]_(i | P i) F i <= F j
558
5f 13d 516 354 f4 355 15e 431 1e4 l: seq I ih: j \in l ->
P j ->
reducebig x l
(funi : I => BigBody i min (P i) (F i)) <=
F j
j \in i :: l ->
P j ->
(if P i
then
min (F i)
(reducebig x l
(funi : I => BigBody i min (P i) (F i)))
else
reducebig x l
(funi : I => BigBody i min (P i) (F i))) <= F j
5f 13d 516 354 f4 355 15e 431 1e4 560 561 leminlfi: P j ->
reducebig x l
(funi : I => BigBody i min (P i) (F i)) <=
F j Pi: P j
(if P i
then
min (F i)
(reducebig x l
(funi : I => BigBody i min (P i) (F i)))
else
reducebig x l
(funi : I => BigBody i min (P i) (F i))) <= F j
P j ->
(foralli : I, P i -> F i <= x) ->
\big[min/x]_(i | P i) F i =
F [arg min_(i < j | P i) F i]
59e
5f 13d 516 354 f4 355 15e 431 4d2 1e4 3fc PF: forallj : I, P j -> F i <= F j PFx: foralli : I, P i -> F i <= x
\big[min/x]_(i | P i) F i = F i
5a5
F i <= \big[min/x]_(i | P i) F i
byapply/bigmin_geP; split => //; exact: PFx.Qed.
554
P j ->
(foralli : I, P i -> F i <= x) ->
{i0 : I | i0 \in I & \big[min/x]_(i | P i) F i = F i0}
5ae
bymove=> Pi0 Hx; rewrite (bigmin_eq_arg Pi0) //; eexists.Qed.Endbigmin_finType.Endbigmin.Arguments bigmin_mkcond {d T I r}.Arguments bigminID {d T I r}.Arguments bigminD1 {d T I x} j.Arguments bigmin_inf {d T I x} j.Arguments bigmin_eq_arg {d T I} x j.Arguments eq_bigmin {d T I x} j.Sectiononem.VariableR : numDomainType.Implicit Typesr : R.Definitiononemr := 1 - r.LocalNotation"`1- r" := (onem r).
byrewrite -ler_subl_addr xz// -[ltRHS]subr0 ler_lt_sub.Qed.Definitioninv_funT (R : unitRingType) (f : T -> R) x := (f x)^-1%R.Notation"f \^-1" := (inv_fun f) : ring_scope.Arguments inv_fun {T R} _ _ /.Definitionbound_sided (T : porderType d) (c : bool) (x : itv_bound T) :=
if x is BSide c' _ then c == c' else false.
15b x, y, e: R
x - y \is Num.real ->
(`|x - y| < e) = (x - e < y < x + e)
627
bymove=> ?; rewrite distrC real_ltr_distl// -rpredN opprB.Qed.Definitionproj {I} {T : I -> Type} i (f : foralli, T i) := f i.SectionDFunWith.Variables (I : eqType) (T : I -> Type) (f : foralli, T i).Definitiondfwithi (x : T i) (j : I) : T j :=
if (i =P j) is ReflectT ij then ecast j (T j) ij x else f j.
byrewrite /dfwith; case: eqP.Qed.Variantdfwith_speci (x : T i) : forallj, T j -> Type :=
| DFunWithin : dfwith_spec x x
| DFunWithout j : i != j -> dfwith_spec x (f j).
639
dfwith_spec x (dfwith x j)
63d
bycase: (eqVneq i j) => [<-|nij];
[rewrite dfwithin|rewrite dfwithout//]; constructor.Qed.