Skip to content

Commit 34e5348

Browse files
Update lean-toolchain for leanprover/lean4#10524
2 parents d74a602 + ee3b351 commit 34e5348

24 files changed

+313
-299
lines changed

Batteries.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import Batteries.Data.BinaryHeap
2424
import Batteries.Data.BinomialHeap
2525
import Batteries.Data.BitVec
2626
import Batteries.Data.ByteArray
27-
import Batteries.Data.ByteSubarray
27+
import Batteries.Data.ByteSlice
2828
import Batteries.Data.Char
2929
import Batteries.Data.DList
3030
import Batteries.Data.Fin

Batteries/Control/OptionT.lean

Lines changed: 0 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -14,63 +14,12 @@ This file contains lemmas about the behavior of `OptionT` and `OptionT.run`.
1414

1515
namespace OptionT
1616

17-
@[ext] theorem ext {x x' : OptionT m α} (h : x.run = x'.run) : x = x' := h
18-
19-
@[simp] theorem run_mk {m : Type _ → Type _} (x : m (Option α)) :
20-
OptionT.run (OptionT.mk x) = x := rfl
21-
22-
@[simp] theorem run_pure (a) [Monad m] : (pure a : OptionT m α).run = pure (some a) := rfl
23-
24-
@[simp] theorem run_bind (f : α → OptionT m β) [Monad m] :
25-
(x >>= f).run = Option.elimM x.run (pure none) (run ∘ f) := by
26-
change x.run >>= _ = _
27-
simp [Option.elimM]
28-
exact bind_congr fun |some _ => rfl | none => rfl
29-
30-
@[simp] theorem run_map (x : OptionT m α) (f : α → β) [Monad m] [LawfulMonad m] :
31-
(f <$> x).run = Option.map f <$> x.run := by
32-
rw [← bind_pure_comp _ x.run]
33-
change x.run >>= _ = _
34-
exact bind_congr fun |some _ => rfl | none => rfl
35-
3617
@[simp] theorem run_monadLift [Monad m] [LawfulMonad m] [MonadLiftT n m] (x : n α) :
3718
(monadLift x : OptionT m α).run = some <$> (monadLift x : m α) := (map_eq_pure_bind _ _).symm
3819

3920
@[simp] theorem run_mapConst [Monad m] [LawfulMonad m] (x : OptionT m α) (y : β) :
4021
(Functor.mapConst y x).run = Option.map (Function.const α y) <$> x.run := run_map _ _
4122

42-
instance (m) [Monad m] [LawfulMonad m] : LawfulMonad (OptionT m) :=
43-
LawfulMonad.mk'
44-
(id_map := by
45-
intros; apply OptionT.ext; simp only [OptionT.run_map]
46-
rw [map_congr, id_map]
47-
intro a; cases a <;> rfl)
48-
(bind_assoc := by
49-
refine fun _ _ _ => OptionT.ext ?_
50-
simp only [run_bind, Option.elimM, bind_assoc]
51-
refine bind_congr fun | some x => by simp [Option.elimM] | none => by simp)
52-
(pure_bind := by intros; apply OptionT.ext; simp)
53-
54-
@[simp] theorem run_failure [Monad m] : (failure : OptionT m α).run = pure none := rfl
55-
56-
@[simp] theorem run_orElse [Monad m] (x : OptionT m α) (y : OptionT m α) :
57-
(x <|> y).run = Option.elimM x.run y.run (pure ∘ some) :=
58-
bind_congr fun | some _ => rfl | none => rfl
59-
60-
@[simp] theorem run_seq [Monad m] [LawfulMonad m] (f : OptionT m (α → β)) (x : OptionT m α) :
61-
(f <*> x).run = Option.elimM f.run (pure none) (fun f => Option.map f <$> x.run) := by
62-
simp only [seq_eq_bind, run_bind, run_map, Function.comp_def]
63-
64-
@[simp] theorem run_seqLeft [Monad m] [LawfulMonad m] (x : OptionT m α) (y : OptionT m β) :
65-
(x <* y).run = Option.elimM x.run (pure none)
66-
(fun x => Option.map (Function.const β x) <$> y.run) := by
67-
simp [seqLeft_eq, seq_eq_bind, Option.elimM, Function.comp_def]
68-
69-
@[simp] theorem run_seqRight [Monad m] [LawfulMonad m] (x : OptionT m α) (y : OptionT m β) :
70-
(x *> y).run = Option.elimM x.run (pure none) (Function.const α y.run) := by
71-
simp only [seqRight_eq, run_seq, run_map, Option.elimM_map]
72-
refine bind_congr (fun | some _ => by simp [Option.elim] | none => by simp [Option.elim])
73-
7423
@[simp] theorem run_monadMap {n} [MonadFunctorT n m] (f : ∀ {α}, n α → n α) :
7524
(monadMap (@f) x : OptionT m α).run = monadMap (@f) x.run := rfl
7625

