src/Pure/proofterm.ML
changeset 70844 f95a85446a24
parent 70843 cc987440d776
child 70848 fbba2075f823
equal deleted inserted replaced
70843:cc987440d776 70844:f95a85446a24
   331 
   331 
   332 open XML.Encode Term_XML.Encode;
   332 open XML.Encode Term_XML.Encode;
   333 
   333 
   334 fun proof consts prf = prf |> variant
   334 fun proof consts prf = prf |> variant
   335  [fn MinProof => ([], []),
   335  [fn MinProof => ([], []),
   336   fn PBound a => ([int_atom a], []),
   336   fn PBound a => ([], int a),
   337   fn Abst (a, b, c) => ([a], pair (option typ) (proof consts) (b, c)),
   337   fn Abst (a, b, c) => ([a], pair (option typ) (proof consts) (b, c)),
   338   fn AbsP (a, b, c) => ([a], pair (option (term consts)) (proof consts) (b, c)),
   338   fn AbsP (a, b, c) => ([a], pair (option (term consts)) (proof consts) (b, c)),
   339   fn a % b => ([], pair (proof consts) (option (term consts)) (a, b)),
   339   fn a % b => ([], pair (proof consts) (option (term consts)) (a, b)),
   340   fn a %% b => ([], pair (proof consts) (proof consts) (a, b)),
   340   fn a %% b => ([], pair (proof consts) (proof consts) (a, b)),
   341   fn Hyp a => ([], term consts a),
   341   fn Hyp a => ([], term consts a),
   356 
   356 
   357 fun standard_term consts t = t |> variant
   357 fun standard_term consts t = t |> variant
   358  [fn Const (a, b) => ([a], list typ (Consts.typargs consts (a, b))),
   358  [fn Const (a, b) => ([a], list typ (Consts.typargs consts (a, b))),
   359   fn Free (a, _) => ([a], []),
   359   fn Free (a, _) => ([a], []),
   360   fn Var (a, _) => (indexname a, []),
   360   fn Var (a, _) => (indexname a, []),
   361   fn Bound a => ([int_atom a], []),
   361   fn Bound a => ([], int a),
   362   fn Abs (a, b, c) => ([a], pair typ (standard_term consts) (b, c)),
   362   fn Abs (a, b, c) => ([a], pair typ (standard_term consts) (b, c)),
   363   fn op $ a => ([], pair (standard_term consts) (standard_term consts) a)];
   363   fn op $ a => ([], pair (standard_term consts) (standard_term consts) a)];
   364 
   364 
   365 fun standard_proof consts prf = prf |> variant
   365 fun standard_proof consts prf = prf |> variant
   366  [fn MinProof => ([], []),
   366  [fn MinProof => ([], []),
   367   fn PBound a => ([int_atom a], []),
   367   fn PBound a => ([], int a),
   368   fn Abst (a, SOME b, c) => ([a], pair typ (standard_proof consts) (b, c)),
   368   fn Abst (a, SOME b, c) => ([a], pair typ (standard_proof consts) (b, c)),
   369   fn AbsP (a, SOME b, c) => ([a], pair (standard_term consts) (standard_proof consts) (b, c)),
   369   fn AbsP (a, SOME b, c) => ([a], pair (standard_term consts) (standard_proof consts) (b, c)),
   370   fn a % SOME b => ([], pair (standard_proof consts) (standard_term consts) (a, b)),
   370   fn a % SOME b => ([], pair (standard_proof consts) (standard_term consts) (a, b)),
   371   fn a %% b => ([], pair (standard_proof consts) (standard_proof consts) (a, b)),
   371   fn a %% b => ([], pair (standard_proof consts) (standard_proof consts) (a, b)),
   372   fn Hyp a => ([], standard_term consts a),
   372   fn Hyp a => ([], standard_term consts a),
   392 
   392 
   393 open XML.Decode Term_XML.Decode;
   393 open XML.Decode Term_XML.Decode;
   394 
   394 
   395 fun proof consts prf = prf |> variant
   395 fun proof consts prf = prf |> variant
   396  [fn ([], []) => MinProof,
   396  [fn ([], []) => MinProof,
   397   fn ([a], []) => PBound (int_atom a),
   397   fn ([], a) => PBound (int a),
   398   fn ([a], b) => let val (c, d) = pair (option typ) (proof consts) b in Abst (a, c, d) end,
   398   fn ([a], b) => let val (c, d) = pair (option typ) (proof consts) b in Abst (a, c, d) end,
   399   fn ([a], b) => let val (c, d) = pair (option (term consts)) (proof consts) b in AbsP (a, c, d) end,
   399   fn ([a], b) => let val (c, d) = pair (option (term consts)) (proof consts) b in AbsP (a, c, d) end,
   400   fn ([], a) => op % (pair (proof consts) (option (term consts)) a),
   400   fn ([], a) => op % (pair (proof consts) (option (term consts)) a),
   401   fn ([], a) => op %% (pair (proof consts) (proof consts) a),
   401   fn ([], a) => op %% (pair (proof consts) (proof consts) a),
   402   fn ([], a) => Hyp (term consts a),
   402   fn ([], a) => Hyp (term consts a),