src/Tools/isac/MathEngBasic/tactic.sml
changeset 59903 5037ca1b112b
parent 59902 e7910a62eaf2
child 59910 778899c624a6
equal deleted inserted replaced
59902:e7910a62eaf2 59903:5037ca1b112b
    10 signature TACTIC =
    10 signature TACTIC =
    11 sig
    11 sig
    12   datatype T =
    12   datatype T =
    13     Add_Find' of TermC.as_string * Model.itm list | Add_Given' of TermC.as_string * Model.itm list 
    13     Add_Find' of TermC.as_string * Model.itm list | Add_Given' of TermC.as_string * Model.itm list 
    14   | Add_Relation' of TermC.as_string * Model.itm list
    14   | Add_Relation' of TermC.as_string * Model.itm list
    15   | Apply_Method' of Spec.metID * term option * Istate_Def.T * Proof.context
    15   | Apply_Method' of Method.id * term option * Istate_Def.T * Proof.context
    16 
    16 
    17   | Begin_Sequ' | Begin_Trans' of term
    17   | Begin_Sequ' | Begin_Trans' of term
    18   | Split_And' of term | Split_Or' of term | Split_Intersect' of term
    18   | Split_And' of term | Split_Or' of term | Split_Intersect' of term
    19   | Conclude_And' of term | Conclude_Or' of term | Collect_Trues' of term
    19   | Conclude_And' of term | Conclude_Or' of term | Collect_Trues' of term
    20   | End_Sequ' | End_Trans' of Selem.result
    20   | End_Sequ' | End_Trans' of Selem.result
    21   | End_Ruleset' of term | End_Intersect' of term | End_Proof''
    21   | End_Ruleset' of term | End_Intersect' of term | End_Proof''
    22 
    22 
    23   | CAScmd' of term
    23   | CAScmd' of term
    24   | Calculate' of ThyC.id * string * term * (term * ThmC.T)
    24   | Calculate' of ThyC.id * string * term * (term * ThmC.T)
    25   | Check_Postcond' of Spec.pblID * term
    25   | Check_Postcond' of Problem.id * term
    26   | Check_elementwise' of term * TermC.as_string * Selem.result
    26   | Check_elementwise' of term * TermC.as_string * Selem.result
    27   | Del_Find' of TermC.as_string | Del_Given' of TermC.as_string | Del_Relation' of TermC.as_string
    27   | Del_Find' of TermC.as_string | Del_Given' of TermC.as_string | Del_Relation' of TermC.as_string
    28 
    28 
    29   | Derive' of Rule_Set.T      
    29   | Derive' of Rule_Set.T      
    30   | Detail_Set' of ThyC.id * bool * Rule_Set.T * term * Selem.result
    30   | Detail_Set' of ThyC.id * bool * Rule_Set.T * term * Selem.result
    32   | End_Detail' of Selem.result
    32   | End_Detail' of Selem.result
    33 
    33 
    34   | Empty_Tac_
    34   | Empty_Tac_
    35   | Free_Solve'
    35   | Free_Solve'
    36 
    36 
    37   | Init_Proof' of TermC.as_string list * Spec.spec
    37   | Init_Proof' of TermC.as_string list * Spec.T
    38   | Model_Problem' of Spec.pblID * Model.itm list * Model.itm list
    38   | Model_Problem' of Problem.id * Model.itm list * Model.itm list
    39   | Or_to_List' of term * term
    39   | Or_to_List' of term * term
    40   | Refine_Problem' of Spec.pblID * (Model.itm list * (bool * term) list)
    40   | Refine_Problem' of Problem.id * (Model.itm list * (bool * term) list)
    41   | Refine_Tacitly' of Spec.pblID * Spec.pblID * ThyC.id * Spec.metID * Model.itm list
    41   | Refine_Tacitly' of Problem.id * Problem.id * ThyC.id * Method.id * Model.itm list
    42 
    42 
    43   | Rewrite' of ThyC.id * Rewrite_Ord.rew_ord' * Rule_Set.T * bool * ThmC.T * term * Selem.result
    43   | Rewrite' of ThyC.id * Rewrite_Ord.rew_ord' * Rule_Set.T * bool * ThmC.T * term * Selem.result
    44   | Rewrite_Inst' of ThyC.id * Rewrite_Ord.rew_ord' * Rule_Set.T * bool * UnparseC.subst * ThmC.T * term * Selem.result
    44   | Rewrite_Inst' of ThyC.id * Rewrite_Ord.rew_ord' * Rule_Set.T * bool * UnparseC.subst * ThmC.T * term * Selem.result
    45   | Rewrite_Set' of ThyC.id * bool * Rule_Set.T * term * Selem.result
    45   | Rewrite_Set' of ThyC.id * bool * Rule_Set.T * term * Selem.result
    46   | Rewrite_Set_Inst' of ThyC.id * bool * UnparseC.subst * Rule_Set.T * term * Selem.result
    46   | Rewrite_Set_Inst' of ThyC.id * bool * UnparseC.subst * Rule_Set.T * term * Selem.result
    47 
    47 
    48   | Specify_Method' of Spec.metID * Model.ori list * Model.itm list
    48   | Specify_Method' of Method.id * Model.ori list * Model.itm list
    49   | Specify_Problem' of Spec.pblID * (bool * (Model.itm list * (bool * term) list))
    49   | Specify_Problem' of Problem.id * (bool * (Model.itm list * (bool * term) list))
    50   | Specify_Theory' of ThyC.id
    50   | Specify_Theory' of ThyC.id
    51   | Subproblem' of
    51   | Subproblem' of
    52       Spec.spec * Model.ori list *
    52       Spec.T * Model.ori list *
    53       term *          (* CAScmd, e.g. "solve (-1 + x = 0, x)" *)
    53       term *          (* CAScmd, e.g. "solve (-1 + x = 0, x)" *)
    54       Selem.fmz_ *    (* either input to root-probl.  or derived from prog. in ???  *)
    54       Selem.fmz_ *    (* either input to root-probl.  or derived from prog. in ???  *)
    55       (*Istate.T *       ?       *)
    55       (*Istate.T *       ?       *)
    56       Proof.context * (* derived from prog. in ???  *)
    56       Proof.context * (* derived from prog. in ???  *)
    57       term            (* ?UNUSED, e.g."Subproblem\n (''Test'',\n  ??.\<^const>String.char.Char ''LINEAR'' ''univariate'' ''equation''\n   ''test'')" *)
    57       term            (* ?UNUSED, e.g."Subproblem\n (''Test'',\n  ??.\<^const>String.char.Char ''LINEAR'' ''univariate'' ''equation''\n   ''test'')" *)
    61   val string_of: T -> string
    61   val string_of: T -> string
    62 
    62 
    63   datatype input =
    63   datatype input =
    64     Add_Find of TermC.as_string | Add_Given of TermC.as_string | Add_Relation of TermC.as_string
    64     Add_Find of TermC.as_string | Add_Given of TermC.as_string | Add_Relation of TermC.as_string
    65   | Apply_Assumption of TermC.as_string list
    65   | Apply_Assumption of TermC.as_string list
    66   | Apply_Method of Spec.metID
    66   | Apply_Method of Method.id
    67   (*/--- TODO: re-design ? -----------------------------------------------------------------\*)
    67   (*/--- TODO: re-design ? -----------------------------------------------------------------\*)
    68   | Begin_Sequ | Begin_Trans
    68   | Begin_Sequ | Begin_Trans
    69   | Split_And | Split_Or | Split_Intersect
    69   | Split_And | Split_Or | Split_Intersect
    70   | Conclude_And | Conclude_Or | Collect_Trues
    70   | Conclude_And | Conclude_Or | Collect_Trues
    71   | End_Sequ | End_Trans
    71   | End_Sequ | End_Trans
    72   | End_Ruleset | End_Subproblem | End_Intersect | End_Proof'
    72   | End_Ruleset | End_Subproblem | End_Intersect | End_Proof'
    73   (*\--- TODO: re-design ? -----------------------------------------------------------------/*)
    73   (*\--- TODO: re-design ? -----------------------------------------------------------------/*)
    74   | CAScmd of TermC.as_string
    74   | CAScmd of TermC.as_string
    75   | Calculate of string
    75   | Calculate of string
    76   | Check_Postcond of Spec.pblID
    76   | Check_Postcond of Problem.id
    77   | Check_elementwise of TermC.as_string
    77   | Check_elementwise of TermC.as_string
    78   | Del_Find of TermC.as_string | Del_Given of TermC.as_string | Del_Relation of TermC.as_string
    78   | Del_Find of TermC.as_string | Del_Given of TermC.as_string | Del_Relation of TermC.as_string
    79 
    79 
    80   | Derive of Rule_Set.id
    80   | Derive of Rule_Set.id
    81   | Detail_Set of Rule_Set.id
    81   | Detail_Set of Rule_Set.id
    83   | End_Detail
    83   | End_Detail
    84 
    84 
    85   | Empty_Tac
    85   | Empty_Tac
    86   | Free_Solve
    86   | Free_Solve
    87 
    87 
    88   | Init_Proof of TermC.as_string list * Spec.spec
    88   | Init_Proof of TermC.as_string list * Spec.T
    89   | Model_Problem
    89   | Model_Problem
    90   | Or_to_List
    90   | Or_to_List
    91   | Refine_Problem of Spec.pblID
    91   | Refine_Problem of Problem.id
    92   | Refine_Tacitly of Spec.pblID
    92   | Refine_Tacitly of Problem.id
    93 
    93 
    94   | Rewrite of ThmC.T
    94   | Rewrite of ThmC.T
    95   | Rewrite_Inst of Selem.subs * ThmC.T
    95   | Rewrite_Inst of Selem.subs * ThmC.T
    96   | Rewrite_Set of Rule_Set.id
    96   | Rewrite_Set of Rule_Set.id
    97   | Rewrite_Set_Inst of Selem.subs * Rule_Set.id
    97   | Rewrite_Set_Inst of Selem.subs * Rule_Set.id
    98 
    98 
    99   | Specify_Method of Spec.metID
    99   | Specify_Method of Method.id
   100   | Specify_Problem of Spec.pblID
   100   | Specify_Problem of Problem.id
   101   | Specify_Theory of ThyC.id
   101   | Specify_Theory of ThyC.id
   102   | Subproblem of ThyC.id * Spec.pblID
   102   | Subproblem of ThyC.id * Problem.id
   103 
   103 
   104   | Substitute of Selem.sube
   104   | Substitute of Selem.sube
   105   | Tac of string
   105   | Tac of string
   106   | Take of TermC.as_string | Take_Inst of TermC.as_string
   106   | Take of TermC.as_string | Take_Inst of TermC.as_string
   107   val input_to_string : input -> string
   107   val input_to_string : input -> string
   144    see 'type tac_' for the internal representation of tactics
   144    see 'type tac_' for the internal representation of tactics
   145 *)
   145 *)
   146 datatype input =
   146 datatype input =
   147     Add_Find of TermC.as_string | Add_Given of TermC.as_string | Add_Relation of TermC.as_string
   147     Add_Find of TermC.as_string | Add_Given of TermC.as_string | Add_Relation of TermC.as_string
   148   | Apply_Assumption of TermC.as_string list
   148   | Apply_Assumption of TermC.as_string list
   149   | Apply_Method of Spec.metID
   149   | Apply_Method of Method.id
   150     (* creates an "istate" in PblObj.env; in case of "implicit_take" 
   150     (* creates an "istate" in PblObj.env; in case of "implicit_take" 
   151       creates a formula at ((lev_on o lev_dn) p, Frm) and in this "ppobj.loc"
   151       creates a formula at ((lev_on o lev_dn) p, Frm) and in this "ppobj.loc"
   152       a "SOME istate" at fst of "loc".
   152       a "SOME istate" at fst of "loc".
   153       As each step (in the solve-phase) has a resulting formula (at the front-end)
   153       As each step (in the solve-phase) has a resulting formula (at the front-end)
   154       Apply_Method also does the 1st step in the script (an "initac") if there is no "implicit_take" *)  
   154       Apply_Method also does the 1st step in the script (an "initac") if there is no "implicit_take" *)  
   159   | End_Sequ | End_Trans
   159   | End_Sequ | End_Trans
   160   | End_Ruleset | End_Subproblem (* WN0509 drop *) | End_Intersect | End_Proof'
   160   | End_Ruleset | End_Subproblem (* WN0509 drop *) | End_Intersect | End_Proof'
   161   (*\--- TODO: re-design ? -----------------------------------------------------------------/*)
   161   (*\--- TODO: re-design ? -----------------------------------------------------------------/*)
   162   | CAScmd of TermC.as_string
   162   | CAScmd of TermC.as_string
   163   | Calculate of string
   163   | Calculate of string
   164   | Check_Postcond of Spec.pblID
   164   | Check_Postcond of Problem.id
   165   | Check_elementwise of TermC.as_string
   165   | Check_elementwise of TermC.as_string
   166   | Del_Find of TermC.as_string | Del_Given of TermC.as_string | Del_Relation of TermC.as_string
   166   | Del_Find of TermC.as_string | Del_Given of TermC.as_string | Del_Relation of TermC.as_string
   167 
   167 
   168   | Derive of Rule_Set.id                 (* WN0509 drop *)
   168   | Derive of Rule_Set.id                 (* WN0509 drop *)
   169   | Detail_Set of Rule_Set.id             (* WN0509 drop *)
   169   | Detail_Set of Rule_Set.id             (* WN0509 drop *)
   171   | End_Detail                     (* WN0509 drop *)
   171   | End_Detail                     (* WN0509 drop *)
   172 
   172 
   173   | Empty_Tac
   173   | Empty_Tac
   174   | Free_Solve
   174   | Free_Solve
   175 
   175 
   176   | Init_Proof of TermC.as_string list * Spec.spec
   176   | Init_Proof of TermC.as_string list * Spec.T
   177   | Model_Problem
   177   | Model_Problem
   178   | Or_to_List
   178   | Or_to_List
   179   | Refine_Problem of Spec.pblID
   179   | Refine_Problem of Problem.id
   180   | Refine_Tacitly of Spec.pblID
   180   | Refine_Tacitly of Problem.id
   181 
   181 
   182    (* rewrite-tactics can transport a (thmID, thm) to and (!) from the java-front-end
   182    (* rewrite-tactics can transport a (thmID, thm) to and (!) from the java-front-end
   183      because there all the thms are present with both (thmID, thm)
   183      because there all the thms are present with both (thmID, thm)
   184      (where user-views can show both or only one of (thmID, thm)),
   184      (where user-views can show both or only one of (thmID, thm)),
   185      and thm is created from ThmID by assoc_thm'' when entering isabisac *)
   185      and thm is created from ThmID by assoc_thm'' when entering isabisac *)
   186   | Rewrite of ThmC.T
   186   | Rewrite of ThmC.T
   187   | Rewrite_Inst of Selem.subs * ThmC.T
   187   | Rewrite_Inst of Selem.subs * ThmC.T
   188   | Rewrite_Set of Rule_Set.id
   188   | Rewrite_Set of Rule_Set.id
   189   | Rewrite_Set_Inst of Selem.subs * Rule_Set.id
   189   | Rewrite_Set_Inst of Selem.subs * Rule_Set.id
   190 
   190 
   191   | Specify_Method of Spec.metID
   191   | Specify_Method of Method.id
   192   | Specify_Problem of Spec.pblID
   192   | Specify_Problem of Problem.id
   193   | Specify_Theory of ThyC.id
   193   | Specify_Theory of ThyC.id
   194   | Subproblem of ThyC.id * Spec.pblID (* WN0509 drop *)
   194   | Subproblem of ThyC.id * Problem.id (* WN0509 drop *)
   195 
   195 
   196   | Substitute of Selem.sube
   196   | Substitute of Selem.sube
   197   | Tac of string               (* WN0509 drop *)
   197   | Tac of string               (* WN0509 drop *)
   198   | Take of TermC.as_string | Take_Inst of TermC.as_string
   198   | Take of TermC.as_string | Take_Inst of TermC.as_string
   199 
   199 
   337     Add_Find' of TermC.as_string * Model.itm list | Add_Given' of TermC.as_string * Model.itm list 
   337     Add_Find' of TermC.as_string * Model.itm list | Add_Given' of TermC.as_string * Model.itm list 
   338   | Add_Relation' of TermC.as_string * Model.itm list
   338   | Add_Relation' of TermC.as_string * Model.itm list
   339   | Apply_Method' of (* creates the 1st step visible in a (sub-) comprising
   339   | Apply_Method' of (* creates the 1st step visible in a (sub-) comprising
   340                       * tactic Apply_Method metID
   340                       * tactic Apply_Method metID
   341                       * formula term                                        *)
   341                       * formula term                                        *)
   342       Spec.metID *  (* key for Know_Store                                     *)
   342       Method.id *  (* key for Know_Store                                     *)
   343       term option *  (* the first formula of Calc.T. TODO: rm option        *)           
   343       term option *  (* the first formula of Calc.T. TODO: rm option        *)           
   344       Istate_Def.T * (* for the newly started program                       *)
   344       Istate_Def.T * (* for the newly started program                       *)
   345       Proof.context  (* for the newly started program                       *)
   345       Proof.context  (* for the newly started program                       *)
   346   (*/--- TODO: re-design ? -----------------------------------------------------------------\*)
   346   (*/--- TODO: re-design ? -----------------------------------------------------------------\*)
   347   | Begin_Sequ' | Begin_Trans' of term
   347   | Begin_Sequ' | Begin_Trans' of term
   350   | End_Sequ' | End_Trans' of Selem.result
   350   | End_Sequ' | End_Trans' of Selem.result
   351   | End_Ruleset' of term | End_Intersect' of term | End_Proof''
   351   | End_Ruleset' of term | End_Intersect' of term | End_Proof''
   352   (*\--- TODO: re-design ? -----------------------------------------------------------------/*)
   352   (*\--- TODO: re-design ? -----------------------------------------------------------------/*)
   353   | CAScmd' of term
   353   | CAScmd' of term
   354   | Calculate' of ThyC.id * string * term * (term * ThmC.T)
   354   | Calculate' of ThyC.id * string * term * (term * ThmC.T)
   355   | Check_Postcond' of Spec.pblID *
   355   | Check_Postcond' of Problem.id *
   356     term         (* returnvalue of program in solve *)
   356     term         (* returnvalue of program in solve *)
   357   | Check_elementwise' of (* DEPRECATED, made idle for Calc.T in df00a2b5c4cc *)
   357   | Check_elementwise' of (* DEPRECATED, made idle for Calc.T in df00a2b5c4cc *)
   358     term *       (* (1) the current formula: [x=1,x=...]                      *)
   358     term *       (* (1) the current formula: [x=1,x=...]                      *)
   359     string *     (* (2) the pred from Check_elementwise                       *)
   359     string *     (* (2) the pred from Check_elementwise                       *)
   360     Selem.result (* (3) composed from (1) and (2): {x. pred}                  *)
   360     Selem.result (* (3) composed from (1) and (2): {x. pred}                  *)
   366   | End_Detail' of Selem.result
   366   | End_Detail' of Selem.result
   367 
   367 
   368   | Empty_Tac_
   368   | Empty_Tac_
   369   | Free_Solve'
   369   | Free_Solve'
   370 
   370 
   371   | Init_Proof' of TermC.as_string list * Spec.spec
   371   | Init_Proof' of TermC.as_string list * Spec.T
   372   | Model_Problem' of (* first step in specifying   *)
   372   | Model_Problem' of (* first step in specifying   *)
   373     Spec.pblID *     (* key into Know_Store           *)
   373     Problem.id *     (* key into Know_Store           *)
   374     Model.itm list *  (* the 'untouched' pbl        *)
   374     Model.itm list *  (* the 'untouched' pbl        *)
   375     Model.itm list    (* the casually completed met *)
   375     Model.itm list    (* the casually completed met *)
   376   | Or_to_List' of term * term
   376   | Or_to_List' of term * term
   377   | Refine_Problem' of Spec.pblID * (Model.itm list * (bool * term) list)
   377   | Refine_Problem' of Problem.id * (Model.itm list * (bool * term) list)
   378   | Refine_Tacitly' of
   378   | Refine_Tacitly' of
   379     Spec.pblID *     (* input                                                                *)
   379     Problem.id *     (* input                                                                *)
   380     Spec.pblID *     (* the refined from applicable_in                                       *)
   380     Problem.id *     (* the refined from applicable_in                                       *)
   381     ThyC.id *      (* from new pbt?! filled in specify                                     *)
   381     ThyC.id *      (* from new pbt?! filled in specify                                     *)
   382     Spec.metID *     (* from new pbt?! filled in specify                                     *)
   382     Method.id *     (* from new pbt?! filled in specify                                     *)
   383     Model.itm list    (* drop ! 9.03: remains [] for Model_Problem recognizing its activation *)
   383     Model.itm list    (* drop ! 9.03: remains [] for Model_Problem recognizing its activation *)
   384   | Rewrite' of ThyC.id * Rewrite_Ord.rew_ord' * Rule_Set.T * bool * ThmC.T * term * Selem.result
   384   | Rewrite' of ThyC.id * Rewrite_Ord.rew_ord' * Rule_Set.T * bool * ThmC.T * term * Selem.result
   385   | Rewrite_Inst' of ThyC.id * Rewrite_Ord.rew_ord' * Rule_Set.T * bool * UnparseC.subst * ThmC.T * term * Selem.result
   385   | Rewrite_Inst' of ThyC.id * Rewrite_Ord.rew_ord' * Rule_Set.T * bool * UnparseC.subst * ThmC.T * term * Selem.result
   386   | Rewrite_Set' of ThyC.id * bool * Rule_Set.T * term * Selem.result
   386   | Rewrite_Set' of ThyC.id * bool * Rule_Set.T * term * Selem.result
   387   | Rewrite_Set_Inst' of ThyC.id * bool * UnparseC.subst * Rule_Set.T * term * Selem.result
   387   | Rewrite_Set_Inst' of ThyC.id * bool * UnparseC.subst * Rule_Set.T * term * Selem.result
   388 
   388 
   389   | Specify_Method' of Spec.metID * Model.ori list * Model.itm list
   389   | Specify_Method' of Method.id * Model.ori list * Model.itm list
   390   | Specify_Problem' of Spec.pblID * 
   390   | Specify_Problem' of Problem.id * 
   391     (bool *                  (* matches	                                  *)
   391     (bool *                  (* matches	                                  *)
   392       (Model.itm list *      (* ppc	                                      *)
   392       (Model.itm list *      (* ppc	                                      *)
   393         (bool * term) list)) (* preconditions marked true/false           *)
   393         (bool * term) list)) (* preconditions marked true/false           *)
   394   | Specify_Theory' of ThyC.id
   394   | Specify_Theory' of ThyC.id
   395   | Subproblem' of
   395   | Subproblem' of
   396     Spec.spec * 
   396     Spec.T * 
   397 		(Model.ori list) *       (* filled in associate Subproblem'           *)
   397 		(Model.ori list) *       (* filled in associate Subproblem'           *)
   398 		term *                   (* filled -"-, headline of calc-head         *)
   398 		term *                   (* filled -"-, headline of calc-head         *)
   399 		Selem.fmz_ *             (* string list from arguments                *)
   399 		Selem.fmz_ *             (* string list from arguments                *)
   400     Proof.context *          (* for specify-phase                         *)
   400     Proof.context *          (* for specify-phase                         *)
   401 		term                     (* Subproblem (thyID, pbl) OR cascmd         *)  
   401 		term                     (* Subproblem (thyID, pbl) OR cascmd         *)  
   423 
   423 
   424   | Specify_Theory' domID => "Specify_Theory' " ^ quote domID
   424   | Specify_Theory' domID => "Specify_Theory' " ^ quote domID
   425   | Specify_Problem' (pI, (ok, _)) =>  "Specify_Problem' " ^ 
   425   | Specify_Problem' (pI, (ok, _)) =>  "Specify_Problem' " ^ 
   426     spair2str (strs2str pI, spair2str (bool2str ok, spair2str ("itms2str_ itms", "items2str pre")))
   426     spair2str (strs2str pI, spair2str (bool2str ok, spair2str ("itms2str_ itms", "items2str pre")))
   427   | Specify_Method' (pI, oris, _) => "Specify_Method' (" ^ 
   427   | Specify_Method' (pI, oris, _) => "Specify_Method' (" ^ 
   428     Spec.metID2str pI ^ ", " ^ Model.oris2str oris ^ ", )"
   428     Method.id_to_string pI ^ ", " ^ Model.oris2str oris ^ ", )"
   429 
   429 
   430   | Apply_Method' (metID, _, _, _) => "Apply_Method' " ^ strs2str metID
   430   | Apply_Method' (metID, _, _, _) => "Apply_Method' " ^ strs2str metID
   431   | Check_Postcond' (pblID, scval) => "Check_Postcond' " ^
   431   | Check_Postcond' (pblID, scval) => "Check_Postcond' " ^
   432       (spair2str (strs2str pblID, UnparseC.term scval))
   432       (spair2str (strs2str pblID, UnparseC.term scval))
   433 
   433