[STATEMENT]
lemma path_halving_2:
  "path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]] \<Longrightarrow> path_halving_invariant (p[y\<longmapsto>p[[p[[y]]]]]) x ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]) p0 \<and> ((p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]))\<down> < (p\<^sup>T\<^sup>\<star> * y)\<down>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]] \<Longrightarrow> path_halving_invariant (p[y\<longmapsto>p[[p[[y]]]]]) x ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]) p0 \<and> ((p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]))\<down> < (p\<^sup>T\<^sup>\<star> * y)\<down>
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]] \<Longrightarrow> path_halving_invariant (p[y\<longmapsto>p[[p[[y]]]]]) x ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]) p0 \<and> ((p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]))\<down> < (p\<^sup>T\<^sup>\<star> * y)\<down>
[PROOF STEP]
let ?py = "p[[y]]"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]] \<Longrightarrow> path_halving_invariant (p[y\<longmapsto>p[[p[[y]]]]]) x ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]) p0 \<and> ((p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]))\<down> < (p\<^sup>T\<^sup>\<star> * y)\<down>
[PROOF STEP]
let ?ppy = "p[[?py]]"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]] \<Longrightarrow> path_halving_invariant (p[y\<longmapsto>p[[p[[y]]]]]) x ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]) p0 \<and> ((p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]))\<down> < (p\<^sup>T\<^sup>\<star> * y)\<down>
[PROOF STEP]
let ?pyppy = "p[y\<longmapsto>?ppy]"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]] \<Longrightarrow> path_halving_invariant (p[y\<longmapsto>p[[p[[y]]]]]) x ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]) p0 \<and> ((p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]))\<down> < (p\<^sup>T\<^sup>\<star> * y)\<down>
[PROOF STEP]
let ?p2 = "p0 * p0"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]] \<Longrightarrow> path_halving_invariant (p[y\<longmapsto>p[[p[[y]]]]]) x ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]) p0 \<and> ((p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]))\<down> < (p\<^sup>T\<^sup>\<star> * y)\<down>
[PROOF STEP]
let ?p2t = "?p2\<^sup>T"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]] \<Longrightarrow> path_halving_invariant (p[y\<longmapsto>p[[p[[y]]]]]) x ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]) p0 \<and> ((p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]))\<down> < (p\<^sup>T\<^sup>\<star> * y)\<down>
[PROOF STEP]
let ?p2ts = "?p2t\<^sup>\<star>"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]] \<Longrightarrow> path_halving_invariant (p[y\<longmapsto>p[[p[[y]]]]]) x ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]) p0 \<and> ((p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]))\<down> < (p\<^sup>T\<^sup>\<star> * y)\<down>
[PROOF STEP]
let ?px = "?p2ts * x"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]] \<Longrightarrow> path_halving_invariant (p[y\<longmapsto>p[[p[[y]]]]]) x ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]) p0 \<and> ((p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]))\<down> < (p\<^sup>T\<^sup>\<star> * y)\<down>
[PROOF STEP]
let ?py2 = "-(p0\<^sup>T\<^sup>\<star> * y)"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]] \<Longrightarrow> path_halving_invariant (p[y\<longmapsto>p[[p[[y]]]]]) x ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]) p0 \<and> ((p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]))\<down> < (p\<^sup>T\<^sup>\<star> * y)\<down>
[PROOF STEP]
let ?pxy = "?px \<sqinter> ?py2"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]] \<Longrightarrow> path_halving_invariant (p[y\<longmapsto>p[[p[[y]]]]]) x ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]) p0 \<and> ((p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]))\<down> < (p\<^sup>T\<^sup>\<star> * y)\<down>
[PROOF STEP]
let ?p = "p0[?pxy\<longmapsto>?p2t]"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]] \<Longrightarrow> path_halving_invariant (p[y\<longmapsto>p[[p[[y]]]]]) x ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]) p0 \<and> ((p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]))\<down> < (p\<^sup>T\<^sup>\<star> * y)\<down>
[PROOF STEP]
let ?pty = "p0\<^sup>T * y"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]] \<Longrightarrow> path_halving_invariant (p[y\<longmapsto>p[[p[[y]]]]]) x ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]) p0 \<and> ((p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]))\<down> < (p\<^sup>T\<^sup>\<star> * y)\<down>
[PROOF STEP]
let ?pt2y = "p0\<^sup>T * p0\<^sup>T * y"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]] \<Longrightarrow> path_halving_invariant (p[y\<longmapsto>p[[p[[y]]]]]) x ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]) p0 \<and> ((p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]))\<down> < (p\<^sup>T\<^sup>\<star> * y)\<down>
[PROOF STEP]
let ?pt2sy = "p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]] \<Longrightarrow> path_halving_invariant (p[y\<longmapsto>p[[p[[y]]]]]) x ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]) p0 \<and> ((p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]))\<down> < (p\<^sup>T\<^sup>\<star> * y)\<down>
[PROOF STEP]
assume 1: "path_halving_invariant p x y p0 \<and> y \<noteq> ?py"
[PROOF STATE]
proof (state)
this:
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]

goal (1 subgoal):
 1. path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]] \<Longrightarrow> path_halving_invariant (p[y\<longmapsto>p[[p[[y]]]]]) x ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]) p0 \<and> ((p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]))\<down> < (p\<^sup>T\<^sup>\<star> * y)\<down>
[PROOF STEP]
have 2: "point ?pty \<and> point ?pt2y"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. point (p0[[y]]) \<and> point ((p0[[p0\<^sup>T]]) * y)
[PROOF STEP]
using 1
[PROOF STATE]
proof (prove)
using this:
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]

goal (1 subgoal):
 1. point (p0[[y]]) \<and> point ((p0[[p0\<^sup>T]]) * y)
[PROOF STEP]
by (smt (verit) comp_associative read_injective read_surjective path_halving_invariant_def)
[PROOF STATE]
proof (state)
this:
point (p0[[y]]) \<and> point ((p0[[p0\<^sup>T]]) * y)

goal (1 subgoal):
 1. path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]] \<Longrightarrow> path_halving_invariant (p[y\<longmapsto>p[[p[[y]]]]]) x ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]) p0 \<and> ((p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]))\<down> < (p\<^sup>T\<^sup>\<star> * y)\<down>
[PROOF STEP]
show "path_halving_invariant ?pyppy x (?pyppy[[y]]) p0 \<and> (?pyppy\<^sup>T\<^sup>\<star> * (?pyppy[[y]]))\<down> < (p\<^sup>T\<^sup>\<star> * y)\<down>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. path_halving_invariant (p[y\<longmapsto>p[[p[[y]]]]]) x ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]) p0 \<and> ((p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]))\<down> < (p\<^sup>T\<^sup>\<star> * y)\<down>
[PROOF STEP]
proof
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. path_halving_invariant (p[y\<longmapsto>p[[p[[y]]]]]) x ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]) p0
 2. ((p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]))\<down> < (p\<^sup>T\<^sup>\<star> * y)\<down>
