Fixpoint first_activations_rec (proof_tree : cbv) : list cbv :=
match proof_tree with
| cbv_constr lp _ _ _ _ => flat_map first_activations_rec lp
| cbv_split lp p _ _ _ _ => first_activations_rec p ++ flat_map first_activations_rec lp
| cbv_update _ _ _ _ _ _ _ as p' => [p']
| cbv_read _ _ _ => []
end.
Definition first_activations (proof_tree : cbv) : list cbv :=
match proof_tree with
| cbv_constr lp _ _ _ _ => []
| cbv_split lp p _ _ _ _ => []
| cbv_update _ _ p _ _ _ _ => first_activations_rec p
| cbv_read _ _ _ => []
end.
Definition strict_activations (proof_tree: cbv) :=
flat_map activations (first_activations proof_tree).

Lemma first_activation_is_update proof_tree p :
In p (first_activations proof_tree) -> exists i s p' c1 t c2 v, p = cbv_update i s p' c1 t c2 v.