Theory Voblint_Analysis_Interval.Interval_Domain

theory Interval_Domain
  imports Interval_Transfer
begin

section ‹Integrated Interval domain›

text ‹This theory provides one import surface for interval bounds, lattice structure,
  widening, narrowing, arithmetic, backward filtering, transfers, and printing.›

subsection ‹Executable examples›

lemma "(Fin 3 :: eint) + Fin (-1) = Fin 2" by eval
lemma "(PlusInf :: eint) + Fin 100 = PlusInf" by eval
lemma "(Fin 5 :: eint) - Fin 3 = Fin 2" by eval
lemma "(Fin 0 :: eint) - PlusInf = MinInf" by eval

lemma "Ivl (Fin 1) (Fin 3) + Ivl (Fin 2) (Fin 5) = Ivl (Fin 3) (Fin 8)" by eval
lemma "Ivl (Fin 5) (Fin 10) - Ivl (Fin 1) (Fin 3) = Ivl (Fin 2) (Fin 9)" by eval
lemma "Ivl (Fin (-2)) (Fin 3) * Ivl (Fin (-1)) (Fin 4) = Ivl (Fin (- 8)) (Fin 12)" by eval

lemma "join_ivl (Ivl (Fin 1) (Fin 3)) (Ivl (Fin 2) (Fin 5)) = Ivl (Fin 1) (Fin 5)" by eval
lemma "widen_ivl_core (Ivl (Fin 0) (Fin 1)) (Ivl (Fin 0) (Fin 2)) = Ivl (Fin 0) PlusInf" by eval
lemma "widen_ivl_core (Ivl (Fin 1) (Fin 3)) (Ivl (Fin 0) (Fin 3)) = Ivl MinInf (Fin 3)" by eval
lemma "Ivl (Fin 0) (Fin 10) ⊓ Ivl (Fin 3) (Fin 7) = Ivl (Fin 3) (Fin 7)" by eval

lemma "string_of_eint MinInf = STR ''-<infinity>''" by eval
lemma "string_of_eint PlusInf = STR ''+<infinity>''" by eval
lemma "string_of_ivl (Ivl (Fin (-3)) PlusInf) = STR ''[-3,+<infinity>]''" by eval

lemma "aval_ivl (Minus (V (STR ''x'')) (N 1))
      ((λ_. ivl_top)((STR ''x'') := Ivl (Fin 5) (Fin 10)))
    = Ivl (Fin 4) (Fin 9)"
  by eval
lemma "(bfilter_ivl (Less (V (STR ''x'')) (N 5)) True
         ((λ_. ivl_top)((STR ''x'') := Ivl (Fin 0) (Fin 10)))) (STR ''x'')
    = Ivl (Fin 0) (Fin 4)"
  by eval

end