(* ---------------------------------------------------------------------- *) (* List *) (* ---------------------------------------------------------------------- *) let NOT_NIL = prove_by_refinement( `!l. ~(l = []) <=> ?(h:A) t. l = CONS h t`, (* {{{ Proof *) [ STRIP_TAC THEN EQ_TAC; MESON_TAC[list_CASES]; STRIP_TAC; ASM_MESON_TAC[NOT_CONS_NIL]; ]);; (* }}} *) let LIST_REWRITES = ref [ NOT_CONS_NIL; HD; TL; CONS_11; LENGTH; LAST; list_CASES; NOT_NIL; ];; let LIST_SIMP_TAC = REWRITE_TAC ( !LIST_REWRITES );; let extend_list_rewrites l = LIST_REWRITES := !LIST_REWRITES @ l;; BASIC_REWRITES := !LIST_REWRITES @ !BASIC_REWRITES;;