src/HOL/Tools/Nunchaku/nunchaku_translate.ML
author wenzelm
Tue, 22 Jul 2025 12:02:53 +0200
changeset 82894 a8e47bd31965
parent 69593 3dda49e08b9d
permissions -rw-r--r--
back to more basic defaults, independently on the accidental L&F: e.g. relevant for editor_style=false, and session_graph.pdf;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
66646
383d8e388d1b tuned headers;
wenzelm
parents: 66618
diff changeset
     1
(*  Title:      HOL/Tools/Nunchaku/nunchaku_translate.ML
66614
1f1c5d85d232 moved Nunchaku to Main; the goal is to move Nitpick out in the next 1-2 years
blanchet
parents: 64411
diff changeset
     2
    Author:     Jasmin Blanchette, VU Amsterdam
1f1c5d85d232 moved Nunchaku to Main; the goal is to move Nitpick out in the next 1-2 years
blanchet
parents: 64411
diff changeset
     3
    Copyright   2015, 2016, 2017
64389
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
     4
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
     5
Translation of Isabelle/HOL problems to Nunchaku.
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
     6
*)
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
     7
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
     8
signature NUNCHAKU_TRANSLATE =
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
     9
sig
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    10
  type isa_problem = Nunchaku_Collect.isa_problem
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    11
  type ty = Nunchaku_Problem.ty
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    12
  type nun_problem = Nunchaku_Problem.nun_problem
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    13
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    14
  val flip_quote: string -> string
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    15
  val lowlevel_str_of_ty: ty -> string
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    16
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    17
  val nun_problem_of_isa: Proof.context -> isa_problem -> nun_problem
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    18
end;
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    19
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    20
structure Nunchaku_Translate : NUNCHAKU_TRANSLATE =
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    21
struct
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    22
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    23
open Nunchaku_Util;
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    24
open Nunchaku_Collect;
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    25
open Nunchaku_Problem;
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    26
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    27
fun flip_quote s =
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    28
  (case try (unprefix "'") s of
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    29
    SOME s' => s'
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    30
  | NONE => prefix "'" s);
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    31
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    32
fun lowlevel_str_of_ty (NType (id, tys)) =
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    33
  (if null tys then "" else encode_args (map lowlevel_str_of_ty tys)) ^ id;
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    34
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    35
fun strip_nun_abs 0 tm = ([], tm)
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    36
  | strip_nun_abs n (NAbs (var, body)) =
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    37
    strip_nun_abs (n - 1) body
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    38
    |>> cons var;
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    39
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    40
val strip_nun_comb =
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    41
  let
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    42
    fun strip args (NApp (func, arg)) = strip (arg :: args) func
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    43
      | strip args tm = (tm, args);
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    44
  in
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    45
    strip []
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    46
  end;
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    47
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    48
fun ty_of_isa (Type (s, Ts)) =
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    49
    let val tys = map ty_of_isa Ts in
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    50
      (case s of
69593
3dda49e08b9d isabelle update -u control_cartouches;
wenzelm
parents: 66646
diff changeset
    51
        \<^type_name>\<open>bool\<close> => prop_ty
3dda49e08b9d isabelle update -u control_cartouches;
wenzelm
parents: 66646
diff changeset
    52
      | \<^type_name>\<open>fun\<close> => NType (nun_arrow, tys)
64389
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    53
      | _ =>
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    54
        let
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    55
          val args = map lowlevel_str_of_ty tys;
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    56
          val id = nun_tconst_of_str args s;
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    57
        in
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    58
          NType (id, [])
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    59
        end)
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    60
    end
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    61
  | ty_of_isa (TFree (s, _)) = NType (nun_tfree_of_str (flip_quote s), [])
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    62
  | ty_of_isa (TVar _) = raise Fail "unexpected TVar";
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    63
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    64
fun gen_tm_of_isa in_prop ctxt t =
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    65
  let
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    66
    val thy = Proof_Context.theory_of ctxt;
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    67
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    68
    fun id_of_const (x as (s, _)) =
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    69
      let val args = map (lowlevel_str_of_ty o ty_of_isa) (Sign.const_typargs thy x) in
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    70
        nun_const_of_str args s
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    71
      end;
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    72
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    73
    fun tm_of_branch ctr_id var_count f_arg_tm =
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    74
      let val (vars, body) = strip_nun_abs var_count f_arg_tm in
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    75
        (ctr_id, vars, body)
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    76
      end;
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    77
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    78
    fun tm_of bounds (Const (x as (s, T))) =
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    79
        (case try (dest_co_datatype_case ctxt) x of
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    80
          SOME ctrs =>
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    81
          let
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    82
            val num_f_args = length ctrs;
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    83
            val min_args = num_f_args + 1;
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    84
            val var_counts = map (num_binder_types o snd) ctrs;
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    85
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    86
            val dummy_free = Free (Name.uu, T);
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    87
            val tm = tm_of bounds dummy_free;
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    88
            val tm' = eta_expandN_tm min_args tm;
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    89
            val (vars, body) = strip_nun_abs min_args tm';
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    90
            val (_, (f_args, obj :: other_args)) = strip_nun_comb body ||> chop num_f_args;
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    91
            val f_args' = map2 eta_expandN_tm var_counts f_args;
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    92
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    93
            val ctr_ids = map id_of_const ctrs;
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    94
          in
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    95
            NMatch (obj, @{map 3} tm_of_branch ctr_ids var_counts f_args')
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    96
            |> rcomb_tms other_args
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    97
            |> abs_tms vars
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    98
          end
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
    99
        | NONE =>
69593
3dda49e08b9d isabelle update -u control_cartouches;
wenzelm
parents: 66646
diff changeset
   100
          if s = \<^const_name>\<open>unreachable\<close> andalso in_prop then
64389
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   101
            let val ty = ty_of_isa T in
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   102
              napps (NConst (nun_asserting, [ty], mk_arrows_ty ([ty, prop_ty], ty)),
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   103
                [NConst (id_of_const x, [], ty), NConst (nun_false, [], prop_ty)])
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   104
            end
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   105
          else
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   106
            let
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   107
              val id =
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   108
                (case s of
69593
3dda49e08b9d isabelle update -u control_cartouches;
wenzelm
parents: 66646
diff changeset
   109
                  \<^const_name>\<open>All\<close> => nun_forall
3dda49e08b9d isabelle update -u control_cartouches;
wenzelm
parents: 66646
diff changeset
   110
                | \<^const_name>\<open>conj\<close> => nun_conj
3dda49e08b9d isabelle update -u control_cartouches;
wenzelm
parents: 66646
diff changeset
   111
                | \<^const_name>\<open>disj\<close> => nun_disj
3dda49e08b9d isabelle update -u control_cartouches;
wenzelm
parents: 66646
diff changeset
   112
                | \<^const_name>\<open>HOL.eq\<close> => nun_equals
3dda49e08b9d isabelle update -u control_cartouches;
wenzelm
parents: 66646
diff changeset
   113
                | \<^const_name>\<open>Eps\<close> => nun_choice
3dda49e08b9d isabelle update -u control_cartouches;
wenzelm
parents: 66646
diff changeset
   114
                | \<^const_name>\<open>Ex\<close> => nun_exists
3dda49e08b9d isabelle update -u control_cartouches;
wenzelm
parents: 66646
diff changeset
   115
                | \<^const_name>\<open>False\<close> => nun_false
3dda49e08b9d isabelle update -u control_cartouches;
wenzelm
parents: 66646
diff changeset
   116
                | \<^const_name>\<open>If\<close> => nun_if
3dda49e08b9d isabelle update -u control_cartouches;
wenzelm
parents: 66646
diff changeset
   117
                | \<^const_name>\<open>implies\<close> => nun_implies
3dda49e08b9d isabelle update -u control_cartouches;
wenzelm
parents: 66646
diff changeset
   118
                | \<^const_name>\<open>Not\<close> => nun_not
3dda49e08b9d isabelle update -u control_cartouches;
wenzelm
parents: 66646
diff changeset
   119
                | \<^const_name>\<open>The\<close> => nun_unique
3dda49e08b9d isabelle update -u control_cartouches;
wenzelm
parents: 66646
diff changeset
   120
                | \<^const_name>\<open>The_unsafe\<close> => nun_unique_unsafe
3dda49e08b9d isabelle update -u control_cartouches;
wenzelm
parents: 66646
diff changeset
   121
                | \<^const_name>\<open>True\<close> => nun_true
64389
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   122
                | _ => id_of_const x);
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   123
            in
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   124
              NConst (id, [], ty_of_isa T)
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   125
            end)
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   126
      | tm_of _ (Free (s, T)) = NConst (nun_free_of_str s, [], ty_of_isa T)
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   127
      | tm_of _ (Var ((s, _), T)) = NConst (nun_var_of_str s, [], ty_of_isa T)
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   128
      | tm_of bounds (Abs (s, T, t)) =
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   129
        let
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   130
          val (s', bounds') = Name.variant s bounds;
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   131
          val x = Var ((s', 0), T);
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   132
        in
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   133
          NAbs (tm_of bounds' x, tm_of bounds' (subst_bound (x, t)))
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   134
        end
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   135
      | tm_of bounds (t $ u) = NApp (tm_of bounds t, tm_of bounds u)
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   136
      | tm_of _ (Bound _) = raise Fail "unexpected Bound";
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   137
  in
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   138
    t
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   139
    |> tm_of Name.context
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   140
    |> eta_expand_builtin_tm
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   141
  end;
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   142
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   143
val tm_of_isa = gen_tm_of_isa false;
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   144
val prop_of_isa = gen_tm_of_isa true;
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   145
64411
0af9926e1303 adapted Nunchaku's input syntax to new design decisions
blanchet
parents: 64389
diff changeset
   146
fun nun_copy_spec_of_isa_typedef ctxt {abs_typ, rep_typ, wrt, abs, rep} =
0af9926e1303 adapted Nunchaku's input syntax to new design decisions
blanchet
parents: 64389
diff changeset
   147
  {abs_ty = ty_of_isa abs_typ, rep_ty = ty_of_isa rep_typ, subset = SOME (tm_of_isa ctxt wrt),
0af9926e1303 adapted Nunchaku's input syntax to new design decisions
blanchet
parents: 64389
diff changeset
   148
   quotient = NONE, abs = tm_of_isa ctxt abs, rep = tm_of_isa ctxt rep};
0af9926e1303 adapted Nunchaku's input syntax to new design decisions
blanchet
parents: 64389
diff changeset
   149
0af9926e1303 adapted Nunchaku's input syntax to new design decisions
blanchet
parents: 64389
diff changeset
   150
fun nun_copy_spec_of_isa_quotient ctxt {abs_typ, rep_typ, wrt, abs, rep} =
0af9926e1303 adapted Nunchaku's input syntax to new design decisions
blanchet
parents: 64389
diff changeset
   151
  {abs_ty = ty_of_isa abs_typ, rep_ty = ty_of_isa rep_typ, subset = NONE,
0af9926e1303 adapted Nunchaku's input syntax to new design decisions
blanchet
parents: 64389
diff changeset
   152
   quotient = SOME (tm_of_isa ctxt wrt), abs = tm_of_isa ctxt abs, rep = tm_of_isa ctxt rep};
64389
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   153
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   154
fun nun_ctr_of_isa ctxt ctr =
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   155
  {ctr = tm_of_isa ctxt ctr, arg_tys = map ty_of_isa (binder_types (fastype_of ctr))};
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   156
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   157
fun nun_co_data_spec_of_isa ctxt {typ, ctrs} =
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   158
  {ty = ty_of_isa typ, ctrs = map (nun_ctr_of_isa ctxt) ctrs};
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   159
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   160
fun nun_const_spec_of_isa ctxt {const, props} =
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   161
  {const = tm_of_isa ctxt const, props = map (prop_of_isa ctxt) props};
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   162
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   163
fun nun_rec_spec_of_isa ctxt {const, props, ...} =
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   164
  {const = tm_of_isa ctxt const, props = map (prop_of_isa ctxt) props};
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   165
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   166
fun nun_consts_spec_of_isa ctxt {consts, props} =
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   167
  {consts = map (tm_of_isa ctxt) consts, props = map (prop_of_isa ctxt) props};
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   168
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   169
fun nun_problem_of_isa ctxt {commandss, sound, complete} =
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   170
  let
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   171
    fun cmd_of cmd =
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   172
      (case cmd of
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   173
        ITVal (T, cards) => NTVal (ty_of_isa T, cards)
64411
0af9926e1303 adapted Nunchaku's input syntax to new design decisions
blanchet
parents: 64389
diff changeset
   174
      | ITypedef spec => NCopy (nun_copy_spec_of_isa_typedef ctxt spec)
0af9926e1303 adapted Nunchaku's input syntax to new design decisions
blanchet
parents: 64389
diff changeset
   175
      | IQuotient spec => NCopy (nun_copy_spec_of_isa_quotient ctxt spec)
64389
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   176
      | ICoData (fp, specs) =>
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   177
        BNF_Util.case_fp fp NData NCodata (map (nun_co_data_spec_of_isa ctxt) specs)
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   178
      | IVal t => NVal (tm_of_isa ctxt t, ty_of_isa (fastype_of t))
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   179
      | ICoPred (fp, wf, specs) =>
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   180
        (if wf then curry NPred true
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   181
         else if fp = BNF_Util.Least_FP then curry NPred false
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   182
         else NCopred) (map (nun_const_spec_of_isa ctxt) specs)
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   183
      | IRec specs => NRec (map (nun_rec_spec_of_isa ctxt) specs)
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   184
      | ISpec spec => NSpec (nun_consts_spec_of_isa ctxt spec)
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   185
      | IAxiom prop => NAxiom (prop_of_isa ctxt prop)
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   186
      | IGoal prop => NGoal (prop_of_isa ctxt prop)
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   187
      | IEval t => NEval (tm_of_isa ctxt t));
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   188
  in
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   189
    {commandss = map (map cmd_of) commandss, sound = sound, complete = complete}
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   190
  end;
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   191
6273d4c8325b added Nunchaku integration
blanchet
parents:
diff changeset
   192
end;