Skip to content

Commit 20dc6d3

Browse files
committed
keep equivalence lemmas in std
1 parent 10bb408 commit 20dc6d3

File tree

4 files changed

+40
-27
lines changed

4 files changed

+40
-27
lines changed

src/Init/Data/Iterators/Lemmas/Producers/Monadic/List.lean

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ module
88
prelude
99
public import Init.Data.Iterators.Lemmas.Consumers.Monadic
1010
public import Init.Data.Iterators.Producers.Monadic.List
11-
public import Std.Data.Iterators.Lemmas.Equivalence.Basic
1211

1312
@[expose] public section
1413

@@ -69,29 +68,4 @@ theorem _root_.List.toListRev_iterM [LawfulMonad m] {l : List β} :
6968
(l.iterM m).toListRev = pure l.reverse := by
7069
simp [IterM.toListRev_eq, List.toList_iterM]
7170

72-
section Equivalence
73-
74-
-- We don't want to pollute `List` with this rarely used lemma.
75-
theorem ListIterator.stepAsHetT_iterM [LawfulMonad m] {l : List β} :
76-
(l.iterM m).stepAsHetT = (match l with
77-
| [] => pure .done
78-
| x :: xs => pure (.yield (xs.iterM m) x)) := by
79-
simp only [List.iterM, toIterM, HetT.ext_iff, Equivalence.property_step, IterM.IsPlausibleStep,
80-
Iterator.IsPlausibleStep, Equivalence.prun_step]
81-
refine ⟨?_, ?_⟩
82-
· ext step
83-
cases step
84-
· cases l
85-
· simp [Pure.pure]
86-
· simp only [List.cons.injEq, pure, HetT.property_pure, IterStep.yield.injEq, IterM.ext_iff,
87-
ListIterator.ext_iff]
88-
exact And.comm
89-
· cases l <;> simp [Pure.pure]
90-
· cases l <;> simp [Pure.pure]
91-
· intro β f
92-
simp only [IterM.step, Iterator.step, pure_bind]
93-
cases l <;> simp [Pure.pure, toIterM]
94-
95-
end Equivalence
96-
9771
end Std.Iterators

src/Std/Data/Iterators/Lemmas/Producers/Monadic.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ module
88
prelude
99
public import Std.Data.Iterators.Lemmas.Producers.Monadic.Array
1010
public import Std.Data.Iterators.Lemmas.Producers.Monadic.Empty
11+
public import Std.Data.Iterators.Lemmas.Producers.Monadic.List

src/Std/Data/Iterators/Lemmas/Producers/Monadic/Array.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ module
88
prelude
99
public import Std.Data.Iterators.Producers.Monadic.Array
1010
public import Std.Data.Iterators.Lemmas.Consumers.Monadic
11-
public import Init.Data.Iterators.Lemmas.Producers.Monadic.List
11+
public import Std.Data.Iterators.Lemmas.Producers.Monadic.List
1212

1313
@[expose] public section
1414

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/-
2+
Copyright (c) 2025 Lean FRO, LLC. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Paul Reichert
5+
-/
6+
module
7+
8+
prelude
9+
public import Init.Data.Iterators.Lemmas.Producers.Monadic.List
10+
public import Std.Data.Iterators.Lemmas.Equivalence.Basic
11+
12+
namespace Std.Iterators
13+
open Std.Internal
14+
15+
variable {m : Type w → Type w'} {n : Type w → Type w''} [Monad m] {β : Type w}
16+
17+
-- We don't want to pollute `List` with this rarely used lemma.
18+
public theorem ListIterator.stepAsHetT_iterM [LawfulMonad m] {l : List β} :
19+
(l.iterM m).stepAsHetT = (match l with
20+
| [] => pure .done
21+
| x :: xs => pure (.yield (xs.iterM m) x)) := by
22+
simp only [List.iterM, toIterM, HetT.ext_iff, Equivalence.property_step, IterM.IsPlausibleStep,
23+
Iterator.IsPlausibleStep, Equivalence.prun_step]
24+
refine ⟨?_, ?_⟩
25+
· ext step
26+
cases step
27+
· cases l
28+
· simp [Pure.pure]
29+
· simp only [List.cons.injEq, pure, HetT.property_pure, IterStep.yield.injEq, IterM.ext_iff,
30+
ListIterator.ext_iff]
31+
exact And.comm
32+
· cases l <;> simp [Pure.pure]
33+
· cases l <;> simp [Pure.pure]
34+
· intro β f
35+
simp only [IterM.step, Iterator.step, pure_bind]
36+
cases l <;> simp [Pure.pure, toIterM]
37+
38+
end Std.Iterators

0 commit comments

Comments
 (0)