Met and Top lecture 1 (#99)

This commit is contained in:
Patrick Stevens
2020-02-23 12:12:53 +00:00
committed by GitHub
parent f41f5226b9
commit 29216d26cb
9 changed files with 475 additions and 0 deletions

View File

@@ -46,3 +46,34 @@ contains (x :: l) needle = (x ≡ needle) || contains l needle
containsMap : {a b : _} {A : Set a} {B : Set b} (f : A B) (l : List A) (needle : A) (contains l needle) contains (map f l) (f needle)
containsMap f (x :: l) needle (inl cont) = inl (applyEquality f cont)
containsMap f (x :: l) needle (inr cont) = inr (containsMap f l needle cont)
containsAppend : {a : _} {A : Set a} (l1 l2 : List A) (needle : A) (contains (l1 ++ l2) needle) (contains l1 needle) || (contains l2 needle)
containsAppend [] l2 needle cont = inr cont
containsAppend (x :: l1) l2 needle (inl pr) = inl (inl pr)
containsAppend (x :: l1) l2 needle (inr pr) with containsAppend l1 l2 needle pr
containsAppend (x :: l1) l2 needle (inr pr) | inl ans = inl (inr ans)
containsAppend (x :: l1) l2 needle (inr pr) | inr ans = inr ans
containsAppend' : {a : _} {A : Set a} (l1 l2 : List A) (needle : A) (contains l1 needle) || (contains l2 needle) contains (l1 ++ l2) needle
containsAppend' (x :: l1) l2 needle (inl (inl pr)) = inl pr
containsAppend' (x :: l1) l2 needle (inl (inr pr)) = inr (containsAppend' l1 l2 needle (inl pr))
containsAppend' [] l2 needle (inr pr) = pr
containsAppend' (x :: l1) l2 needle (inr pr) = inr (containsAppend' l1 l2 needle (inr pr))
containsCons : {a : _} {A : Set a} (x : A) (l : List A) (needle : A) (contains (x :: l) needle) (x needle) || (contains l needle)
containsCons x l needle pr = pr
containsCons' : {a : _} {A : Set a} (x : A) (l : List A) (needle : A) (x needle) || (contains l needle) (contains (x :: l) needle)
containsCons' x l needle pr = pr
containsDecidable : {a : _} {A : Set a} (decidableEquality : (x y : A) (x y) || ((x y) False)) (l : List A) (needle : A) (contains l needle) || ((contains l needle) False)
containsDecidable decide [] needle = inr λ ()
containsDecidable decide (x :: l) needle with decide x needle
containsDecidable decide (x :: l) .x | inl refl = inl (inl refl)
containsDecidable decide (x :: l) needle | inr x!=n with containsDecidable decide l needle
containsDecidable decide (x :: l) needle | inr x!=n | inl isIn = inl (inr isIn)
containsDecidable decide (x :: l) needle | inr x!=n | inr notIn = inr t
where
t : ((x needle) || contains l needle) False
t (inl x) = x!=n x
t (inr x) = notIn x