@@ -554,7 +554,7 @@ Proof
554554 \\ ‘OPTREL clean_rel (ALOOKUP (REVERSE xs) s) (ALOOKUP (REVERSE ys) s)’
555555 by (irule LIST_REL_OPTREL
556556 \\ gvs [LIST_REL_EL_EQN, ELIM_UNCURRY, LIST_EQ_REWRITE, EL_MAP])
557- \\ gvs [REVERSE_APPEND]
557+ \\ gvs [REVERSE_APPEND, SNOC_APPEND ]
558558 \\ IF_CASES_TAC \\ gvs []
559559 \\ gvs [OPTREL_def]
560560 \\ rpt $ dxrule_then assume_tac ALOOKUP_MEM \\ gvs [EVERY_MEM, MEM_MAP, PULL_EXISTS, FORALL_PROD]
@@ -577,7 +577,7 @@ Proof
577577 \\ ‘OPTREL clean_rel (ALOOKUP (REVERSE xs) s) (ALOOKUP (REVERSE ys) s)’
578578 by (irule LIST_REL_OPTREL
579579 \\ gvs [LIST_REL_EL_EQN, ELIM_UNCURRY, LIST_EQ_REWRITE, EL_MAP])
580- \\ gvs [REVERSE_APPEND] \\ IF_CASES_TAC
580+ \\ gvs [REVERSE_APPEND, SNOC_APPEND ] \\ IF_CASES_TAC
581581 \\ gvs [OPTREL_def]
582582 \\ rpt $ dxrule_then assume_tac ALOOKUP_MEM \\ gvs [EVERY_MEM, MEM_MAP, PULL_EXISTS]
583583 \\ last_x_assum $ dxrule_then assume_tac
@@ -611,7 +611,7 @@ Proof
611611 \\ ‘OPTREL clean_rel (ALOOKUP (REVERSE xs) s) (ALOOKUP (REVERSE ys) s)’
612612 by (irule LIST_REL_OPTREL
613613 \\ gvs [LIST_REL_EL_EQN, ELIM_UNCURRY, LIST_EQ_REWRITE, EL_MAP])
614- \\ gvs [REVERSE_APPEND]
614+ \\ gvs [REVERSE_APPEND, SNOC_APPEND ]
615615 \\ rename1 ‘¬MEM v _’ \\ rename1 ‘v = s’ \\ Cases_on ‘v = s’ \\ gvs []
616616 \\ gvs [OPTREL_def]
617617 \\ rpt $ dxrule_then assume_tac ALOOKUP_MEM \\ gvs [EVERY_MEM, MEM_MAP, PULL_EXISTS]
@@ -751,7 +751,7 @@ Proof
751751 \\ qspecl_then [‘MAP (λ(v,e). (v, Recclosure f v)) f’, ‘x’] assume_tac subst_notin_frees
752752 \\ gvs [MAP_MAP_o, combinTheory.o_DEF, LAMBDA_PROD, GSYM FST_THM,
753753 EVERY_MEM, DISJOINT_ALT, subst_funs_def])
754- >- (gvs [eval_to_def, subst_funs_def, MAP_APPEND, subst_APPEND]
754+ >- (gvs [eval_to_def, subst_funs_def, MAP_APPEND, subst_APPEND, SNOC_APPEND ]
755755 \\ IF_CASES_TAC >- (qexists_tac ‘0 ’ \\ gs []) \\ gs [subst1_notin_frees]
756756 \\ last_x_assum $ qspec_then ‘k - 1 ’ assume_tac \\ gvs [] \\ pop_assum irule
757757 \\ irule clean_rel_subst
@@ -890,7 +890,7 @@ Proof
890890 by (irule LIST_REL_OPTREL
891891 \\ gvs [LIST_REL_EL_EQN, ELIM_UNCURRY, EL_MAP, LIST_EQ_REWRITE])
892892 \\ gs [OPTREL_def]
893- >- (qexists_tac ‘j’ \\ gvs [REVERSE_APPEND]
893+ >- (qexists_tac ‘j’ \\ gvs [REVERSE_APPEND, SNOC_APPEND ]
894894 \\ IF_CASES_TAC \\ gvs [])
895895 \\ rename1 ‘clean_rel x0 y0’
896896 \\ ‘MEM (s, x0) xs’ by (rpt $ dxrule_then assume_tac ALOOKUP_MEM \\ gvs [])
@@ -899,6 +899,7 @@ Proof
899899 \\ Cases_on ‘x0’ \\ gvs [ok_bind_def, clean_rel_def]
900900 >~[‘subst_funs ys e2’]
901901 >- (rename1 ‘clean_rel e1 e2’
902+ \\ gvs[SNOC_APPEND]
902903 \\ rename1 ‘xs ++ [(v,w)]’
903904 \\ last_x_assum $ qspecl_then [‘subst_funs (xs++[(v,w)]) e1’, ‘subst_funs ys e2’] mp_tac
904905 \\ impl_tac
@@ -919,21 +920,21 @@ Proof
919920 \\ Cases_on ‘eval_to (k - 1 ) (subst_funs ys e2) = INL Diverge’ \\ gs []
920921 >- (qexists_tac ‘0 ’
921922 \\ Cases_on ‘eval_to k x = INL Diverge’ \\ gs []
922- \\ dxrule_then (qspecl_then [‘j + k’] assume_tac) eval_to_mono \\ gs [REVERSE_APPEND]
923+ \\ dxrule_then (qspecl_then [‘j + k’] assume_tac) eval_to_mono \\ gs [REVERSE_APPEND, SNOC_APPEND ]
923924 \\ IF_CASES_TAC \\ gvs []
924925 \\ Cases_on ‘eval_to (k - 1 ) (subst_funs (xs ++ [(v,w)]) e1) = INL Diverge’ \\ gs []
925926 \\ dxrule_then (qspecl_then [‘j2 + k - 1 ’] assume_tac) eval_to_mono \\ gs [])
926927 \\ qexists_tac ‘j + j2’
927928 \\ ‘eval_to (j + j2 + k) x = eval_to (j + k) x’ by (irule eval_to_mono \\ gvs [])
928- \\ gvs [REVERSE_APPEND]
929+ \\ gvs [REVERSE_APPEND, SNOC_APPEND ]
929930 \\ IF_CASES_TAC \\ gvs []
930931 \\ ‘eval_to (j + (j2 + k) - 1 ) (subst_funs (xs++[(v,w)]) e1)
931932 = eval_to (j2 + k - 1 ) (subst_funs (xs++[(v,w)]) e1)’
932933 by (irule eval_to_mono
933934 \\ Cases_on ‘eval_to (j2 + k - 1 ) (subst_funs (xs++[(v,w)]) e1)’
934935 \\ Cases_on ‘eval_to (k - 1 ) (subst_funs ys e2)’ \\ gvs [])
935936 \\ gvs [])
936- \\ qexists_tac ‘j’ \\ gvs [REVERSE_APPEND]
937+ \\ qexists_tac ‘j’ \\ gvs [REVERSE_APPEND, SNOC_APPEND ]
937938 \\ IF_CASES_TAC \\ gvs []
938939 \\ rpt $ dxrule_then assume_tac ALOOKUP_MEM \\ gs []
939940 \\ last_x_assum $ kall_tac \\ last_x_assum $ kall_tac
@@ -1347,7 +1348,7 @@ Proof
13471348 \\ ‘OPTREL clean_rel (ALOOKUP (REVERSE xs) s) (ALOOKUP (REVERSE ys) s)’
13481349 by (irule LIST_REL_OPTREL
13491350 \\ gvs [LIST_REL_EL_EQN, ELIM_UNCURRY, EL_MAP, LIST_EQ_REWRITE])
1350- \\ gvs [REVERSE_APPEND] \\ IF_CASES_TAC \\ gs []
1351+ \\ gvs [REVERSE_APPEND, SNOC_APPEND ] \\ IF_CASES_TAC \\ gs []
13511352 \\ gs [OPTREL_def]
13521353 \\ qpat_x_assum ‘clean_rel x0 _’ mp_tac
13531354 \\ ‘ok_bind x0’ by (rpt $ dxrule_then assume_tac ALOOKUP_MEM \\ gvs [EVERY_MEM, MEM_MAP, PULL_EXISTS]
0 commit comments