Alternate version of Nominal_Base: Executable version.
(*notation ( output) "prop" ("#_" [1000] 1000) *)
notation ( output) "Trueprop" ("#_" [1000] 1000)
syntax
"Bex1_rel" :: "id \<Rightarrow> ('a \<Rightarrow> 'a \<Rightarrow> bool) \<Rightarrow> ('a \<Rightarrow> bool) \<Rightarrow> bool" ("(3\<exists>!!_\<in>_./ _)" [0, 0, 10] 10)
translations
"\<exists>!!x\<in>A. P" == "Bex1_rel A (%x. P)"
(*interpretation code *)
(*val bindd = ((Binding.make ("", Position.none)), ([]: Attrib.src list))
val ((_, [eqn1pre]), lthy5) = Variable.import true [ABS_def] lthy4;
val eqn1i = Thm.prop_of (symmetric eqn1pre)
val ((_, [eqn2pre]), lthy6) = Variable.import true [REP_def] lthy5;
val eqn2i = Thm.prop_of (symmetric eqn2pre)
val exp_morphism = ProofContext.export_morphism lthy6 (ProofContext.init (ProofContext.theory_of lthy6));
val exp_term = Morphism.term exp_morphism;
val exp = Morphism.thm exp_morphism;
val mthd = Method.SIMPLE_METHOD ((rtac quot_thm 1) THEN
ALLGOALS (simp_tac (HOL_basic_ss addsimps [(symmetric (exp ABS_def)), (symmetric (exp REP_def))])))
val mthdt = Method.Basic (fn _ => mthd)
val bymt = Proof.global_terminal_proof (mthdt, NONE)
val exp_i = [(@{const_name QUOT_TYPE}, ((("QUOT_TYPE_I_" ^ (Binding.name_of qty_name)), true),
Expression.Named [("R", rel), ("Abs", abs), ("Rep", rep) ]))]*)
(*||> Local_Theory.theory (fn thy =>
let
val global_eqns = map exp_term [eqn2i, eqn1i];
(* Not sure if the following context should not be used *)
val (global_eqns2, lthy7) = Variable.import_terms true global_eqns lthy6;
val global_eqns3 = map (fn t => (bindd, t)) global_eqns2;
in ProofContext.theory_of (bymt (Expression.interpretation (exp_i, []) global_eqns3 thy)) end)*)