Built with doc-gen4, running Lean4. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓to navigate, Ctrl+🖱️to focus. On Mac, use Cmdinstead of Ctrl.
/-
Copyright (c) 2021 Yaël Dillies, Bhavik Mehta. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yaël Dillies, Bhavik Mehta

! This file was ported from Lean 3 source module data.set.equitable
! leanprover-community/mathlib commit 8631e2d5ea77f6c13054d9151d82b83069680cb1
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathlib.Algebra.BigOperators.Order
import Mathlib.Data.Nat.Basic

/-!
# Equitable functions

This file defines equitable functions.

A function `f` is equitable on a set `s` if `f a₁ ≤ f a₂ + 1` for all `a₁, a₂ ∈ s`. This is mostly
useful when the codomain of `f` is `ℕ` or `ℤ` (or more generally a successor order).

## TODO

`ℕ` can be replaced by any `SuccOrder` + `ConditionallyCompleteMonoid`, but we don't have the
latter yet.
-/


open BigOperators

variable {
α: Type ?u.2
α
β: Type ?u.5
β
:
Type _: Type (?u.2+1)
Type _
} namespace Set /-- A set is equitable if no element value is more than one bigger than another. -/ def
EquitableOn: [inst : LE β] → [inst : Add β] → [inst : One β] → Set α(αβ) → Prop
EquitableOn
[
LE: Type ?u.14 → Type ?u.14
LE
β: Type ?u.11
β
] [
Add: Type ?u.17 → Type ?u.17
Add
β: Type ?u.11
β
] [
One: Type ?u.20 → Type ?u.20
One
β: Type ?u.11
β
] (
s: Set α
s
:
Set: Type ?u.23 → Type ?u.23
Set
α: Type ?u.8
α
) (
f: αβ
f
:
α: Type ?u.8
α
β: Type ?u.11
β
) :
Prop: Type
Prop
:= ∀ ⦃
a₁: ?m.37
a₁
a₂: ?m.40
a₂
⦄,
a₁: ?m.37
a₁
s: Set α
s
a₂: ?m.40
a₂
s: Set α
s
f: αβ
f
a₁: ?m.37
a₁
f: αβ
f
a₂: ?m.40
a₂
+
1: ?m.107
1
#align set.equitable_on
Set.EquitableOn: {α : Type u_1} → {β : Type u_2} → [inst : LE β] → [inst : Add β] → [inst : One β] → Set α(αβ) → Prop
Set.EquitableOn
@[simp] theorem
equitableOn_empty: ∀ [inst : LE β] [inst_1 : Add β] [inst_2 : One β] (f : αβ), EquitableOn f
equitableOn_empty
[
LE: Type ?u.222 → Type ?u.222
LE
β: Type ?u.219
β
] [
Add: Type ?u.225 → Type ?u.225
Add
β: Type ?u.219
β
] [
One: Type ?u.228 → Type ?u.228
One
β: Type ?u.219
β
] (
f: αβ
f
:
α: Type ?u.216
α
β: Type ?u.219
β
) :
EquitableOn: {α : Type ?u.236} → {β : Type ?u.235} → [inst : LE β] → [inst : Add β] → [inst : One β] → Set α(αβ) → Prop
EquitableOn
: ?m.310
f: αβ
f
:= fun
a: ?m.392
a
_: ?m.395
_
ha: ?m.398
ha
=> (
Set.not_mem_empty: ∀ {α : Type ?u.400} (x : α), ¬x
Set.not_mem_empty
a: ?m.392
a
ha: ?m.398
ha
).
elim: ∀ {C : Sort ?u.402}, FalseC
elim
#align set.equitable_on_empty
Set.equitableOn_empty: ∀ {α : Type u_2} {β : Type u_1} [inst : LE β] [inst_1 : Add β] [inst_2 : One β] (f : αβ), EquitableOn f
Set.equitableOn_empty
theorem
equitableOn_iff_exists_le_le_add_one: ∀ {s : Set α} {f : α}, EquitableOn s f b, ∀ (a : α), a sb f a f a b + 1
equitableOn_iff_exists_le_le_add_one
{
s: Set α
s
:
Set: Type ?u.459 → Type ?u.459
Set
α: Type ?u.453
α
} {
f: α
f
:
α: Type ?u.453
α
: Type
} :
s: Set α
s
.
EquitableOn: {α : Type ?u.467} → {β : Type ?u.466} → [inst : LE β] → [inst : Add β] → [inst : One β] → Set α(αβ) → Prop
EquitableOn
f: α
f
↔ ∃
b: ?m.514
b
, ∀
a: ?m.517
a
s: Set α
s
,
b: ?m.514
b
f: α
f
a: ?m.517
a
f: α
f
a: ?m.517
a
b: ?m.514
b
+
1: ?m.559
1
:=

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.456

s: Set α

f: α


EquitableOn s f b, ∀ (a : α), a sb f a f a b + 1
α: Type u_1

β: Type ?u.456

s: Set α

f: α


EquitableOn s fb, ∀ (a : α), a sb f a f a b + 1
α: Type u_1

β: Type ?u.456

s: Set α

f: α


EquitableOn s f b, ∀ (a : α), a sb f a f a b + 1
α: Type u_1

β: Type ?u.456

f: α


inl
EquitableOn fb, ∀ (a : α), a b f a f a b + 1
α: Type u_1

β: Type ?u.456

s: Set α

f: α

x: α

hx: x s


inr.intro
EquitableOn s fb, ∀ (a : α), a sb f a f a b + 1
α: Type u_1

β: Type ?u.456

s: Set α

f: α


EquitableOn s f b, ∀ (a : α), a sb f a f a b + 1
α: Type u_1

β: Type ?u.456

f: α


inl
EquitableOn fb, ∀ (a : α), a b f a f a b + 1
α: Type u_1

β: Type ?u.456

f: α


inl
EquitableOn fb, ∀ (a : α), a b f a f a b + 1
α: Type u_1

β: Type ?u.456

s: Set α

f: α

x: α

hx: x s


inr.intro
EquitableOn s fb, ∀ (a : α), a sb f a f a b + 1

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.456

s: Set α

f: α


EquitableOn s f b, ∀ (a : α), a sb f a f a b + 1
α: Type u_1

β: Type ?u.456

s: Set α

f: α

x: α

hx: x s

hs: EquitableOn s f


inr.intro
b, ∀ (a : α), a sb f a f a b + 1
α: Type u_1

β: Type ?u.456

s: Set α

f: α


EquitableOn s f b, ∀ (a : α), a sb f a f a b + 1
α: Type u_1

β: Type ?u.456

s: Set α

f: α

x: α

hx: x s

hs: EquitableOn s f

h: ∀ (y : α), y sf x f y


pos
b, ∀ (a : α), a sb f a f a b + 1
α: Type u_1

β: Type ?u.456

s: Set α

f: α

x: α

hx: x s

hs: EquitableOn s f

h: ¬∀ (y : α), y sf x f y


neg
b, ∀ (a : α), a sb f a f a b + 1
α: Type u_1

β: Type ?u.456

s: Set α

f: α


EquitableOn s f b, ∀ (a : α), a sb f a f a b + 1
α: Type u_1

β: Type ?u.456

s: Set α

f: α

x: α

hx: x s

hs: EquitableOn s f

h: ∀ (y : α), y sf x f y


pos
b, ∀ (a : α), a sb f a f a b + 1
α: Type u_1

β: Type ?u.456

s: Set α

f: α

x: α

hx: x s

hs: EquitableOn s f

h: ∀ (y : α), y sf x f y


pos
b, ∀ (a : α), a sb f a f a b + 1
α: Type u_1

β: Type ?u.456

s: Set α

f: α

x: α

hx: x s

hs: EquitableOn s f

h: ¬∀ (y : α), y sf x f y


neg
b, ∀ (a : α), a sb f a f a b + 1

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.456

s: Set α

f: α


EquitableOn s f b, ∀ (a : α), a sb f a f a b + 1
α: Type u_1

β: Type ?u.456

s: Set α

f: α

x: α

hx: x s

hs: EquitableOn s f

h: y, y s f y < f x


neg
b, ∀ (a : α), a sb f a f a b + 1
α: Type u_1

β: Type ?u.456

s: Set α

f: α


EquitableOn s f b, ∀ (a : α), a sb f a f a b + 1
α: Type u_1

β: Type ?u.456

s: Set α

f: α

x: α

hx: x s

