Library probsa.util.seq
From mathcomp Require Export ssreflect ssrbool eqtype ssrnat seq.
Require Export prosa.util.list.
Lemma seq_split_take_drop :
∀ {X : eqType} (e : X) (xs : seq X),
(e \in xs) →
xs = take (index e xs) xs ++ [:: e] ++ drop (index e xs).+1 xs.
Lemma seq_split :
∀ {X : eqType} (e : X) (xs : seq X),
(e \in xs) →
∃ xs1 xs2,
xs = xs1 ++ [::e] ++ xs2
∧ (e \notin xs1).
Lemma choose_superior_default_or_in_seq :
∀ {X : eqType} (R : rel X) (a e : X) (ys : seq X),
foldr (choose_superior R) (Some a) ys = Some e →
a = e ∨ e \in ys.
Lemma foldr_choose_superior_not_none :
∀ {X : eqType} (R : rel X) (e : X) (ys : seq X),
¬ foldr (choose_superior R) (Some e) ys = None.
Lemma foldr_choose_superior_in_seq :
∀ {X : eqType} (R : rel X) (ys : seq X) (y e : X),
(y \in ys) →
(R y e) →
foldr (choose_superior R) (Some e) ys = Some e →
e \in ys.
Lemma supremum_monotone_wrt_subset :
∀ {X : eqType} (R : rel X) (e : X) (xs ys : seq X),
reflexive R →
total R →
transitive R →
uniq ys →
subseq xs ys →
(e \in xs) →
supremum R ys = Some e →
supremum R xs = Some e.
Lemma subseq_filter :
∀ {X : eqType} (xs : seq X) (P1 P2 : pred X),
(∀ x, x \in xs → P1 x → P2 x) →
subseq [seq x <- xs | P1 x] [seq x <- xs | P2 x].
Require Export prosa.util.list.
Lemma seq_split_take_drop :
∀ {X : eqType} (e : X) (xs : seq X),
(e \in xs) →
xs = take (index e xs) xs ++ [:: e] ++ drop (index e xs).+1 xs.
Lemma seq_split :
∀ {X : eqType} (e : X) (xs : seq X),
(e \in xs) →
∃ xs1 xs2,
xs = xs1 ++ [::e] ++ xs2
∧ (e \notin xs1).
Lemma choose_superior_default_or_in_seq :
∀ {X : eqType} (R : rel X) (a e : X) (ys : seq X),
foldr (choose_superior R) (Some a) ys = Some e →
a = e ∨ e \in ys.
Lemma foldr_choose_superior_not_none :
∀ {X : eqType} (R : rel X) (e : X) (ys : seq X),
¬ foldr (choose_superior R) (Some e) ys = None.
Lemma foldr_choose_superior_in_seq :
∀ {X : eqType} (R : rel X) (ys : seq X) (y e : X),
(y \in ys) →
(R y e) →
foldr (choose_superior R) (Some e) ys = Some e →
e \in ys.
Lemma supremum_monotone_wrt_subset :
∀ {X : eqType} (R : rel X) (e : X) (xs ys : seq X),
reflexive R →
total R →
transitive R →
uniq ys →
subseq xs ys →
(e \in xs) →
supremum R ys = Some e →
supremum R xs = Some e.
Lemma subseq_filter :
∀ {X : eqType} (xs : seq X) (P1 P2 : pred X),
(∀ x, x \in xs → P1 x → P2 x) →
subseq [seq x <- xs | P1 x] [seq x <- xs | P2 x].