/-- A proof that the identity map on α is computable in polytime. -/
def idComputableInPolyTime {α : Type} (ea : FinEncoding α) :
    @TM2ComputableInPolyTime α α ea ea id where
  tm := idComputer ea
  inputAlphabet := Equiv.cast rfl
  outputAlphabet := Equiv.cast rfl
  time := 1
  outputsFun _ :=
    { steps := 1
      evals_in_steps := rfl
      steps_le_m := by 

Proof state:
α : Type
ea : FinEncoding α
x✝ : α
⊢ { steps := 1,
        evals_in_steps :=
          (_ :
            (flip bind
                    (FinTM2.step
                      { tm := idComputer ea,
                          inputAlphabet :=
                            Equiv.cast
                              (_ :
                                FinTM2.Γ (idComputer ea) (idComputer ea).k₀ =
                                  FinTM2.Γ (idComputer ea) (idComputer ea).k₀),
                          outputAlphabet :=
                            Equiv.cast
                              (_ :
                                FinTM2.Γ (idComputer ea) (idComputer ea).k₁ =
                                  FinTM2.Γ (idComputer ea) (idComputer ea).k₁) }.tm))^[1]
                (some
                  (initList
                    { tm := idComputer ea,
                        inputAlphabet :=
                          Equiv.cast
                            (_ :
                              FinTM2.Γ (idComputer ea) (idComputer ea).k₀ =
                                FinTM2.Γ (idComputer ea) (idComputer ea).k₀),
                        outputAlphabet :=
                          Equiv.cast
                            (_ :
                              FinTM2.Γ (idComputer ea) (idComputer ea).k₁ =
                                FinTM2.Γ (idComputer ea) (idComputer ea).k₁) }.tm
                    (List.map
                      { tm := idComputer ea,
                            inputAlphabet :=
                              Equiv.cast
                                (_ :
                                  FinTM2.Γ (idComputer ea) (idComputer ea).k₀ =
                                    FinTM2.Γ (idComputer ea) (idComputer ea).k₀),
                            outputAlphabet :=
                              Equiv.cast
                                (_ :
                                  FinTM2.Γ (idComputer ea) (idComputer ea).k₁ =
                                    FinTM2.Γ (idComputer ea) (idComputer ea).k₁) }.inputAlphabet.invFun
                      (Encoding.encode ea.toEncoding x✝)))) =
              (flip bind
                    (FinTM2.step
                      { tm := idComputer ea,
                          inputAlphabet :=
                            Equiv.cast
                              (_ :
                                FinTM2.Γ (idComputer ea) (idComputer ea).k₀ =
                                  FinTM2.Γ (idComputer ea) (idComputer ea).k₀),
                          outputAlphabet :=
                            Equiv.cast
                              (_ :
                                FinTM2.Γ (idComputer ea) (idComputer ea).k₁ =
                                  FinTM2.Γ (idComputer ea) (idComputer ea).k₁) }.tm))^[1]
                (some
                  (initList
                    { tm := idComputer ea,
                        inputAlphabet :=
                          Equiv.cast
                            (_ :
                              FinTM2.Γ (idComputer ea) (idComputer ea).k₀ =
                                FinTM2.Γ (idComputer ea) (idComputer ea).k₀),
                        outputAlphabet :=
                          Equiv.cast
                            (_ :
                              FinTM2.Γ (idComputer ea) (idComputer ea).k₁ =
                                FinTM2.Γ (idComputer ea) (idComputer ea).k₁) }.tm
                    (List.map
                      { tm := idComputer ea,
                            inputAlphabet :=
                              Equiv.cast
                                (_ :
                                  FinTM2.Γ (idComputer ea) (idComputer ea).k₀ =
                                    FinTM2.Γ (idComputer ea) (idComputer ea).k₀),
                            outputAlphabet :=
                              Equiv.cast
                                (_ :
                                  FinTM2.Γ (idComputer ea) (idComputer ea).k₁ =
                                    FinTM2.Γ (idComputer ea) (idComputer ea).k₁) }.inputAlphabet.invFun
                      (Encoding.encode ea.toEncoding x✝))))) }.steps ≤
    Polynomial.eval (List.length (Encoding.encode ea.toEncoding x✝)) 1

Next tactic:
simp only [Polynomial.eval_one, le_refl]