Theory Discrete_UCB_Step3

theory Discrete_UCB_Step3
  imports Discrete_UCB_Step2

begin


locale bandit_policy = bandit_problem + prob_space +
  fixes
    Ω :: "'b set"
    and  :: "'b set set"
    and π :: "nat  'b  'a"
    and N_n :: "nat  'a  'b  nat"
    and Z :: "nat  'a  'b  real"
    and δ :: real
    and q :: real
  assumes  fin_A: "finite A"
    and "ω  Ω"
    and a_in_A: "a  A" 
    and measurable_policy: "t. π t  measurable M (count_space A)" 
    and N_n_def: "n a ω. N_n n a ω = card {t  {0..<n}. π (t+1) ω = a}"
    and count_assm_pointwise: "n ω. (a  A. real (N_n n a ω)) = real n" 
    and delta_pos: "0 < δ"
    and delta_less1: "δ < 1"
    and q_pos: "q > 0" 

begin

definition sample_mean_Z :: "nat  'a  'b  real" where
  "sample_mean_Z n a ω = (1 / real n) * (i<n. Z i a ω)"

definition M_fun :: "nat  'a  'b  real" where
  "M_fun t a ω = (if N_n (t+1) a ω = 0 then 0
             else ( s < t. (if π s ω = a then Z s a ω else 0)) / real (N_n t a ω))"

definition U :: "nat  'a  'b  real" where
  "U t a ω = M_fun t a ω + q * sqrt (ln (1 / δ) / (2 * real (max 1 (N_n t a ω))))"

definition A_t_plus_1 :: "nat  'b  'a" where
  "A_t_plus_1 t ω = (SOME a. a  A  (a'. a'  A  U t a ω  U t a' ω))"

definition prob_eq_Ex :: "'b set  bool" where
  "prob_eq_Ex E  prob E = expectation (λω. indicator E ω)"


theorem proposition_15_7:
  assumes
    a_in_A: "a  A"
    and "ω  Ω"
    and subopt_gap: "Δ a > 0"
    and a_not_opt: " a'  A. Δ a' > 0"
    and delta_a: " a  A. Δ a = μ a_star - μ a"
    and "k  n"
    and from_UCB_step1: " a  A. expectation (λω. real (N_n n a ω)) 
       s n + expectation (λω. ( t = k..<n. if π (t+1) ω = a  s t  real (N_n t a ω) then 1 else 0))"
    and from_UCB_step2: " a  A.   t  {k..<n}. prob ({ω  Ω. A_t_plus_1 t ω = a} 
                            {ω  Ω. N_n t a ω  (2 * ln (1 / δ)) / (Δ a)^2})  2 * δ"
    and eps_pos: "ε > 0"
    and t_gt0: " t  {k..<n}. t > 0"
    and choice_delta: " t  {k..<n}. δ = 1 / (real t powr ε)"
    and s_form: " a  A.  u. s u = (2 * ε * ln (real u)) / ((Δ a)^2)"
    and subset_meas:" a  A. t  {k..<n}. ω  Ω. {ω. π (t+1) ω = a  2 * ε * ln (real t)/(Δ a)^2  N_n t a ω}  Ω"
    and  prob_eq_E_assm: " a  A. t  {k..<n}. prob {ω. π (Suc t) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω)} =
                   prob ({ω. π (Suc t) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω)}  space M)"
    and finiteness: "t{k..<n}. aA. emeasure M {ω. π (t+1) ω = a  2*ε*ln(real t)/(Δ a)^2  real (N_n t a ω)} < " 
    and measurable_set: "t{k..<n}. aA. {ω. π (t+1) ω = a  2*ε*ln(real t)/(Δ a)^2  real (N_n t a ω)}  sets M"

    and eq_sets_optimum:
         " a  A.  t  {k..<n}. {ω. π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω)} =
                  {ω  Ω. A_t_plus_1 t ω = a}  {ω  Ω. N_n t a ω  (2 * ε * ln (real t)) / (Δ a)^2}"

shows
  " a  A.  expectation (λω. real (N_n n a ω))  s n + ( t = k..<n. 2 / (real t powr ε))"

