Skip to content

Commit 1cb172e

Browse files
committed
feat(Algebra/Order): stronger positivity criterion for expect (leanprover-community#38794)
From AddCombi
1 parent 0bb58f2 commit 1cb172e

1 file changed

Lines changed: 9 additions & 10 deletions

File tree

Mathlib/Algebra/Order/BigOperators/Expect.lean

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -110,15 +110,12 @@ end OrderedAddCommMonoid
110110

111111
section OrderedCancelAddCommMonoid
112112
variable [AddCommMonoid α] [PartialOrder α] [IsOrderedCancelAddMonoid α] [Module ℚ≥0 α]
113-
{a : α} {s : Finset ι} {f g : ι → α}
114-
section PosSMulStrictMono
115-
variable [PosSMulStrictMono ℚ≥0 α]
113+
[PosSMulStrictMono ℚ≥0 α] {s : Finset ι} {f g : ι → α} {a : α}
116114

117-
lemma expect_lt_expect (hle : ∀ i ∈ s, f i ≤ g i) (hlt : ∃ i ∈ s, f i < g i) :
118-
𝔼 i ∈ s, f i < 𝔼 i ∈ s, g i := by
119-
apply smul_lt_smul_of_pos_left (sum_lt_sum hle hlt)
120-
rw [inv_pos, Nat.cast_pos, card_pos]
121-
exact hlt.imp (fun _ => And.left)
115+
lemma expect_lt_expect (hfg : ∀ i ∈ s, f i ≤ g i) (hfg' : ∃ i ∈ s, f i < g i) :
116+
𝔼 i ∈ s, f i < 𝔼 i ∈ s, g i :=
117+
smul_lt_smul_of_pos_left (sum_lt_sum hfg hfg')
118+
(by obtain ⟨i, hi, -⟩ := hfg'; have : s.Nonempty := ⟨i, hi⟩; simpa)
122119

123120
lemma expect_lt (hle : ∀ x ∈ s, f x ≤ a) (hlt : ∃ x ∈ s, f x < a) :
124121
𝔼 i ∈ s, f i < a := by
@@ -130,10 +127,12 @@ lemma lt_expect (hle : ∀ x ∈ s, a ≤ f x) (hlt : ∃ x ∈ s, a < f x) :
130127
rw [← expect_const (hlt.imp (fun _ => And.left)) a]
131128
exact expect_lt_expect hle hlt
132129

130+
lemma expect_pos' (h : ∀ i ∈ s, 0 ≤ f i) (hs : ∃ i ∈ s, 0 < f i) : 0 < 𝔼 i ∈ s, f i :=
131+
(expect_const_zero _).symm.trans_lt <| expect_lt_expect h hs
132+
133133
lemma expect_pos (hf : ∀ i ∈ s, 0 < f i) (hs : s.Nonempty) : 0 < 𝔼 i ∈ s, f i :=
134134
smul_pos (inv_pos.2 <| mod_cast hs.card_pos) <| sum_pos hf hs
135135

136-
end PosSMulStrictMono
137136
end OrderedCancelAddCommMonoid
138137

139138
section LinearOrderedAddCommMonoid
@@ -235,7 +234,7 @@ meta def evalFinsetExpect : PositivityExt where eval {u α} zα pα e := do
235234
assumeInstancesCommute
236235
let pr : Q(∀ i, 0 < $f i) ← mkLambdaFVars #[i] pbody
237236
return some
238-
q(@expect_pos $ι $α $instα $pα $pα' $instmod $s $f $instαordsmul (fun i _ ↦ $pr i) $ps))
237+
q(@expect_pos $ι $α $instα $pα $pα' $instmod $instαordsmul $s $f (fun i _ ↦ $pr i) $ps))
239238
-- Try to show that the sum is positive
240239
if let some p_pos := p_pos then
241240
return .positive p_pos

0 commit comments

Comments
 (0)