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

Benutzer

Quelle  utp_expr_funcs.thy

  Sprache: Isabelle
 

theory utp_expr_funcs
  imports utp_expr_insts
begin

syntax ―  Polymorphic constructs
  "_uceil"      :: "logic ==> logic" (_u)
  "_ufloor"     :: "logic ==> logic" (_u)
  "_umin"       :: "logic ==> logic ==> logic" (minu'(_, _'))
  "_umax"       :: "logic ==> logic ==> logic" (maxu'(_, _'))
  "_ugcd"       :: "logic ==> logic ==> logic" (gcdu'(_, _'))

translations
  ―  Type-class polymorphic constructs
  "minu(x, y)"  == "CONST bop (CONST min) x y"
  "maxu(x, y)"  == "CONST bop (CONST max) x y"
  "gcdu(x, y)"  == "CONST bop (CONST gcd) x y"
  "xu" == "CONST uop CONST ceiling x"
  "xu" == "CONST uop CONST floor x"

syntax ―  Lists / Sequences
  "_ucons"      :: "logic ==> logic ==> logic" (infixr #u 65)
  "_unil"       :: "('a list, 'α) uexpr" ()
  "_ulist"      :: "args => ('a list, 'α) uexpr"    ((_))
  "_uappend"    :: "('a list, 'α) uexpr ==> ('a list, 'α) uexpr ==> ('a list, 'α) uexpr" (infixr ^u 80)
  "_udconcat"   :: "logic ==> logic ==> logic" (infixr \u 90)
  "_ulast"      :: "('a list, 'α) uexpr ==> ('a, 'α) uexpr" (lastu'(_'))
  "_ufront"     :: "('a list, 'α) uexpr ==> ('a list, 'α) uexpr" (frontu'(_'))
  "_uhead"      :: "('a list, 'α) uexpr ==> ('a, 'α) uexpr" (headu'(_'))
  "_utail"      :: "('a list, 'α) uexpr ==> ('a list, 'α) uexpr" (tailu'(_'))
  "_utake"      :: "(nat, 'α) uexpr ==> ('a list, 'α) uexpr ==> ('a list, 'α) uexpr" (takeu'(_,/ _'))
  "_udrop"      :: "(nat, 'α) uexpr ==> ('a list, 'α) uexpr ==> ('a list, 'α) uexpr" (dropu'(_,/ _'))
  "_ufilter"    :: "('a list, 'α) uexpr ==> ('a set, 'α) uexpr ==> ('a list, 'α) uexpr" (infixl 🛇u 75)
  "_uextract"   :: "('a set, 'α) uexpr ==> ('a list, 'α) uexpr ==> ('a list, 'α) uexpr" (infixl u 75)
  "_uelems"     :: "('a list, 'α) uexpr ==> ('a set, 'α) uexpr" (elemsu'(_'))
  "_usorted"    :: "('a list, 'α) uexpr ==> (bool, 'α) uexpr" (sortedu'(_'))
  "_udistinct"  :: "('a list, 'α) uexpr ==> (bool, 'α) uexpr" (distinctu'(_'))
  "_uupto"      :: "logic ==> logic ==> logic" (_.._)
  "_uupt"       :: "logic ==> logic ==> logic" (_..<_\)
  "_umap"       :: "logic ==> logic ==> logic" (mapu)
  "_uzip"       :: "logic ==> logic ==> logic" (zipu)

