equal
deleted
inserted
replaced
443 val tye' = (map fst (term_tvars prop) ~~ Ts') @ tye; |
443 val tye' = (map fst (term_tvars prop) ~~ Ts') @ tye; |
444 val T = etype_of sg vs' [] prop; |
444 val T = etype_of sg vs' [] prop; |
445 val defs' = if T = nullT then defs |
445 val defs' = if T = nullT then defs |
446 else fst (extr d defs vs ts Ts hs prf0) |
446 else fst (extr d defs vs ts Ts hs prf0) |
447 in |
447 in |
448 if T = nullT andalso realizes_null vs' prop = prop then (defs, prf0) |
448 if T = nullT andalso realizes_null vs' prop aconv prop then (defs, prf0) |
449 else case Symtab.lookup (realizers, name) of |
449 else case Symtab.lookup (realizers, name) of |
450 None => (case find vs' (find' name defs') of |
450 None => (case find vs' (find' name defs') of |
451 None => |
451 None => |
452 let |
452 let |
453 val _ = assert (T = nullT) "corr: internal error"; |
453 val _ = assert (T = nullT) "corr: internal error"; |
474 | corr d defs vs ts Ts hs (prf0 as PAxm (s, prop, Some Ts')) _ _ = |
474 | corr d defs vs ts Ts hs (prf0 as PAxm (s, prop, Some Ts')) _ _ = |
475 let |
475 let |
476 val (vs', tye) = find_inst prop Ts ts vs; |
476 val (vs', tye) = find_inst prop Ts ts vs; |
477 val tye' = (map fst (term_tvars prop) ~~ Ts') @ tye |
477 val tye' = (map fst (term_tvars prop) ~~ Ts') @ tye |
478 in |
478 in |
479 case find vs' (Symtab.lookup_multi (realizers, s)) of |
479 if etype_of sg vs' [] prop = nullT andalso |
|
480 realizes_null vs' prop aconv prop then (defs, prf0) |
|
481 else case find vs' (Symtab.lookup_multi (realizers, s)) of |
480 Some (_, prf) => (defs, prf_subst_TVars tye' prf) |
482 Some (_, prf) => (defs, prf_subst_TVars tye' prf) |
481 | None => error ("corr: no realizer for instance of axiom " ^ |
483 | None => error ("corr: no realizer for instance of axiom " ^ |
482 quote s ^ ":\n" ^ Sign.string_of_term sg (Envir.beta_norm |
484 quote s ^ ":\n" ^ Sign.string_of_term sg (Envir.beta_norm |
483 (Reconstruct.prop_of (proof_combt (prf0, ts))))) |
485 (Reconstruct.prop_of (proof_combt (prf0, ts))))) |
484 end |
486 end |
576 val (vs', tye) = find_inst prop Ts ts vs; |
578 val (vs', tye) = find_inst prop Ts ts vs; |
577 val tye' = (map fst (term_tvars prop) ~~ Ts') @ tye |
579 val tye' = (map fst (term_tvars prop) ~~ Ts') @ tye |
578 in |
580 in |
579 case find vs' (Symtab.lookup_multi (realizers, s)) of |
581 case find vs' (Symtab.lookup_multi (realizers, s)) of |
580 Some (t, _) => (defs, subst_TVars tye' t) |
582 Some (t, _) => (defs, subst_TVars tye' t) |
581 | None => error ("no realizer for instance of axiom " ^ |
583 | None => error ("extr: no realizer for instance of axiom " ^ |
582 quote s ^ ":\n" ^ Sign.string_of_term sg (Envir.beta_norm |
584 quote s ^ ":\n" ^ Sign.string_of_term sg (Envir.beta_norm |
583 (Reconstruct.prop_of (proof_combt (prf0, ts))))) |
585 (Reconstruct.prop_of (proof_combt (prf0, ts))))) |
584 end |
586 end |
585 |
587 |
586 | extr d defs vs ts Ts hs _ = error "extr: bad proof"; |
588 | extr d defs vs ts Ts hs _ = error "extr: bad proof"; |