File ‹zippy_instance_uresolves_data.ML›
functor Zippy_Instance_UResolves_Data(
structure FI : FUNCTOR_INSTANCE_BASE
structure Z : ZIPPY_INSTANCE_TACTIC
structure TI : TERM_INDEX
val init_args : (Unification_Base.normalisers,
Unification_Base.unifier,
Z.Tac_AAM.mk_meta,
int -> @{AllT_args} Z.Base_Data.PAction.action,
Z.Base_Data.GCS.goal_pos -> (@{ParaT_args} @{AllT_args} Z.ZLPC.Z2.zipper) Z.emorph,
@{AllT_args} Z.Result_Action.mk_copy_update_data,
@{AllT_args} Z.PResults.presultsq,
thm * (term * (thm,
Unification_Base.normalisers,
Unification_Base.unifier,
Z.Tac_AAM.mk_meta,
int -> @{AllT_args} Z.Base_Data.PAction.action,
(Z.Base_Data.GCS.goal_pos -> (@{ParaT_args} @{AllT_args} Z.ZLPC.Z2.zipper) Z.emorph) list,
@{AllT_args} Z.Result_Action.mk_copy_update_data,
@{AllT_args} Z.PResults.presultsq)
Zippy_Instance_UResolve_Data_Args.PD.entries) -> bool)
Zippy_Instance_UResolve_Data_Args.PDC.entries
structure Log : ZIPPY_LOGGER_MIXIN_BASE
) =
struct
local structure FI = Functor_Instance(FI)
in
structure Logging =
struct
local structure Base = struct val parent_logger = Log.logger end
in
structure Resolve = Zippy_Logger_Mixin_Base(open Base; val name = "Resolve")
structure EResolve = Zippy_Logger_Mixin_Base(open Base; val name = "EResolve")
structure DResolve = Zippy_Logger_Mixin_Base(open Base; val name = "DResolve")
structure FResolve = Zippy_Logger_Mixin_Base(open Base; val name = "FResolve")
end
end
local open Z; open ZLPC
structure Base = struct structure Z = Z; structure TI = TI; val init_args = init_args end
in
\<^functor_instance>‹struct_name: Resolve
functor_name: Zippy_Instance_UResolve_Data
FI_struct_name: FI_UResolve_Data
id: ‹FI.prefix_id "resolve"›
path: ‹FI.long_name›
more_args: ‹open Base
val key_of_thm = Thm.concl_of
val num_new_goals = Thm.nprems_of
structure Log = Logging.Resolve››
structure Resolve = Resolve.UResolve_Data
\<^functor_instance>‹struct_name: EResolve
functor_name: Zippy_Instance_UResolve_Data
FI_struct_name: FI_UResolve_Data
id: ‹FI.prefix_id "eresolve"›
path: ‹FI.long_name›
more_args: ‹open Base
val key_of_thm = Thm.major_prem_of
val num_new_goals = Thm.nprems_of #> General_Util.pred
structure Log = Logging.EResolve››
structure EResolve = EResolve.UResolve_Data
\<^functor_instance>‹struct_name: DResolve
functor_name: Zippy_Instance_UResolve_Data
FI_struct_name: FI_UResolve_Data
id: ‹FI.prefix_id "dresolve"›
path: ‹FI.long_name›
more_args: ‹open Base
val key_of_thm = Thm.major_prem_of
val num_new_goals = Thm.nprems_of
structure Log = Logging.DResolve››
structure DResolve = DResolve.UResolve_Data
\<^functor_instance>‹struct_name: FResolve
functor_name: Zippy_Instance_UResolve_Data
FI_struct_name: FI_UResolve_Data
id: ‹FI.prefix_id "fresolve"›
path: ‹FI.long_name›
more_args: ‹open Base
val key_of_thm = Thm.major_prem_of
val num_new_goals = Thm.nprems_of
structure Log = Logging.FResolve››
structure FResolve = FResolve.UResolve_Data
local open Zippy_Instance_Resolves_Data_Args
val parse_mode_opt_default = Scan.optional (Args.parens (Parse.!!! PM.parse_key)) (PM.key PM.r)
in
val parse_attribute = parse_mode_opt_default
:|-- (fn PM.r _ => Resolve.parse_attribute | PM.e _ => EResolve.parse_attribute
| PM.d _ => DResolve.parse_attribute | PM.f _ => FResolve.parse_attribute)
val binding = Binding.make (FI.id, FI.pos)
val setup_attribute = Attrib.local_setup binding
(Parse.!!! parse_attribute |> Scan.lift) o
Either.cases I (fn what => "configure " ^ what ^ " data " ^ enclose "(" ")" FI.long_name)
val parse_method =
let val parse = Scan.lift parse_mode_opt_default
:|-- (fn PM.r _ => Resolve.parse_entry_context_update | PM.e _ => EResolve.parse_entry_context_update
| PM.d _ => DResolve.parse_entry_context_update | PM.f _ => FResolve.parse_entry_context_update)
in Parse.and_list1' parse >> K () end
end
end
end
end