Equations
- instDecidablePredCompProp = inferInstanceAs (DecidablePred fun (x : α) => p (f x))
not #
iff #
implies #
and #
or #
distributivity #
exists and forall #
Alias of the reverse direction of not_exists
.
Alias of the forward direction of not_exists
.
Extract an element from a existential statement, using Classical.choose
.
Equations
Instances For
Show that an element extracted from P : ∃ a, p a
using P.choose
satisfies p
.
decidable #
Construct a non-Prop by cases on an Or
, when the left conjunct is decidable.
Equations
- Or.by_cases h h₁ h₂ = if hp : p then h₁ hp else h₂ (_ : q)
Instances For
Construct a non-Prop by cases on an Or
, when the right conjunct is decidable.
Equations
- Or.by_cases' h h₁ h₂ = if hq : q then h₂ hq else h₁ (_ : p)
Instances For
Equations
- exists_prop_decidable P = if h : p then decidable_of_decidable_of_iff (_ : P h ↔ ∃ (h : p), P h) else isFalse (_ : (∃ (h : p), P h) → False)
Equations
- forall_prop_decidable P = if h : p then decidable_of_decidable_of_iff (_ : P h ↔ ∀ (h : p), P h) else isTrue (_ : ∀ (h2 : p), P h2)
Transfer decidability of a
to decidability of b
, if the propositions are equivalent.
Important: this function should be used instead of rw
on decidable b
, because the
kernel will get stuck reducing the usage of propext
otherwise,
and dec_trivial
will not work.
Equations
Instances For
Transfer decidability of b
to decidability of a
, if the propositions are equivalent.
This is the same as decidable_of_iff
but the iff is flipped.
Equations
- decidable_of_iff' b h = decidable_of_decidable_of_iff (_ : b ↔ a)
Instances For
Equations
- Decidable.predToBool p = { coe := fun (b : α) => decide (p b) }
Prove that a
is decidable by constructing a boolean b
and a proof that b ↔ a
.
(This is sometimes taken as an alternate definition of decidability.)
Equations
Instances For
Alias of the forward direction of Decidable.not_forall
.
classical logic #
Alias of the forward direction of Classical.not_forall
.
equality #
Alias of congrArg
.
Congruence in the function argument: if a₁ = a₂
then f a₁ = f a₂
for
any (nondependent) function f
. This is more powerful than it might look at first, because
you can also use a lambda expression for f
to prove that
<something containing a₁> = <something containing a₂>
. This function is used
internally by tactics like congr
and simp
to apply equalities inside
subterms.
For more information: Equality
Alias of congrFun₃
.
membership #
if-then-else #
miscellaneous #
Ex falso, the nondependent eliminator for the Empty
type.
Equations
- Empty.elim a = nomatch a
Instances For
Equations
Equations
Ex falso, the nondependent eliminator for the PEmpty
type.
Equations
- PEmpty.elim a = nomatch a
Instances For
Equations
Equations
Equations
- (_ : Subsingleton (α × β)) = (_ : Subsingleton (α × β))
Equations
- instInhabitedSort_1 = { default := PUnit }
Equations
- instInhabitedDefaultSortInstInhabitedSort_1 = { default := PUnit.unit }
If all points are equal to a given point x
, then α
is a subsingleton.