(motive : List Qq.Impl.PatVarDecl → Sort u_1) →
  (x : List Qq.Impl.PatVarDecl) →
    (Unit → motive []) →
      ((fvarId : Lean.FVarId) →
          (userName : Lean.Name) →
            (rest : List Qq.Impl.PatVarDecl) →
              motive ({ ty := none, fvarId := fvarId, userName := userName } :: rest)) →
        ((ty : Q(Lean.Expr)) →
            (fvarId : Lean.FVarId) →
              (userName : Lean.Name) →
                (rest : List Qq.Impl.PatVarDecl) →
                  motive ({ ty := some ty, fvarId := fvarId, userName := userName } :: rest)) →
          motive x