316
316
Lemma no_noise_means_correct_root_aggregate :
317
317
forall e n,
318
318
root n ->
319
+ step_ordered_dynamic_failure_star step_ordered_dynamic_failure_init e.(evt_a) e.(evt_trace) ->
319
320
In n e.(evt_a).(snd).(odnwNodes) ->
320
321
~ In n e.(evt_a).(fst) ->
321
322
mass_conserved_opt_event e.(evt_a).(fst) e ->
@@ -331,24 +332,26 @@ Proof.
331
332
remember (remove_all name_eq_dec l o.(odnwNodes)) as live_nodes.
332
333
assert (H_sfb: sum_fail_balance_incoming_active_opt o.(odnwNodes) live_nodes o.(odnwPackets) o.(odnwState) = 1%g).
333
334
{
334
- unfold no_fail_incoming_active_event in *.
335
- unfold sum_fail_balance_incoming_active_opt.
336
- unfold non_root_nodes_have_unit in *.
337
- eapply sum_units_is_unit; intros.
338
- specialize (H5 a).
339
- destruct (odnwState o a) eqn:H_st; auto.
335
+ unfold no_fail_incoming_active_event, sum_fail_balance_incoming_active_opt, non_root_nodes_have_unit in *.
336
+ rewrite sum_units_is_unit; gsimpl; intros.
337
+ destruct (odnwState o a) eqn:H_st; last by auto.
338
+ match goal with
339
+ | [ |- (?b * ?q)%g = ?b ] =>
340
+ cut (q = 1%g);
341
+ first by intro; repeat find_rewrite; gsimpl
342
+ end.
340
343
unfold sum_fail_map_incoming.
341
344
rewrite sum_units_is_unit; gsimpl; intros.
342
- cut (exists d : data, odnwState (snd (evt_a e)) a = Some d /\ aggregate d = 1%g);
343
- [|by eapply _].
344
- intros; break_exists_name d'; break_and.
345
- repeat (simpl in *; find_rewrite).
346
- find_injection .
345
+ match goal with
346
+ | [ |- (?b * ?q)%g = ?b ] =>
347
+ cut (q = 1%g);
348
+ first by intro; repeat find_rewrite; gsimpl
349
+ end .
347
350
rewrite sum_fail_map_unit_when_no_fail; [by gsimpl|].
348
351
simpl.
349
352
cut (~ In Fail (odnwPackets o a0 a)); [by auto|].
350
- (* What is this, and why does it work? *)
351
- by eapply _ .
353
+ repeat (simpl in *; find_rewrite).
354
+ eauto using in_remove_all_not_in, in_remove_all_was_in .
352
355
}
353
356
rewrite !H_sfb; gsimpl.
354
357
assert (H_sam: sum_aggregate_msg_incoming_active o.(odnwNodes) live_nodes o.(odnwPackets) = 1%g).
@@ -357,10 +360,62 @@ Proof.
357
360
unfold sum_aggregate_msg_incoming.
358
361
unfold no_aggregate_incoming_active_event in *.
359
362
unfold sum_aggregate_msg.
360
- unfold aggregate_sum_fold.
361
363
admit.
362
364
}
363
365
rewrite !H_sam; gsimpl.
366
+ unfold sum_aggregate.
367
+ assert (In n live_nodes)
368
+ by (subst; auto using in_remove_all_preserve).
369
+ find_apply_lem_hyp in_split; break_exists; repeat find_rewrite.
370
+ rewrite Nodes_data_opt_split.
371
+ rewrite fold_right_app.
372
+ simpl in *.
373
+ unfold node_aggregate.
374
+ repeat find_rewrite.
375
+ autorewrite with gsimpl in *.
376
+ assert (exists d, odnwState o n = Some d)
377
+ by eauto using DynamicNetLemmas.ordered_dynamic_initialized_state.
378
+ break_exists_name root_st.
379
+ find_erewrite_lem sum_local_opt_app; eauto.
380
+ repeat (simpl in *; find_rewrite); simpl.
381
+ rewrite !sum_units_is_unit; [by gsimpl| |]; intros;
382
+ match goal with
383
+ | [ |- (?b * ?q)%g = ?b ] =>
384
+ cut (q = 1%g);
385
+ first by intro; repeat find_rewrite; gsimpl
386
+ end.
387
+ - unfold Nodes_data_opt in *.
388
+ assert (exists h, In h x0 /\ odnwState o h = Some a)
389
+ by admit; break_exists_name h; break_and.
390
+ assert (~ root h)
391
+ by admit.
392
+ find_eelim_prop non_root_nodes_have_unit; repeat find_rewrite; eauto.
393
+ * intros; break_and; repeat find_rewrite.
394
+ repeat (simpl in *; find_rewrite); find_injection.
395
+ auto.
396
+ * intros; break_and; repeat find_rewrite.
397
+ repeat (simpl in *; find_rewrite); simpl.
398
+ admit.
399
+ * cut (In h (remove_all name_eq_dec l (odnwNodes o)));
400
+ [by eauto using in_remove_all_not_in|].
401
+ find_rewrite.
402
+ auto with datatypes.
403
+ - unfold Nodes_data_opt in *.
404
+ assert (exists h, In h x0 /\ odnwState o h = Some a)
405
+ by admit; break_exists_name h; break_and.
406
+ assert (~ root h)
407
+ by admit.
408
+ find_eelim_prop non_root_nodes_have_unit; repeat find_rewrite; eauto.
409
+ * intros; break_and; repeat find_rewrite.
410
+ repeat (simpl in *; find_rewrite); find_injection.
411
+ auto.
412
+ * intros; break_and; repeat find_rewrite.
413
+ repeat (simpl in *; find_rewrite); simpl.
414
+ admit.
415
+ * cut (In h (remove_all name_eq_dec l (odnwNodes o)));
416
+ [by eauto using in_remove_all_not_in|].
417
+ find_rewrite.
418
+ auto with datatypes.
364
419
Admitted .
365
420
366
421
Theorem churn_free_stabilization :
0 commit comments