@@ -1025,69 +1025,6 @@ end; simpl in *.
1025
1025
exact: @ordered_dynamic_nodes_no_dup _ _ _ _ Tree_FailMsgParams _ _ _ H.
1026
1026
Qed .
1027
1027
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
-
1091
1028
Lemma Tree_in_level_adjacent_or_incoming_new :
1092
1029
forall net failed tr,
1093
1030
step_ordered_dynamic_failure_star step_ordered_dynamic_failure_init (failed, net) tr ->
@@ -1610,51 +1547,242 @@ Lemma Tree_notin_adjacent_not_sent_level :
1610
1547
forall net failed tr,
1611
1548
step_ordered_dynamic_failure_star step_ordered_dynamic_failure_init (failed, net) tr ->
1612
1549
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) ->
1615
1552
forall lvo', ~ In (Level lvo') (net.(odnwPackets) n n').
1616
1553
Proof .
1617
1554
move => net failed tr H_step.
1618
1555
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 .
1620
1557
remember step_ordered_dynamic_failure_init as y in *.
1621
1558
move: Heqy.
1622
1559
induction H_step using refl_trans_1n_trace_n1_ind => H_init; first by rewrite H_init.
1623
1560
concludes.
1624
1561
match goal with
1625
1562
| [ H : step_ordered_dynamic_failure _ _ _ |- _ ] => invc H
1626
1563
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).
1629
1570
* 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.
1642
1577
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) //=.
1645
1581
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).
1647
1596
* 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.
1649
1602
- 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.
1651
1747
- 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'.
1654
1780
have H_neq: h <> n by auto.
1655
1781
rewrite collate_neq //.
1782
+ have H_fn: ~ In n failed0 by auto.
1783
+ have H_fn': ~ In n' failed0 by auto.
1656
1784
by eauto.
1657
- Admitted .
1785
+ Qed .
1658
1786
1659
1787
Lemma Tree_level_head_in_adjacent :
1660
1788
forall net failed tr,
@@ -2012,7 +2140,7 @@ end; simpl in *.
2012
2140
move => H_ins.
2013
2141
case: H_adj.
2014
2142
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'.
2016
2144
have H_ins': ~ In n (NSet.elements d.(adjacent)).
2017
2145
move => H_ins'.
2018
2146
case: H_ins.
0 commit comments