```ts
function matchAt(grid: number[][], row: number, column: number, value: number): boolean {
  if (!Array.isArray(grid) || !grid.every(row => Array.isArray(row))) {
    throw new Error('Invalid grid');
  }
  if (row < 0 || row >= grid.length || column < 0 || column >= grid[row].length) {
    throw new Error('Grid index out of bounds');
  }

  return grid[row][column] === value;
}

function gridFind(grid: number[][], value: number): number[] {
  if (!Array.isArray(grid) || !grid.every(row => Array.isArray(row))) {
    throw new Error('Invalid grid');
  }

  for (let i = 0; i < grid.length; i++) {
    for (let j = 0; j < grid[i].length; j++) {
      if (grid[i][j] === value) {
        return [i, j];
      }
    }
  }

  throw new Error('Value not found in the grid');
}
```