[STATEMENT]
lemma length_dominant_term_ms_aux [simp]:
  "length (snd (dominant_term_ms_aux (xs :: ('a :: multiseries \<times> real) msllist))) =
     Suc (expansion_level TYPE('a))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. length (snd (dominant_term_ms_aux xs)) = Suc (expansion_level TYPE('a))
[PROOF STEP]
proof (cases xs rule: ms_aux_cases)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. xs = MSLNil \<Longrightarrow> length (snd (dominant_term_ms_aux xs)) = Suc (expansion_level TYPE('a))
 2. \<And>c e xs'. xs = MSLCons (c, e) xs' \<Longrightarrow> length (snd (dominant_term_ms_aux xs)) = Suc (expansion_level TYPE('a))
[PROOF STEP]
case (MSLCons C e xs')
[PROOF STATE]
proof (state)
this:
xs = MSLCons (C, e) xs'

goal (2 subgoals):
 1. xs = MSLNil \<Longrightarrow> length (snd (dominant_term_ms_aux xs)) = Suc (expansion_level TYPE('a))
 2. \<And>c e xs'. xs = MSLCons (c, e) xs' \<Longrightarrow> length (snd (dominant_term_ms_aux xs)) = Suc (expansion_level TYPE('a))
[PROOF STEP]
hence "length (snd (dominant_term_ms_aux xs)) = Suc (length (snd (dominant_term C)))"
[PROOF STATE]
proof (prove)
using this:
xs = MSLCons (C, e) xs'

goal (1 subgoal):
 1. length (snd (dominant_term_ms_aux xs)) = Suc (length (snd (dominant_term C)))
[PROOF STEP]
by (simp add: dominant_term_ms_aux_def split: prod.splits)
[PROOF STATE]
proof (state)
this:
length (snd (dominant_term_ms_aux xs)) = Suc (length (snd (dominant_term C)))

goal (2 subgoals):
 1. xs = MSLNil \<Longrightarrow> length (snd (dominant_term_ms_aux xs)) = Suc (expansion_level TYPE('a))
 2. \<And>c e xs'. xs = MSLCons (c, e) xs' \<Longrightarrow> length (snd (dominant_term_ms_aux xs)) = Suc (expansion_level TYPE('a))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
length (snd (dominant_term_ms_aux xs)) = Suc (length (snd (dominant_term C)))

goal (2 subgoals):
 1. xs = MSLNil \<Longrightarrow> length (snd (dominant_term_ms_aux xs)) = Suc (expansion_level TYPE('a))
 2. \<And>c e xs'. xs = MSLCons (c, e) xs' \<Longrightarrow> length (snd (dominant_term_ms_aux xs)) = Suc (expansion_level TYPE('a))
[PROOF STEP]
note length_dominant_term
[PROOF STATE]
proof (state)
this:
length (snd (dominant_term ?F)) = expansion_level TYPE(?'a)

goal (2 subgoals):
 1. xs = MSLNil \<Longrightarrow> length (snd (dominant_term_ms_aux xs)) = Suc (expansion_level TYPE('a))
 2. \<And>c e xs'. xs = MSLCons (c, e) xs' \<Longrightarrow> length (snd (dominant_term_ms_aux xs)) = Suc (expansion_level TYPE('a))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
length (snd (dominant_term_ms_aux xs)) = Suc (expansion_level TYPE('a))
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
length (snd (dominant_term_ms_aux xs)) = Suc (expansion_level TYPE('a))

goal (1 subgoal):
 1. length (snd (dominant_term_ms_aux xs)) = Suc (expansion_level TYPE('a))
[PROOF STEP]
.
[PROOF STATE]
proof (state)
this:
length (snd (dominant_term_ms_aux xs)) = Suc (expansion_level TYPE('a))

goal (1 subgoal):
 1. xs = MSLNil \<Longrightarrow> length (snd (dominant_term_ms_aux xs)) = Suc (expansion_level TYPE('a))
[PROOF STEP]
qed (simp_all add: dominant_term_ms_aux_def split: msllist.splits prod.splits)


[STATEMENT]
lemma comm_ring_1_ow_UNIV_axioms:
  "comm_ring_1_ow (UNIV::'a::comm_ring_1 set) (*) 1 (+) 0 (-) uminus"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. comm_ring_1_ow UNIV (*) (1::'a) (+) (0::'a) (-) uminus
[PROOF STEP]
by (fold comm_ring_1_ow) (rule comm_ring_1_class.comm_ring_1_axioms)


[STATEMENT]
lemma finite_minimal_antichain_path_weightp:
  "finite (minimal_antichain {x. path_weightp l1 l2 x})"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. finite (minimal_antichain {x. path_weightp l1 l2 x})
[PROOF STEP]
apply (rule finite_surj[OF finite_summaries, where f = sum_path_weights])
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. minimal_antichain {x. path_weightp l1 l2 x} \<subseteq> (\<lambda>xs. sum_weights (map (\<lambda>(s, l, t). l) xs)) ` {xs. distinct xs \<and> (\<forall>(l1, s, l2)\<in>set xs. s \<in>\<^sub>A weights l1 l2)}
[PROOF STEP]
apply (clarsimp simp: minimal_antichain_def image_iff dest!: path_weightp_ex_path)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>x xs. \<lbrakk>\<forall>y. path_weightp l1 l2 y \<longrightarrow> \<not> y < x; let s' = sum_weights (map (\<lambda>(s, l, t). l) xs) in s' \<le> x \<and> path_weightp l1 l2 s' \<and> distinct xs \<and> (\<forall>x\<in>set xs. case x of (l1, s, l2) \<Rightarrow> s \<in>\<^sub>A weights l1 l2)\<rbrakk> \<Longrightarrow> \<exists>xa. distinct xa \<and> (\<forall>x\<in>set xa. case x of (l1, s, l2) \<Rightarrow> s \<in>\<^sub>A weights l1 l2) \<and> x = sum_weights (map (\<lambda>(s, l, t). l) xa)
[PROOF STEP]
apply (fastforce simp: Let_def)
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done


[STATEMENT]
theorem Par_WbisT[simp]:
assumes "c1 \<approx>wT d1" and "c2 \<approx>wT d2"
shows "Par c1 c2 \<approx>wT Par d1 d2"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. c1 | c2 \<approx>wT d1 | d2
[PROOF STEP]
using assms thetaParWT_WbisT
[PROOF STATE]
proof (prove)
using this:
c1 \<approx>wT d1
c2 \<approx>wT d2
thetaParWT \<subseteq> WbisT

goal (1 subgoal):
 1. c1 | c2 \<approx>wT d1 | d2
[PROOF STEP]
unfolding thetaParWT_def
[PROOF STATE]
proof (prove)
using this:
c1 \<approx>wT d1
c2 \<approx>wT d2
{(c1 | c2, d1 | d2) |c1 c2 d1 d2. c1 \<approx>wT d1 \<and> c2 \<approx>wT d2} \<subseteq> WbisT

goal (1 subgoal):
 1. c1 | c2 \<approx>wT d1 | d2
[PROOF STEP]
by blast


[STATEMENT]
lemma succ_rtran_correct: "FiniteGraph.succ_rtran (list_graph_to_graph G) v = set (succ_rtran G v)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. FiniteGraph.succ_rtran (list_graph_to_graph G) v = set (FiniteListGraph.succ_rtran G v)
[PROOF STEP]
unfolding FiniteGraph.succ_rtran_def succ_rtran_def list_graph_to_graph_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. {e2. (v, e2) \<in> (edges \<lparr>nodes = set (nodesL G), edges = set (edgesL G)\<rparr>)\<^sup>*} = set (rtrancl_list_impl (edgesL G) [v])
[PROOF STEP]
by (simp add: rtrancl_list_impl)


[STATEMENT]
lemma finite_Inf_fun:
  "Inf (A::('a::finite \<Rightarrow> 'b::finite_lattice_complete) set) =
    Finite_Set.fold inf top A"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Inf A = Finite_Set.fold inf top A
[PROOF STEP]
by (metis Inf_fold_inf finite)