[PROOF STEP]
show "path_halving_invariant ?pyppy x (?pyppy[[y]]) p0"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. path_halving_invariant (p[y\<longmapsto>p[[p[[y]]]]]) x ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]) p0
[PROOF STEP]
proof (unfold path_halving_invariant_def, intro conjI)
[PROOF STATE]
proof (state)
goal (10 subgoals):
 1. find_set_precondition (p[y\<longmapsto>p[[p[[y]]]]]) x
 2. vector ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])
 3. injective ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])
 4. surjective ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])
 5. (p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * x
 6. (p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x
 7. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
 8. coreflexive (p0[[p0]])
 9. times_top_class.total p0
 10. pd_kleene_allegory_class.acyclic (p0 - (1::'a))
[PROOF STEP]
show 3: "find_set_precondition ?pyppy x"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. find_set_precondition (p[y\<longmapsto>p[[p[[y]]]]]) x
[PROOF STEP]
proof (unfold find_set_precondition_def, intro conjI)
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. coreflexive ((p[y\<longmapsto>p[[p[[y]]]]])[[(p[y\<longmapsto>p[[p[[y]]]]])]])
 2. times_top_class.total (p[y\<longmapsto>p[[p[[y]]]]])
 3. pd_kleene_allegory_class.acyclic ((p[y\<longmapsto>p[[p[[y]]]]]) - (1::'a))
 4. vector x
 5. injective x
 6. surjective x
[PROOF STEP]
show "univalent ?pyppy"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. coreflexive ((p[y\<longmapsto>p[[p[[y]]]]])[[(p[y\<longmapsto>p[[p[[y]]]]])]])
[PROOF STEP]
using 1 find_set_precondition_def read_injective update_univalent path_halving_invariant_def
[PROOF STATE]
proof (prove)
using this:
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]
find_set_precondition ?p ?x \<equiv> ((coreflexive (?p[[?p]]) \<and> times_top_class.total ?p) \<and> pd_kleene_allegory_class.acyclic (?p - (1::'a))) \<and> point ?x
\<lbrakk>injective ?y; coreflexive (?x[[?x]])\<rbrakk> \<Longrightarrow> injective (?x[[?y]])
\<lbrakk>coreflexive (?x[[?x]]); vector ?y; injective ?z\<rbrakk> \<Longrightarrow> coreflexive ((?x[?y\<longmapsto>?z])[[(?x[?y\<longmapsto>?z])]])
path_halving_invariant ?p ?x ?y ?p0.0 \<equiv> find_set_precondition ?p ?x \<and> point ?y \<and> ?y \<le> ?p\<^sup>T\<^sup>\<star> * ?x \<and> ?y \<le> (?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x \<and> ?p0.0[(?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x - ?p0.0\<^sup>T\<^sup>\<star> * ?y\<longmapsto>(?p0.0 * ?p0.0)\<^sup>T] = ?p \<and> (coreflexive (?p0.0[[?p0.0]]) \<and> times_top_class.total ?p0.0) \<and> pd_kleene_allegory_class.acyclic (?p0.0 - (1::'a))

goal (1 subgoal):
 1. coreflexive ((p[y\<longmapsto>p[[p[[y]]]]])[[(p[y\<longmapsto>p[[p[[y]]]]])]])
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
coreflexive ((p[y\<longmapsto>p[[p[[y]]]]])[[(p[y\<longmapsto>p[[p[[y]]]]])]])

goal (5 subgoals):
 1. times_top_class.total (p[y\<longmapsto>p[[p[[y]]]]])
 2. pd_kleene_allegory_class.acyclic ((p[y\<longmapsto>p[[p[[y]]]]]) - (1::'a))
 3. vector x
 4. injective x
 5. surjective x
[PROOF STEP]
show "total ?pyppy"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. times_top_class.total (p[y\<longmapsto>p[[p[[y]]]]])
[PROOF STEP]
using 1 bijective_regular find_set_precondition_def read_surjective update_total path_halving_invariant_def
[PROOF STATE]
proof (prove)
using this:
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]
bijective ?x \<Longrightarrow> regular ?x
find_set_precondition ?p ?x \<equiv> ((coreflexive (?p[[?p]]) \<and> times_top_class.total ?p) \<and> pd_kleene_allegory_class.acyclic (?p - (1::'a))) \<and> point ?x
\<lbrakk>surjective ?y; times_top_class.total ?x\<rbrakk> \<Longrightarrow> surjective (?x[[?y]])
\<lbrakk>times_top_class.total ?x; vector ?y; regular ?y; surjective ?z\<rbrakk> \<Longrightarrow> times_top_class.total (?x[?y\<longmapsto>?z])
path_halving_invariant ?p ?x ?y ?p0.0 \<equiv> find_set_precondition ?p ?x \<and> point ?y \<and> ?y \<le> ?p\<^sup>T\<^sup>\<star> * ?x \<and> ?y \<le> (?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x \<and> ?p0.0[(?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x - ?p0.0\<^sup>T\<^sup>\<star> * ?y\<longmapsto>(?p0.0 * ?p0.0)\<^sup>T] = ?p \<and> (coreflexive (?p0.0[[?p0.0]]) \<and> times_top_class.total ?p0.0) \<and> pd_kleene_allegory_class.acyclic (?p0.0 - (1::'a))

goal (1 subgoal):
 1. times_top_class.total (p[y\<longmapsto>p[[p[[y]]]]])
[PROOF STEP]
by force
[PROOF STATE]
proof (state)
this:
times_top_class.total (p[y\<longmapsto>p[[p[[y]]]]])

goal (4 subgoals):
 1. pd_kleene_allegory_class.acyclic ((p[y\<longmapsto>p[[p[[y]]]]]) - (1::'a))
 2. vector x
 3. injective x
 4. surjective x
[PROOF STEP]
show "acyclic (?pyppy - 1)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. pd_kleene_allegory_class.acyclic ((p[y\<longmapsto>p[[p[[y]]]]]) - (1::'a))
[PROOF STEP]
apply (rule update_acyclic_3)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. pd_kleene_allegory_class.acyclic (p - (1::'a))
 2. point (p[[p[[y]]]])
 3. point y
 4. p[[p[[y]]]] \<le> p\<^sup>T\<^sup>\<star> * y
[PROOF STEP]
using 1 find_set_precondition_def path_halving_invariant_def
[PROOF STATE]
proof (prove)
using this:
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]
find_set_precondition ?p ?x \<equiv> ((coreflexive (?p[[?p]]) \<and> times_top_class.total ?p) \<and> pd_kleene_allegory_class.acyclic (?p - (1::'a))) \<and> point ?x
path_halving_invariant ?p ?x ?y ?p0.0 \<equiv> find_set_precondition ?p ?x \<and> point ?y \<and> ?y \<le> ?p\<^sup>T\<^sup>\<star> * ?x \<and> ?y \<le> (?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x \<and> ?p0.0[(?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x - ?p0.0\<^sup>T\<^sup>\<star> * ?y\<longmapsto>(?p0.0 * ?p0.0)\<^sup>T] = ?p \<and> (coreflexive (?p0.0[[?p0.0]]) \<and> times_top_class.total ?p0.0) \<and> pd_kleene_allegory_class.acyclic (?p0.0 - (1::'a))

goal (4 subgoals):
 1. pd_kleene_allegory_class.acyclic (p - (1::'a))
 2. point (p[[p[[y]]]])
 3. point y
 4. p[[p[[y]]]] \<le> p\<^sup>T\<^sup>\<star> * y
[PROOF STEP]
apply blast
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. point (p[[p[[y]]]])
 2. point y
 3. p[[p[[y]]]] \<le> p\<^sup>T\<^sup>\<star> * y
[PROOF STEP]
using 1 2 comp_associative path_halving_invariant_aux(2)
[PROOF STATE]
proof (prove)
using this:
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]
point (p0[[y]]) \<and> point ((p0[[p0\<^sup>T]]) * y)
?x * ?y * ?z = ?x * (?y * ?z)
path_halving_invariant ?p ?x ?y ?p0.0 \<Longrightarrow> ?p[[?p[[?y]]]] = ?p0.0[[?p0.0[[?y]]]]

goal (3 subgoals):
 1. point (p[[p[[y]]]])
 2. point y
 3. p[[p[[y]]]] \<le> p\<^sup>T\<^sup>\<star> * y
[PROOF STEP]
apply force
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. point y
 2. p[[p[[y]]]] \<le> p\<^sup>T\<^sup>\<star> * y
[PROOF STEP]
using 1 path_halving_invariant_def
[PROOF STATE]
proof (prove)
using this:
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]
path_halving_invariant ?p ?x ?y ?p0.0 \<equiv> find_set_precondition ?p ?x \<and> point ?y \<and> ?y \<le> ?p\<^sup>T\<^sup>\<star> * ?x \<and> ?y \<le> (?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x \<and> ?p0.0[(?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x - ?p0.0\<^sup>T\<^sup>\<star> * ?y\<longmapsto>(?p0.0 * ?p0.0)\<^sup>T] = ?p \<and> (coreflexive (?p0.0[[?p0.0]]) \<and> times_top_class.total ?p0.0) \<and> pd_kleene_allegory_class.acyclic (?p0.0 - (1::'a))

goal (2 subgoals):
 1. point y
 2. p[[p[[y]]]] \<le> p\<^sup>T\<^sup>\<star> * y
[PROOF STEP]
apply blast
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. p[[p[[y]]]] \<le> p\<^sup>T\<^sup>\<star> * y
[PROOF STEP]
by (metis inf.order_lesseq_imp mult_isotone star.circ_increasing star.circ_square mult_assoc)
[PROOF STATE]
proof (state)
this:
pd_kleene_allegory_class.acyclic ((p[y\<longmapsto>p[[p[[y]]]]]) - (1::'a))

goal (3 subgoals):
 1. vector x
 2. injective x
 3. surjective x
[PROOF STEP]
show "vector x" "injective x" "surjective x"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. vector x &&& injective x &&& surjective x
[PROOF STEP]
using 1 find_set_precondition_def path_halving_invariant_def
[PROOF STATE]
proof (prove)
using this:
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]
find_set_precondition ?p ?x \<equiv> ((coreflexive (?p[[?p]]) \<and> times_top_class.total ?p) \<and> pd_kleene_allegory_class.acyclic (?p - (1::'a))) \<and> point ?x
path_halving_invariant ?p ?x ?y ?p0.0 \<equiv> find_set_precondition ?p ?x \<and> point ?y \<and> ?y \<le> ?p\<^sup>T\<^sup>\<star> * ?x \<and> ?y \<le> (?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x \<and> ?p0.0[(?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x - ?p0.0\<^sup>T\<^sup>\<star> * ?y\<longmapsto>(?p0.0 * ?p0.0)\<^sup>T] = ?p \<and> (coreflexive (?p0.0[[?p0.0]]) \<and> times_top_class.total ?p0.0) \<and> pd_kleene_allegory_class.acyclic (?p0.0 - (1::'a))

goal (1 subgoal):
 1. vector x &&& injective x &&& surjective x
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
vector x
injective x
surjective x

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
find_set_precondition (p[y\<longmapsto>p[[p[[y]]]]]) x

goal (9 subgoals):
 1. vector ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])
 2. injective ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])
 3. surjective ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])
 4. (p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * x
 5. (p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x
 6. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
 7. coreflexive (p0[[p0]])
 8. times_top_class.total p0
 9. pd_kleene_allegory_class.acyclic (p0 - (1::'a))
[PROOF STEP]
show "vector (?pyppy[[y]])"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. vector ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])
[PROOF STEP]
using 1 comp_associative path_halving_invariant_def
[PROOF STATE]
proof (prove)
using this:
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]
?x * ?y * ?z = ?x * (?y * ?z)
path_halving_invariant ?p ?x ?y ?p0.0 \<equiv> find_set_precondition ?p ?x \<and> point ?y \<and> ?y \<le> ?p\<^sup>T\<^sup>\<star> * ?x \<and> ?y \<le> (?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x \<and> ?p0.0[(?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x - ?p0.0\<^sup>T\<^sup>\<star> * ?y\<longmapsto>(?p0.0 * ?p0.0)\<^sup>T] = ?p \<and> (coreflexive (?p0.0[[?p0.0]]) \<and> times_top_class.total ?p0.0) \<and> pd_kleene_allegory_class.acyclic (?p0.0 - (1::'a))

goal (1 subgoal):
 1. vector ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
vector ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])

goal (8 subgoals):
 1. injective ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])
 2. surjective ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])
 3. (p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * x
 4. (p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x
 5. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
 6. coreflexive (p0[[p0]])
 7. times_top_class.total p0
 8. pd_kleene_allegory_class.acyclic (p0 - (1::'a))
[PROOF STEP]
show "injective (?pyppy[[y]])"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. injective ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])
[PROOF STEP]
using 1 3 read_injective path_halving_invariant_def find_set_precondition_def
[PROOF STATE]
proof (prove)
using this:
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]
find_set_precondition (p[y\<longmapsto>p[[p[[y]]]]]) x
\<lbrakk>injective ?y; coreflexive (?x[[?x]])\<rbrakk> \<Longrightarrow> injective (?x[[?y]])
path_halving_invariant ?p ?x ?y ?p0.0 \<equiv> find_set_precondition ?p ?x \<and> point ?y \<and> ?y \<le> ?p\<^sup>T\<^sup>\<star> * ?x \<and> ?y \<le> (?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x \<and> ?p0.0[(?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x - ?p0.0\<^sup>T\<^sup>\<star> * ?y\<longmapsto>(?p0.0 * ?p0.0)\<^sup>T] = ?p \<and> (coreflexive (?p0.0[[?p0.0]]) \<and> times_top_class.total ?p0.0) \<and> pd_kleene_allegory_class.acyclic (?p0.0 - (1::'a))
find_set_precondition ?p ?x \<equiv> ((coreflexive (?p[[?p]]) \<and> times_top_class.total ?p) \<and> pd_kleene_allegory_class.acyclic (?p - (1::'a))) \<and> point ?x

goal (1 subgoal):
 1. injective ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
injective ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])

goal (7 subgoals):
 1. surjective ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])
 2. (p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * x
 3. (p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x
 4. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
 5. coreflexive (p0[[p0]])
 6. times_top_class.total p0
 7. pd_kleene_allegory_class.acyclic (p0 - (1::'a))
[PROOF STEP]
show "surjective (?pyppy[[y]])"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. surjective ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])
[PROOF STEP]
using 1 3 read_surjective path_halving_invariant_def find_set_precondition_def
[PROOF STATE]
proof (prove)
using this:
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]
find_set_precondition (p[y\<longmapsto>p[[p[[y]]]]]) x
\<lbrakk>surjective ?y; times_top_class.total ?x\<rbrakk> \<Longrightarrow> surjective (?x[[?y]])
path_halving_invariant ?p ?x ?y ?p0.0 \<equiv> find_set_precondition ?p ?x \<and> point ?y \<and> ?y \<le> ?p\<^sup>T\<^sup>\<star> * ?x \<and> ?y \<le> (?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x \<and> ?p0.0[(?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x - ?p0.0\<^sup>T\<^sup>\<star> * ?y\<longmapsto>(?p0.0 * ?p0.0)\<^sup>T] = ?p \<and> (coreflexive (?p0.0[[?p0.0]]) \<and> times_top_class.total ?p0.0) \<and> pd_kleene_allegory_class.acyclic (?p0.0 - (1::'a))
find_set_precondition ?p ?x \<equiv> ((coreflexive (?p[[?p]]) \<and> times_top_class.total ?p) \<and> pd_kleene_allegory_class.acyclic (?p - (1::'a))) \<and> point ?x

goal (1 subgoal):
 1. surjective ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
surjective ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])

goal (6 subgoals):
 1. (p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * x
 2. (p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x
 3. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
 4. coreflexive (p0[[p0]])
 5. times_top_class.total p0
 6. pd_kleene_allegory_class.acyclic (p0 - (1::'a))
[PROOF STEP]
show "?pyppy[[y]] \<le> ?pyppy\<^sup>T\<^sup>\<star> * x"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * x
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. (p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * x
[PROOF STEP]
have "y = (y \<sqinter> p\<^sup>T\<^sup>\<star>) * x"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. y = (y \<sqinter> p\<^sup>T\<^sup>\<star>) * x
[PROOF STEP]
using 1 le_iff_inf vector_inf_comp path_halving_invariant_def
[PROOF STATE]
proof (prove)
using this:
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]
(?x \<le> ?y) = (?x \<sqinter> ?y = ?x)
vector ?x \<Longrightarrow> (?x \<sqinter> ?y) * ?z = ?x \<sqinter> ?y * ?z
path_halving_invariant ?p ?x ?y ?p0.0 \<equiv> find_set_precondition ?p ?x \<and> point ?y \<and> ?y \<le> ?p\<^sup>T\<^sup>\<star> * ?x \<and> ?y \<le> (?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x \<and> ?p0.0[(?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x - ?p0.0\<^sup>T\<^sup>\<star> * ?y\<longmapsto>(?p0.0 * ?p0.0)\<^sup>T] = ?p \<and> (coreflexive (?p0.0[[?p0.0]]) \<and> times_top_class.total ?p0.0) \<and> pd_kleene_allegory_class.acyclic (?p0.0 - (1::'a))

goal (1 subgoal):
 1. y = (y \<sqinter> p\<^sup>T\<^sup>\<star>) * x
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
y = (y \<sqinter> p\<^sup>T\<^sup>\<star>) * x

goal (1 subgoal):
 1. (p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * x
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
y = (y \<sqinter> p\<^sup>T\<^sup>\<star>) * x

goal (1 subgoal):
 1. (p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * x
[PROOF STEP]
have "... = ((y \<sqinter> 1) \<squnion> (y \<sqinter> (p\<^sup>T \<sqinter> -y\<^sup>T)\<^sup>+)) * x"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (y \<sqinter> p\<^sup>T\<^sup>\<star>) * x = (y \<sqinter> (1::'a) \<squnion> y \<sqinter> (p\<^sup>T - y\<^sup>T)\<^sup>+) * x
[PROOF STEP]
using 1 omit_redundant_points_3 path_halving_invariant_def
[PROOF STATE]
proof (prove)
using this:
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]
point ?p \<Longrightarrow> ?p \<sqinter> ?x\<^sup>\<star> = ?p \<sqinter> (1::'a) \<squnion> ?p \<sqinter> (?x - ?p\<^sup>T)\<^sup>+
path_halving_invariant ?p ?x ?y ?p0.0 \<equiv> find_set_precondition ?p ?x \<and> point ?y \<and> ?y \<le> ?p\<^sup>T\<^sup>\<star> * ?x \<and> ?y \<le> (?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x \<and> ?p0.0[(?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x - ?p0.0\<^sup>T\<^sup>\<star> * ?y\<longmapsto>(?p0.0 * ?p0.0)\<^sup>T] = ?p \<and> (coreflexive (?p0.0[[?p0.0]]) \<and> times_top_class.total ?p0.0) \<and> pd_kleene_allegory_class.acyclic (?p0.0 - (1::'a))

goal (1 subgoal):
 1. (y \<sqinter> p\<^sup>T\<^sup>\<star>) * x = (y \<sqinter> (1::'a) \<squnion> y \<sqinter> (p\<^sup>T - y\<^sup>T)\<^sup>+) * x
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
(y \<sqinter> p\<^sup>T\<^sup>\<star>) * x = (y \<sqinter> (1::'a) \<squnion> y \<sqinter> (p\<^sup>T - y\<^sup>T)\<^sup>+) * x

goal (1 subgoal):
 1. (p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * x
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
(y \<sqinter> p\<^sup>T\<^sup>\<star>) * x = (y \<sqinter> (1::'a) \<squnion> y \<sqinter> (p\<^sup>T - y\<^sup>T)\<^sup>+) * x

goal (1 subgoal):
 1. (p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * x
[PROOF STEP]
have "... \<le> (1 \<squnion> (y \<sqinter> (p\<^sup>T \<sqinter> -y\<^sup>T)\<^sup>+)) * x"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (y \<sqinter> (1::'a) \<squnion> y \<sqinter> (p\<^sup>T - y\<^sup>T)\<^sup>+) * x \<le> ((1::'a) \<squnion> y \<sqinter> (p\<^sup>T - y\<^sup>T)\<^sup>+) * x
[PROOF STEP]
using 1 sup_inf_distrib2 vector_inf_comp path_halving_invariant_def
[PROOF STATE]
proof (prove)
using this:
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]
?y \<sqinter> ?z \<squnion> ?x = (?y \<squnion> ?x) \<sqinter> (?z \<squnion> ?x)
vector ?x \<Longrightarrow> (?x \<sqinter> ?y) * ?z = ?x \<sqinter> ?y * ?z
path_halving_invariant ?p ?x ?y ?p0.0 \<equiv> find_set_precondition ?p ?x \<and> point ?y \<and> ?y \<le> ?p\<^sup>T\<^sup>\<star> * ?x \<and> ?y \<le> (?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x \<and> ?p0.0[(?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x - ?p0.0\<^sup>T\<^sup>\<star> * ?y\<longmapsto>(?p0.0 * ?p0.0)\<^sup>T] = ?p \<and> (coreflexive (?p0.0[[?p0.0]]) \<and> times_top_class.total ?p0.0) \<and> pd_kleene_allegory_class.acyclic (?p0.0 - (1::'a))

goal (1 subgoal):
 1. (y \<sqinter> (1::'a) \<squnion> y \<sqinter> (p\<^sup>T - y\<^sup>T)\<^sup>+) * x \<le> ((1::'a) \<squnion> y \<sqinter> (p\<^sup>T - y\<^sup>T)\<^sup>+) * x
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
(y \<sqinter> (1::'a) \<squnion> y \<sqinter> (p\<^sup>T - y\<^sup>T)\<^sup>+) * x \<le> ((1::'a) \<squnion> y \<sqinter> (p\<^sup>T - y\<^sup>T)\<^sup>+) * x

goal (1 subgoal):
 1. (p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * x
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
(y \<sqinter> (1::'a) \<squnion> y \<sqinter> (p\<^sup>T - y\<^sup>T)\<^sup>+) * x \<le> ((1::'a) \<squnion> y \<sqinter> (p\<^sup>T - y\<^sup>T)\<^sup>+) * x

goal (1 subgoal):
 1. (p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * x
[PROOF STEP]
have "... \<le> (1 \<squnion> (p\<^sup>T \<sqinter> -y\<^sup>T)\<^sup>+) * x"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. ((1::'a) \<squnion> y \<sqinter> (p\<^sup>T - y\<^sup>T)\<^sup>+) * x \<le> ((1::'a) \<squnion> (p\<^sup>T - y\<^sup>T)\<^sup>+) * x
[PROOF STEP]
by (simp add: inf.coboundedI2 mult_left_isotone)
[PROOF STATE]
proof (state)
this:
((1::'a) \<squnion> y \<sqinter> (p\<^sup>T - y\<^sup>T)\<^sup>+) * x \<le> ((1::'a) \<squnion> (p\<^sup>T - y\<^sup>T)\<^sup>+) * x

goal (1 subgoal):
 1. (p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * x
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
((1::'a) \<squnion> y \<sqinter> (p\<^sup>T - y\<^sup>T)\<^sup>+) * x \<le> ((1::'a) \<squnion> (p\<^sup>T - y\<^sup>T)\<^sup>+) * x

goal (1 subgoal):
 1. (p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * x
[PROOF STEP]
have "... = (p \<sqinter> -y)\<^sup>T\<^sup>\<star> * x"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. ((1::'a) \<squnion> (p\<^sup>T - y\<^sup>T)\<^sup>+) * x = (p - y)\<^sup>T\<^sup>\<star> * x
[PROOF STEP]
by (simp add: conv_complement conv_dist_inf star_left_unfold_equal)
[PROOF STATE]
proof (state)
this:
((1::'a) \<squnion> (p\<^sup>T - y\<^sup>T)\<^sup>+) * x = (p - y)\<^sup>T\<^sup>\<star> * x

goal (1 subgoal):
 1. (p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * x
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
((1::'a) \<squnion> (p\<^sup>T - y\<^sup>T)\<^sup>+) * x = (p - y)\<^sup>T\<^sup>\<star> * x

goal (1 subgoal):
 1. (p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * x
[PROOF STEP]
have "... \<le> ?pyppy\<^sup>T\<^sup>\<star> * x"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (p - y)\<^sup>T\<^sup>\<star> * x \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * x
[PROOF STEP]
by (simp add: conv_isotone inf.sup_monoid.add_commute mult_left_isotone star_isotone)
[PROOF STATE]
proof (state)
this:
(p - y)\<^sup>T\<^sup>\<star> * x \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * x

goal (1 subgoal):
 1. (p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * x
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
y \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * x
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
y \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * x

goal (1 subgoal):
 1. (p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * x
[PROOF STEP]
by (metis mult_isotone star.circ_increasing star.circ_transitive_equal mult_assoc)
[PROOF STATE]
proof (state)
this:
(p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * x

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
(p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * x

goal (5 subgoals):
 1. (p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x
 2. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
 3. coreflexive (p0[[p0]])
 4. times_top_class.total p0
 5. pd_kleene_allegory_class.acyclic (p0 - (1::'a))
[PROOF STEP]
show "?pyppy[[y]] \<le> ?px"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. (p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x
[PROOF STEP]
have "?pyppy[[y]] = p[[?py]]"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (p[y\<longmapsto>p[[p[[y]]]]])[[y]] = p[[p[[y]]]]
[PROOF STEP]
using 1 put_get vector_mult_closed path_halving_invariant_def
[PROOF STATE]
proof (prove)
using this:
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]
\<lbrakk>vector ?y; surjective ?y; vector ?z\<rbrakk> \<Longrightarrow> (?x[?y\<longmapsto>?z])[[?y]] = ?z
vector ?y \<Longrightarrow> vector (?x * ?y)
path_halving_invariant ?p ?x ?y ?p0.0 \<equiv> find_set_precondition ?p ?x \<and> point ?y \<and> ?y \<le> ?p\<^sup>T\<^sup>\<star> * ?x \<and> ?y \<le> (?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x \<and> ?p0.0[(?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x - ?p0.0\<^sup>T\<^sup>\<star> * ?y\<longmapsto>(?p0.0 * ?p0.0)\<^sup>T] = ?p \<and> (coreflexive (?p0.0[[?p0.0]]) \<and> times_top_class.total ?p0.0) \<and> pd_kleene_allegory_class.acyclic (?p0.0 - (1::'a))

goal (1 subgoal):
 1. (p[y\<longmapsto>p[[p[[y]]]]])[[y]] = p[[p[[y]]]]
[PROOF STEP]
by force
[PROOF STATE]
proof (state)
this:
(p[y\<longmapsto>p[[p[[y]]]]])[[y]] = p[[p[[y]]]]

goal (1 subgoal):
 1. (p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
(p[y\<longmapsto>p[[p[[y]]]]])[[y]] = p[[p[[y]]]]

goal (1 subgoal):
 1. (p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x
[PROOF STEP]
have "... = p0[[p0[[y]]]]"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. p[[p[[y]]]] = p0[[p0[[y]]]]
[PROOF STEP]
using 1 path_halving_invariant_aux(2)
[PROOF STATE]
proof (prove)
using this:
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]
path_halving_invariant ?p ?x ?y ?p0.0 \<Longrightarrow> ?p[[?p[[?y]]]] = ?p0.0[[?p0.0[[?y]]]]

goal (1 subgoal):
 1. p[[p[[y]]]] = p0[[p0[[y]]]]
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
p[[p[[y]]]] = p0[[p0[[y]]]]

goal (1 subgoal):
 1. (p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
p[[p[[y]]]] = p0[[p0[[y]]]]

goal (1 subgoal):
 1. (p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x
[PROOF STEP]
have "... = ?p2t * y"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. p0[[p0[[y]]]] = p0 * p0[[y]]
[PROOF STEP]
by (simp add: conv_dist_comp mult_assoc)
[PROOF STATE]
proof (state)
this:
p0[[p0[[y]]]] = p0 * p0[[y]]

goal (1 subgoal):
 1. (p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
p0[[p0[[y]]]] = p0 * p0[[y]]

goal (1 subgoal):
 1. (p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x
[PROOF STEP]
have "... \<le> ?p2t * ?px"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. p0 * p0[[y]] \<le> p0 * p0[[(p0 * p0)\<^sup>T\<^sup>\<star> * x]]
[PROOF STEP]
using 1 path_halving_invariant_def comp_associative mult_right_isotone
[PROOF STATE]
proof (prove)
using this:
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]
path_halving_invariant ?p ?x ?y ?p0.0 \<equiv> find_set_precondition ?p ?x \<and> point ?y \<and> ?y \<le> ?p\<^sup>T\<^sup>\<star> * ?x \<and> ?y \<le> (?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x \<and> ?p0.0[(?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x - ?p0.0\<^sup>T\<^sup>\<star> * ?y\<longmapsto>(?p0.0 * ?p0.0)\<^sup>T] = ?p \<and> (coreflexive (?p0.0[[?p0.0]]) \<and> times_top_class.total ?p0.0) \<and> pd_kleene_allegory_class.acyclic (?p0.0 - (1::'a))
?x * ?y * ?z = ?x * (?y * ?z)
?x \<le> ?y \<Longrightarrow> ?z * ?x \<le> ?z * ?y

goal (1 subgoal):
 1. p0 * p0[[y]] \<le> p0 * p0[[(p0 * p0)\<^sup>T\<^sup>\<star> * x]]
[PROOF STEP]
by force
[PROOF STATE]
proof (state)
this:
p0 * p0[[y]] \<le> p0 * p0[[(p0 * p0)\<^sup>T\<^sup>\<star> * x]]

goal (1 subgoal):
 1. (p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
p0 * p0[[y]] \<le> p0 * p0[[(p0 * p0)\<^sup>T\<^sup>\<star> * x]]

goal (1 subgoal):
 1. (p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x
[PROOF STEP]
have "... \<le> ?px"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. p0 * p0[[(p0 * p0)\<^sup>T\<^sup>\<star> * x]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x
[PROOF STEP]
by (metis comp_associative mult_left_isotone star.left_plus_below_circ)
[PROOF STATE]
proof (state)
this:
p0 * p0[[(p0 * p0)\<^sup>T\<^sup>\<star> * x]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x

goal (1 subgoal):
 1. (p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
(p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
(p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x

goal (1 subgoal):
 1. (p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x
[PROOF STEP]
.
[PROOF STATE]
proof (state)
this:
(p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
(p[y\<longmapsto>p[[p[[y]]]]])[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x

goal (4 subgoals):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
 2. coreflexive (p0[[p0]])
 3. times_top_class.total p0
 4. pd_kleene_allegory_class.acyclic (p0 - (1::'a))
[PROOF STEP]
show "p0[?px - p0\<^sup>T\<^sup>\<star> * (?pyppy[[y]])\<longmapsto>?p2t] = ?pyppy"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
have "?px \<sqinter> ?pty = ?px \<sqinter> p0\<^sup>T * ?px \<sqinter> ?pty"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (p0 * p0)\<^sup>T\<^sup>\<star> * x \<sqinter> (p0[[y]]) = (p0 * p0)\<^sup>T\<^sup>\<star> * x \<sqinter> (p0[[(p0 * p0)\<^sup>T\<^sup>\<star> * x]]) \<sqinter> (p0[[y]])
[PROOF STEP]
using 1 inf.absorb2 inf.sup_monoid.add_assoc mult_right_isotone path_halving_invariant_def
[PROOF STATE]
proof (prove)
using this:
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]
?b \<le> ?a \<Longrightarrow> ?a \<sqinter> ?b = ?b
?a \<sqinter> ?b \<sqinter> ?c = ?a \<sqinter> (?b \<sqinter> ?c)
?x \<le> ?y \<Longrightarrow> ?z * ?x \<le> ?z * ?y
path_halving_invariant ?p ?x ?y ?p0.0 \<equiv> find_set_precondition ?p ?x \<and> point ?y \<and> ?y \<le> ?p\<^sup>T\<^sup>\<star> * ?x \<and> ?y \<le> (?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x \<and> ?p0.0[(?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x - ?p0.0\<^sup>T\<^sup>\<star> * ?y\<longmapsto>(?p0.0 * ?p0.0)\<^sup>T] = ?p \<and> (coreflexive (?p0.0[[?p0.0]]) \<and> times_top_class.total ?p0.0) \<and> pd_kleene_allegory_class.acyclic (?p0.0 - (1::'a))

goal (1 subgoal):
 1. (p0 * p0)\<^sup>T\<^sup>\<star> * x \<sqinter> (p0[[y]]) = (p0 * p0)\<^sup>T\<^sup>\<star> * x \<sqinter> (p0[[(p0 * p0)\<^sup>T\<^sup>\<star> * x]]) \<sqinter> (p0[[y]])
[PROOF STEP]
by force
[PROOF STATE]
proof (state)
this:
(p0 * p0)\<^sup>T\<^sup>\<star> * x \<sqinter> (p0[[y]]) = (p0 * p0)\<^sup>T\<^sup>\<star> * x \<sqinter> (p0[[(p0 * p0)\<^sup>T\<^sup>\<star> * x]]) \<sqinter> (p0[[y]])

goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
(p0 * p0)\<^sup>T\<^sup>\<star> * x \<sqinter> (p0[[y]]) = (p0 * p0)\<^sup>T\<^sup>\<star> * x \<sqinter> (p0[[(p0 * p0)\<^sup>T\<^sup>\<star> * x]]) \<sqinter> (p0[[y]])

goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
have "... = (?p2ts \<sqinter> p0\<^sup>T * ?p2ts) * x \<sqinter> ?pty"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (p0 * p0)\<^sup>T\<^sup>\<star> * x \<sqinter> (p0[[(p0 * p0)\<^sup>T\<^sup>\<star> * x]]) \<sqinter> (p0[[y]]) = ((p0 * p0)\<^sup>T\<^sup>\<star> \<sqinter> (p0[[(p0 * p0)\<^sup>T\<^sup>\<star>]])) * x \<sqinter> (p0[[y]])
[PROOF STEP]
using 3 comp_associative find_set_precondition_def injective_comp_right_dist_inf
[PROOF STATE]
proof (prove)
using this:
find_set_precondition (p[y\<longmapsto>p[[p[[y]]]]]) x
?x * ?y * ?z = ?x * (?y * ?z)
find_set_precondition ?p ?x \<equiv> ((coreflexive (?p[[?p]]) \<and> times_top_class.total ?p) \<and> pd_kleene_allegory_class.acyclic (?p - (1::'a))) \<and> point ?x
injective ?z \<Longrightarrow> (?x \<sqinter> ?y) * ?z = ?x * ?z \<sqinter> ?y * ?z

goal (1 subgoal):
 1. (p0 * p0)\<^sup>T\<^sup>\<star> * x \<sqinter> (p0[[(p0 * p0)\<^sup>T\<^sup>\<star> * x]]) \<sqinter> (p0[[y]]) = ((p0 * p0)\<^sup>T\<^sup>\<star> \<sqinter> (p0[[(p0 * p0)\<^sup>T\<^sup>\<star>]])) * x \<sqinter> (p0[[y]])
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
(p0 * p0)\<^sup>T\<^sup>\<star> * x \<sqinter> (p0[[(p0 * p0)\<^sup>T\<^sup>\<star> * x]]) \<sqinter> (p0[[y]]) = ((p0 * p0)\<^sup>T\<^sup>\<star> \<sqinter> (p0[[(p0 * p0)\<^sup>T\<^sup>\<star>]])) * x \<sqinter> (p0[[y]])

goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
(p0 * p0)\<^sup>T\<^sup>\<star> * x \<sqinter> (p0[[(p0 * p0)\<^sup>T\<^sup>\<star> * x]]) \<sqinter> (p0[[y]]) = ((p0 * p0)\<^sup>T\<^sup>\<star> \<sqinter> (p0[[(p0 * p0)\<^sup>T\<^sup>\<star>]])) * x \<sqinter> (p0[[y]])

goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
have "... = (1 \<sqinter> p0) * (?p2ts \<sqinter> p0\<^sup>T * ?p2ts) * x \<sqinter> ?pty"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. ((p0 * p0)\<^sup>T\<^sup>\<star> \<sqinter> (p0[[(p0 * p0)\<^sup>T\<^sup>\<star>]])) * x \<sqinter> (p0[[y]]) = ((1::'a) \<sqinter> p0) * ((p0 * p0)\<^sup>T\<^sup>\<star> \<sqinter> (p0[[(p0 * p0)\<^sup>T\<^sup>\<star>]])) * x \<sqinter> (p0[[y]])
[PROOF STEP]
using 1 even_odd_root mapping_regular path_halving_invariant_def
[PROOF STATE]
proof (prove)
using this:
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]
\<lbrakk>pd_kleene_allegory_class.acyclic (?x - (1::'a)); regular ?x; coreflexive (?x[[?x]])\<rbrakk> \<Longrightarrow> (?x * ?x)\<^sup>T\<^sup>\<star> \<sqinter> (?x[[(?x * ?x)\<^sup>T\<^sup>\<star>]]) = ((1::'a) \<sqinter> ?x) * ((?x * ?x)\<^sup>T\<^sup>\<star> \<sqinter> (?x[[(?x * ?x)\<^sup>T\<^sup>\<star>]]))
coreflexive (?x[[?x]]) \<and> times_top_class.total ?x \<Longrightarrow> regular ?x
path_halving_invariant ?p ?x ?y ?p0.0 \<equiv> find_set_precondition ?p ?x \<and> point ?y \<and> ?y \<le> ?p\<^sup>T\<^sup>\<star> * ?x \<and> ?y \<le> (?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x \<and> ?p0.0[(?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x - ?p0.0\<^sup>T\<^sup>\<star> * ?y\<longmapsto>(?p0.0 * ?p0.0)\<^sup>T] = ?p \<and> (coreflexive (?p0.0[[?p0.0]]) \<and> times_top_class.total ?p0.0) \<and> pd_kleene_allegory_class.acyclic (?p0.0 - (1::'a))

goal (1 subgoal):
 1. ((p0 * p0)\<^sup>T\<^sup>\<star> \<sqinter> (p0[[(p0 * p0)\<^sup>T\<^sup>\<star>]])) * x \<sqinter> (p0[[y]]) = ((1::'a) \<sqinter> p0) * ((p0 * p0)\<^sup>T\<^sup>\<star> \<sqinter> (p0[[(p0 * p0)\<^sup>T\<^sup>\<star>]])) * x \<sqinter> (p0[[y]])
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
((p0 * p0)\<^sup>T\<^sup>\<star> \<sqinter> (p0[[(p0 * p0)\<^sup>T\<^sup>\<star>]])) * x \<sqinter> (p0[[y]]) = ((1::'a) \<sqinter> p0) * ((p0 * p0)\<^sup>T\<^sup>\<star> \<sqinter> (p0[[(p0 * p0)\<^sup>T\<^sup>\<star>]])) * x \<sqinter> (p0[[y]])

goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
((p0 * p0)\<^sup>T\<^sup>\<star> \<sqinter> (p0[[(p0 * p0)\<^sup>T\<^sup>\<star>]])) * x \<sqinter> (p0[[y]]) = ((1::'a) \<sqinter> p0) * ((p0 * p0)\<^sup>T\<^sup>\<star> \<sqinter> (p0[[(p0 * p0)\<^sup>T\<^sup>\<star>]])) * x \<sqinter> (p0[[y]])

goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
have "... \<le> (1 \<sqinter> p0) * top \<sqinter> ?pty"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. ((1::'a) \<sqinter> p0) * ((p0 * p0)\<^sup>T\<^sup>\<star> \<sqinter> (p0[[(p0 * p0)\<^sup>T\<^sup>\<star>]])) * x \<sqinter> (p0[[y]]) \<le> ((1::'a) \<sqinter> p0) * top \<sqinter> (p0[[y]])
[PROOF STEP]
by (metis comp_associative comp_inf.mult_left_isotone comp_inf.star.circ_sub_dist_2 comp_left_subdist_inf dual_order.trans mult_right_isotone)
[PROOF STATE]
proof (state)
this:
((1::'a) \<sqinter> p0) * ((p0 * p0)\<^sup>T\<^sup>\<star> \<sqinter> (p0[[(p0 * p0)\<^sup>T\<^sup>\<star>]])) * x \<sqinter> (p0[[y]]) \<le> ((1::'a) \<sqinter> p0) * top \<sqinter> (p0[[y]])

goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
((1::'a) \<sqinter> p0) * ((p0 * p0)\<^sup>T\<^sup>\<star> \<sqinter> (p0[[(p0 * p0)\<^sup>T\<^sup>\<star>]])) * x \<sqinter> (p0[[y]]) \<le> ((1::'a) \<sqinter> p0) * top \<sqinter> (p0[[y]])

goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
have 4: "... = (1 \<sqinter> p0\<^sup>T) * ?pty"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. ((1::'a) \<sqinter> p0) * top \<sqinter> (p0[[y]]) = ((1::'a) \<sqinter> p0\<^sup>T) * (p0[[y]])
[PROOF STEP]
using coreflexive_comp_top_inf one_inf_conv
[PROOF STATE]
proof (prove)
using this:
coreflexive ?x \<Longrightarrow> ?x * top \<sqinter> ?y = ?x * ?y
(1::'a) \<sqinter> ?x = (1::'a) \<sqinter> ?x\<^sup>T

goal (1 subgoal):
 1. ((1::'a) \<sqinter> p0) * top \<sqinter> (p0[[y]]) = ((1::'a) \<sqinter> p0\<^sup>T) * (p0[[y]])
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
((1::'a) \<sqinter> p0) * top \<sqinter> (p0[[y]]) = ((1::'a) \<sqinter> p0\<^sup>T) * (p0[[y]])

goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
((1::'a) \<sqinter> p0) * top \<sqinter> (p0[[y]]) = ((1::'a) \<sqinter> p0\<^sup>T) * (p0[[y]])

goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
have "... \<le> ?pt2y"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. ((1::'a) \<sqinter> p0\<^sup>T) * (p0[[y]]) \<le> (p0[[p0\<^sup>T]]) * y
[PROOF STEP]
by (simp add: mult_assoc mult_left_isotone)
[PROOF STATE]
proof (state)
this:
((1::'a) \<sqinter> p0\<^sup>T) * (p0[[y]]) \<le> (p0[[p0\<^sup>T]]) * y

goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
(p0 * p0)\<^sup>T\<^sup>\<star> * x \<sqinter> (p0[[y]]) \<le> (p0[[p0\<^sup>T]]) * y
[PROOF STEP]
have 5: "?px \<sqinter> ?pty \<le> ?pt2y"
[PROOF STATE]
proof (prove)
using this:
(p0 * p0)\<^sup>T\<^sup>\<star> * x \<sqinter> (p0[[y]]) \<le> (p0[[p0\<^sup>T]]) * y

goal (1 subgoal):
 1. (p0 * p0)\<^sup>T\<^sup>\<star> * x \<sqinter> (p0[[y]]) \<le> (p0[[p0\<^sup>T]]) * y
[PROOF STEP]
.
[PROOF STATE]
proof (state)
this:
(p0 * p0)\<^sup>T\<^sup>\<star> * x \<sqinter> (p0[[y]]) \<le> (p0[[p0\<^sup>T]]) * y

goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
have 6: "p[?px \<sqinter> -?pt2sy \<sqinter> ?pty\<longmapsto>?p2t] = p"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
[PROOF STEP]
proof (cases "?pty \<le> ?px \<sqinter> -?pt2sy")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
 2. \<not> p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
[PROOF STEP]
case True
[PROOF STATE]
proof (state)
this:
p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y

goal (2 subgoals):
 1. p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
 2. \<not> p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
[PROOF STEP]
hence "?pty \<le> ?pt2y"
[PROOF STATE]
proof (prove)
using this:
p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y

goal (1 subgoal):
 1. p0[[y]] \<le> (p0[[p0\<^sup>T]]) * y
[PROOF STEP]
using 5 conv_dist_comp inf.absorb2
[PROOF STATE]
proof (prove)
using this:
p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y
(p0 * p0)\<^sup>T\<^sup>\<star> * x \<sqinter> (p0[[y]]) \<le> (p0[[p0\<^sup>T]]) * y
(?x * ?y)\<^sup>T = ?y[[?x\<^sup>T]]
?b \<le> ?a \<Longrightarrow> ?a \<sqinter> ?b = ?b

goal (1 subgoal):
 1. p0[[y]] \<le> (p0[[p0\<^sup>T]]) * y
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
p0[[y]] \<le> (p0[[p0\<^sup>T]]) * y

goal (2 subgoals):
 1. p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
 2. \<not> p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
[PROOF STEP]
hence 7: "?pty = ?pt2y"
[PROOF STATE]
proof (prove)
using this:
p0[[y]] \<le> (p0[[p0\<^sup>T]]) * y

goal (1 subgoal):
 1. p0[[y]] = (p0[[p0\<^sup>T]]) * y
[PROOF STEP]
using 2 epm_3
[PROOF STATE]
proof (prove)
using this:
p0[[y]] \<le> (p0[[p0\<^sup>T]]) * y
point (p0[[y]]) \<and> point ((p0[[p0\<^sup>T]]) * y)
\<lbrakk>?e \<le> ?w; injective ?w\<rbrakk> \<Longrightarrow> ?e = ?w \<sqinter> top * ?e

goal (1 subgoal):
 1. p0[[y]] = (p0[[p0\<^sup>T]]) * y
[PROOF STEP]
by fastforce
[PROOF STATE]
proof (state)
this:
p0[[y]] = (p0[[p0\<^sup>T]]) * y

goal (2 subgoals):
 1. p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
 2. \<not> p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
[PROOF STEP]
have "p[?px \<sqinter> -?pt2sy \<sqinter> ?pty\<longmapsto>?p2t] = p[?pty\<longmapsto>?p2t]"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[p0[[y]]\<longmapsto>(p0 * p0)\<^sup>T]
[PROOF STEP]
using True inf.absorb2
[PROOF STATE]
proof (prove)
using this:
p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y
?b \<le> ?a \<Longrightarrow> ?a \<sqinter> ?b = ?b

goal (1 subgoal):
 1. p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[p0[[y]]\<longmapsto>(p0 * p0)\<^sup>T]
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[p0[[y]]\<longmapsto>(p0 * p0)\<^sup>T]

goal (2 subgoals):
 1. p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
 2. \<not> p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[p0[[y]]\<longmapsto>(p0 * p0)\<^sup>T]

goal (2 subgoals):
 1. p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
 2. \<not> p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
[PROOF STEP]
have "... = p[?pty\<longmapsto>?p2[[?pty]]]"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. p[p0[[y]]\<longmapsto>(p0 * p0)\<^sup>T] = p[p0[[y]]\<longmapsto>p0 * p0[[p0[[y]]]]]
[PROOF STEP]
using 2 update_point_get
[PROOF STATE]
proof (prove)
using this:
point (p0[[y]]) \<and> point ((p0[[p0\<^sup>T]]) * y)
point ?y \<Longrightarrow> ?x[?y\<longmapsto>?z[[?y]]] = ?x[?y\<longmapsto>?z\<^sup>T]

goal (1 subgoal):
 1. p[p0[[y]]\<longmapsto>(p0 * p0)\<^sup>T] = p[p0[[y]]\<longmapsto>p0 * p0[[p0[[y]]]]]
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
p[p0[[y]]\<longmapsto>(p0 * p0)\<^sup>T] = p[p0[[y]]\<longmapsto>p0 * p0[[p0[[y]]]]]

goal (2 subgoals):
 1. p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
 2. \<not> p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
p[p0[[y]]\<longmapsto>(p0 * p0)\<^sup>T] = p[p0[[y]]\<longmapsto>p0 * p0[[p0[[y]]]]]

goal (2 subgoals):
 1. p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
 2. \<not> p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
[PROOF STEP]
have "... = p[?pty\<longmapsto>p0\<^sup>T * p0\<^sup>T * p0\<^sup>T * y]"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. p[p0[[y]]\<longmapsto>p0 * p0[[p0[[y]]]]] = p[p0[[y]]\<longmapsto>(p0[[p0\<^sup>T]]) * p0\<^sup>T * y]
[PROOF STEP]
using comp_associative conv_dist_comp
[PROOF STATE]
proof (prove)
using this:
?x * ?y * ?z = ?x * (?y * ?z)
(?x * ?y)\<^sup>T = ?y[[?x\<^sup>T]]

goal (1 subgoal):
 1. p[p0[[y]]\<longmapsto>p0 * p0[[p0[[y]]]]] = p[p0[[y]]\<longmapsto>(p0[[p0\<^sup>T]]) * p0\<^sup>T * y]
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
p[p0[[y]]\<longmapsto>p0 * p0[[p0[[y]]]]] = p[p0[[y]]\<longmapsto>(p0[[p0\<^sup>T]]) * p0\<^sup>T * y]

goal (2 subgoals):
 1. p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
 2. \<not> p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
p[p0[[y]]\<longmapsto>p0 * p0[[p0[[y]]]]] = p[p0[[y]]\<longmapsto>(p0[[p0\<^sup>T]]) * p0\<^sup>T * y]

goal (2 subgoals):
 1. p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
 2. \<not> p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
[PROOF STEP]
have "... = p[?pty\<longmapsto>?pt2y]"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. p[p0[[y]]\<longmapsto>(p0[[p0\<^sup>T]]) * p0\<^sup>T * y] = p[p0[[y]]\<longmapsto>(p0[[p0\<^sup>T]]) * y]
[PROOF STEP]
using 7 mult_assoc
[PROOF STATE]
proof (prove)
using this:
p0[[y]] = (p0[[p0\<^sup>T]]) * y
?a * ?b * ?c = ?a * (?b * ?c)

goal (1 subgoal):
 1. p[p0[[y]]\<longmapsto>(p0[[p0\<^sup>T]]) * p0\<^sup>T * y] = p[p0[[y]]\<longmapsto>(p0[[p0\<^sup>T]]) * y]
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
p[p0[[y]]\<longmapsto>(p0[[p0\<^sup>T]]) * p0\<^sup>T * y] = p[p0[[y]]\<longmapsto>(p0[[p0\<^sup>T]]) * y]

goal (2 subgoals):
 1. p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
 2. \<not> p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
p[p0[[y]]\<longmapsto>(p0[[p0\<^sup>T]]) * p0\<^sup>T * y] = p[p0[[y]]\<longmapsto>(p0[[p0\<^sup>T]]) * y]

goal (2 subgoals):
 1. p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
 2. \<not> p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
[PROOF STEP]
have "... = p[?pty\<longmapsto>p[[?pty]]]"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. p[p0[[y]]\<longmapsto>(p0[[p0\<^sup>T]]) * y] = p[p0[[y]]\<longmapsto>p[[p0[[y]]]]]
[PROOF STEP]
using 1 path_halving_invariant_aux(1,2) mult_assoc
[PROOF STATE]
proof (prove)
using this:
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]
path_halving_invariant ?p ?x ?y ?p0.0 \<Longrightarrow> ?p[[?y]] = ?p0.0[[?y]]
path_halving_invariant ?p ?x ?y ?p0.0 \<Longrightarrow> ?p[[?p[[?y]]]] = ?p0.0[[?p0.0[[?y]]]]
?a * ?b * ?c = ?a * (?b * ?c)

goal (1 subgoal):
 1. p[p0[[y]]\<longmapsto>(p0[[p0\<^sup>T]]) * y] = p[p0[[y]]\<longmapsto>p[[p0[[y]]]]]
[PROOF STEP]
by force
[PROOF STATE]
proof (state)
this:
p[p0[[y]]\<longmapsto>(p0[[p0\<^sup>T]]) * y] = p[p0[[y]]\<longmapsto>p[[p0[[y]]]]]

goal (2 subgoals):
 1. p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
 2. \<not> p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
p[p0[[y]]\<longmapsto>(p0[[p0\<^sup>T]]) * y] = p[p0[[y]]\<longmapsto>p[[p0[[y]]]]]

goal (2 subgoals):
 1. p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
 2. \<not> p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
[PROOF STEP]
have "... = p"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. p[p0[[y]]\<longmapsto>p[[p0[[y]]]]] = p
[PROOF STEP]
using 2 get_put
[PROOF STATE]
proof (prove)
using this:
point (p0[[y]]) \<and> point ((p0[[p0\<^sup>T]]) * y)
point ?y \<Longrightarrow> ?x[?y\<longmapsto>?x[[?y]]] = ?x

goal (1 subgoal):
 1. p[p0[[y]]\<longmapsto>p[[p0[[y]]]]] = p
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
p[p0[[y]]\<longmapsto>p[[p0[[y]]]]] = p

goal (2 subgoals):
 1. p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
 2. \<not> p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p

goal (1 subgoal):
 1. p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
[PROOF STEP]
.
[PROOF STATE]
proof (state)
this:
p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p

goal (1 subgoal):
 1. \<not> p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<not> p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
[PROOF STEP]
case False
[PROOF STATE]
proof (state)
this:
\<not> p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y

goal (1 subgoal):
 1. \<not> p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
[PROOF STEP]
have "mapping ?p2"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. coreflexive (p0 * p0[[p0 * p0]]) \<and> times_top_class.total (p0 * p0)
[PROOF STEP]
using 1 mapping_mult_closed path_halving_invariant_def
[PROOF STATE]
proof (prove)
using this:
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]
\<lbrakk>coreflexive (?x[[?x]]) \<and> times_top_class.total ?x; coreflexive (?y[[?y]]) \<and> times_top_class.total ?y\<rbrakk> \<Longrightarrow> coreflexive (?x * ?y[[?x * ?y]]) \<and> times_top_class.total (?x * ?y)
path_halving_invariant ?p ?x ?y ?p0.0 \<equiv> find_set_precondition ?p ?x \<and> point ?y \<and> ?y \<le> ?p\<^sup>T\<^sup>\<star> * ?x \<and> ?y \<le> (?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x \<and> ?p0.0[(?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x - ?p0.0\<^sup>T\<^sup>\<star> * ?y\<longmapsto>(?p0.0 * ?p0.0)\<^sup>T] = ?p \<and> (coreflexive (?p0.0[[?p0.0]]) \<and> times_top_class.total ?p0.0) \<and> pd_kleene_allegory_class.acyclic (?p0.0 - (1::'a))

goal (1 subgoal):
 1. coreflexive (p0 * p0[[p0 * p0]]) \<and> times_top_class.total (p0 * p0)
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
coreflexive (p0 * p0[[p0 * p0]]) \<and> times_top_class.total (p0 * p0)

goal (1 subgoal):
 1. \<not> p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
[PROOF STEP]
hence 8: "regular (?px \<sqinter> -?pt2sy)"
[PROOF STATE]
proof (prove)
using this:
coreflexive (p0 * p0[[p0 * p0]]) \<and> times_top_class.total (p0 * p0)

goal (1 subgoal):
 1. regular ((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y)
[PROOF STEP]
using 1 bijective_regular find_set_precondition_def mapping_regular pp_dist_comp regular_closed_star regular_conv_closed path_halving_invariant_def
[PROOF STATE]
proof (prove)
using this:
coreflexive (p0 * p0[[p0 * p0]]) \<and> times_top_class.total (p0 * p0)
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]
bijective ?x \<Longrightarrow> regular ?x
find_set_precondition ?p ?x \<equiv> ((coreflexive (?p[[?p]]) \<and> times_top_class.total ?p) \<and> pd_kleene_allegory_class.acyclic (?p - (1::'a))) \<and> point ?x
coreflexive (?x[[?x]]) \<and> times_top_class.total ?x \<Longrightarrow> regular ?x
- - (?x * ?y) = - - ?x * - - ?y
regular ?x \<Longrightarrow> regular (?x\<^sup>\<star>)
regular ?x \<Longrightarrow> regular (?x\<^sup>T)
path_halving_invariant ?p ?x ?y ?p0.0 \<equiv> find_set_precondition ?p ?x \<and> point ?y \<and> ?y \<le> ?p\<^sup>T\<^sup>\<star> * ?x \<and> ?y \<le> (?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x \<and> ?p0.0[(?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x - ?p0.0\<^sup>T\<^sup>\<star> * ?y\<longmapsto>(?p0.0 * ?p0.0)\<^sup>T] = ?p \<and> (coreflexive (?p0.0[[?p0.0]]) \<and> times_top_class.total ?p0.0) \<and> pd_kleene_allegory_class.acyclic (?p0.0 - (1::'a))

goal (1 subgoal):
 1. regular ((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
regular ((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y)

goal (1 subgoal):
 1. \<not> p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
[PROOF STEP]
have "vector (?px \<sqinter> -?pt2sy)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. vector ((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y)
[PROOF STEP]
using 1 find_set_precondition_def vector_complement_closed vector_inf_closed vector_mult_closed path_halving_invariant_def
[PROOF STATE]
proof (prove)
using this:
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]
find_set_precondition ?p ?x \<equiv> ((coreflexive (?p[[?p]]) \<and> times_top_class.total ?p) \<and> pd_kleene_allegory_class.acyclic (?p - (1::'a))) \<and> point ?x
vector ?x \<Longrightarrow> vector (- ?x)
\<lbrakk>vector ?x; vector ?y\<rbrakk> \<Longrightarrow> vector (?x \<sqinter> ?y)
vector ?y \<Longrightarrow> vector (?x * ?y)
path_halving_invariant ?p ?x ?y ?p0.0 \<equiv> find_set_precondition ?p ?x \<and> point ?y \<and> ?y \<le> ?p\<^sup>T\<^sup>\<star> * ?x \<and> ?y \<le> (?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x \<and> ?p0.0[(?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x - ?p0.0\<^sup>T\<^sup>\<star> * ?y\<longmapsto>(?p0.0 * ?p0.0)\<^sup>T] = ?p \<and> (coreflexive (?p0.0[[?p0.0]]) \<and> times_top_class.total ?p0.0) \<and> pd_kleene_allegory_class.acyclic (?p0.0 - (1::'a))

goal (1 subgoal):
 1. vector ((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y)
[PROOF STEP]
by force
[PROOF STATE]
proof (state)
this:
vector ((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y)

goal (1 subgoal):
 1. \<not> p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
[PROOF STEP]
hence "?pty \<le> -(?px \<sqinter> -?pt2sy)"
[PROOF STATE]
proof (prove)
using this:
vector ((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y)

goal (1 subgoal):
 1. p0[[y]] \<le> - ((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y)
[PROOF STEP]
using 2 8 point_in_vector_or_complement False
[PROOF STATE]
proof (prove)
using this:
vector ((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y)
point (p0[[y]]) \<and> point ((p0[[p0\<^sup>T]]) * y)
regular ((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y)
\<lbrakk>point ?p; vector ?v; regular ?v\<rbrakk> \<Longrightarrow> ?p \<le> ?v \<or> ?p \<le> - ?v
\<not> p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y

goal (1 subgoal):
 1. p0[[y]] \<le> - ((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y)
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
p0[[y]] \<le> - ((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y)

goal (1 subgoal):
 1. \<not> p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
[PROOF STEP]
hence "?px \<sqinter> -?pt2sy \<sqinter> ?pty = bot"
[PROOF STATE]
proof (prove)
using this:
p0[[y]] \<le> - ((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y)

goal (1 subgoal):
 1. ((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) = bot
[PROOF STEP]
by (simp add: p_antitone_iff pseudo_complement)
[PROOF STATE]
proof (state)
this:
((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) = bot

goal (1 subgoal):
 1. \<not> p0[[y]] \<le> (p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
[PROOF STEP]
thus ?thesis
[PROOF STATE]
proof (prove)
using this:
((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) = bot

goal (1 subgoal):
 1. p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p

goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
have 9: "p[?px \<sqinter> -?pt2sy \<sqinter> y\<longmapsto>?p2t] = ?pyppy"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
proof (cases "y \<le> -?pt2sy")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
 2. \<not> y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
case True
[PROOF STATE]
proof (state)
this:
y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y)

goal (2 subgoals):
 1. y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
 2. \<not> y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
hence "p[?px \<sqinter> -?pt2sy \<sqinter> y\<longmapsto>?p2t] = p[y\<longmapsto>?p2t]"
[PROOF STATE]
proof (prove)
using this:
y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y)

goal (1 subgoal):
 1. p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>(p0 * p0)\<^sup>T]
[PROOF STEP]
using 1 inf.absorb2 path_halving_invariant_def
[PROOF STATE]
proof (prove)
using this:
y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y)
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]
?b \<le> ?a \<Longrightarrow> ?a \<sqinter> ?b = ?b
path_halving_invariant ?p ?x ?y ?p0.0 \<equiv> find_set_precondition ?p ?x \<and> point ?y \<and> ?y \<le> ?p\<^sup>T\<^sup>\<star> * ?x \<and> ?y \<le> (?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x \<and> ?p0.0[(?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x - ?p0.0\<^sup>T\<^sup>\<star> * ?y\<longmapsto>(?p0.0 * ?p0.0)\<^sup>T] = ?p \<and> (coreflexive (?p0.0[[?p0.0]]) \<and> times_top_class.total ?p0.0) \<and> pd_kleene_allegory_class.acyclic (?p0.0 - (1::'a))

goal (1 subgoal):
 1. p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>(p0 * p0)\<^sup>T]
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>(p0 * p0)\<^sup>T]

goal (2 subgoals):
 1. y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
 2. \<not> y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>(p0 * p0)\<^sup>T]

goal (2 subgoals):
 1. y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
 2. \<not> y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
have "... = ?pyppy"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. p[y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
using 1
[PROOF STATE]
proof (prove)
using this:
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]

goal (1 subgoal):
 1. p[y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
by (metis comp_associative conv_dist_comp path_halving_invariant_aux(2) path_halving_invariant_def update_point_get)
[PROOF STATE]
proof (state)
this:
p[y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]

goal (2 subgoals):
 1. y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
 2. \<not> y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]

goal (1 subgoal):
 1. p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
.
[PROOF STATE]
proof (state)
this:
p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]

goal (1 subgoal):
 1. \<not> y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<not> y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
case False
[PROOF STATE]
proof (state)
this:
\<not> y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y)

goal (1 subgoal):
 1. \<not> y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
have "vector (-?pt2sy)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. vector (- (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y))
[PROOF STEP]
using 1 vector_complement_closed vector_mult_closed path_halving_invariant_def
[PROOF STATE]
proof (prove)
using this:
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]
vector ?x \<Longrightarrow> vector (- ?x)
vector ?y \<Longrightarrow> vector (?x * ?y)
path_halving_invariant ?p ?x ?y ?p0.0 \<equiv> find_set_precondition ?p ?x \<and> point ?y \<and> ?y \<le> ?p\<^sup>T\<^sup>\<star> * ?x \<and> ?y \<le> (?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x \<and> ?p0.0[(?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x - ?p0.0\<^sup>T\<^sup>\<star> * ?y\<longmapsto>(?p0.0 * ?p0.0)\<^sup>T] = ?p \<and> (coreflexive (?p0.0[[?p0.0]]) \<and> times_top_class.total ?p0.0) \<and> pd_kleene_allegory_class.acyclic (?p0.0 - (1::'a))

goal (1 subgoal):
 1. vector (- (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y))
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
vector (- (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y))

goal (1 subgoal):
 1. \<not> y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
hence 10: "y \<le> ?pt2sy"
[PROOF STATE]
proof (prove)
using this:
vector (- (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y))

goal (1 subgoal):
 1. y \<le> p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y
[PROOF STEP]
using 1
[PROOF STATE]
proof (prove)
using this:
vector (- (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y))
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]

goal (1 subgoal):
 1. y \<le> p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y
[PROOF STEP]
by (smt (verit, del_insts) False bijective_regular point_in_vector_or_complement regular_closed_star regular_mult_closed total_conv_surjective univalent_conv_injective path_halving_invariant_def)
[PROOF STATE]
proof (state)
this:
y \<le> p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y

goal (1 subgoal):
 1. \<not> y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
hence "?px \<sqinter> -?pt2sy \<sqinter> y = bot"
[PROOF STATE]
proof (prove)
using this:
y \<le> p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y

goal (1 subgoal):
 1. ((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y = bot
[PROOF STEP]
by (simp add: inf.coboundedI2 p_antitone pseudo_complement)
[PROOF STATE]
proof (state)
this:
((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y = bot

goal (1 subgoal):
 1. \<not> y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
hence 11: "p[?px \<sqinter> -?pt2sy \<sqinter> y\<longmapsto>?p2t] = p"
[PROOF STATE]
proof (prove)
using this:
((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y = bot

goal (1 subgoal):
 1. p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p

goal (1 subgoal):
 1. \<not> y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
have "y \<le> p0\<^sup>T\<^sup>+ * y"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. y \<le> (p0[[p0\<^sup>T\<^sup>\<star>]]) * y
[PROOF STEP]
using 10
[PROOF STATE]
proof (prove)
using this:
y \<le> p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y

goal (1 subgoal):
 1. y \<le> (p0[[p0\<^sup>T\<^sup>\<star>]]) * y
[PROOF STEP]
by (metis mult_left_isotone order_lesseq_imp star.circ_plus_same star.left_plus_below_circ)
[PROOF STATE]
proof (state)
this:
y \<le> (p0[[p0\<^sup>T\<^sup>\<star>]]) * y

goal (1 subgoal):
 1. \<not> y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
hence 12: "y = root p0 y"
[PROOF STATE]
proof (prove)
using this:
y \<le> (p0[[p0\<^sup>T\<^sup>\<star>]]) * y

goal (1 subgoal):
 1. y = root p0 y
[PROOF STEP]
using 1 loop_root_2 path_halving_invariant_def
[PROOF STATE]
proof (prove)
using this:
y \<le> (p0[[p0\<^sup>T\<^sup>\<star>]]) * y
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]
\<lbrakk>pd_kleene_allegory_class.acyclic (?p - (1::'a)); coreflexive (?p[[?p]]); injective ?x; ?x \<le> (?p[[?p\<^sup>T\<^sup>\<star>]]) * ?x\<rbrakk> \<Longrightarrow> ?x = root ?p ?x
path_halving_invariant ?p ?x ?y ?p0.0 \<equiv> find_set_precondition ?p ?x \<and> point ?y \<and> ?y \<le> ?p\<^sup>T\<^sup>\<star> * ?x \<and> ?y \<le> (?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x \<and> ?p0.0[(?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x - ?p0.0\<^sup>T\<^sup>\<star> * ?y\<longmapsto>(?p0.0 * ?p0.0)\<^sup>T] = ?p \<and> (coreflexive (?p0.0[[?p0.0]]) \<and> times_top_class.total ?p0.0) \<and> pd_kleene_allegory_class.acyclic (?p0.0 - (1::'a))

goal (1 subgoal):
 1. y = root p0 y
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
y = root p0 y

goal (1 subgoal):
 1. \<not> y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
have "?pyppy = p[y\<longmapsto>p0[[p0[[y]]]]]"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. p[y\<longmapsto>p[[p[[y]]]]] = p[y\<longmapsto>p0[[p0[[y]]]]]
[PROOF STEP]
using 1 path_halving_invariant_aux(2)
[PROOF STATE]
proof (prove)
using this:
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]
path_halving_invariant ?p ?x ?y ?p0.0 \<Longrightarrow> ?p[[?p[[?y]]]] = ?p0.0[[?p0.0[[?y]]]]

goal (1 subgoal):
 1. p[y\<longmapsto>p[[p[[y]]]]] = p[y\<longmapsto>p0[[p0[[y]]]]]
[PROOF STEP]
by force
[PROOF STATE]
proof (state)
this:
p[y\<longmapsto>p[[p[[y]]]]] = p[y\<longmapsto>p0[[p0[[y]]]]]

goal (1 subgoal):
 1. \<not> y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
p[y\<longmapsto>p[[p[[y]]]]] = p[y\<longmapsto>p0[[p0[[y]]]]]

goal (1 subgoal):
 1. \<not> y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
have "... = p[y\<longmapsto>p0[[y]]]"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. p[y\<longmapsto>p0[[p0[[y]]]]] = p[y\<longmapsto>p0[[y]]]
[PROOF STEP]
using 1 12
[PROOF STATE]
proof (prove)
using this:
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]
y = root p0 y

goal (1 subgoal):
 1. p[y\<longmapsto>p0[[p0[[y]]]]] = p[y\<longmapsto>p0[[y]]]
[PROOF STEP]
by (metis root_successor_loop path_halving_invariant_def)
[PROOF STATE]
proof (state)
this:
p[y\<longmapsto>p0[[p0[[y]]]]] = p[y\<longmapsto>p0[[y]]]

goal (1 subgoal):
 1. \<not> y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
p[y\<longmapsto>p0[[p0[[y]]]]] = p[y\<longmapsto>p0[[y]]]

goal (1 subgoal):
 1. \<not> y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
have "... = p[y\<longmapsto>?py]"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. p[y\<longmapsto>p0[[y]]] = p[y\<longmapsto>p[[y]]]
[PROOF STEP]
using 1 path_halving_invariant_aux(1)
[PROOF STATE]
proof (prove)
using this:
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]
path_halving_invariant ?p ?x ?y ?p0.0 \<Longrightarrow> ?p[[?y]] = ?p0.0[[?y]]

goal (1 subgoal):
 1. p[y\<longmapsto>p0[[y]]] = p[y\<longmapsto>p[[y]]]
[PROOF STEP]
by force
[PROOF STATE]
proof (state)
this:
p[y\<longmapsto>p0[[y]]] = p[y\<longmapsto>p[[y]]]

goal (1 subgoal):
 1. \<not> y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
p[y\<longmapsto>p0[[y]]] = p[y\<longmapsto>p[[y]]]

goal (1 subgoal):
 1. \<not> y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
have "... = p"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. p[y\<longmapsto>p[[y]]] = p
[PROOF STEP]
using 1 get_put path_halving_invariant_def
[PROOF STATE]
proof (prove)
using this:
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]
point ?y \<Longrightarrow> ?x[?y\<longmapsto>?x[[?y]]] = ?x
path_halving_invariant ?p ?x ?y ?p0.0 \<equiv> find_set_precondition ?p ?x \<and> point ?y \<and> ?y \<le> ?p\<^sup>T\<^sup>\<star> * ?x \<and> ?y \<le> (?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x \<and> ?p0.0[(?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x - ?p0.0\<^sup>T\<^sup>\<star> * ?y\<longmapsto>(?p0.0 * ?p0.0)\<^sup>T] = ?p \<and> (coreflexive (?p0.0[[?p0.0]]) \<and> times_top_class.total ?p0.0) \<and> pd_kleene_allegory_class.acyclic (?p0.0 - (1::'a))

goal (1 subgoal):
 1. p[y\<longmapsto>p[[y]]] = p
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
p[y\<longmapsto>p[[y]]] = p

goal (1 subgoal):
 1. \<not> y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<Longrightarrow> p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
p[y\<longmapsto>p[[p[[y]]]]] = p
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
p[y\<longmapsto>p[[p[[y]]]]] = p

goal (1 subgoal):
 1. p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
using 11
[PROOF STATE]
proof (prove)
using this:
p[y\<longmapsto>p[[p[[y]]]]] = p
p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p

goal (1 subgoal):
 1. p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]

goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
have 13: "-?pt2sy = -(p0\<^sup>T\<^sup>\<star> * y) \<squnion> (-?pt2sy \<sqinter> ?pty) \<squnion> (-?pt2sy \<sqinter> y)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) = - (p0\<^sup>T\<^sup>\<star> * y) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y
[PROOF STEP]
proof (rule order.antisym)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<le> - (p0\<^sup>T\<^sup>\<star> * y) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y
 2. - (p0\<^sup>T\<^sup>\<star> * y) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y)
[PROOF STEP]
have 14: "regular (p0\<^sup>T\<^sup>\<star> * y) \<and> regular ?pt2sy"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. regular (p0\<^sup>T\<^sup>\<star> * y) \<and> regular (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y)
[PROOF STEP]
using 1
[PROOF STATE]
proof (prove)
using this:
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]

goal (1 subgoal):
 1. regular (p0\<^sup>T\<^sup>\<star> * y) \<and> regular (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y)
[PROOF STEP]
by (metis order.antisym conv_complement conv_dist_comp conv_involutive conv_star_commute forest_components_increasing mapping_regular pp_dist_star regular_mult_closed top.extremum path_halving_invariant_def)
[PROOF STATE]
proof (state)
this:
regular (p0\<^sup>T\<^sup>\<star> * y) \<and> regular (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y)

goal (2 subgoals):
 1. - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<le> - (p0\<^sup>T\<^sup>\<star> * y) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y
 2. - (p0\<^sup>T\<^sup>\<star> * y) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y)
[PROOF STEP]
have "p0\<^sup>T\<^sup>\<star> = p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T \<squnion> p0\<^sup>T \<squnion> 1"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. p0\<^sup>T\<^sup>\<star> = p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T \<squnion> p0\<^sup>T \<squnion> (1::'a)
[PROOF STEP]
using star.circ_back_loop_fixpoint star.circ_plus_same star_left_unfold_equal sup_commute
[PROOF STATE]
proof (prove)
using this:
?z * ?y\<^sup>\<star> * ?y \<squnion> ?z = ?z * ?y\<^sup>\<star>
?x\<^sup>\<star> * ?x = ?x\<^sup>+
(1::'a) \<squnion> ?x\<^sup>+ = ?x\<^sup>\<star>
?x \<squnion> ?y = ?y \<squnion> ?x

goal (1 subgoal):
 1. p0\<^sup>T\<^sup>\<star> = p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T \<squnion> p0\<^sup>T \<squnion> (1::'a)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
p0\<^sup>T\<^sup>\<star> = p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T \<squnion> p0\<^sup>T \<squnion> (1::'a)

goal (2 subgoals):
 1. - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<le> - (p0\<^sup>T\<^sup>\<star> * y) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y
 2. - (p0\<^sup>T\<^sup>\<star> * y) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y)
[PROOF STEP]
hence "p0\<^sup>T\<^sup>\<star> * y \<le> ?pt2sy \<squnion> ?pty \<squnion> y"
[PROOF STATE]
proof (prove)
using this:
p0\<^sup>T\<^sup>\<star> = p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T \<squnion> p0\<^sup>T \<squnion> (1::'a)

goal (1 subgoal):
 1. p0\<^sup>T\<^sup>\<star> * y \<le> p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<squnion> (p0[[y]]) \<squnion> y
[PROOF STEP]
by (metis inf.eq_refl mult_1_left mult_right_dist_sup)
[PROOF STATE]
proof (state)
this:
p0\<^sup>T\<^sup>\<star> * y \<le> p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<squnion> (p0[[y]]) \<squnion> y

goal (2 subgoals):
 1. - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<le> - (p0\<^sup>T\<^sup>\<star> * y) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y
 2. - (p0\<^sup>T\<^sup>\<star> * y) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
p0\<^sup>T\<^sup>\<star> * y \<le> p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<squnion> (p0[[y]]) \<squnion> y

goal (2 subgoals):
 1. - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<le> - (p0\<^sup>T\<^sup>\<star> * y) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y
 2. - (p0\<^sup>T\<^sup>\<star> * y) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y)
[PROOF STEP]
have "... = ?pt2sy \<squnion> (-?pt2sy \<sqinter> ?pty) \<squnion> y"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<squnion> (p0[[y]]) \<squnion> y = p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> y
[PROOF STEP]
using 14
[PROOF STATE]
proof (prove)
using this:
regular (p0\<^sup>T\<^sup>\<star> * y) \<and> regular (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y)

goal (1 subgoal):
 1. p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<squnion> (p0[[y]]) \<squnion> y = p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> y
[PROOF STEP]
by (metis maddux_3_21_pp)
[PROOF STATE]
proof (state)
this:
p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<squnion> (p0[[y]]) \<squnion> y = p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> y

goal (2 subgoals):
 1. - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<le> - (p0\<^sup>T\<^sup>\<star> * y) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y
 2. - (p0\<^sup>T\<^sup>\<star> * y) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<squnion> (p0[[y]]) \<squnion> y = p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> y

goal (2 subgoals):
 1. - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<le> - (p0\<^sup>T\<^sup>\<star> * y) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y
 2. - (p0\<^sup>T\<^sup>\<star> * y) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y)
[PROOF STEP]
have "... = ?pt2sy \<squnion> (-?pt2sy \<sqinter> ?pty) \<squnion> (-?pt2sy \<sqinter> y)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> y = p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y
[PROOF STEP]
using 14
[PROOF STATE]
proof (prove)
using this:
regular (p0\<^sup>T\<^sup>\<star> * y) \<and> regular (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y)

goal (1 subgoal):
 1. p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> y = p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y
[PROOF STEP]
by (smt (z3) maddux_3_21_pp sup.left_commute sup_assoc)
[PROOF STATE]
proof (state)
this:
p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> y = p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y

goal (2 subgoals):
 1. - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<le> - (p0\<^sup>T\<^sup>\<star> * y) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y
 2. - (p0\<^sup>T\<^sup>\<star> * y) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y)
[PROOF STEP]
hence "p0\<^sup>T\<^sup>\<star> * y \<sqinter> -?pt2sy \<le> (-?pt2sy \<sqinter> ?pty) \<squnion> (-?pt2sy \<sqinter> y)"
[PROOF STATE]
proof (prove)
using this:
p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> y = p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y

goal (1 subgoal):
 1. p0\<^sup>T\<^sup>\<star> * y - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y
[PROOF STEP]
using calculation half_shunting sup_assoc sup_commute
[PROOF STATE]
proof (prove)
using this:
p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> y = p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y
p0\<^sup>T\<^sup>\<star> * y \<le> p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> y
?x \<le> ?y \<squnion> ?z \<Longrightarrow> ?x - ?z \<le> ?y
?x \<squnion> ?y \<squnion> ?z = ?x \<squnion> (?y \<squnion> ?z)
?x \<squnion> ?y = ?y \<squnion> ?x

goal (1 subgoal):
 1. p0\<^sup>T\<^sup>\<star> * y - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
p0\<^sup>T\<^sup>\<star> * y - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y

goal (2 subgoals):
 1. - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<le> - (p0\<^sup>T\<^sup>\<star> * y) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y
 2. - (p0\<^sup>T\<^sup>\<star> * y) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y)
[PROOF STEP]
thus "-?pt2sy \<le> -(p0\<^sup>T\<^sup>\<star> * y) \<squnion> (-?pt2sy \<sqinter> ?pty) \<squnion> (-?pt2sy \<sqinter> y)"
[PROOF STATE]
proof (prove)
using this:
p0\<^sup>T\<^sup>\<star> * y - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y

goal (1 subgoal):
 1. - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<le> - (p0\<^sup>T\<^sup>\<star> * y) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y
[PROOF STEP]
using 14
[PROOF STATE]
proof (prove)
using this:
p0\<^sup>T\<^sup>\<star> * y - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y
regular (p0\<^sup>T\<^sup>\<star> * y) \<and> regular (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y)

goal (1 subgoal):
 1. - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<le> - (p0\<^sup>T\<^sup>\<star> * y) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y
[PROOF STEP]
by (smt (z3) inf.sup_monoid.add_commute shunting_var_p sup.left_commute sup_commute)
[PROOF STATE]
proof (state)
this:
- (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<le> - (p0\<^sup>T\<^sup>\<star> * y) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y

goal (1 subgoal):
 1. - (p0\<^sup>T\<^sup>\<star> * y) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y)
[PROOF STEP]
have "-(p0\<^sup>T\<^sup>\<star> * y) \<le> -?pt2sy"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. - (p0\<^sup>T\<^sup>\<star> * y) \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y)
[PROOF STEP]
by (meson mult_left_isotone order.trans p_antitone star.right_plus_below_circ)
[PROOF STATE]
proof (state)
this:
- (p0\<^sup>T\<^sup>\<star> * y) \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y)

goal (1 subgoal):
 1. - (p0\<^sup>T\<^sup>\<star> * y) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y)
[PROOF STEP]
thus "-(p0\<^sup>T\<^sup>\<star> * y) \<squnion> (-?pt2sy \<sqinter> ?pty) \<squnion> (-?pt2sy \<sqinter> y) \<le> -?pt2sy"
[PROOF STATE]
proof (prove)
using this:
- (p0\<^sup>T\<^sup>\<star> * y) \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y)

goal (1 subgoal):
 1. - (p0\<^sup>T\<^sup>\<star> * y) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
- (p0\<^sup>T\<^sup>\<star> * y) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y \<le> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
- (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) = - (p0\<^sup>T\<^sup>\<star> * y) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y

goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
have "regular ?px" "regular ?pty" "regular y"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. regular ((p0 * p0)\<^sup>T\<^sup>\<star> * x) &&& regular (p0[[y]]) &&& regular y
[PROOF STEP]
using 1 bijective_regular find_set_precondition_def mapping_regular pp_dist_comp regular_closed_star regular_conv_closed path_halving_invariant_def
[PROOF STATE]
proof (prove)
using this:
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]
bijective ?x \<Longrightarrow> regular ?x
find_set_precondition ?p ?x \<equiv> ((coreflexive (?p[[?p]]) \<and> times_top_class.total ?p) \<and> pd_kleene_allegory_class.acyclic (?p - (1::'a))) \<and> point ?x
coreflexive (?x[[?x]]) \<and> times_top_class.total ?x \<Longrightarrow> regular ?x
- - (?x * ?y) = - - ?x * - - ?y
regular ?x \<Longrightarrow> regular (?x\<^sup>\<star>)
regular ?x \<Longrightarrow> regular (?x\<^sup>T)
path_halving_invariant ?p ?x ?y ?p0.0 \<equiv> find_set_precondition ?p ?x \<and> point ?y \<and> ?y \<le> ?p\<^sup>T\<^sup>\<star> * ?x \<and> ?y \<le> (?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x \<and> ?p0.0[(?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x - ?p0.0\<^sup>T\<^sup>\<star> * ?y\<longmapsto>(?p0.0 * ?p0.0)\<^sup>T] = ?p \<and> (coreflexive (?p0.0[[?p0.0]]) \<and> times_top_class.total ?p0.0) \<and> pd_kleene_allegory_class.acyclic (?p0.0 - (1::'a))

goal (1 subgoal):
 1. regular ((p0 * p0)\<^sup>T\<^sup>\<star> * x) &&& regular (p0[[y]]) &&& regular y
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
regular ((p0 * p0)\<^sup>T\<^sup>\<star> * x)
regular (p0[[y]])
regular y

goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
hence 15: "regular (?px \<sqinter> -?pt2sy \<sqinter> ?pty)" "regular (?px \<sqinter> -?pt2sy \<sqinter> y)"
[PROOF STATE]
proof (prove)
using this:
regular ((p0 * p0)\<^sup>T\<^sup>\<star> * x)
regular (p0[[y]])
regular y

goal (1 subgoal):
 1. regular (((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])) &&& regular (((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
regular (((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]))
regular (((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y)

goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
have "p0[?px - p0\<^sup>T\<^sup>\<star> * (?pyppy[[y]])\<longmapsto>?p2t] = p0[?px - p0\<^sup>T\<^sup>\<star> * (p[[?py]])\<longmapsto>?p2t]"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * (p[[p[[y]]]])\<longmapsto>(p0 * p0)\<^sup>T]
[PROOF STEP]
using 1 put_get vector_mult_closed path_halving_invariant_def
[PROOF STATE]
proof (prove)
using this:
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]
\<lbrakk>vector ?y; surjective ?y; vector ?z\<rbrakk> \<Longrightarrow> (?x[?y\<longmapsto>?z])[[?y]] = ?z
vector ?y \<Longrightarrow> vector (?x * ?y)
path_halving_invariant ?p ?x ?y ?p0.0 \<equiv> find_set_precondition ?p ?x \<and> point ?y \<and> ?y \<le> ?p\<^sup>T\<^sup>\<star> * ?x \<and> ?y \<le> (?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x \<and> ?p0.0[(?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x - ?p0.0\<^sup>T\<^sup>\<star> * ?y\<longmapsto>(?p0.0 * ?p0.0)\<^sup>T] = ?p \<and> (coreflexive (?p0.0[[?p0.0]]) \<and> times_top_class.total ?p0.0) \<and> pd_kleene_allegory_class.acyclic (?p0.0 - (1::'a))

goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * (p[[p[[y]]]])\<longmapsto>(p0 * p0)\<^sup>T]
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * (p[[p[[y]]]])\<longmapsto>(p0 * p0)\<^sup>T]

goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * (p[[p[[y]]]])\<longmapsto>(p0 * p0)\<^sup>T]

goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
have "... = p0[?px - ?pt2sy\<longmapsto>?p2t]"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * (p[[p[[y]]]])\<longmapsto>(p0 * p0)\<^sup>T] = p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y\<longmapsto>(p0 * p0)\<^sup>T]
[PROOF STEP]
using 1 comp_associative path_halving_invariant_aux(2)
[PROOF STATE]
proof (prove)
using this:
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]
?x * ?y * ?z = ?x * (?y * ?z)
path_halving_invariant ?p ?x ?y ?p0.0 \<Longrightarrow> ?p[[?p[[?y]]]] = ?p0.0[[?p0.0[[?y]]]]

goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * (p[[p[[y]]]])\<longmapsto>(p0 * p0)\<^sup>T] = p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y\<longmapsto>(p0 * p0)\<^sup>T]
[PROOF STEP]
by force
[PROOF STATE]
proof (state)
this:
p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * (p[[p[[y]]]])\<longmapsto>(p0 * p0)\<^sup>T] = p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y\<longmapsto>(p0 * p0)\<^sup>T]

goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * (p[[p[[y]]]])\<longmapsto>(p0 * p0)\<^sup>T] = p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y\<longmapsto>(p0 * p0)\<^sup>T]

goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
have "... = p0[?pxy \<squnion> (?px \<sqinter> -?pt2sy \<sqinter> ?pty) \<squnion> (?px \<sqinter> -?pt2sy \<sqinter> y)\<longmapsto>?p2t]"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y\<longmapsto>(p0 * p0)\<^sup>T] = p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * y \<squnion> ((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> ((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T]
[PROOF STEP]
using 13
[PROOF STATE]
proof (prove)
using this:
- (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) = - (p0\<^sup>T\<^sup>\<star> * y) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> - (p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y

goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y\<longmapsto>(p0 * p0)\<^sup>T] = p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * y \<squnion> ((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> ((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T]
[PROOF STEP]
by (metis comp_inf.semiring.distrib_left inf.sup_monoid.add_assoc)
[PROOF STATE]
proof (state)
this:
p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y\<longmapsto>(p0 * p0)\<^sup>T] = p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * y \<squnion> ((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> ((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T]

goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y\<longmapsto>(p0 * p0)\<^sup>T] = p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * y \<squnion> ((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> ((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T]

goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
have "... = (?p[?px \<sqinter> -?pt2sy \<sqinter> ?pty\<longmapsto>?p2t])[?px \<sqinter> -?pt2sy \<sqinter> y\<longmapsto>?p2t]"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * y \<squnion> ((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> ((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = ((p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * y\<longmapsto>(p0 * p0)\<^sup>T])[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T])[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T]
[PROOF STEP]
using 15
[PROOF STATE]
proof (prove)
using this:
regular (((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]))
regular (((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y)

goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * y \<squnion> ((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> ((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = ((p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * y\<longmapsto>(p0 * p0)\<^sup>T])[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T])[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T]
[PROOF STEP]
by (smt (z3) update_same_3 comp_inf.semiring.mult_not_zero inf.sup_monoid.add_assoc inf.sup_monoid.add_commute)
[PROOF STATE]
proof (state)
this:
p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * y \<squnion> ((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> ((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = ((p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * y\<longmapsto>(p0 * p0)\<^sup>T])[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T])[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T]

goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * y \<squnion> ((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]]) \<squnion> ((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = ((p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * y\<longmapsto>(p0 * p0)\<^sup>T])[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T])[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T]

goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
have "... = (p[?px \<sqinter> -?pt2sy \<sqinter> ?pty\<longmapsto>?p2t])[?px \<sqinter> -?pt2sy \<sqinter> y\<longmapsto>?p2t]"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. ((p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * y\<longmapsto>(p0 * p0)\<^sup>T])[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T])[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = (p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T])[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T]
[PROOF STEP]
using 1 path_halving_invariant_def
[PROOF STATE]
proof (prove)
using this:
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]
path_halving_invariant ?p ?x ?y ?p0.0 \<equiv> find_set_precondition ?p ?x \<and> point ?y \<and> ?y \<le> ?p\<^sup>T\<^sup>\<star> * ?x \<and> ?y \<le> (?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x \<and> ?p0.0[(?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x - ?p0.0\<^sup>T\<^sup>\<star> * ?y\<longmapsto>(?p0.0 * ?p0.0)\<^sup>T] = ?p \<and> (coreflexive (?p0.0[[?p0.0]]) \<and> times_top_class.total ?p0.0) \<and> pd_kleene_allegory_class.acyclic (?p0.0 - (1::'a))

goal (1 subgoal):
 1. ((p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * y\<longmapsto>(p0 * p0)\<^sup>T])[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T])[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = (p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T])[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T]
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
((p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * y\<longmapsto>(p0 * p0)\<^sup>T])[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T])[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = (p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T])[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T]

goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
((p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * y\<longmapsto>(p0 * p0)\<^sup>T])[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T])[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = (p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T])[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T]

goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
have "... = p[?px \<sqinter> -?pt2sy \<sqinter> y\<longmapsto>?p2t]"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T])[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T]
[PROOF STEP]
using 6
[PROOF STATE]
proof (prove)
using this:
p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p

goal (1 subgoal):
 1. (p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T])[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T]
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
(p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T])[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T]

goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
(p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> (p0[[y]])\<longmapsto>(p0 * p0)\<^sup>T])[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T]

goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
have "... = ?pyppy"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
using 9
[PROOF STATE]
proof (prove)
using this:
p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]

goal (1 subgoal):
 1. p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
p[((p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * p0\<^sup>T * p0\<^sup>T * y) \<sqinter> y\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]

goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]

goal (1 subgoal):
 1. p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]
[PROOF STEP]
.
[PROOF STATE]
proof (state)
this:
p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
p0[(p0 * p0)\<^sup>T\<^sup>\<star> * x - p0\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])\<longmapsto>(p0 * p0)\<^sup>T] = p[y\<longmapsto>p[[p[[y]]]]]

goal (3 subgoals):
 1. coreflexive (p0[[p0]])
 2. times_top_class.total p0
 3. pd_kleene_allegory_class.acyclic (p0 - (1::'a))
[PROOF STEP]
show "univalent p0" "total p0" "acyclic (p0 - 1)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. coreflexive (p0[[p0]]) &&& times_top_class.total p0 &&& pd_kleene_allegory_class.acyclic (p0 - (1::'a))
[PROOF STEP]
using 1 path_halving_invariant_def
[PROOF STATE]
proof (prove)
using this:
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]
path_halving_invariant ?p ?x ?y ?p0.0 \<equiv> find_set_precondition ?p ?x \<and> point ?y \<and> ?y \<le> ?p\<^sup>T\<^sup>\<star> * ?x \<and> ?y \<le> (?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x \<and> ?p0.0[(?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x - ?p0.0\<^sup>T\<^sup>\<star> * ?y\<longmapsto>(?p0.0 * ?p0.0)\<^sup>T] = ?p \<and> (coreflexive (?p0.0[[?p0.0]]) \<and> times_top_class.total ?p0.0) \<and> pd_kleene_allegory_class.acyclic (?p0.0 - (1::'a))

goal (1 subgoal):
 1. coreflexive (p0[[p0]]) &&& times_top_class.total p0 &&& pd_kleene_allegory_class.acyclic (p0 - (1::'a))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
coreflexive (p0[[p0]])
times_top_class.total p0
pd_kleene_allegory_class.acyclic (p0 - (1::'a))

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
path_halving_invariant (p[y\<longmapsto>p[[p[[y]]]]]) x ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]) p0

goal (1 subgoal):
 1. ((p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]))\<down> < (p\<^sup>T\<^sup>\<star> * y)\<down>
[PROOF STEP]
let ?s = "{ z . regular z \<and> z \<le> p\<^sup>T\<^sup>\<star> * y }"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. ((p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]))\<down> < (p\<^sup>T\<^sup>\<star> * y)\<down>
[PROOF STEP]
let ?t = "{ z . regular z \<and> z \<le> ?pyppy\<^sup>T\<^sup>\<star> * (?pyppy[[y]]) }"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. ((p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]))\<down> < (p\<^sup>T\<^sup>\<star> * y)\<down>
[PROOF STEP]
have "?pyppy\<^sup>T\<^sup>\<star> * (?pyppy[[y]]) = ?pyppy\<^sup>T\<^sup>\<star> * (p[[?py]])"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]) = (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * (p[[p[[y]]]])
[PROOF STEP]
using 1 put_get vector_mult_closed path_halving_invariant_def
[PROOF STATE]
proof (prove)
using this:
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]
\<lbrakk>vector ?y; surjective ?y; vector ?z\<rbrakk> \<Longrightarrow> (?x[?y\<longmapsto>?z])[[?y]] = ?z
vector ?y \<Longrightarrow> vector (?x * ?y)
path_halving_invariant ?p ?x ?y ?p0.0 \<equiv> find_set_precondition ?p ?x \<and> point ?y \<and> ?y \<le> ?p\<^sup>T\<^sup>\<star> * ?x \<and> ?y \<le> (?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x \<and> ?p0.0[(?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x - ?p0.0\<^sup>T\<^sup>\<star> * ?y\<longmapsto>(?p0.0 * ?p0.0)\<^sup>T] = ?p \<and> (coreflexive (?p0.0[[?p0.0]]) \<and> times_top_class.total ?p0.0) \<and> pd_kleene_allegory_class.acyclic (?p0.0 - (1::'a))

goal (1 subgoal):
 1. (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]) = (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * (p[[p[[y]]]])
[PROOF STEP]
by force
[PROOF STATE]
proof (state)
this:
(p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]) = (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * (p[[p[[y]]]])

goal (1 subgoal):
 1. ((p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]))\<down> < (p\<^sup>T\<^sup>\<star> * y)\<down>
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
(p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]) = (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * (p[[p[[y]]]])

goal (1 subgoal):
 1. ((p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]))\<down> < (p\<^sup>T\<^sup>\<star> * y)\<down>
[PROOF STEP]
have "... \<le> p\<^sup>+\<^sup>T\<^sup>\<star> * (p[[?py]])"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * (p[[p[[y]]]]) \<le> p\<^sup>+\<^sup>T\<^sup>\<star> * (p[[p[[y]]]])
[PROOF STEP]
using 1 path_halving_invariant_def update_square_plus conv_order mult_left_isotone star_isotone
[PROOF STATE]
proof (prove)
using this:
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]
path_halving_invariant ?p ?x ?y ?p0.0 \<equiv> find_set_precondition ?p ?x \<and> point ?y \<and> ?y \<le> ?p\<^sup>T\<^sup>\<star> * ?x \<and> ?y \<le> (?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x \<and> ?p0.0[(?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x - ?p0.0\<^sup>T\<^sup>\<star> * ?y\<longmapsto>(?p0.0 * ?p0.0)\<^sup>T] = ?p \<and> (coreflexive (?p0.0[[?p0.0]]) \<and> times_top_class.total ?p0.0) \<and> pd_kleene_allegory_class.acyclic (?p0.0 - (1::'a))
point ?y \<Longrightarrow> ?x[?y\<longmapsto>?x[[?x[[?y]]]]] \<le> ?x\<^sup>+
(?x \<le> ?y) = (?x\<^sup>T \<le> ?y\<^sup>T)
?x \<le> ?y \<Longrightarrow> ?x * ?z \<le> ?y * ?z
?x \<le> ?y \<Longrightarrow> ?x\<^sup>\<star> \<le> ?y\<^sup>\<star>

goal (1 subgoal):
 1. (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * (p[[p[[y]]]]) \<le> p\<^sup>+\<^sup>T\<^sup>\<star> * (p[[p[[y]]]])
[PROOF STEP]
by force
[PROOF STATE]
proof (state)
this:
(p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * (p[[p[[y]]]]) \<le> p\<^sup>+\<^sup>T\<^sup>\<star> * (p[[p[[y]]]])

goal (1 subgoal):
 1. ((p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]))\<down> < (p\<^sup>T\<^sup>\<star> * y)\<down>
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
(p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * (p[[p[[y]]]]) \<le> p\<^sup>+\<^sup>T\<^sup>\<star> * (p[[p[[y]]]])

goal (1 subgoal):
 1. ((p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]))\<down> < (p\<^sup>T\<^sup>\<star> * y)\<down>
[PROOF STEP]
have "... = p\<^sup>T\<^sup>\<star> * p\<^sup>T * p\<^sup>T * y"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. p\<^sup>+\<^sup>T\<^sup>\<star> * (p[[p[[y]]]]) = p\<^sup>T\<^sup>\<star> * p\<^sup>T * p\<^sup>T * y
[PROOF STEP]
by (simp add: conv_plus_commute star.left_plus_circ mult_assoc)
[PROOF STATE]
proof (state)
this:
p\<^sup>+\<^sup>T\<^sup>\<star> * (p[[p[[y]]]]) = p\<^sup>T\<^sup>\<star> * p\<^sup>T * p\<^sup>T * y

goal (1 subgoal):
 1. ((p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]))\<down> < (p\<^sup>T\<^sup>\<star> * y)\<down>
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
p\<^sup>+\<^sup>T\<^sup>\<star> * (p[[p[[y]]]]) = p\<^sup>T\<^sup>\<star> * p\<^sup>T * p\<^sup>T * y

goal (1 subgoal):
 1. ((p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]))\<down> < (p\<^sup>T\<^sup>\<star> * y)\<down>
[PROOF STEP]
have "... \<le> p\<^sup>T\<^sup>+ * y"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. p\<^sup>T\<^sup>\<star> * p\<^sup>T * p\<^sup>T * y \<le> (p[[p\<^sup>T\<^sup>\<star>]]) * y
[PROOF STEP]
by (metis mult_left_isotone star.left_plus_below_circ star_plus)
[PROOF STATE]
proof (state)
this:
p\<^sup>T\<^sup>\<star> * p\<^sup>T * p\<^sup>T * y \<le> (p[[p\<^sup>T\<^sup>\<star>]]) * y

goal (1 subgoal):
 1. ((p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]))\<down> < (p\<^sup>T\<^sup>\<star> * y)\<down>
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
(p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]) \<le> (p[[p\<^sup>T\<^sup>\<star>]]) * y
[PROOF STEP]
have 16: "?pyppy\<^sup>T\<^sup>\<star> * (?pyppy[[y]]) \<le> p\<^sup>T\<^sup>+ * y"
[PROOF STATE]
proof (prove)
using this:
(p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]) \<le> (p[[p\<^sup>T\<^sup>\<star>]]) * y

goal (1 subgoal):
 1. (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]) \<le> (p[[p\<^sup>T\<^sup>\<star>]]) * y
[PROOF STEP]
.
[PROOF STATE]
proof (state)
this:
(p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]) \<le> (p[[p\<^sup>T\<^sup>\<star>]]) * y

goal (1 subgoal):
 1. ((p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]))\<down> < (p\<^sup>T\<^sup>\<star> * y)\<down>
[PROOF STEP]
hence "?pyppy\<^sup>T\<^sup>\<star> * (?pyppy[[y]]) \<le> p\<^sup>T\<^sup>\<star> * y"
[PROOF STATE]
proof (prove)
using this:
(p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]) \<le> (p[[p\<^sup>T\<^sup>\<star>]]) * y

goal (1 subgoal):
 1. (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]) \<le> p\<^sup>T\<^sup>\<star> * y
[PROOF STEP]
using mult_left_isotone order_lesseq_imp star.left_plus_below_circ
[PROOF STATE]
proof (prove)
using this:
(p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]) \<le> (p[[p\<^sup>T\<^sup>\<star>]]) * y
?x \<le> ?y \<Longrightarrow> ?x * ?z \<le> ?y * ?z
(\<forall>z\<ge>?x. ?y \<le> z) = (?y \<le> ?x)
?x\<^sup>+ \<le> ?x\<^sup>\<star>

goal (1 subgoal):
 1. (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]) \<le> p\<^sup>T\<^sup>\<star> * y
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
(p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]) \<le> p\<^sup>T\<^sup>\<star> * y

goal (1 subgoal):
 1. ((p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]))\<down> < (p\<^sup>T\<^sup>\<star> * y)\<down>
[PROOF STEP]
hence 17: "?t \<subseteq> ?s"
[PROOF STATE]
proof (prove)
using this:
(p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]) \<le> p\<^sup>T\<^sup>\<star> * y

goal (1 subgoal):
 1. {z. regular z \<and> z \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])} \<subseteq> {z. regular z \<and> z \<le> p\<^sup>T\<^sup>\<star> * y}
[PROOF STEP]
using order_trans
[PROOF STATE]
proof (prove)
using this:
(p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]) \<le> p\<^sup>T\<^sup>\<star> * y
\<lbrakk>?x \<le> ?y; ?y \<le> ?z\<rbrakk> \<Longrightarrow> ?x \<le> ?z

goal (1 subgoal):
 1. {z. regular z \<and> z \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])} \<subseteq> {z. regular z \<and> z \<le> p\<^sup>T\<^sup>\<star> * y}
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
{z. regular z \<and> z \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])} \<subseteq> {z. regular z \<and> z \<le> p\<^sup>T\<^sup>\<star> * y}

goal (1 subgoal):
 1. ((p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]))\<down> < (p\<^sup>T\<^sup>\<star> * y)\<down>
[PROOF STEP]
have 18: "y \<in> ?s"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. y \<in> {z. regular z \<and> z \<le> p\<^sup>T\<^sup>\<star> * y}
[PROOF STEP]
using 1 bijective_regular path_compression_1b path_halving_invariant_def
[PROOF STATE]
proof (prove)
using this:
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]
bijective ?x \<Longrightarrow> regular ?x
?x \<le> ?p\<^sup>T\<^sup>\<star> * ?x
path_halving_invariant ?p ?x ?y ?p0.0 \<equiv> find_set_precondition ?p ?x \<and> point ?y \<and> ?y \<le> ?p\<^sup>T\<^sup>\<star> * ?x \<and> ?y \<le> (?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x \<and> ?p0.0[(?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x - ?p0.0\<^sup>T\<^sup>\<star> * ?y\<longmapsto>(?p0.0 * ?p0.0)\<^sup>T] = ?p \<and> (coreflexive (?p0.0[[?p0.0]]) \<and> times_top_class.total ?p0.0) \<and> pd_kleene_allegory_class.acyclic (?p0.0 - (1::'a))

goal (1 subgoal):
 1. y \<in> {z. regular z \<and> z \<le> p\<^sup>T\<^sup>\<star> * y}
[PROOF STEP]
by force
[PROOF STATE]
proof (state)
this:
y \<in> {z. regular z \<and> z \<le> p\<^sup>T\<^sup>\<star> * y}

goal (1 subgoal):
 1. ((p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]))\<down> < (p\<^sup>T\<^sup>\<star> * y)\<down>
[PROOF STEP]
have 19: "\<not> y \<in> ?t"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. y \<notin> {z. regular z \<and> z \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])}
[PROOF STEP]
proof
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. y \<in> {z. regular z \<and> z \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])} \<Longrightarrow> False
[PROOF STEP]
assume "y \<in> ?t"
[PROOF STATE]
proof (state)
this:
y \<in> {z. regular z \<and> z \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])}

goal (1 subgoal):
 1. y \<in> {z. regular z \<and> z \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])} \<Longrightarrow> False
[PROOF STEP]
hence "y \<le> ?pyppy\<^sup>T\<^sup>\<star> * (?pyppy[[y]])"
[PROOF STATE]
proof (prove)
using this:
y \<in> {z. regular z \<and> z \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])}

goal (1 subgoal):
 1. y \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
y \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])

goal (1 subgoal):
 1. y \<in> {z. regular z \<and> z \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])} \<Longrightarrow> False
[PROOF STEP]
hence "y \<le> p\<^sup>T\<^sup>+ * y"
[PROOF STATE]
proof (prove)
using this:
y \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])

goal (1 subgoal):
 1. y \<le> (p[[p\<^sup>T\<^sup>\<star>]]) * y
[PROOF STEP]
using 16 dual_order.trans
[PROOF STATE]
proof (prove)
using this:
y \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])
(p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]) \<le> (p[[p\<^sup>T\<^sup>\<star>]]) * y
\<lbrakk>?b \<le> ?a; ?c \<le> ?b\<rbrakk> \<Longrightarrow> ?c \<le> ?a

goal (1 subgoal):
 1. y \<le> (p[[p\<^sup>T\<^sup>\<star>]]) * y
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
y \<le> (p[[p\<^sup>T\<^sup>\<star>]]) * y

goal (1 subgoal):
 1. y \<in> {z. regular z \<and> z \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])} \<Longrightarrow> False
[PROOF STEP]
hence "y = root p y"
[PROOF STATE]
proof (prove)
using this:
y \<le> (p[[p\<^sup>T\<^sup>\<star>]]) * y

goal (1 subgoal):
 1. y = root p y
[PROOF STEP]
using 1 find_set_precondition_def loop_root_2 path_halving_invariant_def
[PROOF STATE]
proof (prove)
using this:
y \<le> (p[[p\<^sup>T\<^sup>\<star>]]) * y
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]
find_set_precondition ?p ?x \<equiv> ((coreflexive (?p[[?p]]) \<and> times_top_class.total ?p) \<and> pd_kleene_allegory_class.acyclic (?p - (1::'a))) \<and> point ?x
\<lbrakk>pd_kleene_allegory_class.acyclic (?p - (1::'a)); coreflexive (?p[[?p]]); injective ?x; ?x \<le> (?p[[?p\<^sup>T\<^sup>\<star>]]) * ?x\<rbrakk> \<Longrightarrow> ?x = root ?p ?x
path_halving_invariant ?p ?x ?y ?p0.0 \<equiv> find_set_precondition ?p ?x \<and> point ?y \<and> ?y \<le> ?p\<^sup>T\<^sup>\<star> * ?x \<and> ?y \<le> (?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x \<and> ?p0.0[(?p0.0 * ?p0.0)\<^sup>T\<^sup>\<star> * ?x - ?p0.0\<^sup>T\<^sup>\<star> * ?y\<longmapsto>(?p0.0 * ?p0.0)\<^sup>T] = ?p \<and> (coreflexive (?p0.0[[?p0.0]]) \<and> times_top_class.total ?p0.0) \<and> pd_kleene_allegory_class.acyclic (?p0.0 - (1::'a))

goal (1 subgoal):
 1. y = root p y
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
y = root p y

goal (1 subgoal):
 1. y \<in> {z. regular z \<and> z \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])} \<Longrightarrow> False
[PROOF STEP]
hence "y = ?py"
[PROOF STATE]
proof (prove)
using this:
y = root p y

goal (1 subgoal):
 1. y = p[[y]]
[PROOF STEP]
using 1
[PROOF STATE]
proof (prove)
using this:
y = root p y
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]

goal (1 subgoal):
 1. y = p[[y]]
[PROOF STEP]
by (metis find_set_precondition_def root_successor_loop path_halving_invariant_def)
[PROOF STATE]
proof (state)
this:
y = p[[y]]

goal (1 subgoal):
 1. y \<in> {z. regular z \<and> z \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])} \<Longrightarrow> False
[PROOF STEP]
thus False
[PROOF STATE]
proof (prove)
using this:
y = p[[y]]

goal (1 subgoal):
 1. False
[PROOF STEP]
using 1
[PROOF STATE]
proof (prove)
using this:
y = p[[y]]
path_halving_invariant p x y p0 \<and> y \<noteq> p[[y]]

goal (1 subgoal):
 1. False
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
False

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
y \<notin> {z. regular z \<and> z \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])}

goal (1 subgoal):
 1. ((p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]))\<down> < (p\<^sup>T\<^sup>\<star> * y)\<down>
[PROOF STEP]
show "card ?t < card ?s"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. ((p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]))\<down> < (p\<^sup>T\<^sup>\<star> * y)\<down>
[PROOF STEP]
apply (rule psubset_card_mono)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. finite {z. regular z \<and> z \<le> p\<^sup>T\<^sup>\<star> * y}
 2. {z. regular z \<and> z \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])} \<subset> {z. regular z \<and> z \<le> p\<^sup>T\<^sup>\<star> * y}
[PROOF STEP]
subgoal
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. finite {z. regular z \<and> z \<le> p\<^sup>T\<^sup>\<star> * y}
[PROOF STEP]
using finite_regular
[PROOF STATE]
proof (prove)
using this:
finite {x. regular x}

goal (1 subgoal):
 1. finite {z. regular z \<and> z \<le> p\<^sup>T\<^sup>\<star> * y}
[PROOF STEP]
by simp
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. {z. regular z \<and> z \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])} \<subset> {z. regular z \<and> z \<le> p\<^sup>T\<^sup>\<star> * y}
[PROOF STEP]
subgoal
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. {z. regular z \<and> z \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])} \<subset> {z. regular z \<and> z \<le> p\<^sup>T\<^sup>\<star> * y}
[PROOF STEP]
using 17 18 19
[PROOF STATE]
proof (prove)
using this:
{z. regular z \<and> z \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])} \<subseteq> {z. regular z \<and> z \<le> p\<^sup>T\<^sup>\<star> * y}
y \<in> {z. regular z \<and> z \<le> p\<^sup>T\<^sup>\<star> * y}
y \<notin> {z. regular z \<and> z \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])}

goal (1 subgoal):
 1. {z. regular z \<and> z \<le> (p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]])} \<subset> {z. regular z \<and> z \<le> p\<^sup>T\<^sup>\<star> * y}
[PROOF STEP]
by auto
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done
[PROOF STATE]
proof (state)
this:
((p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]))\<down> < (p\<^sup>T\<^sup>\<star> * y)\<down>

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
path_halving_invariant (p[y\<longmapsto>p[[p[[y]]]]]) x ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]) p0 \<and> ((p[y\<longmapsto>p[[p[[y]]]]])\<^sup>T\<^sup>\<star> * ((p[y\<longmapsto>p[[p[[y]]]]])[[y]]))\<down> < (p\<^sup>T\<^sup>\<star> * y)\<down>

goal:
No subgoals!
[PROOF STEP]
qed