proof -

  have def_sn: " a  A. s n = (2 * ε * ln (real n)) / ((Δ a)^2)"
    using s_form by simp

  have def_st: " a  A. s t =  (2 * ε * ln (real t)) / ((Δ a)^2)" 
    using s_form by simp

  then have expression:  " a  A. expectation (λω. real (N_n n a ω))  
    (2 * ε * ln (real n)) / ((Δ a)^2) + expectation (λω. (t = k..<n.  if π (t+1) ω = a  
 (2 * ε * ln (real t)) / ((Δ a)^2)  real (N_n t a ω) then 1 else 0))" 
    using assms def_sn def_st by simp

  have eq_if_of_bool:
    " a  A. expectation (λω.  t = k..<n.
     (if π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω) then 1 else 0))
  = expectation (λω.  t = k..<n.
      of_bool (π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω)))"
    by (simp add: of_bool_def)

  have eq_indic_bool:
    " a  A. expectation (λω.  t = k..<n.
      of_bool (π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω)))
   = expectation (λω.  t = k..<n.
       indicat_real {ω. π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω)} ω)"
    by (simp add: indicator_def of_bool_def)

  have expression_1: 
    " a  A. expectation (λω.  t = k..<n.
      (if π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω) then 1 else 0)) = 
   expectation (λω.  t = k..<n.
      indicat_real {ω. π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω)} ω)"
  proof
    fix a assume "a  A"
    from eq_if_of_bool[rule_format, OF `a  A`] 
    have eq1: "expectation (λω.  t = k..<n.
         (if π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω) then 1 else 0)) =
       expectation (λω.  t = k..<n.
         of_bool (π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω)))"
      by simp

    from eq_indic_bool[rule_format, OF `a  A`] 
    have eq2: "expectation (λω.  t = k..<n.
         of_bool (π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω))) =
       expectation (λω.  t = k..<n.
         indicat_real {ω. π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω)} ω)"
      by simp

    from eq1 eq2 show 
      "expectation (λω.  t = k..<n.
        (if π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω) then 1 else 0)) =
     expectation (λω.  t = k..<n.
        indicat_real {ω. π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω)} ω)"
      by (rule trans)
  qed

  have res:" a  A. t  {k..<n}. prob_eq_Ex {ω. π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω)}"
    using assms prob_eq_Ex_def by auto

  have lin_of_expect_indicators:
    " a  A. t  {k..<n}.  prob {ω. π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω)} =
   expectation (λω. (indicat_real {ω. π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω)} ω))"
    using  prob_eq_Ex_def res by simp

  then have key_result_1: " a  A. (t = k..<n. 
expectation (λω. (indicat_real {ω. π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω)} ω)))
 = (t = k..<n. prob {ω. π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω)})"
    using  lin_of_expect_indicators by simp

  have expression_follow_up: " a  A. 
  expectation (λω.  t = k..<n. (if π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω) then 1 else 0)) =
  ( t = k..<n. prob {ω. π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω)})"
  proof -
    have res1: " a  A. 
  expectation (λω.  t = k..<n. (if π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω) then 1 else 0)) = 
 expectation (λω.  t = k..<n.
      of_bool (π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω)))"
      using eq_if_of_bool by simp

    have res2:" a  A. 
  expectation (λω.  t = k..<n. (if π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω) then 1 else 0)) = 
expectation (λω.  t = k..<n. indicat_real {ω. π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω)} ω)" 
      using expression_1 by simp

    have res3: " a  A. 
  expectation (λω.  t = k..<n. (if π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω) then 1 else 0)) = 
(  t = k..<n. expectation (λω. indicat_real {ω. π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω)} ω))" 
    proof -

      have " a  A. 
  expectation (λω.  t = k..<n. (if π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω) then 1 else 0)) = 
expectation (λω.  t = k..<n. indicat_real {ω. π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω)} ω)" 
        using res2 by blast
      then have " a  A.  expectation (λω.  t = k..<n. indicat_real {ω. π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω)} ω) = 
integralL M (λω.  t = k..<n. indicat_real {ω. π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω)} ω)"
        by simp
      then have result_intermed:" a  A.  expectation (λω.  t = k..<n. indicat_real {ω. π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω)} ω) = 
