///|
pub enum ValidationIssue {
  MissingDefinitions
  DuplicateIdentifier(String)
  UnknownIdentifier(String)
  NonMonotonicTime(Int64)
  InvalidWidth(String)
} derive(Debug, Eq)

///|
/// Check structural invariants that are useful before running analysis.
pub fn validate(trace : Trace) -> Array[ValidationIssue] {
  let issues : Array[ValidationIssue] = []
  if trace.signals.length() == 0 {
    issues.push(MissingDefinitions)
  }
  for i in 0..
        issues.push(NonMonotonicTime(change.time))
      _ => ()
    }
    previous = Some(change.time)
    if find_signal(trace, change.id) is None {
      issues.push(UnknownIdentifier(change.id))
    }
  }
  issues
}