hs: EquitableOn s f

w: α

hw: w s

hwx: f w < f x


neg.intro.intro
b, ∀ (a : α), a sb f a f a b + 1
α: Type u_1

β: Type ?u.456

s: Set α

f: α


EquitableOn s f b, ∀ (a : α), a sb f a f a b + 1
α: Type u_1

β: Type ?u.456

s: Set α

f: α

x: α

hx: x s

hs: EquitableOn s f

w: α

hw: w s

hwx: f w < f x

y: α

hy: y s


neg.intro.intro
Nat.succ (f w) Nat.succ (f y)
α: Type u_1

β: Type ?u.456

s: Set α

f: α


EquitableOn s f b, ∀ (a : α), a sb f a f a b + 1
α: Type u_1

β: Type ?u.456

s: Set α

f: α

x: α

hx: x s

hs: EquitableOn s f

w: α

hw: w s

hwx: f w < f x

y: α

hy: y s


neg.intro.intro
Nat.succ (f w) Nat.succ (f y)
α: Type u_1

β: Type ?u.456

s: Set α

f: α

x: α

hx: x s

hs: EquitableOn s f

w: α

hw: w s

hwx: f w < f x

y: α

hy: y s


neg.intro.intro
f x Nat.succ (f y)
α: Type u_1

β: Type ?u.456

s: Set α

f: α

x: α

hx: x s

hs: EquitableOn s f

w: α

hw: w s

hwx: f w < f x

y: α

hy: y s


neg.intro.intro
f x Nat.succ (f y)
α: Type u_1

β: Type ?u.456

s: Set α

f: α


EquitableOn s f b, ∀ (a : α), a sb f a f a b + 1

Goals accomplished! 🐙
#align set.equitable_on_iff_exists_le_le_add_one
Set.equitableOn_iff_exists_le_le_add_one: ∀ {α : Type u_1} {s : Set α} {f : α}, EquitableOn s f b, ∀ (a : α), a sb f a f a b + 1
Set.equitableOn_iff_exists_le_le_add_one
theorem
equitableOn_iff_exists_image_subset_icc: ∀ {s : Set α} {f : α}, EquitableOn s f b, f '' s Icc b (b + 1)
equitableOn_iff_exists_image_subset_icc
{
s: Set α
s
:
Set: Type ?u.4646 → Type ?u.4646
Set
α: Type ?u.4640
α
} {
f: α
f
:
α: Type ?u.4640
α
: Type
} :
s: Set α
s
.
EquitableOn: {α : Type ?u.4654} → {β : Type ?u.4653} → [inst : LE β] → [inst : Add β] → [inst : One β] → Set α(αβ) → Prop
EquitableOn
f: α
f
↔ ∃
b: ?m.4701
b
,
f: α
f
''
s: Set α
s
Icc: {α : Type ?u.4717} → [inst : Preorder α] → ααSet α
Icc
b: ?m.4701
b
(
b: ?m.4701
b
+
1: ?m.4749
1
) :=

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.4643

s: Set α

f: α


EquitableOn s f b, f '' s Icc b (b + 1)

Goals accomplished! 🐙
#align set.equitable_on_iff_exists_image_subset_Icc
Set.equitableOn_iff_exists_image_subset_icc: ∀ {α : Type u_1} {s : Set α} {f : α}, EquitableOn s f b, f '' s Icc b (b + 1)
Set.equitableOn_iff_exists_image_subset_icc
theorem
equitableOn_iff_exists_eq_eq_add_one: ∀ {α : Type u_1} {s : Set α} {f : α}, EquitableOn s f b, ∀ (a : α), a sf a = b f a = b + 1
equitableOn_iff_exists_eq_eq_add_one
{
s: Set α
s
:
Set: Type ?u.5349 → Type ?u.5349
Set
α: Type ?u.5343
α
} {
f: α
f
:
α: Type ?u.5343
α
: Type
} :
s: Set α
s
.
EquitableOn: {α : Type ?u.5357} → {β : Type ?u.5356} → [inst : LE β] → [inst : Add β] → [inst : One β] → Set α(αβ) → Prop
EquitableOn
f: α
f
↔ ∃
b: ?m.5404
b
, ∀
a: ?m.5407
a
s: Set α
s
,
f: α
f
a: ?m.5407
a
=
b: ?m.5404
b
f: α
f
a: ?m.5407
a
=
b: ?m.5404
b
+
1: ?m.5448
1
:=

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.5346

s: Set α

f: α


EquitableOn s f b, ∀ (a : α), a sf a = b f a = b + 1
α: Type u_1

β: Type ?u.5346

s: Set α

f: α


EquitableOn s f b, ∀ (a : α), a sf a = b f a = b + 1
α: Type u_1

β: Type ?u.5346

s: Set α

f: α


(b, ∀ (a : α), a sb f a f a b + 1) b, ∀ (a : α), a sf a = b f a = b + 1
α: Type u_1

β: Type ?u.5346

s: Set α

f: α


EquitableOn s f b, ∀ (a : α), a sf a = b f a = b + 1

Goals accomplished! 🐙

Goals accomplished! 🐙
#align set.equitable_on_iff_exists_eq_eq_add_one
Set.equitableOn_iff_exists_eq_eq_add_one: ∀ {α : Type u_1} {s : Set α} {f : α}, EquitableOn s f b, ∀ (a : α), a sf a = b f a = b + 1
Set.equitableOn_iff_exists_eq_eq_add_one
section OrderedSemiring variable [
OrderedSemiring: Type ?u.6182 → Type ?u.6182
OrderedSemiring
β: Type ?u.6179
β
] theorem
Subsingleton.equitableOn: ∀ {α : Type u_1} {β : Type u_2} [inst : OrderedSemiring β] {s : Set α}, Set.Subsingleton s∀ (f : αβ), EquitableOn s f
Subsingleton.equitableOn
{
s: Set α
s
:
Set: Type ?u.6185 → Type ?u.6185
Set
α: Type ?u.6176
α
} (hs :
s: Set α
s
.
Subsingleton: {α : Type ?u.6188} → Set αProp
Subsingleton
) (
f: αβ
f
:
α: Type ?u.6176
α
β: Type ?u.6179
β
) :
s: Set α
s
.
EquitableOn: {α : Type ?u.6200} → {β : Type ?u.6199} → [inst : LE β] → [inst : Add β] → [inst : One β] → Set α(αβ) → Prop
EquitableOn
f: αβ
f
:= fun
i: ?m.6687
i
j: ?m.6690
j
hi: ?m.6693
hi
hj: ?m.6696
hj
=>

Goals accomplished! 🐙
α: Type u_1

β: Type u_2

inst✝: OrderedSemiring β

s: Set α

hs: Set.Subsingleton s

f: αβ

i, j: α

hi: i s

hj: j s


f i f j + 1
α: Type u_1

β: Type u_2

inst✝: OrderedSemiring β

s: Set α

hs: Set.Subsingleton s

f: αβ

i, j: α

hi: i s

hj: j s


f i f j + 1
α: Type u_1

β: Type u_2

inst✝: OrderedSemiring β

s: Set α

hs: Set.Subsingleton s

f: αβ

i, j: α

hi: i s

hj: j s


f j f j + 1
α: Type u_1

β: Type u_2

inst✝: OrderedSemiring β

s: Set α

hs: Set.Subsingleton s

f: αβ

i, j: α

hi: i s

hj: j s


f j f j + 1
α: Type u_1

β: Type u_2

inst✝: OrderedSemiring β

s: Set α

hs: Set.Subsingleton s

f: αβ

i, j: α

hi: i s

hj: j s


f i f j + 1