translations
  "x #u ys" == "CONST bop (#) x ys"
  ""       == "«[]¬"
  "x, xs"  == "x #u xs"
  "x"      == "x #u «[]¬"
  "x ^u y"   == "CONST bop (@) x y"
  "A \<frown>u B" == "CONST bop (\<frown>) A B"
  "lastu(xs)" == "CONST uop CONST last xs"
  "frontu(xs)" == "CONST uop CONST butlast xs"
  "headu(xs)" == "CONST uop CONST hd xs"
  "tailu(xs)" == "CONST uop CONST tl xs"
  "dropu(n,xs)" == "CONST bop CONST drop n xs"
  "takeu(n,xs)" == "CONST bop CONST take n xs"
  "elemsu(xs)" == "CONST uop CONST set xs"
  "sortedu(xs)" == "CONST uop CONST sorted xs"
  "distinctu(xs)" == "CONST uop CONST distinct xs"
  "xs 🛇u A"   == "CONST bop CONST seq_filter xs A"
  "A u xs"   == "CONST bop (l) A xs"
  "n..k" == "CONST bop CONST upto n k"
  "n..<k" == "CONST bop CONST upt n k"
  "mapu f xs" == "CONST bop CONST map f xs"
  "zipu xs ys" == "CONST bop CONST zip xs ys"

syntax ―  Sets
  "_ufinite"    :: "logic ==> logic" (finiteu'(_'))
  "_uempset"    :: "('a set, 'α) uexpr" ({}u)
  "_uset"       :: "args => ('a set, 'α) uexpr" ({(_)}u)
  "_uunion"     :: "('a set, 'α) uexpr ==> ('a set, 'α) uexpr ==> ('a set, 'α) uexpr" (infixl u 65)
  "_uinter"     :: "('a set, 'α) uexpr ==> ('a set, 'α) uexpr ==> ('a set, 'α) uexpr" (infixl u 70)
  "_uinsert"    :: "logic ==> logic ==> logic" (insertu)
  "_uimage"     :: "logic ==> logic ==> logic" (_(_)u [10,010)
  "_usubset"    :: "('a set, 'α) uexpr ==> ('a set, 'α) uexpr ==> (bool, 'α) uexpr" (infix u 50)
  "_usubseteq"  :: "('a set, 'α) uexpr ==> ('a set, 'α) uexpr ==> (bool, 'α) uexpr" (infix u 50)
  "_uconverse"  :: "logic ==> logic" ((_~) [1000999)
  "_ucarrier"   :: "type ==> logic" ([_]T)
  "_uid"        :: "type ==> logic" (id[_])
  "_uproduct"   :: "logic ==> logic ==> logic" (infixr ×u 80)
  "_urelcomp"   :: "logic ==> logic ==> logic" (infixr ;u 75)

translations
  "finiteu(x)" == "CONST uop (CONST finite) x"
  "{}u"      == "«{}¬"
  "insertu x xs" == "CONST bop CONST insert x xs"
  "{x, xs}u" == "insertu x {xs}u"
  "{x}u"     == "insertu x «{}¬"
  "A u B"   == "CONST bop () A B"
  "A u B"   == "CONST bop () A B"
  "f(A)u"     == "CONST bop CONST image f A"
  "A u B"   == "CONST bop () A B"
  "f u g"   <= "CONST bop (p) f g"
  "f u g"   <= "CONST bop (f) f g"
  "A u B"   == "CONST bop () A B"
  "f u g"   <= "CONST bop (p) f g"
  "f u g"   <= "CONST bop (f) f g"
  "P~"        == "CONST uop CONST converse P"
  "['a]T"     == "«CONST set_of TYPE('a)¬"
  "id['a]"    == "«CONST Id_on (CONST set_of TYPE('a))¬"
  "A ×u B"    == "CONST bop CONST Product_Type.Times A B"
  "A ;u B"    == "CONST bop CONST relcomp A B"

syntax ―  Partial functions
  "_umap_plus"  :: "logic ==> logic ==> logic" (infixl u 85)
  "_umap_minus" :: "logic ==> logic ==> logic" (infixl u 85)

translations
  "f u g"   => "(f :: ((_, _) pfun, _) uexpr) + g"
  "f u g"   => "(f :: ((_, _) pfun, _) uexpr) - g"
  
syntax ―  Sum types
  "_uinl"       :: "logic ==> logic" (inlu'(_'))
  "_uinr"       :: "logic ==> logic" (inru'(_'))
  
translations
  "inlu(x)" == "CONST uop CONST Inl x"
  "inru(x)" == "CONST uop CONST Inr x"

subsection  Lifting set collectors

