Admitted. (* Higher Order *)
Definition assn_sub X a P : Assertion :=
fun (st : state) =>
P (t_update st X (aeval st a)).
Notation "P [ X |-> a ]" := (assn_sub X a P) (at level 10).

(* Specifications: *)
Theorem hoare_asgn : forall Q X a,
{{assn_sub X a Q }} (X ::= a) {{Q}}.