(  t = k..<n. integralL M (λω. indicat_real {ω. π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω)} ω))"
        using assms integral_sum by simp

      have result: " a  A.  expectation (λω.  t = k..<n. indicat_real {ω. π (t+1) ω = a  2 * ε *
ln (real t) / (Δ a)^2  real (N_n t a ω)} ω) = 
(  t = k..<n. expectation (λω. indicat_real {ω. π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω)} ω))"
        using result_intermed by auto
      have " a  A. 
  expectation (λω.  t = k..<n. (if π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω) then 1 else 0)) = 
expectation (λω.  t = k..<n. indicat_real {ω. π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω)} ω)" 
        using res2 by simp
      then have linearity_expectation: " a  A. 
  expectation (λω.  t = k..<n. (if π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω) then 1 else 0)) = 
(  t = k..<n. expectation (λω. indicat_real {ω. π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω)} ω))" 
        using result by simp

      then show ?thesis using linearity_expectation by simp
    qed

    have  final_linearity:" a  A. 
  expectation (λω.  t = k..<n. (if π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω) then 1 else 0)) = 
  (t = k..<n. prob {ω. π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω)})"
      using res1 res2 res3 key_result_1 by simp
    then show ?thesis using final_linearity by simp
  qed

  have intermed_result: " a  A. 
  expectation (λω. real (N_n n a ω))  
    (2 * ε * ln (real n)) / (Δ a)^2 + 
    ( t = k..<n. prob {ω. π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω)})"
    using expression_follow_up expression by simp

  then have follow_up_result: " a  A.  t  {k..<n}. 
  prob {ω. π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω)} =
  prob ({ω  Ω. A_t_plus_1 t ω = a}  {ω  Ω. N_n t a ω  (2 * ε * ln (real t)) / (Δ a)^2})"
    using expression_follow_up expression eq_sets_optimum intermed_result by simp 

  have next_result_sum_prob: " a  A. 
  ( t = k..<n. prob {ω. π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω)}) =
  ( t = k..<n. prob ({ω  Ω. A_t_plus_1 t ω = a}  {ω  Ω. N_n t a ω  (2 * ε * ln (real t)) / (Δ a)^2}))"
    using assms follow_up_result by simp

  then have next_result_fin: " a  A. 
  expectation (λω. real (N_n n a ω))  
    (2 * ε * ln (real n)) / (Δ a)^2 + 
    ( t = k..<n. prob ({ω  Ω. A_t_plus_1 t ω = a}  {ω  Ω. N_n t a ω  (2 * ε * ln (real t)) / (Δ a)^2}))"
    using expression_follow_up next_result_sum_prob expression by fastforce

  have generalized_bound:
    " a  A.  t  {k..<n}. prob ({ω  Ω. A_t_plus_1 t ω = a} 
                        {ω  Ω. N_n t a ω  (2 * ε * ln (real t)) / (Δ a)^2})  2 / (real t powr ε)"
  proof
    fix a
    assume a_in: "a  A"
    show " t  {k..<n}. prob ({ω  Ω. A_t_plus_1 t ω = a}  {ω  Ω. N_n t a ω  (2 * ε * ln (real t)) / (Δ a)^2})  2 / (real t powr ε)"
    proof
      fix t
      assume t_in: "t  {k..<n}"
      have Hprob:
        "prob ({ω  Ω. A_t_plus_1 t ω = a} 
         {ω  Ω. N_n t a ω  (2 * ln (1 / δ)) / (Δ a)^2})  2 * δ"
        using from_UCB_step2[rule_format, OF a_in t_in] by blast

      have ln_eq: "ln (1 / δ) = ε * ln (real t)"
        using choice_delta[rule_format, OF t_in] eps_pos by simp

      hence threshold_eq:
        "(2 * ln (1 / δ)) / (Δ a)^2 = (2 * ε * ln (real t)) / (Δ a)^2"
        by simp

      hence set_eq:
        "{ω  Ω. N_n t a ω  (2 * ln (1 / δ)) / (Δ a)^2} =
       {ω  Ω. N_n t a ω  (2 * ε * ln (real t)) / (Δ a)^2}"
        by auto

      from Hprob set_eq have
        "prob ({ω  Ω. A_t_plus_1 t ω = a} 
            {ω  Ω. N_n t a ω  (2 * ε * ln (real t)) / (Δ a)^2})  2 * δ"
        by simp

      moreover from choice_delta[rule_format, OF t_in] have "2 * δ = 2 / (real t powr ε)"
        by simp

      ultimately show
        "prob ({ω  Ω. A_t_plus_1 t ω = a} 
            {ω  Ω. N_n t a ω  (2 * ε * ln (real t)) / (Δ a)^2})  2 / (real t powr ε)"
        by simp
    qed
  qed

  have sum_mono_expression:
    " a  A. ( t = k..<n. prob ({ω  Ω. A_t_plus_1 t ω = a} 
                       {ω  Ω. N_n t a ω  (2 * ε * ln (real t)) / (Δ a)^2})) 
    ( t = k..<n. 2 / (real t powr ε))"
  proof
    fix a
    assume a_in: "a  A"
    show "( t = k..<n. prob ({ω  Ω. A_t_plus_1 t ω = a}  {ω  Ω. N_n t a ω  (2 * ε * ln (real t)) / (Δ a)^2})) 
    ( t = k..<n. 2 / (real t powr ε))"
      using generalized_bound a_in by (intro sum_mono) auto
  qed

  have final_result:
    " a  A. expectation (λω. real (N_n n a ω))
          (2 * ε * ln (real n)) / ((Δ a)^2) + ( t = k..<n. 2 / (real t powr ε))"
  proof
    fix a
    assume a_in: "a  A"
    from next_result_fin[rule_format, OF a_in]
    have bound1:
      "expectation (λω. real (N_n n a ω))
        (2 * ε * ln (real n)) / ((Δ a)^2)
           + ( t = k..<n. prob ({ω  Ω. A_t_plus_1 t ω = a}
                                    {ω  Ω. N_n t a ω  (2 * ε * ln (real t)) / ((Δ a)^2)}))"
      by simp
    moreover from sum_mono_expression[rule_format, OF a_in]
    have bound2:
      "( t = k..<n. prob ({ω  Ω. A_t_plus_1 t ω = a}
                            {ω  Ω. N_n t a ω  (2 * ε * ln (real t)) / ((Δ a)^2)}))
      ( t = k..<n. 2 / (real t powr ε))"
      by simp
    ultimately show
      "expectation (λω. real (N_n n a ω))
        (2 * ε * ln (real n)) / ((Δ a)^2) + ( t = k..<n. 2 / (real t powr ε))"
      by auto
  qed

  show ?thesis using assms final_result by simp

