A proof assistant has essentially this structure. So, we use the user,
the outside world is the user, the output is a verified statement, the
inputs are uner's specifications. The user also inputs tactics to this
proof development system. This actually produces the proof object which
is checked by the proof checker. | ![]() |