File tree 1 file changed +51
-0
lines changed
1 file changed +51
-0
lines changed Original file line number Diff line number Diff line change @@ -37,3 +37,54 @@ sortOn f =
37
37
map snd
38
38
∘ sortBy (comparing fst)
39
39
∘ 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
You can’t perform that action at this time.
0 commit comments