qed

theorem theorem_15_4:
  assumes
    a_in_A: "a  A"
    and "finite A"  and  "a  A. integrable M (λω. real (N_n n a ω))"
    and ω_in_Ω: "ω  Ω"
    and subopt_gap: " a  A. Δ a > 0"
    and a_not_opt: " a'  A. Δ a' > 0"
    and delta_a: " a  A. Δ a = μ a_star - μ a"
    and "k  n"
    and n_count_assm_pointwise: "(aA. real (N_n n a ω)) = real n"
    and expected_regret_prop_15_1: "expectation (λω. R_n n ω) = (aA. Δ a * expectation (λω. real (N_n n a ω)))"
    and from_UCB_step1: " a  A. expectation (λω. real (N_n n a ω)) 
       s n + expectation (λω. ( t = k..<n. if π (t+1) ω = a  s t  real (N_n t a ω) then 1 else 0))"
    and from_UCB_step2: " a  A.   t  {k..<n}. prob ({ω  Ω. A_t_plus_1 t ω = a} 
                            {ω  Ω. N_n t a ω  (2 * ln (1 / δ)) / (Δ a)^2})  2 * δ"
    and eps_pos: "ε > 0"
    and t_gt0: " t  {k..<n}. t > 0"
    and choice_delta: " t  {k..<n}. δ = 1 / (real t powr ε)"
    and s_form: " a  A.  u. s u = (2 * ε * ln (real u)) / ((Δ a)^2)"
    and subset_meas:" a  A. t  {k..<n}. ω  Ω. {ω. π (t+1) ω = a  2 * ε * ln (real t)/(Δ a)^2  N_n t a ω}  Ω"
    and  prob_eq_E_assm: " a  A. t  {k..<n}. prob {ω. π (Suc t) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω)} =
                   prob ({ω. π (Suc t) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω)}  space M)"
    and finiteness: "t{k..<n}. aA. emeasure M {ω. π (t+1) ω = a  2*ε*ln(real t)/(Δ a)^2  real (N_n t a ω)} < " 
    and measurable_set: "t{k..<n}. aA. {ω. π (t+1) ω = a  2*ε*ln(real t)/(Δ a)^2  real (N_n t a ω)}  sets M"

