@@ -3430,13 +3430,13 @@ theorem get_filterMap [LawfulBEq α]
34303430 (isSome_apply_of_mem_filterMap h') :=
34313431 Raw₀.get_filterMap ⟨m.1 , _⟩ m.2
34323432
3433- @[grind =]
3433+ @[simp, grind =]
34343434theorem get!_filterMap [LawfulBEq α]
34353435 {f : (a : α) → β a → Option (γ a)} {k : α} [Inhabited (γ k)] :
34363436 (m.filterMap f).get! k = ((m.get? k).bind (f k)).get! :=
34373437 Raw₀.get!_filterMap ⟨m.1 , _⟩ m.2
34383438
3439- @[grind =]
3439+ @[simp, grind =]
34403440theorem getD_filterMap [LawfulBEq α]
34413441 {f : (a : α) → β a → Option (γ a)} {k : α} {fallback : γ k} :
34423442 (m.filterMap f).getD k fallback = ((m.get? k).bind (f k)).getD fallback :=
@@ -3502,13 +3502,20 @@ theorem size_filterMap_eq_size_iff [EquivBEq α] [LawfulHashable α]
35023502 (m.filterMap f).size = m.size ↔ ∀ k h, (f (m.getKey k h) (Const.get m k h)).isSome :=
35033503 Raw₀.Const.size_filterMap_eq_size_iff ⟨m.1 , _⟩ m.2
35043504
3505- @[grind = ]
3505+ @[simp ]
35063506theorem get?_filterMap [EquivBEq α] [LawfulHashable α]
35073507 {f : α → β → Option γ} {k : α} :
35083508 Const.get? (m.filterMap f) k = (Const.get? m k).pbind (fun x h' =>
35093509 f (m.getKey k (mem_iff_isSome_get?.mpr (Option.isSome_of_eq_some h'))) x) :=
35103510 Raw₀.Const.get?_filterMap ⟨m.1 , _⟩ m.2
35113511
3512+ /-- Simpler variant of `get?_filterMap` when `LawfulBEq` is available. -/
3513+ @[grind =]
3514+ theorem get?_filterMap' [LawfulBEq α] [LawfulHashable α]
3515+ {f : α → β → Option γ} {k : α} :
3516+ Const.get? (m.filterMap f) k = (Const.get? m k).bind fun x => f k x := by
3517+ simp [get?_filterMap]
3518+
35123519theorem get?_filterMap_of_getKey?_eq_some [EquivBEq α] [LawfulHashable α]
35133520 {f : α → β → Option γ} {k k' : α} (h : m.getKey? k = some k') :
35143521 Const.get? (m.filterMap f) k = (Const.get? m k).bind (f k') :=
@@ -3521,7 +3528,7 @@ theorem isSome_apply_of_mem_filterMap [EquivBEq α] [LawfulHashable α]
35213528 (Const.get m k (mem_of_mem_filterMap h))).isSome :=
35223529 Raw₀.Const.isSome_apply_of_contains_filterMap ⟨m.1 , _⟩ m.2
35233530
3524- @[simp, grind = ]
3531+ @[simp]
35253532theorem get_filterMap [EquivBEq α] [LawfulHashable α]
35263533 {f : α → β → Option γ} {k : α} {h} :
35273534 Const.get (m.filterMap f) k h =
@@ -3530,27 +3537,47 @@ theorem get_filterMap [EquivBEq α] [LawfulHashable α]
35303537 (isSome_apply_of_mem_filterMap h) :=
35313538 Raw₀.Const.get_filterMap ⟨m.1 , _⟩ m.2
35323539
3540+ /-- Simpler variant of `get_filterMap` when `LawfulBEq` is available. -/
35333541@[grind =]
3542+ theorem get_filterMap' [LawfulBEq α] [LawfulHashable α]
3543+ {f : α → β → Option γ} {k : α} {h} :
3544+ Const.get (m.filterMap f) k h =
3545+ (f k (Const.get m k (mem_of_mem_filterMap h))).get (by simpa using isSome_apply_of_mem_filterMap h) := by
3546+ simp [get_filterMap]
3547+
35343548theorem get!_filterMap [EquivBEq α] [LawfulHashable α] [Inhabited γ]
35353549 {f : α → β → Option γ} {k : α} :
35363550 Const.get! (m.filterMap f) k =
35373551 ((Const.get? m k).pbind (fun x h' =>
35383552 f (m.getKey k (mem_iff_isSome_get?.mpr (Option.isSome_of_eq_some h'))) x)).get! :=
35393553 Raw₀.Const.get!_filterMap ⟨m.1 , _⟩ m.2
35403554
3555+ /-- Simpler variant of `get!_filterMap` when `LawfulBEq` is available. -/
3556+ @[grind =]
3557+ theorem get!_filterMap' [LawfulBEq α] [LawfulHashable α] [Inhabited γ]
3558+ {f : α → β → Option γ} {k : α} :
3559+ Const.get! (m.filterMap f) k = ((Const.get? m k).bind (f k) ).get!:= by
3560+ simp [get!_filterMap]
3561+
35413562theorem get!_filterMap_of_getKey?_eq_some [EquivBEq α] [LawfulHashable α] [Inhabited γ]
35423563 {f : α → β → Option γ} {k k' : α} (h : m.getKey? k = some k') :
35433564 Const.get! (m.filterMap f) k = ((Const.get? m k).bind (f k')).get! :=
35443565 Raw₀.Const.get!_filterMap_of_getKey?_eq_some ⟨m.1 , _⟩ m.2 h
35453566
3546- @[grind =]
35473567theorem getD_filterMap [EquivBEq α] [LawfulHashable α]
35483568 {f : α → β → Option γ} {k : α} {fallback : γ} :
35493569 Const.getD (m.filterMap f) k fallback =
35503570 ((Const.get? m k).pbind (fun x h' =>
35513571 f (m.getKey k (mem_iff_isSome_get?.mpr (Option.isSome_of_eq_some h'))) x)).getD fallback :=
35523572 Raw₀.Const.getD_filterMap ⟨m.1 , _⟩ m.2
35533573
3574+ /-- Simpler variant of `getD_filterMap` when `LawfulBEq` is available. -/
3575+ @[grind =]
3576+ theorem getD_filterMap' [LawfulBEq α] [LawfulHashable α]
3577+ {f : α → β → Option γ} {k : α} {fallback : γ} :
3578+ Const.getD (m.filterMap f) k fallback = ((Const.get? m k).bind (f k)).getD fallback := by
3579+ simp [getD_filterMap]
3580+
35543581theorem getD_filterMap_of_getKey?_eq_some [EquivBEq α] [LawfulHashable α]
35553582 {f : α → β → Option γ} {k k' : α} {fallback : γ} (h : m.getKey? k = some k') :
35563583 Const.getD (m.filterMap f) k fallback = ((Const.get? m k).bind (f k')).getD fallback :=
@@ -3805,13 +3832,19 @@ theorem filter_equiv_self_iff [EquivBEq α] [LawfulHashable α]
38053832 ⟨fun h => (Raw₀.Const.filter_equiv_self_iff ⟨m.1 , _⟩ m.2 ).mp h.1 ,
38063833 fun h => ⟨(Raw₀.Const.filter_equiv_self_iff ⟨m.1 , _⟩ m.2 ).mpr h⟩ ⟩
38073834
3808- @[grind =]
38093835theorem get?_filter [EquivBEq α] [LawfulHashable α]
38103836 {f : α → β → Bool} {k : α} :
38113837 Const.get? (m.filter f) k = (Const.get? m k).pfilter (fun x h' =>
38123838 f (m.getKey k (mem_iff_isSome_get?.mpr (Option.isSome_of_eq_some h'))) x) :=
38133839 Raw₀.Const.get?_filter ⟨m.1 , _⟩ m.2
38143840
3841+ /-- Simpler variant of `get?_filter` when `LawfulBEq` is available. -/
3842+ @[simp, grind =]
3843+ theorem get?_filter' [LawfulBEq α] [LawfulHashable α]
3844+ {f : α → β → Bool} {k : α} :
3845+ Const.get? (m.filter f) k = (Const.get? m k).filter (f k) := by
3846+ simp [get?_filter]
3847+
38153848theorem get?_filter_of_getKey?_eq_some [EquivBEq α] [LawfulHashable α]
38163849 {f : α → β → Bool} {k k' : α} :
38173850 m.getKey? k = some k' →
@@ -3824,27 +3857,39 @@ theorem get_filter [EquivBEq α] [LawfulHashable α]
38243857 Const.get (m.filter f) k h' = Const.get m k (mem_of_mem_filter h') :=
38253858 Raw₀.Const.get_filter ⟨m.1 , _⟩ m.2
38263859
3827- @[grind =]
38283860theorem get!_filter [EquivBEq α] [LawfulHashable α] [Inhabited β]
38293861 {f : α → β → Bool} {k : α} :
38303862 Const.get! (m.filter f) k =
38313863 ((Const.get? m k).pfilter (fun x h' =>
38323864 f (m.getKey k (mem_iff_isSome_get?.mpr (Option.isSome_of_eq_some h'))) x)).get! :=
38333865 Raw₀.Const.get!_filter ⟨m.1 , _⟩ m.2
38343866
3867+ /-- Simpler variant of `get!_filter` when `LawfulBEq` is available. -/
3868+ @[grind =]
3869+ theorem get!_filter' [LawfulBEq α] [LawfulHashable α] [Inhabited β]
3870+ {f : α → β → Bool} {k : α} :
3871+ Const.get! (m.filter f) k = ((Const.get? m k).filter (f k)).get! := by
3872+ simp [get!_filter]
3873+
38353874theorem get!_filter_of_getKey?_eq_some [EquivBEq α] [LawfulHashable α] [Inhabited β]
38363875 {f : α → β → Bool} {k k' : α} :
38373876 m.getKey? k = some k' →
38383877 Const.get! (m.filter f) k = ((Const.get? m k).filter (fun x => f k' x)).get! :=
38393878 Raw₀.Const.get!_filter_of_getKey?_eq_some ⟨m.1 , _⟩ m.2
38403879
3841- @[grind =]
38423880theorem getD_filter [EquivBEq α] [LawfulHashable α]
38433881 {f : α → β → Bool} {k : α} {fallback : β} :
38443882 Const.getD (m.filter f) k fallback = ((Const.get? m k).pfilter (fun x h' =>
38453883 f (m.getKey k (mem_iff_isSome_get?.mpr (Option.isSome_of_eq_some h'))) x)).getD fallback :=
38463884 Raw₀.Const.getD_filter ⟨m.1 , _⟩ m.2
38473885
3886+ /-- Simpler variant of `getD_filter` when `LawfulBEq` is available. -/
3887+ @[grind =]
3888+ theorem getD_filter' [LawfulBEq α] [LawfulHashable α]
3889+ {f : α → β → Bool} {k : α} {fallback : β} :
3890+ Const.getD (m.filter f) k fallback = ((Const.get? m k).filter (f k)).getD fallback := by
3891+ simp [getD_filter]
3892+
38483893theorem getD_filter_of_getKey?_eq_some [EquivBEq α] [LawfulHashable α]
38493894 {f : α → β → Bool} {k k' : α} {fallback : β} :
38503895 m.getKey? k = some k' →
0 commit comments