fact: Definition dijk_forloop_break_inv (g: @DijkGG size inf) sh src keys dist_ptr prev_ptr keys_ptr priq_ptr graph_ptr temp_ptr := EX prev: list V, EX dist: list Z, EX popped: list V, EX h : heap, PROP ( Permutation popped (VList g); dijkstra_correct g src popped prev dist) LOCAL (temp _pq priq_ptr; temp _temp (pointer_val_val temp_ptr); temp _keys (pointer_val_val keys_ptr)) SEP (data_at Tsh (tarray tint size) (map Vint (map Int.repr prev)) (pointer_val_val prev_ptr); data_at Tsh (tarray tint size) (map Vint (map Int.repr dist)) (pointer_val_val dist_ptr); @SpaceAdjMatGraph size CompSpecs sh id g (pointer_val_val graph_ptr); valid_pq priq_ptr h; data_at Tsh (tarray tint (heap_capacity h)) (map Vint (map Int.repr keys)) (pointer_val_val keys_ptr); data_at_ Tsh (tarray tint (sizeof (Tstruct _structItem noattr) / sizeof tint)) (pointer_val_val temp_ptr); free_tok (pointer_val_val temp_ptr) (sizeof (Tstruct _structItem noattr)); free_tok (pointer_val_val keys_ptr) (heap_capacity h * sizeof tint)).
imports: CertiGraph.graph.SpaceAdjMatGraph2 CertiGraph.dijkstra.dijkstra_env CertiGraph.dijkstra.MathDijkGraph CertiGraph.dijkstra.dijkstra_math_proof CertiGraph.dijkstra.dijkstra_spec2 CertiGraph.dijkstra.dijkstra_constants