Skip to content

Commit e7bd808

Browse files
committed
wip: move consumer lemmas to Init
1 parent ee48618 commit e7bd808

35 files changed

+224
-152
lines changed

src/Init/Data/Iterators.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@ prelude
99
import Init.Data.Iterators.Basic
1010
import Init.Data.Iterators.PostconditionMonad
1111
import Init.Data.Iterators.Consumers
12+
import Init.Data.Iterators.Lemmas
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
module
2+
3+
prelude
4+
import Init.Data.Iterators.Lemmas.Consumers
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
module
2+
3+
prelude
4+
import Init.Data.Iterators.Lemmas.Consumers.Monadic
5+
import Init.Data.Iterators.Lemmas.Consumers.Collect
6+
import Init.Data.Iterators.Lemmas.Consumers.Loop

src/Std/Data/Iterators/Lemmas/Consumers/Collect.lean renamed to src/Init/Data/Iterators/Lemmas/Consumers/Collect.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ prelude
77
import Init.Data.Iterators.Consumers.Access
88
import Init.Data.Iterators.Consumers.Collect
99
import Std.Data.Iterators.Lemmas.Basic
10-
import Std.Data.Iterators.Lemmas.Consumers.Monadic.Collect
10+
import Init.Data.Iterators.Lemmas.Consumers.Monadic.Collect
1111

1212
namespace Std.Iterators
1313

src/Std/Data/Iterators/Lemmas/Consumers/Loop.lean renamed to src/Init/Data/Iterators/Lemmas/Consumers/Loop.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ Authors: Paul Reichert
66
prelude
77
import Init.Data.List.Control
88
import Std.Data.Iterators.Lemmas.Basic
9-
import Std.Data.Iterators.Lemmas.Consumers.Collect
10-
import Std.Data.Iterators.Lemmas.Consumers.Monadic.Loop
9+
import Init.Data.Iterators.Lemmas.Consumers.Collect
10+
import Init.Data.Iterators.Lemmas.Consumers.Monadic.Loop
1111
import Init.Data.Iterators.Consumers.Collect
1212
import Init.Data.Iterators.Consumers.Loop
1313

src/Std/Data/Iterators/Lemmas/Consumers/Monadic.lean renamed to src/Init/Data/Iterators/Lemmas/Consumers/Monadic.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Paul Reichert
55
-/
66
prelude
7-
import Std.Data.Iterators.Lemmas.Consumers.Monadic.Collect
8-
import Std.Data.Iterators.Lemmas.Consumers.Monadic.Loop
7+
import Init.Data.Iterators.Lemmas.Consumers.Monadic.Collect
8+
import Init.Data.Iterators.Lemmas.Consumers.Monadic.Loop

src/Std/Data/Iterators/Lemmas/Consumers/Monadic/Collect.lean renamed to src/Init/Data/Iterators/Lemmas/Consumers/Monadic/Collect.lean

File renamed without changes.

src/Std/Data/Iterators/Lemmas/Consumers/Monadic/Loop.lean renamed to src/Init/Data/Iterators/Lemmas/Consumers/Monadic/Loop.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import Init.Control.Lawful.Basic
88
import Init.Data.Iterators.Consumers.Monadic.Collect
99
import Init.Data.Iterators.Consumers.Monadic.Loop
1010
import Std.Data.Iterators.Lemmas.Monadic.Basic
11-
import Std.Data.Iterators.Lemmas.Consumers.Monadic.Collect
11+
import Init.Data.Iterators.Lemmas.Consumers.Monadic.Collect
1212
import Std.Data.Iterators.Lemmas.Equivalence.StepCongr
1313

1414
namespace Std.Iterators

src/Init/Data/List/Range.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ module
88
prelude
99
import Init.Data.List.Pairwise
1010
import Init.Data.List.Zip
11+
import Init.Data.Range.Classes
1112

1213
/-!
1314
# Lemmas about `List.range` and `List.zipIdx`

src/Init/Data/Range/Classes.lean

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
module
2+
3+
prelude
4+
import Init.Core
5+
import Init.Data.Nat.Basic
6+
import Init.Data.Option.Basic
7+
8+
class Succ? (α : Type u) where
9+
succ? : α → Option α
10+
succAtIdx? (n : Nat) (a : α) : Option α := Nat.repeat (· >>= succ?) n (some a)
11+
12+
class LawfulSucc? (α : Type u) [Succ? α] where
13+
succAtIdx?_zero {a : α} : Succ?.succAtIdx? 0 a = some a
14+
succAtIdx?_succ {a : α} : Succ?.succAtIdx? (n + 1) a = Succ?.succAtIdx? n a >>= Succ?.succ?
15+
16+
class LawfulLESucc? (α : Type u) [LE α] [Succ? α] where
17+
le_rfl : {a : α} → a ≤ a
18+
le_succ? : {a b : α} → Succ?.succ? a = some b → a ≤ b
19+
le_succ?_of_le : {a b c : α} → a ≤ b → (h : Succ?.succ? b = some c) → a ≤ c
20+
le_succAtIdx?_of_le : {a b c : α} → {n : Nat} → a ≤ b → (h : Succ?.succAtIdx? n b = some c) → a ≤ c
21+
22+
class LawfulLTSucc? [LT α] [Succ? α] where
23+
lt_succ? : {a b : α} → (h : Succ?.succ? a = some b) → a < b
24+
lt_succ?_of_lt : {a b c : α} → a < b → (h : Succ?.succ? b = some c) → a < c
25+
26+
class HasDownwardUnboundedRanges (α : Type u) where
27+
min : α
28+
29+
instance : Succ? Nat where
30+
succ? n := some (n + 1)
31+
succAtIdx? k n := some (n + k)
32+
33+
instance : LawfulSucc? Nat where
34+
succAtIdx?_zero := by simp [Succ?.succAtIdx?]
35+
succAtIdx?_succ := by simp [Succ?.succAtIdx?, Succ?.succ?, Bind.bind, Nat.add_assoc]
36+
37+
instance : LawfulLESucc? Nat where
38+
le_rfl := Nat.le_refl _
39+
le_succ? := sorry
40+
le_succ?_of_le hle h := by
41+
simp only [Succ?.succ?, Option.some.injEq] at h
42+
rw [← h]
43+
exact Nat.le_trans hle (Nat.le_succ _)
44+
le_succAtIdx?_of_le {a b c n} hle h := by
45+
simp only [Succ?.succAtIdx?, Option.some.injEq] at h
46+
rw [← h]
47+
exact Nat.le_trans hle (Nat.le_add_right _ _)
48+
49+
#print instLawfulLESucc?Nat._proof_2

0 commit comments

Comments
 (0)