-- Mathlib/CategoryTheory/MorphismProperty/Basic.lean
@[simp]
lemma map_map (P : MorphismProperty C) (F : C ⥤ D) {E : Type*} [Category E] (G : D ⥤ E) :
    (P.map F).map G = P.map (F ⋙ G)

Proof state:
C : Type u
inst✝² : Category.{v, u} C
D : Type u_1
inst✝¹ : Category.{u_3, u_1} D
P : MorphismProperty C
F : C ⥤ D
E : Type u_2
inst✝ : Category.{u_4, u_2} E
G : D ⥤ E
⊢ (P.map F).map G = P.map (F ⋙ G)

Tactic:
apply le_antisymm

Result:
case a
C : Type u
inst✝² : Category.{v, u} C
D : Type u_1
inst✝¹ : Category.{u_3, u_1} D
P : MorphismProperty C
F : C ⥤ D
E : Type u_2
inst✝ : Category.{u_4, u_2} E
G : D ⥤ E
⊢ (P.map F).map G ≤ P.map (F ⋙ G)

case a
C : Type u
inst✝² : Category.{v, u} C
D : Type u_1
inst✝¹ : Category.{u_3, u_1} D
P : MorphismProperty C
F : C ⥤ D
E : Type u_2
inst✝ : Category.{u_4, u_2} E
G : D ⥤ E
⊢ P.map (F ⋙ G) ≤ (P.map F).map G

Proof state:
case a
C : Type u
inst✝² : Category.{v, u} C
D : Type u_1
inst✝¹ : Category.{u_3, u_1} D
P : MorphismProperty C
F : C ⥤ D
E : Type u_2
inst✝ : Category.{u_4, u_2} E
G : D ⥤ E
⊢ P.map F ≤ (P.map (F ⋙ G)).inverseImage G

Tactic:
intro X Y f ⟨X', Y', f', hf', ⟨e⟩⟩

Result:
case a
C : Type u
inst✝² : Category.{v, u} C
D : Type u_1
inst✝¹ : Category.{u_3, u_1} D
P : MorphismProperty C
F : C ⥤ D
E : Type u_2
inst✝ : Category.{u_4, u_2} E
G : D ⥤ E
X Y : D
f : X ⟶ Y
X' Y' : C
f' : X' ⟶ Y'
hf' : P f'
e : Arrow.mk (F.map f') ≅ Arrow.mk f
⊢ (P.map (F ⋙ G)).inverseImage G f

Proof state:
case a
C : Type u
inst✝² : Category.{v, u} C
D : Type u_1
inst✝¹ : Category.{u_3, u_1} D
P : MorphismProperty C
F : C ⥤ D
E : Type u_2
inst✝ : Category.{u_4, u_2} E
G : D ⥤ E
X Y : C
f : X ⟶ Y
hf : P f
⊢ ((P.map F).map G).inverseImage (F ⋙ G) f

Tactic:
exact map_mem_map _ _ _ (map_mem_map _ _ _ hf)

Result:
no goals

Proof state:
case a
C : Type u
inst✝² : Category.{v, u} C
D : Type u_1
inst✝¹ : Category.{u_3, u_1} D
P : MorphismProperty C
F : C ⥤ D
E : Type u_2
inst✝ : Category.{u_4, u_2} E
G : D ⥤ E
X Y : D
f : X ⟶ Y
X' Y' : C
f' : X' ⟶ Y'
hf' : P f'
e : Arrow.mk (F.map f') ≅ Arrow.mk f
⊢ (P.map (F ⋙ G)).inverseImage G f

Tactic:
exact ⟨X', Y', f', hf', ⟨G.mapArrow.mapIso e⟩⟩

Result:
no goals

Proof state:
case a
C : Type u
inst✝² : Category.{v, u} C
D : Type u_1
inst✝¹ : Category.{u_3, u_1} D
P : MorphismProperty C
F : C ⥤ D
E : Type u_2
inst✝ : Category.{u_4, u_2} E
G : D ⥤ E
⊢ P.map (F ⋙ G) ≤ (P.map F).map G

Tactic:
rw [map_le_iff]

Result:
case a
C : Type u
inst✝² : Category.{v, u} C
D : Type u_1
inst✝¹ : Category.{u_3, u_1} D
P : MorphismProperty C
F : C ⥤ D
E : Type u_2
inst✝ : Category.{u_4, u_2} E
G : D ⥤ E
⊢ P ≤ ((P.map F).map G).inverseImage (F ⋙ G)

Proof state:
case a
C : Type u
inst✝² : Category.{v, u} C
D : Type u_1
inst✝¹ : Category.{u_3, u_1} D
P : MorphismProperty C
F : C ⥤ D
E : Type u_2
inst✝ : Category.{u_4, u_2} E
G : D ⥤ E
⊢ (P.map F).map G ≤ P.map (F ⋙ G)

Tactic:
rw [map_le_iff]

Result:
case a
C : Type u
inst✝² : Category.{v, u} C
D : Type u_1
inst✝¹ : Category.{u_3, u_1} D
P : MorphismProperty C
F : C ⥤ D
E : Type u_2
inst✝ : Category.{u_4, u_2} E
G : D ⥤ E
⊢ P.map F ≤ (P.map (F ⋙ G)).inverseImage G

Proof state:
case a
C : Type u
inst✝² : Category.{v, u} C
D : Type u_1
inst✝¹ : Category.{u_3, u_1} D
P : MorphismProperty C
F : C ⥤ D
E : Type u_2
inst✝ : Category.{u_4, u_2} E
G : D ⥤ E
⊢ P ≤ ((P.map F).map G).inverseImage (F ⋙ G)

Tactic:
intro X Y f hf

Result:
case a
C : Type u
inst✝² : Category.{v, u} C
D : Type u_1
inst✝¹ : Category.{u_3, u_1} D
P : MorphismProperty C
F : C ⥤ D
E : Type u_2
inst✝ : Category.{u_4, u_2} E
G : D ⥤ E
X Y : C
f : X ⟶ Y
hf : P f
⊢ ((P.map F).map G).inverseImage (F ⋙ G) f