Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quellcode-Bibliothek

© Kompilation durch diese Firma

[Weder Korrektheit noch Funktionsfähigkeit der Software werden zugesichert.]

Datei: law_cosines.prf   Sprache: SML

Original von: Isabelle©

(*  Title:      HOL/Tools/reflection.ML
    Author:     Amine Chaieb, TU Muenchen

A trial for automatical reflection with user-space declarations.
*)


signature REFLECTION =
sig
  val reflect: Proof.context -> thm list -> thm list -> conv
  val reflection_tac: Proof.context -> thm list -> thm list -> term option -> int -> tactic
  val reflect_with_eval: Proof.context -> thm list -> thm list -> conv -> conv
  val reflection_with_eval_tac: Proof.context -> thm list -> thm list -> conv -> term option -> int -> tactic
  val get_default: Proof.context -> { reification_eqs: thm list, correctness_thms: thm list }
  val add_reification_eq: attribute
  val del_reification_eq: attribute
  val add_correctness_thm: attribute
  val del_correctness_thm: attribute
  val default_reify_tac: Proof.context -> thm list -> term option -> int -> tactic
  val default_reflection_tac: Proof.context -> thm list -> thm list -> term option -> int -> tactic
end;

structure Reflection : REFLECTION =
struct

fun subst_correctness corr_thms ct =
  Conv.rewrs_conv (map (Thm.symmetric o mk_eq) corr_thms) ct
    handle CTERM _ => error "No suitable correctness theorem found";

fun reflect ctxt corr_thms eqs =
  (Reification.conv ctxt eqs) then_conv (subst_correctness corr_thms)

fun reflection_tac ctxt corr_thms eqs =
  Reification.lift_conv ctxt (reflect ctxt corr_thms eqs);

fun first_arg_conv conv =
  let
    fun conv' ct =
      if can Thm.dest_comb (fst (Thm.dest_comb ct))
      then Conv.combination_conv conv' Conv.all_conv ct
      else Conv.combination_conv Conv.all_conv conv ct;
  in conv' end;

fun reflect_with_eval ctxt corr_thms eqs conv =
  (reflect ctxt corr_thms eqs) then_conv (first_arg_conv conv) then_conv (Reification.dereify ctxt eqs);

fun reflection_with_eval_tac ctxt corr_thms eqs conv =
  Reification.lift_conv ctxt (reflect_with_eval ctxt corr_thms eqs conv);

structure Data = Generic_Data
(
  type T = thm list * thm list;
  val empty = ([], []);
  val extend = I;
  fun merge ((ths1, rths1), (ths2, rths2)) =
    (Thm.merge_thms (ths1, ths2), Thm.merge_thms (rths1, rths2));
);

fun get_default ctxt =
  let
    val (reification_eqs, correctness_thms) = Data.get (Context.Proof ctxt);
  in { reification_eqs = reification_eqs, correctness_thms = correctness_thms } end;

val add_reification_eq = Thm.declaration_attribute (Data.map o apfst o Thm.add_thm);
val del_reification_eq = Thm.declaration_attribute (Data.map o apfst o Thm.del_thm);
val add_correctness_thm = Thm.declaration_attribute (Data.map o apsnd o Thm.add_thm);
val del_correctness_thm = Thm.declaration_attribute (Data.map o apsnd o Thm.del_thm);

val _ = Theory.setup
  (Attrib.setup \<^binding>\<open>reify\<close>
    (Attrib.add_del add_reification_eq del_reification_eq)
    "declare reification equations" #>
   Attrib.setup \<^binding>\<open>reflection\<close>
    (Attrib.add_del add_correctness_thm del_correctness_thm)
    "declare reflection correctness theorems");

fun default_reify_tac ctxt user_eqs =
  let
    val { reification_eqs = default_eqs, correctness_thms = _ } =
      get_default ctxt;
    val eqs = fold Thm.add_thm user_eqs default_eqs;
  in Reification.tac ctxt eqs end;

fun default_reflection_tac ctxt user_thms user_eqs =
  let
    val { reification_eqs = default_eqs, correctness_thms = default_thms } =
      get_default ctxt;
    val corr_thms = fold Thm.add_thm user_thms default_thms;
    val eqs = fold Thm.add_thm user_eqs default_eqs; 
  in reflection_tac ctxt corr_thms eqs end;

end;

¤ Dauer der Verarbeitung: 0.16 Sekunden  (vorverarbeitet)  ¤





Download des
Quellennavigators
Download des
sprechenden Kalenders

Eigene Datei ansehen




Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.


Bemerkung:

Die farbliche Syntaxdarstellung ist noch experimentell.


Bot Zugriff



                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik