let add_loop_invariant_annot config vloop s ca b_list inv acc =
let assigns, loop_entry, loop_back , loop_core = acc in
match is_annot_for_config config vloop s b_list with
| TBRok
| TBRpart
->
if Wp_parameters.Invariants.get() then begin
let loop_core = add_prop_inv_fixpoint config loop_core
(WpStrategy.AcutB true) s ca inv
in assigns, loop_entry , loop_back , loop_core
end
else begin
let loop_entry = add_prop_inv_establish config loop_entry
WpStrategy.Agoal s ca inv in
let loop_back = add_prop_inv_preserve config loop_back
WpStrategy.Agoal s ca inv in
let loop_core = add_prop_inv_fixpoint config loop_core
WpStrategy.Ahyp s ca inv in
assigns, loop_entry , loop_back , loop_core
end
| TBRhyp ->
let kind =
if Wp_parameters.Invariants.get()
then (WpStrategy.AcutB false) else WpStrategy.Ahyp
in
let loop_core =
add_prop_inv_fixpoint config loop_core kind s ca inv
in assigns, loop_entry , loop_back , loop_core
| TBRno -> acc