src/Provers/trancl.ML
changeset 59498 50b60f501b05
parent 58839 ccda99401bc8
child 59582 0fbed69ff081
equal deleted inserted replaced
59497:0c5cd369a643 59498:50b60f501b05
   539   val (rel, _, prf) = mkconcl_trancl C;
   539   val (rel, _, prf) = mkconcl_trancl C;
   540 
   540 
   541   val prems = flat (map_index (mkasm_trancl rel o swap) Hs);
   541   val prems = flat (map_index (mkasm_trancl rel o swap) Hs);
   542   val prfs = solveTrancl (prems, C);
   542   val prfs = solveTrancl (prems, C);
   543  in
   543  in
   544   Subgoal.FOCUS (fn {prems, concl, ...} =>
   544   Subgoal.FOCUS (fn {context = ctxt', prems, concl, ...} =>
   545     let
   545     let
   546       val SOME (_, _, rel', _) = decomp (term_of concl);
   546       val SOME (_, _, rel', _) = decomp (term_of concl);
   547       val thms = map (prove thy rel' prems) prfs
   547       val thms = map (prove thy rel' prems) prfs
   548     in resolve_tac [prove thy rel' thms prf] 1 end) ctxt n st
   548     in resolve_tac ctxt' [prove thy rel' thms prf] 1 end) ctxt n st
   549  end
   549  end
   550  handle Cannot => Seq.empty);
   550  handle Cannot => Seq.empty);
   551 
   551 
   552 
   552 
   553 fun rtrancl_tac ctxt = SUBGOAL (fn (A, n) => fn st =>
   553 fun rtrancl_tac ctxt = SUBGOAL (fn (A, n) => fn st =>
   558   val (rel, _, prf) = mkconcl_rtrancl C;
   558   val (rel, _, prf) = mkconcl_rtrancl C;
   559 
   559 
   560   val prems = flat (map_index (mkasm_rtrancl rel o swap) Hs);
   560   val prems = flat (map_index (mkasm_rtrancl rel o swap) Hs);
   561   val prfs = solveRtrancl (prems, C);
   561   val prfs = solveRtrancl (prems, C);
   562  in
   562  in
   563   Subgoal.FOCUS (fn {prems, concl, ...} =>
   563   Subgoal.FOCUS (fn {context = ctxt', prems, concl, ...} =>
   564     let
   564     let
   565       val SOME (_, _, rel', _) = decomp (term_of concl);
   565       val SOME (_, _, rel', _) = decomp (term_of concl);
   566       val thms = map (prove thy rel' prems) prfs
   566       val thms = map (prove thy rel' prems) prfs
   567     in resolve_tac [prove thy rel' thms prf] 1 end) ctxt n st
   567     in resolve_tac ctxt' [prove thy rel' thms prf] 1 end) ctxt n st
   568  end
   568  end
   569  handle Cannot => Seq.empty | General.Subscript => Seq.empty);
   569  handle Cannot => Seq.empty | General.Subscript => Seq.empty);
   570 
   570 
   571 end;
   571 end;