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), |