-- Module: Mathlib.CategoryTheory.Galois.Prorepresentability
Goal:
C : Type u₁
inst : Category.{u₂, u₁} C
inst_1 : GaloisCategory.{u₁, u₂} C
F : C ⥤ FintypeCat
inst_2 : FiberFunctor F
x x_1 : PointedGaloisObject F
A : C
a : (F.obj A).obj
isGalois : IsGalois.{u₁, u₂} A
B : C
b : (F.obj B).obj
isGalois_1 : IsGalois.{u₁, u₂} B
x_2 x_3 :
  { obj := A, pt := a, isGalois := isGalois : PointedGaloisObject F } ⟶ { obj := B, pt := b, isGalois := isGalois_1 }
f :
  { obj := A, pt := a, isGalois := isGalois : PointedGaloisObject F }.obj ⟶
    { obj := B, pt := b, isGalois := isGalois_1 : PointedGaloisObject F }.obj
hf :
  (@ConcreteCategory.hom _ (ObjectProperty.FullSubcategory.category Finite)
          (fun (X Y : ObjectProperty.FullSubcategory Finite) ↦ TypeCat.Fun X.obj Y.obj)
          (fun (X : ObjectProperty.FullSubcategory Finite) ↦ X.obj)
          (fun (X Y : ObjectProperty.FullSubcategory Finite) ↦
            (TypeCat.instFunLikeFun : FunLike (TypeCat.Fun X.obj Y.obj) X.obj Y.obj))
          _ _ _ (F.map f) :
        (a :
            (fun (X : ObjectProperty.FullSubcategory Finite) ↦ X.obj)
              (F.obj { obj := A, pt := a, isGalois := isGalois }.obj)) →
          (fun (X : ObjectProperty.FullSubcategory Finite) ↦ X.obj)
            (F.obj { obj := B, pt := b, isGalois := isGalois_1 }.obj))
      { obj := A, pt := a, isGalois := isGalois : PointedGaloisObject F }.pt =
    { obj := B, pt := b, isGalois := isGalois_1 : PointedGaloisObject F }.pt
g :
  { obj := A, pt := a, isGalois := isGalois : PointedGaloisObject F }.obj ⟶
    { obj := B, pt := b, isGalois := isGalois_1 : PointedGaloisObject F }.obj
hg :
  (@ConcreteCategory.hom _ (ObjectProperty.FullSubcategory.category Finite)
          (fun (X Y : ObjectProperty.FullSubcategory Finite) ↦ TypeCat.Fun X.obj Y.obj)
          (fun (X : ObjectProperty.FullSubcategory Finite) ↦ X.obj)
          (fun (X Y : ObjectProperty.FullSubcategory Finite) ↦
            (TypeCat.instFunLikeFun : FunLike (TypeCat.Fun X.obj Y.obj) X.obj Y.obj))
          _ _ _ (F.map g) :
        (a :
            (fun (X : ObjectProperty.FullSubcategory Finite) ↦ X.obj)
              (F.obj { obj := A, pt := a, isGalois := isGalois }.obj)) →
          (fun (X : ObjectProperty.FullSubcategory Finite) ↦ X.obj)
            (F.obj { obj := B, pt := b, isGalois := isGalois_1 }.obj))
      { obj := A, pt := a, isGalois := isGalois : PointedGaloisObject F }.pt =
    { obj := B, pt := b, isGalois := isGalois_1 : PointedGaloisObject F }.pt
obtain :
  ∀ (Z : C) (h : Z ⟶ A) (z : (F.obj Z).obj) (hgal : IsGalois.{u₁, u₂} Z)
    (hhz :
      (@ConcreteCategory.hom _ (ObjectProperty.FullSubcategory.category Finite)
              (fun (X Y : ObjectProperty.FullSubcategory Finite) ↦ TypeCat.Fun X.obj Y.obj)
              (fun (X : ObjectProperty.FullSubcategory Finite) ↦ X.obj)
              (fun (X Y : ObjectProperty.FullSubcategory Finite) ↦
                (TypeCat.instFunLikeFun : FunLike (TypeCat.Fun X.obj Y.obj) X.obj Y.obj))
              _ _ _ (F.map h) :
            (a : (fun (X : ObjectProperty.FullSubcategory Finite) ↦ X.obj) (F.obj Z)) →
              (fun (X : ObjectProperty.FullSubcategory Finite) ↦ X.obj) (F.obj A))
          z =
        a),
    ∃ (W : PointedGaloisObject F) (h : W ⟶ { obj := A, pt := a, isGalois := isGalois }),
      h ≫
          { val := f, comp := hf :
            { obj := A, pt := a, isGalois := isGalois : PointedGaloisObject F }.Hom
              { obj := B, pt := b, isGalois := isGalois_1 : PointedGaloisObject F } } =
        h ≫ { val := g, comp := hg }
⊢ ∃ (W : PointedGaloisObject F) (h : W ⟶ { obj := A, pt := a, isGalois := isGalois }),
    h ≫
        { val := f, comp := hf :
          { obj := A, pt := a, isGalois := isGalois : PointedGaloisObject F }.Hom
            { obj := B, pt := b, isGalois := isGalois_1 : PointedGaloisObject F } } =
      h ≫ { val := g, comp := hg }

Tactic:
obtain ⟨Z, h, z, hgal, hhz⟩ := exists_hom_from_galois_of_fiber F A a

Premises used: CategoryTheory.PreGaloisCategory.exists_hom_from_galois_of_fiber