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

Benutzer

Quelle  af.thy

  Sprache: Isabelle
 

(*  
    Author:      Salomon Sickert
    License:     BSD
*)


section af - Unfolding Functions

theory af
  imports Main LTL_FGXU "Auxiliary/List2"
begin

subsection af

fun af_letter :: "'a ltl ==> 'a set ==> 'a ltl"
where
  "af_letter true ν = true"
"af_letter false ν = false"
"af_letter p(a) ν = (if a ν then true else false)"
"af_letter (np(a)) ν = (if a ν then true else false)"
"af_letter (φ and ψ) ν = (af_letter φ ν) and (af_letter ψ ν)"
"af_letter (φ or ψ) ν = (af_letter φ ν) or (af_letter ψ ν)"
"af_letter (X φ) ν = φ"
"af_letter (G φ) ν = (G φ) and (af_letter φ ν)"
"af_letter (F φ) ν = (F φ) or (af_letter φ ν)"
"af_letter (φ U ψ) ν = (φ U ψ and (af_letter φ ν)) or (af_letter ψ ν)"

abbreviation af :: "'a ltl ==> 'a set list ==> 'a ltl" (af)
where
  "af φ w foldl af_letter φ w"

lemma af_decompose:
  "af (φ and ψ) w = (af φ w) and (af ψ w)"
  "af (φ or ψ) w = (af φ w) or (af ψ w)"
  by (induction w rule: rev_induct) simp_all

lemma af_simps[simp]:
  "af true w = true"
  "af false w = false"
  "af (X φ) (x#xs) = af φ (xs)"
  by (induction w) simp_all

lemma af_F:
  "af (F φ) w = Or (F φ # map (af φ) (suffixes w))"
proof (induction w)
  case (Cons x xs)
    have "af (F φ) (x # xs) = af (af_letter (F φ) x) xs"
      by simp
    also
    have " = (af (F φ) xs) or (af (af_letter (φ) x) xs)"
      unfolding af_decompose[symmetric] by simp
    finally
    show ?case using Cons Or_append_syntactic by force
qed simp

lemma af_G:
  "af (G φ) w = And (G φ # map (af φ) (suffixes w))"
proof (induction w)
  case (Cons x xs)
    have "af (G φ) (x # xs) = af (af_letter (G φ) x) xs"
      by simp
    also
    have " = (af (G φ) xs) and (af (af_letter (φ) x) xs)"
      unfolding af_decompose[symmetric] by simp
    finally
    show ?case using Cons Or_append_syntactic by force
qed simp

lemma af_U:
  "af (φ U ψ) (x#xs) = (af (φ U ψ) xs and af φ (x#xs)) or af ψ (x#xs)"
  by (induction xs) (simp add: af_decompose)+

lemma af_respectfulness:
  P ψ ==> af_letter φ ν P af_letter ψ ν"
  P ψ ==> af_letter φ ν P af_letter ψ ν"
proof -
  { 
    fix φ 
    have "af_letter φ ν = subst φ (λχ. Some (af_letter χ ν))" 
      by (induction φ) auto 
  }
  thus P ψ ==> af_letter φ ν P af_letter ψ ν"
    and P ψ ==> af_letter φ ν P af_letter ψ ν"
    using subst_respects_ltl_prop_entailment by metis+
qed

lemma af_respectfulness':
  P ψ ==> af φ w P af ψ w"
  P ψ ==> af φ w P af ψ w"
  by (induction w arbitrary: φ ψ) (insert af_respectfulness, fastforce+)

lemma af_nested_propos:
  "nested_propos (af_letter φ ν) nested_propos φ"
  by (induction φ) auto

subsection @{term afG}

fun af_G_letter :: "'a ltl ==> 'a set ==> 'a ltl"
where
  "af_G_letter true ν = true"
