Admitted. (* Higher Order *)

Theorem hoare_asgn_fwd :
(forall {X Y: Type} {f g : X -> Y},
(forall (x: X), f x = g x) ->  f = g) ->
forall m a P,
{{fun st => P st /\ t_lookup st X = m}}
X ::= a
{{fun st => P (t_update st X m)
/\ t_lookup st X = aeval (t_update st X m) a }}.