Theorem: CategoryTheory.PreGaloisCategory.isIso_of_mono_of_eq_card_fiber
File: Mathlib/CategoryTheory/Galois/Basic.lean

tactic: have : IsIso (F.map f) := by
  apply (ConcreteCategory.isIso_iff_bijective (F.map f)).mpr
  apply (Fintype.bijective_iff_injective_and_card (F.map f)).mpr
  refine ⟨injective_of_mono_of_preservesPullback (F.map f), ?_⟩
  simp only [← Nat.card_eq_fintype_card, h]
state_before: C : Type u₁
inst✝³ : Category.{u₂, u₁} C
inst✝² : PreGaloisCategory C
F : C ⥤ FintypeCat
inst✝¹ : FiberFunctor F
X Y : C
f : X ⟶ Y
inst✝ : Mono f
h : Nat.card ↑(F.obj X) = Nat.card ↑(F.obj Y)
⊢ IsIso f
state_after: C : Type u₁
inst✝³ : Category.{u₂, u₁} C
inst✝² : PreGaloisCategory C
F : C ⥤ FintypeCat
inst✝¹ : FiberFunctor F
X Y : C
f : X ⟶ Y
inst✝ : Mono f
h : Nat.card ↑(F.obj X) = Nat.card ↑(F.obj Y)
this : IsIso (F.map f)
⊢ IsIso f

tactic: exact isIso_of_reflects_iso f F
state_before: C : Type u₁
inst✝³ : Category.{u₂, u₁} C
inst✝² : PreGaloisCategory C
F : C ⥤ FintypeCat
inst✝¹ : FiberFunctor F
X Y : C
f : X ⟶ Y
inst✝ : Mono f
h : Nat.card ↑(F.obj X) = Nat.card ↑(F.obj Y)
this : IsIso (F.map f)
⊢ IsIso f
state_after: no goals

tactic: apply (ConcreteCategory.isIso_iff_bijective (F.map f)).mpr
state_before: C : Type u₁
inst✝³ : Category.{u₂, u₁} C
inst✝² : PreGaloisCategory C
F : C ⥤ FintypeCat
inst✝¹ : FiberFunctor F
X Y : C
f : X ⟶ Y
inst✝ : Mono f
h : Nat.card ↑(F.obj X) = Nat.card ↑(F.obj Y)
⊢ IsIso (F.map f)
state_after: C : Type u₁
inst✝³ : Category.{u₂, u₁} C
inst✝² : PreGaloisCategory C
F : C ⥤ FintypeCat
inst✝¹ : FiberFunctor F
X Y : C
f : X ⟶ Y
inst✝ : Mono f
h : Nat.card ↑(F.obj X) = Nat.card ↑(F.obj Y)
⊢ Function.Bijective ((forget FintypeCat).map (F.map f))

tactic: apply (Fintype.bijective_iff_injective_and_card (F.map f)).mpr
state_before: C : Type u₁
inst✝³ : Category.{u₂, u₁} C
inst✝² : PreGaloisCategory C
F : C ⥤ FintypeCat
inst✝¹ : FiberFunctor F
X Y : C
f : X ⟶ Y
inst✝ : Mono f
h : Nat.card ↑(F.obj X) = Nat.card ↑(F.obj Y)
⊢ Function.Bijective ((forget FintypeCat).map (F.map f))
state_after: C : Type u₁
inst✝³ : Category.{u₂, u₁} C
inst✝² : PreGaloisCategory C
F : C ⥤ FintypeCat
inst✝¹ : FiberFunctor F
X Y : C
f : X ⟶ Y
inst✝ : Mono f
h : Nat.card ↑(F.obj X) = Nat.card ↑(F.obj Y)
⊢ Function.Injective (F.map f) ∧ Fintype.card ↑(F.obj X) = Fintype.card ↑(F.obj Y)

tactic: refine ⟨injective_of_mono_of_preservesPullback (F.map f), ?_⟩
state_before: C : Type u₁
inst✝³ : Category.{u₂, u₁} C
inst✝² : PreGaloisCategory C
F : C ⥤ FintypeCat
inst✝¹ : FiberFunctor F
X Y : C
f : X ⟶ Y
inst✝ : Mono f
h : Nat.card ↑(F.obj X) = Nat.card ↑(F.obj Y)
⊢ Function.Injective (F.map f) ∧ Fintype.card ↑(F.obj X) = Fintype.card ↑(F.obj Y)
state_after: C : Type u₁
inst✝³ : Category.{u₂, u₁} C
inst✝² : PreGaloisCategory C
F : C ⥤ FintypeCat
inst✝¹ : FiberFunctor F
X Y : C
f : X ⟶ Y
inst✝ : Mono f
h : Nat.card ↑(F.obj X) = Nat.card ↑(F.obj Y)
⊢ Fintype.card ↑(F.obj X) = Fintype.card ↑(F.obj Y)

tactic: simp only [← Nat.card_eq_fintype_card, h]
state_before: C : Type u₁
inst✝³ : Category.{u₂, u₁} C
inst✝² : PreGaloisCategory C
F : C ⥤ FintypeCat
inst✝¹ : FiberFunctor F
X Y : C
f : X ⟶ Y
inst✝ : Mono f
h : Nat.card ↑(F.obj X) = Nat.card ↑(F.obj Y)
⊢ Fintype.card ↑(F.obj X) = Fintype.card ↑(F.obj Y)
state_after: no goals