src/HOL/Integ/Integ.ML
changeset 4817 8b81289852e3
parent 4772 8c7e7eaffbdf
child 4831 dae4d63a1318
equal deleted inserted replaced
4816:64f075872f69 4817:8b81289852e3
   319 goal Integ.thy 
   319 goal Integ.thy 
   320     "congruent2 intrel (%p1 p2.                 \
   320     "congruent2 intrel (%p1 p2.                 \
   321 \               split (%x1 y1. split (%x2 y2.   \
   321 \               split (%x1 y1. split (%x2 y2.   \
   322 \                   intrel^^{(x1*x2 + y1*y2, x1*y2 + y1*x2)}) p2) p1)";
   322 \                   intrel^^{(x1*x2 + y1*y2, x1*y2 + y1*x2)}) p2) p1)";
   323 by (rtac (equiv_intrel RS congruent2_commuteI) 1);
   323 by (rtac (equiv_intrel RS congruent2_commuteI) 1);
       
   324  by (pair_tac "w" 2);
       
   325  by (rename_tac "z1 z2" 2);
   324  by Safe_tac;
   326  by Safe_tac;
   325  by (rewtac split_def);
   327  by (rewtac split_def);
   326  by (simp_tac (simpset() addsimps add_ac@mult_ac) 1);
   328  by (simp_tac (simpset() addsimps add_ac@mult_ac) 1);
   327 by (rename_tac "x1 y1 x2 y2 z1 z2" 1);
       
   328 by (asm_simp_tac (simpset() delsimps [equiv_intrel_iff]
   329 by (asm_simp_tac (simpset() delsimps [equiv_intrel_iff]
   329                            addsimps add_ac@mult_ac) 1);
   330                            addsimps add_ac@mult_ac) 1);
   330 by (rtac (intrelI RS(equiv_intrel RS equiv_class_eq)) 1);
   331 by (rtac (intrelI RS(equiv_intrel RS equiv_class_eq)) 1);
   331 by (rtac (zmult_congruent_lemma RS trans) 1);
   332 by (rtac (zmult_congruent_lemma RS trans) 1);
   332 by (rtac (zmult_congruent_lemma RS trans RS sym) 1);
   333 by (rtac (zmult_congruent_lemma RS trans RS sym) 1);