Definition all_possible_sub_activation_same_rank (f: function) (lv: list term) : list term :=
  let psa := all_possible_subarguments lv in
  flat_map (fun g => map (fun sa => fapply g sa) psa) (functions_of_prog prog).

Lemma all_possible_sub_activation_same_rank_spec p' i s p c1 f lt c2 v: PPO_prog -> let proof_tree := cbv_update i s p c1 (fapply f lt) c2 v in wf proof_tree -> In p' (activations proof_tree) -> activation_rank rank p' = rank f -> In (proj_left p') (all_possible_sub_activation_same_rank f lt).