Zulip Chat Archive

Stream: new members

Topic: involution and ite


Yakov Pechersky (Sep 08 2020 at 20:29):

What would be the most mathlib-friendly way to state this? Is this too specific? What file would it go in?

import logic.function.basic

lemma inv_ite {α : Type*} (P : Prop) [decidable P] {f : α  α} (hinv : function.involutive f) (x : α) :
  ite P x (f x) = f (ite (¬ P) x (f x)) :=
begin
  rw apply_ite f,
  by_cases h : P,
  { rw [if_pos h, if_neg (not_not.mpr h), hinv x] },
  { rw [if_pos h, if_neg h] },
end

Alex J. Best (Sep 08 2020 at 20:41):

adding a lemma ite_neg seems useful:

lemma ite_neg {c : Prop} {X : Type*} (a b : X) [decidable c] : ite (¬ c) a b = ite c b a :=
by split_ifs; refl

lemma inv_ite {α : Type*} (P : Prop) [decidable P] {f : α  α} (hinv : function.involutive f) (x : α) :
  ite P x (f x) = f (ite (¬ P) x (f x)) :=
by rw [apply_ite f, hinv, ite_neg]

Kenny Lau (Sep 08 2020 at 20:50):

always generalize

Yakov Pechersky (Sep 08 2020 at 20:54):

So, PR this?

lemma ite_neg {c : Prop} {X : Type*} (a b : X) [decidable c] : ite (¬ c) a b = ite c b a :=
by split_ifs; refl

lemma inv_ite {α : Type*} (P : Prop) [decidable P] {f : α  α} (hinv : function.involutive f) (x : α) :
  f (ite P x (f x)) = ite (¬ P) x (f x) :=
by rw [apply_ite f, hinv, ite_neg]

Kevin Buzzard (Sep 08 2020 at 21:42):

Sure!

Yakov Pechersky (Sep 08 2020 at 22:11):

#4074


Last updated: Dec 20 2023 at 11:08 UTC