val IS_WEAK_SUBLIST_REC_def = Define ` (IS_WEAK_SUBLIST_REC (l1 : 'a list) ([]:'a list) = T) /\ (IS_WEAK_SUBLIST_REC [] (_::_) = F) /\ (IS_WEAK_SUBLIST_REC (y::ys) (x::xs) = ( (x = y) /\ IS_WEAK_SUBLIST_REC ys xs) \/ (IS_WEAK_SUBLIST_REC ys (x::xs)))`; val FILTER_BY_BOOLS_def = Define ` FILTER_BY_BOOLS bl l = MAP SND (FILTER FST (ZIP (bl, l)))` val IS_WEAK_SUBLIST_FILTER_def = Define `IS_WEAK_SUBLIST_FILTER l1 l2 = ?(bl : bool list). (LENGTH bl = LENGTH l1) /\ (l2 = FILTER_BY_BOOLS bl l1)`