src/Tools/isac/Specify/generate.sml
author Walther Neuper <walther.neuper@jku.at>
Mon, 04 May 2020 17:08:32 +0200
changeset 59939 7ad15af2297c
parent 59935 16927a749dd7
child 59943 4816df44437f
permissions -rw-r--r--
separate struct O_Model and I_Model, part 1
     1 (* Title: generate specific entries into Ctree
     2    Author: Walther Neuper
     3    (c) due to copyright terms
     4 *)
     5 
     6 signature GENERATE_CALC_TREE =
     7 sig
     8   datatype pblmet = Method of Method.id | Problem of Problem.id | Upblmet
     9   datatype mout =
    10     EmptyMout
    11   | Error' of string
    12   | FormKF of TermC.as_string
    13   | PpcKF of pblmet * Model.item Model.ppc
    14   | RefinedKF of Problem.id * (I_Model.T * (bool * term) list)
    15 
    16   type test_out = Pos.pos' * Pos.pos' list * mout * Ctree.ctree
    17 
    18   val init_pbl: (string * (term * 'a)) list -> I_Model.T
    19   val init_pbl': (string * (term * term)) list -> I_Model.T
    20   val generate_inconsistent_rew: Subst.input option * ThmC.T -> term -> Istate_Def.T * Proof.context ->
    21     Pos.pos' -> Ctree.ctree -> Calc.T
    22 (* ---- for tests only: shifted from below to remove the Warning "unused" at fun.def. --------- *)
    23   val mout2str: mout -> string
    24 (*/-------------------------------------------------------- ! aktivate for Test_Isac BEGIN ---\* )
    25   (* NONE *)
    26 ( *\--- ! aktivate for Test_Isac END ----------------------------------------------------------/*)
    27 end
    28 
    29 (**)
    30 structure Generate(**): GENERATE_CALC_TREE(**) =
    31 struct
    32 (**)
    33 open Ctree
    34 open Pos
    35 
    36 datatype pblmet =           (*%^%*)
    37   Upblmet                   (*undefined*)
    38 | Problem of Problem.id    (*%^%*)
    39 | Method of Method.id;    (*%^%*)
    40 fun pblmet2str (Problem pblID) = "Problem " ^ strs2str pblID (*%^%*)
    41   | pblmet2str (Method metID) = "Method " ^ Method.id_to_string metID (*%^%*)
    42   | pblmet2str x = error ("pblmet2str: uncovered definition " ^ pblmet2str x)
    43 
    44 (*3.5.00: TODO: foppFK eliminated in interface FE-KE !!!*)
    45 datatype foppFK =                  (* in DG cases div 2 *)
    46   EmptyFoppFK         (*DG internal*)
    47 | FormFK of TermC.as_string
    48 | PpcFK of TermC.as_string Model.ppc
    49 fun foppFK2str (FormFK ct') ="FormFK " ^ ct'
    50   | foppFK2str (PpcFK  ppc) ="PpcFK " ^ Model.ppc2str ppc
    51   | foppFK2str EmptyFoppFK  ="EmptyFoppFK"
    52 
    53 datatype nest = Open | Closed | Nundef;
    54 fun nest2str Open = "Open"
    55   | nest2str Closed = "Closed"
    56   | nest2str Nundef = "Nundef"
    57 
    58 type indent = int;
    59 datatype edit = EdUndef | Write | Protect;
    60                                    (* bridge --> kernel *)
    61                                    (* bridge <-> kernel *)
    62 (* needed in dialog.sml *)         (* bridge <-- kernel *)
    63 fun edit2str EdUndef = "EdUndef"
    64   | edit2str Write = "Write"
    65   | edit2str Protect = "Protect";
    66 
    67 datatype inout = (*FIXME.WN1105 drop this: was required for proto0 with dialog in sml*)
    68   Error_ of string                                                         (*<--*)
    69 | FormKF of cellID * edit * indent * nest * TermC.as_string                   (*<--*)
    70 | PpcKF of cellID * edit * indent * nest * (pblmet * Model.item Model.ppc) (*<--*)
    71 | RefineKF of Stool.match list                                             (*<--*)
    72 | RefinedKF of (Problem.id * ((I_Model.T) * ((bool * term) list)))   (*<--*)
    73 
    74 (* 
    75   datatype mout = EmptyMout | Error' of inout | Form' of inout | Problems of inout
    76 *)
    77 datatype mout =
    78   FormKF of TermC.as_string
    79 | PpcKF of (pblmet * Model.item Model.ppc) 
    80 | RefinedKF of Problem.id * (I_Model.T * (bool * term) list)
    81 | Error' of string
    82 | EmptyMout
    83 
    84 fun mout2str (FormKF cterm') = "FormKF " ^ cterm'
    85   | mout2str (PpcKF  (pm, itemppc)) = "PpcKF (" ^ pblmet2str pm ^ "," ^ Model.itemppc2str itemppc ^ ")"
    86   | mout2str (RefinedKF  (_, _)) = "mout2str: RefinedKF not impl."
    87   | mout2str (Error'  str) = "Error' " ^ str
    88   | mout2str (EmptyMout    ) = "EmptyMout"
    89 
    90 type test_out = Pos.pos' * Pos.pos' list * mout * Ctree.ctree;
    91 
    92 (* init pbl with ...,dsc,empty | [] *)
    93 fun init_pbl pbt = 
    94   let
    95     fun pbt2itm (f, (d, _)) = (0, [], false, f, Model.Inc ((d, []), (TermC.empty, [])))
    96   in map pbt2itm pbt end
    97 
    98 (* take formal parameters from pbt, for transfer from pbl/met-hierarchy *)
    99 fun init_pbl' pbt = 
   100   let 
   101     fun pbt2itm (f, (d, t)) = (0, [], false, f, Model.Inc((d, [t]), (TermC.empty, [])))
   102   in map pbt2itm pbt end
   103 
   104 fun generate_inconsistent_rew (subs_opt, thm') f' (is, ctxt) (pos as (p,_)) pt =
   105   let
   106     val f = get_curr_formula (pt, pos)
   107     val pos' as (p', _) = (lev_on p, Res)
   108     val (pt, _) = case subs_opt of
   109       NONE => cappend_atomic pt p' (is, ctxt) f
   110         (Tactic.Rewrite thm') (f', []) Inconsistent
   111     | SOME subs => cappend_atomic pt p' (is, ctxt) f
   112         (Tactic.Rewrite_Inst (subs, thm')) (f', []) Inconsistent
   113     val pt = update_branch pt p' TransitiveB
   114   in (pt, pos') end
   115 
   116 (**)end(**)