Skip to content

Commit 4a52e34

Browse files
HeinrichApfelmusomelkonian
authored andcommitted
Prove properties about nub
1 parent fb08343 commit 4a52e34

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

lib/Haskell/Data/List.agda

+51
Original file line numberDiff line numberDiff line change
@@ -37,3 +37,54 @@ sortOn f =
3737
map snd
3838
∘ sortBy (comparing fst)
3939
∘ map (λ x let y = f x in seq y (y , x))
40+
41+
{-----------------------------------------------------------------------------
42+
Properties
43+
------------------------------------------------------------------------------}
44+
45+
-- | A deleted item is no longer an element.
46+
--
47+
prop-elem-deleteAll
48+
: ∀ ⦃ _ : Eq a ⦄ ⦃ _ : IsLawfulEq a ⦄
49+
(x y : a) (zs : List a)
50+
elem x (deleteAll y zs)
51+
≡ (if x == y then False else elem x zs)
52+
--
53+
prop-elem-deleteAll x y []
54+
with x == y
55+
... | False = refl
56+
... | True = refl
57+
prop-elem-deleteAll x y (z ∷ zs)
58+
with recurse prop-elem-deleteAll x y zs
59+
with y == z in eqyz
60+
... | True
61+
with x == z in eqxz
62+
... | True
63+
rewrite equality' _ _ (trans (equality x z eqxz) (sym (equality y z eqyz)))
64+
= recurse
65+
... | False
66+
= recurse
67+
prop-elem-deleteAll x y (z ∷ zs)
68+
| False
69+
with x == z in eqxz
70+
... | True
71+
rewrite equality x z eqxz | eqSymmetry y z | eqyz
72+
= refl
73+
... | False
74+
= recurse
75+
76+
-- | An item is an element of the 'nub' iff it is
77+
-- an element of the original list.
78+
--
79+
prop-elem-nub
80+
: ∀ ⦃ _ : Eq a ⦄ ⦃ _ : IsLawfulEq a ⦄
81+
(x : a) (ys : List a)
82+
elem x (nub ys)
83+
≡ elem x ys
84+
--
85+
prop-elem-nub x [] = refl
86+
prop-elem-nub x (y ∷ ys)
87+
rewrite prop-elem-deleteAll x y (nub ys)
88+
with x == y
89+
... | True = refl
90+
... | False = prop-elem-nub x ys

0 commit comments

Comments
 (0)