combinatorics.simple_graph.regularity.uniform
⟷
Mathlib.Combinatorics.SimpleGraph.Regularity.Uniform
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
Define the increment partition and prove its two crucial properties:
This is all internal to the proof of SRL, so I made most lemmas private
.
Co-authored-by: Bhavik Mehta <bhavikmehta8@gmail.com>
@@ -33,6 +33,10 @@ is less than `ε`.
* `finpartition.is_uniform`: Uniformity of a partition.
* `finpartition.nonuniform_witnesses`: For each non-uniform pair of parts of a partition, pick
witnesses of non-uniformity and dump them all together.
+
+## References
+
+[Yaël Dillies, Bhavik Mehta, *Formalising Szemerédi’s Regularity Lemma in Lean*][srl_itp]
-/
open finset
The heart of the calculation of Szemerédi Regularity Lemma. Define the partition of a part of the original partition and show it locally increases the energy.
This is all internal to the proof of SRL, so I made most lemmas private
@@ -146,7 +146,7 @@ begin
{ exact G.right_nonuniform_witnesses_subset (λ i, h i.symm) }
end
-lemma nonuniform_witness_card_le (h : ¬ G.is_uniform ε s t) :
+lemma le_card_nonuniform_witness (h : ¬ G.is_uniform ε s t) :
(s.card : 𝕜) * ε ≤ (G.nonuniform_witness ε s t).card :=
begin
unfold nonuniform_witness,
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(first ported)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -264,7 +264,7 @@ noncomputable def nonUniforms (ε : 𝕜) : Finset (Finset α × Finset α) :=
#print Finpartition.mk_mem_nonUniforms_iff /-
theorem mk_mem_nonUniforms_iff (u v : Finset α) (ε : 𝕜) :
(u, v) ∈ P.nonUniforms G ε ↔ u ∈ P.parts ∧ v ∈ P.parts ∧ u ≠ v ∧ ¬G.IsUniform ε u v := by
- rw [non_uniforms, mem_filter, mem_off_diag, and_assoc', and_assoc']
+ rw [non_uniforms, mem_filter, mem_off_diag, and_assoc, and_assoc]
#align finpartition.mk_mem_non_uniforms_iff Finpartition.mk_mem_nonUniforms_iff
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -95,7 +95,7 @@ theorem isUniform_comm : IsUniform G ε s t ↔ IsUniform G ε t s :=
theorem isUniform_singleton (hε : 0 < ε) : G.IsUniform ε {a} {b} :=
by
intro s' hs' t' ht' hs ht
- rw [card_singleton, Nat.cast_one, one_mul] at hs ht
+ rw [card_singleton, Nat.cast_one, one_mul] at hs ht
obtain rfl | rfl := Finset.subset_singleton_iff.1 hs'
· replace hs : ε ≤ 0 := by simpa using hs
exact (hε.not_le hs).elim
@@ -116,7 +116,7 @@ theorem not_isUniform_zero : ¬G.IsUniform (0 : 𝕜) s t := fun h =>
theorem isUniform_one : G.IsUniform (1 : 𝕜) s t :=
by
intro s' hs' t' ht' hs ht
- rw [mul_one] at hs ht
+ rw [mul_one] at hs ht
rw [eq_of_subset_of_card_le hs' (Nat.cast_le.1 hs),
eq_of_subset_of_card_le ht' (Nat.cast_le.1 ht), sub_self, abs_zero]
exact zero_lt_one
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -316,7 +316,7 @@ variable {P G}
#print Finpartition.IsUniform.mono /-
theorem IsUniform.mono {ε ε' : 𝕜} (hP : P.IsUniform G ε) (h : ε ≤ ε') : P.IsUniform G ε' :=
- ((Nat.cast_le.2 <| card_le_of_subset <| P.nonUniforms_mono G h).trans hP).trans <|
+ ((Nat.cast_le.2 <| card_le_card <| P.nonUniforms_mono G h).trans hP).trans <|
mul_le_mul_of_nonneg_left h <| Nat.cast_nonneg _
#align finpartition.is_uniform.mono Finpartition.IsUniform.mono
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/b1abe23ae96fef89ad30d9f4362c307f72a55010
@@ -134,7 +134,7 @@ theorem not_isUniform_iff :
t' ⊆ t ∧
↑s.card * ε ≤ s'.card ∧
↑t.card * ε ≤ t'.card ∧ ε ≤ |G.edgeDensity s' t' - G.edgeDensity s t| :=
- by unfold is_uniform; simp only [not_forall, not_lt, exists_prop]
+ by unfold is_uniform; simp only [Classical.not_forall, not_lt, exists_prop]
#align simple_graph.not_is_uniform_iff SimpleGraph.not_isUniform_iff
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,8 +3,8 @@ Copyright (c) 2022 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
-/
-import Mathbin.Combinatorics.SimpleGraph.Density
-import Mathbin.SetTheory.Ordinal.Basic
+import Combinatorics.SimpleGraph.Density
+import SetTheory.Ordinal.Basic
#align_import combinatorics.simple_graph.regularity.uniform from "leanprover-community/mathlib"@"bf7ef0e83e5b7e6c1169e97f055e58a2e4e9d52d"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,15 +2,12 @@
Copyright (c) 2022 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 combinatorics.simple_graph.regularity.uniform
-! leanprover-community/mathlib commit bf7ef0e83e5b7e6c1169e97f055e58a2e4e9d52d
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Combinatorics.SimpleGraph.Density
import Mathbin.SetTheory.Ordinal.Basic
+#align_import combinatorics.simple_graph.regularity.uniform from "leanprover-community/mathlib"@"bf7ef0e83e5b7e6c1169e97f055e58a2e4e9d52d"
+
/-!
# Graph uniformity and uniform partitions
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -80,16 +80,21 @@ theorem IsUniform.mono {ε' : 𝕜} (h : ε ≤ ε') (hε : IsUniform G ε s t)
#align simple_graph.is_uniform.mono SimpleGraph.IsUniform.mono
-/
+#print SimpleGraph.IsUniform.symm /-
theorem IsUniform.symm : Symmetric (IsUniform G ε) := fun s t h t' ht' s' hs' ht hs => by
rw [edge_density_comm _ t', edge_density_comm _ t]; exact h hs' ht' hs ht
#align simple_graph.is_uniform.symm SimpleGraph.IsUniform.symm
+-/
variable (G)
+#print SimpleGraph.isUniform_comm /-
theorem isUniform_comm : IsUniform G ε s t ↔ IsUniform G ε t s :=
⟨fun h => h.symm, fun h => h.symm⟩
#align simple_graph.is_uniform_comm SimpleGraph.isUniform_comm
+-/
+#print SimpleGraph.isUniform_singleton /-
theorem isUniform_singleton (hε : 0 < ε) : G.IsUniform ε {a} {b} :=
by
intro s' hs' t' ht' hs ht
@@ -102,11 +107,15 @@ theorem isUniform_singleton (hε : 0 < ε) : G.IsUniform ε {a} {b} :=
exact (hε.not_le ht).elim
· rwa [sub_self, abs_zero]
#align simple_graph.is_uniform_singleton SimpleGraph.isUniform_singleton
+-/
+#print SimpleGraph.not_isUniform_zero /-
theorem not_isUniform_zero : ¬G.IsUniform (0 : 𝕜) s t := fun h =>
(abs_nonneg _).not_lt <| h (empty_subset _) (empty_subset _) (by simp) (by simp)
#align simple_graph.not_is_uniform_zero SimpleGraph.not_isUniform_zero
+-/
+#print SimpleGraph.isUniform_one /-
theorem isUniform_one : G.IsUniform (1 : 𝕜) s t :=
by
intro s' hs' t' ht' hs ht
@@ -115,9 +124,11 @@ theorem isUniform_one : G.IsUniform (1 : 𝕜) s t :=
eq_of_subset_of_card_le ht' (Nat.cast_le.1 ht), sub_self, abs_zero]
exact zero_lt_one
#align simple_graph.is_uniform_one SimpleGraph.isUniform_one
+-/
variable {G}
+#print SimpleGraph.not_isUniform_iff /-
theorem not_isUniform_iff :
¬G.IsUniform ε s t ↔
∃ s',
@@ -128,6 +139,7 @@ theorem not_isUniform_iff :
↑t.card * ε ≤ t'.card ∧ ε ≤ |G.edgeDensity s' t' - G.edgeDensity s t| :=
by unfold is_uniform; simp only [not_forall, not_lt, exists_prop]
#align simple_graph.not_is_uniform_iff SimpleGraph.not_isUniform_iff
+-/
open scoped Classical
@@ -144,30 +156,39 @@ noncomputable def nonuniformWitnesses (ε : 𝕜) (s t : Finset α) : Finset α
#align simple_graph.nonuniform_witnesses SimpleGraph.nonuniformWitnesses
-/
+#print SimpleGraph.left_nonuniformWitnesses_subset /-
theorem left_nonuniformWitnesses_subset (h : ¬G.IsUniform ε s t) :
(G.nonuniformWitnesses ε s t).1 ⊆ s := by rw [nonuniform_witnesses, dif_pos h];
exact (not_is_uniform_iff.1 h).choose_spec.1
#align simple_graph.left_nonuniform_witnesses_subset SimpleGraph.left_nonuniformWitnesses_subset
+-/
+#print SimpleGraph.left_nonuniformWitnesses_card /-
theorem left_nonuniformWitnesses_card (h : ¬G.IsUniform ε s t) :
(s.card : 𝕜) * ε ≤ (G.nonuniformWitnesses ε s t).1.card :=
by
rw [nonuniform_witnesses, dif_pos h]
exact (not_is_uniform_iff.1 h).choose_spec.2.choose_spec.2.1
#align simple_graph.left_nonuniform_witnesses_card SimpleGraph.left_nonuniformWitnesses_card
+-/
+#print SimpleGraph.right_nonuniformWitnesses_subset /-
theorem right_nonuniformWitnesses_subset (h : ¬G.IsUniform ε s t) :
(G.nonuniformWitnesses ε s t).2 ⊆ t := by rw [nonuniform_witnesses, dif_pos h];
exact (not_is_uniform_iff.1 h).choose_spec.2.choose_spec.1
#align simple_graph.right_nonuniform_witnesses_subset SimpleGraph.right_nonuniformWitnesses_subset
+-/
+#print SimpleGraph.right_nonuniformWitnesses_card /-
theorem right_nonuniformWitnesses_card (h : ¬G.IsUniform ε s t) :
(t.card : 𝕜) * ε ≤ (G.nonuniformWitnesses ε s t).2.card :=
by
rw [nonuniform_witnesses, dif_pos h]
exact (not_is_uniform_iff.1 h).choose_spec.2.choose_spec.2.2.1
#align simple_graph.right_nonuniform_witnesses_card SimpleGraph.right_nonuniformWitnesses_card
+-/
+#print SimpleGraph.nonuniformWitnesses_spec /-
theorem nonuniformWitnesses_spec (h : ¬G.IsUniform ε s t) :
ε ≤
|G.edgeDensity (G.nonuniformWitnesses ε s t).1 (G.nonuniformWitnesses ε s t).2 -
@@ -176,6 +197,7 @@ theorem nonuniformWitnesses_spec (h : ¬G.IsUniform ε s t) :
rw [nonuniform_witnesses, dif_pos h]
exact (not_is_uniform_iff.1 h).choose_spec.2.choose_spec.2.2.2
#align simple_graph.nonuniform_witnesses_spec SimpleGraph.nonuniformWitnesses_spec
+-/
#print SimpleGraph.nonuniformWitness /-
/-- Arbitrary witness of non-uniformity. `G.nonuniform_witness ε s t` and
@@ -186,6 +208,7 @@ noncomputable def nonuniformWitness (ε : 𝕜) (s t : Finset α) : Finset α :=
#align simple_graph.nonuniform_witness SimpleGraph.nonuniformWitness
-/
+#print SimpleGraph.nonuniformWitness_subset /-
theorem nonuniformWitness_subset (h : ¬G.IsUniform ε s t) : G.nonuniformWitness ε s t ⊆ s :=
by
unfold nonuniform_witness
@@ -193,7 +216,9 @@ theorem nonuniformWitness_subset (h : ¬G.IsUniform ε s t) : G.nonuniformWitnes
· exact G.left_nonuniform_witnesses_subset h
· exact G.right_nonuniform_witnesses_subset fun i => h i.symm
#align simple_graph.nonuniform_witness_subset SimpleGraph.nonuniformWitness_subset
+-/
+#print SimpleGraph.le_card_nonuniformWitness /-
theorem le_card_nonuniformWitness (h : ¬G.IsUniform ε s t) :
(s.card : 𝕜) * ε ≤ (G.nonuniformWitness ε s t).card :=
by
@@ -202,7 +227,9 @@ theorem le_card_nonuniformWitness (h : ¬G.IsUniform ε s t) :
· exact G.left_nonuniform_witnesses_card h
· exact G.right_nonuniform_witnesses_card fun i => h i.symm
#align simple_graph.le_card_nonuniform_witness SimpleGraph.le_card_nonuniformWitness
+-/
+#print SimpleGraph.nonuniformWitness_spec /-
theorem nonuniformWitness_spec (h₁ : s ≠ t) (h₂ : ¬G.IsUniform ε s t) :
ε ≤
|G.edgeDensity (G.nonuniformWitness ε s t) (G.nonuniformWitness ε t s) - G.edgeDensity s t| :=
@@ -215,6 +242,7 @@ theorem nonuniformWitness_spec (h₁ : s ≠ t) (h₂ : ¬G.IsUniform ε s t) :
· rw [if_neg (asymm GT.gt), if_pos GT.gt, edge_density_comm, edge_density_comm _ s]
apply G.nonuniform_witnesses_spec fun i => h₂ i.symm
#align simple_graph.nonuniform_witness_spec SimpleGraph.nonuniformWitness_spec
+-/
end SimpleGraph
@@ -228,21 +256,28 @@ namespace Finpartition
open scoped Classical
+#print Finpartition.nonUniforms /-
/-- The pairs of parts of a partition `P` which are not `ε`-uniform in a graph `G`. Note that we
dismiss the diagonal. We do not care whether `s` is `ε`-uniform with itself. -/
noncomputable def nonUniforms (ε : 𝕜) : Finset (Finset α × Finset α) :=
P.parts.offDiag.filterₓ fun uv => ¬G.IsUniform ε uv.1 uv.2
#align finpartition.non_uniforms Finpartition.nonUniforms
+-/
+#print Finpartition.mk_mem_nonUniforms_iff /-
theorem mk_mem_nonUniforms_iff (u v : Finset α) (ε : 𝕜) :
(u, v) ∈ P.nonUniforms G ε ↔ u ∈ P.parts ∧ v ∈ P.parts ∧ u ≠ v ∧ ¬G.IsUniform ε u v := by
rw [non_uniforms, mem_filter, mem_off_diag, and_assoc', and_assoc']
#align finpartition.mk_mem_non_uniforms_iff Finpartition.mk_mem_nonUniforms_iff
+-/
+#print Finpartition.nonUniforms_mono /-
theorem nonUniforms_mono {ε ε' : 𝕜} (h : ε ≤ ε') : P.nonUniforms G ε' ⊆ P.nonUniforms G ε :=
monotone_filter_right _ fun uv => mt <| SimpleGraph.IsUniform.mono h
#align finpartition.non_uniforms_mono Finpartition.nonUniforms_mono
+-/
+#print Finpartition.nonUniforms_bot /-
theorem nonUniforms_bot (hε : 0 < ε) : (⊥ : Finpartition A).nonUniforms G ε = ∅ :=
by
rw [eq_empty_iff_forall_not_mem]
@@ -252,55 +287,72 @@ theorem nonUniforms_bot (hε : 0 < ε) : (⊥ : Finpartition A).nonUniforms G ε
rintro x hx rfl y hy rfl h
exact G.is_uniform_singleton hε
#align finpartition.non_uniforms_bot Finpartition.nonUniforms_bot
+-/
+#print Finpartition.IsUniform /-
/-- A finpartition of a graph's vertex set is `ε`-uniform (aka `ε`-regular) iff the proportion of
its pairs of parts that are not `ε`-uniform is at most `ε`. -/
def IsUniform (ε : 𝕜) : Prop :=
((P.nonUniforms G ε).card : 𝕜) ≤ (P.parts.card * (P.parts.card - 1) : ℕ) * ε
#align finpartition.is_uniform Finpartition.IsUniform
+-/
+#print Finpartition.botIsUniform /-
theorem botIsUniform (hε : 0 < ε) : (⊥ : Finpartition A).IsUniform G ε :=
by
rw [Finpartition.IsUniform, Finpartition.card_bot, non_uniforms_bot _ hε, Finset.card_empty,
Nat.cast_zero]
exact mul_nonneg (Nat.cast_nonneg _) hε.le
#align finpartition.bot_is_uniform Finpartition.botIsUniform
+-/
+#print Finpartition.isUniformOne /-
theorem isUniformOne : P.IsUniform G (1 : 𝕜) :=
by
rw [is_uniform, mul_one, Nat.cast_le]
refine' (card_filter_le _ _).trans _
rw [off_diag_card, Nat.mul_sub_left_distrib, mul_one]
#align finpartition.is_uniform_one Finpartition.isUniformOne
+-/
variable {P G}
+#print Finpartition.IsUniform.mono /-
theorem IsUniform.mono {ε ε' : 𝕜} (hP : P.IsUniform G ε) (h : ε ≤ ε') : P.IsUniform G ε' :=
((Nat.cast_le.2 <| card_le_of_subset <| P.nonUniforms_mono G h).trans hP).trans <|
mul_le_mul_of_nonneg_left h <| Nat.cast_nonneg _
#align finpartition.is_uniform.mono Finpartition.IsUniform.mono
+-/
+#print Finpartition.isUniformOfEmpty /-
theorem isUniformOfEmpty (hP : P.parts = ∅) : P.IsUniform G ε := by
simp [is_uniform, hP, non_uniforms]
#align finpartition.is_uniform_of_empty Finpartition.isUniformOfEmpty
+-/
+#print Finpartition.nonempty_of_not_uniform /-
theorem nonempty_of_not_uniform (h : ¬P.IsUniform G ε) : P.parts.Nonempty :=
nonempty_of_ne_empty fun h₁ => h <| isUniformOfEmpty h₁
#align finpartition.nonempty_of_not_uniform Finpartition.nonempty_of_not_uniform
+-/
variable (P G ε) (s : Finset α)
+#print Finpartition.nonuniformWitnesses /-
/-- A choice of witnesses of non-uniformity among the parts of a finpartition. -/
noncomputable def nonuniformWitnesses : Finset (Finset α) :=
(P.parts.filterₓ fun t => s ≠ t ∧ ¬G.IsUniform ε s t).image (G.nonuniformWitness ε s)
#align finpartition.nonuniform_witnesses Finpartition.nonuniformWitnesses
+-/
variable {P G ε s} {t : Finset α}
+#print Finpartition.nonuniformWitness_mem_nonuniformWitnesses /-
theorem nonuniformWitness_mem_nonuniformWitnesses (h : ¬G.IsUniform ε s t) (ht : t ∈ P.parts)
(hst : s ≠ t) : G.nonuniformWitness ε s t ∈ P.nonuniformWitnesses G ε s :=
mem_image_of_mem _ <| mem_filter.2 ⟨ht, hst, h⟩
#align finpartition.nonuniform_witness_mem_nonuniform_witnesses Finpartition.nonuniformWitness_mem_nonuniformWitnesses
+-/
end Finpartition
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -93,7 +93,7 @@ theorem isUniform_comm : IsUniform G ε s t ↔ IsUniform G ε t s :=
theorem isUniform_singleton (hε : 0 < ε) : G.IsUniform ε {a} {b} :=
by
intro s' hs' t' ht' hs ht
- rw [card_singleton, Nat.cast_one, one_mul] at hs ht
+ rw [card_singleton, Nat.cast_one, one_mul] at hs ht
obtain rfl | rfl := Finset.subset_singleton_iff.1 hs'
· replace hs : ε ≤ 0 := by simpa using hs
exact (hε.not_le hs).elim
@@ -110,7 +110,7 @@ theorem not_isUniform_zero : ¬G.IsUniform (0 : 𝕜) s t := fun h =>
theorem isUniform_one : G.IsUniform (1 : 𝕜) s t :=
by
intro s' hs' t' ht' hs ht
- rw [mul_one] at hs ht
+ rw [mul_one] at hs ht
rw [eq_of_subset_of_card_le hs' (Nat.cast_le.1 hs),
eq_of_subset_of_card_le ht' (Nat.cast_le.1 ht), sub_self, abs_zero]
exact zero_lt_one
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -72,11 +72,13 @@ def IsUniform (s t : Finset α) : Prop :=
variable {G ε}
+#print SimpleGraph.IsUniform.mono /-
theorem IsUniform.mono {ε' : 𝕜} (h : ε ≤ ε') (hε : IsUniform G ε s t) : IsUniform G ε' s t :=
fun s' hs' t' ht' hs ht => by
refine' (hε hs' ht' (le_trans _ hs) (le_trans _ ht)).trans_le h <;>
exact mul_le_mul_of_nonneg_left h (Nat.cast_nonneg _)
#align simple_graph.is_uniform.mono SimpleGraph.IsUniform.mono
+-/
theorem IsUniform.symm : Symmetric (IsUniform G ε) := fun s t h t' ht' s' hs' ht hs => by
rw [edge_density_comm _ t', edge_density_comm _ t]; exact h hs' ht' hs ht
@@ -127,7 +129,7 @@ theorem not_isUniform_iff :
by unfold is_uniform; simp only [not_forall, not_lt, exists_prop]
#align simple_graph.not_is_uniform_iff SimpleGraph.not_isUniform_iff
-open Classical
+open scoped Classical
variable (G)
@@ -224,7 +226,7 @@ variable [DecidableEq α] {A : Finset α} (P : Finpartition A) (G : SimpleGraph
namespace Finpartition
-open Classical
+open scoped Classical
/-- The pairs of parts of a partition `P` which are not `ε`-uniform in a graph `G`. Note that we
dismiss the diagonal. We do not care whether `s` is `ε`-uniform with itself. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -72,46 +72,22 @@ def IsUniform (s t : Finset α) : Prop :=
variable {G ε}
-/- warning: simple_graph.is_uniform.mono -> SimpleGraph.IsUniform.mono is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] {G : SimpleGraph.{u1} α} [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α} {ε' : 𝕜}, (LE.le.{u2} 𝕜 (Preorder.toHasLe.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) ε ε') -> (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t) -> (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε' s t)
-but is expected to have type
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] {G : SimpleGraph.{u1} α} [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α} {ε' : 𝕜}, (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (StrictOrderedRing.toPartialOrder.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1)))))) ε ε') -> (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t) -> (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε' s t)
-Case conversion may be inaccurate. Consider using '#align simple_graph.is_uniform.mono SimpleGraph.IsUniform.monoₓ'. -/
theorem IsUniform.mono {ε' : 𝕜} (h : ε ≤ ε') (hε : IsUniform G ε s t) : IsUniform G ε' s t :=
fun s' hs' t' ht' hs ht => by
refine' (hε hs' ht' (le_trans _ hs) (le_trans _ ht)).trans_le h <;>
exact mul_le_mul_of_nonneg_left h (Nat.cast_nonneg _)
#align simple_graph.is_uniform.mono SimpleGraph.IsUniform.mono
-/- warning: simple_graph.is_uniform.symm -> SimpleGraph.IsUniform.symm is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] {G : SimpleGraph.{u1} α} [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜}, Symmetric.{succ u1} (Finset.{u1} α) (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε)
-but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] {G : SimpleGraph.{u2} α} [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜}, Symmetric.{succ u2} (Finset.{u2} α) (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε)
-Case conversion may be inaccurate. Consider using '#align simple_graph.is_uniform.symm SimpleGraph.IsUniform.symmₓ'. -/
theorem IsUniform.symm : Symmetric (IsUniform G ε) := fun s t h t' ht' s' hs' ht hs => by
rw [edge_density_comm _ t', edge_density_comm _ t]; exact h hs' ht' hs ht
#align simple_graph.is_uniform.symm SimpleGraph.IsUniform.symm
variable (G)
-/- warning: simple_graph.is_uniform_comm -> SimpleGraph.isUniform_comm is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, Iff (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t) (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε t s)
-but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, Iff (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t) (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε t s)
-Case conversion may be inaccurate. Consider using '#align simple_graph.is_uniform_comm SimpleGraph.isUniform_commₓ'. -/
theorem isUniform_comm : IsUniform G ε s t ↔ IsUniform G ε t s :=
⟨fun h => h.symm, fun h => h.symm⟩
#align simple_graph.is_uniform_comm SimpleGraph.isUniform_comm
-/- warning: simple_graph.is_uniform_singleton -> SimpleGraph.isUniform_singleton is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {a : α} {b : α}, (LT.lt.{u2} 𝕜 (Preorder.toHasLt.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))))) ε) -> (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) b))
-but is expected to have type
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {a : α} {b : α}, (LT.lt.{u2} 𝕜 (Preorder.toLT.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (StrictOrderedRing.toPartialOrder.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1)))))) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (LinearOrderedSemifield.toSemifield.{u2} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u2} 𝕜 _inst_1))))))) ε) -> (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b))
-Case conversion may be inaccurate. Consider using '#align simple_graph.is_uniform_singleton SimpleGraph.isUniform_singletonₓ'. -/
theorem isUniform_singleton (hε : 0 < ε) : G.IsUniform ε {a} {b} :=
by
intro s' hs' t' ht' hs ht
@@ -125,22 +101,10 @@ theorem isUniform_singleton (hε : 0 < ε) : G.IsUniform ε {a} {b} :=
· rwa [sub_self, abs_zero]
#align simple_graph.is_uniform_singleton SimpleGraph.isUniform_singleton
-/- warning: simple_graph.not_is_uniform_zero -> SimpleGraph.not_isUniform_zero is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {s : Finset.{u1} α} {t : Finset.{u1} α}, Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))))) s t)
-but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {s : Finset.{u2} α} {t : Finset.{u2} α}, Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1))))))) s t)
-Case conversion may be inaccurate. Consider using '#align simple_graph.not_is_uniform_zero SimpleGraph.not_isUniform_zeroₓ'. -/
theorem not_isUniform_zero : ¬G.IsUniform (0 : 𝕜) s t := fun h =>
(abs_nonneg _).not_lt <| h (empty_subset _) (empty_subset _) (by simp) (by simp)
#align simple_graph.not_is_uniform_zero SimpleGraph.not_isUniform_zero
-/- warning: simple_graph.is_uniform_one -> SimpleGraph.isUniform_one is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {s : Finset.{u1} α} {t : Finset.{u1} α}, SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) (OfNat.ofNat.{u2} 𝕜 1 (OfNat.mk.{u2} 𝕜 1 (One.one.{u2} 𝕜 (AddMonoidWithOne.toOne.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) s t
-but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {s : Finset.{u2} α} {t : Finset.{u2} α}, SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) (OfNat.ofNat.{u1} 𝕜 1 (One.toOfNat1.{u1} 𝕜 (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1))))))) s t
-Case conversion may be inaccurate. Consider using '#align simple_graph.is_uniform_one SimpleGraph.isUniform_oneₓ'. -/
theorem isUniform_one : G.IsUniform (1 : 𝕜) s t :=
by
intro s' hs' t' ht' hs ht
@@ -152,9 +116,6 @@ theorem isUniform_one : G.IsUniform (1 : 𝕜) s t :=
variable {G}
-/- warning: simple_graph.not_is_uniform_iff -> SimpleGraph.not_isUniform_iff is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align simple_graph.not_is_uniform_iff SimpleGraph.not_isUniform_iffₓ'. -/
theorem not_isUniform_iff :
¬G.IsUniform ε s t ↔
∃ s',
@@ -181,23 +142,11 @@ noncomputable def nonuniformWitnesses (ε : 𝕜) (s t : Finset α) : Finset α
#align simple_graph.nonuniform_witnesses SimpleGraph.nonuniformWitnesses
-/
-/- warning: simple_graph.left_nonuniform_witnesses_subset -> SimpleGraph.left_nonuniformWitnesses_subset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (Prod.fst.{u1, u1} (Finset.{u1} α) (Finset.{u1} α) (SimpleGraph.nonuniformWitnesses.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) s)
-but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (HasSubset.Subset.{u2} (Finset.{u2} α) (Finset.instHasSubsetFinset.{u2} α) (Prod.fst.{u2, u2} (Finset.{u2} α) (Finset.{u2} α) (SimpleGraph.nonuniformWitnesses.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) s)
-Case conversion may be inaccurate. Consider using '#align simple_graph.left_nonuniform_witnesses_subset SimpleGraph.left_nonuniformWitnesses_subsetₓ'. -/
theorem left_nonuniformWitnesses_subset (h : ¬G.IsUniform ε s t) :
(G.nonuniformWitnesses ε s t).1 ⊆ s := by rw [nonuniform_witnesses, dif_pos h];
exact (not_is_uniform_iff.1 h).choose_spec.1
#align simple_graph.left_nonuniform_witnesses_subset SimpleGraph.left_nonuniformWitnesses_subset
-/- warning: simple_graph.left_nonuniform_witnesses_card -> SimpleGraph.left_nonuniformWitnesses_card is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u2} 𝕜 (Preorder.toHasLe.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α s)) ε) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α (Prod.fst.{u1, u1} (Finset.{u1} α) (Finset.{u1} α) (SimpleGraph.nonuniformWitnesses.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)))))
-but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) (HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))))) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α s)) ε) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α (Prod.fst.{u2, u2} (Finset.{u2} α) (Finset.{u2} α) (SimpleGraph.nonuniformWitnesses.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)))))
-Case conversion may be inaccurate. Consider using '#align simple_graph.left_nonuniform_witnesses_card SimpleGraph.left_nonuniformWitnesses_cardₓ'. -/
theorem left_nonuniformWitnesses_card (h : ¬G.IsUniform ε s t) :
(s.card : 𝕜) * ε ≤ (G.nonuniformWitnesses ε s t).1.card :=
by
@@ -205,23 +154,11 @@ theorem left_nonuniformWitnesses_card (h : ¬G.IsUniform ε s t) :
exact (not_is_uniform_iff.1 h).choose_spec.2.choose_spec.2.1
#align simple_graph.left_nonuniform_witnesses_card SimpleGraph.left_nonuniformWitnesses_card
-/- warning: simple_graph.right_nonuniform_witnesses_subset -> SimpleGraph.right_nonuniformWitnesses_subset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (Prod.snd.{u1, u1} (Finset.{u1} α) (Finset.{u1} α) (SimpleGraph.nonuniformWitnesses.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) t)
-but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (HasSubset.Subset.{u2} (Finset.{u2} α) (Finset.instHasSubsetFinset.{u2} α) (Prod.snd.{u2, u2} (Finset.{u2} α) (Finset.{u2} α) (SimpleGraph.nonuniformWitnesses.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) t)
-Case conversion may be inaccurate. Consider using '#align simple_graph.right_nonuniform_witnesses_subset SimpleGraph.right_nonuniformWitnesses_subsetₓ'. -/
theorem right_nonuniformWitnesses_subset (h : ¬G.IsUniform ε s t) :
(G.nonuniformWitnesses ε s t).2 ⊆ t := by rw [nonuniform_witnesses, dif_pos h];
exact (not_is_uniform_iff.1 h).choose_spec.2.choose_spec.1
#align simple_graph.right_nonuniform_witnesses_subset SimpleGraph.right_nonuniformWitnesses_subset
-/- warning: simple_graph.right_nonuniform_witnesses_card -> SimpleGraph.right_nonuniformWitnesses_card is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u2} 𝕜 (Preorder.toHasLe.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α t)) ε) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α (Prod.snd.{u1, u1} (Finset.{u1} α) (Finset.{u1} α) (SimpleGraph.nonuniformWitnesses.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)))))
-but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) (HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))))) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α t)) ε) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α (Prod.snd.{u2, u2} (Finset.{u2} α) (Finset.{u2} α) (SimpleGraph.nonuniformWitnesses.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)))))
-Case conversion may be inaccurate. Consider using '#align simple_graph.right_nonuniform_witnesses_card SimpleGraph.right_nonuniformWitnesses_cardₓ'. -/
theorem right_nonuniformWitnesses_card (h : ¬G.IsUniform ε s t) :
(t.card : 𝕜) * ε ≤ (G.nonuniformWitnesses ε s t).2.card :=
by
@@ -229,12 +166,6 @@ theorem right_nonuniformWitnesses_card (h : ¬G.IsUniform ε s t) :
exact (not_is_uniform_iff.1 h).choose_spec.2.choose_spec.2.2.1
#align simple_graph.right_nonuniform_witnesses_card SimpleGraph.right_nonuniformWitnesses_card
-/- warning: simple_graph.nonuniform_witnesses_spec -> SimpleGraph.nonuniformWitnesses_spec is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u2} 𝕜 (Preorder.toHasLe.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) ε (Abs.abs.{u2} 𝕜 (Neg.toHasAbs.{u2} 𝕜 (SubNegMonoid.toHasNeg.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))) (SemilatticeSup.toHasSup.{u2} 𝕜 (Lattice.toSemilatticeSup.{u2} 𝕜 (LinearOrder.toLattice.{u2} 𝕜 (LinearOrderedRing.toLinearOrder.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HSub.hSub.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHSub.{u2} 𝕜 (SubNegMonoid.toHasSub.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) (Prod.fst.{u1, u1} (Finset.{u1} α) (Finset.{u1} α) (SimpleGraph.nonuniformWitnesses.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) (Prod.snd.{u1, u1} (Finset.{u1} α) (Finset.{u1} α) (SimpleGraph.nonuniformWitnesses.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))
-but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) ε (Rat.cast.{u1} 𝕜 (LinearOrderedField.toRatCast.{u1} 𝕜 _inst_1) (Abs.abs.{0} Rat (Neg.toHasAbs.{0} Rat Rat.instNegRat Rat.instSupRat) (HSub.hSub.{0, 0, 0} Rat Rat Rat (instHSub.{0} Rat Rat.instSubRat) (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) (Prod.fst.{u2, u2} (Finset.{u2} α) (Finset.{u2} α) (SimpleGraph.nonuniformWitnesses.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) (Prod.snd.{u2, u2} (Finset.{u2} α) (Finset.{u2} α) (SimpleGraph.nonuniformWitnesses.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t))) (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))
-Case conversion may be inaccurate. Consider using '#align simple_graph.nonuniform_witnesses_spec SimpleGraph.nonuniformWitnesses_specₓ'. -/
theorem nonuniformWitnesses_spec (h : ¬G.IsUniform ε s t) :
ε ≤
|G.edgeDensity (G.nonuniformWitnesses ε s t).1 (G.nonuniformWitnesses ε s t).2 -
@@ -253,12 +184,6 @@ noncomputable def nonuniformWitness (ε : 𝕜) (s t : Finset α) : Finset α :=
#align simple_graph.nonuniform_witness SimpleGraph.nonuniformWitness
-/
-/- warning: simple_graph.nonuniform_witness_subset -> SimpleGraph.nonuniformWitness_subset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (SimpleGraph.nonuniformWitness.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t) s)
-but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (HasSubset.Subset.{u2} (Finset.{u2} α) (Finset.instHasSubsetFinset.{u2} α) (SimpleGraph.nonuniformWitness.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t) s)
-Case conversion may be inaccurate. Consider using '#align simple_graph.nonuniform_witness_subset SimpleGraph.nonuniformWitness_subsetₓ'. -/
theorem nonuniformWitness_subset (h : ¬G.IsUniform ε s t) : G.nonuniformWitness ε s t ⊆ s :=
by
unfold nonuniform_witness
@@ -267,12 +192,6 @@ theorem nonuniformWitness_subset (h : ¬G.IsUniform ε s t) : G.nonuniformWitnes
· exact G.right_nonuniform_witnesses_subset fun i => h i.symm
#align simple_graph.nonuniform_witness_subset SimpleGraph.nonuniformWitness_subset
-/- warning: simple_graph.le_card_nonuniform_witness -> SimpleGraph.le_card_nonuniformWitness is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u2} 𝕜 (Preorder.toHasLe.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α s)) ε) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α (SimpleGraph.nonuniformWitness.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t))))
-but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) (HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))))) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α s)) ε) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α (SimpleGraph.nonuniformWitness.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t))))
-Case conversion may be inaccurate. Consider using '#align simple_graph.le_card_nonuniform_witness SimpleGraph.le_card_nonuniformWitnessₓ'. -/
theorem le_card_nonuniformWitness (h : ¬G.IsUniform ε s t) :
(s.card : 𝕜) * ε ≤ (G.nonuniformWitness ε s t).card :=
by
@@ -282,12 +201,6 @@ theorem le_card_nonuniformWitness (h : ¬G.IsUniform ε s t) :
· exact G.right_nonuniform_witnesses_card fun i => h i.symm
#align simple_graph.le_card_nonuniform_witness SimpleGraph.le_card_nonuniformWitness
-/- warning: simple_graph.nonuniform_witness_spec -> SimpleGraph.nonuniformWitness_spec is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Ne.{succ u1} (Finset.{u1} α) s t) -> (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u2} 𝕜 (Preorder.toHasLe.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) ε (Abs.abs.{u2} 𝕜 (Neg.toHasAbs.{u2} 𝕜 (SubNegMonoid.toHasNeg.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))) (SemilatticeSup.toHasSup.{u2} 𝕜 (Lattice.toSemilatticeSup.{u2} 𝕜 (LinearOrder.toLattice.{u2} 𝕜 (LinearOrderedRing.toLinearOrder.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HSub.hSub.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHSub.{u2} 𝕜 (SubNegMonoid.toHasSub.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) (SimpleGraph.nonuniformWitness.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t) (SimpleGraph.nonuniformWitness.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε t s))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))
-but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Ne.{succ u2} (Finset.{u2} α) s t) -> (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) ε (Rat.cast.{u1} 𝕜 (LinearOrderedField.toRatCast.{u1} 𝕜 _inst_1) (Abs.abs.{0} Rat (Neg.toHasAbs.{0} Rat Rat.instNegRat Rat.instSupRat) (HSub.hSub.{0, 0, 0} Rat Rat Rat (instHSub.{0} Rat Rat.instSubRat) (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) (SimpleGraph.nonuniformWitness.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t) (SimpleGraph.nonuniformWitness.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε t s)) (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))
-Case conversion may be inaccurate. Consider using '#align simple_graph.nonuniform_witness_spec SimpleGraph.nonuniformWitness_specₓ'. -/
theorem nonuniformWitness_spec (h₁ : s ≠ t) (h₂ : ¬G.IsUniform ε s t) :
ε ≤
|G.edgeDensity (G.nonuniformWitness ε s t) (G.nonuniformWitness ε t s) - G.edgeDensity s t| :=
@@ -313,45 +226,21 @@ namespace Finpartition
open Classical
-/- warning: finpartition.non_uniforms -> Finpartition.nonUniforms is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α}, (Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A) -> (forall (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)], 𝕜 -> (Finset.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α))))
-but is expected to have type
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α}, (Finpartition.{u1} (Finset.{u1} α) (Finset.instLatticeFinset.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} α) A) -> (forall (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)], 𝕜 -> (Finset.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α))))
-Case conversion may be inaccurate. Consider using '#align finpartition.non_uniforms Finpartition.nonUniformsₓ'. -/
/-- The pairs of parts of a partition `P` which are not `ε`-uniform in a graph `G`. Note that we
dismiss the diagonal. We do not care whether `s` is `ε`-uniform with itself. -/
noncomputable def nonUniforms (ε : 𝕜) : Finset (Finset α × Finset α) :=
P.parts.offDiag.filterₓ fun uv => ¬G.IsUniform ε uv.1 uv.2
#align finpartition.non_uniforms Finpartition.nonUniforms
-/- warning: finpartition.mk_mem_non_uniforms_iff -> Finpartition.mk_mem_nonUniforms_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α} (P : Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A) (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] (u : Finset.{u1} α) (v : Finset.{u1} α) (ε : 𝕜), Iff (Membership.Mem.{u1, u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α)) (Finset.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α))) (Finset.hasMem.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α))) (Prod.mk.{u1, u1} (Finset.{u1} α) (Finset.{u1} α) u v) (Finpartition.nonUniforms.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε)) (And (Membership.Mem.{u1, u1} (Finset.{u1} α) (Finset.{u1} (Finset.{u1} α)) (Finset.hasMem.{u1} (Finset.{u1} α)) u (Finpartition.parts.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A P)) (And (Membership.Mem.{u1, u1} (Finset.{u1} α) (Finset.{u1} (Finset.{u1} α)) (Finset.hasMem.{u1} (Finset.{u1} α)) v (Finpartition.parts.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A P)) (And (Ne.{succ u1} (Finset.{u1} α) u v) (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_3 a b) ε u v)))))
-but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] [_inst_2 : DecidableEq.{succ u2} α] {A : Finset.{u2} α} (P : Finpartition.{u2} (Finset.{u2} α) (Finset.instLatticeFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u2} α) A) (G : SimpleGraph.{u2} α) [_inst_3 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] (u : Finset.{u2} α) (v : Finset.{u2} α) (ε : 𝕜), Iff (Membership.mem.{u2, u2} (Prod.{u2, u2} (Finset.{u2} α) (Finset.{u2} α)) (Finset.{u2} (Prod.{u2, u2} (Finset.{u2} α) (Finset.{u2} α))) (Finset.instMembershipFinset.{u2} (Prod.{u2, u2} (Finset.{u2} α) (Finset.{u2} α))) (Prod.mk.{u2, u2} (Finset.{u2} α) (Finset.{u2} α) u v) (Finpartition.nonUniforms.{u2, u1} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε)) (And (Membership.mem.{u2, u2} (Finset.{u2} α) (Finset.{u2} (Finset.{u2} α)) (Finset.instMembershipFinset.{u2} (Finset.{u2} α)) u (Finpartition.parts.{u2} (Finset.{u2} α) (Finset.instLatticeFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u2} α) A P)) (And (Membership.mem.{u2, u2} (Finset.{u2} α) (Finset.{u2} (Finset.{u2} α)) (Finset.instMembershipFinset.{u2} (Finset.{u2} α)) v (Finpartition.parts.{u2} (Finset.{u2} α) (Finset.instLatticeFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u2} α) A P)) (And (Ne.{succ u2} (Finset.{u2} α) u v) (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_3 a b) ε u v)))))
-Case conversion may be inaccurate. Consider using '#align finpartition.mk_mem_non_uniforms_iff Finpartition.mk_mem_nonUniforms_iffₓ'. -/
theorem mk_mem_nonUniforms_iff (u v : Finset α) (ε : 𝕜) :
(u, v) ∈ P.nonUniforms G ε ↔ u ∈ P.parts ∧ v ∈ P.parts ∧ u ≠ v ∧ ¬G.IsUniform ε u v := by
rw [non_uniforms, mem_filter, mem_off_diag, and_assoc', and_assoc']
#align finpartition.mk_mem_non_uniforms_iff Finpartition.mk_mem_nonUniforms_iff
-/- warning: finpartition.non_uniforms_mono -> Finpartition.nonUniforms_mono is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α} (P : Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A) (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {ε' : 𝕜}, (LE.le.{u2} 𝕜 (Preorder.toHasLe.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) ε ε') -> (HasSubset.Subset.{u1} (Finset.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α))) (Finset.hasSubset.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α))) (Finpartition.nonUniforms.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε') (Finpartition.nonUniforms.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε))
-but is expected to have type
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α} (P : Finpartition.{u1} (Finset.{u1} α) (Finset.instLatticeFinset.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} α) A) (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {ε' : 𝕜}, (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (StrictOrderedRing.toPartialOrder.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1)))))) ε ε') -> (HasSubset.Subset.{u1} (Finset.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α))) (Finset.instHasSubsetFinset.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α))) (Finpartition.nonUniforms.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε') (Finpartition.nonUniforms.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε))
-Case conversion may be inaccurate. Consider using '#align finpartition.non_uniforms_mono Finpartition.nonUniforms_monoₓ'. -/
theorem nonUniforms_mono {ε ε' : 𝕜} (h : ε ≤ ε') : P.nonUniforms G ε' ⊆ P.nonUniforms G ε :=
monotone_filter_right _ fun uv => mt <| SimpleGraph.IsUniform.mono h
#align finpartition.non_uniforms_mono Finpartition.nonUniforms_mono
-/- warning: finpartition.non_uniforms_bot -> Finpartition.nonUniforms_bot is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α} (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toHasLt.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))))) ε) -> (Eq.{succ u1} (Finset.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α))) (Finpartition.nonUniforms.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A (Bot.bot.{u1} (Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A) (Finpartition.hasBot.{u1} α (fun (a : α) (b : α) => _inst_2 a b) A)) G (fun (a : α) (b : α) => _inst_3 a b) ε) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α))) (Finset.hasEmptyc.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α)))))
-but is expected to have type
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α} (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toLT.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (StrictOrderedRing.toPartialOrder.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1)))))) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (LinearOrderedSemifield.toSemifield.{u2} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u2} 𝕜 _inst_1))))))) ε) -> (Eq.{succ u1} (Finset.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α))) (Finpartition.nonUniforms.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A (Bot.bot.{u1} (Finpartition.{u1} (Finset.{u1} α) (Finset.instLatticeFinset.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} α) A) (Finpartition.instBotFinpartitionFinsetInstLatticeFinsetInstOrderBotFinsetToLEToPreorderPartialOrder.{u1} α (fun (a : α) (b : α) => _inst_2 a b) A)) G (fun (a : α) (b : α) => _inst_3 a b) ε) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α))) (Finset.instEmptyCollectionFinset.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α)))))
-Case conversion may be inaccurate. Consider using '#align finpartition.non_uniforms_bot Finpartition.nonUniforms_botₓ'. -/
theorem nonUniforms_bot (hε : 0 < ε) : (⊥ : Finpartition A).nonUniforms G ε = ∅ :=
by
rw [eq_empty_iff_forall_not_mem]
@@ -362,24 +251,12 @@ theorem nonUniforms_bot (hε : 0 < ε) : (⊥ : Finpartition A).nonUniforms G ε
exact G.is_uniform_singleton hε
#align finpartition.non_uniforms_bot Finpartition.nonUniforms_bot
-/- warning: finpartition.is_uniform -> Finpartition.IsUniform is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α}, (Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A) -> (forall (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)], 𝕜 -> Prop)
-but is expected to have type
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α}, (Finpartition.{u1} (Finset.{u1} α) (Finset.instLatticeFinset.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} α) A) -> (forall (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)], 𝕜 -> Prop)
-Case conversion may be inaccurate. Consider using '#align finpartition.is_uniform Finpartition.IsUniformₓ'. -/
/-- A finpartition of a graph's vertex set is `ε`-uniform (aka `ε`-regular) iff the proportion of
its pairs of parts that are not `ε`-uniform is at most `ε`. -/
def IsUniform (ε : 𝕜) : Prop :=
((P.nonUniforms G ε).card : 𝕜) ≤ (P.parts.card * (P.parts.card - 1) : ℕ) * ε
#align finpartition.is_uniform Finpartition.IsUniform
-/- warning: finpartition.bot_is_uniform -> Finpartition.botIsUniform is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α} (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toHasLt.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))))) ε) -> (Finpartition.IsUniform.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A (Bot.bot.{u1} (Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A) (Finpartition.hasBot.{u1} α (fun (a : α) (b : α) => _inst_2 a b) A)) G (fun (a : α) (b : α) => _inst_3 a b) ε)
-but is expected to have type
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α} (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toLT.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (StrictOrderedRing.toPartialOrder.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1)))))) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (LinearOrderedSemifield.toSemifield.{u2} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u2} 𝕜 _inst_1))))))) ε) -> (Finpartition.IsUniform.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A (Bot.bot.{u1} (Finpartition.{u1} (Finset.{u1} α) (Finset.instLatticeFinset.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} α) A) (Finpartition.instBotFinpartitionFinsetInstLatticeFinsetInstOrderBotFinsetToLEToPreorderPartialOrder.{u1} α (fun (a : α) (b : α) => _inst_2 a b) A)) G (fun (a : α) (b : α) => _inst_3 a b) ε)
-Case conversion may be inaccurate. Consider using '#align finpartition.bot_is_uniform Finpartition.botIsUniformₓ'. -/
theorem botIsUniform (hε : 0 < ε) : (⊥ : Finpartition A).IsUniform G ε :=
by
rw [Finpartition.IsUniform, Finpartition.card_bot, non_uniforms_bot _ hε, Finset.card_empty,
@@ -387,12 +264,6 @@ theorem botIsUniform (hε : 0 < ε) : (⊥ : Finpartition A).IsUniform G ε :=
exact mul_nonneg (Nat.cast_nonneg _) hε.le
#align finpartition.bot_is_uniform Finpartition.botIsUniform
-/- warning: finpartition.is_uniform_one -> Finpartition.isUniformOne is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α} (P : Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A) (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)], Finpartition.IsUniform.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) (OfNat.ofNat.{u2} 𝕜 1 (OfNat.mk.{u2} 𝕜 1 (One.one.{u2} 𝕜 (AddMonoidWithOne.toOne.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))))
-but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] [_inst_2 : DecidableEq.{succ u2} α] {A : Finset.{u2} α} (P : Finpartition.{u2} (Finset.{u2} α) (Finset.instLatticeFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u2} α) A) (G : SimpleGraph.{u2} α) [_inst_3 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)], Finpartition.IsUniform.{u2, u1} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) (OfNat.ofNat.{u1} 𝕜 1 (One.toOfNat1.{u1} 𝕜 (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1)))))))
-Case conversion may be inaccurate. Consider using '#align finpartition.is_uniform_one Finpartition.isUniformOneₓ'. -/
theorem isUniformOne : P.IsUniform G (1 : 𝕜) :=
by
rw [is_uniform, mul_one, Nat.cast_le]
@@ -402,45 +273,21 @@ theorem isUniformOne : P.IsUniform G (1 : 𝕜) :=
variable {P G}
-/- warning: finpartition.is_uniform.mono -> Finpartition.IsUniform.mono is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α} {P : Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A} {G : SimpleGraph.{u1} α} [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {ε' : 𝕜}, (Finpartition.IsUniform.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε) -> (LE.le.{u2} 𝕜 (Preorder.toHasLe.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) ε ε') -> (Finpartition.IsUniform.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε')
-but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] [_inst_2 : DecidableEq.{succ u2} α] {A : Finset.{u2} α} {P : Finpartition.{u2} (Finset.{u2} α) (Finset.instLatticeFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u2} α) A} {G : SimpleGraph.{u2} α} [_inst_3 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {ε' : 𝕜}, (Finpartition.IsUniform.{u2, u1} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) ε ε') -> (Finpartition.IsUniform.{u2, u1} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε')
-Case conversion may be inaccurate. Consider using '#align finpartition.is_uniform.mono Finpartition.IsUniform.monoₓ'. -/
theorem IsUniform.mono {ε ε' : 𝕜} (hP : P.IsUniform G ε) (h : ε ≤ ε') : P.IsUniform G ε' :=
((Nat.cast_le.2 <| card_le_of_subset <| P.nonUniforms_mono G h).trans hP).trans <|
mul_le_mul_of_nonneg_left h <| Nat.cast_nonneg _
#align finpartition.is_uniform.mono Finpartition.IsUniform.mono
-/- warning: finpartition.is_uniform_of_empty -> Finpartition.isUniformOfEmpty is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α} {P : Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A} {G : SimpleGraph.{u1} α} [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜}, (Eq.{succ u1} (Finset.{u1} (Finset.{u1} α)) (Finpartition.parts.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A P) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} (Finset.{u1} α)) (Finset.hasEmptyc.{u1} (Finset.{u1} α)))) -> (Finpartition.IsUniform.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε)
-but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] [_inst_2 : DecidableEq.{succ u2} α] {A : Finset.{u2} α} {P : Finpartition.{u2} (Finset.{u2} α) (Finset.instLatticeFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u2} α) A} {G : SimpleGraph.{u2} α} [_inst_3 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜}, (Eq.{succ u2} (Finset.{u2} (Finset.{u2} α)) (Finpartition.parts.{u2} (Finset.{u2} α) (Finset.instLatticeFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u2} α) A P) (EmptyCollection.emptyCollection.{u2} (Finset.{u2} (Finset.{u2} α)) (Finset.instEmptyCollectionFinset.{u2} (Finset.{u2} α)))) -> (Finpartition.IsUniform.{u2, u1} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε)
-Case conversion may be inaccurate. Consider using '#align finpartition.is_uniform_of_empty Finpartition.isUniformOfEmptyₓ'. -/
theorem isUniformOfEmpty (hP : P.parts = ∅) : P.IsUniform G ε := by
simp [is_uniform, hP, non_uniforms]
#align finpartition.is_uniform_of_empty Finpartition.isUniformOfEmpty
-/- warning: finpartition.nonempty_of_not_uniform -> Finpartition.nonempty_of_not_uniform is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α} {P : Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A} {G : SimpleGraph.{u1} α} [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜}, (Not (Finpartition.IsUniform.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε)) -> (Finset.Nonempty.{u1} (Finset.{u1} α) (Finpartition.parts.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A P))
-but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] [_inst_2 : DecidableEq.{succ u2} α] {A : Finset.{u2} α} {P : Finpartition.{u2} (Finset.{u2} α) (Finset.instLatticeFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u2} α) A} {G : SimpleGraph.{u2} α} [_inst_3 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜}, (Not (Finpartition.IsUniform.{u2, u1} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε)) -> (Finset.Nonempty.{u2} (Finset.{u2} α) (Finpartition.parts.{u2} (Finset.{u2} α) (Finset.instLatticeFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u2} α) A P))
-Case conversion may be inaccurate. Consider using '#align finpartition.nonempty_of_not_uniform Finpartition.nonempty_of_not_uniformₓ'. -/
theorem nonempty_of_not_uniform (h : ¬P.IsUniform G ε) : P.parts.Nonempty :=
nonempty_of_ne_empty fun h₁ => h <| isUniformOfEmpty h₁
#align finpartition.nonempty_of_not_uniform Finpartition.nonempty_of_not_uniform
variable (P G ε) (s : Finset α)
-/- warning: finpartition.nonuniform_witnesses -> Finpartition.nonuniformWitnesses is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α}, (Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A) -> (forall (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)], 𝕜 -> (Finset.{u1} α) -> (Finset.{u1} (Finset.{u1} α)))
-but is expected to have type
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α}, (Finpartition.{u1} (Finset.{u1} α) (Finset.instLatticeFinset.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} α) A) -> (forall (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)], 𝕜 -> (Finset.{u1} α) -> (Finset.{u1} (Finset.{u1} α)))
-Case conversion may be inaccurate. Consider using '#align finpartition.nonuniform_witnesses Finpartition.nonuniformWitnessesₓ'. -/
/-- A choice of witnesses of non-uniformity among the parts of a finpartition. -/
noncomputable def nonuniformWitnesses : Finset (Finset α) :=
(P.parts.filterₓ fun t => s ≠ t ∧ ¬G.IsUniform ε s t).image (G.nonuniformWitness ε s)
@@ -448,12 +295,6 @@ noncomputable def nonuniformWitnesses : Finset (Finset α) :=
variable {P G ε s} {t : Finset α}
-/- warning: finpartition.nonuniform_witness_mem_nonuniform_witnesses -> Finpartition.nonuniformWitness_mem_nonuniformWitnesses is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α} {P : Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A} {G : SimpleGraph.{u1} α} [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_3 a b) ε s t)) -> (Membership.Mem.{u1, u1} (Finset.{u1} α) (Finset.{u1} (Finset.{u1} α)) (Finset.hasMem.{u1} (Finset.{u1} α)) t (Finpartition.parts.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A P)) -> (Ne.{succ u1} (Finset.{u1} α) s t) -> (Membership.Mem.{u1, u1} (Finset.{u1} α) (Finset.{u1} (Finset.{u1} α)) (Finset.hasMem.{u1} (Finset.{u1} α)) (SimpleGraph.nonuniformWitness.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_3 a b) ε s t) (Finpartition.nonuniformWitnesses.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε s))
-but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] [_inst_2 : DecidableEq.{succ u2} α] {A : Finset.{u2} α} {P : Finpartition.{u2} (Finset.{u2} α) (Finset.instLatticeFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u2} α) A} {G : SimpleGraph.{u2} α} [_inst_3 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_3 a b) ε s t)) -> (Membership.mem.{u2, u2} (Finset.{u2} α) (Finset.{u2} (Finset.{u2} α)) (Finset.instMembershipFinset.{u2} (Finset.{u2} α)) t (Finpartition.parts.{u2} (Finset.{u2} α) (Finset.instLatticeFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u2} α) A P)) -> (Ne.{succ u2} (Finset.{u2} α) s t) -> (Membership.mem.{u2, u2} (Finset.{u2} α) (Finset.{u2} (Finset.{u2} α)) (Finset.instMembershipFinset.{u2} (Finset.{u2} α)) (SimpleGraph.nonuniformWitness.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_3 a b) ε s t) (Finpartition.nonuniformWitnesses.{u2, u1} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε s))
-Case conversion may be inaccurate. Consider using '#align finpartition.nonuniform_witness_mem_nonuniform_witnesses Finpartition.nonuniformWitness_mem_nonuniformWitnessesₓ'. -/
theorem nonuniformWitness_mem_nonuniformWitnesses (h : ¬G.IsUniform ε s t) (ht : t ∈ P.parts)
(hst : s ≠ t) : G.nonuniformWitness ε s t ∈ P.nonuniformWitnesses G ε s :=
mem_image_of_mem _ <| mem_filter.2 ⟨ht, hst, h⟩
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -90,10 +90,8 @@ lean 3 declaration is
but is expected to have type
forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] {G : SimpleGraph.{u2} α} [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜}, Symmetric.{succ u2} (Finset.{u2} α) (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε)
Case conversion may be inaccurate. Consider using '#align simple_graph.is_uniform.symm SimpleGraph.IsUniform.symmₓ'. -/
-theorem IsUniform.symm : Symmetric (IsUniform G ε) := fun s t h t' ht' s' hs' ht hs =>
- by
- rw [edge_density_comm _ t', edge_density_comm _ t]
- exact h hs' ht' hs ht
+theorem IsUniform.symm : Symmetric (IsUniform G ε) := fun s t h t' ht' s' hs' ht hs => by
+ rw [edge_density_comm _ t', edge_density_comm _ t]; exact h hs' ht' hs ht
#align simple_graph.is_uniform.symm SimpleGraph.IsUniform.symm
variable (G)
@@ -165,9 +163,7 @@ theorem not_isUniform_iff :
t' ⊆ t ∧
↑s.card * ε ≤ s'.card ∧
↑t.card * ε ≤ t'.card ∧ ε ≤ |G.edgeDensity s' t' - G.edgeDensity s t| :=
- by
- unfold is_uniform
- simp only [not_forall, not_lt, exists_prop]
+ by unfold is_uniform; simp only [not_forall, not_lt, exists_prop]
#align simple_graph.not_is_uniform_iff SimpleGraph.not_isUniform_iff
open Classical
@@ -192,9 +188,7 @@ but is expected to have type
forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (HasSubset.Subset.{u2} (Finset.{u2} α) (Finset.instHasSubsetFinset.{u2} α) (Prod.fst.{u2, u2} (Finset.{u2} α) (Finset.{u2} α) (SimpleGraph.nonuniformWitnesses.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) s)
Case conversion may be inaccurate. Consider using '#align simple_graph.left_nonuniform_witnesses_subset SimpleGraph.left_nonuniformWitnesses_subsetₓ'. -/
theorem left_nonuniformWitnesses_subset (h : ¬G.IsUniform ε s t) :
- (G.nonuniformWitnesses ε s t).1 ⊆ s :=
- by
- rw [nonuniform_witnesses, dif_pos h]
+ (G.nonuniformWitnesses ε s t).1 ⊆ s := by rw [nonuniform_witnesses, dif_pos h];
exact (not_is_uniform_iff.1 h).choose_spec.1
#align simple_graph.left_nonuniform_witnesses_subset SimpleGraph.left_nonuniformWitnesses_subset
@@ -218,9 +212,7 @@ but is expected to have type
forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (HasSubset.Subset.{u2} (Finset.{u2} α) (Finset.instHasSubsetFinset.{u2} α) (Prod.snd.{u2, u2} (Finset.{u2} α) (Finset.{u2} α) (SimpleGraph.nonuniformWitnesses.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) t)
Case conversion may be inaccurate. Consider using '#align simple_graph.right_nonuniform_witnesses_subset SimpleGraph.right_nonuniformWitnesses_subsetₓ'. -/
theorem right_nonuniformWitnesses_subset (h : ¬G.IsUniform ε s t) :
- (G.nonuniformWitnesses ε s t).2 ⊆ t :=
- by
- rw [nonuniform_witnesses, dif_pos h]
+ (G.nonuniformWitnesses ε s t).2 ⊆ t := by rw [nonuniform_witnesses, dif_pos h];
exact (not_is_uniform_iff.1 h).choose_spec.2.choose_spec.1
#align simple_graph.right_nonuniform_witnesses_subset SimpleGraph.right_nonuniformWitnesses_subset
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -155,10 +155,7 @@ theorem isUniform_one : G.IsUniform (1 : 𝕜) s t :=
variable {G}
/- warning: simple_graph.not_is_uniform_iff -> SimpleGraph.not_isUniform_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] {G : SimpleGraph.{u1} α} [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, Iff (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) (Exists.{succ u1} (Finset.{u1} α) (fun (s' : Finset.{u1} α) => And (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) s' s) (Exists.{succ u1} (Finset.{u1} α) (fun (t' : Finset.{u1} α) => And (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) t' t) (And (LE.le.{u2} 𝕜 (Preorder.toHasLe.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α s)) ε) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α s'))) (And (LE.le.{u2} 𝕜 (Preorder.toHasLe.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α t)) ε) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α t'))) (LE.le.{u2} 𝕜 (Preorder.toHasLe.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) ε (Abs.abs.{u2} 𝕜 (Neg.toHasAbs.{u2} 𝕜 (SubNegMonoid.toHasNeg.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))) (SemilatticeSup.toHasSup.{u2} 𝕜 (Lattice.toSemilatticeSup.{u2} 𝕜 (LinearOrder.toLattice.{u2} 𝕜 (LinearOrderedRing.toLinearOrder.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HSub.hSub.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHSub.{u2} 𝕜 (SubNegMonoid.toHasSub.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) s' t')) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))))))))
-but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] {G : SimpleGraph.{u2} α} [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, Iff (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) (Exists.{succ u2} (Finset.{u2} α) (fun (s' : Finset.{u2} α) => And (HasSubset.Subset.{u2} (Finset.{u2} α) (Finset.instHasSubsetFinset.{u2} α) s' s) (Exists.{succ u2} (Finset.{u2} α) (fun (t' : Finset.{u2} α) => And (HasSubset.Subset.{u2} (Finset.{u2} α) (Finset.instHasSubsetFinset.{u2} α) t' t) (And (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) (HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))))) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α s)) ε) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α s'))) (And (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) (HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))))) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α t)) ε) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α t'))) (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) ε (Rat.cast.{u1} 𝕜 (LinearOrderedField.toRatCast.{u1} 𝕜 _inst_1) (Abs.abs.{0} Rat (Neg.toHasAbs.{0} Rat Rat.instNegRat Rat.instSupRat) (HSub.hSub.{0, 0, 0} Rat Rat Rat (instHSub.{0} Rat Rat.instSubRat) (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) s' t') (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))))))))
+<too large>
Case conversion may be inaccurate. Consider using '#align simple_graph.not_is_uniform_iff SimpleGraph.not_isUniform_iffₓ'. -/
theorem not_isUniform_iff :
¬G.IsUniform ε s t ↔
mathlib commit https://github.com/leanprover-community/mathlib/commit/75e7fca56381d056096ce5d05e938f63a6567828
@@ -278,6 +278,12 @@ theorem nonuniformWitness_subset (h : ¬G.IsUniform ε s t) : G.nonuniformWitnes
· exact G.right_nonuniform_witnesses_subset fun i => h i.symm
#align simple_graph.nonuniform_witness_subset SimpleGraph.nonuniformWitness_subset
+/- warning: simple_graph.le_card_nonuniform_witness -> SimpleGraph.le_card_nonuniformWitness is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u2} 𝕜 (Preorder.toHasLe.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α s)) ε) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α (SimpleGraph.nonuniformWitness.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t))))
+but is expected to have type
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) (HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))))) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α s)) ε) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α (SimpleGraph.nonuniformWitness.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t))))
+Case conversion may be inaccurate. Consider using '#align simple_graph.le_card_nonuniform_witness SimpleGraph.le_card_nonuniformWitnessₓ'. -/
theorem le_card_nonuniformWitness (h : ¬G.IsUniform ε s t) :
(s.card : 𝕜) * ε ≤ (G.nonuniformWitness ε s t).card :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/33c67ae661dd8988516ff7f247b0be3018cdd952
@@ -4,7 +4,7 @@ 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 combinatorics.simple_graph.regularity.uniform
-! leanprover-community/mathlib commit f51de8769c34652d82d1c8e5f8f18f8374782bed
+! leanprover-community/mathlib commit bf7ef0e83e5b7e6c1169e97f055e58a2e4e9d52d
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -38,6 +38,10 @@ is less than `ε`.
* `finpartition.is_uniform`: Uniformity of a partition.
* `finpartition.nonuniform_witnesses`: For each non-uniform pair of parts of a partition, pick
witnesses of non-uniformity and dump them all together.
+
+## References
+
+[Yaël Dillies, Bhavik Mehta, *Formalising Szemerédi’s Regularity Lemma in Lean*][srl_itp]
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/f51de8769c34652d82d1c8e5f8f18f8374782bed
@@ -4,7 +4,7 @@ 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 combinatorics.simple_graph.regularity.uniform
-! leanprover-community/mathlib commit 832f7b9162039c28b9361289c8681f155cae758f
+! leanprover-community/mathlib commit f51de8769c34652d82d1c8e5f8f18f8374782bed
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -274,20 +274,14 @@ theorem nonuniformWitness_subset (h : ¬G.IsUniform ε s t) : G.nonuniformWitnes
· exact G.right_nonuniform_witnesses_subset fun i => h i.symm
#align simple_graph.nonuniform_witness_subset SimpleGraph.nonuniformWitness_subset
-/- warning: simple_graph.nonuniform_witness_card_le -> SimpleGraph.nonuniformWitness_card_le is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u2} 𝕜 (Preorder.toHasLe.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α s)) ε) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α (SimpleGraph.nonuniformWitness.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t))))
-but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) (HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))))) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α s)) ε) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α (SimpleGraph.nonuniformWitness.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t))))
-Case conversion may be inaccurate. Consider using '#align simple_graph.nonuniform_witness_card_le SimpleGraph.nonuniformWitness_card_leₓ'. -/
-theorem nonuniformWitness_card_le (h : ¬G.IsUniform ε s t) :
+theorem le_card_nonuniformWitness (h : ¬G.IsUniform ε s t) :
(s.card : 𝕜) * ε ≤ (G.nonuniformWitness ε s t).card :=
by
unfold nonuniform_witness
split_ifs
· exact G.left_nonuniform_witnesses_card h
· exact G.right_nonuniform_witnesses_card fun i => h i.symm
-#align simple_graph.nonuniform_witness_card_le SimpleGraph.nonuniformWitness_card_le
+#align simple_graph.le_card_nonuniform_witness SimpleGraph.le_card_nonuniformWitness
/- warning: simple_graph.nonuniform_witness_spec -> SimpleGraph.nonuniformWitness_spec is a dubious translation:
lean 3 declaration is
mathlib commit https://github.com/leanprover-community/mathlib/commit/0b9eaaa7686280fad8cce467f5c3c57ee6ce77f8
@@ -68,13 +68,17 @@ def IsUniform (s t : Finset α) : Prop :=
variable {G ε}
-#print SimpleGraph.IsUniform.mono /-
+/- warning: simple_graph.is_uniform.mono -> SimpleGraph.IsUniform.mono is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] {G : SimpleGraph.{u1} α} [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α} {ε' : 𝕜}, (LE.le.{u2} 𝕜 (Preorder.toHasLe.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) ε ε') -> (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t) -> (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε' s t)
+but is expected to have type
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] {G : SimpleGraph.{u1} α} [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α} {ε' : 𝕜}, (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (StrictOrderedRing.toPartialOrder.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1)))))) ε ε') -> (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t) -> (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε' s t)
+Case conversion may be inaccurate. Consider using '#align simple_graph.is_uniform.mono SimpleGraph.IsUniform.monoₓ'. -/
theorem IsUniform.mono {ε' : 𝕜} (h : ε ≤ ε') (hε : IsUniform G ε s t) : IsUniform G ε' s t :=
fun s' hs' t' ht' hs ht => by
refine' (hε hs' ht' (le_trans _ hs) (le_trans _ ht)).trans_le h <;>
exact mul_le_mul_of_nonneg_left h (Nat.cast_nonneg _)
#align simple_graph.is_uniform.mono SimpleGraph.IsUniform.mono
--/
/- warning: simple_graph.is_uniform.symm -> SimpleGraph.IsUniform.symm is a dubious translation:
lean 3 declaration is
@@ -102,7 +106,7 @@ theorem isUniform_comm : IsUniform G ε s t ↔ IsUniform G ε t s :=
/- warning: simple_graph.is_uniform_singleton -> SimpleGraph.isUniform_singleton is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {a : α} {b : α}, (LT.lt.{u2} 𝕜 (Preorder.toLT.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))))) ε) -> (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) b))
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {a : α} {b : α}, (LT.lt.{u2} 𝕜 (Preorder.toHasLt.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))))) ε) -> (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) b))
but is expected to have type
forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {a : α} {b : α}, (LT.lt.{u2} 𝕜 (Preorder.toLT.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (StrictOrderedRing.toPartialOrder.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1)))))) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (LinearOrderedSemifield.toSemifield.{u2} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u2} 𝕜 _inst_1))))))) ε) -> (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b))
Case conversion may be inaccurate. Consider using '#align simple_graph.is_uniform_singleton SimpleGraph.isUniform_singletonₓ'. -/
@@ -148,7 +152,7 @@ variable {G}
/- warning: simple_graph.not_is_uniform_iff -> SimpleGraph.not_isUniform_iff is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] {G : SimpleGraph.{u1} α} [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, Iff (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) (Exists.{succ u1} (Finset.{u1} α) (fun (s' : Finset.{u1} α) => And (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) s' s) (Exists.{succ u1} (Finset.{u1} α) (fun (t' : Finset.{u1} α) => And (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) t' t) (And (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α s)) ε) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α s'))) (And (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α t)) ε) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α t'))) (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) ε (Abs.abs.{u2} 𝕜 (Neg.toHasAbs.{u2} 𝕜 (SubNegMonoid.toHasNeg.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))) (SemilatticeSup.toHasSup.{u2} 𝕜 (Lattice.toSemilatticeSup.{u2} 𝕜 (LinearOrder.toLattice.{u2} 𝕜 (LinearOrderedRing.toLinearOrder.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HSub.hSub.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHSub.{u2} 𝕜 (SubNegMonoid.toHasSub.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) s' t')) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))))))))
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] {G : SimpleGraph.{u1} α} [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, Iff (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) (Exists.{succ u1} (Finset.{u1} α) (fun (s' : Finset.{u1} α) => And (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) s' s) (Exists.{succ u1} (Finset.{u1} α) (fun (t' : Finset.{u1} α) => And (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) t' t) (And (LE.le.{u2} 𝕜 (Preorder.toHasLe.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α s)) ε) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α s'))) (And (LE.le.{u2} 𝕜 (Preorder.toHasLe.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α t)) ε) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α t'))) (LE.le.{u2} 𝕜 (Preorder.toHasLe.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) ε (Abs.abs.{u2} 𝕜 (Neg.toHasAbs.{u2} 𝕜 (SubNegMonoid.toHasNeg.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))) (SemilatticeSup.toHasSup.{u2} 𝕜 (Lattice.toSemilatticeSup.{u2} 𝕜 (LinearOrder.toLattice.{u2} 𝕜 (LinearOrderedRing.toLinearOrder.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HSub.hSub.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHSub.{u2} 𝕜 (SubNegMonoid.toHasSub.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) s' t')) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))))))))
but is expected to have type
forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] {G : SimpleGraph.{u2} α} [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, Iff (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) (Exists.{succ u2} (Finset.{u2} α) (fun (s' : Finset.{u2} α) => And (HasSubset.Subset.{u2} (Finset.{u2} α) (Finset.instHasSubsetFinset.{u2} α) s' s) (Exists.{succ u2} (Finset.{u2} α) (fun (t' : Finset.{u2} α) => And (HasSubset.Subset.{u2} (Finset.{u2} α) (Finset.instHasSubsetFinset.{u2} α) t' t) (And (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) (HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))))) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α s)) ε) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α s'))) (And (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) (HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))))) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α t)) ε) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α t'))) (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) ε (Rat.cast.{u1} 𝕜 (LinearOrderedField.toRatCast.{u1} 𝕜 _inst_1) (Abs.abs.{0} Rat (Neg.toHasAbs.{0} Rat Rat.instNegRat Rat.instSupRat) (HSub.hSub.{0, 0, 0} Rat Rat Rat (instHSub.{0} Rat Rat.instSubRat) (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) s' t') (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))))))))
Case conversion may be inaccurate. Consider using '#align simple_graph.not_is_uniform_iff SimpleGraph.not_isUniform_iffₓ'. -/
@@ -195,7 +199,7 @@ theorem left_nonuniformWitnesses_subset (h : ¬G.IsUniform ε s t) :
/- warning: simple_graph.left_nonuniform_witnesses_card -> SimpleGraph.left_nonuniformWitnesses_card is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α s)) ε) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α (Prod.fst.{u1, u1} (Finset.{u1} α) (Finset.{u1} α) (SimpleGraph.nonuniformWitnesses.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)))))
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u2} 𝕜 (Preorder.toHasLe.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α s)) ε) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α (Prod.fst.{u1, u1} (Finset.{u1} α) (Finset.{u1} α) (SimpleGraph.nonuniformWitnesses.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)))))
but is expected to have type
forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) (HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))))) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α s)) ε) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α (Prod.fst.{u2, u2} (Finset.{u2} α) (Finset.{u2} α) (SimpleGraph.nonuniformWitnesses.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)))))
Case conversion may be inaccurate. Consider using '#align simple_graph.left_nonuniform_witnesses_card SimpleGraph.left_nonuniformWitnesses_cardₓ'. -/
@@ -221,7 +225,7 @@ theorem right_nonuniformWitnesses_subset (h : ¬G.IsUniform ε s t) :
/- warning: simple_graph.right_nonuniform_witnesses_card -> SimpleGraph.right_nonuniformWitnesses_card is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α t)) ε) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α (Prod.snd.{u1, u1} (Finset.{u1} α) (Finset.{u1} α) (SimpleGraph.nonuniformWitnesses.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)))))
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u2} 𝕜 (Preorder.toHasLe.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α t)) ε) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α (Prod.snd.{u1, u1} (Finset.{u1} α) (Finset.{u1} α) (SimpleGraph.nonuniformWitnesses.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)))))
but is expected to have type
forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) (HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))))) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α t)) ε) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α (Prod.snd.{u2, u2} (Finset.{u2} α) (Finset.{u2} α) (SimpleGraph.nonuniformWitnesses.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)))))
Case conversion may be inaccurate. Consider using '#align simple_graph.right_nonuniform_witnesses_card SimpleGraph.right_nonuniformWitnesses_cardₓ'. -/
@@ -234,7 +238,7 @@ theorem right_nonuniformWitnesses_card (h : ¬G.IsUniform ε s t) :
/- warning: simple_graph.nonuniform_witnesses_spec -> SimpleGraph.nonuniformWitnesses_spec is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) ε (Abs.abs.{u2} 𝕜 (Neg.toHasAbs.{u2} 𝕜 (SubNegMonoid.toHasNeg.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))) (SemilatticeSup.toHasSup.{u2} 𝕜 (Lattice.toSemilatticeSup.{u2} 𝕜 (LinearOrder.toLattice.{u2} 𝕜 (LinearOrderedRing.toLinearOrder.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HSub.hSub.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHSub.{u2} 𝕜 (SubNegMonoid.toHasSub.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) (Prod.fst.{u1, u1} (Finset.{u1} α) (Finset.{u1} α) (SimpleGraph.nonuniformWitnesses.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) (Prod.snd.{u1, u1} (Finset.{u1} α) (Finset.{u1} α) (SimpleGraph.nonuniformWitnesses.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u2} 𝕜 (Preorder.toHasLe.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) ε (Abs.abs.{u2} 𝕜 (Neg.toHasAbs.{u2} 𝕜 (SubNegMonoid.toHasNeg.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))) (SemilatticeSup.toHasSup.{u2} 𝕜 (Lattice.toSemilatticeSup.{u2} 𝕜 (LinearOrder.toLattice.{u2} 𝕜 (LinearOrderedRing.toLinearOrder.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HSub.hSub.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHSub.{u2} 𝕜 (SubNegMonoid.toHasSub.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) (Prod.fst.{u1, u1} (Finset.{u1} α) (Finset.{u1} α) (SimpleGraph.nonuniformWitnesses.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) (Prod.snd.{u1, u1} (Finset.{u1} α) (Finset.{u1} α) (SimpleGraph.nonuniformWitnesses.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))
but is expected to have type
forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) ε (Rat.cast.{u1} 𝕜 (LinearOrderedField.toRatCast.{u1} 𝕜 _inst_1) (Abs.abs.{0} Rat (Neg.toHasAbs.{0} Rat Rat.instNegRat Rat.instSupRat) (HSub.hSub.{0, 0, 0} Rat Rat Rat (instHSub.{0} Rat Rat.instSubRat) (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) (Prod.fst.{u2, u2} (Finset.{u2} α) (Finset.{u2} α) (SimpleGraph.nonuniformWitnesses.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) (Prod.snd.{u2, u2} (Finset.{u2} α) (Finset.{u2} α) (SimpleGraph.nonuniformWitnesses.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t))) (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))
Case conversion may be inaccurate. Consider using '#align simple_graph.nonuniform_witnesses_spec SimpleGraph.nonuniformWitnesses_specₓ'. -/
@@ -272,7 +276,7 @@ theorem nonuniformWitness_subset (h : ¬G.IsUniform ε s t) : G.nonuniformWitnes
/- warning: simple_graph.nonuniform_witness_card_le -> SimpleGraph.nonuniformWitness_card_le is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α s)) ε) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α (SimpleGraph.nonuniformWitness.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t))))
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u2} 𝕜 (Preorder.toHasLe.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α s)) ε) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α (SimpleGraph.nonuniformWitness.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t))))
but is expected to have type
forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) (HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))))) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α s)) ε) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α (SimpleGraph.nonuniformWitness.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t))))
Case conversion may be inaccurate. Consider using '#align simple_graph.nonuniform_witness_card_le SimpleGraph.nonuniformWitness_card_leₓ'. -/
@@ -287,7 +291,7 @@ theorem nonuniformWitness_card_le (h : ¬G.IsUniform ε s t) :
/- warning: simple_graph.nonuniform_witness_spec -> SimpleGraph.nonuniformWitness_spec is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Ne.{succ u1} (Finset.{u1} α) s t) -> (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) ε (Abs.abs.{u2} 𝕜 (Neg.toHasAbs.{u2} 𝕜 (SubNegMonoid.toHasNeg.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))) (SemilatticeSup.toHasSup.{u2} 𝕜 (Lattice.toSemilatticeSup.{u2} 𝕜 (LinearOrder.toLattice.{u2} 𝕜 (LinearOrderedRing.toLinearOrder.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HSub.hSub.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHSub.{u2} 𝕜 (SubNegMonoid.toHasSub.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) (SimpleGraph.nonuniformWitness.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t) (SimpleGraph.nonuniformWitness.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε t s))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Ne.{succ u1} (Finset.{u1} α) s t) -> (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u2} 𝕜 (Preorder.toHasLe.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) ε (Abs.abs.{u2} 𝕜 (Neg.toHasAbs.{u2} 𝕜 (SubNegMonoid.toHasNeg.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))) (SemilatticeSup.toHasSup.{u2} 𝕜 (Lattice.toSemilatticeSup.{u2} 𝕜 (LinearOrder.toLattice.{u2} 𝕜 (LinearOrderedRing.toLinearOrder.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HSub.hSub.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHSub.{u2} 𝕜 (SubNegMonoid.toHasSub.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) (SimpleGraph.nonuniformWitness.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t) (SimpleGraph.nonuniformWitness.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε t s))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))
but is expected to have type
forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Ne.{succ u2} (Finset.{u2} α) s t) -> (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) ε (Rat.cast.{u1} 𝕜 (LinearOrderedField.toRatCast.{u1} 𝕜 _inst_1) (Abs.abs.{0} Rat (Neg.toHasAbs.{0} Rat Rat.instNegRat Rat.instSupRat) (HSub.hSub.{0, 0, 0} Rat Rat Rat (instHSub.{0} Rat Rat.instSubRat) (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) (SimpleGraph.nonuniformWitness.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t) (SimpleGraph.nonuniformWitness.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε t s)) (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))
Case conversion may be inaccurate. Consider using '#align simple_graph.nonuniform_witness_spec SimpleGraph.nonuniformWitness_specₓ'. -/
@@ -341,7 +345,7 @@ theorem mk_mem_nonUniforms_iff (u v : Finset α) (ε : 𝕜) :
/- warning: finpartition.non_uniforms_mono -> Finpartition.nonUniforms_mono is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α} (P : Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A) (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {ε' : 𝕜}, (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) ε ε') -> (HasSubset.Subset.{u1} (Finset.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α))) (Finset.hasSubset.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α))) (Finpartition.nonUniforms.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε') (Finpartition.nonUniforms.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε))
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α} (P : Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A) (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {ε' : 𝕜}, (LE.le.{u2} 𝕜 (Preorder.toHasLe.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) ε ε') -> (HasSubset.Subset.{u1} (Finset.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α))) (Finset.hasSubset.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α))) (Finpartition.nonUniforms.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε') (Finpartition.nonUniforms.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε))
but is expected to have type
forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α} (P : Finpartition.{u1} (Finset.{u1} α) (Finset.instLatticeFinset.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} α) A) (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {ε' : 𝕜}, (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (StrictOrderedRing.toPartialOrder.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1)))))) ε ε') -> (HasSubset.Subset.{u1} (Finset.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α))) (Finset.instHasSubsetFinset.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α))) (Finpartition.nonUniforms.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε') (Finpartition.nonUniforms.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε))
Case conversion may be inaccurate. Consider using '#align finpartition.non_uniforms_mono Finpartition.nonUniforms_monoₓ'. -/
@@ -351,7 +355,7 @@ theorem nonUniforms_mono {ε ε' : 𝕜} (h : ε ≤ ε') : P.nonUniforms G ε'
/- warning: finpartition.non_uniforms_bot -> Finpartition.nonUniforms_bot is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α} (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toLT.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))))) ε) -> (Eq.{succ u1} (Finset.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α))) (Finpartition.nonUniforms.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A (Bot.bot.{u1} (Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A) (Finpartition.hasBot.{u1} α (fun (a : α) (b : α) => _inst_2 a b) A)) G (fun (a : α) (b : α) => _inst_3 a b) ε) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α))) (Finset.hasEmptyc.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α)))))
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α} (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toHasLt.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))))) ε) -> (Eq.{succ u1} (Finset.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α))) (Finpartition.nonUniforms.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A (Bot.bot.{u1} (Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A) (Finpartition.hasBot.{u1} α (fun (a : α) (b : α) => _inst_2 a b) A)) G (fun (a : α) (b : α) => _inst_3 a b) ε) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α))) (Finset.hasEmptyc.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α)))))
but is expected to have type
forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α} (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toLT.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (StrictOrderedRing.toPartialOrder.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1)))))) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (LinearOrderedSemifield.toSemifield.{u2} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u2} 𝕜 _inst_1))))))) ε) -> (Eq.{succ u1} (Finset.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α))) (Finpartition.nonUniforms.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A (Bot.bot.{u1} (Finpartition.{u1} (Finset.{u1} α) (Finset.instLatticeFinset.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} α) A) (Finpartition.instBotFinpartitionFinsetInstLatticeFinsetInstOrderBotFinsetToLEToPreorderPartialOrder.{u1} α (fun (a : α) (b : α) => _inst_2 a b) A)) G (fun (a : α) (b : α) => _inst_3 a b) ε) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α))) (Finset.instEmptyCollectionFinset.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α)))))
Case conversion may be inaccurate. Consider using '#align finpartition.non_uniforms_bot Finpartition.nonUniforms_botₓ'. -/
@@ -379,7 +383,7 @@ def IsUniform (ε : 𝕜) : Prop :=
/- warning: finpartition.bot_is_uniform -> Finpartition.botIsUniform is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α} (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toLT.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))))) ε) -> (Finpartition.IsUniform.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A (Bot.bot.{u1} (Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A) (Finpartition.hasBot.{u1} α (fun (a : α) (b : α) => _inst_2 a b) A)) G (fun (a : α) (b : α) => _inst_3 a b) ε)
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α} (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toHasLt.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))))) ε) -> (Finpartition.IsUniform.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A (Bot.bot.{u1} (Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A) (Finpartition.hasBot.{u1} α (fun (a : α) (b : α) => _inst_2 a b) A)) G (fun (a : α) (b : α) => _inst_3 a b) ε)
but is expected to have type
forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α} (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toLT.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (StrictOrderedRing.toPartialOrder.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1)))))) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (LinearOrderedSemifield.toSemifield.{u2} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u2} 𝕜 _inst_1))))))) ε) -> (Finpartition.IsUniform.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A (Bot.bot.{u1} (Finpartition.{u1} (Finset.{u1} α) (Finset.instLatticeFinset.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} α) A) (Finpartition.instBotFinpartitionFinsetInstLatticeFinsetInstOrderBotFinsetToLEToPreorderPartialOrder.{u1} α (fun (a : α) (b : α) => _inst_2 a b) A)) G (fun (a : α) (b : α) => _inst_3 a b) ε)
Case conversion may be inaccurate. Consider using '#align finpartition.bot_is_uniform Finpartition.botIsUniformₓ'. -/
@@ -407,7 +411,7 @@ variable {P G}
/- warning: finpartition.is_uniform.mono -> Finpartition.IsUniform.mono is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α} {P : Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A} {G : SimpleGraph.{u1} α} [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {ε' : 𝕜}, (Finpartition.IsUniform.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε) -> (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) ε ε') -> (Finpartition.IsUniform.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε')
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α} {P : Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A} {G : SimpleGraph.{u1} α} [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {ε' : 𝕜}, (Finpartition.IsUniform.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε) -> (LE.le.{u2} 𝕜 (Preorder.toHasLe.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) ε ε') -> (Finpartition.IsUniform.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε')
but is expected to have type
forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] [_inst_2 : DecidableEq.{succ u2} α] {A : Finset.{u2} α} {P : Finpartition.{u2} (Finset.{u2} α) (Finset.instLatticeFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u2} α) A} {G : SimpleGraph.{u2} α} [_inst_3 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {ε' : 𝕜}, (Finpartition.IsUniform.{u2, u1} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) ε ε') -> (Finpartition.IsUniform.{u2, u1} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε')
Case conversion may be inaccurate. Consider using '#align finpartition.is_uniform.mono Finpartition.IsUniform.monoₓ'. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/08e1d8d4d989df3a6df86f385e9053ec8a372cc1
@@ -133,7 +133,7 @@ theorem not_isUniform_zero : ¬G.IsUniform (0 : 𝕜) s t := fun h =>
lean 3 declaration is
forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {s : Finset.{u1} α} {t : Finset.{u1} α}, SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) (OfNat.ofNat.{u2} 𝕜 1 (OfNat.mk.{u2} 𝕜 1 (One.one.{u2} 𝕜 (AddMonoidWithOne.toOne.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) s t
but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {s : Finset.{u2} α} {t : Finset.{u2} α}, SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) (OfNat.ofNat.{u1} 𝕜 1 (One.toOfNat1.{u1} 𝕜 (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))))) s t
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {s : Finset.{u2} α} {t : Finset.{u2} α}, SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) (OfNat.ofNat.{u1} 𝕜 1 (One.toOfNat1.{u1} 𝕜 (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1))))))) s t
Case conversion may be inaccurate. Consider using '#align simple_graph.is_uniform_one SimpleGraph.isUniform_oneₓ'. -/
theorem isUniform_one : G.IsUniform (1 : 𝕜) s t :=
by
@@ -150,7 +150,7 @@ variable {G}
lean 3 declaration is
forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] {G : SimpleGraph.{u1} α} [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, Iff (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) (Exists.{succ u1} (Finset.{u1} α) (fun (s' : Finset.{u1} α) => And (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) s' s) (Exists.{succ u1} (Finset.{u1} α) (fun (t' : Finset.{u1} α) => And (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) t' t) (And (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α s)) ε) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α s'))) (And (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α t)) ε) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α t'))) (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) ε (Abs.abs.{u2} 𝕜 (Neg.toHasAbs.{u2} 𝕜 (SubNegMonoid.toHasNeg.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))) (SemilatticeSup.toHasSup.{u2} 𝕜 (Lattice.toSemilatticeSup.{u2} 𝕜 (LinearOrder.toLattice.{u2} 𝕜 (LinearOrderedRing.toLinearOrder.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HSub.hSub.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHSub.{u2} 𝕜 (SubNegMonoid.toHasSub.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) s' t')) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))))))))
but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] {G : SimpleGraph.{u2} α} [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, Iff (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) (Exists.{succ u2} (Finset.{u2} α) (fun (s' : Finset.{u2} α) => And (HasSubset.Subset.{u2} (Finset.{u2} α) (Finset.instHasSubsetFinset.{u2} α) s' s) (Exists.{succ u2} (Finset.{u2} α) (fun (t' : Finset.{u2} α) => And (HasSubset.Subset.{u2} (Finset.{u2} α) (Finset.instHasSubsetFinset.{u2} α) t' t) (And (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) (HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))))) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α s)) ε) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α s'))) (And (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) (HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))))) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α t)) ε) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α t'))) (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) ε (Rat.cast.{u1} 𝕜 (LinearOrderedField.toRatCast.{u1} 𝕜 _inst_1) (Abs.abs.{0} Rat (Neg.toHasAbs.{0} Rat Rat.instNegRat Rat.instSupRat) (HSub.hSub.{0, 0, 0} Rat Rat Rat (instHSub.{0} Rat Rat.instSubRat) (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) s' t') (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))))))))
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] {G : SimpleGraph.{u2} α} [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, Iff (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) (Exists.{succ u2} (Finset.{u2} α) (fun (s' : Finset.{u2} α) => And (HasSubset.Subset.{u2} (Finset.{u2} α) (Finset.instHasSubsetFinset.{u2} α) s' s) (Exists.{succ u2} (Finset.{u2} α) (fun (t' : Finset.{u2} α) => And (HasSubset.Subset.{u2} (Finset.{u2} α) (Finset.instHasSubsetFinset.{u2} α) t' t) (And (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) (HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))))) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α s)) ε) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α s'))) (And (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) (HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))))) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α t)) ε) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α t'))) (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) ε (Rat.cast.{u1} 𝕜 (LinearOrderedField.toRatCast.{u1} 𝕜 _inst_1) (Abs.abs.{0} Rat (Neg.toHasAbs.{0} Rat Rat.instNegRat Rat.instSupRat) (HSub.hSub.{0, 0, 0} Rat Rat Rat (instHSub.{0} Rat Rat.instSubRat) (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) s' t') (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))))))))
Case conversion may be inaccurate. Consider using '#align simple_graph.not_is_uniform_iff SimpleGraph.not_isUniform_iffₓ'. -/
theorem not_isUniform_iff :
¬G.IsUniform ε s t ↔
@@ -197,7 +197,7 @@ theorem left_nonuniformWitnesses_subset (h : ¬G.IsUniform ε s t) :
lean 3 declaration is
forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α s)) ε) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α (Prod.fst.{u1, u1} (Finset.{u1} α) (Finset.{u1} α) (SimpleGraph.nonuniformWitnesses.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)))))
but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) (HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))))) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α s)) ε) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α (Prod.fst.{u2, u2} (Finset.{u2} α) (Finset.{u2} α) (SimpleGraph.nonuniformWitnesses.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)))))
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) (HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))))) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α s)) ε) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α (Prod.fst.{u2, u2} (Finset.{u2} α) (Finset.{u2} α) (SimpleGraph.nonuniformWitnesses.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)))))
Case conversion may be inaccurate. Consider using '#align simple_graph.left_nonuniform_witnesses_card SimpleGraph.left_nonuniformWitnesses_cardₓ'. -/
theorem left_nonuniformWitnesses_card (h : ¬G.IsUniform ε s t) :
(s.card : 𝕜) * ε ≤ (G.nonuniformWitnesses ε s t).1.card :=
@@ -223,7 +223,7 @@ theorem right_nonuniformWitnesses_subset (h : ¬G.IsUniform ε s t) :
lean 3 declaration is
forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α t)) ε) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α (Prod.snd.{u1, u1} (Finset.{u1} α) (Finset.{u1} α) (SimpleGraph.nonuniformWitnesses.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)))))
but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) (HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))))) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α t)) ε) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α (Prod.snd.{u2, u2} (Finset.{u2} α) (Finset.{u2} α) (SimpleGraph.nonuniformWitnesses.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)))))
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) (HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))))) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α t)) ε) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α (Prod.snd.{u2, u2} (Finset.{u2} α) (Finset.{u2} α) (SimpleGraph.nonuniformWitnesses.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)))))
Case conversion may be inaccurate. Consider using '#align simple_graph.right_nonuniform_witnesses_card SimpleGraph.right_nonuniformWitnesses_cardₓ'. -/
theorem right_nonuniformWitnesses_card (h : ¬G.IsUniform ε s t) :
(t.card : 𝕜) * ε ≤ (G.nonuniformWitnesses ε s t).2.card :=
@@ -274,7 +274,7 @@ theorem nonuniformWitness_subset (h : ¬G.IsUniform ε s t) : G.nonuniformWitnes
lean 3 declaration is
forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α s)) ε) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α (SimpleGraph.nonuniformWitness.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t))))
but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) (HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))))) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α s)) ε) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α (SimpleGraph.nonuniformWitness.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t))))
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) (HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))))) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α s)) ε) (Nat.cast.{u1} 𝕜 (Semiring.toNatCast.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α (SimpleGraph.nonuniformWitness.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t))))
Case conversion may be inaccurate. Consider using '#align simple_graph.nonuniform_witness_card_le SimpleGraph.nonuniformWitness_card_leₓ'. -/
theorem nonuniformWitness_card_le (h : ¬G.IsUniform ε s t) :
(s.card : 𝕜) * ε ≤ (G.nonuniformWitness ε s t).card :=
@@ -394,7 +394,7 @@ theorem botIsUniform (hε : 0 < ε) : (⊥ : Finpartition A).IsUniform G ε :=
lean 3 declaration is
forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α} (P : Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A) (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)], Finpartition.IsUniform.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) (OfNat.ofNat.{u2} 𝕜 1 (OfNat.mk.{u2} 𝕜 1 (One.one.{u2} 𝕜 (AddMonoidWithOne.toOne.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))))
but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] [_inst_2 : DecidableEq.{succ u2} α] {A : Finset.{u2} α} (P : Finpartition.{u2} (Finset.{u2} α) (Finset.instLatticeFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u2} α) A) (G : SimpleGraph.{u2} α) [_inst_3 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)], Finpartition.IsUniform.{u2, u1} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) (OfNat.ofNat.{u1} 𝕜 1 (One.toOfNat1.{u1} 𝕜 (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1)))))))
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] [_inst_2 : DecidableEq.{succ u2} α] {A : Finset.{u2} α} (P : Finpartition.{u2} (Finset.{u2} α) (Finset.instLatticeFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u2} α) A) (G : SimpleGraph.{u2} α) [_inst_3 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)], Finpartition.IsUniform.{u2, u1} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) (OfNat.ofNat.{u1} 𝕜 1 (One.toOfNat1.{u1} 𝕜 (Semiring.toOne.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1)))))))
Case conversion may be inaccurate. Consider using '#align finpartition.is_uniform_one Finpartition.isUniformOneₓ'. -/
theorem isUniformOne : P.IsUniform G (1 : 𝕜) :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce86f4e05e9a9b8da5e316b22c76ce76440c56a1
@@ -131,7 +131,7 @@ theorem not_isUniform_zero : ¬G.IsUniform (0 : 𝕜) s t := fun h =>
/- warning: simple_graph.is_uniform_one -> SimpleGraph.isUniform_one is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {s : Finset.{u1} α} {t : Finset.{u1} α}, SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) (OfNat.ofNat.{u2} 𝕜 1 (OfNat.mk.{u2} 𝕜 1 (One.one.{u2} 𝕜 (AddMonoidWithOne.toOne.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) s t
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {s : Finset.{u1} α} {t : Finset.{u1} α}, SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) (OfNat.ofNat.{u2} 𝕜 1 (OfNat.mk.{u2} 𝕜 1 (One.one.{u2} 𝕜 (AddMonoidWithOne.toOne.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) s t
but is expected to have type
forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {s : Finset.{u2} α} {t : Finset.{u2} α}, SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) (OfNat.ofNat.{u1} 𝕜 1 (One.toOfNat1.{u1} 𝕜 (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))))) s t
Case conversion may be inaccurate. Consider using '#align simple_graph.is_uniform_one SimpleGraph.isUniform_oneₓ'. -/
@@ -148,7 +148,7 @@ variable {G}
/- warning: simple_graph.not_is_uniform_iff -> SimpleGraph.not_isUniform_iff is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] {G : SimpleGraph.{u1} α} [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, Iff (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) (Exists.{succ u1} (Finset.{u1} α) (fun (s' : Finset.{u1} α) => And (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) s' s) (Exists.{succ u1} (Finset.{u1} α) (fun (t' : Finset.{u1} α) => And (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) t' t) (And (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α s)) ε) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α s'))) (And (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α t)) ε) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α t'))) (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) ε (Abs.abs.{u2} 𝕜 (Neg.toHasAbs.{u2} 𝕜 (SubNegMonoid.toHasNeg.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))) (SemilatticeSup.toHasSup.{u2} 𝕜 (Lattice.toSemilatticeSup.{u2} 𝕜 (LinearOrder.toLattice.{u2} 𝕜 (LinearOrderedRing.toLinearOrder.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HSub.hSub.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHSub.{u2} 𝕜 (SubNegMonoid.toHasSub.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) s' t')) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))))))))
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] {G : SimpleGraph.{u1} α} [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, Iff (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) (Exists.{succ u1} (Finset.{u1} α) (fun (s' : Finset.{u1} α) => And (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) s' s) (Exists.{succ u1} (Finset.{u1} α) (fun (t' : Finset.{u1} α) => And (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) t' t) (And (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α s)) ε) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α s'))) (And (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α t)) ε) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α t'))) (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) ε (Abs.abs.{u2} 𝕜 (Neg.toHasAbs.{u2} 𝕜 (SubNegMonoid.toHasNeg.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))) (SemilatticeSup.toHasSup.{u2} 𝕜 (Lattice.toSemilatticeSup.{u2} 𝕜 (LinearOrder.toLattice.{u2} 𝕜 (LinearOrderedRing.toLinearOrder.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HSub.hSub.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHSub.{u2} 𝕜 (SubNegMonoid.toHasSub.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) s' t')) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))))))))
but is expected to have type
forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] {G : SimpleGraph.{u2} α} [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, Iff (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) (Exists.{succ u2} (Finset.{u2} α) (fun (s' : Finset.{u2} α) => And (HasSubset.Subset.{u2} (Finset.{u2} α) (Finset.instHasSubsetFinset.{u2} α) s' s) (Exists.{succ u2} (Finset.{u2} α) (fun (t' : Finset.{u2} α) => And (HasSubset.Subset.{u2} (Finset.{u2} α) (Finset.instHasSubsetFinset.{u2} α) t' t) (And (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) (HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))))) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α s)) ε) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α s'))) (And (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) (HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))))) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α t)) ε) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α t'))) (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) ε (Rat.cast.{u1} 𝕜 (LinearOrderedField.toRatCast.{u1} 𝕜 _inst_1) (Abs.abs.{0} Rat (Neg.toHasAbs.{0} Rat Rat.instNegRat Rat.instSupRat) (HSub.hSub.{0, 0, 0} Rat Rat Rat (instHSub.{0} Rat Rat.instSubRat) (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) s' t') (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))))))))
Case conversion may be inaccurate. Consider using '#align simple_graph.not_is_uniform_iff SimpleGraph.not_isUniform_iffₓ'. -/
@@ -195,7 +195,7 @@ theorem left_nonuniformWitnesses_subset (h : ¬G.IsUniform ε s t) :
/- warning: simple_graph.left_nonuniform_witnesses_card -> SimpleGraph.left_nonuniformWitnesses_card is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α s)) ε) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α (Prod.fst.{u1, u1} (Finset.{u1} α) (Finset.{u1} α) (SimpleGraph.nonuniformWitnesses.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)))))
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α s)) ε) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α (Prod.fst.{u1, u1} (Finset.{u1} α) (Finset.{u1} α) (SimpleGraph.nonuniformWitnesses.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)))))
but is expected to have type
forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) (HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))))) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α s)) ε) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α (Prod.fst.{u2, u2} (Finset.{u2} α) (Finset.{u2} α) (SimpleGraph.nonuniformWitnesses.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)))))
Case conversion may be inaccurate. Consider using '#align simple_graph.left_nonuniform_witnesses_card SimpleGraph.left_nonuniformWitnesses_cardₓ'. -/
@@ -221,7 +221,7 @@ theorem right_nonuniformWitnesses_subset (h : ¬G.IsUniform ε s t) :
/- warning: simple_graph.right_nonuniform_witnesses_card -> SimpleGraph.right_nonuniformWitnesses_card is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α t)) ε) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α (Prod.snd.{u1, u1} (Finset.{u1} α) (Finset.{u1} α) (SimpleGraph.nonuniformWitnesses.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)))))
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α t)) ε) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α (Prod.snd.{u1, u1} (Finset.{u1} α) (Finset.{u1} α) (SimpleGraph.nonuniformWitnesses.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)))))
but is expected to have type
forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) (HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))))) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α t)) ε) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α (Prod.snd.{u2, u2} (Finset.{u2} α) (Finset.{u2} α) (SimpleGraph.nonuniformWitnesses.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)))))
Case conversion may be inaccurate. Consider using '#align simple_graph.right_nonuniform_witnesses_card SimpleGraph.right_nonuniformWitnesses_cardₓ'. -/
@@ -234,7 +234,7 @@ theorem right_nonuniformWitnesses_card (h : ¬G.IsUniform ε s t) :
/- warning: simple_graph.nonuniform_witnesses_spec -> SimpleGraph.nonuniformWitnesses_spec is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) ε (Abs.abs.{u2} 𝕜 (Neg.toHasAbs.{u2} 𝕜 (SubNegMonoid.toHasNeg.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))) (SemilatticeSup.toHasSup.{u2} 𝕜 (Lattice.toSemilatticeSup.{u2} 𝕜 (LinearOrder.toLattice.{u2} 𝕜 (LinearOrderedRing.toLinearOrder.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HSub.hSub.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHSub.{u2} 𝕜 (SubNegMonoid.toHasSub.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) (Prod.fst.{u1, u1} (Finset.{u1} α) (Finset.{u1} α) (SimpleGraph.nonuniformWitnesses.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) (Prod.snd.{u1, u1} (Finset.{u1} α) (Finset.{u1} α) (SimpleGraph.nonuniformWitnesses.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) ε (Abs.abs.{u2} 𝕜 (Neg.toHasAbs.{u2} 𝕜 (SubNegMonoid.toHasNeg.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))) (SemilatticeSup.toHasSup.{u2} 𝕜 (Lattice.toSemilatticeSup.{u2} 𝕜 (LinearOrder.toLattice.{u2} 𝕜 (LinearOrderedRing.toLinearOrder.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HSub.hSub.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHSub.{u2} 𝕜 (SubNegMonoid.toHasSub.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) (Prod.fst.{u1, u1} (Finset.{u1} α) (Finset.{u1} α) (SimpleGraph.nonuniformWitnesses.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) (Prod.snd.{u1, u1} (Finset.{u1} α) (Finset.{u1} α) (SimpleGraph.nonuniformWitnesses.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))
but is expected to have type
forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) ε (Rat.cast.{u1} 𝕜 (LinearOrderedField.toRatCast.{u1} 𝕜 _inst_1) (Abs.abs.{0} Rat (Neg.toHasAbs.{0} Rat Rat.instNegRat Rat.instSupRat) (HSub.hSub.{0, 0, 0} Rat Rat Rat (instHSub.{0} Rat Rat.instSubRat) (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) (Prod.fst.{u2, u2} (Finset.{u2} α) (Finset.{u2} α) (SimpleGraph.nonuniformWitnesses.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) (Prod.snd.{u2, u2} (Finset.{u2} α) (Finset.{u2} α) (SimpleGraph.nonuniformWitnesses.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t))) (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))
Case conversion may be inaccurate. Consider using '#align simple_graph.nonuniform_witnesses_spec SimpleGraph.nonuniformWitnesses_specₓ'. -/
@@ -272,7 +272,7 @@ theorem nonuniformWitness_subset (h : ¬G.IsUniform ε s t) : G.nonuniformWitnes
/- warning: simple_graph.nonuniform_witness_card_le -> SimpleGraph.nonuniformWitness_card_le is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α s)) ε) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α (SimpleGraph.nonuniformWitness.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t))))
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α s)) ε) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α (SimpleGraph.nonuniformWitness.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t))))
but is expected to have type
forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) (HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))))) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α s)) ε) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α (SimpleGraph.nonuniformWitness.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t))))
Case conversion may be inaccurate. Consider using '#align simple_graph.nonuniform_witness_card_le SimpleGraph.nonuniformWitness_card_leₓ'. -/
@@ -287,7 +287,7 @@ theorem nonuniformWitness_card_le (h : ¬G.IsUniform ε s t) :
/- warning: simple_graph.nonuniform_witness_spec -> SimpleGraph.nonuniformWitness_spec is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Ne.{succ u1} (Finset.{u1} α) s t) -> (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) ε (Abs.abs.{u2} 𝕜 (Neg.toHasAbs.{u2} 𝕜 (SubNegMonoid.toHasNeg.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))) (SemilatticeSup.toHasSup.{u2} 𝕜 (Lattice.toSemilatticeSup.{u2} 𝕜 (LinearOrder.toLattice.{u2} 𝕜 (LinearOrderedRing.toLinearOrder.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HSub.hSub.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHSub.{u2} 𝕜 (SubNegMonoid.toHasSub.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) (SimpleGraph.nonuniformWitness.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t) (SimpleGraph.nonuniformWitness.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε t s))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Ne.{succ u1} (Finset.{u1} α) s t) -> (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) ε (Abs.abs.{u2} 𝕜 (Neg.toHasAbs.{u2} 𝕜 (SubNegMonoid.toHasNeg.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))) (SemilatticeSup.toHasSup.{u2} 𝕜 (Lattice.toSemilatticeSup.{u2} 𝕜 (LinearOrder.toLattice.{u2} 𝕜 (LinearOrderedRing.toLinearOrder.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HSub.hSub.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHSub.{u2} 𝕜 (SubNegMonoid.toHasSub.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) (SimpleGraph.nonuniformWitness.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t) (SimpleGraph.nonuniformWitness.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε t s))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))
but is expected to have type
forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Ne.{succ u2} (Finset.{u2} α) s t) -> (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) ε (Rat.cast.{u1} 𝕜 (LinearOrderedField.toRatCast.{u1} 𝕜 _inst_1) (Abs.abs.{0} Rat (Neg.toHasAbs.{0} Rat Rat.instNegRat Rat.instSupRat) (HSub.hSub.{0, 0, 0} Rat Rat Rat (instHSub.{0} Rat Rat.instSubRat) (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) (SimpleGraph.nonuniformWitness.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t) (SimpleGraph.nonuniformWitness.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε t s)) (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))
Case conversion may be inaccurate. Consider using '#align simple_graph.nonuniform_witness_spec SimpleGraph.nonuniformWitness_specₓ'. -/
@@ -392,7 +392,7 @@ theorem botIsUniform (hε : 0 < ε) : (⊥ : Finpartition A).IsUniform G ε :=
/- warning: finpartition.is_uniform_one -> Finpartition.isUniformOne is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α} (P : Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A) (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)], Finpartition.IsUniform.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) (OfNat.ofNat.{u2} 𝕜 1 (OfNat.mk.{u2} 𝕜 1 (One.one.{u2} 𝕜 (AddMonoidWithOne.toOne.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))))
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α} (P : Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A) (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)], Finpartition.IsUniform.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) (OfNat.ofNat.{u2} 𝕜 1 (OfNat.mk.{u2} 𝕜 1 (One.one.{u2} 𝕜 (AddMonoidWithOne.toOne.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (AddCommGroupWithOne.toAddGroupWithOne.{u2} 𝕜 (Ring.toAddCommGroupWithOne.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))))
but is expected to have type
forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] [_inst_2 : DecidableEq.{succ u2} α] {A : Finset.{u2} α} (P : Finpartition.{u2} (Finset.{u2} α) (Finset.instLatticeFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u2} α) A) (G : SimpleGraph.{u2} α) [_inst_3 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)], Finpartition.IsUniform.{u2, u1} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) (OfNat.ofNat.{u1} 𝕜 1 (One.toOfNat1.{u1} 𝕜 (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1)))))))
Case conversion may be inaccurate. Consider using '#align finpartition.is_uniform_one Finpartition.isUniformOneₓ'. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/3180fab693e2cee3bff62675571264cb8778b212
@@ -150,7 +150,7 @@ variable {G}
lean 3 declaration is
forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] {G : SimpleGraph.{u1} α} [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, Iff (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) (Exists.{succ u1} (Finset.{u1} α) (fun (s' : Finset.{u1} α) => And (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) s' s) (Exists.{succ u1} (Finset.{u1} α) (fun (t' : Finset.{u1} α) => And (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) t' t) (And (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α s)) ε) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α s'))) (And (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α t)) ε) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α t'))) (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) ε (Abs.abs.{u2} 𝕜 (Neg.toHasAbs.{u2} 𝕜 (SubNegMonoid.toHasNeg.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))) (SemilatticeSup.toHasSup.{u2} 𝕜 (Lattice.toSemilatticeSup.{u2} 𝕜 (LinearOrder.toLattice.{u2} 𝕜 (LinearOrderedRing.toLinearOrder.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HSub.hSub.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHSub.{u2} 𝕜 (SubNegMonoid.toHasSub.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) s' t')) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))))))))
but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] {G : SimpleGraph.{u2} α} [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, Iff (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) (Exists.{succ u2} (Finset.{u2} α) (fun (s' : Finset.{u2} α) => And (HasSubset.Subset.{u2} (Finset.{u2} α) (Finset.instHasSubsetFinset.{u2} α) s' s) (Exists.{succ u2} (Finset.{u2} α) (fun (t' : Finset.{u2} α) => And (HasSubset.Subset.{u2} (Finset.{u2} α) (Finset.instHasSubsetFinset.{u2} α) t' t) (And (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) (HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))))) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α s)) ε) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α s'))) (And (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) (HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))))) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α t)) ε) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α t'))) (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) ε (RatCast.ratCast.{u1} 𝕜 (LinearOrderedField.toRatCast.{u1} 𝕜 _inst_1) (Abs.abs.{0} Rat (Neg.toHasAbs.{0} Rat Rat.instNegRat Rat.instSupRat) (HSub.hSub.{0, 0, 0} Rat Rat Rat (instHSub.{0} Rat Rat.instSubRat) (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) s' t') (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))))))))
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] {G : SimpleGraph.{u2} α} [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, Iff (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) (Exists.{succ u2} (Finset.{u2} α) (fun (s' : Finset.{u2} α) => And (HasSubset.Subset.{u2} (Finset.{u2} α) (Finset.instHasSubsetFinset.{u2} α) s' s) (Exists.{succ u2} (Finset.{u2} α) (fun (t' : Finset.{u2} α) => And (HasSubset.Subset.{u2} (Finset.{u2} α) (Finset.instHasSubsetFinset.{u2} α) t' t) (And (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) (HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))))) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α s)) ε) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α s'))) (And (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) (HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))))) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α t)) ε) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α t'))) (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) ε (Rat.cast.{u1} 𝕜 (LinearOrderedField.toRatCast.{u1} 𝕜 _inst_1) (Abs.abs.{0} Rat (Neg.toHasAbs.{0} Rat Rat.instNegRat Rat.instSupRat) (HSub.hSub.{0, 0, 0} Rat Rat Rat (instHSub.{0} Rat Rat.instSubRat) (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) s' t') (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))))))))
Case conversion may be inaccurate. Consider using '#align simple_graph.not_is_uniform_iff SimpleGraph.not_isUniform_iffₓ'. -/
theorem not_isUniform_iff :
¬G.IsUniform ε s t ↔
@@ -236,7 +236,7 @@ theorem right_nonuniformWitnesses_card (h : ¬G.IsUniform ε s t) :
lean 3 declaration is
forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) ε (Abs.abs.{u2} 𝕜 (Neg.toHasAbs.{u2} 𝕜 (SubNegMonoid.toHasNeg.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))) (SemilatticeSup.toHasSup.{u2} 𝕜 (Lattice.toSemilatticeSup.{u2} 𝕜 (LinearOrder.toLattice.{u2} 𝕜 (LinearOrderedRing.toLinearOrder.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HSub.hSub.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHSub.{u2} 𝕜 (SubNegMonoid.toHasSub.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) (Prod.fst.{u1, u1} (Finset.{u1} α) (Finset.{u1} α) (SimpleGraph.nonuniformWitnesses.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) (Prod.snd.{u1, u1} (Finset.{u1} α) (Finset.{u1} α) (SimpleGraph.nonuniformWitnesses.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))
but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) ε (RatCast.ratCast.{u1} 𝕜 (LinearOrderedField.toRatCast.{u1} 𝕜 _inst_1) (Abs.abs.{0} Rat (Neg.toHasAbs.{0} Rat Rat.instNegRat Rat.instSupRat) (HSub.hSub.{0, 0, 0} Rat Rat Rat (instHSub.{0} Rat Rat.instSubRat) (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) (Prod.fst.{u2, u2} (Finset.{u2} α) (Finset.{u2} α) (SimpleGraph.nonuniformWitnesses.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) (Prod.snd.{u2, u2} (Finset.{u2} α) (Finset.{u2} α) (SimpleGraph.nonuniformWitnesses.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t))) (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) ε (Rat.cast.{u1} 𝕜 (LinearOrderedField.toRatCast.{u1} 𝕜 _inst_1) (Abs.abs.{0} Rat (Neg.toHasAbs.{0} Rat Rat.instNegRat Rat.instSupRat) (HSub.hSub.{0, 0, 0} Rat Rat Rat (instHSub.{0} Rat Rat.instSubRat) (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) (Prod.fst.{u2, u2} (Finset.{u2} α) (Finset.{u2} α) (SimpleGraph.nonuniformWitnesses.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) (Prod.snd.{u2, u2} (Finset.{u2} α) (Finset.{u2} α) (SimpleGraph.nonuniformWitnesses.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t))) (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))
Case conversion may be inaccurate. Consider using '#align simple_graph.nonuniform_witnesses_spec SimpleGraph.nonuniformWitnesses_specₓ'. -/
theorem nonuniformWitnesses_spec (h : ¬G.IsUniform ε s t) :
ε ≤
@@ -289,7 +289,7 @@ theorem nonuniformWitness_card_le (h : ¬G.IsUniform ε s t) :
lean 3 declaration is
forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Ne.{succ u1} (Finset.{u1} α) s t) -> (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) ε (Abs.abs.{u2} 𝕜 (Neg.toHasAbs.{u2} 𝕜 (SubNegMonoid.toHasNeg.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))) (SemilatticeSup.toHasSup.{u2} 𝕜 (Lattice.toSemilatticeSup.{u2} 𝕜 (LinearOrder.toLattice.{u2} 𝕜 (LinearOrderedRing.toLinearOrder.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HSub.hSub.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHSub.{u2} 𝕜 (SubNegMonoid.toHasSub.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) (SimpleGraph.nonuniformWitness.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t) (SimpleGraph.nonuniformWitness.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε t s))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))
but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Ne.{succ u2} (Finset.{u2} α) s t) -> (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) ε (RatCast.ratCast.{u1} 𝕜 (LinearOrderedField.toRatCast.{u1} 𝕜 _inst_1) (Abs.abs.{0} Rat (Neg.toHasAbs.{0} Rat Rat.instNegRat Rat.instSupRat) (HSub.hSub.{0, 0, 0} Rat Rat Rat (instHSub.{0} Rat Rat.instSubRat) (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) (SimpleGraph.nonuniformWitness.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t) (SimpleGraph.nonuniformWitness.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε t s)) (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Ne.{succ u2} (Finset.{u2} α) s t) -> (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) ε (Rat.cast.{u1} 𝕜 (LinearOrderedField.toRatCast.{u1} 𝕜 _inst_1) (Abs.abs.{0} Rat (Neg.toHasAbs.{0} Rat Rat.instNegRat Rat.instSupRat) (HSub.hSub.{0, 0, 0} Rat Rat Rat (instHSub.{0} Rat Rat.instSubRat) (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) (SimpleGraph.nonuniformWitness.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t) (SimpleGraph.nonuniformWitness.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε t s)) (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))
Case conversion may be inaccurate. Consider using '#align simple_graph.nonuniform_witness_spec SimpleGraph.nonuniformWitness_specₓ'. -/
theorem nonuniformWitness_spec (h₁ : s ≠ t) (h₂ : ¬G.IsUniform ε s t) :
ε ≤
mathlib commit https://github.com/leanprover-community/mathlib/commit/62e8311c791f02c47451bf14aa2501048e7c2f33
@@ -4,7 +4,7 @@ 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 combinatorics.simple_graph.regularity.uniform
-! leanprover-community/mathlib commit 32b08ef840dd25ca2e47e035c5da03ce16d2dc3c
+! leanprover-community/mathlib commit 832f7b9162039c28b9361289c8681f155cae758f
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -14,6 +14,9 @@ import Mathbin.SetTheory.Ordinal.Basic
/-!
# Graph uniformity and uniform partitions
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
In this file we define uniformity of a pair of vertices in a graph and uniformity of a partition of
vertices of a graph. Both are also known as ε-regularity.
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -49,6 +49,7 @@ namespace SimpleGraph
variable (G : SimpleGraph α) [DecidableRel G.Adj] (ε : 𝕜) {s t : Finset α} {a b : α}
+#print SimpleGraph.IsUniform /-
/-- A pair of finsets of vertices is `ε`-uniform (aka `ε`-regular) iff their edge density is close
to the density of any big enough pair of subsets. Intuitively, the edges between them are
random-like. -/
@@ -60,15 +61,24 @@ def IsUniform (s t : Finset α) : Prop :=
(s.card : 𝕜) * ε ≤ s'.card →
(t.card : 𝕜) * ε ≤ t'.card → |(G.edgeDensity s' t' : 𝕜) - (G.edgeDensity s t : 𝕜)| < ε
#align simple_graph.is_uniform SimpleGraph.IsUniform
+-/
variable {G ε}
+#print SimpleGraph.IsUniform.mono /-
theorem IsUniform.mono {ε' : 𝕜} (h : ε ≤ ε') (hε : IsUniform G ε s t) : IsUniform G ε' s t :=
fun s' hs' t' ht' hs ht => by
refine' (hε hs' ht' (le_trans _ hs) (le_trans _ ht)).trans_le h <;>
exact mul_le_mul_of_nonneg_left h (Nat.cast_nonneg _)
#align simple_graph.is_uniform.mono SimpleGraph.IsUniform.mono
+-/
+/- warning: simple_graph.is_uniform.symm -> SimpleGraph.IsUniform.symm is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] {G : SimpleGraph.{u1} α} [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜}, Symmetric.{succ u1} (Finset.{u1} α) (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε)
+but is expected to have type
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] {G : SimpleGraph.{u2} α} [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜}, Symmetric.{succ u2} (Finset.{u2} α) (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε)
+Case conversion may be inaccurate. Consider using '#align simple_graph.is_uniform.symm SimpleGraph.IsUniform.symmₓ'. -/
theorem IsUniform.symm : Symmetric (IsUniform G ε) := fun s t h t' ht' s' hs' ht hs =>
by
rw [edge_density_comm _ t', edge_density_comm _ t]
@@ -77,10 +87,22 @@ theorem IsUniform.symm : Symmetric (IsUniform G ε) := fun s t h t' ht' s' hs' h
variable (G)
+/- warning: simple_graph.is_uniform_comm -> SimpleGraph.isUniform_comm is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, Iff (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t) (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε t s)
+but is expected to have type
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, Iff (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t) (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε t s)
+Case conversion may be inaccurate. Consider using '#align simple_graph.is_uniform_comm SimpleGraph.isUniform_commₓ'. -/
theorem isUniform_comm : IsUniform G ε s t ↔ IsUniform G ε t s :=
⟨fun h => h.symm, fun h => h.symm⟩
#align simple_graph.is_uniform_comm SimpleGraph.isUniform_comm
+/- warning: simple_graph.is_uniform_singleton -> SimpleGraph.isUniform_singleton is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {a : α} {b : α}, (LT.lt.{u2} 𝕜 (Preorder.toLT.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))))) ε) -> (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) b))
+but is expected to have type
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {a : α} {b : α}, (LT.lt.{u2} 𝕜 (Preorder.toLT.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (StrictOrderedRing.toPartialOrder.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1)))))) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (LinearOrderedSemifield.toSemifield.{u2} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u2} 𝕜 _inst_1))))))) ε) -> (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b))
+Case conversion may be inaccurate. Consider using '#align simple_graph.is_uniform_singleton SimpleGraph.isUniform_singletonₓ'. -/
theorem isUniform_singleton (hε : 0 < ε) : G.IsUniform ε {a} {b} :=
by
intro s' hs' t' ht' hs ht
@@ -94,10 +116,22 @@ theorem isUniform_singleton (hε : 0 < ε) : G.IsUniform ε {a} {b} :=
· rwa [sub_self, abs_zero]
#align simple_graph.is_uniform_singleton SimpleGraph.isUniform_singleton
+/- warning: simple_graph.not_is_uniform_zero -> SimpleGraph.not_isUniform_zero is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {s : Finset.{u1} α} {t : Finset.{u1} α}, Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))))) s t)
+but is expected to have type
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {s : Finset.{u2} α} {t : Finset.{u2} α}, Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (LinearOrderedSemifield.toSemifield.{u1} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u1} 𝕜 _inst_1))))))) s t)
+Case conversion may be inaccurate. Consider using '#align simple_graph.not_is_uniform_zero SimpleGraph.not_isUniform_zeroₓ'. -/
theorem not_isUniform_zero : ¬G.IsUniform (0 : 𝕜) s t := fun h =>
(abs_nonneg _).not_lt <| h (empty_subset _) (empty_subset _) (by simp) (by simp)
#align simple_graph.not_is_uniform_zero SimpleGraph.not_isUniform_zero
+/- warning: simple_graph.is_uniform_one -> SimpleGraph.isUniform_one is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {s : Finset.{u1} α} {t : Finset.{u1} α}, SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) (OfNat.ofNat.{u2} 𝕜 1 (OfNat.mk.{u2} 𝕜 1 (One.one.{u2} 𝕜 (AddMonoidWithOne.toOne.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) s t
+but is expected to have type
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {s : Finset.{u2} α} {t : Finset.{u2} α}, SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) (OfNat.ofNat.{u1} 𝕜 1 (One.toOfNat1.{u1} 𝕜 (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))))) s t
+Case conversion may be inaccurate. Consider using '#align simple_graph.is_uniform_one SimpleGraph.isUniform_oneₓ'. -/
theorem isUniform_one : G.IsUniform (1 : 𝕜) s t :=
by
intro s' hs' t' ht' hs ht
@@ -109,6 +143,12 @@ theorem isUniform_one : G.IsUniform (1 : 𝕜) s t :=
variable {G}
+/- warning: simple_graph.not_is_uniform_iff -> SimpleGraph.not_isUniform_iff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] {G : SimpleGraph.{u1} α} [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, Iff (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) (Exists.{succ u1} (Finset.{u1} α) (fun (s' : Finset.{u1} α) => And (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) s' s) (Exists.{succ u1} (Finset.{u1} α) (fun (t' : Finset.{u1} α) => And (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) t' t) (And (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α s)) ε) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α s'))) (And (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α t)) ε) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α t'))) (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) ε (Abs.abs.{u2} 𝕜 (Neg.toHasAbs.{u2} 𝕜 (SubNegMonoid.toHasNeg.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))) (SemilatticeSup.toHasSup.{u2} 𝕜 (Lattice.toSemilatticeSup.{u2} 𝕜 (LinearOrder.toLattice.{u2} 𝕜 (LinearOrderedRing.toLinearOrder.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HSub.hSub.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHSub.{u2} 𝕜 (SubNegMonoid.toHasSub.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) s' t')) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))))))))
+but is expected to have type
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] {G : SimpleGraph.{u2} α} [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, Iff (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) (Exists.{succ u2} (Finset.{u2} α) (fun (s' : Finset.{u2} α) => And (HasSubset.Subset.{u2} (Finset.{u2} α) (Finset.instHasSubsetFinset.{u2} α) s' s) (Exists.{succ u2} (Finset.{u2} α) (fun (t' : Finset.{u2} α) => And (HasSubset.Subset.{u2} (Finset.{u2} α) (Finset.instHasSubsetFinset.{u2} α) t' t) (And (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) (HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))))) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α s)) ε) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α s'))) (And (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) (HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))))) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α t)) ε) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α t'))) (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) ε (RatCast.ratCast.{u1} 𝕜 (LinearOrderedField.toRatCast.{u1} 𝕜 _inst_1) (Abs.abs.{0} Rat (Neg.toHasAbs.{0} Rat Rat.instNegRat Rat.instSupRat) (HSub.hSub.{0, 0, 0} Rat Rat Rat (instHSub.{0} Rat Rat.instSubRat) (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) s' t') (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))))))))
+Case conversion may be inaccurate. Consider using '#align simple_graph.not_is_uniform_iff SimpleGraph.not_isUniform_iffₓ'. -/
theorem not_isUniform_iff :
¬G.IsUniform ε s t ↔
∃ s',
@@ -126,6 +166,7 @@ open Classical
variable (G)
+#print SimpleGraph.nonuniformWitnesses /-
/-- An arbitrary pair of subsets witnessing the non-uniformity of `(s, t)`. If `(s, t)` is uniform,
returns `(s, t)`. Witnesses for `(s, t)` and `(t, s)` don't necessarily match. See
`simple_graph.nonuniform_witness`. -/
@@ -134,7 +175,14 @@ noncomputable def nonuniformWitnesses (ε : 𝕜) (s t : Finset α) : Finset α
((not_isUniform_iff.1 h).some, (not_isUniform_iff.1 h).choose_spec.2.some)
else (s, t)
#align simple_graph.nonuniform_witnesses SimpleGraph.nonuniformWitnesses
+-/
+/- warning: simple_graph.left_nonuniform_witnesses_subset -> SimpleGraph.left_nonuniformWitnesses_subset is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (Prod.fst.{u1, u1} (Finset.{u1} α) (Finset.{u1} α) (SimpleGraph.nonuniformWitnesses.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) s)
+but is expected to have type
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (HasSubset.Subset.{u2} (Finset.{u2} α) (Finset.instHasSubsetFinset.{u2} α) (Prod.fst.{u2, u2} (Finset.{u2} α) (Finset.{u2} α) (SimpleGraph.nonuniformWitnesses.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) s)
+Case conversion may be inaccurate. Consider using '#align simple_graph.left_nonuniform_witnesses_subset SimpleGraph.left_nonuniformWitnesses_subsetₓ'. -/
theorem left_nonuniformWitnesses_subset (h : ¬G.IsUniform ε s t) :
(G.nonuniformWitnesses ε s t).1 ⊆ s :=
by
@@ -142,6 +190,12 @@ theorem left_nonuniformWitnesses_subset (h : ¬G.IsUniform ε s t) :
exact (not_is_uniform_iff.1 h).choose_spec.1
#align simple_graph.left_nonuniform_witnesses_subset SimpleGraph.left_nonuniformWitnesses_subset
+/- warning: simple_graph.left_nonuniform_witnesses_card -> SimpleGraph.left_nonuniformWitnesses_card is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α s)) ε) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α (Prod.fst.{u1, u1} (Finset.{u1} α) (Finset.{u1} α) (SimpleGraph.nonuniformWitnesses.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)))))
+but is expected to have type
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) (HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))))) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α s)) ε) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α (Prod.fst.{u2, u2} (Finset.{u2} α) (Finset.{u2} α) (SimpleGraph.nonuniformWitnesses.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)))))
+Case conversion may be inaccurate. Consider using '#align simple_graph.left_nonuniform_witnesses_card SimpleGraph.left_nonuniformWitnesses_cardₓ'. -/
theorem left_nonuniformWitnesses_card (h : ¬G.IsUniform ε s t) :
(s.card : 𝕜) * ε ≤ (G.nonuniformWitnesses ε s t).1.card :=
by
@@ -149,6 +203,12 @@ theorem left_nonuniformWitnesses_card (h : ¬G.IsUniform ε s t) :
exact (not_is_uniform_iff.1 h).choose_spec.2.choose_spec.2.1
#align simple_graph.left_nonuniform_witnesses_card SimpleGraph.left_nonuniformWitnesses_card
+/- warning: simple_graph.right_nonuniform_witnesses_subset -> SimpleGraph.right_nonuniformWitnesses_subset is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (Prod.snd.{u1, u1} (Finset.{u1} α) (Finset.{u1} α) (SimpleGraph.nonuniformWitnesses.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) t)
+but is expected to have type
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (HasSubset.Subset.{u2} (Finset.{u2} α) (Finset.instHasSubsetFinset.{u2} α) (Prod.snd.{u2, u2} (Finset.{u2} α) (Finset.{u2} α) (SimpleGraph.nonuniformWitnesses.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) t)
+Case conversion may be inaccurate. Consider using '#align simple_graph.right_nonuniform_witnesses_subset SimpleGraph.right_nonuniformWitnesses_subsetₓ'. -/
theorem right_nonuniformWitnesses_subset (h : ¬G.IsUniform ε s t) :
(G.nonuniformWitnesses ε s t).2 ⊆ t :=
by
@@ -156,6 +216,12 @@ theorem right_nonuniformWitnesses_subset (h : ¬G.IsUniform ε s t) :
exact (not_is_uniform_iff.1 h).choose_spec.2.choose_spec.1
#align simple_graph.right_nonuniform_witnesses_subset SimpleGraph.right_nonuniformWitnesses_subset
+/- warning: simple_graph.right_nonuniform_witnesses_card -> SimpleGraph.right_nonuniformWitnesses_card is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α t)) ε) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α (Prod.snd.{u1, u1} (Finset.{u1} α) (Finset.{u1} α) (SimpleGraph.nonuniformWitnesses.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)))))
+but is expected to have type
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) (HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))))) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α t)) ε) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α (Prod.snd.{u2, u2} (Finset.{u2} α) (Finset.{u2} α) (SimpleGraph.nonuniformWitnesses.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)))))
+Case conversion may be inaccurate. Consider using '#align simple_graph.right_nonuniform_witnesses_card SimpleGraph.right_nonuniformWitnesses_cardₓ'. -/
theorem right_nonuniformWitnesses_card (h : ¬G.IsUniform ε s t) :
(t.card : 𝕜) * ε ≤ (G.nonuniformWitnesses ε s t).2.card :=
by
@@ -163,6 +229,12 @@ theorem right_nonuniformWitnesses_card (h : ¬G.IsUniform ε s t) :
exact (not_is_uniform_iff.1 h).choose_spec.2.choose_spec.2.2.1
#align simple_graph.right_nonuniform_witnesses_card SimpleGraph.right_nonuniformWitnesses_card
+/- warning: simple_graph.nonuniform_witnesses_spec -> SimpleGraph.nonuniformWitnesses_spec is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) ε (Abs.abs.{u2} 𝕜 (Neg.toHasAbs.{u2} 𝕜 (SubNegMonoid.toHasNeg.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))) (SemilatticeSup.toHasSup.{u2} 𝕜 (Lattice.toSemilatticeSup.{u2} 𝕜 (LinearOrder.toLattice.{u2} 𝕜 (LinearOrderedRing.toLinearOrder.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HSub.hSub.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHSub.{u2} 𝕜 (SubNegMonoid.toHasSub.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) (Prod.fst.{u1, u1} (Finset.{u1} α) (Finset.{u1} α) (SimpleGraph.nonuniformWitnesses.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) (Prod.snd.{u1, u1} (Finset.{u1} α) (Finset.{u1} α) (SimpleGraph.nonuniformWitnesses.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))
+but is expected to have type
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) ε (RatCast.ratCast.{u1} 𝕜 (LinearOrderedField.toRatCast.{u1} 𝕜 _inst_1) (Abs.abs.{0} Rat (Neg.toHasAbs.{0} Rat Rat.instNegRat Rat.instSupRat) (HSub.hSub.{0, 0, 0} Rat Rat Rat (instHSub.{0} Rat Rat.instSubRat) (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) (Prod.fst.{u2, u2} (Finset.{u2} α) (Finset.{u2} α) (SimpleGraph.nonuniformWitnesses.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) (Prod.snd.{u2, u2} (Finset.{u2} α) (Finset.{u2} α) (SimpleGraph.nonuniformWitnesses.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t))) (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))
+Case conversion may be inaccurate. Consider using '#align simple_graph.nonuniform_witnesses_spec SimpleGraph.nonuniformWitnesses_specₓ'. -/
theorem nonuniformWitnesses_spec (h : ¬G.IsUniform ε s t) :
ε ≤
|G.edgeDensity (G.nonuniformWitnesses ε s t).1 (G.nonuniformWitnesses ε s t).2 -
@@ -172,13 +244,21 @@ theorem nonuniformWitnesses_spec (h : ¬G.IsUniform ε s t) :
exact (not_is_uniform_iff.1 h).choose_spec.2.choose_spec.2.2.2
#align simple_graph.nonuniform_witnesses_spec SimpleGraph.nonuniformWitnesses_spec
+#print SimpleGraph.nonuniformWitness /-
/-- Arbitrary witness of non-uniformity. `G.nonuniform_witness ε s t` and
`G.nonuniform_witness ε t s` form a pair of subsets witnessing the non-uniformity of `(s, t)`. If
`(s, t)` is uniform, returns `s`. -/
noncomputable def nonuniformWitness (ε : 𝕜) (s t : Finset α) : Finset α :=
if WellOrderingRel s t then (G.nonuniformWitnesses ε s t).1 else (G.nonuniformWitnesses ε t s).2
#align simple_graph.nonuniform_witness SimpleGraph.nonuniformWitness
+-/
+/- warning: simple_graph.nonuniform_witness_subset -> SimpleGraph.nonuniformWitness_subset is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (SimpleGraph.nonuniformWitness.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t) s)
+but is expected to have type
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (HasSubset.Subset.{u2} (Finset.{u2} α) (Finset.instHasSubsetFinset.{u2} α) (SimpleGraph.nonuniformWitness.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t) s)
+Case conversion may be inaccurate. Consider using '#align simple_graph.nonuniform_witness_subset SimpleGraph.nonuniformWitness_subsetₓ'. -/
theorem nonuniformWitness_subset (h : ¬G.IsUniform ε s t) : G.nonuniformWitness ε s t ⊆ s :=
by
unfold nonuniform_witness
@@ -187,6 +267,12 @@ theorem nonuniformWitness_subset (h : ¬G.IsUniform ε s t) : G.nonuniformWitnes
· exact G.right_nonuniform_witnesses_subset fun i => h i.symm
#align simple_graph.nonuniform_witness_subset SimpleGraph.nonuniformWitness_subset
+/- warning: simple_graph.nonuniform_witness_card_le -> SimpleGraph.nonuniformWitness_card_le is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α s)) ε) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Nat 𝕜 (HasLiftT.mk.{1, succ u2} Nat 𝕜 (CoeTCₓ.coe.{1, succ u2} Nat 𝕜 (Nat.castCoe.{u2} 𝕜 (AddMonoidWithOne.toNatCast.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))))) (Finset.card.{u1} α (SimpleGraph.nonuniformWitness.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t))))
+but is expected to have type
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) (HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))))) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α s)) ε) (Nat.cast.{u1} 𝕜 (NonAssocRing.toNatCast.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1))))) (Finset.card.{u2} α (SimpleGraph.nonuniformWitness.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t))))
+Case conversion may be inaccurate. Consider using '#align simple_graph.nonuniform_witness_card_le SimpleGraph.nonuniformWitness_card_leₓ'. -/
theorem nonuniformWitness_card_le (h : ¬G.IsUniform ε s t) :
(s.card : 𝕜) * ε ≤ (G.nonuniformWitness ε s t).card :=
by
@@ -196,6 +282,12 @@ theorem nonuniformWitness_card_le (h : ¬G.IsUniform ε s t) :
· exact G.right_nonuniform_witnesses_card fun i => h i.symm
#align simple_graph.nonuniform_witness_card_le SimpleGraph.nonuniformWitness_card_le
+/- warning: simple_graph.nonuniform_witness_spec -> SimpleGraph.nonuniformWitness_spec is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] (G : SimpleGraph.{u1} α) [_inst_2 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Ne.{succ u1} (Finset.{u1} α) s t) -> (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) ε (Abs.abs.{u2} 𝕜 (Neg.toHasAbs.{u2} 𝕜 (SubNegMonoid.toHasNeg.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))))) (SemilatticeSup.toHasSup.{u2} 𝕜 (Lattice.toSemilatticeSup.{u2} 𝕜 (LinearOrder.toLattice.{u2} 𝕜 (LinearOrderedRing.toLinearOrder.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (HSub.hSub.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHSub.{u2} 𝕜 (SubNegMonoid.toHasSub.{u2} 𝕜 (AddGroup.toSubNegMonoid.{u2} 𝕜 (AddGroupWithOne.toAddGroup.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) (SimpleGraph.nonuniformWitness.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t) (SimpleGraph.nonuniformWitness.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε t s))) ((fun (a : Type) (b : Type.{u2}) [self : HasLiftT.{1, succ u2} a b] => self.0) Rat 𝕜 (HasLiftT.mk.{1, succ u2} Rat 𝕜 (CoeTCₓ.coe.{1, succ u2} Rat 𝕜 (Rat.castCoe.{u2} 𝕜 (DivisionRing.toHasRatCast.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1)))))) (SimpleGraph.edgeDensity.{u1} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))
+but is expected to have type
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] (G : SimpleGraph.{u2} α) [_inst_2 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Ne.{succ u2} (Finset.{u2} α) s t) -> (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t)) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) ε (RatCast.ratCast.{u1} 𝕜 (LinearOrderedField.toRatCast.{u1} 𝕜 _inst_1) (Abs.abs.{0} Rat (Neg.toHasAbs.{0} Rat Rat.instNegRat Rat.instSupRat) (HSub.hSub.{0, 0, 0} Rat Rat Rat (instHSub.{0} Rat Rat.instSubRat) (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) (SimpleGraph.nonuniformWitness.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε s t) (SimpleGraph.nonuniformWitness.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_2 a b) ε t s)) (SimpleGraph.edgeDensity.{u2} α G (fun (a : α) (b : α) => _inst_2 a b) s t)))))
+Case conversion may be inaccurate. Consider using '#align simple_graph.nonuniform_witness_spec SimpleGraph.nonuniformWitness_specₓ'. -/
theorem nonuniformWitness_spec (h₁ : s ≠ t) (h₂ : ¬G.IsUniform ε s t) :
ε ≤
|G.edgeDensity (G.nonuniformWitness ε s t) (G.nonuniformWitness ε t s) - G.edgeDensity s t| :=
@@ -221,21 +313,45 @@ namespace Finpartition
open Classical
+/- warning: finpartition.non_uniforms -> Finpartition.nonUniforms is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α}, (Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A) -> (forall (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)], 𝕜 -> (Finset.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α))))
+but is expected to have type
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α}, (Finpartition.{u1} (Finset.{u1} α) (Finset.instLatticeFinset.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} α) A) -> (forall (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)], 𝕜 -> (Finset.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α))))
+Case conversion may be inaccurate. Consider using '#align finpartition.non_uniforms Finpartition.nonUniformsₓ'. -/
/-- The pairs of parts of a partition `P` which are not `ε`-uniform in a graph `G`. Note that we
dismiss the diagonal. We do not care whether `s` is `ε`-uniform with itself. -/
noncomputable def nonUniforms (ε : 𝕜) : Finset (Finset α × Finset α) :=
P.parts.offDiag.filterₓ fun uv => ¬G.IsUniform ε uv.1 uv.2
#align finpartition.non_uniforms Finpartition.nonUniforms
+/- warning: finpartition.mk_mem_non_uniforms_iff -> Finpartition.mk_mem_nonUniforms_iff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α} (P : Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A) (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] (u : Finset.{u1} α) (v : Finset.{u1} α) (ε : 𝕜), Iff (Membership.Mem.{u1, u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α)) (Finset.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α))) (Finset.hasMem.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α))) (Prod.mk.{u1, u1} (Finset.{u1} α) (Finset.{u1} α) u v) (Finpartition.nonUniforms.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε)) (And (Membership.Mem.{u1, u1} (Finset.{u1} α) (Finset.{u1} (Finset.{u1} α)) (Finset.hasMem.{u1} (Finset.{u1} α)) u (Finpartition.parts.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A P)) (And (Membership.Mem.{u1, u1} (Finset.{u1} α) (Finset.{u1} (Finset.{u1} α)) (Finset.hasMem.{u1} (Finset.{u1} α)) v (Finpartition.parts.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A P)) (And (Ne.{succ u1} (Finset.{u1} α) u v) (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_3 a b) ε u v)))))
+but is expected to have type
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] [_inst_2 : DecidableEq.{succ u2} α] {A : Finset.{u2} α} (P : Finpartition.{u2} (Finset.{u2} α) (Finset.instLatticeFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u2} α) A) (G : SimpleGraph.{u2} α) [_inst_3 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] (u : Finset.{u2} α) (v : Finset.{u2} α) (ε : 𝕜), Iff (Membership.mem.{u2, u2} (Prod.{u2, u2} (Finset.{u2} α) (Finset.{u2} α)) (Finset.{u2} (Prod.{u2, u2} (Finset.{u2} α) (Finset.{u2} α))) (Finset.instMembershipFinset.{u2} (Prod.{u2, u2} (Finset.{u2} α) (Finset.{u2} α))) (Prod.mk.{u2, u2} (Finset.{u2} α) (Finset.{u2} α) u v) (Finpartition.nonUniforms.{u2, u1} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε)) (And (Membership.mem.{u2, u2} (Finset.{u2} α) (Finset.{u2} (Finset.{u2} α)) (Finset.instMembershipFinset.{u2} (Finset.{u2} α)) u (Finpartition.parts.{u2} (Finset.{u2} α) (Finset.instLatticeFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u2} α) A P)) (And (Membership.mem.{u2, u2} (Finset.{u2} α) (Finset.{u2} (Finset.{u2} α)) (Finset.instMembershipFinset.{u2} (Finset.{u2} α)) v (Finpartition.parts.{u2} (Finset.{u2} α) (Finset.instLatticeFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u2} α) A P)) (And (Ne.{succ u2} (Finset.{u2} α) u v) (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_3 a b) ε u v)))))
+Case conversion may be inaccurate. Consider using '#align finpartition.mk_mem_non_uniforms_iff Finpartition.mk_mem_nonUniforms_iffₓ'. -/
theorem mk_mem_nonUniforms_iff (u v : Finset α) (ε : 𝕜) :
(u, v) ∈ P.nonUniforms G ε ↔ u ∈ P.parts ∧ v ∈ P.parts ∧ u ≠ v ∧ ¬G.IsUniform ε u v := by
rw [non_uniforms, mem_filter, mem_off_diag, and_assoc', and_assoc']
#align finpartition.mk_mem_non_uniforms_iff Finpartition.mk_mem_nonUniforms_iff
+/- warning: finpartition.non_uniforms_mono -> Finpartition.nonUniforms_mono is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α} (P : Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A) (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {ε' : 𝕜}, (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) ε ε') -> (HasSubset.Subset.{u1} (Finset.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α))) (Finset.hasSubset.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α))) (Finpartition.nonUniforms.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε') (Finpartition.nonUniforms.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε))
+but is expected to have type
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α} (P : Finpartition.{u1} (Finset.{u1} α) (Finset.instLatticeFinset.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} α) A) (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {ε' : 𝕜}, (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (StrictOrderedRing.toPartialOrder.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1)))))) ε ε') -> (HasSubset.Subset.{u1} (Finset.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α))) (Finset.instHasSubsetFinset.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α))) (Finpartition.nonUniforms.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε') (Finpartition.nonUniforms.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε))
+Case conversion may be inaccurate. Consider using '#align finpartition.non_uniforms_mono Finpartition.nonUniforms_monoₓ'. -/
theorem nonUniforms_mono {ε ε' : 𝕜} (h : ε ≤ ε') : P.nonUniforms G ε' ⊆ P.nonUniforms G ε :=
monotone_filter_right _ fun uv => mt <| SimpleGraph.IsUniform.mono h
#align finpartition.non_uniforms_mono Finpartition.nonUniforms_mono
+/- warning: finpartition.non_uniforms_bot -> Finpartition.nonUniforms_bot is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α} (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toLT.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))))) ε) -> (Eq.{succ u1} (Finset.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α))) (Finpartition.nonUniforms.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A (Bot.bot.{u1} (Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A) (Finpartition.hasBot.{u1} α (fun (a : α) (b : α) => _inst_2 a b) A)) G (fun (a : α) (b : α) => _inst_3 a b) ε) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α))) (Finset.hasEmptyc.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α)))))
+but is expected to have type
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α} (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toLT.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (StrictOrderedRing.toPartialOrder.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1)))))) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (LinearOrderedSemifield.toSemifield.{u2} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u2} 𝕜 _inst_1))))))) ε) -> (Eq.{succ u1} (Finset.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α))) (Finpartition.nonUniforms.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A (Bot.bot.{u1} (Finpartition.{u1} (Finset.{u1} α) (Finset.instLatticeFinset.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} α) A) (Finpartition.instBotFinpartitionFinsetInstLatticeFinsetInstOrderBotFinsetToLEToPreorderPartialOrder.{u1} α (fun (a : α) (b : α) => _inst_2 a b) A)) G (fun (a : α) (b : α) => _inst_3 a b) ε) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α))) (Finset.instEmptyCollectionFinset.{u1} (Prod.{u1, u1} (Finset.{u1} α) (Finset.{u1} α)))))
+Case conversion may be inaccurate. Consider using '#align finpartition.non_uniforms_bot Finpartition.nonUniforms_botₓ'. -/
theorem nonUniforms_bot (hε : 0 < ε) : (⊥ : Finpartition A).nonUniforms G ε = ∅ :=
by
rw [eq_empty_iff_forall_not_mem]
@@ -246,12 +362,24 @@ theorem nonUniforms_bot (hε : 0 < ε) : (⊥ : Finpartition A).nonUniforms G ε
exact G.is_uniform_singleton hε
#align finpartition.non_uniforms_bot Finpartition.nonUniforms_bot
+/- warning: finpartition.is_uniform -> Finpartition.IsUniform is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α}, (Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A) -> (forall (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)], 𝕜 -> Prop)
+but is expected to have type
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α}, (Finpartition.{u1} (Finset.{u1} α) (Finset.instLatticeFinset.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} α) A) -> (forall (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)], 𝕜 -> Prop)
+Case conversion may be inaccurate. Consider using '#align finpartition.is_uniform Finpartition.IsUniformₓ'. -/
/-- A finpartition of a graph's vertex set is `ε`-uniform (aka `ε`-regular) iff the proportion of
its pairs of parts that are not `ε`-uniform is at most `ε`. -/
def IsUniform (ε : 𝕜) : Prop :=
((P.nonUniforms G ε).card : 𝕜) ≤ (P.parts.card * (P.parts.card - 1) : ℕ) * ε
#align finpartition.is_uniform Finpartition.IsUniform
+/- warning: finpartition.bot_is_uniform -> Finpartition.botIsUniform is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α} (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toLT.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))))) ε) -> (Finpartition.IsUniform.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A (Bot.bot.{u1} (Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A) (Finpartition.hasBot.{u1} α (fun (a : α) (b : α) => _inst_2 a b) A)) G (fun (a : α) (b : α) => _inst_3 a b) ε)
+but is expected to have type
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α} (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜}, (LT.lt.{u2} 𝕜 (Preorder.toLT.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (StrictOrderedRing.toPartialOrder.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1)))))) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (LinearOrderedSemifield.toSemifield.{u2} 𝕜 (LinearOrderedField.toLinearOrderedSemifield.{u2} 𝕜 _inst_1))))))) ε) -> (Finpartition.IsUniform.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A (Bot.bot.{u1} (Finpartition.{u1} (Finset.{u1} α) (Finset.instLatticeFinset.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} α) A) (Finpartition.instBotFinpartitionFinsetInstLatticeFinsetInstOrderBotFinsetToLEToPreorderPartialOrder.{u1} α (fun (a : α) (b : α) => _inst_2 a b) A)) G (fun (a : α) (b : α) => _inst_3 a b) ε)
+Case conversion may be inaccurate. Consider using '#align finpartition.bot_is_uniform Finpartition.botIsUniformₓ'. -/
theorem botIsUniform (hε : 0 < ε) : (⊥ : Finpartition A).IsUniform G ε :=
by
rw [Finpartition.IsUniform, Finpartition.card_bot, non_uniforms_bot _ hε, Finset.card_empty,
@@ -259,6 +387,12 @@ theorem botIsUniform (hε : 0 < ε) : (⊥ : Finpartition A).IsUniform G ε :=
exact mul_nonneg (Nat.cast_nonneg _) hε.le
#align finpartition.bot_is_uniform Finpartition.botIsUniform
+/- warning: finpartition.is_uniform_one -> Finpartition.isUniformOne is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α} (P : Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A) (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)], Finpartition.IsUniform.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) (OfNat.ofNat.{u2} 𝕜 1 (OfNat.mk.{u2} 𝕜 1 (One.one.{u2} 𝕜 (AddMonoidWithOne.toOne.{u2} 𝕜 (AddGroupWithOne.toAddMonoidWithOne.{u2} 𝕜 (NonAssocRing.toAddGroupWithOne.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (DivisionRing.toRing.{u2} 𝕜 (Field.toDivisionRing.{u2} 𝕜 (LinearOrderedField.toField.{u2} 𝕜 _inst_1))))))))))
+but is expected to have type
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] [_inst_2 : DecidableEq.{succ u2} α] {A : Finset.{u2} α} (P : Finpartition.{u2} (Finset.{u2} α) (Finset.instLatticeFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u2} α) A) (G : SimpleGraph.{u2} α) [_inst_3 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)], Finpartition.IsUniform.{u2, u1} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) (OfNat.ofNat.{u1} 𝕜 1 (One.toOfNat1.{u1} 𝕜 (NonAssocRing.toOne.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (DivisionRing.toRing.{u1} 𝕜 (Field.toDivisionRing.{u1} 𝕜 (LinearOrderedField.toField.{u1} 𝕜 _inst_1)))))))
+Case conversion may be inaccurate. Consider using '#align finpartition.is_uniform_one Finpartition.isUniformOneₓ'. -/
theorem isUniformOne : P.IsUniform G (1 : 𝕜) :=
by
rw [is_uniform, mul_one, Nat.cast_le]
@@ -268,21 +402,45 @@ theorem isUniformOne : P.IsUniform G (1 : 𝕜) :=
variable {P G}
+/- warning: finpartition.is_uniform.mono -> Finpartition.IsUniform.mono is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α} {P : Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A} {G : SimpleGraph.{u1} α} [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {ε' : 𝕜}, (Finpartition.IsUniform.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε) -> (LE.le.{u2} 𝕜 (Preorder.toLE.{u2} 𝕜 (PartialOrder.toPreorder.{u2} 𝕜 (OrderedAddCommGroup.toPartialOrder.{u2} 𝕜 (StrictOrderedRing.toOrderedAddCommGroup.{u2} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u2} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u2} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u2} 𝕜 _inst_1))))))) ε ε') -> (Finpartition.IsUniform.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε')
+but is expected to have type
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] [_inst_2 : DecidableEq.{succ u2} α] {A : Finset.{u2} α} {P : Finpartition.{u2} (Finset.{u2} α) (Finset.instLatticeFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u2} α) A} {G : SimpleGraph.{u2} α} [_inst_3 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {ε' : 𝕜}, (Finpartition.IsUniform.{u2, u1} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε) -> (LE.le.{u1} 𝕜 (Preorder.toLE.{u1} 𝕜 (PartialOrder.toPreorder.{u1} 𝕜 (StrictOrderedRing.toPartialOrder.{u1} 𝕜 (LinearOrderedRing.toStrictOrderedRing.{u1} 𝕜 (LinearOrderedCommRing.toLinearOrderedRing.{u1} 𝕜 (LinearOrderedField.toLinearOrderedCommRing.{u1} 𝕜 _inst_1)))))) ε ε') -> (Finpartition.IsUniform.{u2, u1} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε')
+Case conversion may be inaccurate. Consider using '#align finpartition.is_uniform.mono Finpartition.IsUniform.monoₓ'. -/
theorem IsUniform.mono {ε ε' : 𝕜} (hP : P.IsUniform G ε) (h : ε ≤ ε') : P.IsUniform G ε' :=
((Nat.cast_le.2 <| card_le_of_subset <| P.nonUniforms_mono G h).trans hP).trans <|
mul_le_mul_of_nonneg_left h <| Nat.cast_nonneg _
#align finpartition.is_uniform.mono Finpartition.IsUniform.mono
+/- warning: finpartition.is_uniform_of_empty -> Finpartition.isUniformOfEmpty is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α} {P : Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A} {G : SimpleGraph.{u1} α} [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜}, (Eq.{succ u1} (Finset.{u1} (Finset.{u1} α)) (Finpartition.parts.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A P) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} (Finset.{u1} α)) (Finset.hasEmptyc.{u1} (Finset.{u1} α)))) -> (Finpartition.IsUniform.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε)
+but is expected to have type
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] [_inst_2 : DecidableEq.{succ u2} α] {A : Finset.{u2} α} {P : Finpartition.{u2} (Finset.{u2} α) (Finset.instLatticeFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u2} α) A} {G : SimpleGraph.{u2} α} [_inst_3 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜}, (Eq.{succ u2} (Finset.{u2} (Finset.{u2} α)) (Finpartition.parts.{u2} (Finset.{u2} α) (Finset.instLatticeFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u2} α) A P) (EmptyCollection.emptyCollection.{u2} (Finset.{u2} (Finset.{u2} α)) (Finset.instEmptyCollectionFinset.{u2} (Finset.{u2} α)))) -> (Finpartition.IsUniform.{u2, u1} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε)
+Case conversion may be inaccurate. Consider using '#align finpartition.is_uniform_of_empty Finpartition.isUniformOfEmptyₓ'. -/
theorem isUniformOfEmpty (hP : P.parts = ∅) : P.IsUniform G ε := by
simp [is_uniform, hP, non_uniforms]
#align finpartition.is_uniform_of_empty Finpartition.isUniformOfEmpty
+/- warning: finpartition.nonempty_of_not_uniform -> Finpartition.nonempty_of_not_uniform is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α} {P : Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A} {G : SimpleGraph.{u1} α} [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜}, (Not (Finpartition.IsUniform.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε)) -> (Finset.Nonempty.{u1} (Finset.{u1} α) (Finpartition.parts.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A P))
+but is expected to have type
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] [_inst_2 : DecidableEq.{succ u2} α] {A : Finset.{u2} α} {P : Finpartition.{u2} (Finset.{u2} α) (Finset.instLatticeFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u2} α) A} {G : SimpleGraph.{u2} α} [_inst_3 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜}, (Not (Finpartition.IsUniform.{u2, u1} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε)) -> (Finset.Nonempty.{u2} (Finset.{u2} α) (Finpartition.parts.{u2} (Finset.{u2} α) (Finset.instLatticeFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u2} α) A P))
+Case conversion may be inaccurate. Consider using '#align finpartition.nonempty_of_not_uniform Finpartition.nonempty_of_not_uniformₓ'. -/
theorem nonempty_of_not_uniform (h : ¬P.IsUniform G ε) : P.parts.Nonempty :=
nonempty_of_ne_empty fun h₁ => h <| isUniformOfEmpty h₁
#align finpartition.nonempty_of_not_uniform Finpartition.nonempty_of_not_uniform
variable (P G ε) (s : Finset α)
+/- warning: finpartition.nonuniform_witnesses -> Finpartition.nonuniformWitnesses is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α}, (Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A) -> (forall (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)], 𝕜 -> (Finset.{u1} α) -> (Finset.{u1} (Finset.{u1} α)))
+but is expected to have type
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α}, (Finpartition.{u1} (Finset.{u1} α) (Finset.instLatticeFinset.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} α) A) -> (forall (G : SimpleGraph.{u1} α) [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)], 𝕜 -> (Finset.{u1} α) -> (Finset.{u1} (Finset.{u1} α)))
+Case conversion may be inaccurate. Consider using '#align finpartition.nonuniform_witnesses Finpartition.nonuniformWitnessesₓ'. -/
/-- A choice of witnesses of non-uniformity among the parts of a finpartition. -/
noncomputable def nonuniformWitnesses : Finset (Finset α) :=
(P.parts.filterₓ fun t => s ≠ t ∧ ¬G.IsUniform ε s t).image (G.nonuniformWitness ε s)
@@ -290,6 +448,12 @@ noncomputable def nonuniformWitnesses : Finset (Finset α) :=
variable {P G ε s} {t : Finset α}
+/- warning: finpartition.nonuniform_witness_mem_nonuniform_witnesses -> Finpartition.nonuniformWitness_mem_nonuniformWitnesses is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_1 : LinearOrderedField.{u2} 𝕜] [_inst_2 : DecidableEq.{succ u1} α] {A : Finset.{u1} α} {P : Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A} {G : SimpleGraph.{u1} α} [_inst_3 : DecidableRel.{succ u1} α (SimpleGraph.Adj.{u1} α G)] {ε : 𝕜} {s : Finset.{u1} α} {t : Finset.{u1} α}, (Not (SimpleGraph.IsUniform.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_3 a b) ε s t)) -> (Membership.Mem.{u1, u1} (Finset.{u1} α) (Finset.{u1} (Finset.{u1} α)) (Finset.hasMem.{u1} (Finset.{u1} α)) t (Finpartition.parts.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.orderBot.{u1} α) A P)) -> (Ne.{succ u1} (Finset.{u1} α) s t) -> (Membership.Mem.{u1, u1} (Finset.{u1} α) (Finset.{u1} (Finset.{u1} α)) (Finset.hasMem.{u1} (Finset.{u1} α)) (SimpleGraph.nonuniformWitness.{u1, u2} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_3 a b) ε s t) (Finpartition.nonuniformWitnesses.{u1, u2} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε s))
+but is expected to have type
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_1 : LinearOrderedField.{u1} 𝕜] [_inst_2 : DecidableEq.{succ u2} α] {A : Finset.{u2} α} {P : Finpartition.{u2} (Finset.{u2} α) (Finset.instLatticeFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u2} α) A} {G : SimpleGraph.{u2} α} [_inst_3 : DecidableRel.{succ u2} α (SimpleGraph.Adj.{u2} α G)] {ε : 𝕜} {s : Finset.{u2} α} {t : Finset.{u2} α}, (Not (SimpleGraph.IsUniform.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_3 a b) ε s t)) -> (Membership.mem.{u2, u2} (Finset.{u2} α) (Finset.{u2} (Finset.{u2} α)) (Finset.instMembershipFinset.{u2} (Finset.{u2} α)) t (Finpartition.parts.{u2} (Finset.{u2} α) (Finset.instLatticeFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u2} α) A P)) -> (Ne.{succ u2} (Finset.{u2} α) s t) -> (Membership.mem.{u2, u2} (Finset.{u2} α) (Finset.{u2} (Finset.{u2} α)) (Finset.instMembershipFinset.{u2} (Finset.{u2} α)) (SimpleGraph.nonuniformWitness.{u2, u1} α 𝕜 _inst_1 G (fun (a : α) (b : α) => _inst_3 a b) ε s t) (Finpartition.nonuniformWitnesses.{u2, u1} α 𝕜 _inst_1 (fun (a : α) (b : α) => _inst_2 a b) A P G (fun (a : α) (b : α) => _inst_3 a b) ε s))
+Case conversion may be inaccurate. Consider using '#align finpartition.nonuniform_witness_mem_nonuniform_witnesses Finpartition.nonuniformWitness_mem_nonuniformWitnessesₓ'. -/
theorem nonuniformWitness_mem_nonuniformWitnesses (h : ¬G.IsUniform ε s t) (ht : t ∈ P.parts)
(hst : s ≠ t) : G.nonuniformWitness ε s t ∈ P.nonuniformWitnesses G ε s :=
mem_image_of_mem _ <| mem_filter.2 ⟨ht, hst, h⟩
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
Prove the triangle counting lemma. Definitions that are internal to the proof are made private.
@@ -3,7 +3,10 @@ Copyright (c) 2022 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
-/
+import Mathlib.Algebra.BigOperators.Ring
import Mathlib.Combinatorics.SimpleGraph.Density
+import Mathlib.Data.Nat.Cast.Field
+import Mathlib.Order.Partition.Equipartition
import Mathlib.SetTheory.Ordinal.Basic
#align_import combinatorics.simple_graph.regularity.uniform from "leanprover-community/mathlib"@"bf7ef0e83e5b7e6c1169e97f055e58a2e4e9d52d"
@@ -40,10 +43,11 @@ is less than `ε`.
open Finset
+open scoped BigOperators
variable {α 𝕜 : Type*} [LinearOrderedField 𝕜]
-/-! ### Graph uniformity -/
+/-! ### Graph uniformity -/
namespace SimpleGraph
@@ -60,6 +64,9 @@ def IsUniform (s t : Finset α) : Prop :=
variable {G ε}
+instance IsUniform.instDecidableRel : DecidableRel (G.IsUniform ε) := by
+ unfold IsUniform; infer_instance
+
theorem IsUniform.mono {ε' : 𝕜} (h : ε ≤ ε') (hε : IsUniform G ε s t) : IsUniform G ε' s t :=
fun s' hs' t' ht' hs ht => by
refine' (hε hs' ht' (le_trans _ hs) (le_trans _ ht)).trans_le h <;> gcongr
@@ -76,8 +83,23 @@ theorem isUniform_comm : IsUniform G ε s t ↔ IsUniform G ε t s :=
⟨fun h => h.symm, fun h => h.symm⟩
#align simple_graph.is_uniform_comm SimpleGraph.isUniform_comm
-theorem isUniform_singleton (hε : 0 < ε) : G.IsUniform ε {a} {b} := by
+lemma isUniform_one : G.IsUniform (1 : 𝕜) s t := by
intro s' hs' t' ht' hs ht
+ rw [mul_one] at hs ht
+ rw [eq_of_subset_of_card_le hs' (Nat.cast_le.1 hs),
+ eq_of_subset_of_card_le ht' (Nat.cast_le.1 ht), sub_self, abs_zero]
+ exact zero_lt_one
+#align simple_graph.is_uniform_one SimpleGraph.isUniform_one
+
+variable {G}
+
+lemma IsUniform.pos (hG : G.IsUniform ε s t) : 0 < ε :=
+ not_le.1 fun hε ↦ (hε.trans $ abs_nonneg _).not_lt $ hG (empty_subset _) (empty_subset _)
+ (by simpa using mul_nonpos_of_nonneg_of_nonpos (Nat.cast_nonneg _) hε)
+ (by simpa using mul_nonpos_of_nonneg_of_nonpos (Nat.cast_nonneg _) hε)
+
+@[simp] lemma isUniform_singleton : G.IsUniform ε {a} {b} ↔ 0 < ε := by
+ refine ⟨IsUniform.pos, fun hε s' hs' t' ht' hs ht ↦ ?_⟩
rw [card_singleton, Nat.cast_one, one_mul] at hs ht
obtain rfl | rfl := Finset.subset_singleton_iff.1 hs'
· replace hs : ε ≤ 0 := by simpa using hs
@@ -92,16 +114,6 @@ theorem not_isUniform_zero : ¬G.IsUniform (0 : 𝕜) s t := fun h =>
(abs_nonneg _).not_lt <| h (empty_subset _) (empty_subset _) (by simp) (by simp)
#align simple_graph.not_is_uniform_zero SimpleGraph.not_isUniform_zero
-theorem isUniform_one : G.IsUniform (1 : 𝕜) s t := by
- intro s' hs' t' ht' hs ht
- rw [mul_one] at hs ht
- rw [eq_of_subset_of_card_le hs' (Nat.cast_le.1 hs),
- eq_of_subset_of_card_le ht' (Nat.cast_le.1 ht), sub_self, abs_zero]
- exact zero_lt_one
-#align simple_graph.is_uniform_one SimpleGraph.isUniform_one
-
-variable {G}
-
theorem not_isUniform_iff :
¬G.IsUniform ε s t ↔ ∃ s', s' ⊆ s ∧ ∃ t', t' ⊆ t ∧ ↑s.card * ε ≤ s'.card ∧
↑t.card * ε ≤ t'.card ∧ ε ≤ |G.edgeDensity s' t' - G.edgeDensity s t| := by
@@ -193,22 +205,35 @@ end SimpleGraph
variable [DecidableEq α] {A : Finset α} (P : Finpartition A) (G : SimpleGraph α)
- [DecidableRel G.Adj] {ε : 𝕜}
+ [DecidableRel G.Adj] {ε δ : 𝕜} {u v : Finset α}
namespace Finpartition
-open scoped Classical
+/-- The pairs of parts of a partition `P` which are not `ε`-dense in a graph `G`. Note that we
+dismiss the diagonal. We do not care whether `s` is `ε`-dense with itself. -/
+@[pp_dot]
+def sparsePairs (ε : 𝕜) : Finset (Finset α × Finset α) :=
+ P.parts.offDiag.filter fun (u, v) ↦ G.edgeDensity u v < ε
+
+@[simp]
+lemma mk_mem_sparsePairs (u v : Finset α) (ε : 𝕜) :
+ (u, v) ∈ P.sparsePairs G ε ↔ u ∈ P.parts ∧ v ∈ P.parts ∧ u ≠ v ∧ G.edgeDensity u v < ε := by
+ rw [sparsePairs, mem_filter, mem_offDiag, and_assoc, and_assoc]
+
+lemma sparsePairs_mono {ε ε' : 𝕜} (h : ε ≤ ε') : P.sparsePairs G ε ⊆ P.sparsePairs G ε' :=
+ monotone_filter_right _ fun _ ↦ h.trans_lt'
/-- The pairs of parts of a partition `P` which are not `ε`-uniform in a graph `G`. Note that we
dismiss the diagonal. We do not care whether `s` is `ε`-uniform with itself. -/
-noncomputable def nonUniforms (ε : 𝕜) : Finset (Finset α × Finset α) :=
- P.parts.offDiag.filter fun uv => ¬G.IsUniform ε uv.1 uv.2
+@[pp_dot]
+def nonUniforms (ε : 𝕜) : Finset (Finset α × Finset α) :=
+ P.parts.offDiag.filter fun (u, v) ↦ ¬G.IsUniform ε u v
#align finpartition.non_uniforms Finpartition.nonUniforms
-theorem mk_mem_nonUniforms_iff (u v : Finset α) (ε : 𝕜) :
+@[simp] lemma mk_mem_nonUniforms :
(u, v) ∈ P.nonUniforms G ε ↔ u ∈ P.parts ∧ v ∈ P.parts ∧ u ≠ v ∧ ¬G.IsUniform ε u v := by
rw [nonUniforms, mem_filter, mem_offDiag, and_assoc, and_assoc]
-#align finpartition.mk_mem_non_uniforms_iff Finpartition.mk_mem_nonUniforms_iff
+#align finpartition.mk_mem_non_uniforms_iff Finpartition.mk_mem_nonUniforms
theorem nonUniforms_mono {ε ε' : 𝕜} (h : ε ≤ ε') : P.nonUniforms G ε' ⊆ P.nonUniforms G ε :=
monotone_filter_right _ fun _ => mt <| SimpleGraph.IsUniform.mono h
@@ -217,11 +242,10 @@ theorem nonUniforms_mono {ε ε' : 𝕜} (h : ε ≤ ε') : P.nonUniforms G ε'
theorem nonUniforms_bot (hε : 0 < ε) : (⊥ : Finpartition A).nonUniforms G ε = ∅ := by
rw [eq_empty_iff_forall_not_mem]
rintro ⟨u, v⟩
- simp only [Finpartition.mk_mem_nonUniforms_iff, Finpartition.parts_bot, mem_map, not_and,
+ simp only [mk_mem_nonUniforms, parts_bot, mem_map, not_and,
Classical.not_not, exists_imp]; dsimp
- rintro x ⟨_,xu⟩ y ⟨_,yv⟩ _
- rw [← xu, ← yv]
- exact G.isUniform_singleton hε
+ rintro x ⟨_, rfl⟩ y ⟨_,rfl⟩ _
+ rwa [SimpleGraph.isUniform_singleton]
#align finpartition.non_uniforms_bot Finpartition.nonUniforms_bot
/-- A finpartition of a graph's vertex set is `ε`-uniform (aka `ε`-regular) iff the proportion of
@@ -230,18 +254,18 @@ def IsUniform (ε : 𝕜) : Prop :=
((P.nonUniforms G ε).card : 𝕜) ≤ (P.parts.card * (P.parts.card - 1) : ℕ) * ε
#align finpartition.is_uniform Finpartition.IsUniform
-theorem botIsUniform (hε : 0 < ε) : (⊥ : Finpartition A).IsUniform G ε := by
+lemma bot_isUniform (hε : 0 < ε) : (⊥ : Finpartition A).IsUniform G ε := by
rw [Finpartition.IsUniform, Finpartition.card_bot, nonUniforms_bot _ hε, Finset.card_empty,
Nat.cast_zero]
exact mul_nonneg (Nat.cast_nonneg _) hε.le
-#align finpartition.bot_is_uniform Finpartition.botIsUniform
+#align finpartition.bot_is_uniform Finpartition.bot_isUniform
-theorem isUniformOne : P.IsUniform G (1 : 𝕜) := by
+lemma isUniform_one : P.IsUniform G (1 : 𝕜) := by
rw [IsUniform, mul_one, Nat.cast_le]
refine' (card_filter_le _
(fun uv => ¬SimpleGraph.IsUniform G 1 (Prod.fst uv) (Prod.snd uv))).trans _
rw [offDiag_card, Nat.mul_sub_left_distrib, mul_one]
-#align finpartition.is_uniform_one Finpartition.isUniformOne
+#align finpartition.is_uniform_one Finpartition.isUniform_one
variable {P G}
@@ -271,4 +295,165 @@ theorem nonuniformWitness_mem_nonuniformWitnesses (h : ¬G.IsUniform ε s t) (ht
mem_image_of_mem _ <| mem_filter.2 ⟨ht, hst, h⟩
#align finpartition.nonuniform_witness_mem_nonuniform_witnesses Finpartition.nonuniformWitness_mem_nonuniformWitnesses
+/-! ### Equipartitions -/
+
+open SimpleGraph in
+lemma IsEquipartition.card_interedges_sparsePairs_le' (hP : P.IsEquipartition)
+ (hε : 0 ≤ ε) :
+ ((P.sparsePairs G ε).biUnion fun (U, V) ↦ G.interedges U V).card ≤
+ ε * (A.card + P.parts.card) ^ 2 := by
+ calc
+ _ ≤ ∑ UV in P.sparsePairs G ε, ((G.interedges UV.1 UV.2).card : 𝕜) := mod_cast card_biUnion_le
+ _ ≤ ∑ UV in P.sparsePairs G ε, ε * (UV.1.card * UV.2.card) := ?_
+ _ ≤ _ := sum_le_sum_of_subset_of_nonneg (filter_subset _ _) fun i _ _ ↦ by positivity
+ _ = _ := (mul_sum _ _ _).symm
+ _ ≤ _ := mul_le_mul_of_nonneg_left ?_ hε
+ · gcongr with UV hUV
+ obtain ⟨U, V⟩ := UV
+ simp [mk_mem_sparsePairs, ← card_interedges_div_card] at hUV
+ refine ((div_lt_iff ?_).1 hUV.2.2.2).le
+ exact mul_pos (Nat.cast_pos.2 (P.nonempty_of_mem_parts hUV.1).card_pos)
+ (Nat.cast_pos.2 (P.nonempty_of_mem_parts hUV.2.1).card_pos)
+ norm_cast
+ calc
+ (_ : ℕ) ≤ _ := sum_le_card_nsmul P.parts.offDiag (fun i ↦ i.1.card * i.2.card)
+ ((A.card / P.parts.card + 1)^2 : ℕ) ?_
+ _ ≤ (P.parts.card * (A.card / P.parts.card) + P.parts.card) ^ 2 := ?_
+ _ ≤ _ := Nat.pow_le_pow_of_le_left (add_le_add_right (Nat.mul_div_le _ _) _) _
+ · simp only [Prod.forall, Finpartition.mk_mem_nonUniforms, and_imp, mem_offDiag, sq]
+ rintro U V hU hV -
+ exact_mod_cast Nat.mul_le_mul (hP.card_part_le_average_add_one hU)
+ (hP.card_part_le_average_add_one hV)
+ · rw [smul_eq_mul, offDiag_card, Nat.mul_sub_right_distrib, ← sq, ← mul_pow, mul_add_one (α := ℕ)]
+ exact Nat.sub_le _ _
+
+lemma IsEquipartition.card_interedges_sparsePairs_le (hP : P.IsEquipartition) (hε : 0 ≤ ε) :
+ ((P.sparsePairs G ε).biUnion fun (U, V) ↦ G.interedges U V).card ≤ 4 * ε * A.card ^ 2 := by
+ calc
+ _ ≤ _ := hP.card_interedges_sparsePairs_le' hε
+ _ ≤ ε * (A.card + A.card)^2 := by gcongr; exact P.card_parts_le_card
+ _ = _ := by ring
+
+private lemma aux {i j : ℕ} (hj : 0 < j) : j * (j - 1) * (i / j + 1) ^ 2 < (i + j) ^ 2 := by
+ have : j * (j - 1) < j ^ 2 := by
+ rw [sq]; exact Nat.mul_lt_mul_of_pos_left (Nat.sub_lt hj zero_lt_one) hj
+ apply (Nat.mul_lt_mul_of_pos_right this $ pow_pos Nat.succ_pos' _).trans_le
+ rw [← mul_pow]
+ exact Nat.pow_le_pow_of_le_left (add_le_add_right (Nat.mul_div_le i j) _) _
+
+lemma IsEquipartition.card_biUnion_offDiag_le' (hP : P.IsEquipartition) :
+ ((P.parts.biUnion offDiag).card : 𝕜) ≤ A.card * (A.card + P.parts.card) / P.parts.card := by
+ obtain h | h := P.parts.eq_empty_or_nonempty
+ · simp [h]
+ calc
+ _ ≤ (P.parts.card : 𝕜) * (↑(A.card / P.parts.card) * ↑(A.card / P.parts.card + 1)) :=
+ mod_cast card_biUnion_le_card_mul _ _ _ fun U hU ↦ ?_
+ _ = P.parts.card * ↑(A.card / P.parts.card) * ↑(A.card / P.parts.card + 1) := by rw [mul_assoc]
+ _ ≤ A.card * (A.card / P.parts.card + 1) :=
+ mul_le_mul (mod_cast Nat.mul_div_le _ _) ?_ (by positivity) (by positivity)
+ _ = _ := by rw [← div_add_same (mod_cast h.card_pos.ne'), mul_div_assoc]
+ · simpa using Nat.cast_div_le
+ suffices (U.card - 1) * U.card ≤ A.card / P.parts.card * (A.card / P.parts.card + 1) by
+ rwa [Nat.mul_sub_right_distrib, one_mul, ← offDiag_card] at this
+ have := hP.card_part_le_average_add_one hU
+ refine Nat.mul_le_mul ((Nat.sub_le_sub_right this 1).trans ?_) this
+ simp only [Nat.add_succ_sub_one, add_zero, card_univ, le_rfl]
+
+lemma IsEquipartition.card_biUnion_offDiag_le (hε : 0 < ε) (hP : P.IsEquipartition)
+ (hP' : 4 / ε ≤ P.parts.card) : (P.parts.biUnion offDiag).card ≤ ε / 2 * A.card ^ 2 := by
+ obtain rfl | hA : A = ⊥ ∨ _ := A.eq_empty_or_nonempty
+ · simp [Subsingleton.elim P ⊥]
+ apply hP.card_biUnion_offDiag_le'.trans
+ rw [div_le_iff (Nat.cast_pos.2 (P.parts_nonempty hA.ne_empty).card_pos)]
+ have : (A.card : 𝕜) + P.parts.card ≤ 2 * A.card := by
+ rw [two_mul]; exact add_le_add_left (Nat.cast_le.2 P.card_parts_le_card) _
+ refine (mul_le_mul_of_nonneg_left this $ by positivity).trans ?_
+ suffices 1 ≤ ε/4 * P.parts.card by
+ rw [mul_left_comm, ← sq]
+ convert mul_le_mul_of_nonneg_left this (mul_nonneg zero_le_two $ sq_nonneg (A.card : 𝕜))
+ using 1 <;> ring
+ rwa [← div_le_iff', one_div_div]
+ positivity
+
+lemma IsEquipartition.sum_nonUniforms_lt' (hA : A.Nonempty) (hε : 0 < ε) (hP : P.IsEquipartition)
+ (hG : P.IsUniform G ε) :
+ ∑ i in P.nonUniforms G ε, (i.1.card * i.2.card : 𝕜) < ε * (A.card + P.parts.card) ^ 2 := by
+ calc
+ _ ≤ (P.nonUniforms G ε).card • (↑(A.card / P.parts.card + 1) : 𝕜) ^ 2 :=
+ sum_le_card_nsmul _ _ _ ?_
+ _ = _ := nsmul_eq_mul _ _
+ _ ≤ _ := mul_le_mul_of_nonneg_right hG $ by positivity
+ _ < _ := ?_
+ · simp only [Prod.forall, Finpartition.mk_mem_nonUniforms, and_imp]
+ rintro U V hU hV - -
+ rw [sq, ← Nat.cast_mul, ← Nat.cast_mul, Nat.cast_le]
+ exact Nat.mul_le_mul (hP.card_part_le_average_add_one hU)
+ (hP.card_part_le_average_add_one hV)
+ · rw [mul_right_comm _ ε, mul_comm ε]
+ apply mul_lt_mul_of_pos_right _ hε
+ norm_cast
+ exact aux (P.parts_nonempty hA.ne_empty).card_pos
+
+lemma IsEquipartition.sum_nonUniforms_lt (hA : A.Nonempty) (hε : 0 < ε) (hP : P.IsEquipartition)
+ (hG : P.IsUniform G ε) :
+ ((P.nonUniforms G ε).biUnion fun (U, V) ↦ U ×ˢ V).card < 4 * ε * A.card ^ 2 := by
+ calc
+ _ ≤ ∑ i in P.nonUniforms G ε, (i.1.card * i.2.card : 𝕜) := by
+ norm_cast; simp_rw [← card_product]; exact card_biUnion_le
+ _ < _ := hP.sum_nonUniforms_lt' hA hε hG
+ _ ≤ ε * (A.card + A.card) ^ 2 := by gcongr; exact P.card_parts_le_card
+ _ = _ := by ring
+
end Finpartition
+
+/-! ### Reduced graph -/
+
+namespace SimpleGraph
+
+/-- The reduction of the graph `G` along partition `P` has edges between `ε`-uniform pairs of parts
+that have edge density at least `δ`. -/
+@[simps] def regularityReduced (ε δ : 𝕜) : SimpleGraph α where
+ Adj a b := G.Adj a b ∧
+ ∃ U ∈ P.parts, ∃ V ∈ P.parts, a ∈ U ∧ b ∈ V ∧ U ≠ V ∧ G.IsUniform ε U V ∧ δ ≤ G.edgeDensity U V
+ symm a b := by
+ rintro ⟨ab, U, UP, V, VP, xU, yV, UV, GUV, εUV⟩
+ refine ⟨G.symm ab, V, VP, U, UP, yV, xU, UV.symm, GUV.symm, ?_⟩
+ rwa [edgeDensity_comm]
+ loopless a h := G.loopless a h.1
+
+instance regularityReduced.instDecidableRel_adj : DecidableRel (G.regularityReduced P ε δ).Adj := by
+ unfold regularityReduced; infer_instance
+
+variable {G P}
+
+lemma regularityReduced_le : G.regularityReduced P ε δ ≤ G := fun _ _ ↦ And.left
+
+lemma regularityReduced_mono {ε₁ ε₂ : 𝕜} (hε : ε₁ ≤ ε₂) :
+ G.regularityReduced P ε₁ δ ≤ G.regularityReduced P ε₂ δ :=
+ fun _a _b ⟨hab, U, hU, V, hV, ha, hb, hUV, hGε, hGδ⟩ ↦
+ ⟨hab, U, hU, V, hV, ha, hb, hUV, hGε.mono hε, hGδ⟩
+
+lemma regularityReduced_anti {δ₁ δ₂ : 𝕜} (hδ : δ₁ ≤ δ₂) :
+ G.regularityReduced P ε δ₂ ≤ G.regularityReduced P ε δ₁ :=
+ fun _a _b ⟨hab, U, hU, V, hV, ha, hb, hUV, hUVε, hUVδ⟩ ↦
+ ⟨hab, U, hU, V, hV, ha, hb, hUV, hUVε, hδ.trans hUVδ⟩
+
+lemma unreduced_edges_subset :
+ (A ×ˢ A).filter (fun (x, y) ↦ G.Adj x y ∧ ¬ (G.regularityReduced P (ε/8) (ε/4)).Adj x y) ⊆
+ (P.nonUniforms G (ε/8)).biUnion (fun (U, V) ↦ U ×ˢ V) ∪ P.parts.biUnion offDiag ∪
+ (P.sparsePairs G (ε/4)).biUnion fun (U, V) ↦ G.interedges U V := by
+ rintro ⟨x, y⟩
+ simp only [mem_sdiff, mem_filter, mem_univ, true_and, regularityReduced_adj, not_and, not_exists,
+ not_le, mem_biUnion, mem_union, exists_prop, mem_product, Prod.exists, mem_offDiag, and_imp,
+ or_assoc, and_assoc, P.mk_mem_nonUniforms, Finpartition.mk_mem_sparsePairs, mem_interedges_iff]
+ intros hx hy h h'
+ replace h' := h' h
+ obtain ⟨U, hU, hx⟩ := P.exists_mem hx
+ obtain ⟨V, hV, hy⟩ := P.exists_mem hy
+ obtain rfl | hUV := eq_or_ne U V
+ { exact Or.inr (Or.inl ⟨U, hU, hx, hy, G.ne_of_adj h⟩) }
+ by_cases h₂ : G.IsUniform (ε/8) U V
+ · exact Or.inr $ Or.inr ⟨U, V, hU, hV, hUV, h' _ hU _ hV hx hy hUV h₂, hx, hy, h⟩
+ · exact Or.inl ⟨U, V, hU, hV, hUV, h₂, hx, hy⟩
+
+end SimpleGraph
open Classical
(#11199)
We remove all but one open Classical
s, instead preferring to use open scoped Classical
. The only real side-effect this led to is moving a couple declarations to use Exists.choose
instead of Classical.choose
.
The first few commits are explicitly labelled regex replaces for ease of review.
@@ -109,7 +109,7 @@ theorem not_isUniform_iff :
simp only [not_forall, not_lt, exists_prop, exists_and_left, Rat.cast_abs, Rat.cast_sub]
#align simple_graph.not_is_uniform_iff SimpleGraph.not_isUniform_iff
-open Classical
+open scoped Classical
variable (G)
@@ -197,7 +197,7 @@ variable [DecidableEq α] {A : Finset α} (P : Finpartition A) (G : SimpleGraph
namespace Finpartition
-open Classical
+open scoped Classical
/-- The pairs of parts of a partition `P` which are not `ε`-uniform in a graph `G`. Note that we
dismiss the diagonal. We do not care whether `s` is `ε`-uniform with itself. -/
Finset
lemma names (#8894)
Change a few lemma names that have historically bothered me.
Finset.card_le_of_subset
→ Finset.card_le_card
Multiset.card_le_of_le
→ Multiset.card_le_card
Multiset.card_lt_of_lt
→ Multiset.card_lt_card
Set.ncard_le_of_subset
→ Set.ncard_le_ncard
Finset.image_filter
→ Finset.filter_image
CompleteLattice.finset_sup_compact_of_compact
→ CompleteLattice.isCompactElement_finset_sup
@@ -246,7 +246,7 @@ theorem isUniformOne : P.IsUniform G (1 : 𝕜) := by
variable {P G}
theorem IsUniform.mono {ε ε' : 𝕜} (hP : P.IsUniform G ε) (h : ε ≤ ε') : P.IsUniform G ε' :=
- ((Nat.cast_le.2 <| card_le_of_subset <| P.nonUniforms_mono G h).trans hP).trans <| by gcongr
+ ((Nat.cast_le.2 <| card_le_card <| P.nonUniforms_mono G h).trans hP).trans <| by gcongr
#align finpartition.is_uniform.mono Finpartition.IsUniform.mono
theorem isUniformOfEmpty (hP : P.parts = ∅) : P.IsUniform G ε := by
@@ -220,7 +220,7 @@ theorem nonUniforms_bot (hε : 0 < ε) : (⊥ : Finpartition A).nonUniforms G ε
simp only [Finpartition.mk_mem_nonUniforms_iff, Finpartition.parts_bot, mem_map, not_and,
Classical.not_not, exists_imp]; dsimp
rintro x ⟨_,xu⟩ y ⟨_,yv⟩ _
- rw [←xu, ←yv]
+ rw [← xu, ← yv]
exact G.isUniform_singleton hε
#align finpartition.non_uniforms_bot Finpartition.nonUniforms_bot
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -41,7 +41,7 @@ is less than `ε`.
open Finset
-variable {α 𝕜 : Type _} [LinearOrderedField 𝕜]
+variable {α 𝕜 : Type*} [LinearOrderedField 𝕜]
/-! ### Graph uniformity -/
@@ -2,15 +2,12 @@
Copyright (c) 2022 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 combinatorics.simple_graph.regularity.uniform
-! leanprover-community/mathlib commit bf7ef0e83e5b7e6c1169e97f055e58a2e4e9d52d
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Combinatorics.SimpleGraph.Density
import Mathlib.SetTheory.Ordinal.Basic
+#align_import combinatorics.simple_graph.regularity.uniform from "leanprover-community/mathlib"@"bf7ef0e83e5b7e6c1169e97f055e58a2e4e9d52d"
+
/-!
# Graph uniformity and uniform partitions
@@ -222,7 +222,7 @@ theorem nonUniforms_bot (hε : 0 < ε) : (⊥ : Finpartition A).nonUniforms G ε
rintro ⟨u, v⟩
simp only [Finpartition.mk_mem_nonUniforms_iff, Finpartition.parts_bot, mem_map, not_and,
Classical.not_not, exists_imp]; dsimp
- rintro x ⟨_,xu⟩ y ⟨_,yv⟩ _
+ rintro x ⟨_,xu⟩ y ⟨_,yv⟩ _
rw [←xu, ←yv]
exact G.isUniform_singleton hε
#align finpartition.non_uniforms_bot Finpartition.nonUniforms_bot
@@ -65,8 +65,7 @@ variable {G ε}
theorem IsUniform.mono {ε' : 𝕜} (h : ε ≤ ε') (hε : IsUniform G ε s t) : IsUniform G ε' s t :=
fun s' hs' t' ht' hs ht => by
- refine' (hε hs' ht' (le_trans _ hs) (le_trans _ ht)).trans_le h <;>
- exact mul_le_mul_of_nonneg_left h (Nat.cast_nonneg _)
+ refine' (hε hs' ht' (le_trans _ hs) (le_trans _ ht)).trans_le h <;> gcongr
#align simple_graph.is_uniform.mono SimpleGraph.IsUniform.mono
theorem IsUniform.symm : Symmetric (IsUniform G ε) := fun s t h t' ht' s' hs' ht hs => by
@@ -250,8 +249,7 @@ theorem isUniformOne : P.IsUniform G (1 : 𝕜) := by
variable {P G}
theorem IsUniform.mono {ε ε' : 𝕜} (hP : P.IsUniform G ε) (h : ε ≤ ε') : P.IsUniform G ε' :=
- ((Nat.cast_le.2 <| card_le_of_subset <| P.nonUniforms_mono G h).trans hP).trans <|
- mul_le_mul_of_nonneg_left h <| Nat.cast_nonneg _
+ ((Nat.cast_le.2 <| card_le_of_subset <| P.nonUniforms_mono G h).trans hP).trans <| by gcongr
#align finpartition.is_uniform.mono Finpartition.IsUniform.mono
theorem isUniformOfEmpty (hP : P.parts = ∅) : P.IsUniform G ε := by
Match https://github.com/leanprover-community/mathlib/pull/19051 (and one line of https://github.com/leanprover-community/mathlib/pull/18371)
combinatorics.simple_graph.regularity.energy
@f7707875544ef1f81b32cb68c79e0e24e45a0e76
..bf7ef0e83e5b7e6c1169e97f055e58a2e4e9d52d
combinatorics.simple_graph.regularity.equitabilise
@4c19a16e4b705bf135cf9a80ac18fcc99c438514
..bf7ef0e83e5b7e6c1169e97f055e58a2e4e9d52d
combinatorics.simple_graph.regularity.uniform
@32b08ef840dd25ca2e47e035c5da03ce16d2dc3c
..bf7ef0e83e5b7e6c1169e97f055e58a2e4e9d52d
@@ -4,7 +4,7 @@ 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 combinatorics.simple_graph.regularity.uniform
-! leanprover-community/mathlib commit 32b08ef840dd25ca2e47e035c5da03ce16d2dc3c
+! leanprover-community/mathlib commit bf7ef0e83e5b7e6c1169e97f055e58a2e4e9d52d
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -35,6 +35,10 @@ is less than `ε`.
* `Finpartition.IsUniform`: Uniformity of a partition.
* `Finpartition.nonuniformWitnesses`: For each non-uniform pair of parts of a partition, pick
witnesses of non-uniformity and dump them all together.
+
+## References
+
+[Yaël Dillies, Bhavik Mehta, *Formalising Szemerédi’s Regularity Lemma in Lean*][srl_itp]
-/
@@ -168,13 +172,13 @@ theorem nonuniformWitness_subset (h : ¬G.IsUniform ε s t) : G.nonuniformWitnes
· exact G.right_nonuniformWitnesses_subset fun i => h i.symm
#align simple_graph.nonuniform_witness_subset SimpleGraph.nonuniformWitness_subset
-theorem nonuniformWitness_card_le (h : ¬G.IsUniform ε s t) :
+theorem le_card_nonuniformWitness (h : ¬G.IsUniform ε s t) :
(s.card : 𝕜) * ε ≤ (G.nonuniformWitness ε s t).card := by
unfold nonuniformWitness
split_ifs
· exact G.left_nonuniformWitnesses_card h
· exact G.right_nonuniformWitnesses_card fun i => h i.symm
-#align simple_graph.nonuniform_witness_card_le SimpleGraph.nonuniformWitness_card_le
+#align simple_graph.le_card_nonuniform_witness SimpleGraph.le_card_nonuniformWitness
theorem nonuniformWitness_spec (h₁ : s ≠ t) (h₂ : ¬G.IsUniform ε s t) : ε ≤ |G.edgeDensity
(G.nonuniformWitness ε s t) (G.nonuniformWitness ε t s) - G.edgeDensity s t| := by
by
s! (#3825)
This PR puts, with one exception, every single remaining by
that lies all by itself on its own line to the previous line, thus matching the current behaviour of start-port.sh
. The exception is when the by
begins the second or later argument to a tuple or anonymous constructor; see https://github.com/leanprover-community/mathlib4/pull/3825#discussion_r1186702599.
Essentially this is s/\n *by$/ by/g
, but with manual editing to satisfy the linter's max-100-char-line requirement. The Python style linter is also modified to catch these "isolated by
s".
@@ -176,10 +176,8 @@ theorem nonuniformWitness_card_le (h : ¬G.IsUniform ε s t) :
· exact G.right_nonuniformWitnesses_card fun i => h i.symm
#align simple_graph.nonuniform_witness_card_le SimpleGraph.nonuniformWitness_card_le
-theorem nonuniformWitness_spec (h₁ : s ≠ t) (h₂ : ¬G.IsUniform ε s t) :
- ε ≤
- |G.edgeDensity (G.nonuniformWitness ε s t) (G.nonuniformWitness ε t s) - G.edgeDensity s t| :=
- by
+theorem nonuniformWitness_spec (h₁ : s ≠ t) (h₂ : ¬G.IsUniform ε s t) : ε ≤ |G.edgeDensity
+ (G.nonuniformWitness ε s t) (G.nonuniformWitness ε t s) - G.edgeDensity s t| := by
unfold nonuniformWitness
rcases trichotomous_of WellOrderingRel s t with (lt | rfl | gt)
· rw [if_pos lt, if_neg (asymm lt)]
Co-authored-by: Vierkantor <vierkantor@vierkantor.com>
The unported dependencies are