mirror of
https://github.com/leanprover/lean4.git
synced 2026-03-25 22:34:12 +00:00
Compare commits
1 Commits
synth_benc
...
getElem_ma
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
57650f536a |
@@ -3802,43 +3802,67 @@ namespace Const
|
||||
|
||||
variable {β : Type v} {γ : Type w} (m : Raw₀ α (fun _ => β))
|
||||
|
||||
theorem get?_map [EquivBEq α] [LawfulHashable α]
|
||||
/-- Variant of `get?_map` that holds with `EquivBEq` (i.e. without `LawfulBEq`). -/
|
||||
theorem get?_map' [EquivBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} (h : m.1.WF) :
|
||||
Const.get? (m.map f) k = (Const.get? m k).pmap (fun v h' => f (m.getKey k h') v)
|
||||
(fun _ h' => (contains_eq_isSome_get? m h).trans (Option.isSome_of_mem h')) := by
|
||||
simp_to_model [map, Const.get?, contains, getKey] using Const.getValue?_map
|
||||
|
||||
theorem get?_map [LawfulBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} (h : m.1.WF) :
|
||||
Const.get? (m.map f) k = (Const.get? m k).map (f k) := by
|
||||
simp [get?_map' m h, getKey_eq m h]
|
||||
|
||||
theorem get?_map_of_getKey?_eq_some [EquivBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k k' : α} (h : m.1.WF) :
|
||||
m.getKey? k = some k' → Const.get? (m.map f) k = (Const.get? m k).map (f k') := by
|
||||
simp_to_model [map, Const.get?, getKey?] using Const.getValue?_map_of_getKey?_eq_some
|
||||
|
||||
theorem get_map [EquivBEq α] [LawfulHashable α]
|
||||
/-- Variant of `get_map` that holds with `EquivBEq` (i.e. without `LawfulBEq`). -/
|
||||
theorem get_map' [EquivBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} (h : m.1.WF) {h'} :
|
||||
Const.get (m.map f) k h' =
|
||||
(f (m.getKey k (contains_of_contains_map m h h'))
|
||||
(Const.get m k (contains_of_contains_map m h h'))) := by
|
||||
simp_to_model [map, getKey, Const.get, contains] using List.getValue_map
|
||||
|
||||
theorem get!_map [EquivBEq α] [LawfulHashable α] [Inhabited γ]
|
||||
theorem get_map [LawfulBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} (h : m.1.WF) {h'} :
|
||||
Const.get (m.map f) k h' = f k (Const.get m k (contains_of_contains_map m h h')) := by
|
||||
simp [get_map' m h, getKey_eq m h]
|
||||
|
||||
/-- Variant of `get!_map` that holds with `EquivBEq` (i.e. without `LawfulBEq`). -/
|
||||
theorem get!_map' [EquivBEq α] [LawfulHashable α] [Inhabited γ]
|
||||
{f : α → β → γ} {k : α} (h : m.1.WF) :
|
||||
Const.get! (m.map f) k =
|
||||
((get? m k).pmap (fun v h => f (m.getKey k h) v)
|
||||
(fun _ h' => (contains_eq_isSome_get? m h).trans (Option.isSome_of_mem h'))).get! := by
|
||||
simp_to_model [map, getKey, Const.get!, Const.get?, contains] using List.Const.getValue!_map
|
||||
|
||||
theorem get!_map [LawfulBEq α] [LawfulHashable α] [Inhabited γ]
|
||||
{f : α → β → γ} {k : α} (h : m.1.WF) :
|
||||
Const.get! (m.map f) k = ((Const.get? m k).map (f k)).get! := by
|
||||
simp [get!_map' m h, getKey_eq m h]
|
||||
|
||||
theorem get!_map_of_getKey?_eq_some [EquivBEq α] [LawfulHashable α] [Inhabited γ]
|
||||
{f : α → β → γ} {k k' : α} (h : m.1.WF) :
|
||||
m.getKey? k = some k' → Const.get! (m.map f) k = ((Const.get? m k).map (f k')).get! := by
|
||||
simp_to_model [map, Const.get!, Const.get?, getKey?] using Const.getValue!_map_of_getKey?_eq_some
|
||||
|
||||
theorem getD_map [EquivBEq α] [LawfulHashable α]
|
||||
/-- Variant of `getD_map` that holds with `EquivBEq` (i.e. without `LawfulBEq`). -/
|
||||
theorem getD_map' [EquivBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} {fallback : γ} (h : m.1.WF) :
|
||||
Const.getD (m.map f) k fallback =
|
||||
((get? m k).pmap (fun v h => f (m.getKey k h) v)
|
||||
(fun _ h' => (contains_eq_isSome_get? m h).trans (Option.isSome_of_mem h'))).getD fallback := by
|
||||
simp_to_model [map, getKey, Const.getD, Const.get?, contains] using List.Const.getValueD_map
|
||||
|
||||
theorem getD_map [LawfulBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} {fallback : γ} (h : m.1.WF) :
|
||||
Const.getD (m.map f) k fallback = ((Const.get? m k).map (f k)).getD fallback := by
|
||||
simp [getD_map' m h, getKey_eq m h]
|
||||
|
||||
theorem getD_map_of_getKey?_eq_some [EquivBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k k' : α} {fallback : γ} (h : m.1.WF) :
|
||||
m.getKey? k = some k' → Const.getD (m.map f) k fallback = ((Const.get? m k).map (f k')).getD fallback := by
|
||||
|
||||
@@ -3854,11 +3854,19 @@ namespace Const
|
||||
|
||||
variable {β : Type v} {γ : Type w} {m : DHashMap α fun _ => β}
|
||||
|
||||
theorem get?_map [EquivBEq α] [LawfulHashable α]
|
||||
@[simp]
|
||||
theorem get?_map [LawfulBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} :
|
||||
Const.get? (m.map f) k = (Const.get? m k).map (f k) :=
|
||||
Raw₀.Const.get?_map ⟨m.1, _⟩ m.2
|
||||
|
||||
/-- Variant of `get?_map` that holds with `EquivBEq` (i.e. without `LawfulBEq`). -/
|
||||
@[simp (low)]
|
||||
theorem get?_map' [EquivBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} :
|
||||
Const.get? (m.map f) k = (Const.get? m k).pmap (fun v h' => f (m.getKey k h') v)
|
||||
(fun _ h' => mem_iff_isSome_get?.mpr (Option.isSome_of_eq_some h')) :=
|
||||
Raw₀.Const.get?_map ⟨m.1, _⟩ m.2
|
||||
Raw₀.Const.get?_map' ⟨m.1, _⟩ m.2
|
||||
|
||||
theorem get?_map_of_getKey?_eq_some [EquivBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k k' : α} (h : m.getKey? k = some k') :
|
||||
@@ -3866,30 +3874,49 @@ theorem get?_map_of_getKey?_eq_some [EquivBEq α] [LawfulHashable α]
|
||||
Raw₀.Const.get?_map_of_getKey?_eq_some ⟨m.1, _⟩ m.2 h
|
||||
|
||||
@[simp]
|
||||
theorem get_map [EquivBEq α] [LawfulHashable α]
|
||||
theorem get_map [LawfulBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} {h'} :
|
||||
Const.get (m.map f) k h' = f k (Const.get m k (mem_of_mem_map h')) :=
|
||||
Raw₀.Const.get_map ⟨m.1, _⟩ m.2
|
||||
|
||||
/-- Variant of `get_map` that holds with `EquivBEq` (i.e. without `LawfulBEq`). -/
|
||||
@[simp (low)]
|
||||
theorem get_map' [EquivBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} {h'} :
|
||||
Const.get (m.map f) k h' =
|
||||
f (m.getKey k (mem_of_mem_map h')) (Const.get m k (mem_of_mem_map h')) :=
|
||||
Raw₀.Const.get_map ⟨m.1, _⟩ m.2
|
||||
Raw₀.Const.get_map' ⟨m.1, _⟩ m.2
|
||||
|
||||
theorem get!_map [EquivBEq α] [LawfulHashable α] [Inhabited γ]
|
||||
theorem get!_map [LawfulBEq α] [LawfulHashable α] [Inhabited γ]
|
||||
{f : α → β → γ} {k : α} :
|
||||
Const.get! (m.map f) k = ((Const.get? m k).map (f k)).get! :=
|
||||
Raw₀.Const.get!_map ⟨m.1, _⟩ m.2
|
||||
|
||||
/-- Variant of `get!_map` that holds with `EquivBEq` (i.e. without `LawfulBEq`). -/
|
||||
theorem get!_map' [EquivBEq α] [LawfulHashable α] [Inhabited γ]
|
||||
{f : α → β → γ} {k : α} :
|
||||
Const.get! (m.map f) k =
|
||||
((get? m k).pmap (fun v h => f (m.getKey k h) v)
|
||||
(fun _ h' => mem_iff_isSome_get?.mpr (Option.isSome_of_mem h'))).get! :=
|
||||
Raw₀.Const.get!_map ⟨m.1, _⟩ m.2
|
||||
Raw₀.Const.get!_map' ⟨m.1, _⟩ m.2
|
||||
|
||||
theorem get!_map_of_getKey?_eq_some [EquivBEq α] [LawfulHashable α] [Inhabited γ]
|
||||
{f : α → β → γ} {k k' : α} (h : m.getKey? k = some k') :
|
||||
Const.get! (m.map f) k = ((Const.get? m k).map (f k')).get! :=
|
||||
Raw₀.Const.get!_map_of_getKey?_eq_some ⟨m.1, _⟩ m.2 h
|
||||
|
||||
theorem getD_map [EquivBEq α] [LawfulHashable α]
|
||||
theorem getD_map [LawfulBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} {fallback : γ} :
|
||||
Const.getD (m.map f) k fallback = ((Const.get? m k).map (f k)).getD fallback :=
|
||||
Raw₀.Const.getD_map ⟨m.1, _⟩ m.2
|
||||
|
||||
/-- Variant of `getD_map` that holds with `EquivBEq` (i.e. without `LawfulBEq`). -/
|
||||
theorem getD_map' [EquivBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} {fallback : γ} :
|
||||
Const.getD (m.map f) k fallback =
|
||||
((get? m k).pmap (fun v h => f (m.getKey k h) v)
|
||||
(fun _ h' => mem_iff_isSome_get?.mpr (Option.isSome_of_eq_some h'))).getD fallback :=
|
||||
Raw₀.Const.getD_map ⟨m.1, _⟩ m.2
|
||||
Raw₀.Const.getD_map' ⟨m.1, _⟩ m.2
|
||||
|
||||
theorem getD_map_of_getKey?_eq_some [EquivBEq α] [LawfulHashable α] [Inhabited γ]
|
||||
{f : α → β → γ} {k k' : α} {fallback : γ} (h : m.getKey? k = some k') :
|
||||
|
||||
@@ -4092,46 +4092,73 @@ namespace Const
|
||||
|
||||
variable {β : Type v} {γ : Type w} {m : Raw α (fun _ => β)}
|
||||
|
||||
theorem get?_map [EquivBEq α] [LawfulHashable α]
|
||||
/-- Variant of `get?_map` that holds with `EquivBEq` (i.e. without `LawfulBEq`). -/
|
||||
@[simp (low)]
|
||||
theorem get?_map' [EquivBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} (h : m.WF) :
|
||||
Const.get? (m.map f) k = (Const.get? m k).pmap (fun v h' => f (m.getKey k h') v)
|
||||
(fun _ h' => (mem_iff_isSome_get? h).mpr (Option.isSome_of_eq_some h')) := by
|
||||
simp only [mem_iff_contains]
|
||||
simp_to_raw using Raw₀.Const.get?_map
|
||||
simp_to_raw using Raw₀.Const.get?_map'
|
||||
|
||||
@[simp]
|
||||
theorem get?_map [LawfulBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} (h : m.WF) :
|
||||
Const.get? (m.map f) k = (Const.get? m k).map (f k) := by
|
||||
simp [get?_map' h, getKey_eq h]
|
||||
|
||||
theorem get?_map_of_getKey?_eq_some [EquivBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k k' : α} (h : m.WF) :
|
||||
m.getKey? k = some k' → Const.get? (m.map f) k = (Const.get? m k).map (f k') := by
|
||||
simp_to_raw using Raw₀.Const.get?_map_of_getKey?_eq_some
|
||||
|
||||
@[simp]
|
||||
theorem get_map [EquivBEq α] [LawfulHashable α]
|
||||
/-- Variant of `get_map` that holds with `EquivBEq` (i.e. without `LawfulBEq`). -/
|
||||
@[simp (low)]
|
||||
theorem get_map' [EquivBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} {h'} (h : m.WF) :
|
||||
Const.get (m.map f) k h' =
|
||||
(f (m.getKey k (mem_of_mem_map h h'))
|
||||
(Const.get m k (mem_of_mem_map h h'))) := by
|
||||
simp_to_raw using Raw₀.Const.get_map
|
||||
simp_to_raw using Raw₀.Const.get_map'
|
||||
|
||||
theorem get!_map [EquivBEq α] [LawfulHashable α] [Inhabited γ]
|
||||
@[simp]
|
||||
theorem get_map [LawfulBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} (h : m.WF) {h'} :
|
||||
Const.get (m.map f) k h' = f k (Const.get m k (mem_of_mem_map h h')) := by
|
||||
simp [get_map' h, getKey_eq h]
|
||||
|
||||
/-- Variant of `get!_map` that holds with `EquivBEq` (i.e. without `LawfulBEq`). -/
|
||||
theorem get!_map' [EquivBEq α] [LawfulHashable α] [Inhabited γ]
|
||||
{f : α → β → γ} {k : α} (h : m.WF) :
|
||||
Const.get! (m.map f) k =
|
||||
((get? m k).pmap (fun v h => f (m.getKey k h) v)
|
||||
(fun _ h' => (mem_iff_isSome_get? h).mpr (Option.isSome_of_eq_some h'))).get! := by
|
||||
simp only [mem_iff_contains]
|
||||
simp_to_raw using Raw₀.Const.get!_map
|
||||
simp_to_raw using Raw₀.Const.get!_map'
|
||||
|
||||
theorem get!_map [LawfulBEq α] [LawfulHashable α] [Inhabited γ]
|
||||
{f : α → β → γ} {k : α} (h : m.WF) :
|
||||
Const.get! (m.map f) k = ((Const.get? m k).map (f k)).get! := by
|
||||
simp [get!_map' h, getKey_eq h]
|
||||
|
||||
theorem get!_map_of_getKey?_eq_some [EquivBEq α] [LawfulHashable α] [Inhabited γ]
|
||||
{f : α → β → γ} {k k' : α} (h : m.WF) :
|
||||
m.getKey? k = some k' → Const.get! (m.map f) k = ((Const.get? m k).map (f k')).get! := by
|
||||
simp_to_raw using Raw₀.Const.get!_map_of_getKey?_eq_some
|
||||
|
||||
theorem getD_map [EquivBEq α] [LawfulHashable α]
|
||||
/-- Variant of `getD_map` that holds with `EquivBEq` (i.e. without `LawfulBEq`). -/
|
||||
theorem getD_map' [EquivBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} {fallback : γ} (h : m.WF) :
|
||||
Const.getD (m.map f) k fallback =
|
||||
((get? m k).pmap (fun v h => f (m.getKey k h) v)
|
||||
(fun _ h' => (mem_iff_isSome_get? h).mpr (Option.isSome_of_eq_some h'))).getD fallback := by
|
||||
simp only [mem_iff_contains]
|
||||
simp_to_raw using Raw₀.Const.getD_map
|
||||
simp_to_raw using Raw₀.Const.getD_map'
|
||||
|
||||
theorem getD_map [LawfulBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} {fallback : γ} (h : m.WF) :
|
||||
Const.getD (m.map f) k fallback = ((Const.get? m k).map (f k)).getD fallback := by
|
||||
simp [getD_map' h, getKey_eq h]
|
||||
|
||||
theorem getD_map_of_getKey?_eq_some [EquivBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k k' : α} {fallback : γ} (h : m.WF) :
|
||||
|
||||
@@ -3273,11 +3273,19 @@ namespace Const
|
||||
|
||||
variable {β : Type v} {γ : Type w} {m : ExtDHashMap α fun _ => β}
|
||||
|
||||
theorem get?_map [EquivBEq α] [LawfulHashable α]
|
||||
@[simp]
|
||||
theorem get?_map [LawfulBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} :
|
||||
Const.get? (m.map f) k = (Const.get? m k).map (f k) :=
|
||||
m.inductionOn fun _ => DHashMap.Const.get?_map
|
||||
|
||||
/-- Variant of `get?_map` that holds with `EquivBEq` (i.e. without `LawfulBEq`). -/
|
||||
@[simp (low)]
|
||||
theorem get?_map' [EquivBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} :
|
||||
Const.get? (m.map f) k = (Const.get? m k).pmap (fun v h' => f (m.getKey k h') v)
|
||||
(fun _ h' => mem_iff_isSome_get?.mpr (Option.isSome_of_eq_some h')) :=
|
||||
m.inductionOn fun _ => DHashMap.Const.get?_map
|
||||
m.inductionOn fun _ => DHashMap.Const.get?_map'
|
||||
|
||||
theorem get?_map_of_getKey?_eq_some [EquivBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k k' : α} (h : m.getKey? k = some k') :
|
||||
@@ -3285,30 +3293,49 @@ theorem get?_map_of_getKey?_eq_some [EquivBEq α] [LawfulHashable α]
|
||||
m.inductionOn (fun _ h => DHashMap.Const.get?_map_of_getKey?_eq_some h) h
|
||||
|
||||
@[simp]
|
||||
theorem get_map [EquivBEq α] [LawfulHashable α]
|
||||
theorem get_map [LawfulBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} {h'} :
|
||||
Const.get (m.map f) k h' = f k (Const.get m k (mem_of_mem_map h')) :=
|
||||
m.inductionOn (fun _ _ => DHashMap.Const.get_map) h'
|
||||
|
||||
/-- Variant of `get_map` that holds with `EquivBEq` (i.e. without `LawfulBEq`). -/
|
||||
@[simp (low)]
|
||||
theorem get_map' [EquivBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} {h'} :
|
||||
Const.get (m.map f) k h' =
|
||||
f (m.getKey k (mem_of_mem_map h')) (Const.get m k (mem_of_mem_map h')) :=
|
||||
m.inductionOn (fun _ _ => DHashMap.Const.get_map) h'
|
||||
m.inductionOn (fun _ _ => DHashMap.Const.get_map') h'
|
||||
|
||||
theorem get!_map [EquivBEq α] [LawfulHashable α] [Inhabited γ]
|
||||
theorem get!_map [LawfulBEq α] [LawfulHashable α] [Inhabited γ]
|
||||
{f : α → β → γ} {k : α} :
|
||||
Const.get! (m.map f) k = ((Const.get? m k).map (f k)).get! :=
|
||||
m.inductionOn fun _ => DHashMap.Const.get!_map
|
||||
|
||||
/-- Variant of `get!_map` that holds with `EquivBEq` (i.e. without `LawfulBEq`). -/
|
||||
theorem get!_map' [EquivBEq α] [LawfulHashable α] [Inhabited γ]
|
||||
{f : α → β → γ} {k : α} :
|
||||
Const.get! (m.map f) k =
|
||||
((get? m k).pmap (fun v h => f (m.getKey k h) v)
|
||||
(fun _ h' => mem_iff_isSome_get?.mpr (Option.isSome_of_mem h'))).get! :=
|
||||
m.inductionOn fun _ => DHashMap.Const.get!_map
|
||||
m.inductionOn fun _ => DHashMap.Const.get!_map'
|
||||
|
||||
theorem get!_map_of_getKey?_eq_some [EquivBEq α] [LawfulHashable α] [Inhabited γ]
|
||||
{f : α → β → γ} {k k' : α} (h : m.getKey? k = some k') :
|
||||
Const.get! (m.map f) k = ((Const.get? m k).map (f k')).get! :=
|
||||
m.inductionOn (fun _ h => DHashMap.Const.get!_map_of_getKey?_eq_some h) h
|
||||
|
||||
theorem getD_map [EquivBEq α] [LawfulHashable α]
|
||||
theorem getD_map [LawfulBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} {fallback : γ} :
|
||||
Const.getD (m.map f) k fallback = ((Const.get? m k).map (f k)).getD fallback :=
|
||||
m.inductionOn fun _ => DHashMap.Const.getD_map
|
||||
|
||||
/-- Variant of `getD_map` that holds with `EquivBEq` (i.e. without `LawfulBEq`). -/
|
||||
theorem getD_map' [EquivBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} {fallback : γ} :
|
||||
Const.getD (m.map f) k fallback =
|
||||
((get? m k).pmap (fun v h => f (m.getKey k h) v)
|
||||
(fun _ h' => mem_iff_isSome_get?.mpr (Option.isSome_of_eq_some h'))).getD fallback :=
|
||||
m.inductionOn fun _ => DHashMap.Const.getD_map
|
||||
m.inductionOn fun _ => DHashMap.Const.getD_map'
|
||||
|
||||
theorem getD_map_of_getKey?_eq_some [EquivBEq α] [LawfulHashable α] [Inhabited γ]
|
||||
{f : α → β → γ} {k k' : α} {fallback : γ} (h : m.getKey? k = some k') :
|
||||
|
||||
@@ -2070,11 +2070,19 @@ theorem size_map [EquivBEq α] [LawfulHashable α]
|
||||
(m.map f).size = m.size :=
|
||||
ExtDHashMap.size_map
|
||||
|
||||
theorem getElem?_map [EquivBEq α] [LawfulHashable α]
|
||||
@[simp]
|
||||
theorem getElem?_map [LawfulBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} :
|
||||
(m.map f)[k]? = m[k]?.map (f k) :=
|
||||
ExtDHashMap.Const.get?_map
|
||||
|
||||
/-- Variant of `getElem?_map` that holds with `EquivBEq` (i.e. without `LawfulBEq`). -/
|
||||
@[simp (low)]
|
||||
theorem getElem?_map' [EquivBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} :
|
||||
(m.map f)[k]? = m[k]?.pmap (fun v h' => f (m.getKey k h') v)
|
||||
(fun _ h' => mem_iff_isSome_getElem?.mpr (Option.isSome_of_eq_some h')) :=
|
||||
ExtDHashMap.Const.get?_map
|
||||
ExtDHashMap.Const.get?_map'
|
||||
|
||||
theorem getElem?_map_of_getKey?_eq_some [EquivBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k k' : α} (h : m.getKey? k = some k') :
|
||||
@@ -2082,30 +2090,52 @@ theorem getElem?_map_of_getKey?_eq_some [EquivBEq α] [LawfulHashable α]
|
||||
ExtDHashMap.Const.get?_map_of_getKey?_eq_some h
|
||||
|
||||
@[simp]
|
||||
theorem getElem_map [EquivBEq α] [LawfulHashable α]
|
||||
theorem getElem_map [LawfulBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} {h'} :
|
||||
(m.map f)[k]' h' =
|
||||
f k (m[k]'(mem_of_mem_map h')) :=
|
||||
ExtDHashMap.Const.get_map (h' := h')
|
||||
|
||||
/-- Variant of `getElem_map` that holds with `EquivBEq` (i.e. without `LawfulBEq`). -/
|
||||
@[simp (low)]
|
||||
theorem getElem_map' [EquivBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} {h'} :
|
||||
(m.map f)[k]'(h') =
|
||||
f (m.getKey k (mem_of_mem_map h')) (m[k]'(mem_of_mem_map h')) :=
|
||||
ExtDHashMap.Const.get_map (h' := h')
|
||||
ExtDHashMap.Const.get_map' (h' := h')
|
||||
|
||||
theorem getElem!_map [EquivBEq α] [LawfulHashable α] [Inhabited γ]
|
||||
theorem getElem!_map [LawfulBEq α] [LawfulHashable α] [Inhabited γ]
|
||||
{f : α → β → γ} {k : α} :
|
||||
(m.map f)[k]! =
|
||||
(m[k]?.map (f k)).get! :=
|
||||
ExtDHashMap.Const.get!_map
|
||||
|
||||
/-- Variant of `getElem!_map` that holds with `EquivBEq` (i.e. without `LawfulBEq`). -/
|
||||
theorem getElem!_map' [EquivBEq α] [LawfulHashable α] [Inhabited γ]
|
||||
{f : α → β → γ} {k : α} :
|
||||
(m.map f)[k]! =
|
||||
(m[k]?.pmap (fun v h => f (m.getKey k h) v)
|
||||
(fun _ h' => mem_iff_isSome_getElem?.mpr (Option.isSome_of_mem h'))).get! :=
|
||||
ExtDHashMap.Const.get!_map
|
||||
ExtDHashMap.Const.get!_map'
|
||||
|
||||
theorem getElem!_map_of_getKey?_eq_some [EquivBEq α] [LawfulHashable α] [Inhabited γ]
|
||||
{f : α → β → γ} {k k' : α} (h : m.getKey? k = some k') :
|
||||
(m.map f)[k]! = (m[k]?.map (f k')).get! :=
|
||||
ExtDHashMap.Const.get!_map_of_getKey?_eq_some h
|
||||
|
||||
theorem getD_map [EquivBEq α] [LawfulHashable α]
|
||||
theorem getD_map [LawfulBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} {fallback : γ} :
|
||||
(m.map f).getD k fallback =
|
||||
(m[k]?.map (f k)).getD fallback :=
|
||||
ExtDHashMap.Const.getD_map
|
||||
|
||||
/-- Variant of `getD_map` that holds with `EquivBEq` (i.e. without `LawfulBEq`). -/
|
||||
theorem getD_map' [EquivBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} {fallback : γ} :
|
||||
(m.map f).getD k fallback =
|
||||
(m[k]?.pmap (fun v h => f (m.getKey k h) v)
|
||||
(fun _ h' => mem_iff_isSome_getElem?.mpr (Option.isSome_of_eq_some h'))).getD fallback :=
|
||||
ExtDHashMap.Const.getD_map
|
||||
ExtDHashMap.Const.getD_map'
|
||||
|
||||
theorem getD_map_of_getKey?_eq_some [EquivBEq α] [LawfulHashable α] [Inhabited γ]
|
||||
{f : α → β → γ} {k k' : α} {fallback : γ} (h : m.getKey? k = some k') :
|
||||
|
||||
@@ -2515,11 +2515,19 @@ theorem size_map [EquivBEq α] [LawfulHashable α]
|
||||
(m.map f).size = m.size :=
|
||||
DHashMap.size_map
|
||||
|
||||
theorem getElem?_map [EquivBEq α] [LawfulHashable α]
|
||||
@[simp]
|
||||
theorem getElem?_map [LawfulBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} :
|
||||
(m.map f)[k]? = m[k]?.map (f k) :=
|
||||
DHashMap.Const.get?_map
|
||||
|
||||
/-- Variant of `getElem?_map` that holds with `EquivBEq` (i.e. without `LawfulBEq`). -/
|
||||
@[simp (low)]
|
||||
theorem getElem?_map' [EquivBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} :
|
||||
(m.map f)[k]? = m[k]?.pmap (fun v h' => f (m.getKey k h') v)
|
||||
(fun _ h' => mem_iff_isSome_getElem?.mpr (Option.isSome_of_eq_some h')) :=
|
||||
DHashMap.Const.get?_map
|
||||
DHashMap.Const.get?_map'
|
||||
|
||||
theorem getElem?_map_of_getKey?_eq_some [EquivBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k k' : α} (h : m.getKey? k = some k') :
|
||||
@@ -2527,30 +2535,52 @@ theorem getElem?_map_of_getKey?_eq_some [EquivBEq α] [LawfulHashable α]
|
||||
DHashMap.Const.get?_map_of_getKey?_eq_some h
|
||||
|
||||
@[simp]
|
||||
theorem getElem_map [EquivBEq α] [LawfulHashable α]
|
||||
theorem getElem_map [LawfulBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} {h'} :
|
||||
(m.map f)[k]'(h') =
|
||||
f k (m[k]'(mem_of_mem_map h')) :=
|
||||
DHashMap.Const.get_map
|
||||
|
||||
/-- Variant of `getElem_map` that holds with `EquivBEq` (i.e. without `LawfulBEq`). -/
|
||||
@[simp (low)]
|
||||
theorem getElem_map' [EquivBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} {h'} :
|
||||
(m.map f)[k]'(h') =
|
||||
f (m.getKey k (mem_of_mem_map h')) (m[k]'(mem_of_mem_map h')) :=
|
||||
DHashMap.Const.get_map
|
||||
DHashMap.Const.get_map'
|
||||
|
||||
theorem getElem!_map [EquivBEq α] [LawfulHashable α] [Inhabited γ]
|
||||
theorem getElem!_map [LawfulBEq α] [LawfulHashable α] [Inhabited γ]
|
||||
{f : α → β → γ} {k : α} :
|
||||
(m.map f)[k]! =
|
||||
(m[k]?.map (f k)).get! :=
|
||||
DHashMap.Const.get!_map
|
||||
|
||||
/-- Variant of `getElem!_map` that holds with `EquivBEq` (i.e. without `LawfulBEq`). -/
|
||||
theorem getElem!_map' [EquivBEq α] [LawfulHashable α] [Inhabited γ]
|
||||
{f : α → β → γ} {k : α} :
|
||||
(m.map f)[k]! =
|
||||
(m[k]?.pmap (fun v h => f (m.getKey k h) v)
|
||||
(fun _ h' => mem_iff_isSome_getElem?.mpr (Option.isSome_of_mem h'))).get! :=
|
||||
DHashMap.Const.get!_map
|
||||
DHashMap.Const.get!_map'
|
||||
|
||||
theorem getElem!_map_of_getKey?_eq_some [EquivBEq α] [LawfulHashable α] [Inhabited γ]
|
||||
{f : α → β → γ} {k k' : α} (h : m.getKey? k = some k') :
|
||||
(m.map f)[k]! = (m[k]?.map (f k')).get! :=
|
||||
DHashMap.Const.get!_map_of_getKey?_eq_some h
|
||||
|
||||
theorem getD_map [EquivBEq α] [LawfulHashable α]
|
||||
theorem getD_map [LawfulBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} {fallback : γ} :
|
||||
(m.map f).getD k fallback =
|
||||
(m[k]?.map (f k)).getD fallback :=
|
||||
DHashMap.Const.getD_map
|
||||
|
||||
/-- Variant of `getD_map` that holds with `EquivBEq` (i.e. without `LawfulBEq`). -/
|
||||
theorem getD_map' [EquivBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} {fallback : γ} :
|
||||
(m.map f).getD k fallback =
|
||||
(m[k]?.pmap (fun v h => f (m.getKey k h) v)
|
||||
(fun _ h' => mem_iff_isSome_getElem?.mpr (Option.isSome_of_eq_some h'))).getD fallback :=
|
||||
DHashMap.Const.getD_map
|
||||
DHashMap.Const.getD_map'
|
||||
|
||||
theorem getD_map_of_getKey?_eq_some [EquivBEq α] [LawfulHashable α] [Inhabited γ]
|
||||
{f : α → β → γ} {k k' : α} {fallback : γ} (h : m.getKey? k = some k') :
|
||||
|
||||
@@ -2569,11 +2569,19 @@ theorem getKeyD_map [EquivBEq α] [LawfulHashable α]
|
||||
(m.map f).getKeyD k fallback = m.getKeyD k fallback :=
|
||||
DHashMap.Raw.getKeyD_map h.out
|
||||
|
||||
theorem getElem?_map [EquivBEq α] [LawfulHashable α]
|
||||
@[simp]
|
||||
theorem getElem?_map [LawfulBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} (h : m.WF) :
|
||||
(m.map f)[k]? = m[k]?.map (f k) :=
|
||||
DHashMap.Raw.Const.get?_map h.out
|
||||
|
||||
/-- Variant of `getElem?_map` that holds with `EquivBEq` (i.e. without `LawfulBEq`). -/
|
||||
@[simp (low)]
|
||||
theorem getElem?_map' [EquivBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} (h : m.WF) :
|
||||
(m.map f)[k]? = m[k]?.pmap (fun v h' => f (m.getKey k h') v)
|
||||
(fun _ h' => (mem_iff_isSome_getElem? h).mpr (Option.isSome_of_eq_some h')) :=
|
||||
DHashMap.Raw.Const.get?_map h.out
|
||||
DHashMap.Raw.Const.get?_map' h.out
|
||||
|
||||
theorem getElem?_map_of_getKey?_eq_some [EquivBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k k' : α} (h : m.WF) (h' : m.getKey? k = some k') :
|
||||
@@ -2581,31 +2589,53 @@ theorem getElem?_map_of_getKey?_eq_some [EquivBEq α] [LawfulHashable α]
|
||||
DHashMap.Raw.Const.get?_map_of_getKey?_eq_some h.out h'
|
||||
|
||||
@[simp]
|
||||
theorem getElem_map [EquivBEq α] [LawfulHashable α]
|
||||
theorem getElem_map [LawfulBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} {h'} (h : m.WF) :
|
||||
(m.map f)[k]' h' =
|
||||
(f k (m[k]' (mem_of_mem_map h h'))) :=
|
||||
DHashMap.Raw.Const.get_map h.out (h':= h')
|
||||
|
||||
/-- Variant of `getElem_map` that holds with `EquivBEq` (i.e. without `LawfulBEq`). -/
|
||||
@[simp (low)]
|
||||
theorem getElem_map' [EquivBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} {h'} (h : m.WF) :
|
||||
(m.map f)[k]' h' =
|
||||
(f (m.getKey k (mem_of_mem_map h h'))
|
||||
(m[k]' (mem_of_mem_map h h'))) :=
|
||||
DHashMap.Raw.Const.get_map h.out (h':= h')
|
||||
DHashMap.Raw.Const.get_map' h.out (h':= h')
|
||||
|
||||
theorem getElem!_map [EquivBEq α] [LawfulHashable α] [Inhabited γ]
|
||||
theorem getElem!_map [LawfulBEq α] [LawfulHashable α] [Inhabited γ]
|
||||
{f : α → β → γ} {k : α} (h : m.WF) :
|
||||
(m.map f)[k]! =
|
||||
(m[k]?.map (f k)).get! :=
|
||||
DHashMap.Raw.Const.get!_map h.out
|
||||
|
||||
/-- Variant of `getElem!_map` that holds with `EquivBEq` (i.e. without `LawfulBEq`). -/
|
||||
theorem getElem!_map' [EquivBEq α] [LawfulHashable α] [Inhabited γ]
|
||||
{f : α → β → γ} {k : α} (h : m.WF) :
|
||||
(m.map f)[k]! =
|
||||
((get? m k).pmap (fun v h => f (m.getKey k h) v)
|
||||
(fun _ h' => (mem_iff_isSome_getElem? h).mpr (Option.isSome_of_eq_some h'))).get! :=
|
||||
DHashMap.Raw.Const.get!_map h.out
|
||||
DHashMap.Raw.Const.get!_map' h.out
|
||||
|
||||
theorem getElem!_map_of_getKey?_eq_some [EquivBEq α] [LawfulHashable α] [Inhabited γ]
|
||||
{f : α → β → γ} {k k' : α} (h : m.WF) (h' : m.getKey? k = some k') :
|
||||
(m.map f)[k]! = (m[k]?.map (f k')).get! :=
|
||||
DHashMap.Raw.Const.get!_map_of_getKey?_eq_some h.out h'
|
||||
|
||||
theorem getD_map [EquivBEq α] [LawfulHashable α]
|
||||
theorem getD_map [LawfulBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} {fallback : γ} (h : m.WF) :
|
||||
(m.map f).getD k fallback =
|
||||
(m[k]?.map (f k)).getD fallback :=
|
||||
DHashMap.Raw.Const.getD_map h.out
|
||||
|
||||
/-- Variant of `getD_map` that holds with `EquivBEq` (i.e. without `LawfulBEq`). -/
|
||||
theorem getD_map' [EquivBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k : α} {fallback : γ} (h : m.WF) :
|
||||
getD (m.map f) k fallback =
|
||||
((get? m k).pmap (fun v h => f (m.getKey k h) v)
|
||||
(fun _ h' => (mem_iff_isSome_getElem? h).mpr (Option.isSome_of_eq_some h'))).getD fallback :=
|
||||
DHashMap.Raw.Const.getD_map h.out
|
||||
DHashMap.Raw.Const.getD_map' h.out
|
||||
|
||||
theorem getD_map_of_getKey?_eq_some [EquivBEq α] [LawfulHashable α]
|
||||
{f : α → β → γ} {k k' : α} {fallback : γ} (h : m.WF) (h' : m.getKey? k = some k') :
|
||||
|
||||
Reference in New Issue
Block a user