code: func New(livevars ast.VarSet) *CopyPropagator {
  
  	sorted := make([]ast.Var, 0, len(livevars))
  	for v := range livevars {
  		sorted = append(sorted, v)
  	}
  
  	sort.Slice(sorted, func(i, j int) bool {
  		return sorted[i].Compare(sorted[j]) < 0
  	})
  
  	return &CopyPropagator{livevars: livevars, sorted: sorted}
  }
docs: // New returns a new CopyPropagator that optimizes queries while preserving vars
  // in the livevars set.