Theorem: Matroid.ModularCut.extension_cl_eq_of_mem (Matroid/Old/_ModularCut.lean)

State before:
α : Type u_1
M : Matroid α
I B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
⊢ (C.extension e).cl X = insert e (M.cl X)
Tactic:
obtain ⟨I, hI⟩ := M.exists_basis' X
State after:
case intro
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
⊢ (C.extension e).cl X = insert e (M.cl X)

State before:
case intro
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
⊢ (C.extension e).cl X = insert e (M.cl X)
Tactic:
have ex_basis : (extension C e).Basis' I X
State after:
case ex_basis
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
⊢ (C.extension e).Basis' I X

case intro
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
⊢ (C.extension e).cl X = insert e (M.cl X)

State before:
case intro
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
⊢ (C.extension e).cl X = insert e (M.cl X)
Tactic:
rw [←hI.cl_eq_cl, ←ex_basis.cl_eq_cl, ext_iff]
State after:
case intro
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
⊢ ∀ (x : α), x ∈ (C.extension e).cl I ↔ x ∈ insert e (M.cl I)

State before:
case intro
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
⊢ ∀ (x : α), x ∈ (C.extension e).cl I ↔ x ∈ insert e (M.cl I)
Tactic:
refine' fun x ↦ ⟨fun x_mem ↦ _, fun (x_mem) ↦ _⟩
State after:
case intro.refine'_1
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem : x ∈ (C.extension e).cl I
⊢ x ∈ insert e (M.cl I)

case intro.refine'_2
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem : x ∈ insert e (M.cl I)
⊢ x ∈ (C.extension e).cl I

State before:
case intro.refine'_2
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem : x ∈ insert e (M.cl I)
⊢ x ∈ (C.extension e).cl I
Tactic:
obtain (rfl | x_mem) := x_mem
State after:
case intro.refine'_2.inl
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
X : Set α
C : M.ModularCut
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
x : α
he : x ∉ M.E
ex_basis : (C.extension x).Basis' I X
⊢ x ∈ (C.extension x).cl I

case intro.refine'_2.inr
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem : x ∈ M.cl I
⊢ x ∈ (C.extension e).cl I

State before:
case intro.refine'_2.inr
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem : x ∈ M.cl I
⊢ x ∈ (C.extension e).cl I
Tactic:
rw [ex_basis.indep.mem_cl_iff]
State after:
case intro.refine'_2.inr
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem : x ∈ M.cl I
⊢ (C.extension e).Dep (insert x I) ∨ x ∈ I

State before:
case intro.refine'_2.inr
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem : x ∈ M.cl I
⊢ (C.extension e).Dep (insert x I) ∨ x ∈ I
Tactic:
obtain (x_dep | x_mem) := hI.indep.mem_cl_iff.1 x_mem
State after:
case intro.refine'_2.inr.inl
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem : x ∈ M.cl I
x_dep : M.Dep (insert x I)
⊢ (C.extension e).Dep (insert x I) ∨ x ∈ I

case intro.refine'_2.inr.inr
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem✝ : x ∈ M.cl I
x_mem : x ∈ I
⊢ (C.extension e).Dep (insert x I) ∨ x ∈ I

State before:
case intro.refine'_2.inr.inr
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem✝ : x ∈ M.cl I
x_mem : x ∈ I
⊢ (C.extension e).Dep (insert x I) ∨ x ∈ I
Tactic:
exact Or.inr x_mem
State after:
no goals

State before:
case ex_basis
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
⊢ (C.extension e).Basis' I X
Tactic:
rw [basis'_iff_basis_inter_ground, C.extension_ground, basis_iff, C.extension_indep,
and_iff_right (Or.inl hI.indep)]
State after:
case ex_basis
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
⊢ I ⊆ X ∩ insert e M.E ∧ ∀ (J : Set α), (C.extension e).Indep J → I ⊆ J → J ⊆ X ∩ insert e M.E → I = J