Batteries/Data/Array/Match.lean

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ def PrefixTable.extend [BEq α] (t : PrefixTable α) (x : α) : PrefixTable α w
6161
def mkPrefixTable [BEq α] (xs : Array α) : PrefixTable α := xs.foldl (·.extend) default
6262

6363
/-- Make prefix table from a pattern stream -/
64-
partial def mkPrefixTableOfStream [BEq α] [Stream σ α] (stream : σ) : PrefixTable α :=
64+
partial def mkPrefixTableOfStream [BEq α] [Std.Stream σ α] (stream : σ) : PrefixTable α :=
6565
loop default stream
6666
where
6767
/-- Inner loop for `mkPrefixTableOfStream` -/
@@ -82,15 +82,15 @@ def Matcher.ofArray [BEq α] (pat : Array α) : Matcher α where
8282
table := mkPrefixTable pat
8383

8484
/-- Make a KMP matcher for a given a pattern stream -/
85-
def Matcher.ofStream [BEq α] [Stream σ α] (pat : σ) : Matcher α where
85+
def Matcher.ofStream [BEq α] [Std.Stream σ α] (pat : σ) : Matcher α where
8686
table := mkPrefixTableOfStream pat
8787

8888
/-- Find next match from a given stream
8989
9090
Runs the stream until it reads a sequence that matches the sought pattern, then returns the stream
9191
state at that point and an updated matcher state.
9292
-/
93-
partial def Matcher.next? [BEq α] [Stream σ α] (m : Matcher α) (stream : σ) :
93+
partial def Matcher.next? [BEq α] [Std.Stream σ α] (m : Matcher α) (stream : σ) :
9494
Option (σ × Matcher α) :=
9595
match Stream.next? stream with
9696
| none => none

Batteries/Data/Array/Monadic.lean

Lines changed: 25 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ in order to minimize dependence on `SatisfiesM`.
1616

1717
namespace Array
1818

19-
theorem SatisfiesM_foldlM [Monad m] [LawfulMonad m]
20-
{as : Array α} (motive : Nat → β → Prop) {init : β} (h0 : motive 0 init) {f : β → α → m β}
19+
theorem SatisfiesM_foldlM [Monad m] [LawfulMonad m] {as : Array α} {init : β}
20+
{motive : Nat → β → Prop} {f : β → α → m β} (h0 : motive 0 init)
2121
(hf : ∀ i : Fin as.size, ∀ b, motive i.1 b → SatisfiesM (motive (i.1 + 1)) (f b as[i])) :
2222
SatisfiesM (motive as.size) (as.foldlM f init) := by
2323
let rec go {i j b} (h₁ : j ≤ as.size) (h₂ : as.size ≤ i + j) (H : motive j b) :
@@ -30,9 +30,8 @@ theorem SatisfiesM_foldlM [Monad m] [LawfulMonad m]
3030
· next hj => exact Nat.le_antisymm h₁ (Nat.ge_of_not_lt hj) ▸ .pure H
3131
simp [foldlM]; exact go (Nat.zero_le _) (Nat.le_refl _) h0
3232

