Section file_id.
Class FileId := { file_id : Type; stdin : file_id; stdout : file_id }.
Context {FI : FileId}.
Context {E : Type -> Type} `{IO_event(file_id := file_id) -< E} {CS : compspecs}.
Class FileStruct := { abs_file :> FileId; FILEid : ident; reent : ident; f_stdin : ident; f_stdout : ident }.
Context {FS : FileStruct}.

Axiom init_stdio : emp |-- EX p : val, EX inp : val, EX outp : val, EX inp' : _, EX outp' : _,
!!(JMeq inp' inp /\ JMeq outp' outp) && reent_struct p *
field_at Ews (Tstruct reent noattr) [StructField f_stdin] inp' p *
field_at Ews (Tstruct reent noattr) [StructField f_stdout] outp' p *
file_at stdin inp * file_at stdout outp.