"af_G_letter false ν = false"
"af_G_letter p(a) ν = (if a ν then true else false)"
"af_G_letter (np(a)) ν = (if a ν then true else false)"
"af_G_letter (φ and ψ) ν = (af_G_letter φ ν) and (af_G_letter ψ ν)"
"af_G_letter (φ or ψ) ν = (af_G_letter φ ν) or (af_G_letter ψ ν)"
"af_G_letter (X φ) ν = φ"
"af_G_letter (G φ) ν = (G φ)"
"af_G_letter (F φ) ν = (F φ) or (af_G_letter φ ν)"
"af_G_letter (φ U ψ) ν = (φ U ψ and (af_G_letter φ ν)) or (af_G_letter ψ ν)"

abbreviation afG :: "'a ltl ==> 'a set list ==> 'a ltl"
where
  "afG φ w (foldl af_G_letter φ w)"

lemma afG_decompose:
  "afG (φ and ψ) w = (afG φ w) and (afG ψ w)"
  "afG (φ or ψ) w = (afG φ w) or (afG ψ w)"
  by (induction w rule: rev_induct) simp_all

lemma afG_simps[simp]:
  "afG true w = true"
  "afG false w = false"
  "afG (G φ) w = G φ"
  "afG (X φ) (x#xs) = afG φ (xs)"
  by (induction w) simp_all

lemma afG_F:
  "afG (F φ) w = Or (F φ # map (afG φ) (suffixes w))"
proof (induction w)
  case (Cons x xs)
    have "afG (F φ) (x # xs) = afG (af_G_letter (F φ) x) xs"
      by simp
    also
    have " = (afG (F φ) xs) or (afG (af_G_letter (φ) x) xs)"
      unfolding afG_decompose[symmetric] by simp
    finally
    show ?case using Cons Or_append_syntactic by force
qed simp

lemma afG_U:
  "afG (φ U ψ) (x#xs) = (afG (φ U ψ) xs and afG φ (x#xs)) or afG ψ (x#xs)"
  by (simp add: afG_decompose)

lemma afG_subsequence_U:
  "afG (φ U ψ) (w [0 Suc n]) = (afG (φ U ψ) (w [1 Suc n]) and afG φ (w [0 Suc n])) or afG ψ (w [0 Suc n])"
