let repeat_periodic_pattern p k =
  assert (k > 0);
  let rec repeat v k =
    if k = 1 then v
    else repeat (p.v @ v) (k - 1)
  in
  { u = p.u; v = repeat p.v k; }