Module docstring
{}
{}
Array.isEqv_iff_rel
theorem
{xs ys : Array α} {r} :
Array.isEqv xs ys r ↔ ∃ h : xs.size = ys.size, ∀ (i : Nat) (h' : i < xs.size), r (xs[i]) (ys[i]'(h ▸ h'))
Array.isEqv_eq_decide
theorem
(xs ys : Array α) (r) :
Array.isEqv xs ys r =
if h : xs.size = ys.size then decide (∀ (i : Nat) (h' : i < xs.size), r (xs[i]) (ys[i]'(h ▸ h'))) else false
theorem isEqv_eq_decide (xs ys : Array α) (r) :
Array.isEqv xs ys r =
if h : xs.size = ys.size then decide (∀ (i : Nat) (h' : i < xs.size), r (xs[i]) (ys[i]'(h ▸ h'))) else false := by
by_cases h : Array.isEqv xs ys r
· simp only [h, Bool.true_eq]
simp only [isEqv_iff_rel] at h
obtain ⟨h, w⟩ := h
simp [h, w]
· let h' := h
simp only [Bool.not_eq_true] at h
simp only [h, Bool.false_eq, dite_eq_right_iff, decide_eq_false_iff_not, Classical.not_forall,
Bool.not_eq_true]
simpa [isEqv_iff_rel] using h'
Array.isEqv_toList
theorem
[BEq α] (xs ys : Array α) : (xs.toList.isEqv ys.toList r) = (xs.isEqv ys r)
@[simp] theorem isEqv_toList [BEq α] (xs ys : Array α) : (xs.toList.isEqv ys.toList r) = (xs.isEqv ys r) := by
simp [isEqv_eq_decide, List.isEqv_eq_decide]
Array.isEqv_self_beq
theorem
[BEq α] [ReflBEq α] (xs : Array α) : Array.isEqv xs xs (· == ·) = true
theorem isEqv_self_beq [BEq α] [ReflBEq α] (xs : Array α) : Array.isEqv xs xs (· == ·) = true := by
simp [isEqv, isEqvAux_self]
Array.isEqv_self
theorem
[DecidableEq α] (xs : Array α) : Array.isEqv xs xs (· = ·) = true
theorem isEqv_self [DecidableEq α] (xs : Array α) : Array.isEqv xs xs (· = ·) = true := by
simp [isEqv, isEqvAux_self]
Array.instDecidableEq
instance
[DecidableEq α] : DecidableEq (Array α)
instance [DecidableEq α] : DecidableEq (Array α) :=
fun xs ys =>
match h:isEqv xs ys (fun a b => a = b) with
| true => isTrue (eq_of_isEqv xs ys h)
| false => isFalse fun h' => by subst h'; rw [isEqv_self] at h; contradiction
Array.beq_eq_decide
theorem
[BEq α] (xs ys : Array α) :
(xs == ys) = if h : xs.size = ys.size then decide (∀ (i : Nat) (h' : i < xs.size), xs[i] == ys[i]'(h ▸ h')) else false
theorem beq_eq_decide [BEq α] (xs ys : Array α) :
(xs == ys) = if h : xs.size = ys.size then
decide (∀ (i : Nat) (h' : i < xs.size), xs[i] == ys[i]'(h ▸ h')) else false := by
simp [BEq.beq, isEqv_eq_decide]
Array.beq_toList
theorem
[BEq α] (xs ys : Array α) : (xs.toList == ys.toList) = (xs == ys)
@[simp] theorem beq_toList [BEq α] (xs ys : Array α) : (xs.toList == ys.toList) = (xs == ys) := by
simp [beq_eq_decide, List.beq_eq_decide]
List.isEqv_toArray
theorem
[BEq α] (as bs : List α) : (as.toArray.isEqv bs.toArray r) = (as.isEqv bs r)
@[simp] theorem isEqv_toArray [BEq α] (as bs : List α) : (as.toArray.isEqv bs.toArray r) = (as.isEqv bs r) := by
simp [isEqv_eq_decide, Array.isEqv_eq_decide]
List.beq_toArray
theorem
[BEq α] (as bs : List α) : (as.toArray == bs.toArray) = (as == bs)
@[simp] theorem beq_toArray [BEq α] (as bs : List α) : (as.toArray == bs.toArray) = (as == bs) := by
simp [beq_eq_decide, Array.beq_eq_decide]
Array.instLawfulBEq
instance
[BEq α] [LawfulBEq α] : LawfulBEq (Array α)