diff -r 6088fea1c8b1 -r 8a1c8dc72b5c QuotProd.thy --- a/QuotProd.thy Mon Dec 07 14:00:36 2009 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,80 +0,0 @@ -theory QuotProd -imports QuotScript -begin - -fun - prod_rel -where - "prod_rel r1 r2 = (\(a,b) (c,d). r1 a c \ r2 b d)" - -(* prod_fun is a good mapping function *) - -lemma prod_equivp: - assumes a: "equivp R1" - assumes b: "equivp R2" - shows "equivp (prod_rel R1 R2)" -unfolding equivp_reflp_symp_transp reflp_def symp_def transp_def -apply(auto simp add: equivp_reflp[OF a] equivp_reflp[OF b]) -apply(simp only: equivp_symp[OF a]) -apply(simp only: equivp_symp[OF b]) -using equivp_transp[OF a] apply blast -using equivp_transp[OF b] apply blast -done - -lemma prod_quotient: - assumes q1: "Quotient R1 Abs1 Rep1" - assumes q2: "Quotient R2 Abs2 Rep2" - shows "Quotient (prod_rel R1 R2) (prod_fun Abs1 Abs2) (prod_fun Rep1 Rep2)" -unfolding Quotient_def -apply (simp add: Quotient_abs_rep[OF q1] Quotient_abs_rep[OF q2] Quotient_rel_rep[OF q1] Quotient_rel_rep[OF q2]) -using Quotient_rel[OF q1] Quotient_rel[OF q2] by blast - -lemma pair_rsp: - assumes q1: "Quotient R1 Abs1 Rep1" - assumes q2: "Quotient R2 Abs2 Rep2" - shows "(R1 ===> R2 ===> prod_rel R1 R2) Pair Pair" -by auto - -lemma pair_prs: - assumes q1: "Quotient R1 Abs1 Rep1" - assumes q2: "Quotient R2 Abs2 Rep2" - shows "(prod_fun Abs1 Abs2) (Rep1 l, Rep2 r) \ (l, r)" - by (simp add: Quotient_abs_rep[OF q1] Quotient_abs_rep[OF q2]) - -(* TODO: Is the quotient assumption q1 necessary? *) -(* TODO: Aren't there hard to use later? *) -lemma fst_rsp: - assumes q1: "Quotient R1 Abs1 Rep1" - assumes q2: "Quotient R2 Abs2 Rep2" - assumes a: "(prod_rel R1 R2) p1 p2" - shows "R1 (fst p1) (fst p2)" - using a - apply(case_tac p1) - apply(case_tac p2) - apply(auto) - done - -lemma snd_rsp: - assumes q1: "Quotient R1 Abs1 Rep1" - assumes q2: "Quotient R2 Abs2 Rep2" - assumes a: "(prod_rel R1 R2) p1 p2" - shows "R2 (snd p1) (snd p2)" - using a - apply(case_tac p1) - apply(case_tac p2) - apply(auto) - done - -lemma fst_prs: - assumes q1: "Quotient R1 Abs1 Rep1" - assumes q2: "Quotient R2 Abs2 Rep2" - shows "Abs1 (fst ((prod_fun Rep1 Rep2) p)) = fst p" -by (case_tac p) (auto simp add: Quotient_abs_rep[OF q1]) - -lemma snd_prs: - assumes q1: "Quotient R1 Abs1 Rep1" - assumes q2: "Quotient R2 Abs2 Rep2" - shows "Abs2 (snd ((prod_fun Rep1 Rep2) p)) = snd p" -by (case_tac p) (auto simp add: Quotient_abs_rep[OF q2]) - -end