and eq_sets_optimum:
" a  A.  t  {k..<n}. {ω. π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω)} =
                  {ω  Ω. A_t_plus_1 t ω = a}  {ω  Ω. N_n t a ω  (2 * ε * ln (real t)) / (Δ a)^2}"
and assms_lin_expect: " a  A. expectation (λω.  t = k..<n.
        (if π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω) then 1 else 0)) =
      ( t = k..<n. expectation (λω. indicat_real {ω. π (t+1) ω = a  2 * ε * ln (real t) / (Δ a)^2  real (N_n t a ω)} ω))"
and mono_sum_sets:
" (a  A. Δ a * expectation (λω. real (N_n n a ω))  Δ a * (s n + ( t = k..<n. 2 / (real t powr ε)))) 
     (a  A. Δ a * expectation (λω. real (N_n n a ω)))  
(a  A. Δ a * (s n + ( t = k..<n. 2 / (real t powr ε))))"

shows "expectation (λω. R_n n ω)  (aA. Δ a * ((2 * ε * ln (real n)) / 
((Δ a)^2)+ ( t = k..<n. 2 / (real t powr ε))))" 
proof - 
  have exp_regret_eq:
    "expectation (λω. R_n n ω) = (aA. Δ a * expectation (λω. real (N_n n a ω)))"
    using assms by fastforce

  have result_2: " a  A. expectation (λω. real (N_n n a ω)) 
                    s n + ( t = k..<n. 2 / (real t powr ε))"
    using assms proposition_15_7  by (smt (verit, ccfv_threshold) a_star_in_A)

  have intermed_step: "a  A. Δ a * expectation (λω. real (N_n n a ω))  Δ a * (s n + ( t = k..<n. 2 / (real t powr ε)))"
  proof
    fix a assume "a  A"
    then have "expectation (λω. real (N_n n a ω))  s n + ( t = k..<n. 2 / (real t powr ε))"
      using result_2 by auto
    moreover have "0 < Δ a"
      using assms subopt_gap a  A by blast
    ultimately show "Δ a * expectation (λω. real (N_n n a ω))  Δ a * (s n + ( t = k..<n. 2 / (real t powr ε)))"
      using mult_left_mono by simp
  qed

  have intermed_step_2:"(aA. Δ a * expectation (λω. real (N_n n a ω)))  (aA. Δ a * (s n + ( t = k..<n. 2 / (real t powr ε))))"
  proof -
    have res:"aA. Δ a * expectation (λω. real (N_n n a ω))  Δ a * (s n + ( t = k..<n. 2 / (real t powr ε)))"
      using intermed_step by auto
    have res2:" (a  A. Δ a * expectation (λω. real (N_n n a ω))  Δ a * (s n + ( t = k..<n. 2 / (real t powr ε)))) 
   (a  A. Δ a * expectation (λω. real (N_n n a ω)))  (a  A. Δ a * (s n + ( t = k..<n. 2 / (real t powr ε))))"
      using res assms by fastforce
    then have intermed_step: "(aA. Δ a * expectation (λω. real (N_n n a ω)))  (aA. Δ a * (s n + ( t = k..<n. 2 / (real t powr ε))))"
      using res res2 by auto

    then show ?thesis using intermed_step by simp
  qed

  then have "expectation (λω. R_n n ω)  (aA. Δ a * (s n + ( t = k..<n. 2 / (real t powr ε))))" 
    using assms intermed_step_2 by linarith

  have "a  A. s n = (2 * ε * ln (real n)) / ((Δ a)^2)"
    using s_form by auto

  then have "expectation (λω. R_n n ω)  (aA. Δ a * ((2 * ε * ln (real n)) / 
((Δ a)^2)+ ( t = k..<n. 2 / (real t powr ε))))" 
    using assms intermed_step_2 by (metis a_star_in_A less_irrefl verit_minus_simplify(1)) 

  then show ?thesis by simp

qed


end 
end