diff -r 1e07e38ed6c5 -r 5d932e7a856c Quot/QuotList.thy --- a/Quot/QuotList.thy Mon Dec 07 14:14:07 2009 +0100 +++ b/Quot/QuotList.thy Mon Dec 07 14:35:45 2009 +0100 @@ -1,5 +1,5 @@ theory QuotList -imports QuotScript List +imports QuotMain List begin fun @@ -10,7 +10,9 @@ | "list_rel R [] (x#xs) = False" | "list_rel R (x#xs) (y#ys) = (R x y \ list_rel R xs ys)" -lemma list_equivp: +declare [[map list = (map, list_rel)]] + +lemma list_equivp[quotient_equiv]: assumes a: "equivp R" shows "equivp (list_rel R)" unfolding equivp_def @@ -38,7 +40,7 @@ apply(metis) done -lemma list_quotient: +lemma list_quotient[quotient_thm]: assumes q: "Quotient R Abs Rep" shows "Quotient (list_rel R) (map Abs) (map Rep)" unfolding Quotient_def @@ -57,13 +59,20 @@ apply(rule list_rel_rel[OF q]) done +lemma map_id: "map id \ id" + apply (rule eq_reflection) + apply (rule ext) + apply (rule_tac list="x" in list.induct) + apply (simp_all) + done + lemma cons_prs: assumes q: "Quotient R Abs Rep" shows "(map Abs) ((Rep h) # (map Rep t)) = h # t" by (induct t) (simp_all add: Quotient_abs_rep[OF q]) -lemma cons_rsp: +lemma cons_rsp[quotient_rsp]: assumes q: "Quotient R Abs Rep" shows "(R ===> list_rel R ===> list_rel R) op # op #" by (auto) @@ -73,7 +82,7 @@ shows "map Abs [] \ []" by (simp) -lemma nil_rsp: +lemma nil_rsp[quotient_rsp]: assumes q: "Quotient R Abs Rep" shows "list_rel R [] []" by simp @@ -132,7 +141,7 @@ induct doesn't accept 'rule'. that's why the proof uses manual generalisation and needs assumptions both in conclusion for induction and in assumptions. *) -lemma foldl_rsp: +lemma foldl_rsp[quotient_rsp]: assumes q1: "Quotient R1 Abs1 Rep1" and q2: "Quotient R2 Abs2 Rep2" shows "((R1 ===> R2 ===> R1) ===> R1 ===> list_rel R2 ===> R1) foldl foldl" @@ -153,10 +162,6 @@ (* TODO: Rest are unused *) -lemma list_map_id: - shows "map (\x. x) = (\x. x)" - by simp - lemma list_rel_eq: shows "list_rel (op =) \ (op =)" apply(rule eq_reflection)