{P : Sort u} →
  {nextDeclIdx : ℕ} →
    {enodeMap : Lean.Meta.Grind.ENodeMap} →
      {exprs : Lean.PArray Lean.Expr} →
        {parents : Lean.Meta.Grind.ParentMap} →
          {congrTable : Lean.Meta.Grind.CongrTable enodeMap} →
            {appMap : Lean.PHashMap Lean.HeadIndex (List Lean.Expr)} →
              {indicesFound : Lean.PHashSet Lean.HeadIndex} →
                {newFacts : Array Lean.Meta.Grind.NewFact} →
                  {inconsistent : Bool} →
                    {nextIdx : ℕ} →
                      {newRawFacts : Std.Queue Lean.Meta.Grind.NewRawFact} →
                        {facts : Lean.PArray Lean.Expr} →
                          {extThms : Lean.PHashMap Lean.Meta.Sym.ExprPtr (Array Lean.Meta.Ext.ExtTheorem)} →
                            {ematch : Lean.Meta.Grind.EMatch.State} →
                              {inj : Lean.Meta.Grind.Injective.State} →
                                {split : Lean.Meta.Grind.Split.State} →
                                  {clean : Lean.Meta.Grind.Clean.State} →
                                    {sstates : Array Lean.Meta.Grind.SolverExtensionState} →
                                      {nextDeclIdx' : ℕ} →
                                        {enodeMap' : Lean.Meta.Grind.ENodeMap} →
                                          {exprs' : Lean.PArray Lean.Expr} →
                                            {parents' : Lean.Meta.Grind.ParentMap} →
                                              {congrTable' : Lean.Meta.Grind.CongrTable enodeMap'} →
                                                {appMap' : Lean.PHashMap Lean.HeadIndex (List Lean.Expr)} →
                                                  {indicesFound' : Lean.PHashSet Lean.HeadIndex} →
                                                    {newFacts' : Array Lean.Meta.Grind.NewFact} →
                                                      {inconsistent' : Bool} →
                                                        {nextIdx' : ℕ} →
                                                          {newRawFacts' : Std.Queue Lean.Meta.Grind.NewRawFact} →
                                                            {facts' : Lean.PArray Lean.Expr} →
                                                              {extThms' :
                                                                  Lean.PHashMap Lean.Meta.Sym.ExprPtr
                                                                    (Array Lean.Meta.Ext.ExtTheorem)} →
                                                                {ematch' : Lean.Meta.Grind.EMatch.State} →
                                                                  {inj' : Lean.Meta.Grind.Injective.State} →
                                                                    {split' : Lean.Meta.Grind.Split.State} →
                                                                      {clean' : Lean.Meta.Grind.Clean.State} →
                                                                        {sstates' :
                                                                            Array
                                                                              Lean.Meta.Grind.SolverExtensionState} →
                                                                          { nextDeclIdx := nextDeclIdx,
                                                                                enodeMap := enodeMap, exprs := exprs,
                                                                                parents := parents,
                                                                                congrTable := congrTable,
                                                                                appMap := appMap,
                                                                                indicesFound := indicesFound,
                                                                                newFacts := newFacts,
                                                                                inconsistent := inconsistent,
                                                                                nextIdx := nextIdx,
                                                                                newRawFacts := newRawFacts,
                                                                                facts := facts, extThms := extThms,
                                                                                ematch := ematch, inj := inj,
                                                                                split := split, clean := clean,
                                                                                sstates := sstates } =
                                                                              { nextDeclIdx := nextDeclIdx',
                                                                                enodeMap := enodeMap', exprs := exprs',
                                                                                parents := parents',
                                                                                congrTable := congrTable',
                                                                                appMap := appMap',
                                                                                indicesFound := indicesFound',
                                                                                newFacts := newFacts',
                                                                                inconsistent := inconsistent',
                                                                                nextIdx := nextIdx',
                                                                                newRawFacts := newRawFacts',
                                                                                facts := facts', extThms := extThms',
                                                                                ematch := ematch', inj := inj',
                                                                                split := split', clean := clean',
                                                                                sstates := sstates' } →
                                                                            (nextDeclIdx = nextDeclIdx' →
                                                                                enodeMap = enodeMap' →
                                                                                  exprs = exprs' →
                                                                                    parents = parents' →
                                                                                      congrTable ≍ congrTable' →
                                                                                        appMap = appMap' →
                                                                                          indicesFound = indicesFound' →
                                                                                            newFacts = newFacts' →
                                                                                              inconsistent =
                                                                                                  inconsistent' →
                                                                                                nextIdx = nextIdx' →
                                                                                                  newRawFacts =
                                                                                                      newRawFacts' →
                                                                                                    facts = facts' →
                                                                                                      extThms =
                                                                                                          extThms' →
                                                                                                        ematch =
                                                                                                            ematch' →
                                                                                                          inj = inj' →
                                                                                                            split =
                                                                                                                split' →
                                                                                                              clean =
                                                                                                                  clean' →
                                                                                                                sstates =
                                                                                                                    sstates' →
                                                                                                                  P) →
                                                                              P