Module docstring
{}
{}
PartialEquivBEq
structure
(α) [BEq α]
/-- `PartialEquivBEq α` says that the `BEq` implementation is a
partial equivalence relation, that is:
* it is symmetric: `a == b → b == a`
* it is transitive: `a == b → b == c → a == c`.
-/
class PartialEquivBEq (α) [BEq α] : Prop where
/-- Symmetry for `BEq`. If `a == b` then `b == a`. -/
symm : (a : α) == b → b == a
/-- Transitivity for `BEq`. If `a == b` and `b == c` then `a == c`. -/
trans : (a : α) == b → b == c → a == c
ReflBEq
structure
(α) [BEq α]
EquivBEq
structure
(α) [BEq α] : Prop extends PartialEquivBEq α, ReflBEq α
/-- `EquivBEq` says that the `BEq` implementation is an equivalence relation. -/
class EquivBEq (α) [BEq α] : Prop extends PartialEquivBEq α, ReflBEq α
BEq.refl
theorem
[BEq α] [ReflBEq α] {a : α} : a == a
@[simp]
theorem BEq.refl [BEq α] [ReflBEq α] {a : α} : a == a :=
ReflBEq.refl
beq_of_eq
theorem
[BEq α] [ReflBEq α] {a b : α} : a = b → a == b
BEq.symm
theorem
[BEq α] [PartialEquivBEq α] {a b : α} : a == b → b == a
theorem BEq.symm [BEq α] [PartialEquivBEq α] {a b : α} : a == b → b == a :=
PartialEquivBEq.symm
BEq.comm
theorem
[BEq α] [PartialEquivBEq α] {a b : α} : (a == b) = (b == a)
theorem BEq.comm [BEq α] [PartialEquivBEq α] {a b : α} : (a == b) = (b == a) :=
Bool.eq_iff_iff.2 ⟨BEq.symm, BEq.symm⟩
bne_comm
theorem
[BEq α] [PartialEquivBEq α] {a b : α} : (a != b) = (b != a)
BEq.symm_false
theorem
[BEq α] [PartialEquivBEq α] {a b : α} : (a == b) = false → (b == a) = false
theorem BEq.symm_false [BEq α] [PartialEquivBEq α] {a b : α} : (a == b) = false → (b == a) = false :=
BEq.comm (α := α) ▸ id
BEq.trans
theorem
[BEq α] [PartialEquivBEq α] {a b c : α} : a == b → b == c → a == c
theorem BEq.trans [BEq α] [PartialEquivBEq α] {a b c : α} : a == b → b == c → a == c :=
PartialEquivBEq.trans
BEq.congr_left
theorem
[BEq α] [PartialEquivBEq α] {a b c : α} (h : a == b) : (a == c) = (b == c)
theorem BEq.congr_left [BEq α] [PartialEquivBEq α] {a b c : α} (h : a == b) :
(a == c) = (b == c) :=
Bool.eq_iff_iff.mpr ⟨BEq.trans (BEq.symm h), BEq.trans h⟩
BEq.congr_right
theorem
[BEq α] [PartialEquivBEq α] {a b c : α} (h : b == c) : (a == b) = (a == c)
theorem BEq.congr_right [BEq α] [PartialEquivBEq α] {a b c : α} (h : b == c) :
(a == b) = (a == c) :=
Bool.eq_iff_iff.mpr ⟨fun h' => BEq.trans h' h, fun h' => BEq.trans h' (BEq.symm h)⟩
BEq.neq_of_neq_of_beq
theorem
[BEq α] [PartialEquivBEq α] {a b c : α} : (a == b) = false → b == c → (a == c) = false
theorem BEq.neq_of_neq_of_beq [BEq α] [PartialEquivBEq α] {a b c : α} :
(a == b) = false → b == c → (a == c) = false :=
fun h₁ h₂ => Bool.eq_false_iff.2 fun h₃ => Bool.eq_false_iff.1 h₁ (BEq.trans h₃ (BEq.symm h₂))
BEq.neq_of_beq_of_neq
theorem
[BEq α] [PartialEquivBEq α] {a b c : α} : a == b → (b == c) = false → (a == c) = false
theorem BEq.neq_of_beq_of_neq [BEq α] [PartialEquivBEq α] {a b c : α} :
a == b → (b == c) = false → (a == c) = false :=
fun h₁ h₂ => Bool.eq_false_iff.2 fun h₃ => Bool.eq_false_iff.1 h₂ (BEq.trans (BEq.symm h₁) h₃)
instEquivBEqOfLawfulBEq
instance
[BEq α] [LawfulBEq α] : EquivBEq α
instance (priority := low) [BEq α] [LawfulBEq α] : EquivBEq α where
refl := LawfulBEq.rfl
symm h := beq_iff_eq.2 <| Eq.symm <| beq_iff_eq.1 h
trans hab hbc := beq_iff_eq.2 <| (beq_iff_eq.1 hab).trans <| beq_iff_eq.1 hbc