33-
theorem SatisfiesM_mapM [Monad m] [LawfulMonad m] (as : Array α) (f : α → m β)
34-
(motive : Nat → Prop) (h0 : motive 0)
35-
(p : Fin as.size → β → Prop)
33+
theorem SatisfiesM_mapM [Monad m] [LawfulMonad m] {as : Array α} {f : α → m β}
34+
{motive : Nat → Prop} {p : Fin as.size → β → Prop} (h0 : motive 0)
3635
(hs : ∀ i, motive i.1 → SatisfiesM (p i · ∧ motive (i + 1)) (f as[i])) :
3736
SatisfiesM
3837
(fun arr => motive as.size ∧ ∃ eq : arr.size = as.size, ∀ i h, p ⟨i, h⟩ arr[i])
@@ -48,26 +47,19 @@ theorem SatisfiesM_mapM [Monad m] [LawfulMonad m] (as : Array α) (f : α → m
4847
simp [getElem_push] at hj ⊢; split; {apply ih₂}
4948
cases j; cases (Nat.le_or_eq_of_le_succ hj).resolve_left ‹_›; cases eq; exact h₁
5049

51-
theorem SatisfiesM_mapM' [Monad m] [LawfulMonad m] (as : Array α) (f : α → m β)
52-
(p : Fin as.size → β → Prop)
50+
theorem SatisfiesM_mapM' [Monad m] [LawfulMonad m] {as : Array α} {f : α → m β}
51+
{p : Fin as.size → β → Prop}
5352
(hs : ∀ i, SatisfiesM (p i) (f as[i])) :
5453
SatisfiesM
5554
(fun arr => ∃ eq : arr.size = as.size, ∀ i h, p ⟨i, h⟩ arr[i])
5655
(Array.mapM f as) :=
57-
(SatisfiesM_mapM _ _ (fun _ => True) trivial _ (fun _ h => (hs _).imp (⟨·, h⟩))).imp (·.2)
56+
(SatisfiesM_mapM (motive := fun _ => True) trivial (fun _ h => (hs _).imp (⟨·, h⟩))).imp (·.2)
5857

5958
theorem size_mapM [Monad m] [LawfulMonad m] (f : α → m β) (as : Array α) :
6059
SatisfiesM (fun arr => arr.size = as.size) (Array.mapM f as) :=
61-
(SatisfiesM_mapM' _ _ (fun _ _ => True) (fun _ => .trivial)).imp (·.1)
60+
(SatisfiesM_mapM' (fun _ => .trivial)).imp (·.1)
6261

63-
proof_wanted size_mapIdxM [Monad m] [LawfulMonad m] (as : Array α) (f : Nat → α → m β) :
64-
SatisfiesM (fun arr => arr.size = as.size) (Array.mapIdxM f as)
65-
66-
proof_wanted size_mapFinIdxM [Monad m] [LawfulMonad m]
67-
(as : Array α) (f : (i : Nat) → α → (h : i < as.size) → m β) :
68-
SatisfiesM (fun arr => arr.size = as.size) (Array.mapFinIdxM as f)
69-
70-
theorem SatisfiesM_anyM [Monad m] [LawfulMonad m] (p : α → m Bool) (as : Array α) (start stop)
62+
theorem SatisfiesM_anyM [Monad m] [LawfulMonad m] {p : α → m Bool} {as : Array α}
7163
(hstart : start ≤ min stop as.size) (tru : Prop) (fal : Nat → Prop) (h0 : fal start)
7264
(hp : ∀ i : Fin as.size, i.1 < stop → fal i.1
7365
SatisfiesM (bif · then tru else fal (i + 1)) (p as[i])) :
@@ -91,14 +83,14 @@ theorem SatisfiesM_anyM [Monad m] [LawfulMonad m] (p : α → m Bool) (as : Arra
9183
exact go hstart _ h0 fun i hi => hp i <| Nat.lt_of_lt_of_le hi <| Nat.min_le_left ..
9284

9385
theorem SatisfiesM_anyM_iff_exists [Monad m] [LawfulMonad m]
94-
(p : α → m Bool) (as : Array α) (start stop) (q : Fin as.size → Prop)
86+
{p : α → m Bool} {as : Array α} {q : Fin as.size → Prop}
9587
(hp : ∀ i : Fin as.size, start ≤ i.1 → i.1 < stop → SatisfiesM (· = true ↔ q i) (p as[i])) :
9688
SatisfiesM
9789
(fun res => res = true ↔ ∃ i : Fin as.size, start ≤ i.1 ∧ i.1 < stop ∧ q i)
9890
(anyM p as start stop) := by
9991
cases Nat.le_total start (min stop as.size) with
10092
| inl hstart =>
101-
refine (SatisfiesM_anyM _ _ _ _ hstart
93+
refine (SatisfiesM_anyM hstart
10294
(fal := fun j => start ≤ j ∧ ¬ ∃ i : Fin as.size, start ≤ i.1 ∧ i.1 < j ∧ q i)
10395
(tru := ∃ i : Fin as.size, start ≤ i.1 ∧ i.1 < stop ∧ q i) ?_ ?_).imp ?_
10496
· exact ⟨Nat.le_refl _, fun ⟨i, h₁, h₂, _⟩ => (Nat.not_le_of_gt h₂ h₁).elim⟩
@@ -118,8 +110,8 @@ theorem SatisfiesM_anyM_iff_exists [Monad m] [LawfulMonad m]
118110
cases Nat.not_lt.2 (Nat.le_trans hstart h₁) (Nat.lt_min.2 ⟨h₂, j.2⟩)
119111

120112
theorem SatisfiesM_foldrM [Monad m] [LawfulMonad m]
121-
{as : Array α} (motive : Nat → β → Prop)
122-
{init : β} (h0 : motive as.size init) {f : α → β → m β}
113+
{as : Array α} {init : β} {motive : Nat → β → Prop} {f : α → β → m β}
114+
(h0 : motive as.size init)
123115
(hf : ∀ i : Fin as.size, ∀ b, motive (i.1 + 1) b → SatisfiesM (motive i.1) (f as[i] b)) :
124116
SatisfiesM (motive 0) (as.foldrM f init) := by
125117
let rec go {i b} (hi : i ≤ as.size) (H : motive i b) :
@@ -133,11 +125,10 @@ theorem SatisfiesM_foldrM [Monad m] [LawfulMonad m]
133125
simp [foldrM]; split; {exact go _ h0}
134126
· next h => exact .pure (Nat.eq_zero_of_not_pos h ▸ h0)
135127

136-
theorem SatisfiesM_mapFinIdxM [Monad m] [LawfulMonad m] (as : Array α)
137-
(f : (i : Nat) → α → (h : i < as.size) → m β)
138-
(motive : Nat → Prop) (h0 : motive 0)
139-
(p : (i : Nat) → β → (h : i < as.size) → Prop)
140-
(hs : ∀ i h, motive i → SatisfiesM (p i · h ∧ motive (i + 1)) (f i as[i] h)) :
128+
theorem SatisfiesM_mapFinIdxM [Monad m] [LawfulMonad m]
129+
{as : Array α} {f : (i : Nat) → α → i < as.size → m β} {motive : Nat → Prop}
130+
{p : (i : Nat) → β → i < as.size → Prop}
131+
(h0 : motive 0) (hs : ∀ i h, motive i → SatisfiesM (p i · h ∧ motive (i + 1)) (f i as[i] h)) :
141132
SatisfiesM
142133
(fun arr => motive as.size ∧ ∃ eq : arr.size = as.size, ∀ i h, p i arr[i] h)
143134
(Array.mapFinIdxM as f) := by
@@ -156,27 +147,26 @@ theorem SatisfiesM_mapFinIdxM [Monad m] [LawfulMonad m] (as : Array α)
156147
· next h => cases h₁.symm ▸ (Nat.le_or_eq_of_le_succ hi').resolve_left h; exact hb.1
157148
simp [mapFinIdxM]; exact go rfl nofun h0
158149

159-
theorem SatisfiesM_mapIdxM [Monad m] [LawfulMonad m] (as : Array α) (f : Nat → α → m β)
160-
(motive : Nat → Prop) (h0 : motive 0)
161-
(p : (i : Nat) → β → (h : i < as.size) → Prop)
162-
(hs : ∀ i h, motive i → SatisfiesM (p i · h ∧ motive (i + 1)) (f i as[i])) :
150+
theorem SatisfiesM_mapIdxM [Monad m] [LawfulMonad m] {as : Array α} {f : Nat → α → m β}
151+
{p : (i : Nat) → β → i < as.size → Prop} {motive : Nat → Prop}
152+
(h0 : motive 0) (hs : ∀ i h, motive i → SatisfiesM (p i · h ∧ motive (i + 1)) (f i as[i])) :
163153
SatisfiesM
164154
(fun arr => motive as.size ∧ ∃ eq : arr.size = as.size, ∀ i h, p i arr[i] h)
165155
(as.mapIdxM f) :=
166-
SatisfiesM_mapFinIdxM as (fun i a _ => f i a) motive h0 p hs
156+
SatisfiesM_mapFinIdxM h0 hs
167157

168158
theorem size_mapFinIdxM [Monad m] [LawfulMonad m]
169-
(as : Array α) (f : (i : Nat) → α → (h : i < as.size) → m β) :
159+
(as : Array α) (f : (i : Nat) → α → i < as.size → m β) :
170160
SatisfiesM (fun arr => arr.size = as.size) (Array.mapFinIdxM as f) :=
171-
(SatisfiesM_mapFinIdxM _ _ (fun _ => True) trivial (fun _ _ _ => True)
161+
(SatisfiesM_mapFinIdxM (motive := fun _ => True) trivial
172162
(fun _ _ _ => .of_true fun _ => ⟨trivial, trivial⟩)).imp (·.2.1)
173163

174164
theorem size_mapIdxM [Monad m] [LawfulMonad m] (as : Array α) (f : Nat → α → m β) :
175165
SatisfiesM (fun arr => arr.size = as.size) (Array.mapIdxM f as) :=
176166
size_mapFinIdxM _ _
177167

178-
theorem size_modifyM [Monad m] [LawfulMonad m] (a : Array α) (i : Nat) (f : α → m α) :
179-
SatisfiesM (·.size = a.size) (a.modifyM i f) := by
168+
theorem size_modifyM [Monad m] [LawfulMonad m] (as : Array α) (i : Nat) (f : α → m α) :
169+
SatisfiesM (·.size = as.size) (as.modifyM i f) := by
180170
unfold modifyM; split
181171
· exact .bind_pre <| .of_true fun _ => .pure <| by simp only [size_set]
182172
· exact .pure rfl

Batteries/Data/AssocList.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -252,8 +252,8 @@ def pop? : AssocList α β → Option ((α × β) × AssocList α β)
252252
| nil => none
253253
| cons a b l => some ((a, b), l)
254254

255-
instance : ToStream (AssocList α β) (AssocList α β) := ⟨fun x => x⟩
256-
instance : Stream (AssocList α β) (α × β) := ⟨pop?⟩
255+
instance : Std.ToStream (AssocList α β) (AssocList α β) := ⟨fun x => x⟩
256+
instance : Std.Stream (AssocList α β) (α × β) := ⟨pop?⟩
257257

258258
/-- Converts a list into an `AssocList`. This is the inverse function to `AssocList.toList`. -/
259259
@[simp] def _root_.List.toAssocList : List (α × β) → AssocList α β

Batteries/Data/BinomialHeap/Basic.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -532,7 +532,7 @@ def ofArray (le : α → α → Bool) (as : Array α) : BinomialHeap α le := as
532532
| none => none
533533
| some (a, tl) => some (a, ⟨tl, b.2.deleteMin eq⟩)
534534

535-
instance : Stream (BinomialHeap α le) α := ⟨deleteMin⟩
535+
instance : Std.Stream (BinomialHeap α le) α := ⟨deleteMin⟩
536536

537537
/--
538538
`O(n log n)`. Implementation of `for x in (b : BinomialHeap α le) ...` notation,

0 commit comments

Comments
 (0)