More basic logic properties #
A few more logic lemmas. These are in their own file, rather than Logic.Basic, because it is
convenient to be able to use the tauto or split_ifs tactics.
Implementation notes #
We spell those lemmas out with dite and ite rather than the if then else notation because this
would result in less delta-reduced statements.
theorem
dite_dite_distrib_left
{α : Sort u_1}
{p q : Prop}
[Decidable p]
[Decidable q]
{a : p → α}
{b : ¬p → q → α}
{c : ¬p → ¬q → α}
:
(dite p a fun (hp : ¬p) => dite q (b hp) (c hp)) = if hq : q then dite p a fun (hp : ¬p) => b hp hq else dite p a fun (hp : ¬p) => c hp hq
theorem
dite_dite_distrib_right
{α : Sort u_1}
{p q : Prop}
[Decidable p]
[Decidable q]
{a : p → q → α}
{b : p → ¬q → α}
{c : ¬p → α}
:
dite p (fun (hp : p) => dite q (a hp) (b hp)) c = if hq : q then dite p (fun (hp : p) => a hp hq) c else dite p (fun (hp : p) => b hp hq) c
theorem
ite_dite_distrib_left
{α : Sort u_1}
{p q : Prop}
[Decidable p]
[Decidable q]
{a : α}
{b : q → α}
{c : ¬q → α}
:
(if p then a else dite q b c) = if hq : q then if p then a else b hq else if p then a else c hq
theorem
ite_dite_distrib_right
{α : Sort u_1}
{p q : Prop}
[Decidable p]
[Decidable q]
{a : q → α}
{b : ¬q → α}
{c : α}
:
(if p then dite q a b else c) = if hq : q then if p then a hq else c else if p then b hq else c
theorem
dite_ite_distrib_left
{α : Sort u_1}
{p q : Prop}
[Decidable p]
[Decidable q]
{a : p → α}
{b c : ¬p → α}
:
(dite p a fun (hp : ¬p) => if q then b hp else c hp) = if q then dite p a b else dite p a c
theorem
dite_ite_distrib_right
{α : Sort u_1}
{p q : Prop}
[Decidable p]
[Decidable q]
{a b : p → α}
{c : ¬p → α}
:
dite p (fun (hp : p) => if q then a hp else b hp) c = if q then dite p a c else dite p b c
theorem
ite_ite_distrib_left
{α : Sort u_1}
{p q : Prop}
[Decidable p]
[Decidable q]
{a b c : α}
:
(if p then a else if q then b else c) = if q then if p then a else b else if p then a else c
theorem
ite_ite_distrib_right
{α : Sort u_1}
{p q : Prop}
[Decidable p]
[Decidable q]
{a b c : α}
:
(if p then if q then a else b else c) = if q then if p then a else c else if p then b else c