proof -
  have "n. w [0 Suc n] = w 0 # w [1 Suc n]"
    using subsequence_append[of w 1by (simp add: subsequence_def upt_conv_Cons) 
  thus ?thesis
    using afG_U by metis
qed

lemma af_G_respectfulness:
  P ψ ==> af_G_letter φ ν P af_G_letter ψ ν"
  P ψ ==> af_G_letter φ ν P af_G_letter ψ ν"
proof -
  { 
    fix φ 
    have "af_G_letter φ ν = subst φ (λχ. Some (af_G_letter χ ν))" 
      by (induction φ) auto 
  }
  thus P ψ ==> af_G_letter φ ν P af_G_letter ψ ν"
    and P ψ ==> af_G_letter φ ν P af_G_letter ψ ν"
    using subst_respects_ltl_prop_entailment by metis+
qed

lemma af_G_respectfulness':
  P ψ ==> afG φ w P afG ψ w"
  P ψ ==> afG φ w P afG ψ w"
  by (induction w arbitrary: φ ψ) (insert af_G_respectfulness, fastforce+) 

lemma af_G_nested_propos:
  "nested_propos (af_G_letter φ ν) nested_propos φ"
  by (induction φ) auto

lemma af_G_letter_sat_core:
  "Only_G G ==> G P φ ==> G P af_G_letter φ ν"
  by (induction φ) (simp_all, blast+)

lemma afG_sat_core:
  "Only_G G ==> G P φ ==> G P afG φ w"
  using af_G_letter_sat_core by (induction w rule: rev_induct) (simp_all, blast)

lemma afG_sat_core_generalized:
  "Only_G G ==> i j ==> G P afG φ (w [0 i]) ==> G P afG φ (w [0 j])"
  by (metis afG_sat_core foldl_append subsequence_append le_add_diff_inverse)

lemma afG_evalG:
  "Only_G G ==> G P afG (evalG G φ) w G P evalG G (afG φ w)" 
  by (induction φ) (simp_all add: evalG_prop_entailment afG_decompose)

lemma afG_keeps_F_and_S:
  assumes "ys []"
  assumes "S P afG φ ys"
  shows "S P afG (F φ) (xs @ ys)"
proof -
  have "afG φ ys set (map (afG φ) (suffixes (xs @ ys)))"
    using assms(1unfolding suffixes_append map_append
    by (induction ys rule: List.list_nonempty_induct) auto
  thus ?thesis
    unfolding afG_F Or_prop_entailment using assms(2by force
qed

subsection G-Subformulae Simplification

lemma G_af_simp[simp]:
  "G (af φ w) = G φ"
proof -
  { fix φ ν have "G (af_letter φ ν) = G φ" by (induction φ) auto }
  thus ?thesis
    by (induction w arbitrary: φ rule: rev_induct) fastforce+
qed

lemma G_afG_simp[simp]:
  "G (afG φ w) = G φ"
proof -
  { fix φ ν have "G (af_G_letter φ ν) = G φ" by (induction φ) auto }
  thus ?thesis
    by (induction w arbitrary: φ rule: rev_induct) fastforce+
qed

subsection Relation between af and $af_G$

lemma af_G_letter_free_F:
  "G φ = {} ==> G (af_letter φ ν) = {}"
  "G φ = {} ==> G (af_G_letter φ ν) = {}"
  by (induction φ) auto

lemma af_G_free:
  assumes "G φ = {}"
  shows "af φ w = afG φ w"
  using assms
proof (induction w arbitrary: φ)
  case (Cons x xs)
    hence "af (af_letter φ x) xs = afG (af_letter φ x) xs"
      using af_G_letter_free_F[OF Cons.prems, THEN Cons.IH] by blast
    moreover
    have "af_letter φ x = af_G_letter φ x"
      using Cons.prems by (induction φ) auto
    ultimately
    show ?case 
      by simp
qed simp

lemma af_equals_afG_base_cases:
  "af true w = afG true w"
  "af false w = afG false w"
  "af p(a) w = afG p(a) w"
  "af (np(a)) w = afG (np(a)) w"
  by (auto intro: af_G_free)

lemma af_implies_afG:
  "S P af φ w ==> S P afG φ w"
proof (induction w arbitrary: S rule: rev_induct)
  case (snoc x xs)
    hence "S P af_letter (af φ xs) x"
      by simp
    hence "S P af_letter (afG φ xs) x"
      using af_respectfulness(1) snoc.IH unfolding ltl_prop_implies_def by blast
    moreover
    {
      fix φ 
      have "ν. S P af_letter φ ν ==> S P af_G_letter φ ν"
        by (induction φ) auto
    }
    ultimately
    show ?case
      using snoc.prems foldl_append by simp
qed simp

lemma af_implies_afG_2:
  "w af φ xs ==> w afG φ xs"
  by (metis ltl_prop_implication_implies_ltl_implication af_implies_afG ltl_prop_implies_def)

lemma afG_implies_af_evalG':
  assumes "S P evalG G (afG φ w)"
  assumes "ψ. G ψ G ==> S P G ψ"
  assumes "ψ i. G ψ G ==> i < length w ==> S P evalG G (afG ψ (drop i w))" 
  shows   "S P af φ w"
  using assms
proof (induction φ arbitrary: w)
  case (LTLGlobal φ)
    hence "G φ G"
      unfolding afG_simps evalG.simps by (cases "G φ G") simp+
    hence "S P G φ"
      using LTLGlobal by simp
    moreover
    {
      fix x
      assume "x set (map (af φ) (suffixes w))"
      then obtain w' where "x = af φ w'" and "w' set (suffixes w)"
        by auto
      then obtain i where "w' = drop i w" and "i < length w"
        by (auto simp add: suffixes_alt_def subsequence_def)
      hence "S P evalG G (afG φ w')"
        using LTLGlobal.prems G φ G by simp
      hence "S P x"
        using LTLGlobal(1)[OF S P evalG G (afG φ w')] LTLGlobal(3-4) drop_drop
        unfolding x = af φ w' w' = drop i w by simp
    }
    ultimately
    show ?case
      unfolding af_G evalG_And_map And_prop_entailment by simp
next
  case (LTLFinal φ)
    then obtain x where x_def: "x set (F φ # map (evalG G o afG φ) (suffixes w))" 
      and "S P x"
      unfolding Or_prop_entailment afG_F evalG_Or_map by force
    hence "y set (F φ # map (af φ) (suffixes w)). S P y"
    proof (cases "x F φ")
      case True
        then obtain w' where "S P evalG G (afG φ w')" and "w' set (suffixes w)"
          using x_def S P x by auto
        hence "ψ i. G ψ G ==> i < length w' ==> S P evalG G (afG ψ (drop i w'))"
          using LTLFinal.prems by (auto simp add: suffixes_alt_def subsequence_def)
        moreover
        have "ψ. G ψ G ==> S P evalG G (G ψ)"
          using LTLFinal by simp
        ultimately
        have "S P af φ w'"
          using LTLFinal.IH[OF S P evalG G (afG φ w')using assms(2by blast 
        thus ?thesis
          using w' set (suffixes w) by auto
    qed simp
    thus ?case
      unfolding af_F Or_prop_entailment evalG_Or_map by simp
next
  case (LTLNext φ)
    thus ?case
    proof (cases w)
      case (Cons x xs)
        {
          fix ψ i
          assume "G ψ G" and "Suc i < length (x#xs)"
          hence "S P evalG G (afG ψ (drop (Suc i) (x#xs)))"
            using LTLNext.prems unfolding Cons by blast
          hence "S P evalG G (afG ψ (drop i xs))"
            by simp
        }
        hence "ψ i. G ψ G ==> i < length xs ==> S P evalG G (afG ψ (drop i xs))"
          by simp
        thus ?thesis
          using LTLNext Cons by simp
    qed simp
next
  case (LTLUntil φ ψ)
    thus ?case
    proof (induction w)
      case (Cons x xs)
        {
          assume "S P evalG G (afG ψ (x # xs))"
          moreover
          have "ψ i. G ψ G ==> i < length (x#xs) ==> S P evalG G (afG ψ (drop i (x#xs)))"
            using Cons by simp
          ultimately
          have "S P af ψ (x # xs)"
            using Cons.prems by blast
          hence ?case
            unfolding af_U by simp
        }
        moreover
        {
          assume "S P evalG G (afG (φ U ψ) xs)" and "S P evalG G (afG φ (x # xs))"
          moreover
          have "ψ i. G ψ G ==> i < length (x#xs) ==> S P evalG G (afG ψ (drop i (x#xs)))"
            using Cons by simp
          ultimately
          have "S P af φ (x # xs)" and "S P af (φ U ψ) xs"  
            using Cons by (blast, force) 
          hence ?case
            unfolding af_U by simp
        }
        ultimately
        show ?case
          using Cons(4unfolding afG_U by auto
    qed simp
next
  case (LTLProp a)
    thus ?case
    proof (cases w)
      case (Cons x xs)
        thus ?thesis
          using LTLProp by (cases "a x") simp+
    qed simp
next
  case (LTLPropNeg a)
    thus ?case
    proof (cases w)
      case (Cons x xs)
        thus ?thesis
          using LTLPropNeg by (cases "a x") simp+
    qed simp
qed (unfold af_equals_afG_base_cases afG_decompose af_decompose, auto)

lemma afG_implies_af_evalG:
  assumes "S P evalG G (afG φ (w [0j]))"
  assumes "ψ. G ψ G ==> S P G ψ"
  assumes "ψ i. G ψ G ==> i j ==> S P evalG G (afG ψ (w [i j]))" 
  shows "S P af φ (w [0j])"
  using afG_implies_af_evalG'[OF assms(1-2), unfolded subsequence_length subsequence_drop] assms(3by force 

subsection Continuation

― af fulfills the infinite continuation w' of a word after skipping some finite prefix w.
 Corresponds to Lemma 7 in arXiv: 1402.3388v2


lemma af_ltl_continuation:
  "(w w') φ w' af φ w"
proof (induction w arbitrary: φ w')
  case (Cons x xs)
    have "((x # xs) w') 0 = x"
      unfolding conc_def nth_Cons_0 by simp
    moreover
    have "suffix 1 ((x # xs) w') = xs w'"
      unfolding suffix_def conc_def by fastforce
    moreover
    {
      fix φ :: "'a ltl"
      have "w. w φ suffix 1 w af_letter φ (w 0)"
        by (induction φ) ((unfold LTL_F_one_step_unfolding LTL_G_one_step_unfolding LTL_U_one_step_unfolding)?, auto)
    }
    ultimately
    have "((x # xs) w') φ (xs w') af_letter φ x"
      by metis
    also
    have " w' af φ (x#xs)"
      using Cons.IH by simp
    finally
    show ?case .
qed simp

lemma af_ltl_continuation_suffix:
  "w φ suffix i w af φ (w[0 i])"
  using af_ltl_continuation prefix_suffix subsequence_def by metis

lemma af_G_ltl_continuation:
  "ψ G φ. w' ψ = (w w') ψ ==> (w w') φ w' afG φ w"
proof (induction w arbitrary: w' φ)
  case (Cons x xs)
    {
      fix ψ :: "'a ltl" fix  w w' w'' 
      assume "w'' G ψ = ((w @ w') w'') G ψ"
      hence "w'' G ψ = (w' w'') G ψ" and "(w' w'') G ψ = ((w @ w') w'') G ψ"
        by (induction w' arbitrary: w) (metis LTL_suffix_G suffix_conc_length conc_conc)+
    }
    note G_stable = this
    have A: "ψG (afG φ [x]). w' ψ = (xs w') ψ"
      using G_stable(1)[of w' _ "[x]"] Cons.prems unfolding G_afG_simp conc_conc append.simps unfolding G_nested_propos_alt_def by blast
    have B: "ψG φ. ([x] xs w') ψ = (xs w') ψ"
      using G_stable(2)[of w' _ "[x]"] Cons.prems unfolding conc_conc append.simps unfolding G_nested_propos_alt_def by blast 
    hence "([x] xs w') φ = (xs w') afG φ [x]"
    proof (induction φ)
      case (LTLFinal φ)
        thus ?case
          unfolding LTL_F_one_step_unfolding
          by (auto simp add: suffix_conc_length[of "[x]", simplified])
    next
      case (LTLUntil φ ψ)
        thus ?case
          unfolding LTL_U_one_step_unfolding
          by (auto simp add: suffix_conc_length[of "[x]", simplified])
    qed (auto simp add: conc_fst[of 0 "[x]"] suffix_conc_length[of "[x]", simplified])
    also
    have "... = w' afG φ (x # xs)"
      using Cons.IH[of "afG φ [x]" w'] A by simp
    finally
    show ?case unfolding conc_conc 
      by simp
qed simp

lemma afG_ltl_continuation_suffix:
  "ψ G φ. w ψ = (suffix i w) ψ ==> w φ suffix i w afG φ (w [0 i])"  
  by (metis af_G_ltl_continuation[of φ "suffix i w"] prefix_suffix subsequence_def)

subsection Eager Unfolding @{term af} and @{term afG}

fun Unf :: "'a ltl ==> 'a ltl"
where
  "Unf (F φ) = F φ or Unf φ"
"Unf (G φ) = G φ and Unf φ" 
"Unf (φ U ψ) = (φ U ψ and Unf φ) or Unf ψ"
"Unf (φ and ψ) = Unf φ and Unf ψ"
"Unf (φ or ψ) = Unf φ or Unf ψ"
"Unf φ = φ"

fun UnfG :: "'a ltl ==> 'a ltl"
where
  "UnfG (F φ) = F φ or UnfG φ"
"UnfG (G φ) = G φ" 
"UnfG (φ U ψ) = (φ U ψ and UnfG φ) or UnfG ψ"
"UnfG (φ and ψ) = UnfG φ and UnfG ψ"
"UnfG (φ or ψ) = UnfG φ or UnfG ψ"
"UnfG φ = φ"

fun step :: "'a ltl ==> 'a set ==> 'a ltl"
where
  "step p(a) ν = (if a ν then true else false)"
"step (np(a)) ν = (if a ν then true else false)"
"step (X φ) ν = φ"
"step (φ and ψ) ν = step φ ν and step ψ ν"
"step (φ or ψ) ν = step φ ν or step ψ ν"
"step φ ν = φ"

fun af_letter_opt
where
  "af_letter_opt φ ν = Unf (step φ ν)"

fun af_G_letter_opt
where
  "af_G_letter_opt φ ν = UnfG (step φ ν)"

abbreviation af_opt :: "'a ltl ==> 'a set list ==> 'a ltl" (af\U)
where
  "af\<UU> φ w (foldl af_letter_opt φ w)"

abbreviation af_G_opt :: "'a ltl ==> 'a set list ==> 'a ltl" (afG\U)
where
  "afG\<UU> φ w (foldl af_G_letter_opt φ w)"

lemma af_letter_alt_def:
  "af_letter φ ν = step (Unf φ) ν"
  "af_G_letter φ ν = step (UnfG φ) ν"
  by (induction φ) simp_all

lemma af_to_af_opt:
  "Unf (af φ w) = af\<UU> (Unf φ) w"
  "UnfG (afG φ w) = afG\<UU> (UnfG φ) w"
  by (induction w arbitrary: φ)
     (simp_all add: af_letter_alt_def)

lemma af_equiv:
  "af φ (w @ [ν]) = step (af\<UU> (Unf φ) w) ν"
  using af_to_af_opt(1by (metis af_letter_alt_def(1) foldl_Cons foldl_Nil foldl_append)

lemma af_equiv':
  "af φ (w [0 Suc i]) = step (af\<UU> (Unf φ) (w [0 i])) (w i)"
  using af_equiv unfolding subsequence_def by auto

subsection Lifted Functions

lemma respectfulness:
  P ψ ==> af_letter_opt φ ν P af_letter_opt ψ ν"
  P ψ ==> af_letter_opt φ ν P af_letter_opt ψ ν"
  P ψ ==> af_G_letter_opt φ ν P af_G_letter_opt ψ ν"
  P ψ ==> af_G_letter_opt φ ν P af_G_letter_opt ψ ν"
  P ψ ==> step φ ν P step ψ ν"
  P ψ ==> step φ ν P step ψ ν"
  P ψ ==> Unf φ P Unf ψ"
  P ψ ==> Unf φ P Unf ψ"
  P ψ ==> UnfG φ P UnfG ψ"
  P ψ ==> UnfG φ P UnfG ψ"
  using decomposable_function_subst[of "λχ. af_letter_opt χ ν", simplified] af_letter_opt.simps
  using decomposable_function_subst[of "λχ. af_G_letter_opt χ ν", simplified] af_G_letter_opt.simps
  using decomposable_function_subst[of "λχ. step χ ν", simplified]
  using decomposable_function_subst[of Unf, simplified] 
  using decomposable_function_subst[of UnfG, simplified]
  using subst_respects_ltl_prop_entailment by metis+

lemma nested_propos:
  "nested_propos (step φ ν) nested_propos φ"
  "nested_propos (Unf φ) nested_propos φ"
  "nested_propos (UnfG φ) nested_propos φ"
  "nested_propos (af_letter_opt φ ν) nested_propos φ"
  "nested_propos (af_G_letter_opt φ ν) nested_propos φ"
  by (induction φ) auto

text Lift functions and bind to new names

interpretation af_abs: lift_ltl_transformer af_letter
  using lift_ltl_transformer_def af_respectfulness af_nested_propos by blast

definition af_letter_abs (af)
where
  "af af_abs.f_abs"

interpretation af_G_abs: lift_ltl_transformer af_G_letter
  using lift_ltl_transformer_def af_G_respectfulness af_G_nested_propos by blast

definition af_G_letter_abs (afG)
where
  "afG af_G_abs.f_abs"

interpretation af_abs_opt: lift_ltl_transformer af_letter_opt
  using lift_ltl_transformer_def respectfulness nested_propos by blast

definition af_letter_abs_opt (af\U)
where
  "af\<UU> af_abs_opt.f_abs"

interpretation af_G_abs_opt: lift_ltl_transformer af_G_letter_opt
  using lift_ltl_transformer_def respectfulness nested_propos by blast

definition af_G_letter_abs_opt (afG\U)
where
  "afG\<UU> af_G_abs_opt.f_abs"

lift_definition step_abs :: "'a ltlP ==> 'a set ==> 'a ltlP" (stepis step
  by (insert respectfulness)

lift_definition Unf_abs :: "'a ltlP ==> 'a ltlP" (Unfis Unf
  by (insert respectfulness)

lift_definition UnfG_abs :: "'a ltlP ==> 'a ltlP" (UnfGis UnfG
  by (insert respectfulness)

subsubsection Properties

lemma af_G_letter_opt_sat_core:
  "Only_G G ==> G P φ ==> G P af_G_letter_opt φ ν"
  by (induction φ) auto 

lemma af_G_letter_sat_core_lifted:
  "Only_G G ==> G P Rep φ ==> G P Rep (af_G_letter_abs φ ν)"
  by (metis af_G_letter_sat_core Quotient_ltl_prop_equiv_quotient[THEN Quotient_rep_abs] Quotient3_ltl_prop_equiv_quotient[THEN Quotient3_abs_rep] af_G_abs.f_abs.abs_eq ltl_prop_equiv_def af_G_letter_abs_def) 

lemma af_G_letter_opt_sat_core_lifted:
  "Only_G G ==> G P Rep φ ==> G P Rep (afG\<UU> φ ν)"
  unfolding af_G_letter_abs_opt_def
  by (metis af_G_letter_opt_sat_core Quotient_ltl_prop_equiv_quotient[THEN Quotient_rep_abs] Quotient3_ltl_prop_equiv_quotient[THEN Quotient3_abs_rep] af_G_abs_opt.f_abs.abs_eq ltl_prop_equiv_def) 

lemma af_G_letter_abs_opt_split:
  "UnfG (step Φ ν) = afG\<UU> Φ ν"
  unfolding af_G_letter_abs_opt_def step_abs_def comp_def af_G_abs_opt.f_abs_def 
  using map_fun_apply UnfG_abs.abs_eq af_G_letter_opt.simps by auto

lemma af_unfold: 
  "af = (λφ ν. step (Unf φ) ν)" 
  by (metis Unf_abs_def af_abs.f_abs.abs_eq af_letter_abs_def af_letter_alt_def(1) ltlP_abs_rep map_fun_apply step_abs.abs_eq)
 
lemma af_opt_unfold: 
  "af\<UU> = (λφ ν. Unf (step φ ν))"
  by (metis (no_types, lifting) Quotient3_abs_rep Quotient3_ltl_prop_equiv_quotient Unf_abs.abs_eq af_abs_opt.f_abs.abs_eq af_letter_abs_opt_def af_letter_opt.elims id_apply map_fun_apply  step_abs_def)

lemma af_abs_equiv:
  "foldl af ψ (xs @ [x]) = step (foldl af\<UU> (Unf ψ) xs) x" 
  unfolding af_unfold af_opt_unfold by (induction xs arbitrary: x ψ rule: rev_induct) simp+

lemma Rep_Abs_equiv: 
  "Rep (Abs φ) P φ"
  using Rep_Abs_prop_entailment unfolding ltl_prop_equiv_def by auto

lemma Rep_step: 
  "Rep (step Φ ν) P step (Rep Φ) ν"
  by (metis Quotient3_abs_rep Quotient3_ltl_prop_equiv_quotient ltl_prop_equiv_quotient.abs_eq_iff step_abs.abs_eq)

lemma step_G:
  "Only_G G ==> G P φ ==> G P step φ ν"
  by (induction φ) auto

lemma UnfG_G:
  "Only_G G ==> G P φ ==> G P UnfG φ"
  by (induction φ) auto

hide_fact (open) respectfulness nested_propos

end

Messung V0.5 in Prozent
C=91 H=97 G=93

¤ Dauer der Verarbeitung: 0.13 Sekunden  (vorverarbeitet am  2026-06-10) ¤

*© 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