Compare commits

...

2 Commits

Author SHA1 Message Date
Kim Morrison
b301384e9a . 2026-01-23 21:28:34 +11:00
Kim Morrison
8967cd532f chore: more updates to grind_indexmap test case 2026-01-23 21:25:01 +11:00
2 changed files with 20 additions and 2 deletions

View File

@@ -87,12 +87,21 @@ private theorem getElem_indices_lt {h : a ∈ m} : m.indices[a] < m.size := by
grind_pattern getElem_indices_lt => m.indices[a]
@[reducible] -- This avoids needing boilerplate lemmas for the fields below, but may not be ideal.
instance : GetElem? (IndexMap α β) α β (fun m a => a m) where
getElem m a h := m.values[m.indices[a]'h]
getElem? m a := m.indices[a]?.bind (fun i => (m.values[i]?))
getElem! m a := m.indices[a]?.bind (fun i => (m.values[i]?)) |>.getD default
@[local grind =]
private theorem getElem_def (m : IndexMap α β) (a : α) (h : a m) :
m[a] = m.values[m.indices[a]'h] := rfl
@[local grind =]
private theorem getElem?_def (m : IndexMap α β) (a : α) :
m[a]? = m.indices[a]?.bind (fun i => (m.values[i]?)) := rfl
@[local grind =]
private theorem getElem!_def [Inhabited β] (m : IndexMap α β) (a : α) :
m[a]! = (m.indices[a]?.bind (fun i => (m.values[i]?))).getD default := rfl
instance : LawfulGetElem (IndexMap α β) α β (fun m a => a m) where
getElem?_def := by grind
getElem!_def := by grind

View File

@@ -175,12 +175,21 @@ private theorem getElem_indices_lt {h : a ∈ m} : m.indices[a] < m.size := by
grind_pattern getElem_indices_lt => m.indices[a]
@[reducible] -- This avoids needing boilerplate lemmas for the fields below, but may not be ideal.
instance : GetElem? (IndexMap α β) α β (fun m a => a m) where
getElem m a h := m.values[m.indices[a]'h]
getElem? m a := m.indices[a]?.bind (fun i => (m.values[i]?))
getElem! m a := m.indices[a]?.bind (fun i => (m.values[i]?)) |>.getD default
@[local grind =]
private theorem getElem_def (m : IndexMap α β) (a : α) (h : a m) :
m[a] = m.values[m.indices[a]'h] := rfl
@[local grind =]
private theorem getElem?_def (m : IndexMap α β) (a : α) :
m[a]? = m.indices[a]?.bind (fun i => (m.values[i]?)) := rfl
@[local grind =]
private theorem getElem!_def [Inhabited β] (m : IndexMap α β) (a : α) :
m[a]! = (m.indices[a]?.bind (fun i => (m.values[i]?))).getD default := rfl
instance : LawfulGetElem (IndexMap α β) α β (fun m a => a m) where
getElem?_def := by grind
getElem!_def := by grind