Skip to content

Commit 2906e95

Browse files
committed
Merge branch 'master' of github.com:DistributedComponents/verdi-aggregation
2 parents cb7ca8e + 7291cc4 commit 2906e95

File tree

1 file changed

+217
-89
lines changed

1 file changed

+217
-89
lines changed

systems/TreeDynamicCorrect.v

Lines changed: 217 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -1025,69 +1025,6 @@ end; simpl in *.
10251025
exact: @ordered_dynamic_nodes_no_dup _ _ _ _ Tree_FailMsgParams _ _ _ H.
10261026
Qed.
10271027

1028-
Lemma Tree_in_level_adjacent_or_incoming_new' :
1029-
forall net failed tr,
1030-
step_ordered_dynamic_failure_star step_ordered_dynamic_failure_init (failed, net) tr ->
1031-
forall n, In n net.(odnwNodes) -> ~ In n failed ->
1032-
forall n', In n' net.(odnwNodes) ->
1033-
forall lvo', In (Level lvo') (net.(odnwPackets) n' n) ->
1034-
forall d, net.(odnwState) n = Some d ->
1035-
NSet.In n' d.(adjacent) \/ In New (net.(odnwPackets) n' n).
1036-
Proof.
1037-
move => net failed tr H.
1038-
change failed with (fst (failed, net)).
1039-
change net with (snd (failed, net)) at 1 3 4 5.
1040-
remember step_ordered_dynamic_failure_init as y in *.
1041-
move: Heqy.
1042-
induction H using refl_trans_1n_trace_n1_ind => H_init {failed}; first by rewrite H_init.
1043-
concludes.
1044-
match goal with
1045-
| [ H : step_ordered_dynamic_failure _ _ _ |- _ ] => invc H
1046-
end; simpl in *.
1047-
- move => n H_n H_f n' H_n' lvo'.
1048-
break_or_hyp; break_or_hyp.
1049-
* rewrite collate_ls_not_in; last by apply: not_in_not_in_filter_rel; eauto using in_remove_all_was_in.
1050-
rewrite collate_map2snd_not_in; last by eauto using in_remove_all_was_in.
1051-
by rewrite (Tree_self_channel_empty H).
1052-
* rewrite collate_ls_not_in; last by apply: not_in_not_in_filter_rel; eauto using in_remove_all_was_in.
1053-
case (adjacent_to_dec n' n) => H_dec; last first.
1054-
rewrite collate_map2snd_not_related //.
1055-
by rewrite (@ordered_dynamic_no_outgoing_uninitialized _ _ _ _ Tree_FailMsgParams _ _ _ H).
1056-
have H_nd := @ordered_dynamic_nodes_no_dup _ _ _ _ Tree_FailMsgParams _ _ _ H.
1057-
rewrite collate_map2snd_not_in_related //.
1058-
rewrite (@ordered_dynamic_no_outgoing_uninitialized _ _ _ _ Tree_FailMsgParams _ _ _ H) //=.
1059-
move => H_or.
1060-
by break_or_hyp.
1061-
* have H_neq: n <> n' by move => H_eq; find_reverse_rewrite.
1062-
case (adjacent_to_dec n n') => H_dec; last first.
1063-
rewrite collate_ls_not_related //.
1064-
rewrite collate_neq //.
1065-
by rewrite (Tree_inactive_no_incoming H).
1066-
case (in_dec name_eq_dec n' failed) => H_dec'; last first.
1067-
have H_nd := @ordered_dynamic_nodes_no_dup _ _ _ _ Tree_FailMsgParams _ _ _ H.
1068-
rewrite collate_ls_live_related //.
1069-
rewrite collate_neq //.
1070-
rewrite (Tree_inactive_no_incoming H) //=.
1071-
move => H_or.
1072-
by break_or_hyp.
1073-
rewrite collate_ls_in_remove_all //.
1074-
rewrite collate_neq //.
1075-
by rewrite (Tree_inactive_no_incoming H).
1076-
* have H_neq: h <> n by move => H_eq; find_reverse_rewrite.
1077-
have H_neq': h <> n' by move => H_eq; repeat find_rewrite.
1078-
rewrite collate_ls_neq_to //.
1079-
rewrite collate_neq //.
1080-
rewrite_update.
1081-
by eauto.
1082-
- find_apply_lem_hyp net_handlers_NetHandler.
1083-
(* net_handler_cases => //=. *)
1084-
by admit.
1085-
- find_apply_lem_hyp input_handlers_IOHandler.
1086-
(* io_handler_cases => //=. *)
1087-
by admit.
1088-
- by admit.
1089-
Admitted.
1090-
10911028
Lemma Tree_in_level_adjacent_or_incoming_new :
10921029
forall net failed tr,
10931030
step_ordered_dynamic_failure_star step_ordered_dynamic_failure_init (failed, net) tr ->
@@ -1610,51 +1547,242 @@ Lemma Tree_notin_adjacent_not_sent_level :
16101547
forall net failed tr,
16111548
step_ordered_dynamic_failure_star step_ordered_dynamic_failure_init (failed, net) tr ->
16121549
forall n, In n net.(odnwNodes) -> ~ In n failed ->
1613-
forall d, net.(odnwState) n = Some d ->
1614-
forall n', ~ NSet.In n' d.(adjacent) ->
1550+
forall n', In n' net.(odnwNodes) -> ~ In n' failed ->
1551+
forall d, net.(odnwState) n = Some d -> ~ NSet.In n' d.(adjacent) ->
16151552
forall lvo', ~ In (Level lvo') (net.(odnwPackets) n n').
16161553
Proof.
16171554
move => net failed tr H_step.
16181555
change failed with (fst (failed, net)).
1619-
change net with (snd (failed, net)) at 1 3 4.
1556+
change net with (snd (failed, net)) at 1 3 5 6.
16201557
remember step_ordered_dynamic_failure_init as y in *.
16211558
move: Heqy.
16221559
induction H_step using refl_trans_1n_trace_n1_ind => H_init; first by rewrite H_init.
16231560
concludes.
16241561
match goal with
16251562
| [ H : step_ordered_dynamic_failure _ _ _ |- _ ] => invc H
16261563
end; simpl in *.
1627-
- move => n H_n H_f d H_eq_d n' H_ins lvo'.
1628-
break_or_hyp.
1564+
- move => n H_n H_f n' H_n' H_f' d H_d H_ins lvo'.
1565+
break_or_hyp; break_or_hyp.
1566+
* have H_rel: ~ adjacent_to n n by apply adjacent_to_irreflexive.
1567+
rewrite collate_ls_not_related //.
1568+
rewrite collate_map2snd_not_related //.
1569+
by rewrite (@ordered_dynamic_no_outgoing_uninitialized _ _ _ _ Tree_FailMsgParams _ _ _ H_step1).
16291570
* rewrite_update.
1630-
find_injection.
1631-
simpl in *.
1632-
rewrite collate_ls_not_in; last by apply: not_in_not_in_filter_rel; eauto using in_remove_all_was_in.
1633-
case (adjacent_to_dec n n') => H_adj; last first.
1634-
rewrite collate_map2snd_not_related //.
1635-
by rewrite (@ordered_dynamic_no_outgoing_uninitialized _ _ _ _ Tree_FailMsgParams _ _ _ H_step1).
1636-
case (in_dec name_eq_dec n' net0.(odnwNodes)) => H_dec; last first.
1637-
rewrite collate_map2snd_not_in_remove_all //.
1638-
by rewrite (@ordered_dynamic_no_outgoing_uninitialized _ _ _ _ Tree_FailMsgParams _ _ _ H_step1).
1639-
case (in_dec name_eq_dec n' failed0) => H_dec'.
1640-
rewrite collate_map2snd_in //.
1641-
by rewrite (@ordered_dynamic_no_outgoing_uninitialized _ _ _ _ Tree_FailMsgParams _ _ _ H_step1).
1571+
have H_neq: n' <> n by move => H_eq; subst_max.
1572+
case (adjacent_to_dec n' n) => H_dec; last first.
1573+
rewrite collate_ls_not_related //.
1574+
rewrite collate_neq //.
1575+
by rewrite (Tree_inactive_no_incoming H_step1).
1576+
case (in_dec name_eq_dec n' failed0) => H_dec'; first by rewrite collate_ls_in_remove_all.
16421577
have H_nd := @ordered_dynamic_nodes_no_dup _ _ _ _ Tree_FailMsgParams _ _ _ H_step1.
1643-
rewrite collate_map2snd_not_in_related //.
1644-
rewrite (@ordered_dynamic_no_outgoing_uninitialized _ _ _ _ Tree_FailMsgParams _ _ _ H_step1) //=.
1578+
rewrite collate_ls_live_related //.
1579+
rewrite collate_neq //.
1580+
rewrite (Tree_inactive_no_incoming H_step1) //=.
16451581
move => H_in.
1646-
by break_or_hyp.
1582+
by case: H_in.
1583+
* rewrite_update.
1584+
find_injection.
1585+
simpl in *.
1586+
have H_neq: n <> n' by move => H_eq; subst_max.
1587+
rewrite collate_ls_neq_to //.
1588+
case (adjacent_to_dec n n') => H_adj.
1589+
have H_nd := @ordered_dynamic_nodes_no_dup _ _ _ _ Tree_FailMsgParams _ _ _ H_step1.
1590+
rewrite collate_map2snd_not_in_related //.
1591+
rewrite (@ordered_dynamic_no_outgoing_uninitialized _ _ _ _ Tree_FailMsgParams _ _ _ H_step1) //=.
1592+
move => H_in.
1593+
by break_or_hyp.
1594+
rewrite collate_map2snd_not_related //.
1595+
by rewrite (@ordered_dynamic_no_outgoing_uninitialized _ _ _ _ Tree_FailMsgParams _ _ _ H_step1).
16471596
* have H_neq: h <> n by move => H_eq; subst_max.
1648-
by admit.
1597+
have H_neq': h <> n' by move => H_eq; subst_max.
1598+
rewrite collate_ls_neq_to //.
1599+
rewrite collate_neq //.
1600+
rewrite_update.
1601+
by eauto.
16491602
- find_apply_lem_hyp net_handlers_NetHandler.
1650-
by admit.
1603+
net_handler_cases => //=; simpl in *; update2_destruct_max_simplify;
1604+
update_destruct_max_simplify; repeat find_rewrite; auto; try tuple_inversion; try find_injection; repeat find_rewrite.
1605+
* by find_rewrite_lem (Tree_self_channel_empty H_step1).
1606+
* have H_bef := Tree_in_after_all_fail_level H_step1 _ H1 H0 _ H9 lvo'.
1607+
find_rewrite.
1608+
simpl in *.
1609+
break_or_hyp => //.
1610+
by break_and.
1611+
* case (name_eq_dec from n) => H_dec.
1612+
subst_max.
1613+
by find_rewrite_lem (Tree_self_channel_empty H_step1).
1614+
case (name_eq_dec from n') => H_dec'.
1615+
subst_max.
1616+
have H_f := Tree_not_failed_no_fail H_step1 _ H12 H13 n.
1617+
find_rewrite.
1618+
case: H_f.
1619+
by left.
1620+
have H_ins: ~ NSet.In n' d.(adjacent).
1621+
move => H_ins.
1622+
case: H15.
1623+
exact: NSetFacts.remove_2.
1624+
by have IH := IHH_step1 _ H9 H11 _ H12 H13 _ H2 H_ins lvo'.
1625+
* by eauto.
1626+
* by find_rewrite_lem (Tree_self_channel_empty H_step1).
1627+
* have H_f := Tree_not_failed_no_fail H_step1 _ H10 H12 n'.
1628+
find_rewrite.
1629+
by case: H_f; left.
1630+
* case (name_eq_dec from n') => H_dec.
1631+
subst_max.
1632+
have H_f := Tree_not_failed_no_fail H_step1 _ H13 H14 n.
1633+
find_rewrite.
1634+
by case: H_f; left.
1635+
have H_ins: ~ NSet.In n' d.(adjacent).
1636+
move => H_ins.
1637+
case: H16.
1638+
by auto with set.
1639+
by eauto.
1640+
* by eauto.
1641+
* by find_rewrite_lem (Tree_self_channel_empty H_step1).
1642+
* have H_f := Tree_not_failed_no_fail H_step1 _ H10 H12 n'.
1643+
find_rewrite.
1644+
by case: H_f; left.
1645+
* case (name_eq_dec from n') => H_dec.
1646+
subst_max.
1647+
have H_f := Tree_not_failed_no_fail H_step1 _ H13 H14 n.
1648+
find_rewrite.
1649+
by case: H_f; left.
1650+
have H_ins: ~ NSet.In n' d.(adjacent).
1651+
move => H_ins.
1652+
case: H16.
1653+
by auto with set.
1654+
by eauto.
1655+
* by eauto.
1656+
* by find_rewrite_lem (Tree_self_channel_empty H_step1).
1657+
* have IH := IHH_step1 _ H4 H6 _ H7 H8 _ H9 H10 x.
1658+
find_rewrite.
1659+
by case: IH; left.
1660+
* by eauto.
1661+
* by eauto.
1662+
* by find_rewrite_lem (Tree_self_channel_empty H_step1).
1663+
* have IH := IHH_step1 _ H H6 _ H7 H8 _ H9 H10 lvo'.
1664+
find_rewrite.
1665+
case: IH.
1666+
by right.
1667+
* by eauto.
1668+
* by eauto.
1669+
* by find_rewrite_lem (Tree_self_channel_empty H_step1).
1670+
* have IH := IHH_step1 _ H4 H6 _ H7 H8 _ H9 H10 (Some x).
1671+
find_rewrite.
1672+
by case: IH; left.
1673+
* by eauto.
1674+
* by eauto.
1675+
* by find_rewrite_lem (Tree_self_channel_empty H_step1).
1676+
* have IH := IHH_step1 _ H10 H12 _ H13 H14 _ H15 H16 lvo'.
1677+
find_rewrite.
1678+
by case: IH; right.
1679+
* by eauto.
1680+
* by eauto.
1681+
* by find_rewrite_lem (Tree_self_channel_empty H_step1).
1682+
* have IH := IHH_step1 _ H10 H12 _ H13 H14 _ H15 H16 lvo'.
1683+
find_rewrite.
1684+
by case: IH; right.
1685+
* by eauto.
1686+
* by eauto.
1687+
* by find_rewrite_lem (Tree_self_channel_empty H_step1).
1688+
* by find_rewrite_lem (Tree_self_channel_empty H_step1).
1689+
* have H_neq: from <> n by move => H_eq; subst_max.
1690+
case (name_eq_dec from n') => H_dec.
1691+
subst_max.
1692+
by auto with set.
1693+
rewrite_update2.
1694+
have H_ins: ~ NSet.In n' d.(adjacent).
1695+
move => H_ins.
1696+
case: H15.
1697+
by auto with set.
1698+
by eauto.
1699+
* have H_neq: from <> to by move => H_eq; subst_max.
1700+
case (name_eq_dec from n) => H_dec.
1701+
subst_max.
1702+
rewrite_update2.
1703+
case (name_eq_dec to n') => H_dec'.
1704+
subst_max.
1705+
rewrite_update2.
1706+
have IH := IHH_step1 _ H9 H11 _ H12 H13 _ H14 H15 lvo'.
1707+
find_rewrite.
1708+
case: IH.
1709+
by right.
1710+
rewrite_update2.
1711+
by eauto.
1712+
rewrite_update2.
1713+
by eauto.
1714+
* by auto with set.
1715+
* have IH := IHH_step1 _ H10 H12 _ H13 H14 _ H15 H16 lvo'.
1716+
find_rewrite.
1717+
case: IH.
1718+
by right.
1719+
* case (name_eq_dec from n') => H_dec.
1720+
subst_max.
1721+
by auto with set.
1722+
have H_ins: ~ NSet.In n' d.(adjacent) by auto with set.
1723+
by eauto.
1724+
* by eauto.
1725+
* by find_rewrite_lem (Tree_self_channel_empty H_step1).
1726+
* by find_rewrite_lem (Tree_self_channel_empty H_step1).
1727+
* have H_neq: from <> n by move => H_eq; subst_max.
1728+
case (name_eq_dec from n') => H_dec.
1729+
subst_max.
1730+
by auto with set.
1731+
rewrite_update2.
1732+
have H_ins: ~ NSet.In n' d.(adjacent) by auto with set.
1733+
by eauto.
1734+
* case (name_eq_dec from n) => H_dec.
1735+
subst_max.
1736+
rewrite_update2.
1737+
case (name_eq_dec to n') => H_dec'.
1738+
subst_max.
1739+
rewrite_update2.
1740+
have IH := IHH_step1 _ H5 H7 _ H1 H0 _ H10 H11 lvo'.
1741+
find_rewrite.
1742+
by case: IH; right.
1743+
rewrite_update2.
1744+
by eauto.
1745+
rewrite_update2.
1746+
by eauto.
16511747
- find_apply_lem_hyp input_handlers_IOHandler.
1652-
by admit.
1653-
- move => n H_n H_f d H_d n' H_ins lvo'.
1748+
io_handler_cases => //=; simpl in *;
1749+
update_destruct_max_simplify; repeat find_rewrite; auto; try tuple_inversion; try find_injection; repeat find_rewrite.
1750+
* by eauto.
1751+
* by eauto.
1752+
* have IH := IHH_step1 _ H9 H11 _ H12 H13 _ H2 H15 lvo'.
1753+
have H_ins: ~ In n' (NSet.elements d.(adjacent)).
1754+
move => H_ins.
1755+
case: H15.
1756+
have H_adj_in_spec := NSet.elements_spec1 d.(adjacent) n'.
1757+
apply H_adj_in_spec.
1758+
apply InA_alt.
1759+
by exists n'.
1760+
contradict H16.
1761+
move: H_ins.
1762+
rewrite /level_adjacent NSet.fold_spec /flip /=.
1763+
elim: NSet.elements => //=.
1764+
move => k ns IH' H_in.
1765+
have H_neq: k <> n' by auto.
1766+
rewrite (@fold_left_level_fold_eq Tree_TreeMsg) /=.
1767+
rewrite {2}/level_fold /= collate_app /=.
1768+
rewrite_update2.
1769+
have H_in': ~ In n' ns by auto.
1770+
exact: IH'.
1771+
* rewrite collate_neq // in H16.
1772+
by eauto.
1773+
* by eauto.
1774+
* by eauto.
1775+
* by eauto.
1776+
* by eauto.
1777+
* by eauto.
1778+
* by eauto.
1779+
- move => n H_n H_f n' H_n' H_f' d H_d H_ins lvo'.
16541780
have H_neq: h <> n by auto.
16551781
rewrite collate_neq //.
1782+
have H_fn: ~ In n failed0 by auto.
1783+
have H_fn': ~ In n' failed0 by auto.
16561784
by eauto.
1657-
Admitted.
1785+
Qed.
16581786

16591787
Lemma Tree_level_head_in_adjacent :
16601788
forall net failed tr,
@@ -2012,7 +2140,7 @@ end; simpl in *.
20122140
move => H_ins.
20132141
case: H_adj.
20142142
exact: (Tree_in_adj_adjacent_to H_step1 _ H12 H0 H2 H_ins).
2015-
have H_inl := Tree_notin_adjacent_not_sent_level H_step1 _ H1 H0 H2 H_ins lvo'.
2143+
have H_inl := Tree_notin_adjacent_not_sent_level H_step1 _ H1 H0 H9 H11 H2 H_ins lvo'.
20162144
have H_ins': ~ In n (NSet.elements d.(adjacent)).
20172145
move => H_ins'.
20182146
case: H_ins.

0 commit comments

Comments
 (0)