mirror of
https://github.com/Smaug123/agdaproofs
synced 2025-10-11 22:58:40 +00:00
Met and Top lecture 1 (#99)
This commit is contained in:
@@ -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
|
||||
|
Reference in New Issue
Block a user