Documentation
Init
.
SimpLemmas
Search
Google site search
return to top
source
Imports
Init.Core
Imported by
of_eq_true
of_eq_false
eq_true
eq_false
eq_false'
eq_true_of_decide
eq_false_of_decide
eq_self
implies_congr
iff_congr
implies_dep_congr_ctx
implies_congr_ctx
forall_congr
forall_prop_domain_congr
let_congr
let_val_congr
let_body_congr
ite_congr
Eq
.
mpr_prop
Eq
.
mpr_not
dite_congr
ne_eq
ite_true
ite_false
dite_true
dite_false
ite_cond_eq_true
ite_cond_eq_false
dite_cond_eq_true
dite_cond_eq_false
ite_self
and_true
true_and
and_false
false_and
and_self
and_not_self
not_and_self
and_imp
not_and
or_self
or_true
true_or
or_false
false_or
iff_self
iff_true
true_iff
iff_false
false_iff
false_implies
implies_true
true_implies
not_false_eq_true
not_true_eq_false
not_iff_self
and_congr_right
and_congr_left
and_assoc
and_self_left
and_self_right
and_congr_right_iff
and_congr_left_iff
and_iff_left_of_imp
and_iff_right_of_imp
and_iff_left_iff_imp
and_iff_right_iff_imp
iff_self_and
iff_and_self
Or
.
imp
Or
.
imp_left
Or
.
imp_right
or_assoc
or_self_left
or_self_right
or_iff_right_of_imp
or_iff_left_of_imp
or_iff_left_iff_imp
or_iff_right_iff_imp
Bool
.
or_false
Bool
.
or_true
Bool
.
false_or
Bool
.
true_or
Bool
.
or_self
Bool
.
or_eq_true
Bool
.
and_false
Bool
.
and_true
Bool
.
false_and
Bool
.
true_and
Bool
.
and_self
Bool
.
and_eq_true
Bool
.
and_assoc
Bool
.
or_assoc
Bool
.
not_not
Bool
.
not_true
Bool
.
not_false
Bool
.
not_beq_true
Bool
.
not_beq_false
Bool
.
not_eq_true'
Bool
.
not_eq_false'
Bool
.
beq_to_eq
Bool
.
not_beq_to_not_eq
Bool
.
not_eq_true
Bool
.
not_eq_false
decide_eq_true_eq
decide_not
not_decide_eq_true
heq_eq_eq
cond_true
cond_false
beq_self_eq_true
beq_self_eq_true'
bne_self_eq_false
bne_self_eq_false'
decide_False
decide_True
bne_iff_ne
Nat
.
le_zero_eq
source
theorem
of_eq_true
{p :
Prop
}
(h :
p
=
True
)
:
p
source
theorem
of_eq_false
{p :
Prop
}
(h :
p
=
False
)
:
¬
p
source
theorem
eq_true
{p :
Prop
}
(h :
p
)
:
p
=
True
source
theorem
eq_false
{p :
Prop
}
(h :
¬
p
)
:
p
=
False
source
theorem
eq_false'
{p :
Prop
}
(h :
p
→
False
)
:
p
=
False
source
theorem
eq_true_of_decide
{p :
Prop
}
:
∀ {
x
:
Decidable
p
},
decide
p
=
true
→
p
=
True
source
theorem
eq_false_of_decide
{p :
Prop
}
:
∀ {
x
:
Decidable
p
},
decide
p
=
false
→
p
=
False
source
@[simp]
theorem
eq_self
{α :
Sort
u_1}
(a :
α
)
:
(
a
=
a
)
=
True
source
theorem
implies_congr
{p₁ :
Sort
u}
{p₂ :
Sort
u}
{q₁ :
Sort
v}
{q₂ :
Sort
v}
(h₁ :
p₁
=
p₂
)
(h₂ :
q₁
=
q₂
)
:
(
p₁
→
q₁
)
=
(
p₂
→
q₂
)
source
theorem
iff_congr
{p₁ :
Prop
}
{p₂ :
Prop
}
{q₁ :
Prop
}
{q₂ :
Prop
}
(h₁ :
p₁
↔
p₂
)
(h₂ :
q₁
↔
q₂
)
:
(
p₁
↔
q₁
)
↔
(
p₂
↔
q₂
)
source
theorem
implies_dep_congr_ctx
{p₁ :
Prop
}
{p₂ :
Prop
}
{q₁ :
Prop
}
(h₁ :
p₁
=
p₂
)
{q₂ :
p₂
→
Prop
}
(h₂ :
∀ (
h
:
p₂
),
q₁
=
q₂
h
)
:
(
p₁
→
q₁
)
=
∀ (
h
:
p₂
),
q₂
h
source
theorem
implies_congr_ctx
{p₁ :
Prop
}
{p₂ :
Prop
}
{q₁ :
Prop
}
{q₂ :
Prop
}
(h₁ :
p₁
=
p₂
)
(h₂ :
p₂
→
q₁
=
q₂
)
:
(
p₁
→
q₁
)
=
(
p₂
→
q₂
)
source
theorem
forall_congr
{α :
Sort
u}
{p :
α
→
Prop
}
{q :
α
→
Prop
}
(h :
∀ (
a
:
α
),
p
a
=
q
a
)
:
(
∀ (
a
:
α
),
p
a
)
=
∀ (
a
:
α
),
q
a
source
theorem
forall_prop_domain_congr
{p₁ :
Prop
}
{p₂ :
Prop
}
{q₁ :
p₁
→
Prop
}
{q₂ :
p₂
→
Prop
}
(h₁ :
p₁
=
p₂
)
(h₂ :
∀ (
a
:
p₂
),
q₁
⋯
=
q₂
a
)
:
(
∀ (
a
:
p₁
),
q₁
a
)
=
∀ (
a
:
p₂
),
q₂
a
source
theorem
let_congr
{α :
Sort
u}
{β :
Sort
v}
{a :
α
}
{a' :
α
}
{b :
α
→
β
}
{b' :
α
→
β
}
(h₁ :
a
=
a'
)
(h₂ :
∀ (
x
:
α
),
b
x
=
b'
x
)
:
(
let x :=
a
;
b
x
)
=
let x :=
a'
;
b'
x
source
theorem
let_val_congr
{α :
Sort
u}
{β :
Sort
v}
{a :
α
}
{a' :
α
}
(b :
α
→
β
)
(h :
a
=
a'
)
:
(
let x :=
a
;
b
x
)
=
let x :=
a'
;
b
x
source
theorem
let_body_congr
{α :
Sort
u}
{β :
α
→
Sort
v
}
{b :
(
a
:
α
) →
β
a
}
{b' :
(
a
:
α
) →
β
a
}
(a :
α
)
(h :
∀ (
x
:
α
),
b
x
=
b'
x
)
:
(
let x :=
a
;
b
x
)
=
let x :=
a
;
b'
x
source
theorem
ite_congr
{α :
Sort
u_1}
{b :
Prop
}
{c :
Prop
}
{x :
α
}
{y :
α
}
{u :
α
}
{v :
α
}
{s :
Decidable
b
}
[
Decidable
c
]
(h₁ :
b
=
c
)
(h₂ :
c
→
x
=
u
)
(h₃ :
¬
c
→
y
=
v
)
:
(
if
b
then
x
else
y
)
=
if
c
then
u
else
v
source
theorem
Eq
.
mpr_prop
{p :
Prop
}
{q :
Prop
}
(h₁ :
p
=
q
)
(h₂ :
q
)
:
p
source
theorem
Eq
.
mpr_not
{p :
Prop
}
{q :
Prop
}
(h₁ :
p
=
q
)
(h₂ :
¬
q
)
:
¬
p
source
theorem
dite_congr
{b :
Prop
}
{c :
Prop
}
{α :
Sort
u_1}
:
∀ {
x
:
Decidable
b
} [
inst
:
Decidable
c
] {
x_1
:
b
→
α
} {
u
:
c
→
α
} {
y
:
¬
b
→
α
} {
v
:
¬
c
→
α
} (
h₁
:
b
=
c
),
(
∀ (
h
:
c
),
x_1
⋯
=
u
h
)
→
(
∀ (
h
:
¬
c
),
y
⋯
=
v
h
)
→
dite
b
x_1
y
=
dite
c
u
v
source
@[simp]
theorem
ne_eq
{α :
Sort
u_1}
(a :
α
)
(b :
α
)
:
(
a
≠
b
)
=
¬
a
=
b
source
@[simp]
theorem
ite_true
{α :
Sort
u_1}
(a :
α
)
(b :
α
)
:
(
if
True
then
a
else
b
)
=
a
source
@[simp]
theorem
ite_false
{α :
Sort
u_1}
(a :
α
)
(b :
α
)
:
(
if
False
then
a
else
b
)
=
b
source
@[simp]
theorem
dite_true
{α :
Sort
u}
{t :
True
→
α
}
{e :
¬
True
→
α
}
:
dite
True
t
e
=
t
True.intro
source
@[simp]
theorem
dite_false
{α :
Sort
u}
{t :
False
→
α
}
{e :
¬
False
→
α
}
:
dite
False
t
e
=
e
not_false
source
theorem
ite_cond_eq_true
{α :
Sort
u}
{c :
Prop
}
:
∀ {
x
:
Decidable
c
} (
a
b :
α
),
c
=
True
→
(
if
c
then
a
else
b
)
=
a
source
theorem
ite_cond_eq_false
{α :
Sort
u}
{c :
Prop
}
:
∀ {
x
:
Decidable
c
} (
a
b :
α
),
c
=
False
→
(
if
c
then
a
else
b
)
=
b
source
theorem
dite_cond_eq_true
{α :
Sort
u}
{c :
Prop
}
:
∀ {
x
:
Decidable
c
} {
t
:
c
→
α
} {
e
:
¬
c
→
α
} (
h
:
c
=
True
),
dite
c
t
e
=
t
⋯
source
theorem
dite_cond_eq_false
{α :
Sort
u}
{c :
Prop
}
:
∀ {
x
:
Decidable
c
} {
t
:
c
→
α
} {
e
:
¬
c
→
α
} (
h
:
c
=
False
),
dite
c
t
e
=
e
⋯
source
@[simp]
theorem
ite_self
{α :
Sort
u}
{c :
Prop
}
{d :
Decidable
c
}
(a :
α
)
:
(
if
c
then
a
else
a
)
=
a
source
@[simp]
theorem
and_true
(p :
Prop
)
:
(
p
∧
True
)
=
p
source
@[simp]
theorem
true_and
(p :
Prop
)
:
(
True
∧
p
)
=
p
source
@[simp]
theorem
and_false
(p :
Prop
)
:
(
p
∧
False
)
=
False
source
@[simp]
theorem
false_and
(p :
Prop
)
:
(
False
∧
p
)
=
False
source
@[simp]
theorem
and_self
(p :
Prop
)
:
(
p
∧
p
)
=
p
source
@[simp]
theorem
and_not_self
{a :
Prop
}
:
¬
(
a
∧
¬
a
)
source
@[simp]
theorem
not_and_self
{a :
Prop
}
:
¬
(
¬
a
∧
a
)
source
@[simp]
theorem
and_imp
{a :
Prop
}
{b :
Prop
}
{c :
Prop
}
:
a
∧
b
→
c
↔
a
→
b
→
c
source
@[simp]
theorem
not_and
{a :
Prop
}
{b :
Prop
}
:
¬
(
a
∧
b
)
↔
a
→
¬
b
source
@[simp]
theorem
or_self
(p :
Prop
)
:
(
p
∨
p
)
=
p
source
@[simp]
theorem
or_true
(p :
Prop
)
:
(
p
∨
True
)
=
True
source
@[simp]
theorem
true_or
(p :
Prop
)
:
(
True
∨
p
)
=
True
source
@[simp]
theorem
or_false
(p :
Prop
)
:
(
p
∨
False
)
=
p
source
@[simp]
theorem
false_or
(p :
Prop
)
:
(
False
∨
p
)
=
p
source
@[simp]
theorem
iff_self
(p :
Prop
)
:
(
p
↔
p
)
=
True
source
@[simp]
theorem
iff_true
(p :
Prop
)
:
(
p
↔
True
)
=
p
source
@[simp]
theorem
true_iff
(p :
Prop
)
:
(
True
↔
p
)
=
p
source
@[simp]
theorem
iff_false
(p :
Prop
)
:
(
p
↔
False
)
=
¬
p
source
@[simp]
theorem
false_iff
(p :
Prop
)
:
(
False
↔
p
)
=
¬
p
source
@[simp]
theorem
false_implies
(p :
Prop
)
:
(
False
→
p
)
=
True
source
@[simp]
theorem
implies_true
(α :
Sort
u)
:
(
α
→
True
)
=
True
source
@[simp]
theorem
true_implies
(p :
Prop
)
:
(
True
→
p
)
=
p
source
@[simp]
theorem
not_false_eq_true
:
(
¬
False
)
=
True
source
@[simp]
theorem
not_true_eq_false
:
(
¬
True
)
=
False
source
@[simp]
theorem
not_iff_self
{a :
Prop
}
:
¬
(
¬
a
↔
a
)
and
#
source
theorem
and_congr_right
{a :
Prop
}
{b :
Prop
}
{c :
Prop
}
(h :
a
→
(
b
↔
c
)
)
:
a
∧
b
↔
a
∧
c
source
theorem
and_congr_left
{c :
Prop
}
{a :
Prop
}
{b :
Prop
}
(h :
c
→
(
a
↔
b
)
)
:
a
∧
c
↔
b
∧
c
source
theorem
and_assoc
{a :
Prop
}
{b :
Prop
}
{c :
Prop
}
:
(
a
∧
b
)
∧
c
↔
a
∧
b
∧
c
source
@[simp]
theorem
and_self_left
{a :
Prop
}
{b :
Prop
}
:
a
∧
a
∧
b
↔
a
∧
b
source
@[simp]
theorem
and_self_right
{a :
Prop
}
{b :
Prop
}
:
(
a
∧
b
)
∧
b
↔
a
∧
b
source
@[simp]
theorem
and_congr_right_iff
{a :
Prop
}
{b :
Prop
}
{c :
Prop
}
:
(
a
∧
b
↔
a
∧
c
)
↔
a
→
(
b
↔
c
)
source
@[simp]
theorem
and_congr_left_iff
{a :
Prop
}
{c :
Prop
}
{b :
Prop
}
:
(
a
∧
c
↔
b
∧
c
)
↔
c
→
(
a
↔
b
)
source
theorem
and_iff_left_of_imp
{a :
Prop
}
{b :
Prop
}
(h :
a
→
b
)
:
a
∧
b
↔
a
source
theorem
and_iff_right_of_imp
{b :
Prop
}
{a :
Prop
}
(h :
b
→
a
)
:
a
∧
b
↔
b
source
@[simp]
theorem
and_iff_left_iff_imp
{a :
Prop
}
{b :
Prop
}
:
(
a
∧
b
↔
a
)
↔
a
→
b
source
@[simp]
theorem
and_iff_right_iff_imp
{a :
Prop
}
{b :
Prop
}
:
(
a
∧
b
↔
b
)
↔
b
→
a
source
@[simp]
theorem
iff_self_and
{p :
Prop
}
{q :
Prop
}
:
(
p
↔
p
∧
q
)
↔
p
→
q
source
@[simp]
theorem
iff_and_self
{p :
Prop
}
{q :
Prop
}
:
(
p
↔
q
∧
p
)
↔
p
→
q
or
#
source
theorem
Or
.
imp
{a :
Prop
}
{c :
Prop
}
{b :
Prop
}
{d :
Prop
}
(f :
a
→
c
)
(g :
b
→
d
)
(h :
a
∨
b
)
:
c
∨
d
source
theorem
Or
.
imp_left
{a :
Prop
}
{b :
Prop
}
{c :
Prop
}
(f :
a
→
b
)
:
a
∨
c
→
b
∨
c
source
theorem
Or
.
imp_right
{b :
Prop
}
{c :
Prop
}
{a :
Prop
}
(f :
b
→
c
)
:
a
∨
b
→
a
∨
c
source
theorem
or_assoc
{a :
Prop
}
{b :
Prop
}
{c :
Prop
}
:
(
a
∨
b
)
∨
c
↔
a
∨
b
∨
c
source
@[simp]
theorem
or_self_left
{a :
Prop
}
{b :
Prop
}
:
a
∨
a
∨
b
↔
a
∨
b
source
@[simp]
theorem
or_self_right
{a :
Prop
}
{b :
Prop
}
:
(
a
∨
b
)
∨
b
↔
a
∨
b
source
theorem
or_iff_right_of_imp
{a :
Prop
}
{b :
Prop
}
(ha :
a
→
b
)
:
a
∨
b
↔
b
source
theorem
or_iff_left_of_imp
{b :
Prop
}
{a :
Prop
}
(hb :
b
→
a
)
:
a
∨
b
↔
a
source
@[simp]
theorem
or_iff_left_iff_imp
{a :
Prop
}
{b :
Prop
}
:
(
a
∨
b
↔
a
)
↔
b
→
a
source
@[simp]
theorem
or_iff_right_iff_imp
{a :
Prop
}
{b :
Prop
}
:
(
a
∨
b
↔
b
)
↔
a
→
b
source
@[simp]
theorem
Bool
.
or_false
(b :
Bool
)
:
(
b
||
false
)
=
b
source
@[simp]
theorem
Bool
.
or_true
(b :
Bool
)
:
(
b
||
true
)
=
true
source
@[simp]
theorem
Bool
.
false_or
(b :
Bool
)
:
(
false
||
b
)
=
b
source
@[simp]
theorem
Bool
.
true_or
(b :
Bool
)
:
(
true
||
b
)
=
true
source
@[simp]
theorem
Bool
.
or_self
(b :
Bool
)
:
(
b
||
b
)
=
b
source
@[simp]
theorem
Bool
.
or_eq_true
(a :
Bool
)
(b :
Bool
)
:
(
(
a
||
b
)
=
true
)
=
(
a
=
true
∨
b
=
true
)
source
@[simp]
theorem
Bool
.
and_false
(b :
Bool
)
:
(
b
&&
false
)
=
false
source
@[simp]
theorem
Bool
.
and_true
(b :
Bool
)
:
(
b
&&
true
)
=
b
source
@[simp]
theorem
Bool
.
false_and
(b :
Bool
)
:
(
false
&&
b
)
=
false
source
@[simp]
theorem
Bool
.
true_and
(b :
Bool
)
:
(
true
&&
b
)
=
b
source
@[simp]
theorem
Bool
.
and_self
(b :
Bool
)
:
(
b
&&
b
)
=
b
source
@[simp]
theorem
Bool
.
and_eq_true
(a :
Bool
)
(b :
Bool
)
:
(
(
a
&&
b
)
=
true
)
=
(
a
=
true
∧
b
=
true
)
source
theorem
Bool
.
and_assoc
(a :
Bool
)
(b :
Bool
)
(c :
Bool
)
:
(
a
&&
b
&&
c
)
=
(
a
&&
(
b
&&
c
)
)
source
theorem
Bool
.
or_assoc
(a :
Bool
)
(b :
Bool
)
(c :
Bool
)
:
(
a
||
b
||
c
)
=
(
a
||
(
b
||
c
)
)
source
@[simp]
theorem
Bool
.
not_not
(b :
Bool
)
:
(
!
!
b
)
=
b
source
@[simp]
theorem
Bool
.
not_true
:
(
!
true
)
=
false
source
@[simp]
theorem
Bool
.
not_false
:
(
!
false
)
=
true
source
@[simp]
theorem
Bool
.
not_beq_true
(b :
Bool
)
:
(
!
b
==
true
)
=
(
b
==
false
)
source
@[simp]
theorem
Bool
.
not_beq_false
(b :
Bool
)
:
(
!
b
==
false
)
=
(
b
==
true
)
source
@[simp]
theorem
Bool
.
not_eq_true'
(b :
Bool
)
:
(
(
!
b
)
=
true
)
=
(
b
=
false
)
source
@[simp]
theorem
Bool
.
not_eq_false'
(b :
Bool
)
:
(
(
!
b
)
=
false
)
=
(
b
=
true
)
source
@[simp]
theorem
Bool
.
beq_to_eq
(a :
Bool
)
(b :
Bool
)
:
(
(
a
==
b
)
=
true
)
=
(
a
=
b
)
source
@[simp]
theorem
Bool
.
not_beq_to_not_eq
(a :
Bool
)
(b :
Bool
)
:
(
(
!
a
==
b
)
=
true
)
=
¬
a
=
b
source
@[simp]
theorem
Bool
.
not_eq_true
(b :
Bool
)
:
(
¬
b
=
true
)
=
(
b
=
false
)
source
@[simp]
theorem
Bool
.
not_eq_false
(b :
Bool
)
:
(
¬
b
=
false
)
=
(
b
=
true
)
source
@[simp]
theorem
decide_eq_true_eq
{p :
Prop
}
:
∀ {
x
:
Decidable
p
},
(
decide
p
=
true
)
=
p
source
@[simp]
theorem
decide_not
{p :
Prop
}
{h :
Decidable
p
}
:
(
decide
¬
p
)
=
!
decide
p
source
@[simp]
theorem
not_decide_eq_true
{p :
Prop
}
{h :
Decidable
p
}
:
(
(
!
decide
p
)
=
true
)
=
¬
p
source
@[simp]
theorem
heq_eq_eq
{α :
Sort
u}
(a :
α
)
(b :
α
)
:
HEq
a
b
=
(
a
=
b
)
source
@[simp]
theorem
cond_true
{α :
Type
u_1}
(a :
α
)
(b :
α
)
:
(
bif
true
then
a
else
b
)
=
a
source
@[simp]
theorem
cond_false
{α :
Type
u_1}
(a :
α
)
(b :
α
)
:
(
bif
false
then
a
else
b
)
=
b
source
@[simp]
theorem
beq_self_eq_true
{α :
Type
u_1}
[
BEq
α
]
[
LawfulBEq
α
]
(a :
α
)
:
(
a
==
a
)
=
true
source
@[simp]
theorem
beq_self_eq_true'
{α :
Type
u_1}
[
DecidableEq
α
]
(a :
α
)
:
(
a
==
a
)
=
true
source
@[simp]
theorem
bne_self_eq_false
{α :
Type
u_1}
[
BEq
α
]
[
LawfulBEq
α
]
(a :
α
)
:
(
a
!=
a
)
=
false
source
@[simp]
theorem
bne_self_eq_false'
{α :
Type
u_1}
[
DecidableEq
α
]
(a :
α
)
:
(
a
!=
a
)
=
false
source
@[simp]
theorem
decide_False
:
decide
False
=
false
source
@[simp]
theorem
decide_True
:
decide
True
=
true
source
@[simp]
theorem
bne_iff_ne
{α :
Type
u_1}
[
BEq
α
]
[
LawfulBEq
α
]
(a :
α
)
(b :
α
)
:
(
a
!=
b
)
=
true
↔
a
≠
b
source
@[simp]
theorem
Nat
.
le_zero_eq
(a :
Nat
)
:
(
a
≤
0
)
=
(
a
=
0
)