Theorem: Matroid.Indep.augment
File: Mathlib/Data/Matroid/Restrict.lean

tactic: by_contra! he
state_before: α : Type u_1
M : Matroid α
R I J✝ X Y B J : Set α
e : α
hI : M.Indep I
hJ : M.Indep J
hIJ : I.encard < J.encard
⊢ ∃ e ∈ J \ I, M.Indep (insert e I)
state_after: α : Type u_1
M : Matroid α
R I J✝ X Y B J : Set α
e : α
hI : M.Indep I
hJ : M.Indep J
hIJ : I.encard < J.encard
he : ∀ e ∈ J \ I, ¬M.Indep (insert e I)
⊢ False

tactic: have hb : M.Basis I (I ∪ J) := by
  simp_rw [hI.basis_iff_forall_insert_dep subset_union_left, union_diff_left, mem_diff,
    and_imp, dep_iff, insert_subset_iff, and_iff_left hI.subset_ground]
  exact fun e heJ heI ↦ ⟨he e ⟨heJ, heI⟩, hJ.subset_ground heJ⟩
state_before: α : Type u_1
M : Matroid α
R I J✝ X Y B J : Set α
e : α
hI : M.Indep I
hJ : M.Indep J
hIJ : I.encard < J.encard
he : ∀ e ∈ J \ I, ¬M.Indep (insert e I)
⊢ False
state_after: α : Type u_1
M : Matroid α
R I J✝ X Y B J : Set α
e : α
hI : M.Indep I
hJ : M.Indep J
hIJ : I.encard < J.encard
he : ∀ e ∈ J \ I, ¬M.Indep (insert e I)
hb : M.Basis I (I ∪ J)
⊢ False

tactic: obtain ⟨J', hJ', hJJ'⟩ := hJ.subset_basis_of_subset I.subset_union_right
state_before: α : Type u_1
M : Matroid α
R I J✝ X Y B J : Set α
e : α
hI : M.Indep I
hJ : M.Indep J
hIJ : I.encard < J.encard
he : ∀ e ∈ J \ I, ¬M.Indep (insert e I)
hb : M.Basis I (I ∪ J)
⊢ False
state_after: case intro.intro
α : Type u_1
M : Matroid α
R I J✝ X Y B J : Set α
e : α
hI : M.Indep I
hJ : M.Indep J
hIJ : I.encard < J.encard
he : ∀ e ∈ J \ I, ¬M.Indep (insert e I)
hb : M.Basis I (I ∪ J)
J' : Set α
hJ' : M.Basis J' (I ∪ J)
hJJ' : J ⊆ J'
⊢ False

tactic: rw [← hJ'.encard_eq_encard hb] at hIJ
state_before: case intro.intro
α : Type u_1
M : Matroid α
R I J✝ X Y B J : Set α
e : α
hI : M.Indep I
hJ : M.Indep J
hIJ : I.encard < J.encard
he : ∀ e ∈ J \ I, ¬M.Indep (insert e I)
hb : M.Basis I (I ∪ J)
J' : Set α
hJ' : M.Basis J' (I ∪ J)
hJJ' : J ⊆ J'
⊢ False
state_after: case intro.intro
α : Type u_1
M : Matroid α
R I J✝ X Y B J : Set α
e : α
hI : M.Indep I
hJ : M.Indep J
he : ∀ e ∈ J \ I, ¬M.Indep (insert e I)
hb : M.Basis I (I ∪ J)
J' : Set α
hIJ : J'.encard < J.encard
hJ' : M.Basis J' (I ∪ J)
hJJ' : J ⊆ J'
⊢ False

tactic: exact hIJ.not_le (encard_mono hJJ')
state_before: case intro.intro
α : Type u_1
M : Matroid α
R I J✝ X Y B J : Set α
e : α
hI : M.Indep I
hJ : M.Indep J
he : ∀ e ∈ J \ I, ¬M.Indep (insert e I)
hb : M.Basis I (I ∪ J)
J' : Set α
hIJ : J'.encard < J.encard
hJ' : M.Basis J' (I ∪ J)
hJJ' : J ⊆ J'
⊢ False
state_after: no goals

tactic: simp_rw [hI.basis_iff_forall_insert_dep subset_union_left, union_diff_left, mem_diff,
  and_imp, dep_iff, insert_subset_iff, and_iff_left hI.subset_ground]
state_before: α : Type u_1
M : Matroid α
R I J✝ X Y B J : Set α
e : α
hI : M.Indep I
hJ : M.Indep J
hIJ : I.encard < J.encard
he : ∀ e ∈ J \ I, ¬M.Indep (insert e I)
⊢ M.Basis I (I ∪ J)
state_after: α : Type u_1
M : Matroid α
R I J✝ X Y B J : Set α
e : α
hI : M.Indep I
hJ : M.Indep J
hIJ : I.encard < J.encard
he : ∀ e ∈ J \ I, ¬M.Indep (insert e I)
⊢ ∀ e ∈ J, e ∉ I → ¬M.Indep (insert e I) ∧ e ∈ M.E

tactic: exact fun e heJ heI ↦ ⟨he e ⟨heJ, heI⟩, hJ.subset_ground heJ⟩
state_before: α : Type u_1
M : Matroid α
R I J✝ X Y B J : Set α
e : α
hI : M.Indep I
hJ : M.Indep J
hIJ : I.encard < J.encard
he : ∀ e ∈ J \ I, ¬M.Indep (insert e I)
⊢ ∀ e ∈ J, e ∉ I → ¬M.Indep (insert e I) ∧ e ∈ M.E
state_after: no goals