Theorem: Matroid.map_comap
File: Mathlib/Data/Matroid/Map.lean

tactic: refine eq_of_indep_iff_indep_forall (by simpa [image_preimage_eq_iff]) ?_
state_before: α : Type u_1
β : Type u_2
f✝ : α → β
E I s : Set α
M : Matroid α
N : Matroid β
f : α → β
h_range : N.E ⊆ range f
hf : InjOn f (f ⁻¹' N.E)
⊢ (N.comap f).map f hf = N
state_after: α : Type u_1
β : Type u_2
f✝ : α → β
E I s : Set α
M : Matroid α
N : Matroid β
f : α → β
h_range : N.E ⊆ range f
hf : InjOn f (f ⁻¹' N.E)
⊢ ∀ I ⊆ ((N.comap f).map f hf).E, ((N.comap f).map f hf).Indep I ↔ N.Indep I

tactic: simp only [map_ground, comap_ground_eq, map_indep_iff, comap_indep_iff, forall_subset_image_iff]
state_before: α : Type u_1
β : Type u_2
f✝ : α → β
E I s : Set α
M : Matroid α
N : Matroid β
f : α → β
h_range : N.E ⊆ range f
hf : InjOn f (f ⁻¹' N.E)
⊢ ∀ I ⊆ ((N.comap f).map f hf).E, ((N.comap f).map f hf).Indep I ↔ N.Indep I
state_after: α : Type u_1
β : Type u_2
f✝ : α → β
E I s : Set α
M : Matroid α
N : Matroid β
f : α → β
h_range : N.E ⊆ range f
hf : InjOn f (f ⁻¹' N.E)
⊢ ∀ t ⊆ f ⁻¹' N.E, (∃ I₀, (N.Indep (f '' I₀) ∧ InjOn f I₀) ∧ f '' t = f '' I₀) ↔ N.Indep (f '' t)

tactic: refine fun I hI ↦ ⟨fun ⟨I₀, ⟨hI₀, _⟩, hII₀⟩ ↦ ?_, fun h ↦ ⟨_, ⟨h, hf.mono hI⟩, rfl⟩⟩
state_before: α : Type u_1
β : Type u_2
f✝ : α → β
E I s : Set α
M : Matroid α
N : Matroid β
f : α → β
h_range : N.E ⊆ range f
hf : InjOn f (f ⁻¹' N.E)
⊢ ∀ t ⊆ f ⁻¹' N.E, (∃ I₀, (N.Indep (f '' I₀) ∧ InjOn f I₀) ∧ f '' t = f '' I₀) ↔ N.Indep (f '' t)
state_after: α : Type u_1
β : Type u_2
f✝ : α → β
E I✝ s : Set α
M : Matroid α
N : Matroid β
f : α → β
h_range : N.E ⊆ range f
hf : InjOn f (f ⁻¹' N.E)
I : Set α
hI : I ⊆ f ⁻¹' N.E
x✝ : ∃ I₀, (N.Indep (f '' I₀) ∧ InjOn f I₀) ∧ f '' I = f '' I₀
I₀ : Set α
hI₀ : N.Indep (f '' I₀)
right✝ : InjOn f I₀
hII₀ : f '' I = f '' I₀
⊢ N.Indep (f '' I)

tactic: suffices h : I₀ ⊆ f ⁻¹' N.E by rw [InjOn.image_eq_image_iff hf hI h] at hII₀; rwa [hII₀]
state_before: α : Type u_1
β : Type u_2
f✝ : α → β
E I✝ s : Set α
M : Matroid α
N : Matroid β
f : α → β
h_range : N.E ⊆ range f
hf : InjOn f (f ⁻¹' N.E)
I : Set α
hI : I ⊆ f ⁻¹' N.E
x✝ : ∃ I₀, (N.Indep (f '' I₀) ∧ InjOn f I₀) ∧ f '' I = f '' I₀
I₀ : Set α
hI₀ : N.Indep (f '' I₀)
right✝ : InjOn f I₀
hII₀ : f '' I = f '' I₀
⊢ N.Indep (f '' I)
state_after: α : Type u_1
β : Type u_2
f✝ : α → β
E I✝ s : Set α
M : Matroid α
N : Matroid β
f : α → β
h_range : N.E ⊆ range f
hf : InjOn f (f ⁻¹' N.E)
I : Set α
hI : I ⊆ f ⁻¹' N.E
x✝ : ∃ I₀, (N.Indep (f '' I₀) ∧ InjOn f I₀) ∧ f '' I = f '' I₀
I₀ : Set α
hI₀ : N.Indep (f '' I₀)
right✝ : InjOn f I₀
hII₀ : f '' I = f '' I₀
⊢ I₀ ⊆ f ⁻¹' N.E

tactic: exact (subset_preimage_image f I₀).trans <| preimage_mono (f := f) hI₀.subset_ground
state_before: α : Type u_1
β : Type u_2
f✝ : α → β
E I✝ s : Set α
M : Matroid α
N : Matroid β
f : α → β
h_range : N.E ⊆ range f
hf : InjOn f (f ⁻¹' N.E)
I : Set α
hI : I ⊆ f ⁻¹' N.E
x✝ : ∃ I₀, (N.Indep (f '' I₀) ∧ InjOn f I₀) ∧ f '' I = f '' I₀
I₀ : Set α
hI₀ : N.Indep (f '' I₀)
right✝ : InjOn f I₀
hII₀ : f '' I = f '' I₀
⊢ I₀ ⊆ f ⁻¹' N.E
state_after: no goals

tactic: simpa [image_preimage_eq_iff]
state_before: α : Type u_1
β : Type u_2
f✝ : α → β
E I s : Set α
M : Matroid α
N : Matroid β
f : α → β
h_range : N.E ⊆ range f
hf : InjOn f (f ⁻¹' N.E)
⊢ ((N.comap f).map f hf).E = N.E
state_after: no goals

tactic: rw [InjOn.image_eq_image_iff hf hI h] at hII₀
state_before: α : Type u_1
β : Type u_2
f✝ : α → β
E I✝ s : Set α
M : Matroid α
N : Matroid β
f : α → β
h_range : N.E ⊆ range f
hf : InjOn f (f ⁻¹' N.E)
I : Set α
hI : I ⊆ f ⁻¹' N.E
x✝ : ∃ I₀, (N.Indep (f '' I₀) ∧ InjOn f I₀) ∧ f '' I = f '' I₀
I₀ : Set α
hI₀ : N.Indep (f '' I₀)
right✝ : InjOn f I₀
hII₀ : f '' I = f '' I₀
h : I₀ ⊆ f ⁻¹' N.E
⊢ N.Indep (f '' I)
state_after: α : Type u_1
β : Type u_2
f✝ : α → β
E I✝ s : Set α
M : Matroid α
N : Matroid β
f : α → β
h_range : N.E ⊆ range f
hf : InjOn f (f ⁻¹' N.E)
I : Set α
hI : I ⊆ f ⁻¹' N.E
x✝ : ∃ I₀, (N.Indep (f '' I₀) ∧ InjOn f I₀) ∧ f '' I = f '' I₀
I₀ : Set α
hI₀ : N.Indep (f '' I₀)
right✝ : InjOn f I₀
hII₀ : I = I₀
h : I₀ ⊆ f ⁻¹' N.E
⊢ N.Indep (f '' I)

tactic: rwa [hII₀]
state_before: α : Type u_1
β : Type u_2
f✝ : α → β
E I✝ s : Set α
M : Matroid α
N : Matroid β
f : α → β
h_range : N.E ⊆ range f
hf : InjOn f (f ⁻¹' N.E)
I : Set α
hI : I ⊆ f ⁻¹' N.E
x✝ : ∃ I₀, (N.Indep (f '' I₀) ∧ InjOn f I₀) ∧ f '' I = f '' I₀
I₀ : Set α
hI₀ : N.Indep (f '' I₀)
right✝ : InjOn f I₀
hII₀ : I = I₀
h : I₀ ⊆ f ⁻¹' N.E
⊢ N.Indep (f '' I)
state_after: no goals