Theorem: Matroid.er_eq_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 : α
hX : autoParam (X ⊆ M.E) _auto✝
⊢ M.er X = 1 ↔ ∃ e ∈ X, M.Nonloop e ∧ X ⊆ M.cl {e}
Tactic:
refine ⟨?_, fun ⟨e, heX, he, hXe⟩ ↦ ?_⟩
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 : α
hX : autoParam (X ⊆ M.E) _auto✝
⊢ M.er X = 1 → ∃ e ∈ X, M.Nonloop 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 : α
hX : autoParam (X ⊆ M.E) _auto✝
x✝ : ∃ e ∈ X, M.Nonloop e ∧ X ⊆ M.cl {e}
e : α
heX : e ∈ X
he : M.Nonloop e
hXe : 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 : α
hX : autoParam (X ⊆ M.E) _auto✝
x✝ : ∃ e ∈ X, M.Nonloop e ∧ X ⊆ M.cl {e}
e : α
heX : e ∈ X
he : M.Nonloop e
hXe : X ⊆ M.cl {e}
⊢ M.er X = 1
Tactic:
rw [← he.er_eq]
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 : α
hX : autoParam (X ⊆ M.E) _auto✝
x✝ : ∃ e ∈ X, M.Nonloop e ∧ X ⊆ M.cl {e}
e : α
heX : e ∈ X
he : M.Nonloop e
hXe : X ⊆ M.cl {e}
⊢ M.er X = M.er {e}

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 : α
hX : autoParam (X ⊆ M.E) _auto✝
x✝ : ∃ e ∈ X, M.Nonloop e ∧ X ⊆ M.cl {e}
e : α
heX : e ∈ X
he : M.Nonloop e
hXe : X ⊆ M.cl {e}
⊢ M.er X = M.er {e}
Tactic:
exact ((M.er_mono hXe).trans (M.er_cl_eq _).le).antisymm (M.er_mono (singleton_subset_iff.2 heX))
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 : α
hX : autoParam (X ⊆ M.E) _auto✝
⊢ M.er X = 1 → ∃ e ∈ X, M.Nonloop 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 : α
hX : autoParam (X ⊆ M.E) _auto✝
I : Set α
hI : M.Basis I X
⊢ M.er X = 1 → ∃ e ∈ X, M.Nonloop 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 : α
hX : autoParam (X ⊆ M.E) _auto✝
I : Set α
hI : M.Basis I X
⊢ M.er X = 1 → ∃ e ∈ X, M.Nonloop e ∧ X ⊆ M.cl {e}
Tactic:
rw [hI.er_eq_encard, encard_eq_one]
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 : α
hX : autoParam (X ⊆ M.E) _auto✝
I : Set α
hI : M.Basis I X
⊢ (∃ x, I = {x}) → ∃ e ∈ X, M.Nonloop 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 : α
hX : autoParam (X ⊆ M.E) _auto✝
I : Set α
hI : M.Basis I X
⊢ (∃ x, I = {x}) → ∃ e ∈ X, M.Nonloop e ∧ X ⊆ M.cl {e}
Tactic:
rintro ⟨e, rfl⟩
State after:
case refine_1.intro.intro
α : Type u_1
ι : Type u_2
M N : Matroid α
I B X X' Y Y' Z R : Set α
n : ℕ∞
e✝ f : α
hX : autoParam (X ⊆ M.E) _auto✝
e : α
hI : M.Basis {e} X
⊢ ∃ e ∈ X, M.Nonloop e ∧ X ⊆ M.cl {e}

State before:
case refine_1.intro.intro
α : Type u_1
ι : Type u_2
M N : Matroid α
I B X X' Y Y' Z R : Set α
n : ℕ∞
e✝ f : α
hX : autoParam (X ⊆ M.E) _auto✝
e : α
hI : M.Basis {e} X
⊢ ∃ e ∈ X, M.Nonloop e ∧ X ⊆ M.cl {e}
Tactic:
exact ⟨e, singleton_subset_iff.1 hI.subset, indep_singleton.1 hI.indep, hI.subset_cl⟩
State after:
no goals