Quot/Nominal/Terms.thy
changeset 1214 0f92257edeee
parent 1213 43bd70786f9f
child 1215 aec9576b3950
equal deleted inserted replaced
1213:43bd70786f9f 1214:0f92257edeee
   114   apply(rule_tac ?p1="- pi" in fresh_star_permute_iff[THEN iffD1])
   114   apply(rule_tac ?p1="- pi" in fresh_star_permute_iff[THEN iffD1])
   115   apply(simp add: atom_eqvt fv_rtrm1_eqvt Diff_eqvt bv1_eqvt)
   115   apply(simp add: atom_eqvt fv_rtrm1_eqvt Diff_eqvt bv1_eqvt)
   116   apply(simp add: permute_eqvt[symmetric])
   116   apply(simp add: permute_eqvt[symmetric])
   117   done
   117   done
   118 
   118 
   119 
   119 ML {*
   120 
   120 build_equivps [@{term alpha_rtrm1}, @{term alpha_bp}] @{thm rtrm1_bp.induct} @{thm alpha_rtrm1_alpha_bp.induct} @{thms rtrm1.inject bp.inject} @{thms alpha1_inj} @{thms rtrm1.distinct bp.distinct} @{thms alpha_rtrm1.cases alpha_bp.cases} @{thms alpha1_eqvt} @{context}
   121 prove alpha1_reflp_aux: {* fst (build_alpha_refl_gl [@{term alpha_rtrm1}, @{term alpha_bp}]) *}
   121 *}
       
   122 ML Variable.export
       
   123 
       
   124 prove alpha1_reflp_aux: {* fst (build_alpha_refl_gl [@{term alpha_rtrm1}, @{term alpha_bp}] ("x","y","z")) *}
   122 by (tactic {* reflp_tac @{thm rtrm1_bp.induct} @{thms alpha1_inj} 1 *})
   125 by (tactic {* reflp_tac @{thm rtrm1_bp.induct} @{thms alpha1_inj} 1 *})
   123 
   126 
   124 prove alpha1_symp_aux: {* (fst o snd) (build_alpha_refl_gl [@{term alpha_rtrm1}, @{term alpha_bp}]) *}
   127 prove alpha1_symp_aux: {* (fst o snd) (build_alpha_refl_gl [@{term alpha_rtrm1}, @{term alpha_bp}] ("x","y","z")) *}
   125 by (tactic {* symp_tac @{thm alpha_rtrm1_alpha_bp.induct} @{thms alpha1_inj} @{thms alpha1_eqvt} 1 *})
   128 by (tactic {* symp_tac @{thm alpha_rtrm1_alpha_bp.induct} @{thms alpha1_inj} @{thms alpha1_eqvt} 1 *})
   126 
   129 
   127 prove alpha1_transp_aux: {* (snd o snd) (build_alpha_refl_gl [@{term alpha_rtrm1}, @{term alpha_bp}]) *}
   130 prove alpha1_transp_aux: {* (snd o snd) (build_alpha_refl_gl [@{term alpha_rtrm1}, @{term alpha_bp}] ("x","y","z")) *}
   128 by (tactic {* transp_tac @{thm alpha_rtrm1_alpha_bp.induct} @{thms alpha1_inj} @{thms rtrm1.inject bp.inject} @{thms rtrm1.distinct bp.distinct} @{thms alpha_rtrm1.cases alpha_bp.cases} @{thms alpha1_eqvt} 1 *})
   131 by (tactic {* transp_tac @{thm alpha_rtrm1_alpha_bp.induct} @{thms alpha1_inj} @{thms rtrm1.inject bp.inject} @{thms rtrm1.distinct bp.distinct} @{thms alpha_rtrm1.cases alpha_bp.cases} @{thms alpha1_eqvt} 1 *})
   129 
   132 
   130 lemma helper: "(\<forall>x y z. R x y \<and> R y z \<longrightarrow> R x z) = (\<forall>xa ya. R xa ya \<longrightarrow> (\<forall>z. R ya z \<longrightarrow> R xa z))"
   133 lemma transp_aux:
   131 by meson
   134   "(\<And>xa ya. R xa ya \<longrightarrow> (\<forall>z. R ya z \<longrightarrow> R xa z)) \<Longrightarrow> transp R"
       
   135   unfolding transp_def
       
   136   by blast
   132 
   137 
   133 lemma alpha1_equivp:
   138 lemma alpha1_equivp:
   134   "equivp alpha_rtrm1"
   139   "equivp alpha_rtrm1"
   135   "equivp alpha_bp"
   140   "equivp alpha_bp"
   136 unfolding equivp_reflp_symp_transp reflp_def
   141 apply (tactic {*
   137 apply (simp_all add: alpha1_reflp_aux)
   142   (simp_tac (HOL_ss addsimps @{thms equivp_reflp_symp_transp reflp_def symp_def})
   138 unfolding symp_def
   143   THEN' rtac @{thm conjI} THEN' rtac @{thm allI} THEN'
   139 apply (simp_all add: alpha1_symp_aux)
   144   resolve_tac (HOLogic.conj_elims @{thm alpha1_reflp_aux})
   140 unfolding transp_def
   145   THEN' rtac @{thm conjI} THEN' rtac @{thm allI} THEN' rtac @{thm allI} THEN'
   141 apply (simp_all only: helper)
   146   resolve_tac (HOLogic.conj_elims @{thm alpha1_symp_aux}) THEN' rtac @{thm transp_aux}
   142 apply (rule allI)+
   147   THEN' resolve_tac (HOLogic.conj_elims @{thm alpha1_transp_aux})
   143 apply (rule conjunct1[OF alpha1_transp_aux])
   148 )
   144 apply (rule allI)+
   149 1 *})
   145 apply (rule conjunct2[OF alpha1_transp_aux])
       
   146 done
   150 done
   147 
   151 
   148 quotient_type trm1 = rtrm1 / alpha_rtrm1
   152 quotient_type trm1 = rtrm1 / alpha_rtrm1
   149   by (rule alpha1_equivp(1))
   153   by (rule alpha1_equivp(1))
   150 
   154 
   524   apply(simp add: atom_eqvt Diff_eqvt insert_eqvt set_eqvt empty_eqvt rbv5_eqvt fv_rtrm5_eqvt)
   528   apply(simp add: atom_eqvt Diff_eqvt insert_eqvt set_eqvt empty_eqvt rbv5_eqvt fv_rtrm5_eqvt)
   525   apply (subst permute_eqvt[symmetric])
   529   apply (subst permute_eqvt[symmetric])
   526   apply (simp)
   530   apply (simp)
   527   done
   531   done
   528 
   532 
   529 prove alpha5_reflp_aux: {* fst (build_alpha_refl_gl [@{term alpha_rtrm5}, @{term alpha_rlts}]) *}
   533 prove alpha5_reflp_aux: {* fst (build_alpha_refl_gl [@{term alpha_rtrm5}, @{term alpha_rlts}] ("x","y","z")) *}
   530 by (tactic {* reflp_tac @{thm rtrm5_rlts.induct} @{thms alpha5_inj} 1 *})
   534 by (tactic {* reflp_tac @{thm rtrm5_rlts.induct} @{thms alpha5_inj} 1 *})
   531 
   535 
   532 prove alpha5_symp_aux: {* (fst o snd) (build_alpha_refl_gl [@{term alpha_rtrm5}, @{term alpha_rlts}]) *}
   536 prove alpha5_symp_aux: {* (fst o snd) (build_alpha_refl_gl [@{term alpha_rtrm5}, @{term alpha_rlts}] ("x","y","z")) *}
   533 by (tactic {* symp_tac @{thm alpha_rtrm5_alpha_rlts.induct} @{thms alpha5_inj} @{thms alpha5_eqvt} 1 *})
   537 by (tactic {* symp_tac @{thm alpha_rtrm5_alpha_rlts.induct} @{thms alpha5_inj} @{thms alpha5_eqvt} 1 *})
   534 
   538 
   535 prove alpha5_transp_aux: {* (snd o snd) (build_alpha_refl_gl [@{term alpha_rtrm5}, @{term alpha_rlts}]) *}
   539 prove alpha5_transp_aux: {* (snd o snd) (build_alpha_refl_gl [@{term alpha_rtrm5}, @{term alpha_rlts}] ("x","y","z")) *}
   536 by (tactic {* transp_tac @{thm alpha_rtrm5_alpha_rlts.induct} @{thms alpha5_inj} @{thms rtrm5.inject rlts.inject} @{thms rtrm5.distinct rlts.distinct} @{thms alpha_rtrm5.cases alpha_rlts.cases} @{thms alpha5_eqvt} 1 *})
   540 by (tactic {* transp_tac @{thm alpha_rtrm5_alpha_rlts.induct} @{thms alpha5_inj} @{thms rtrm5.inject rlts.inject} @{thms rtrm5.distinct rlts.distinct} @{thms alpha_rtrm5.cases alpha_rlts.cases} @{thms alpha5_eqvt} 1 *})
   537 
   541 
   538 lemma alpha5_equivps:
   542 lemma alpha5_equivps:
   539   shows "equivp alpha_rtrm5"
   543   shows "equivp alpha_rtrm5"
   540   and   "equivp alpha_rlts"
   544   and   "equivp alpha_rlts"