@@ -42,62 +42,54 @@ theorem Internal.Impl.prune_LE_filter {α β} [Ord α] [TransOrd α] (t : Intern
4242 (t.prune_LE ord_t lower_bound).toList = t.toList.filter (fun e => (compare e.fst lower_bound).isGE) := by
4343 induction t
4444 case leaf =>
45- simp [ toList_eq_toListModel, prune_LE ]
45+ simp only [prune_LE, toList_eq_toListModel, toListModel_leaf, List.filter_nil ]
4646 case inner _ k v l r l_ih r_ih =>
47- simp [ toList_eq_toListModel, prune_LE ]
47+ simp only [prune_LE, toList_eq_toListModel, toListModel_inner, List.filter_append ]
4848 generalize heq : compare lower_bound k = x
4949 cases x
5050 case lt =>
51- simp
51+ simp only [toListModel_inner]
5252 specialize l_ih (Internal.Impl.Ordered.left ord_t)
5353 rw [toList_eq_toListModel] at l_ih
54- simp [l_ih, toList_eq_toListModel]
55- simp [List.filter]
56- rw [OrientedOrd.eq_swap] at heq
57- rw [Ordering.swap_eq_lt] at heq
58- simp [heq]
54+ simp only [l_ih, toList_eq_toListModel, List.filter, List.append_cancel_left_eq]
55+ rw [OrientedOrd.eq_swap, Ordering.swap_eq_lt] at heq
56+ simp only [heq, Ordering.isGE_gt, List.cons.injEq, true_and]
5957 symm
6058 apply List.filter_eq_self.2
6159 intro a mem
6260 apply Ordering.isGE_of_eq_gt
6361 apply TransCmp.gt_trans ?_ heq
64- rw [OrientedOrd.eq_swap]
65- rw [Ordering.swap_eq_gt]
62+ rw [OrientedOrd.eq_swap, Ordering.swap_eq_gt]
6663 exact Internal.Impl.Ordered.compare_right ord_t mem
6764 case eq =>
68- simp [ List.filter]
65+ simp only [toListModel_inner, toListModel_leaf, List.nil_append, List.filter]
6966 rw [OrientedCmp.eq_comm] at heq
70- simp [heq]
67+ simp only [heq, Ordering.isGE_eq ]
7168 suffices new_goal : List.filter (fun e => (compare e.fst lower_bound).isGE) l.toListModel = [] from by
72- simp [new_goal]
69+ simp only [new_goal, List.nil_append, List.cons.injEq, true_and ]
7370 symm
7471 apply List.filter_eq_self.2
7572 intro a mem
7673 apply Ordering.isGE_of_eq_gt
7774 apply TransCmp.gt_of_gt_of_eq ?_ heq
78- rw [OrientedOrd.eq_swap]
79- rw [Ordering.swap_eq_gt]
75+ rw [OrientedOrd.eq_swap, Ordering.swap_eq_gt]
8076 apply Internal.Impl.Ordered.compare_right ord_t mem
8177 rw [List.filter_eq_nil_iff]
8278 intro a mem
83- simp
84- apply TransCmp.lt_of_lt_of_eq
85- exact Internal.Impl.Ordered.compare_left ord_t mem
86- exact heq
79+ simp only [Bool.not_eq_true, Ordering.isGE_eq_false]
80+ exact TransCmp.lt_of_lt_of_eq (Internal.Impl.Ordered.compare_left ord_t mem) heq
8781 case gt =>
88- simp [List.filter]
89- rw [OrientedOrd.eq_swap] at heq
90- rw [Ordering.swap_eq_gt] at heq
82+ simp only [List.filter]
83+ rw [OrientedOrd.eq_swap, Ordering.swap_eq_gt] at heq
9184 simp [heq]
9285 suffices new_goal : List.filter (fun e => (compare e.fst lower_bound).isGE) l.toListModel = [] from by
9386 simp [new_goal]
9487 simp [toList_eq_toListModel] at r_ih
9588 apply r_ih
9689 rw [List.filter_eq_nil_iff]
9790 intro a mem
98- simp
99- apply TransCmp.lt_trans ?_ heq
100- exact Internal.Impl.Ordered.compare_left ord_t mem
91+ simp only [Bool.not_eq_true, Ordering.isGE_eq_false]
92+ exact TransCmp.lt_trans (Internal.Impl.Ordered.compare_left ord_t mem) heq
10193
10294theorem Internal.Impl.prune_LT_filter {α β} [Ord α] [TransOrd α] (t : Internal.Impl α β) (ord_t : t.Ordered) (lower_bound : α) :
10395 (t.prune_LT ord_t lower_bound).toList = t.toList.filter (fun e => (compare e.fst lower_bound).isGT) := by
@@ -129,13 +121,34 @@ theorem Internal.Impl.prune_LT_filter {α β} [Ord α] [TransOrd α] (t : Intern
129121 simp [List.filter]
130122 rw [OrientedCmp.eq_comm] at heq
131123 simp [heq]
132- sorry
124+ suffices new_goal : List.filter (fun e => (compare e.fst lower_bound).isGT) l.toListModel = [] ∧
125+ List.filter (fun e => (compare e.fst lower_bound).isGT) r.toListModel = r.toListModel from by
126+ simp [new_goal]
127+ apply And.intro
128+ . rw [List.filter_eq_nil_iff]
129+ intro a mem
130+ simp [← Ordering.isLE_iff_ne_gt]
131+ apply TransOrd.isLE_trans _ (Ordering.isLE_of_eq_eq heq)
132+ apply Ordering.isLE_of_eq_lt
133+ exact Internal.Impl.Ordered.compare_left ord_t mem
134+ . apply List.filter_eq_self.2
135+ intro a mem
136+ rw [Ordering.isGT_iff_eq_gt]
137+ apply TransCmp.gt_of_gt_of_eq ?_ heq
138+ rw [OrientedOrd.eq_swap, Ordering.swap_eq_gt]
139+ exact Internal.Impl.Ordered.compare_right ord_t mem
133140 case gt =>
134141 simp [List.filter]
135142 rw [OrientedOrd.eq_swap] at heq
136143 rw [Ordering.swap_eq_gt] at heq
137144 simp [heq]
138- sorry
145+ specialize r_ih (Ordered.right ord_t)
146+ rw [toList_eq_toListModel] at r_ih
147+ simp [r_ih, toList_eq_toListModel]
148+ intro a mem
149+ rw [← Ordering.isLE_iff_ne_gt]
150+ apply Ordering.isLE_of_eq_lt
151+ exact TransCmp.lt_trans (Internal.Impl.Ordered.compare_left ord_t mem) heq
139152
140153section MapIterator
141154public inductive Zipper (α : Type u) (β : α → Type v) where
0 commit comments