-rw-r--r-- 1607 leangoppa-20230726/Goppadecoding/finset.lean raw
import Mathlib.Data.Finset.Basic
namespace Goppadecoding
section lemmas_finset
theorem erase_eq_filter_not_union_filter_erase {U: Type _} [DecidableEq U] {S: Finset U} {s: U} {p: U → Prop} [DecidablePred p]:
s ∈ S.filter p → S.erase s = (S.filter (fun t ↦ ¬ p t)) ∪ ((S.filter p).erase s) :=
by
simp only [Finset.mem_filter, not_and, and_imp]
intro _ ps
ext t
by_cases pt: p t
. simp only [Finset.mem_erase, ne_eq, Finset.mem_filter, not_and, Finset.mem_union, pt, not_true, and_false, and_true, false_or]
. rename_i inst inst_1 a
simp_all only [not_true, Finset.mem_erase, ne_eq, Finset.mem_filter, and_self, Finset.mem_union, not_false_eq_true, and_true, and_false, or_false, and_iff_right_iff_imp]
intro a_1
apply Aesop.BuiltinRules.not_intro
intro a_2
aesop_subst a_2
simp_all only
theorem disjoint_filter_not_filter_erase {U: Type _} [DecidableEq U] {S: Finset U} {s: U} {p: U → Prop} [DecidablePred p]:
Disjoint (S.filter p) ((S.filter (fun t ↦ ¬p t)).erase s) :=
by
rw[disjoint_iff]
ext t
simp only [Finset.mem_filter, not_and, not_not, ge_iff_le, Finset.le_eq_subset, Finset.inf_eq_inter, Finset.mem_inter, Finset.mem_erase, ne_eq, Finset.bot_eq_empty, Finset.not_mem_empty, iff_false, and_imp]
rename_i inst inst_1
intro _ a_1 _ _
simp_all only
theorem injon_filter {U: Type _} [DecidableEq U] {V: Type _} [DecidableEq V] (α: U → V) (S: Finset U) (p: U → Prop) [DecidablePred p]:
Set.InjOn α S → Set.InjOn α (S.filter p) :=
by
apply Set.InjOn.mono
norm_cast
exact Finset.filter_subset p S
end lemmas_finset