Goals accomplished! 🐙
#align set.subsingleton.equitable_on
Set.Subsingleton.equitableOn: ∀ {α : Type u_1} {β : Type u_2} [inst : OrderedSemiring β] {s : Set α}, Set.Subsingleton s∀ (f : αβ), EquitableOn s f
Set.Subsingleton.equitableOn
theorem
equitableOn_singleton: ∀ {α : Type u_1} {β : Type u_2} [inst : OrderedSemiring β] (a : α) (f : αβ), EquitableOn {a} f
equitableOn_singleton
(
a: α
a
:
α: Type ?u.7729
α
) (
f: αβ
f
:
α: Type ?u.7729
α
β: Type ?u.7732
β
) :
Set.EquitableOn: {α : Type ?u.7745} → {β : Type ?u.7744} → [inst : LE β] → [inst : Add β] → [inst : One β] → Set α(αβ) → Prop
Set.EquitableOn
{
a: α
a
}
f: αβ
f
:=
Set.subsingleton_singleton: ∀ {α : Type ?u.8252} {a : α}, Set.Subsingleton {a}
Set.subsingleton_singleton
.
equitableOn: ∀ {α : Type ?u.8255} {β : Type ?u.8256} [inst : OrderedSemiring β] {s : Set α}, Set.Subsingleton s∀ (f : αβ), EquitableOn s f
equitableOn
f: αβ
f
#align set.equitable_on_singleton
Set.equitableOn_singleton: ∀ {α : Type u_1} {β : Type u_2} [inst : OrderedSemiring β] (a : α) (f : αβ), EquitableOn {a} f
Set.equitableOn_singleton
end OrderedSemiring end Set open Set namespace Finset variable {
s: Finset α
s
:
Finset: Type ?u.8324 → Type ?u.8324
Finset
α: Type ?u.8318
α
} {
f: α
f
:
α: Type ?u.11132
α
: Type
} {
a: α
a
:
α: Type ?u.8303
α
} theorem
equitableOn_iff_le_le_add_one: ∀ {α : Type u_1} {s : Finset α} {f : α}, EquitableOn (s) f ∀ (a : α), a s(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1
equitableOn_iff_le_le_add_one
:
EquitableOn: {α : Type ?u.8334} → {β : Type ?u.8333} → [inst : LE β] → [inst : Add β] → [inst : One β] → Set α(αβ) → Prop
EquitableOn
(
s: Finset α
s
:
Set: Type ?u.8341 → Type ?u.8341
Set
α: Type ?u.8318
α
)
f: α
f
↔ ∀
a: ?m.8474
a
s: Finset α
s
, (∑
i: ?m.8517
i
in
s: Finset α
s
,
f: α
f
i: ?m.8517
i
) /
s: Finset α
s
.
card: {α : Type ?u.8531} → Finset α
card
f: α
f
a: ?m.8474
a
f: α
f
a: ?m.8474
a
≤ (∑
i: ?m.8602
i
in
s: Finset α
s
,
f: α
f
i: ?m.8602
i
) /
s: Finset α
s
.
card: {α : Type ?u.8605} → Finset α
card
+
1: ?m.8610
1
:=

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α


EquitableOn (s) f ∀ (a : α), a s(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α


EquitableOn (s) f ∀ (a : α), a s(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α


(b, ∀ (a : α), a sb f a f a b + 1) ∀ (a : α), a s(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α


(b, ∀ (a : α), a sb f a f a b + 1) ∀ (a : α), a s(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α


EquitableOn (s) f ∀ (a : α), a s(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α


(b, ∀ (a : α), a sb f a f a b + 1) → ∀ (a : α), a s(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α


EquitableOn (s) f ∀ (a : α), a s(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α

b:

hb: ∀ (a : α), a sb f a f a b + 1


intro
∀ (a : α), a s(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α


EquitableOn (s) f ∀ (a : α), a s(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α

b:

hb: ∀ (a : α), a sb f a f a b + 1

h: ∀ (a : α), a sf a = b + 1


pos
∀ (a : α), a s(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α

b:

hb: ∀ (a : α), a sb f a f a b + 1

h: ¬∀ (a : α), a sf a = b + 1


neg
∀ (a : α), a s(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α


EquitableOn (s) f ∀ (a : α), a s(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α

b:

hb: ∀ (a : α), a sb f a f a b + 1

h: ∀ (a : α), a sf a = b + 1


pos
∀ (a : α), a s(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α

b:

hb: ∀ (a : α), a sb f a f a b + 1

h: ∀ (a : α), a sf a = b + 1


pos
∀ (a : α), a s(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α

b:

hb: ∀ (a : α), a sb f a f a b + 1

h: ¬∀ (a : α), a sf a = b + 1


neg
∀ (a : α), a s(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a✝: α

b:

hb: ∀ (a : α), a sb f a f a b + 1

h: ∀ (a : α), a sf a = b + 1

a: α

ha: a s


pos
(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α

b:

hb: ∀ (a : α), a sb f a f a b + 1

h: ∀ (a : α), a sf a = b + 1


pos
∀ (a : α), a s(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a✝: α

b:

hb: ∀ (a : α), a sb f a f a b + 1

h: ∀ (a : α), a sf a = b + 1

a: α

ha: a s


pos
(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a✝: α

b:

hb: ∀ (a : α), a sb f a f a b + 1

h: ∀ (a : α), a sf a = b + 1

a: α

ha: a s


pos
(∑ i in s, f i) / card s b + 1 b + 1 (∑ i in s, f i) / card s + 1
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a✝: α

b:

hb: ∀ (a : α), a sb f a f a b + 1

h: ∀ (a : α), a sf a = b + 1

a: α

ha: a s


pos
(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a✝: α

b:

hb: ∀ (a : α), a sb f a f a b + 1

h: ∀ (a : α), a sf a = b + 1

a: α

ha: a s


pos
card s * (b + 1) / card s b + 1 b + 1 card s * (b + 1) / card s + 1
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a✝: α

b:

hb: ∀ (a : α), a sb f a f a b + 1

h: ∀ (a : α), a sf a = b + 1

a: α

ha: a s


pos
(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a✝: α

b:

hb: ∀ (a : α), a sb f a f a b + 1

h: ∀ (a : α), a sf a = b + 1

a: α

ha: a s


pos
b + 1 b + 1 b + 1 b + 1 + 1
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a✝: α

b:

hb: ∀ (a : α), a sb f a f a b + 1

h: ∀ (a : α), a sf a = b + 1

a: α

ha: a s


pos
b + 1 b + 1 b + 1 b + 1 + 1
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α

b:

hb: ∀ (a : α), a sb f a f a b + 1

h: ∀ (a : α), a sf a = b + 1


pos
∀ (a : α), a s(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α


EquitableOn (s) f ∀ (a : α), a s(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α

b:

hb: ∀ (a : α), a sb f a f a b + 1

h: a, a s f a b + 1


neg
∀ (a : α), a s(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α


EquitableOn (s) f ∀ (a : α), a s(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α

b:

hb: ∀ (a : α), a sb f a f a b + 1

x: α

hx₁: x s

hx₂: f x b + 1


neg.intro.intro
∀ (a : α), a s(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α


EquitableOn (s) f ∀ (a : α), a s(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α

b:

hb: ∀ (a : α), a sb f a f a b + 1

x: α

hx₁: x s

hx₂: f x b + 1

h: b = (∑ i in s, f i) / card s


neg.intro.intro
∀ (a : α), a s(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α

b:

hb: ∀ (a : α), a sb f a f a b + 1

x: α

hx₁: x s

hx₂: f x b + 1


h
b = (∑ i in s, f i) / card s
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α


EquitableOn (s) f ∀ (a : α), a s(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α

b:

hb: ∀ (a : α), a sb f a f a b + 1

x: α

hx₁: x s

hx₂: f x b + 1

h: b = (∑ i in s, f i) / card s


neg.intro.intro
∀ (a : α), a s(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α

b:

hb: ∀ (a : α), a sb f a f a b + 1

x: α

hx₁: x s

hx₂: f x b + 1

h: b = (∑ i in s, f i) / card s


neg.intro.intro
∀ (a : α), a s(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α

b:

hb: ∀ (a : α), a sb f a f a b + 1

x: α

hx₁: x s

hx₂: f x b + 1


h
b = (∑ i in s, f i) / card s
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α

b:

hb: ∀ (a : α), a sb f a f a b + 1

x: α

hx₁: x s

hx₂: f x b + 1

h: b = (∑ i in s, f i) / card s


neg.intro.intro
∀ (a : α), a s(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α

b:

hb: ∀ (a : α), a sb f a f a b + 1

x: α

hx₁: x s

hx₂: f x b + 1

h: b = (∑ i in s, f i) / card s


neg.intro.intro
∀ (a : α), a sb f a f a b + 1
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α

b:

hb: ∀ (a : α), a sb f a f a b + 1

x: α

hx₁: x s

hx₂: f x b + 1

h: b = (∑ i in s, f i) / card s


neg.intro.intro
∀ (a : α), a sb f a f a b + 1
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α

b:

hb: ∀ (a : α), a sb f a f a b + 1

x: α

hx₁: x s

hx₂: f x b + 1

h: b = (∑ i in s, f i) / card s


neg.intro.intro
∀ (a : α), a s(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α


EquitableOn (s) f ∀ (a : α), a s(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α

b:

hb: ∀ (a : α), a sb f a f a b + 1

x: α

hx₁: x s

hx₂: f x b + 1


h
(∑ i in s, f i) / card s = b
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α


EquitableOn (s) f ∀ (a : α), a s(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α

b:

hb: ∀ (a : α), a sb f a f a b + 1

x: α

hx₁: x s

hx₂: f x b + 1


h
(∑ i in s, f i) / card s = b

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α

b:

hb: ∀ (a : α), a sb f a f a b + 1

x: α

hx₁: x s

hx₂: f x b + 1


b * card s ∑ i in s, b

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α

b:

hb: ∀ (a : α), a sb f a f a b + 1

x: α

hx₁: x s

hx₂: f x b + 1


h
∑ i in s, (b + 1) Nat.succ b * card s
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α


EquitableOn (s) f ∀ (a : α), a s(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α

b:

hb: ∀ (a : α), a sb f a f a b + 1

x: α

hx₁: x s

hx₂: f x b + 1


h
∑ i in s, (b + 1) Nat.succ b * card s
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α

b:

hb: ∀ (a : α), a sb f a f a b + 1

x: α

hx₁: x s

hx₂: f x b + 1


h
∑ i in s, (b + 1) card s * Nat.succ b
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α

b:

hb: ∀ (a : α), a sb f a f a b + 1

x: α

hx₁: x s

hx₂: f x b + 1


h
∑ i in s, (b + 1) Nat.succ b * card s
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α

b:

hb: ∀ (a : α), a sb f a f a b + 1

x: α

hx₁: x s

hx₂: f x b + 1


h
card s * ?m.11012 card s * Nat.succ b
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α

b:

hb: ∀ (a : α), a sb f a f a b + 1

x: α

hx₁: x s

hx₂: f x b + 1


h
∀ (x : α), x sb + 1 = ?m.11012
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α

b:

hb: ∀ (a : α), a sb f a f a b + 1

x: α

hx₁: x s

hx₂: f x b + 1


α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α

b:

hb: ∀ (a : α), a sb f a f a b + 1

x: α

hx₁: x s

hx₂: f x b + 1


h
∀ (x : α), x sb + 1 = Nat.succ b
α: Type u_1

β: Type ?u.8321

s: Finset α

f: α

a: α


EquitableOn (s) f ∀ (a : α), a s(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1

Goals accomplished! 🐙
#align finset.equitable_on_iff_le_le_add_one
Finset.equitableOn_iff_le_le_add_one: ∀ {α : Type u_1} {s : Finset α} {f : α}, EquitableOn (s) f ∀ (a : α), a s(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1
Finset.equitableOn_iff_le_le_add_one
theorem
EquitableOn.le: EquitableOn (s) fa s(∑ i in s, f i) / card s f a
EquitableOn.le
(
h: EquitableOn (s) f
h
:
EquitableOn: {α : Type ?u.11148} → {β : Type ?u.11147} → [inst : LE β] → [inst : Add β] → [inst : One β] → Set α(αβ) → Prop
EquitableOn
(
s: Finset α
s
:
Set: Type ?u.11225 → Type ?u.11225
Set
α: Type ?u.11132
α
)
f: α
f
) (
ha: a s
ha
:
a: α
a
s: Finset α
s
) : (∑
i: ?m.11397
i
in
s: Finset α
s
,
f: α
f
i: ?m.11397
i
) /
s: Finset α
s
.
card: {α : Type ?u.11411} → Finset α
card
f: α
f
a: α
a
:= (
equitableOn_iff_le_le_add_one: ∀ {α : Type ?u.11473} {s : Finset α} {f : α}, EquitableOn (s) f ∀ (a : α), a s(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1
equitableOn_iff_le_le_add_one
.
1: ∀ {a b : Prop}, (a b) → ab
1
h: EquitableOn (s) f
h
a: α
a
ha: a s
ha
).
1: ∀ {a b : Prop}, a ba
1
#align finset.equitable_on.le
Finset.EquitableOn.le: ∀ {α : Type u_1} {s : Finset α} {f : α} {a : α}, EquitableOn (s) fa s(∑ i in s, f i) / card s f a
Finset.EquitableOn.le
theorem
EquitableOn.le_add_one: EquitableOn (s) fa sf a (∑ i in s, f i) / card s + 1
EquitableOn.le_add_one
(
h: EquitableOn (s) f
h
:
EquitableOn: {α : Type ?u.11527} → {β : Type ?u.11526} → [inst : LE β] → [inst : Add β] → [inst : One β] → Set α(αβ) → Prop
EquitableOn
(
s: Finset α
s
:
Set: Type ?u.11604 → Type ?u.11604
Set
α: Type ?u.11511
α
)
f: α
f
) (
ha: a s
ha
:
a: α
a
s: Finset α
s
) :
f: α
f
a: α
a
≤ (∑
i: ?m.11779
i
in
s: Finset α
s
,
f: α
f
i: ?m.11779
i
) /
s: Finset α
s
.
card: {α : Type ?u.11793} → Finset α
card
+
1: ?m.11798
1
:= (
equitableOn_iff_le_le_add_one: ∀ {α : Type ?u.11915} {s : Finset α} {f : α}, EquitableOn (s) f ∀ (a : α), a s(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1
equitableOn_iff_le_le_add_one
.
1: ∀ {a b : Prop}, (a b) → ab
1
h: EquitableOn (s) f
h
a: α
a
ha: a s
ha
).
2: ∀ {a b : Prop}, a bb
2
#align finset.equitable_on.le_add_one
Finset.EquitableOn.le_add_one: ∀ {α : Type u_1} {s : Finset α} {f : α} {a : α}, EquitableOn (s) fa sf a (∑ i in s, f i) / card s + 1
Finset.EquitableOn.le_add_one
theorem
equitableOn_iff: EquitableOn (s) f ∀ (a : α), a sf a = (∑ i in s, f i) / card s f a = (∑ i in s, f i) / card s + 1
equitableOn_iff
:
EquitableOn: {α : Type ?u.11969} → {β : Type ?u.11968} → [inst : LE β] → [inst : Add β] → [inst : One β] → Set α(αβ) → Prop
EquitableOn
(
s: Finset α
s
:
Set: Type ?u.11976 → Type ?u.11976
Set
α: Type ?u.11953
α
)
f: α
f
↔ ∀
a: ?m.12109
a
s: Finset α
s
,
f: α
f
a: ?m.12109
a
= (∑
i: ?m.12152
i
in
s: Finset α
s
,
f: α
f
i: ?m.12152
i
) /
s: Finset α
s
.
card: {α : Type ?u.12166} → Finset α
card
f: α
f
a: ?m.12109
a
= (∑
i: ?m.12236
i
in
s: Finset α
s
,
f: α
f
i: ?m.12236
i
) /
s: Finset α
s
.
card: {α : Type ?u.12239} → Finset α
card
+
1: ?m.12244
1
:=

Goals accomplished! 🐙
α: Type u_1

β: Type ?u.11956

s: Finset α

f: α

a: α


EquitableOn (s) f ∀ (a : α), a sf a = (∑ i in s, f i) / card s f a = (∑ i in s, f i) / card s + 1
α: Type u_1

β: Type ?u.11956

s: Finset α

f: α

a: α


EquitableOn (s) f ∀ (a : α), a sf a = (∑ i in s, f i) / card s f a = (∑ i in s, f i) / card s + 1
α: Type u_1

β: Type ?u.11956

s: Finset α

f: α

a: α


(∀ (a : α), a s(∑ i in s, f i) / card s f a f a (∑ i in s, f i) / card s + 1) ∀ (a : α), a sf a = (∑ i in s, f i) / card s f a = (∑ i in s, f i) / card s + 1
α: Type u_1

β: Type ?u.11956

s: Finset α

f: α

a: α


EquitableOn (s) f ∀ (a : α), a sf a = (∑ i in s, f i) / card s f a = (∑ i in s, f i) / card s + 1

Goals accomplished! 🐙

Goals accomplished! 🐙
#align finset.equitable_on_iff
Finset.equitableOn_iff: ∀ {α : Type u_1} {s : Finset α} {f : α}, EquitableOn (s) f ∀ (a : α), a sf a = (∑ i in s, f i) / card s f a = (∑ i in s, f i) / card s + 1
Finset.equitableOn_iff
end Finset