Theorem: Matroid.er_le_one_iff (Matroid/Rank.lean)

State before:
α : Type u_1
ι : Type u_2
M N : Matroid α
I B X X' Y Y' Z R : Set α
n : ℕ∞
e f : α
inst✝ : M.Nonempty
hX : autoParam (X ⊆ M.E) _auto✝
⊢ M.er X ≤ 1 ↔ ∃ e ∈ M.E, X ⊆ M.cl {e}
Tactic:
refine' ⟨fun h ↦ _, fun ⟨e, _, he⟩ ↦ _⟩
State after:
case refine'_1
α : Type u_1
ι : Type u_2
M N : Matroid α
I B X X' Y Y' Z R : Set α
n : ℕ∞
e f : α
inst✝ : M.Nonempty
hX : autoParam (X ⊆ M.E) _auto✝
h : M.er X ≤ 1
⊢ ∃ e ∈ M.E, X ⊆ M.cl {e}

case refine'_2
α : Type u_1
ι : Type u_2
M N : Matroid α
I B X X' Y Y' Z R : Set α
n : ℕ∞
e✝ f : α
inst✝ : M.Nonempty
hX : autoParam (X ⊆ M.E) _auto✝
x✝ : ∃ e ∈ M.E, X ⊆ M.cl {e}
e : α
left✝ : e ∈ M.E
he : X ⊆ M.cl {e}
⊢ M.er X ≤ 1

State before:
case refine'_2
α : Type u_1
ι : Type u_2
M N : Matroid α
I B X X' Y Y' Z R : Set α
n : ℕ∞
e✝ f : α
inst✝ : M.Nonempty
hX : autoParam (X ⊆ M.E) _auto✝
x✝ : ∃ e ∈ M.E, X ⊆ M.cl {e}
e : α
left✝ : e ∈ M.E
he : X ⊆ M.cl {e}
⊢ M.er X ≤ 1
Tactic:
refine (M.er_mono he).trans ?_
State after:
case refine'_2
α : Type u_1
ι : Type u_2
M N : Matroid α
I B X X' Y Y' Z R : Set α
n : ℕ∞
e✝ f : α
inst✝ : M.Nonempty
hX : autoParam (X ⊆ M.E) _auto✝
x✝ : ∃ e ∈ M.E, X ⊆ M.cl {e}
e : α
left✝ : e ∈ M.E
he : X ⊆ M.cl {e}
⊢ M.er (M.cl {e}) ≤ 1

State before:
case refine'_2
α : Type u_1
ι : Type u_2
M N : Matroid α
I B X X' Y Y' Z R : Set α
n : ℕ∞
e✝ f : α
inst✝ : M.Nonempty
hX : autoParam (X ⊆ M.E) _auto✝
x✝ : ∃ e ∈ M.E, X ⊆ M.cl {e}
e : α
left✝ : e ∈ M.E
he : X ⊆ M.cl {e}
⊢ M.er (M.cl {e}) ≤ 1
Tactic:
rw [er_cl_eq, ← encard_singleton e]
State after:
case refine'_2
α : Type u_1
ι : Type u_2
M N : Matroid α
I B X X' Y Y' Z R : Set α
n : ℕ∞
e✝ f : α
inst✝ : M.Nonempty
hX : autoParam (X ⊆ M.E) _auto✝
x✝ : ∃ e ∈ M.E, X ⊆ M.cl {e}
e : α
left✝ : e ∈ M.E
he : X ⊆ M.cl {e}
⊢ M.er {e} ≤ {e}.encard

State before:
case refine'_2
α : Type u_1
ι : Type u_2
M N : Matroid α
I B X X' Y Y' Z R : Set α
n : ℕ∞
e✝ f : α
inst✝ : M.Nonempty
hX : autoParam (X ⊆ M.E) _auto✝
x✝ : ∃ e ∈ M.E, X ⊆ M.cl {e}
e : α
left✝ : e ∈ M.E
he : X ⊆ M.cl {e}
⊢ M.er {e} ≤ {e}.encard
Tactic:
exact M.er_le_encard {e}
State after:
no goals