text  We provide syntax for various types of set collectors, including intervals and the Z-style
 set comprehension which is purpose built as a new lifted definition.

  
syntax
  "_uset_atLeastAtMost" :: "('a, 'α) uexpr ==> ('a, 'α) uexpr ==> ('a set, 'α) uexpr" ((1{_.._}u))
  "_uset_atLeastLessThan" :: "('a, 'α) uexpr ==> ('a, 'α) uexpr ==> ('a set, 'α) uexpr" ((1{_..<_}u))
  "_uset_compr" :: "pttrn ==> ('a set, 'α) uexpr ==> (bool, 'α) uexpr ==> ('b, 'α) uexpr ==> ('b set, 'α) uexpr" ((1{_ :/ _ |/ _ / _}u))
  "_uset_compr_nset" :: "pttrn ==> (bool, 'α) uexpr ==> ('b, 'α) uexpr ==> ('b set, 'α) uexpr" ((1{_ |/ _ / _}u))

lift_definition ZedSetCompr ::
  "('a set, 'α) uexpr ==> ('a ==> (bool, 'α) uexpr × ('b, 'α) uexpr) ==> ('b set, 'α) uexpr"
is "λ A PF b. { snd (PF x) b | x. x A b fst (PF x) b}" .

translations
  "{x..y}u" == "CONST bop CONST atLeastAtMost x y"
  "{x..<y}u" == "CONST bop CONST atLeastLessThan x y"
  "{x | P F}u" == "CONST ZedSetCompr (CONST lit CONST UNIV) (λ x. (P, F))"
  "{x : A | P F}u" == "CONST ZedSetCompr A (λ x. (P, F))"

subsection  Lifting limits
  
text  We also lift the following functions on topological spaces for taking function limits,
 and describing continuity.


definition ulim_left :: "'a::order_topology ==> ('a ==> 'b) ==> 'b::t2_space" where
[uexpr_defs]: "ulim_left = (λ p f. Lim (at_left p) f)"

definition ulim_right :: "'a::order_topology ==> ('a ==> 'b) ==> 'b::t2_space" where
[uexpr_defs]: "ulim_right = (λ p f. Lim (at_right p) f)"

definition ucont_on :: "('a::topological_space ==> 'b::topological_space) ==> 'a set ==> bool" where
[uexpr_defs]: "ucont_on = (λ f A. continuous_on A f)"

syntax
  "_ulim_left"  :: "id ==> logic ==> logic ==> logic" (limu'(_ _-')'(_'))
  "_ulim_right" :: "id ==> logic ==> logic ==> logic" (limu'(_ _+')'(_'))
  "_ucont_on"   :: "logic ==> logic ==> logic" (infix cont-onu 90)

translations
  "limu(x p-)(e)" == "CONST bop CONST ulim_left p (λ x e)"
  "limu(x p+)(e)" == "CONST bop CONST ulim_right p (λ x e)"
  "f cont-onu A"     == "CONST bop CONST continuous_on A f"

lemma uset_minus_empty [simp]: "x - {}u = x"
  by (simp add: uexpr_defs, transfer, simp)

lemma uinter_empty_1 [simp]: "x u {}u = {}u"
  by (transfer, simp)

lemma uinter_empty_2 [simp]: "{}u u x = {}u"
  by (transfer, simp)

lemma uunion_empty_1 [simp]: "{}u u x = x"
  by (transfer, simp)

lemma uunion_insert [simp]: "(bop insert x A) u B = bop insert x (A u B)"
  by (transfer, simp)

lemma ulist_filter_empty [simp]: "x 🛇u {}u = "
  by (transfer, simp)

lemma tail_cons [simp]: "tailu(x ^u xs) = xs"
  by (transfer, simp)

lemma uconcat_units [simp]: " ^u xs = xs" "xs ^u = xs"
  by (transfer, simp)+

end

Messung V0.5 in Prozent
C=76 H=81 G=78

¤ Dauer der Verarbeitung: 0.11 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

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 und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


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

Monitoring

Montastic status badge