State before:
case ex_basis
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
⊢ I ⊆ X ∩ insert e M.E ∧ ∀ (J : Set α), (C.extension e).Indep J → I ⊆ J → J ⊆ X ∩ insert e M.E → I = J
Tactic:
have sub_inter:= subset_inter_iff.1 hI.basis_inter_ground.subset
State after:
case ex_basis
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
sub_inter : I ⊆ X ∧ I ⊆ M.E
⊢ I ⊆ X ∩ insert e M.E ∧ ∀ (J : Set α), (C.extension e).Indep J → I ⊆ J → J ⊆ X ∩ insert e M.E → I = J

State before:
case ex_basis
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
sub_inter : I ⊆ X ∧ I ⊆ M.E
⊢ I ⊆ X ∩ insert e M.E ∧ ∀ (J : Set α), (C.extension e).Indep J → I ⊆ J → J ⊆ X ∩ insert e M.E → I = J
Tactic:
refine' ⟨subset_inter_iff.2 ⟨sub_inter.1, sub_inter.2.trans (subset_insert _ _)⟩,
 fun J J_ind I_sub_J J_sub_X ↦ _⟩
State after:
case ex_basis
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
sub_inter : I ⊆ X ∧ I ⊆ M.E
J : Set α
J_ind : (C.extension e).Indep J
I_sub_J : I ⊆ J
J_sub_X : J ⊆ X ∩ insert e M.E
⊢ I = J

State before:
case ex_basis
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
sub_inter : I ⊆ X ∧ I ⊆ M.E
J : Set α
J_ind : (C.extension e).Indep J
I_sub_J : I ⊆ J
J_sub_X : J ⊆ X ∩ insert e M.E
⊢ I = J
Tactic:
rw [←hI.cl_eq_cl] at hX
State after:
case ex_basis
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
I : Set α
hX : M.cl I ∈ C
hI : M.Basis' I X
sub_inter : I ⊆ X ∧ I ⊆ M.E
J : Set α
J_ind : (C.extension e).Indep J
I_sub_J : I ⊆ J
J_sub_X : J ⊆ X ∩ insert e M.E
⊢ I = J

State before:
case ex_basis
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
I : Set α
hX : M.cl I ∈ C
hI : M.Basis' I X
sub_inter : I ⊆ X ∧ I ⊆ M.E
J : Set α
J_ind : (C.extension e).Indep J
I_sub_J : I ⊆ J
J_sub_X : J ⊆ X ∩ insert e M.E
⊢ I = J
Tactic:
rw [basis'_iff_basis_inter_ground, basis_iff] at hI
State after:
case ex_basis
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
I : Set α
hX : M.cl I ∈ C
hI : M.Indep I ∧ I ⊆ X ∩ M.E ∧ ∀ (J : Set α), M.Indep J → I ⊆ J → J ⊆ X ∩ M.E → I = J
sub_inter : I ⊆ X ∧ I ⊆ M.E
J : Set α
J_ind : (C.extension e).Indep J
I_sub_J : I ⊆ J
J_sub_X : J ⊆ X ∩ insert e M.E
⊢ I = J

State before:
case ex_basis
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
I : Set α
hX : M.cl I ∈ C
hI : M.Indep I ∧ I ⊆ X ∩ M.E ∧ ∀ (J : Set α), M.Indep J → I ⊆ J → J ⊆ X ∩ M.E → I = J
sub_inter : I ⊆ X ∧ I ⊆ M.E
J : Set α
J_ind : (C.extension e).Indep J
I_sub_J : I ⊆ J
J_sub_X : J ⊆ X ∩ insert e M.E
⊢ I = J
Tactic:
obtain (M_ind | ⟨e_mem, _, cl_not_mem⟩) := (C.extension_indep e).1 J_ind
State after:
case ex_basis.inl
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
I : Set α
hX : M.cl I ∈ C
hI : M.Indep I ∧ I ⊆ X ∩ M.E ∧ ∀ (J : Set α), M.Indep J → I ⊆ J → J ⊆ X ∩ M.E → I = J
sub_inter : I ⊆ X ∧ I ⊆ M.E
J : Set α
J_ind : (C.extension e).Indep J
I_sub_J : I ⊆ J
J_sub_X : J ⊆ X ∩ insert e M.E
M_ind : M.Indep J
⊢ I = J

case ex_basis.inr.intro.intro
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
I : Set α
hX : M.cl I ∈ C
hI : M.Indep I ∧ I ⊆ X ∩ M.E ∧ ∀ (J : Set α), M.Indep J → I ⊆ J → J ⊆ X ∩ M.E → I = J
sub_inter : I ⊆ X ∧ I ⊆ M.E
J : Set α
J_ind : (C.extension e).Indep J
I_sub_J : I ⊆ J
J_sub_X : J ⊆ X ∩ insert e M.E
e_mem : e ∈ J \ M.E
left✝ : M.Indep (J \ {e})
cl_not_mem : M.cl (J \ {e}) ∉ C
⊢ I = J

State before:
case ex_basis.inr.intro.intro
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
I : Set α
hX : M.cl I ∈ C
hI : M.Indep I ∧ I ⊆ X ∩ M.E ∧ ∀ (J : Set α), M.Indep J → I ⊆ J → J ⊆ X ∩ M.E → I = J
sub_inter : I ⊆ X ∧ I ⊆ M.E
J : Set α
J_ind : (C.extension e).Indep J
I_sub_J : I ⊆ J
J_sub_X : J ⊆ X ∩ insert e M.E
e_mem : e ∈ J \ M.E
left✝ : M.Indep (J \ {e})
cl_not_mem : M.cl (J \ {e}) ∉ C
⊢ I = J
Tactic:
exact absurd hX (fun I_cl_mem ↦ cl_not_mem (C.superset I_cl_mem (M.cl_subset_cl
 (subset_diff_singleton I_sub_J (not_mem_subset hI.1.subset_ground e_mem.2))) (M.cl_flat _)))
State after:
no goals

State before:
case ex_basis.inl
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
I : Set α
hX : M.cl I ∈ C
hI : M.Indep I ∧ I ⊆ X ∩ M.E ∧ ∀ (J : Set α), M.Indep J → I ⊆ J → J ⊆ X ∩ M.E → I = J
sub_inter : I ⊆ X ∧ I ⊆ M.E
J : Set α
J_ind : (C.extension e).Indep J
I_sub_J : I ⊆ J
J_sub_X : J ⊆ X ∩ insert e M.E
M_ind : M.Indep J
⊢ I = J
Tactic:
apply hI.2.2 _ M_ind I_sub_J
State after:
case ex_basis.inl
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
I : Set α
hX : M.cl I ∈ C
hI : M.Indep I ∧ I ⊆ X ∩ M.E ∧ ∀ (J : Set α), M.Indep J → I ⊆ J → J ⊆ X ∩ M.E → I = J
sub_inter : I ⊆ X ∧ I ⊆ M.E
J : Set α
J_ind : (C.extension e).Indep J
I_sub_J : I ⊆ J
J_sub_X : J ⊆ X ∩ insert e M.E
M_ind : M.Indep J
⊢ J ⊆ X ∩ M.E

State before:
case ex_basis.inl
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
I : Set α
hX : M.cl I ∈ C
hI : M.Indep I ∧ I ⊆ X ∩ M.E ∧ ∀ (J : Set α), M.Indep J → I ⊆ J → J ⊆ X ∩ M.E → I = J
sub_inter : I ⊆ X ∧ I ⊆ M.E
J : Set α
J_ind : (C.extension e).Indep J
I_sub_J : I ⊆ J
J_sub_X : J ⊆ X ∩ insert e M.E
M_ind : M.Indep J
⊢ J ⊆ X ∩ M.E
Tactic:
exact fun j j_mem ↦ ⟨(J_sub_X j_mem).1, M_ind.subset_ground j_mem⟩
State after:
no goals

State before:
case intro.refine'_1
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem : x ∈ (C.extension e).cl I
⊢ x ∈ insert e (M.cl I)
Tactic:
obtain (x_dep | x_mem) := ex_basis.indep.mem_cl_iff.1 x_mem
State after:
case intro.refine'_1.inl
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem : x ∈ (C.extension e).cl I
x_dep : (C.extension e).Dep (insert x I)
⊢ x ∈ insert e (M.cl I)

case intro.refine'_1.inr
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem✝ : x ∈ (C.extension e).cl I
x_mem : x ∈ I
⊢ x ∈ insert e (M.cl I)

State before:
case intro.refine'_1.inr
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem✝ : x ∈ (C.extension e).cl I
x_mem : x ∈ I
⊢ x ∈ insert e (M.cl I)
Tactic:
exact Or.inr ((M.subset_cl _ hI.indep.subset_ground) x_mem)
State after:
no goals

State before:
case intro.refine'_1.inl
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem : x ∈ (C.extension e).cl I
x_dep : (C.extension e).Dep (insert x I)
⊢ x ∈ insert e (M.cl I)
Tactic:
have x_ground:= x_dep.subset_ground
State after:
case intro.refine'_1.inl
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem : x ∈ (C.extension e).cl I
x_dep : (C.extension e).Dep (insert x I)
x_ground : insert x I ⊆ (C.extension e).E
⊢ x ∈ insert e (M.cl I)

State before:
case intro.refine'_1.inl
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem : x ∈ (C.extension e).cl I
x_dep : (C.extension e).Dep (insert x I)
x_ground : insert x I ⊆ (C.extension e).E
⊢ x ∈ insert e (M.cl I)
Tactic:
obtain (rfl | ne) := eq_or_ne x e
State after:
case intro.refine'_1.inl.inl
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
X : Set α
C : M.ModularCut
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
x : α
he : x ∉ M.E
ex_basis : (C.extension x).Basis' I X
x_mem : x ∈ (C.extension x).cl I
x_dep : (C.extension x).Dep (insert x I)
x_ground : insert x I ⊆ (C.extension x).E
⊢ x ∈ insert x (M.cl I)

case intro.refine'_1.inl.inr
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem : x ∈ (C.extension e).cl I
x_dep : (C.extension e).Dep (insert x I)
x_ground : insert x I ⊆ (C.extension e).E
ne : x ≠ e
⊢ x ∈ insert e (M.cl I)

State before:
case intro.refine'_1.inl.inr
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem : x ∈ (C.extension e).cl I
x_dep : (C.extension e).Dep (insert x I)
x_ground : insert x I ⊆ (C.extension e).E
ne : x ≠ e
⊢ x ∈ insert e (M.cl I)
Tactic:
rw [←not_indep_iff, (C.extension_indep e), not_or, not_indep_iff _] at x_dep
State after:
case intro.refine'_1.inl.inr
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem : x ∈ (C.extension e).cl I
x_dep : M.Dep (insert x I) ∧ ¬(e ∈ insert x I \ M.E ∧ M.Indep (insert x I \ {e}) ∧ M.cl (insert x I \ {e}) ∉ C)
x_ground : insert x I ⊆ (C.extension e).E
ne : x ≠ e
⊢ x ∈ insert e (M.cl I)

α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem : x ∈ (C.extension e).cl I
x_dep : ¬M.Indep (insert x I) ∧ ¬(e ∈ insert x I \ M.E ∧ M.Indep (insert x I \ {e}) ∧ M.cl (insert x I \ {e}) ∉ C)
x_ground : insert x I ⊆ (C.extension e).E
ne : x ≠ e
⊢ insert x I ⊆ M.E

State before:
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem : x ∈ (C.extension e).cl I
x_dep : ¬M.Indep (insert x I) ∧ ¬(e ∈ insert x I \ M.E ∧ M.Indep (insert x I \ {e}) ∧ M.cl (insert x I \ {e}) ∉ C)
x_ground : insert x I ⊆ (C.extension e).E
ne : x ≠ e
⊢ insert x I ⊆ M.E
Tactic:
rw [C.extension_ground e, ←diff_singleton_subset_iff, diff_singleton_eq_self _] at x_ground
State after:
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem : x ∈ (C.extension e).cl I
x_dep : ¬M.Indep (insert x I) ∧ ¬(e ∈ insert x I \ M.E ∧ M.Indep (insert x I \ {e}) ∧ M.cl (insert x I \ {e}) ∉ C)
x_ground : insert x I ⊆ M.E
ne : x ≠ e
⊢ insert x I ⊆ M.E

α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem : x ∈ (C.extension e).cl I
x_dep : ¬M.Indep (insert x I) ∧ ¬(e ∈ insert x I \ M.E ∧ M.Indep (insert x I \ {e}) ∧ M.cl (insert x I \ {e}) ∉ C)
x_ground : insert x I \ {e} ⊆ M.E
ne : x ≠ e
⊢ e ∉ insert x I

State before:
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem : x ∈ (C.extension e).cl I
x_dep : ¬M.Indep (insert x I) ∧ ¬(e ∈ insert x I \ M.E ∧ M.Indep (insert x I \ {e}) ∧ M.cl (insert x I \ {e}) ∉ C)
x_ground : insert x I \ {e} ⊆ M.E
ne : x ≠ e
⊢ e ∉ insert x I
Tactic:
rintro (rfl | e_I)
State after:
case inl
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x_mem : e ∈ (C.extension e).cl I
x_dep : ¬M.Indep (insert e I) ∧ ¬(e ∈ insert e I \ M.E ∧ M.Indep (insert e I \ {e}) ∧ M.cl (insert e I \ {e}) ∉ C)
x_ground : insert e I \ {e} ⊆ M.E
ne : e ≠ e
⊢ False

case inr
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem : x ∈ (C.extension e).cl I
x_dep : ¬M.Indep (insert x I) ∧ ¬(e ∈ insert x I \ M.E ∧ M.Indep (insert x I \ {e}) ∧ M.cl (insert x I \ {e}) ∉ C)
x_ground : insert x I \ {e} ⊆ M.E
ne : x ≠ e
e_I : e ∈ I
⊢ False

State before:
case inr
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem : x ∈ (C.extension e).cl I
x_dep : ¬M.Indep (insert x I) ∧ ¬(e ∈ insert x I \ M.E ∧ M.Indep (insert x I \ {e}) ∧ M.cl (insert x I \ {e}) ∉ C)
x_ground : insert x I \ {e} ⊆ M.E
ne : x ≠ e
e_I : e ∈ I
⊢ False
Tactic:
exact he (hI.indep.subset_ground e_I)
State after:
no goals

State before:
case intro.refine'_1.inl.inl
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
X : Set α
C : M.ModularCut
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
x : α
he : x ∉ M.E
ex_basis : (C.extension x).Basis' I X
x_mem : x ∈ (C.extension x).cl I
x_dep : (C.extension x).Dep (insert x I)
x_ground : insert x I ⊆ (C.extension x).E
⊢ x ∈ insert x (M.cl I)
Tactic:
exact mem_insert _ _
State after:
no goals

State before:
case intro.refine'_1.inl.inr
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem : x ∈ (C.extension e).cl I
x_dep : M.Dep (insert x I) ∧ ¬(e ∈ insert x I \ M.E ∧ M.Indep (insert x I \ {e}) ∧ M.cl (insert x I \ {e}) ∉ C)
x_ground : insert x I ⊆ (C.extension e).E
ne : x ≠ e
⊢ x ∈ insert e (M.cl I)
Tactic:
apply Or.inr (hI.indep.mem_cl_iff.2 (Or.inl x_dep.1))
State after:
no goals

State before:
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem : x ∈ (C.extension e).cl I
x_dep : ¬M.Indep (insert x I) ∧ ¬(e ∈ insert x I \ M.E ∧ M.Indep (insert x I \ {e}) ∧ M.cl (insert x I \ {e}) ∉ C)
x_ground : insert x I ⊆ M.E
ne : x ≠ e
⊢ insert x I ⊆ M.E
Tactic:
assumption
State after:
no goals

State before:
case inl
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x_mem : e ∈ (C.extension e).cl I
x_dep : ¬M.Indep (insert e I) ∧ ¬(e ∈ insert e I \ M.E ∧ M.Indep (insert e I \ {e}) ∧ M.cl (insert e I \ {e}) ∉ C)
x_ground : insert e I \ {e} ⊆ M.E
ne : e ≠ e
⊢ False
Tactic:
exact ne rfl
State after:
no goals

State before:
case intro.refine'_2.inl
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
X : Set α
C : M.ModularCut
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
x : α
he : x ∉ M.E
ex_basis : (C.extension x).Basis' I X
⊢ x ∈ (C.extension x).cl I
Tactic:
have xnI := (not_mem_subset hI.indep.subset_ground he)
State after:
case intro.refine'_2.inl
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
X : Set α
C : M.ModularCut
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
x : α
he : x ∉ M.E
ex_basis : (C.extension x).Basis' I X
xnI : x ∉ I
⊢ x ∈ (C.extension x).cl I

State before:
case intro.refine'_2.inl
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
X : Set α
C : M.ModularCut
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
x : α
he : x ∉ M.E
ex_basis : (C.extension x).Basis' I X
xnI : x ∉ I
⊢ x ∈ (C.extension x).cl I
Tactic:
rw [ex_basis.indep.mem_cl_iff, or_iff_left xnI, dep_iff,
 C.extension_ground, insert_subset_insert_iff xnI, (C.extension_indep x), not_or,
 and_iff_left (hI.indep.subset_ground)]
State after:
case intro.refine'_2.inl
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
X : Set α
C : M.ModularCut
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
x : α
he : x ∉ M.E
ex_basis : (C.extension x).Basis' I X
xnI : x ∉ I
⊢ ¬M.Indep (insert x I) ∧ ¬(x ∈ insert x I \ M.E ∧ M.Indep (insert x I \ {x}) ∧ M.cl (insert x I \ {x}) ∉ C)

State before:
case intro.refine'_2.inl
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
X : Set α
C : M.ModularCut
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
x : α
he : x ∉ M.E
ex_basis : (C.extension x).Basis' I X
xnI : x ∉ I
⊢ ¬M.Indep (insert x I) ∧ ¬(x ∈ insert x I \ M.E ∧ M.Indep (insert x I \ {x}) ∧ M.cl (insert x I \ {x}) ∉ C)
Tactic:
refine' ⟨fun hf ↦ he (hf.subset_ground (mem_insert _ _)), fun hf ↦ hf.2.2 _⟩
State after:
case intro.refine'_2.inl
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
X : Set α
C : M.ModularCut
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
x : α
he : x ∉ M.E
ex_basis : (C.extension x).Basis' I X
xnI : x ∉ I
hf : x ∈ insert x I \ M.E ∧ M.Indep (insert x I \ {x}) ∧ M.cl (insert x I \ {x}) ∉ C
⊢ M.cl (insert x I \ {x}) ∈ C

State before:
case intro.refine'_2.inl
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
X : Set α
C : M.ModularCut
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
x : α
he : x ∉ M.E
ex_basis : (C.extension x).Basis' I X
xnI : x ∉ I
hf : x ∈ insert x I \ M.E ∧ M.Indep (insert x I \ {x}) ∧ M.cl (insert x I \ {x}) ∉ C
⊢ M.cl (insert x I \ {x}) ∈ C
Tactic:
rwa [insert_diff_self_of_not_mem xnI, hI.cl_eq_cl]
State after:
no goals

State before:
case intro.refine'_2.inr.inl
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem : x ∈ M.cl I
x_dep : M.Dep (insert x I)
⊢ (C.extension e).Dep (insert x I) ∨ x ∈ I
Tactic:
refine' Or.inl (dep_iff.2 ⟨fun ind ↦ _, _⟩)
State after:
case intro.refine'_2.inr.inl.refine'_1
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem : x ∈ M.cl I
x_dep : M.Dep (insert x I)
ind : (C.extension e).Indep (insert x I)
⊢ False

case intro.refine'_2.inr.inl.refine'_2
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem : x ∈ M.cl I
x_dep : M.Dep (insert x I)
⊢ insert x I ⊆ (C.extension e).E

State before:
case intro.refine'_2.inr.inl.refine'_2
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem : x ∈ M.cl I
x_dep : M.Dep (insert x I)
⊢ insert x I ⊆ (C.extension e).E
Tactic:
rw [C.extension_ground]
State after:
case intro.refine'_2.inr.inl.refine'_2
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem : x ∈ M.cl I
x_dep : M.Dep (insert x I)
⊢ insert x I ⊆ insert e M.E

State before:
case intro.refine'_2.inr.inl.refine'_2
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem : x ∈ M.cl I
x_dep : M.Dep (insert x I)
⊢ insert x I ⊆ insert e M.E
Tactic:
exact (x_dep.subset_ground).trans (subset_insert _ _)
State after:
no goals

State before:
case intro.refine'_2.inr.inl.refine'_1
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem : x ∈ M.cl I
x_dep : M.Dep (insert x I)
ind : (C.extension e).Indep (insert x I)
⊢ False
Tactic:
obtain (M_ind | ⟨e_mem, _⟩) := (C.extension_indep e).1 ind
State after:
case intro.refine'_2.inr.inl.refine'_1.inl
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem : x ∈ M.cl I
x_dep : M.Dep (insert x I)
ind : (C.extension e).Indep (insert x I)
M_ind : M.Indep (insert x I)
⊢ False

case intro.refine'_2.inr.inl.refine'_1.inr.intro
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem : x ∈ M.cl I
x_dep : M.Dep (insert x I)
ind : (C.extension e).Indep (insert x I)
e_mem : e ∈ insert x I \ M.E
right✝ : M.Indep (insert x I \ {e}) ∧ M.cl (insert x I \ {e}) ∉ C
⊢ False

State before:
case intro.refine'_2.inr.inl.refine'_1.inr.intro
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem : x ∈ M.cl I
x_dep : M.Dep (insert x I)
ind : (C.extension e).Indep (insert x I)
e_mem : e ∈ insert x I \ M.E
right✝ : M.Indep (insert x I \ {e}) ∧ M.cl (insert x I \ {e}) ∉ C
⊢ False
Tactic:
exact he (x_dep.subset_ground e_mem.1)
State after:
no goals

State before:
case intro.refine'_2.inr.inl.refine'_1.inl
α : Type u_1
M : Matroid α
I✝ B : Set α
Ys Xs : Set (Set α)
e : α
X : Set α
C : M.ModularCut
he : e ∉ M.E
hX : M.cl X ∈ C
I : Set α
hI : M.Basis' I X
ex_basis : (C.extension e).Basis' I X
x : α
x_mem : x ∈ M.cl I
x_dep : M.Dep (insert x I)
ind : (C.extension e).Indep (insert x I)
M_ind : M.Indep (insert x I)
⊢ False
Tactic:
exact x_dep.not_indep M_ind
State after:
no goals