State before:
case refine'_1
α : Type u_1
ι : Type u_2
M N : Matroid α
I B X X' Y Y' Z R : Set α
n : ℕ∞
e f : α
inst✝ : M.Nonempty
hX : autoParam (X ⊆ M.E) _auto✝
h : M.er X ≤ 1
⊢ ∃ e ∈ M.E, X ⊆ M.cl {e}
Tactic:
obtain ⟨I, hI⟩ := M.exists_basis X
State after:
case refine'_1.intro
α : Type u_1
ι : Type u_2
M N : Matroid α
I✝ B X X' Y Y' Z R : Set α
n : ℕ∞
e f : α
inst✝ : M.Nonempty
hX : autoParam (X ⊆ M.E) _auto✝
h : M.er X ≤ 1
I : Set α
hI : M.Basis I X
⊢ ∃ e ∈ M.E, X ⊆ M.cl {e}

State before:
case refine'_1.intro
α : Type u_1
ι : Type u_2
M N : Matroid α
I✝ B X X' Y Y' Z R : Set α
n : ℕ∞
e f : α
inst✝ : M.Nonempty
hX : autoParam (X ⊆ M.E) _auto✝
h : M.er X ≤ 1
I : Set α
hI : M.Basis I X
⊢ ∃ e ∈ M.E, X ⊆ M.cl {e}
Tactic:
rw [hI.er_eq_encard, encard_le_one_iff_eq] at h
State after:
case refine'_1.intro
α : Type u_1
ι : Type u_2
M N : Matroid α
I✝ B X X' Y Y' Z R : Set α
n : ℕ∞
e f : α
inst✝ : M.Nonempty
hX : autoParam (X ⊆ M.E) _auto✝
I : Set α
h : I = ∅ ∨ ∃ x, I = {x}
hI : M.Basis I X
⊢ ∃ e ∈ M.E, X ⊆ M.cl {e}

State before:
case refine'_1.intro
α : Type u_1
ι : Type u_2
M N : Matroid α
I✝ B X X' Y Y' Z R : Set α
n : ℕ∞
e f : α
inst✝ : M.Nonempty
hX : autoParam (X ⊆ M.E) _auto✝
I : Set α
h : I = ∅ ∨ ∃ x, I = {x}
hI : M.Basis I X
⊢ ∃ e ∈ M.E, X ⊆ M.cl {e}
Tactic:
obtain (rfl | ⟨e, rfl⟩) := h
State after:
case refine'_1.intro.inl
α : Type u_1
ι : Type u_2
M N : Matroid α
I B X X' Y Y' Z R : Set α
n : ℕ∞
e f : α
inst✝ : M.Nonempty
hX : autoParam (X ⊆ M.E) _auto✝
hI : M.Basis ∅ X
⊢ ∃ e ∈ M.E, X ⊆ M.cl {e}

case refine'_1.intro.inr.intro
α : Type u_1
ι : Type u_2
M N : Matroid α
I B X X' Y Y' Z R : Set α
n : ℕ∞
e✝ f : α
inst✝ : M.Nonempty
hX : autoParam (X ⊆ M.E) _auto✝
e : α
hI : M.Basis {e} X
⊢ ∃ e ∈ M.E, X ⊆ M.cl {e}

State before:
case refine'_1.intro.inr.intro
α : Type u_1
ι : Type u_2
M N : Matroid α
I B X X' Y Y' Z R : Set α
n : ℕ∞
e✝ f : α
inst✝ : M.Nonempty
hX : autoParam (X ⊆ M.E) _auto✝
e : α
hI : M.Basis {e} X
⊢ ∃ e ∈ M.E, X ⊆ M.cl {e}
Tactic:
exact ⟨e, hI.indep.subset_ground rfl,  hI.subset_cl⟩
State after:
no goals

State before:
case refine'_1.intro.inl
α : Type u_1
ι : Type u_2
M N : Matroid α
I B X X' Y Y' Z R : Set α
n : ℕ∞
e f : α
inst✝ : M.Nonempty
hX : autoParam (X ⊆ M.E) _auto✝
hI : M.Basis ∅ X
⊢ ∃ e ∈ M.E, X ⊆ M.cl {e}
Tactic:
exact ⟨M.ground_nonempty.some, M.ground_nonempty.some_mem,
  hI.subset_cl.trans ((M.cl_subset_cl (empty_subset _)))⟩
State after:
no goals