Module Import Inter := Interpreter.Make Aut.Module Safe := Interpreter_safe.Make Aut Inter.Module Correct := Interpreter_correct.Make Aut Inter.Module Complete := Interpreter_complete.Make Aut Inter.Definition complete_validator:unit->bool := Complete.Valid.is_complete.Definition safe_validator:unit->bool := Safe.Valid.is_safe.Definition parse (safe:safe_validator ()=true) init n_steps buffer : parse_result init:=
  Safe.parse_with_safe (Safe.Valid.is_safe_correct safe) init buffer n_steps.

Theorem unambiguity: safe_validator () = true -> complete_validator () = true -> inhabited token -> forall init word, forall sem1 (tree1:parse_tree (NT (start_nt init)) word sem1), forall sem2 (tree2:parse_tree (NT (start_nt init)) word sem2), sem1 = sem2.