///|
/// Finite, compositional witnesses built from observed input structure. Every
/// primitive is charged to the normal evaluation/depth budgets and the whole
/// program is verified on every training pair before it can become a goal.
fn structural_completions(
  table : Table,
  target : Table,
  separators : Array[String],
) -> Array[Array[TableStep]] {
  let plans : Array[Array[TableStep]] = []
  let width = table.columns.length()
  let wanted : Map[String, Bool] = Map([])
  for row in target.rows {
    for value in row {
      wanted[value] = true
    }
  }
  let relevant : Array[String] = []
  for i, name in table.columns {
    if table.rows.any(row => !row[i].is_empty() && wanted.contains(row[i])) {
      relevant.push(name)
    }
  }
  for n in 1..= 3 {
    for variable in 0.. {
          n != table.columns[variable] && n != table.columns[value]
        })
        if !keys.is_empty() &&
          keys.any(name => {
            let i = column_index(table, name) catch { _ => return false }
            table.rows.any(row => row[i].is_empty())
          }) {
          plans.push([
            FillDown(keys),
            PivotGrid(keys, table.columns[variable], table.columns[value]),
          ])
        }
      }
    }
  }
  for n in 0.. {
          values.all(name => {
            let i = column_index(table, name) catch { _ => return false }
            row[i].split(sep).count() == 2
          })
        }) {
        continue
      }
      let value_name = "__loom_value"
      let label = "__loom_label"
      let payload = "__loom_payload"
      if keys.contains(value_name) ||
        keys.contains(label) ||
        keys.contains(payload) {
        continue
      }
      plans.push([
        Fold(keys, values, value_name),
        SplitColumn(value_name, sep, [label, payload]),
        PivotGrid(keys, label, payload),
      ])
    }
  }
  plans
}