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

Benutzer

Quelle  Stream.thy

  Sprache: Isabelle
 

section Stream Iterators

theory Stream
imports LazyList
begin

subsection Type definitions for streams

text Note that everything is strict in the state type.

domain ('a,'s) Step = Done | Skip 's | Yield (lazy 'a) 's

type_synonym ('a, 's) Stepper = "'s ('a, 's) Step"

domain ('a,'s) Stream = Stream (lazy "('a, 's) Stepper") 's


subsection Converting from streams to lists

fixrec
  unfold :: "('a, 's) Stepper -> ('s -> 'a LList)"
where
  "unfoldh = "
"s ==>
    unfoldhs =
      (case hs of
        Done ==> LNil
      | Skips' ==> unfoldhs'
      | Yieldxs' ==> LConsx(unfoldhs'))"

fixrec
  unfoldF :: "('a, 's) Stepper ('s 'a LList) ('s 'a LList)"
where
  "unfoldFhu = "
"s ==>
    unfoldFhus =
      (case hs of
        Done ==> LNil
      | Skips' ==> us'
      | Yieldxs' ==> LConsx(us'))"

lemma unfold_eq_fix: "unfoldh = fix(unfoldFh)"
proof (rule below_antisym)
  show "unfoldh fix(unfoldFh)"
    apply (rule unfold.induct, simp, simp)
    apply (subst fix_eq)
    apply (rule cfun_belowI, rename_tac s)
    apply (case_tac "s = ", simp, simp)
    apply (intro monofun_cfun monofun_LAM below_refl, simp_all)
    done
  show "fix(unfoldFh) unfoldh"
    apply (rule fix_ind, simp, simp)
    apply (subst unfold.unfold)
    apply (rule cfun_belowI, rename_tac s)
    apply (case_tac "s = ", simp, simp)
    apply (intro monofun_cfun monofun_LAM below_refl, simp_all)
    done
qed

lemma unfold_ind:
    fixes P :: "('s 'a LList) ==> bool"
    assumes "adm P" and "P " and "u. P u ==> P (unfoldFhu)"
    shows "P (unfoldh)"
unfolding unfold_eq_fix by (rule fix_ind [of P, OF assms])

fixrec
  unfold2 :: "('s 'a LList) ('a, 's) Step 'a LList"
where
  "unfold2uDone = LNil"
"s ==> unfold2u(Skips) = us"
"s ==> unfold2u(Yieldxs) = LConsx(us)"

lemma unfold2_strict [simp]: "unfold2u = "
by fixrec_simp

lemma unfold: "s ==> unfoldhs = unfold2(unfoldh)(hs)"
by (case_tac "hs", simp_all)

lemma unfoldF: "s ==> unfoldFhus = unfold2u(hs)"
by (case_tac "hs", simp_all)

declare unfold.simps(2) [simp del]
declare unfoldF.simps(2) [simp del]
declare unfoldF [simp]

fixrec
  unstream :: "('a, 's) Stream 'a LList"
where
  "s ==> unstream(Streamhs) = unfoldhs"

lemma unstream_strict [simp]: "unstream = "
by fixrec_simp


subsection Converting from lists to streams

fixrec
  streamStep :: "('a LList)\<bottom> ('a, ('a LList)\<bottom>) Step"
where
  "streamStep(upLNil) = Done"
"streamStep(up(LConsxxs)) = Yieldx(upxs)"

lemma streamStep_strict [simp]: "streamStep(up) = "
by fixrec_simp

fixrec
  stream :: "'a LList ('a, ('a LList)\<bottom>) Stream"
where
  "streamxs = StreamstreamStep(upxs)"

lemma stream_defined [simp]: "streamxs "
  by simp

lemma unstream_stream [simp]:
  fixes xs :: "'a LList"
  shows "unstream(streamxs) = xs"
by (induct xs, simp_all add: unfold)

declare stream.simps [simp del]


subsection Bisimilarity relation on streams

definition
  bisimilar :: "('a, 's) Stream ==> ('a, 't) Stream ==> bool" (infix  50)
where
  "a b unstreama = unstreamb a b "

lemma unstream_cong:
  "a b ==> unstreama = unstreamb"
    unfolding bisimilar_def by simp

lemma stream_cong:
  "xs = ys ==> streamxs streamys"
    unfolding bisimilar_def by simp

lemma stream_unstream_cong:
  "a b ==> stream(unstreama) b"
    unfolding bisimilar_def by simp

end

Messung V0.5 in Prozent
C=75 H=96 G=86

¤ Dauer der Verarbeitung: 0.4 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen



NIST Cobol Testsuite



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

      Eigene Quellcodes
      Fremde Quellcodes
     Quellcodebibliothek
      Suchen

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge