changed addcongs to addeqcongs in simplifier.ML
authornipkow
Thu, 16 Sep 1993 14:21:44 +0200
changeset 1c6a6e3db5353
parent 0 a5a9c433f639
child 2 c67f44be880f
changed addcongs to addeqcongs in simplifier.ML
src/Provers/simp.ML
src/Provers/simplifier.ML
     1.1 --- a/src/Provers/simp.ML	Thu Sep 16 12:20:38 1993 +0200
     1.2 +++ b/src/Provers/simp.ML	Thu Sep 16 14:21:44 1993 +0200
     1.3 @@ -1,5 +1,4 @@
     1.4  (*  Title:      Provers/simp
     1.5 -    ID:         $Id$
     1.6      Author:     Tobias Nipkow
     1.7      Copyright   1993  University of Cambridge
     1.8  
     2.1 --- a/src/Provers/simplifier.ML	Thu Sep 16 12:20:38 1993 +0200
     2.2 +++ b/src/Provers/simplifier.ML	Thu Sep 16 14:21:44 1993 +0200
     2.3 @@ -1,10 +1,18 @@
     2.4 -infix addsimps addcongs
     2.5 +(*  Title:      Provers/simplifier
     2.6 +    ID:         $Id$
     2.7 +    Author:     Tobias Nipkow
     2.8 +    Copyright   1993  TU Munich
     2.9 +
    2.10 +Generic simplifier, suitable for most logics.
    2.11 + 
    2.12 +*)
    2.13 +infix addsimps addeqcongs
    2.14        setsolver setloop setmksimps setsubgoaler;
    2.15  
    2.16  signature SIMPLIFIER =
    2.17  sig
    2.18    type simpset
    2.19 -  val addcongs: simpset * thm list -> simpset
    2.20 +  val addeqcongs: simpset * thm list -> simpset
    2.21    val addsimps: simpset * thm list -> simpset
    2.22    val asm_full_simp_tac: simpset -> int -> tactic
    2.23    val asm_simp_tac: simpset -> int -> tactic
    2.24 @@ -82,7 +90,7 @@
    2.25       loop_tac=loop_tac}
    2.26    end;
    2.27  
    2.28 -fun (SS{mss,simps,congs,subgoal_tac,finish_tac,loop_tac}) addcongs newcongs =
    2.29 +fun (SS{mss,simps,congs,subgoal_tac,finish_tac,loop_tac}) addeqcongs newcongs =
    2.30    SS{mss= Thm.add_congs(mss,newcongs),
    2.31       simps= simps,
    2.32       congs= newcongs @ congs,
    2.33 @@ -116,29 +124,26 @@
    2.34          loop_tac=loop_tac}
    2.35    end;
    2.36  
    2.37 +fun NEWSUBGOALS tac tacf =
    2.38 +  STATE(fn state0 =>
    2.39 +    tac THEN STATE(fn state1 => tacf(nprems_of state1 - nprems_of state0)));
    2.40 +
    2.41  fun asm_full_simp_tac(SS{mss,simps,congs,subgoal_tac,finish_tac,loop_tac}) =
    2.42    let fun solve_all_tac mss =
    2.43          let val ss = SS{mss=mss,simps=simps,congs=congs,
    2.44                          subgoal_tac=subgoal_tac,
    2.45                          finish_tac=finish_tac, loop_tac=loop_tac}
    2.46 -            fun solve1 thm = tapply(
    2.47 -                  STATE(fn state => let val n = nprems_of state
    2.48 -                    in if n=0 then all_tac
    2.49 -                       else subgoal_tac ss 1 THEN
    2.50 -                            COND (has_fewer_prems n) (Tactic solve1) no_tac
    2.51 -                    end),
    2.52 -                  thm)
    2.53 -        in DEPTH_SOLVE(Tactic solve1) end
    2.54 +            val solve1_tac =
    2.55 +              NEWSUBGOALS (subgoal_tac ss 1)
    2.56 +                          (fn n => if n<0 then all_tac else no_tac)
    2.57 +        in DEPTH_SOLVE(solve1_tac) end
    2.58  
    2.59        fun simp_loop i thm =
    2.60          tapply(asm_rewrite_goal_tac solve_all_tac mss i THEN
    2.61 -               (finish_tac (prems_of_mss mss) i  ORELSE  STATE(looper i)),
    2.62 +               (finish_tac (prems_of_mss mss) i  ORELSE  looper i),
    2.63                 thm)
    2.64 -      and allsimp i m state =
    2.65 -        let val n = nprems_of state
    2.66 -        in EVERY(map (fn j => simp_loop_tac (i+j)) ((n-m) downto 0)) end
    2.67 -      and looper i state =
    2.68 -        TRY(loop_tac i THEN STATE(allsimp i (nprems_of state)))
    2.69 +      and allsimp i n = EVERY(map (fn j => simp_loop_tac (i+j)) (n downto 0))
    2.70 +      and looper i = TRY(NEWSUBGOALS (loop_tac i) (allsimp i))
    2.71        and simp_loop_tac i = Tactic(simp_loop i)
    2.72  
    2.73    in simp_loop_tac end;