code: func (s constraintSolver) fixPoint(ctx sessionctx.Context, exprs *exprSet) {
  	for {
  		saveLen := len(exprs.data)
  		s.iterOnce(ctx, exprs)
  		if saveLen == len(exprs.data) {
  			break
  		}
  	}
  }
docs: // fixPoint is the core of the constraint propagation algorithm.
  // It will iterate the expression set over and over again, pick two expressions,
  // apply one to another.
  // If new conditions can be inferred, they will be append into the expression set.
  // Until no more conditions can be inferred from the set, the algorithm finish.