408 val lthy19 = note_simp_suffix "distinct" q_dis lthy18; |
408 val lthy19 = note_simp_suffix "distinct" q_dis lthy18; |
409 val q_eqvt = map (lift_thm lthy19) raw_fv_bv_eqvt; |
409 val q_eqvt = map (lift_thm lthy19) raw_fv_bv_eqvt; |
410 val (_, lthy20) = Local_Theory.note ((Binding.empty, |
410 val (_, lthy20) = Local_Theory.note ((Binding.empty, |
411 [Attrib.internal (fn _ => Nominal_ThmDecls.eqvt_add)]), q_eqvt) lthy19; |
411 [Attrib.internal (fn _ => Nominal_ThmDecls.eqvt_add)]), q_eqvt) lthy19; |
412 val _ = tracing "Finite Support"; |
412 val _ = tracing "Finite Support"; |
413 val supports = map (prove_supports lthy20 q_perm) consts |
413 val supports = map (prove_supports lthy20 q_perm) consts handle _ => [] |
414 val fin_supp = HOLogic.conj_elims (prove_fs lthy20 q_induct supports q_tys) handle _ => [] |
414 val fin_supp = HOLogic.conj_elims (prove_fs lthy20 q_induct supports q_tys) handle _ => [] |
415 val thy3 = Local_Theory.exit_global lthy20; |
415 val thy3 = Local_Theory.exit_global lthy20; |
416 val lthy21 = Theory_Target.instantiation (qty_full_names, [], @{sort fs}) thy3; |
416 val lthy21 = Theory_Target.instantiation (qty_full_names, [], @{sort fs}) thy3; |
417 fun tac _ = Class.intro_classes_tac [] THEN (ALLGOALS (resolve_tac fin_supp)) |
417 fun tac _ = Class.intro_classes_tac [] THEN (ALLGOALS (resolve_tac fin_supp)) |
418 val lthy22 = Class.prove_instantiation_instance tac lthy21 handle _ => lthy20 |
418 val lthy22 = Class.prove_instantiation_instance tac lthy21 handle _ => lthy20 |