(* Variables to be instantiated once the program is known. *)
Definition _f := 1%positive.(* alpha-convertible *)
Definition _args := 2%positive.(* alpha-convertible *)
Definition _lock := 1%positive.(* alpha-convertible *)
Definition _cond := 2%positive.(* alpha-convertible *)
(*Definition _lock_t := 2%positive. (* 2 (* or sometimes 3 -WM *) is the number given by
clightgen when threads.h is included first *)*)

Definition voidstar_funtype := Tfunction (Tcons (tptr tvoid) Tnil) (tptr tvoid) cc_default.(* Definition tlock := Tstruct _lock_t noattr. *)
Definition tlock := (Tarray (Tpointer Tvoid noattr) 2 noattr).(* Notation tlock := tuint (only parsing). *)

Goal forall (cenv: composite_env), @sizeof cenv tlock = LKSIZE.Definition selflock' Q sh p : unit -> mpred := HORec (selflock_fun Q sh p).Definition selflock Q sh p : mpred := selflock' Q sh p tt.

(* Specifications: *)
Lemma HOnonexpansive_nonexpansive: forall F: mpred -> mpred, nonexpansive F <-> HOnonexpansive (fun P (_ : unit) => F (P tt)).
Lemma selflock'_eq Q sh p : selflock' Q sh p = selflock_fun Q sh p (selflock' Q sh p).
Lemma HOnonexpansive_nonexpansive: forall F: mpred -> mpred, nonexpansive F <-> HOnonexpansive (fun P (_ : unit) => F (P tt)).
Lemma selflock'_eq Q sh p : selflock' Q sh p = selflock_fun Q sh p (selflock' Q sh p).