Skip to content

Commit 05ba72e

Browse files
committed
left open iterator work
1 parent e957481 commit 05ba72e

File tree

1 file changed

+40
-27
lines changed

1 file changed

+40
-27
lines changed

src/Std/Data/DTreeMap/Slice.lean

Lines changed: 40 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -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

10294
theorem 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

140153
section MapIterator
141154
public inductive Zipper (α : Type u) (β : α → Type v) where

0 commit comments

Comments
 (0)