/-- The basis on `S` generated by powers of `h.root`.

Auxiliary definition for `IsAdjoinRootMonic.powerBasis`. -/
def basis (h : IsAdjoinRootMonic S f) : Basis (Fin (natDegree f)) R S :=
  Basis.ofRepr
    { toFun := fun x => (h.modByMonicHom x).toFinsupp.comapDomain _ (Fin.val_injective.injOn _)
      invFun := fun g => h.map (ofFinsupp (g.mapDomain _))
      left_inv := fun x => by
        cases subsingleton_or_nontrivial R
        · 

Proof state:
case inl
R : Type u
S : Type v
inst✝² : CommRing R
inst✝¹ : Ring S
f : R[X]
inst✝ : Algebra R S
h : IsAdjoinRootMonic S f
x : S
h✝ : Subsingleton R
⊢ (fun g => h.map { toFinsupp := Finsupp.mapDomain (?m.1402729 h g) g })
      (AddHom.toFun
        {
            toAddHom :=
              {
                toFun := fun x =>
                  Finsupp.comapDomain Fin.val ((modByMonicHom h) x).toFinsupp
                    (_ : Set.InjOn Fin.val (Fin.val ⁻¹' ↑((modByMonicHom h) x).toFinsupp.support)),
                map_add' :=
                  (_ :
                    ∀ (x y : S),
                      (fun x =>
                            Finsupp.comapDomain Fin.val ((modByMonicHom h) x).toFinsupp
                              (_ : Set.InjOn Fin.val (Fin.val ⁻¹' ↑((modByMonicHom h) x).toFinsupp.support)))
                          (x + y) =
                        (fun x =>
                              Finsupp.comapDomain Fin.val ((modByMonicHom h) x).toFinsupp
                                (_ : Set.InjOn Fin.val (Fin.val ⁻¹' ↑((modByMonicHom h) x).toFinsupp.support)))
                            x +
                          (fun x =>
                              Finsupp.comapDomain Fin.val ((modByMonicHom h) x).toFinsupp
                                (_ : Set.InjOn Fin.val (Fin.val ⁻¹' ↑((modByMonicHom h) x).toFinsupp.support)))
                            y) },
            map_smul' :=
              (_ :
                ∀ (c : R) (x : S),
                  AddHom.toFun
                      {
                        toFun := fun x =>
                          Finsupp.comapDomain Fin.val ((modByMonicHom h) x).toFinsupp
                            (_ : Set.InjOn Fin.val (Fin.val ⁻¹' ↑((modByMonicHom h) x).toFinsupp.support)),
                        map_add' :=
                          (_ :
                            ∀ (x y : S),
                              (fun x =>
                                    Finsupp.comapDomain Fin.val ((modByMonicHom h) x).toFinsupp
                                      (_ : Set.InjOn Fin.val (Fin.val ⁻¹' ↑((modByMonicHom h) x).toFinsupp.support)))
                                  (x + y) =
                                (fun x =>
                                      Finsupp.comapDomain Fin.val ((modByMonicHom h) x).toFinsupp
                                        (_ : Set.InjOn Fin.val (Fin.val ⁻¹' ↑((modByMonicHom h) x).toFinsupp.support)))
                                    x +
                                  (fun x =>
                                      Finsupp.comapDomain Fin.val ((modByMonicHom h) x).toFinsupp
                                        (_ : Set.InjOn Fin.val (Fin.val ⁻¹' ↑((modByMonicHom h) x).toFinsupp.support)))
                                    y) }
                      (c • x) =
                    (RingHom.id R) c •
                      AddHom.toFun
                        {
                          toFun := fun x =>
                            Finsupp.comapDomain Fin.val ((modByMonicHom h) x).toFinsupp
                              (_ : Set.InjOn Fin.val (Fin.val ⁻¹' ↑((modByMonicHom h) x).toFinsupp.support)),
                          map_add' :=
                            (_ :
                              ∀ (x y : S),
                                (fun x =>
                                      Finsupp.comapDomain Fin.val ((modByMonicHom h) x).toFinsupp
                                        (_ : Set.InjOn Fin.val (Fin.val ⁻¹' ↑((modByMonicHom h) x).toFinsupp.support)))
                                    (x + y) =
                                  (fun x =>
                                        Finsupp.comapDomain Fin.val ((modByMonicHom h) x).toFinsupp
                                          (_ :
                                            Set.InjOn Fin.val (Fin.val ⁻¹' ↑((modByMonicHom h) x).toFinsupp.support)))
                                      x +
                                    (fun x =>
                                        Finsupp.comapDomain Fin.val ((modByMonicHom h) x).toFinsupp
                                          (_ :
                                            Set.InjOn Fin.val (Fin.val ⁻¹' ↑((modByMonicHom h) x).toFinsupp.support)))
                                      y) }
                        x) }.toAddHom
        x) =
    x

Next tactic:
haveI := h.subsingleton