This PR adds support for decidable equality of empty lists and empty arrays. Decidable equality for lists and arrays is suitably modified so that all diamonds are definitionally equal. Following #9302, the strong condition of definitionally equal under `with_reducible_and_instances` is tested. This also moves some of the comments added in #9302 out of docstrings. --------- Co-authored-by: Aaron Liu <aaronliu2008@outlook.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
28 lines
764 B
Text
28 lines
764 B
Text
def listL (a : Array α) := if a = #[] then 1 else 2
|
||
def listR (a : Array α) := if #[] = a then 1 else 2
|
||
|
||
/-- info: 1 -/
|
||
#guard_msgs in #eval @listL Nat #[]
|
||
/-- info: 2 -/
|
||
#guard_msgs in #eval listL #[""]
|
||
/-- info: 1 -/
|
||
#guard_msgs in #eval @listL Nat #[]
|
||
/-- info: 2 -/
|
||
#guard_msgs in #eval listL #[()]
|
||
|
||
|
||
-- test instance diamonds
|
||
example :
|
||
@Array.instDecidableEmpEq α #[] = @Array.instDecidableEqEmp α #[] := by
|
||
with_reducible_and_instances rfl
|
||
|
||
section
|
||
variable {α : Type u} [DecidableEq α]
|
||
example (x : Array α) :
|
||
Array.instDecidableEq x #[] = Array.instDecidableEqEmp x := by
|
||
with_reducible_and_instances rfl
|
||
|
||
example (x : Array α) :
|
||
Array.instDecidableEq #[] x = Array.instDecidableEmpEq x := by
|
||
with_reducible_and_instances rfl
|
||
end
|