text:
theory Linear_Programming
  imports
    "HOL-Library.Code_Target_Int"
    "LP_Preliminaries"
    Farkas.Simplex_for_Reals
begin

section \<open> Abstract LPs \<close>

(* A b c, where A leq b are the constraints and c is the objective function *)

text \<open> Primal Problem \<close>
definition "sat_primal A b = { x. [A *\<^sub>v x]\<le>b }"

text \<open> Dual Problem \<close>
definition "sat_dual A c  = {y. [y \<^sub>v* A]=c \<and> (\<forall>i<dim_vec y. y $ i \<ge> 0)}"

definition "optimal_set f S = {x \<in> S. (\<forall>y\<in> S. f x y)}"

abbreviation max_lp where
  "max_lp A b c \<equiv> optimal_set (\<lambda>x y. (y \<bullet> c) \<le> (x \<bullet> c)) (sat_primal A b)"

abbreviation min_lp where
  "min_lp A b c \<equiv> optimal_set (\<lambda>x y. (y \<bullet> c) \<ge> (x \<bullet> c)) (sat_dual A c)"

lemma optimal_setI[intro]:
  assumes "x \<in> S"
  assumes "\<And>y. y \<in> S \<Longrightarrow> (\<lambda>x y. (y \<bullet> c) \<ge> (x \<bullet> c)) x y"
  shows "x \<in> optimal_set (\<lambda>x y. (y \<bullet> c) \<ge> (x \<bullet> c)) S"
  unfolding optimal_set_def using assms
  by blast

lemma max_lpI [intro]:
  assumes "[A *\<^sub>v x]\<le>b"
  assumes "(\<And>y. [A *\<^sub>v y]\<le>b \<Longrightarrow> (\<lambda>x y. (y \<bullet> c) \<ge> (x \<bullet> c)) y x)"
  shows "x \<in> max_lp A b c"
  using optimal_setI[of x "{ x. [A *\<^sub>v x]\<le>b }" c]
  unfolding optimal_set_def optimal_setI
  by (simp add: assms(1) assms(2) sat_primal_def)

lemma min_lpI [intro]:
  assumes "[y \<^sub>v* A]=c"
    and "(\<And>i. i<dim_vec y \<Longrightarrow> y $ i \<ge> 0)"
  assumes "(\<And>x. x \<in> sat_dual A c \<Longrightarrow> (\<lambda>x y. (y \<bullet> c) \<ge> (x \<bullet> c)) y x)"
  shows "y \<in> min_lp A b c"
  using optimal_setI[of y "sat_dual A c" c]
  unfolding optimal_set_def optimal_setI sat_dual_def
  by (simp add: assms(1) assms(2) assms(3) sat_dual_def)

lemma sat_primalD [dest]:
  assumes "x \<in> sat_primal A b"
  shows "[A *\<^sub>v x]\<le>b"
  using assms sat_primal_def by force

lemma sat_primalI [intro]:
  assumes "[A *\<^sub>v x]\<le>b"
  shows "x \<in> sat_primal A b"
  using assms sat_primal_def by force

lemma sat_dualD [dest]:
  assumes "y \<in> sat_dual A c"
  shows "[y \<^sub>v* A]=c" "(\<forall>i<dim_vec y. y $ i \<ge> 0)"
  using assms sat_dual_def apply force
  using assms sat_dual_def by force

lemma sat_dualI [intro]:
  assumes "[y \<^sub>v* A]=c" "(\<forall>i<dim_vec y. y $ i \<ge> 0)"
  shows "y \<in> sat_dual A c"
  using assms sat_dual_def by auto

lemma sol_dim_in_sat_primal: "x \<in> sat_primal A b \<Longrightarrow> dim_vec x = dim_col A"
  unfolding mat_times_vec_leq_def by (simp add: mat_times_vec_leq_def sat_primal_def)

lemma sol_dim_in_max_lp: "x \<in> max_lp A b c \<Longrightarrow> dim_vec x = dim_col A"
  unfolding optimal_set_def using sol_dim_in_sat_primal[of x A b] by blast

lemma sol_dim_in_sat_dual: "x \<in> sat_dual A c \<Longrightarrow> dim_vec x = dim_row A"
  unfolding mat_times_vec_leq_def by (simp add: sat_dual_def vec_times_mat_eq_def)

lemma sol_dim_in_min_lp: "x \<in> min_lp A b c \<Longrightarrow> dim_vec x = dim_row A"
  unfolding optimal_set_def using sol_dim_in_sat_dual[of x A] by blast

lemma min_lp_in_sat_dual: "x \<in> min_lp A b c \<Longrightarrow> x \<in> sat_dual A c"
  unfolding optimal_set_def using sol_dim_in_sat_dual[of x A] by blast

lemma max_lp_in_sat_primal: "x \<in> max_lp A b c \<Longrightarrow> x \<in> sat_primal A b"
  unfolding optimal_set_def using sol_dim_in_sat_dual[of x A] by blast

locale abstract_LP =
  fixes A :: "('a::{comm_semiring_1,ordered_semiring,linorder}) mat"
  fixes b :: "'a vec"
  fixes c :: "'a vec"
  fixes m
  fixes n
  assumes "b \<in> carrier_vec m"
  assumes "c \<in> carrier_vec n"
  assumes "A \<in> carrier_mat m n"
begin

lemma dim_b_row_A: "dim_vec b = dim_row A"
  using abstract_LP_axioms abstract_LP_def carrier_matD(1) carrier_vecD
  by metis

lemma dim_b_col_A: "dim_vec c = dim_col A"
  using abstract_LP_axioms abstract_LP_def carrier_matD(2) carrier_vecD
  by metis

lemma weak_duality_aux:
  fixes i j
  assumes "i \<in> {c \<bullet> x |x. x \<in> sat_primal A b}"
    and "j \<in> {b \<bullet> y |y. y \<in> sat_dual A c}"
  shows "i \<le> j"
proof -
  obtain x where x: "i = c \<bullet> x" "[A *\<^sub>v x]\<le>b"
    using assms by blast
  obtain y where y: "j = b \<bullet> y" "[y \<^sub>v* A]=c" "(\<forall>i<dim_vec y. 0 \<le> y $ i)"
    using assms by blast
  have d1: "dim_vec x = n" using mat_times_vec_leq_def[of A x b] x
    by (metis abstract_LP_axioms abstract_LP_def carrier_matD(2))
  have d2: "dim_vec y = m"
    by (metis abstract_LP_axioms abstract_LP_def carrier_matD(1) index_transpose_mat(3) vec_times_mat_eq_def y(2))
  have "i = c \<bullet> x" using x by auto
  also have "... = (A\<^sup>T *\<^sub>v y) \<bullet> x"
    using mult_right_eq carrier_vecD y abstract_LP_def
    by (metis abstract_LP_axioms calculation d1)
  also have "... = (A *\<^sub>v x) \<bullet> y"
    using assoc_scalar_prod_mult_mat_vec[symmetric, of y m x n A] abstract_LP_axioms abstract_LP_def d1 d2
      carrier_vec_dim_vec by blast
  also have "... \<le> b \<bullet> y"
    using mult_right_leq
    by (metis index_transpose_mat(3) mat_times_vec_leq_def vec_times_mat_eq_def x(2) y(2) y(3))
  also have "... = j" using y by simp
  finally show "i \<le> j" .
qed

theorem weak_duality_theorem:
  assumes "x \<in> max_lp A b c"
  assumes "y \<in> min_lp A b c"
  shows "x \<bullet> c \<le> y \<bullet> b"
proof -
  define i where i: "i = x \<bullet> c"
  define j where j: "j = y \<bullet> b"
  have dx: "dim_vec x = n"
    using sol_dim_in_max_lp[of x c A b, OF assms(1)] abstract_LP_axioms abstract_LP_def
      carrier_matD(2) by blast
  have dy: "dim_vec y = m"
    using sol_dim_in_min_lp[of y c A, OF assms(2)]  abstract_LP_axioms abstract_LP_def
      carrier_matD(1) by blast
  have *: "i \<in> {c \<bullet> x |x. [A *\<^sub>v x]\<le>b}" using assms(1) unfolding optimal_set_def dx sat_primal_def
    using abstract_LP_axioms abstract_LP_def carrier_vec_dim_vec comm_scalar_prod dx i by blast
  have **: "j \<in> {b \<bullet> y |y. [y \<^sub>v* A]=c \<and> (\<forall>i < dim_vec y. y$i \<ge> 0)}"
    using assms(2) unfolding optimal_set_def using abstract_LP_axioms abstract_LP_def
      carrier_vec_dim_vec comm_scalar_prod dy j by blast
  from weak_duality_aux[of i j] have "i \<le> j" unfolding sat_primal_def sat_dual_def
    using "*" "**" by blast
  then show ?thesis using i j by auto
qed

end

fun create_optimal_solutions where
  "create_optimal_solutions A b c =
        (case simplex (x_times_c_geq_y_times_b c b #
                                      mat_leqb_eqc A b c @
                                      from_index_geq0_vector (dim_vec c) (0\<^sub>v (dim_vec b)))
                                    of
                                      Unsat X \<Rightarrow> Unsat X
                                      | Sat X \<Rightarrow> Sat X)"

fun optimize_no_cond where "optimize_no_cond A b c = (case create_optimal_solutions A b c of
                          Unsat X \<Rightarrow> Unsat X
                        | Sat X \<Rightarrow>  Sat (fst (split_n_m_x (dim_vec c) (dim_vec b) X)))"

lemma create_opt_sol_satisfies:
  assumes "create_optimal_solutions A b c = Sat X"
  shows "\<langle>X\<rangle> \<Turnstile>\<^sub>c\<^sub>s set ((x_times_c_geq_y_times_b c b # mat_leqb_eqc A b c @
                      from_index_geq0_vector (dim_vec c) (0\<^sub>v (dim_vec b))))"
proof -
  have "simplex (x_times_c_geq_y_times_b c b # mat_leqb_eqc A b c @
        from_index_geq0_vector (dim_vec c) (0\<^sub>v (dim_vec b))) = Sat X"
  proof (rule ccontr)
    assume "simplex (x_times_c_geq_y_times_b c b # mat_leqb_eqc A b c @ from_index_geq0_vector (dim_vec c) (0\<^sub>v (dim_vec b))) \<noteq> Inr X"
    then have "\<exists>e. simplex (x_times_c_geq_y_times_b c b # mat_leqb_eqc A b c @ from_index_geq0_vector (dim_vec c) (0\<^sub>v (dim_vec b))) = Unsat e"
      by (metis assms create_optimal_solutions.simps sum.case(2) sumE)
    then have "\<exists>e. create_optimal_solutions A b c = Unsat e"
      using assms option.split by force
    then show False using assms(1) assms by auto
  qed
  then show ?thesis using simplex(3) by blast
qed

lemma create_opt_sol_sat_leq_mat:
  assumes "dim_vec b = dim_row A"
  assumes "create_optimal_solutions A b c = Sat X"
    and "(x, y) = split_i_j_x (dim_col A) (dim_vec b) X"
  shows "[A *\<^sub>v x]\<le>b"
proof -
  have *: "\<langle>X\<rangle> \<Turnstile>\<^sub>c\<^sub>s set (mat_leqb_eqc A b c)"
    using create_opt_sol_satisfies[of A b c X] sat_mono[of "(mat_leqb_eqc A b c)" _ X]
    using assms(2) by (metis append_Cons append_assoc in_set_conv_decomp)
  then show ?thesis using mat_leqb_eqc_split_correct1[of b A c X x y, OF assms(1) *] assms
    by blast
qed

lemma create_opt_sol_sat_eq_mat:
  assumes "dim_vec c = dim_row A\<^sup>T"
    and "dim_vec b = dim_col A\<^sup>T"
  assumes "create_optimal_solutions A b c = Sat X"
    and "(x, y) = split_i_j_x (dim_vec c) (dim_vec c + dim_vec b) X"
  shows "[y \<^sub>v* A]=c"
proof -
  have *: "\<langle>X\<rangle> \<Turnstile>\<^sub>c\<^sub>s set (mat_leqb_eqc A b c)"
    using create_opt_sol_satisfies[of A b c X] sat_mono[of "(mat_leqb_eqc A b c)" _ X]
      assms(2) assms by (metis UnCI list.set_intros(2) set_append)
  have "dim_row A\<^sup>T = dim_vec c"
    using assms(1) by linarith
  moreover have "dim_col A\<^sup>T = dim_vec b"
    by (simp add: assms(2))
  ultimately show ?thesis
    using assms by (metis mat_leqb_eqc_split_correct2[of c A b X x y, OF assms(1) assms(2) *]
        \<open>dim_vec b = dim_col A\<^sup>T\<close> \<open>dim_vec c = dim_row A\<^sup>T\<close>)
qed

lemma create_opt_sol_satisfies_leq:
  assumes "create_optimal_solutions A b c = Sat X"
  assumes "(x, y) = split_n_m_x (dim_vec c) (dim_vec b) X"
  shows "x \<bullet> c \<ge> y \<bullet> b"
  using create_opt_sol_satisfies[of A b c X]
  by (metis assms(1) assms(2) carrier_vec_dim_vec comm_scalar_prod list.set_intros(1)
      split_n_m_x_abbrev_dims(2) split_vec_dims(1) x_times_c_geq_y_times_b_split_dotP)

lemma create_opt_sol_satisfies_geq0:
  assumes "create_optimal_solutions A b c = Sat X"
  assumes "(x, y) = split_n_m_x (dim_vec c) (dim_vec b) X"
  shows "\<And>i. i < dim_vec y \<Longrightarrow> y$i \<ge> 0"
proof -
  fix i
  assume "i < dim_vec y"
  have *: "\<langle>X\<rangle> \<Turnstile>\<^sub>c\<^sub>s set (from_index_geq0_vector (dim_vec c) (0\<^sub>v (dim_vec b)))"
    using assms(1) create_opt_sol_satisfies by (metis UnCI append_Cons set_append)
  have **: "i < dim_vec b"
    by (metis \<open>i < dim_vec y\<close> assms(2) split_n_m_x_abbrev_dims(2))
  then show "0 \<le> y $ i"
    using from_index_geq0_vector_split_snd[of "dim_vec c" "0\<^sub>v (dim_vec b)" X x y
        "dim_vec b" i, OF * assms(2)] by simp
qed

locale rat_LP = abstract_LP A b c m n
  for A ::"rat mat"
    and b :: "rat vec"
    and c :: "rat vec"
    and m  :: "nat"
    and n  :: "nat"
begin

lemma create_opt_sol_in_LP:
  assumes "create_optimal_solutions A b c = Sat X"
  assumes "(x, y) = split_n_m_x (dim_vec c) (dim_vec b) X"
  shows "[A *\<^sub>v x]\<le>b" "[y \<^sub>v* A]=c" "x \<bullet> c \<ge> y \<bullet> b" "\<And>i. i < dim_vec y \<Longrightarrow> y$i \<ge> 0"
  apply (metis Pair_inject assms(1) assms(2) create_opt_sol_sat_leq_mat dim_b_col_A dim_b_row_A split_i_j_x_def)
  using assms(1) assms(2) create_opt_sol_sat_eq_mat dim_b_col_A dim_b_row_A
    apply (metis index_transpose_mat(2) index_transpose_mat(3))
  using assms(1) assms(2) create_opt_sol_satisfies_leq apply blast
  using assms(1) assms(2) create_opt_sol_satisfies_geq0 by blast

lemma create_optim_in_sols:
  assumes "create_optimal_solutions A b c = Sat X"
  assumes "(x, y) = split_n_m_x (dim_vec c) (dim_vec b) X"
  shows "c \<bullet> x \<in> {c \<bullet> x |x. [A *\<^sub>v x]\<le>b}"
    "b \<bullet> y \<in> {b \<bullet> y |y. [y \<^sub>v* A]=c \<and> (\<forall>i < dim_vec y. y$i \<ge> 0)}"
  using assms(1) assms(2) create_opt_sol_in_LP(1) apply blast
  using assms(1) assms(2) create_opt_sol_in_LP(2) create_opt_sol_in_LP(4) by blast

lemma cx_leq_bx_in_creating_opt:
  assumes "create_optimal_solutions A b c = Sat X"
  assumes "(x, y) = split_n_m_x (dim_vec c) (dim_vec b) X"
  shows "c \<bullet> x \<le> b \<bullet> y"
  using weak_duality_aux[of "c \<bullet> x" "b \<bullet> y"]  create_optim_in_sols[of X x y, OF assms] by auto

lemma min_max_for_sol:
  assumes "create_optimal_solutions A b c = Sat X"
  assumes "(x, y) = split_n_m_x (dim_vec c) (dim_vec b) X"
  shows "c \<bullet> x = b \<bullet> y"
  using create_opt_sol_in_LP(3)[of X x y, OF assms] cx_leq_bx_in_creating_opt[OF assms]
    comm_scalar_prod[of c "dim_vec c" x] comm_scalar_prod[of b "dim_vec b" y]
  by (metis add_diff_cancel_left' antisym assms(2) carrier_vec_dim_vec split_vec_dims(1) split_vec_dims(2))

lemma create_opt_solutions_correct:
  assumes "create_optimal_solutions A b c = Sat X"
  assumes "(x, y) = split_n_m_x (dim_vec c) (dim_vec b) X"
  shows "x \<in> max_lp A b c"
proof
  show "[A *\<^sub>v x]\<le>b"
    using assms(1) assms(2) create_opt_sol_in_LP(1) by blast
  fix z
  assume a: "[A *\<^sub>v z]\<le>b"
  have 1: "c \<bullet> z \<in> {c \<bullet> x |x. x \<in> sat_primal A b}"
    using sat_primalI[of A z b, OF a] by blast
  have 2: "b \<bullet> y \<in> {b \<bullet> y |y. y \<in> sat_dual A c}"
    using sat_dualI
    by (metis (mono_tags, lifting) assms(1) assms(2) create_opt_sol_in_LP(2)
        mem_Collect_eq rat_LP.create_opt_sol_in_LP(4) rat_LP_axioms)
  then have "c \<bullet> z \<le> b \<bullet> y"
    using weak_duality_aux[of "c \<bullet> z" "b \<bullet> y", OF 1 2] sat_primalI[of A z b, OF a] by blast
  also have "... = x \<bullet> c"
    by (metis assms(1) assms(2) carrier_vec_dim_vec comm_scalar_prod
        min_max_for_sol split_n_m_x_abbrev_dims(1))
  finally show "z \<bullet> c \<le> x \<bullet> c"
    by (metis a carrier_vec_dim_vec comm_scalar_prod dim_b_col_A mat_times_vec_leqD(2))
qed

lemma optimize_no_cond_correct:
  assumes "optimize_no_cond A b c = Sat x"
  shows "x \<in> max_lp A b c"
proof -
  obtain X where X: "create_optimal_solutions A b c = Sat X"
    by (metis Inr_Inl_False assms old.sum.exhaust old.sum.simps(5) optimize_no_cond.simps)
  have "x = (fst (split_n_m_x (dim_vec c) (dim_vec b) X))"
    using X assms by (metis old.sum.inject(2) old.sum.simps(6) optimize_no_cond.simps)
  then show ?thesis
    using create_opt_solutions_correct[of X x] by (metis X fst_conv old.prod.exhaust)
qed

lemma optimize_no_cond_sol_sat:
  assumes "optimize_no_cond A b c = Sat x"
  shows "x \<in> sat_primal A b"
  using max_lp_in_sat_primal[OF optimize_no_cond_correct[OF assms]] by auto

end (* end of \<open> rat_LP \<close> *)

fun maximize where
  "maximize A b c = (if dim_vec b = dim_row A \<and> dim_vec c = dim_col A then
                      Some (optimize_no_cond A b c)
                    else None)"

lemma optimize_sound:
  assumes "maximize A b c = Some (Sat x)"
  shows "x \<in> max_lp A b c"
proof -
  have *: "dim_vec b = dim_row A \<and> dim_vec c = dim_col A"
    by (metis assms maximize.simps option.distinct(1))
  then interpret rat: rat_LP A b c "dim_vec b" "dim_vec c"
    by (metis abstract_LP_def carrier_mat_triv carrier_vec_dim_vec rat_LP.intro)
  have "Sat x = optimize_no_cond A b c"
    using assms * by auto
  then show ?thesis
    by (simp add: rat.optimize_no_cond_correct)
qed

lemma maximize_option_elim:
  assumes "maximize A b c = Some x"
  shows "dim_vec b = dim_row A" "dim_vec c = dim_col A"
  by (metis assms maximize.simps option.distinct(1))+

lemma optimize_sol_dimension:
  assumes "maximize A b c = Some (Sat x)"
  shows "x \<in> carrier_vec (dim_col A)"
  using assms carrier_dim_vec max_lp_in_sat_primal optimize_sound sol_dim_in_sat_primal by blast

lemma optimize_sat:
  assumes "maximize A b c = Some (Sat x)"
  shows "[A *\<^sub>v x]\<le>b"
  using assms maximize_option_elim[OF assms]
    max_lp_in_sat_primal[OF optimize_sound[of A b c x, OF assms]] by blast

derive (eq) ceq rat
derive (linorder) compare rat
derive (compare) ccompare rat
derive (rbt) set_impl rat

derive (eq) ceq atom QDelta
derive (linorder) compare_order QDelta
derive compare_order atom
derive ccompare atom QDelta
derive (rbt) set_impl atom QDelta

(*export_code maximize mat_of_cols_list mat_of_rows_list mat_of_cols vec_of_list quotient_of Inr Inl Some None list_of_vec nat
Rat.Fract int_of_integer in Haskell module_name LP  file "/home/julian/coding/ForGET/LPBenchmarks/HaskellLP/src"
*)
(*
export_code  maximize mat_of_cols_list mat_of_rows_list mat_of_cols vec_of_list quotient_of Inr Inl Some None list_of_vec nat
Rat.Fract int_of_integer in Scala
*)

(*
section \<open> Testing \<close>
lemma "(let A = mat_of_rows 3 (map vec_of_list [[1, 12, 2], [1, 5, 9], [-1,0,0], [0,-1,0],[0,0,-1]]) in
       (let b = vec_of_list [10000, 8539,0,0,0] in
       (let c = vec_of_list [100, 600, 400] in
       maximize A b c))) =  Some (Inr (vec_of_list [52468 / 7, 1461 / 7, 0]))"
  by eval

lemma "(let A = mat_of_cols 4 (map vec_of_list [[2::rat, -1, -1, 1/2], [1, 2, -1, -1/2]]) in
       (let b = vec_of_list [5, 2, -1, 1/2] in
       (let c = vec_of_list [7, 1::rat] in
       maximize A b c))) = Some (Inr (vec_of_list [2::rat, 1]))"
  by eval
*)

(*
value "(let A = mat_of_cols_list 4 [[-1::rat, -1, -0, 1], [1, -1, -1, -2]] in
       (let b = vec_of_list [1, -2, -0, 4] in
       (let c = vec_of_list [-2, 1::rat] in
       maximize A b c)))"

value "(let A = mat_of_cols 4 (map vec_of_list [[2::rat, 2, -1, 0], [3, 1, 0, -1]]) in
       (let b = vec_of_list [1500::rat,1000,0,0] in
       (let c = vec_of_list [50, 40::rat] in
       maximize A b c)))"
 (*  Sol should be 375, 250 *)

value "(let A = mat_of_cols 2 (map vec_of_list [[-1::rat, 1], [-1,-1]]) in
       (let b = vec_of_list [2::rat, 2] in
       (let c = vec_of_list [0, 1::rat] in
       maximize A b c)))"
  (* Sol should be 375, 250 *)

value "(let A = mat_of_rows 2 (map vec_of_list [[2::rat,3],[2, 1], [-1,0],[0,-1]]) in
       (let b = vec_of_list [1500::rat,1000,0,0] in
       (let c = vec_of_list [50, 40::rat] in
       maximize A b c)))"
  (* Sol should be 375, 250 *)
*)

lemma of_rat_val: "simplex cs = (Sat v) \<Longrightarrow> of_rat_val \<langle>v\<rangle> \<Turnstile>\<^sub>r\<^sub>c\<^sub>s set cs"
  using of_rat_val_constraint simplex_real(3) by blast

end

subset_name: curated


TITLE: Does SR treat time and space symmetrically? Then why does $t$ dilate while $\ell$ contracts?
QUESTION [3 upvotes]: Can you resolve this paradox: Time and space are supposed to be treated symmetrically in SR, yet time dilates while length contracts. I've been working on this for weeks, and I can't resolve it.
The mirror experiment shows that time and space both expand for the moving observer, in contradiction to the results one derives from the LT, yet a well-known text, Eisberg's Fundamentals of Modern Physics (pp. 20-21) incorrectly concludes the usual asymmetrical results from that, by changing the definition of time dilation! He defines it as meaning that time measured in the moving frame is longer, when tau is actually well-known to be shorter. Time dilation refers to the mover's time UNITS LOOKING longer to the stationary observer because the total number of time units is FEWER, the opposite situation from the mirror experiment.

REPLY [0 votes]: I want to answer this in terms of the Lorentz transformation equations because that is why I was originally confused. If $x$ and $t$ are treated symmetrically in the equations, how can we see that length contracts but time dilates?
The transformation equations are:
$$ x' = \gamma (x - vt) $$
$$ t' = \gamma (t - vx/c^2) $$
(where our frame is unprimed and the primed frame is the rest frame of a moving object).
If we are measuring the length of the object, we measure both ends at the same time in our frame. So $\Delta t = 0$. Therefore $\Delta x' = \gamma (\Delta x - v \Delta t) = \gamma \Delta x$. The length we observe is $\Delta x = \Delta x' / \gamma$, from which we see that the length appears to be contracted.
Let's rewrite the Lorentz transformation equations in the following way (which involves either some messy algebra, or realizing that the reverse transformation is just a Lorentz transformation with the sign of $v$ reversed):
$$ x = \gamma (x' + vt') $$
$$ t = \gamma (t' + vx'/c^2) $$
Now we want to measure a time interval for a clock attached to the moving object. To do that, we consider two times at the same position in the object's rest frame. So $\Delta x' = 0$, and we find that $\Delta t = \gamma \Delta t'$. This is the equation for time dilation.


TITLE: $\ell x = 0$ for all $\ell \in X'$ for banach spaces
QUESTION [5 upvotes]: I guess this is probably asked before but I can not find it.
Let $X$ be a Banach space, and let $\ell x = 0$ for all $\ell \in X'$.
Then $x = 0$
If all projections $\pi_\alpha x = 0$ and hence get
"all coordinates" equal zero. But that probably not hold and I read you need Hahn-banach to prove it.

REPLY [2 votes]: An interesting addendum.  For general Banach space, the Hahn-Banach theorem, or some other consequene of the Axiom of Choice, is required to prove this.  In plain ZF set theory it cannot be proved.  A nice example:
$X = l^\infty/c_0$, a fairly concrete Banach space.  Certainly $X$ has nonzero elements (for example, the equivalence class of $(1,1,1,\dots)$).  But (in only ZF) one cannot show that $X$ has any nonzero linear functionals at all.


TITLE: Composition of two reflections (non-parallel lines) is a rotation
QUESTION [2 upvotes]: I am trying to prove that the composition of two reflections in non-parallel lines (i.e. lines that intersect) is a rotation.
From observation I can see that using $L_1$ as the $x$-axis and $L_2$ as the $y$-axis (so the angle $\theta = \frac{\pi}{2}$) that the composition $r_{L_1L_2}$ is a rotation around the origin (the point of intersect) by $\pi$ ($= 2\theta$).
How can I prove that the composition of any reflections (not just my example) is a rotation? Any pointers are appreciated.

REPLY [2 votes]: Note $L_i^t=-L_i$. Moreover, $L_i^2=I$, since $L_i$ is a reflection. Therefore $L_1L_2(L_1L_2)^t=L_1L_2[(-L_2)(-L_1)]=L_1L_2L_2L_1=L_1IL_1=L_1^2=I$, and similary $(L_1L_2)^tL_2L_1=I$. Thus $(L_1L_2)^{-1}=(L_1L_2)^t$ and $\mathrm{det}(L_1L_2)=1$. Hence $L_1L_2$ is a rotation.
Note that in the case of the lines to be parallel, then the rotation is simply the identity matrix (trivial rotation).


TITLE: Groups of order $pq$ without using Sylow theorems
QUESTION [18 upvotes]: If $|G| = pq$,  $p,q$ primes, $p \gt q, q \nmid p-1 $, then how do I prove $G$ is cyclic without using Sylow's theorems?

REPLY [1 votes]: This doesn't use any Sylow, as desired.
In general, if $|G|=pq$, with $p$ and $q$ distinct primes, then $G$ has center either trivial or the whole group (see here).
If $Z(G)$ is trivial, then the Class Equation reads:
$$pq=1+k_pp+k_qq \tag 1$$
where $k_i$ are the number of conjugacy classes of size $i$.  Now,  there are exactly $k_qq$ elements of order $p$ (they are the ones in the conjugacy classes of size $q$)$^\dagger$. Since each subgroup of order $p$ contributes $p-1$ elements of order $p$, and two subgroups of order $p$ intersect trivially, then $k_qq=m(p-1)$ for some positive integer $m$ such that $q\mid m$ (because by assumption $q\nmid p-1$).
Therefore, $(1)$ yields:
$$pq=1+k_pp+m'q(p-1) \tag 2$$
for some positive integer $m'$; but then $q\mid 1+k_pp$, namely $1+k_pp=nq$ for some positive integer $n$, which replaced in $(2)$ yields:
$$p=n+m'(p-1) \tag 3$$
In order for $m'$ to be a positive integer, it must be $n=1$ (which in turn implies $m'=1$). So, $1+k_pp=q$: but this is a contradiction, because $p\nmid q-1$ for $p>q$. So we are left with $G$ Abelian, and hence (Cauchy) cyclic.

$^\dagger$An element lies in a conjugacy class of size $q$ (respectively, $p$) if and only if its order is $p$ (respectively, $q$). This claim follows from the Orbit-Stabilizer Theorem and the fact that, for $g\in G\setminus\{e\}$, it is $\langle g\rangle=C_G(g)$.


TITLE: A is a matrix, using Euclidean norm, why $\inf\{C\geq 0:||Ah||\leq C||h||$ for all $h\in\mathbb{R^n}\}=\sup\{||Ah||:h\in\mathbb{R^n}, ||h||=1\}$
QUESTION [1 upvotes]: I'm reading Duistermaat's Multidimensional Real Analysis, on Page 40, it says:
The Euclidean norm (defined as $(\sum a_{ij}^2)^{1/2}$) of a linear operator $A$ is easy to to compute, but has the disadvantage of not giving the best possible estimate in inequality $||Ah||\leq ||A||_{eucl}||h||$, which would be
$\inf\{C\geq 0:||Ah||\leq C||h|| $ for all $ h\in\mathbb{R^n}\}$. (1)
It is easy to verify that this number is equal to the operator norm $||A||$ of $A$, give by
$\sup\{||Ah||:h\in\mathbb{R^n}, ||h||=1\}$. (2)
I don't understand why (1) is equal to (2)?

REPLY [0 votes]: Let $$G=\inf \left\{C\geq 0:\frac{\|Ah\|}{\|h\|}\leq C \text{ for all }  h \in \mathbb{R}^n \setminus \{0\} \right\}$$
and $$L=\sup \left\{\frac{\|Ah\|}{\|h\|}: h \neq 0 \right\}.$$
Let $\varepsilon>0$ be given.
We may find $h \in \mathbb{R}^n \setminus \{0\}$  such that
$$ L < \frac{\|Ah\|}{\|h\|}+\varepsilon.$$
Having found $h$, we may then find $C \geq 0$ so that
$$ \frac{\|Ah\|}{\|h\|}- \varepsilon \leq C - \varepsilon<G.$$
Since $\|Ah\|/\|h\| \leq L$ for all $h \in \mathbb{R}^n \setminus \{0\}$, we have $G \leq L$.
We combine to see that we have
$$L-2\varepsilon<\frac{\|Ah\|}{\|h\|}- \varepsilon < G \leq L.$$
Since $\varepsilon>0$ was arbitrary, we are left to conclude that $G=L$.
Note:

If we have $\|Ah\| \leq G\|h\|$ for all $h \in \mathbb{R}^n \setminus \{0\}$, then we have $\|Ah\| \leq G\|h\|$ for all $h \in \mathbb{R}^n$ since $\|A0\| =0 = G\|0\|$.

For $h \neq 0$ we have $h/\|h\|=1$.


TITLE: Does $\int_{\frac{1}{2}-i\infty}^{\frac{1}{2}+i\infty}\frac{\log (\left| \cos(s)\right|)}{ \left| s \right|^2}dt$ converge? Can you evaluate it?
QUESTION [0 upvotes]: Let $s=\sigma+it$ the complex variable, after I read the statement of an equivalence to an unsolved problem involving the Riemann Zeta function, and since I would like to know more facts from comparisons between $\zeta(s)$ and simple functions I thought this

Question. Evaluate
  $$\int_{\frac{1}{2}-i\infty}^{\frac{1}{2}+i\infty}\frac{\log (\left| \cos(s)\right|)}{ \left| s \right|^2}dt.$$

That is, in our integrand  $\log (\left| \cos(s)\right|$ is the natural logarithm of the modulus of the complex cosine $\cos(s)=\cos(\sigma+it)$, and in the denominator $\left| s \right|^2=\left| \sigma+it \right|^2$, from the notation of our complex variable.
I don't know how start to study this. Is well-possed (does converge)? I know easy facts like to calculate the modulus of our cosine. Can you get an approximation or get the exact value of this integral? Many thanks.

REPLY [1 votes]: Look at the integral
$$\int_{1/2-i T}^{1/2+i T} dt \frac{\log{(|\cos{(1/2+i t)}|)}}{1/4+t^2} $$
$$\cos{(1/2+i t)} = \cos{(1/2)} \cosh{t} - i \sin{(1/2)} \sinh{t}$$
$$|\cos{(1/2+i t)}|^2 = \cos^2{(1/2)} \cosh^2{t} + \sin^2{(1/2)} \sinh^2{t} $$
$$\log{(|\cos{(1/2+i t)}|)} = \frac12 \log{(\cos^2{(1/2)} \cosh^2{t} + \sin^2{(1/2)} \sinh^2{t} )} $$
As $T \to \infty$, each of the cosh and sinh terms look like $\frac14 e^{2 t}$, so the log becomes a linear term in $t$.  Thus, the integral diverges logarithmically.


TITLE: Electromagnet as a consequence of special relativity
QUESTION [1 upvotes]: We all have been given examples and the visualisations that electricity and magnetism are the same thing viewed from different references and that one can be transformed into the other. In relation to this view, I have seen in many places that the electromagnet is described in terms of special relativity. It says that, suppose there is a metal wire, it has tons of positive nuclei surrounded by a lot of negative free electrons(the wire is metallic). Suppose a positive charge is brought nearby, from common sense there will not be any force on positive charge since the wire is over neutral.
Now suppose a current is set up in the horizontal wire in the  left direction, still there is no force on our positive charge(experimentally it can easily be seen). But now the positive charge starts to move in the right direction, and as we know that a current carrying wire applies a force to moving charges but not stationary charges. Now a very simple explanation for this phenomenon is by assuming that a magnetic field is set up due to current in the wire and that applies a force on the moving charge. And according to Fleming's left-hand rule the positive charge will be repelled from the wire. But if we think it in the relatively sense, we are given the explanation that when the positive charge is in motion, special relativity comes into play(even though the results are tiny due to small velocity) and from charge's frame of reference the protons(positive charged nuclei) are in left direction motion with relative velocity greater than that of elections in reference of the positive charge, so they will be ever so slightly more compressed than the electrons, and thus there will be a net increase of positive charge density in the wire and as a consequence the positive charge is said to be  repelled and that is exactly what we get from experiment. Also if now the current is set up in right direction and same way the positive charge is given velocity at right , from Fleming's left-hand rule we find now the charge is attracted towards the wire. So this time from relativity point of view the electrons in the wire are moving in leftdirection to cause a current in right direction , and for the charge moving in right direction the relative velocity of electrons is more that that of protons, the electrons will appear to the charge to be more compressed than the protons and thus there will be a net increase in the negative charge density in the wire and the positive charge will be attracted, which is what experiment concludes.
Now my question is very simple!
The moment the current is set up in the wire, and the positive charge is at rest. From experiments we see that there is no force on the positive charge whatsoever. But can't it be imagined that in this case only electons are moving with respect to the charge and so they will be slightly appear to be compressed and so there should be a net increase in the negative charge density in the wire and thus the positive charge should be attracted. But this does not happen experimentally.
Can anyone kindly explain why this relativistic explanation of magnetism fails here, or is there a way to correctly apply that even in this case so that the theory of relatively comes in agreement with the observed phenomenon???

REPLY [1 votes]: But can't it be imagined that in this case only electons are moving with respect to the charge and so they will be slightly appear to be compressed and so there should be a net increase in the negative charge density in the wire

Yes, you are exactly correct here. They are in fact slightly compressed and with a resulting increased charge density compared to the electron’s rest frame. So the question is what is the charge density in the electron’s rest frame?
Naively you might think that the charge density of the electrons in the electron’s frame is the same as the charge density of the protons in the proton’s rest frame. However, there is no physical reason why that should be the case, the electrons are not rigidly bound to each other at a fixed distance, and in fact their proper separation is easy to change, it is essentially a free parameter which can be adjusted to meet the conditions of the scenario.
So what is the relevant condition? It is the fact that the wire is uncharged in the proton’s frame. The separation in the electron’s frame is the distance necessary so that the wire is uncharged in the proton’s frame. Thus, when the separation is contracted and the charge density increased compared to the electron’s frame, the force on the external proton at rest remains 0, in accordance with observation.
It may seem bizarre that the charge density in the electron’s rest frame just happens to be the right amount to have 0 net charge in the wire frame. Why not some other value than 0? It turns out that this is not a general fact of nature, but is under experimental control. If the wire is kept at a high positive voltage then due to its self capacitance the net charge will be greater than 0, and vice versa if the wire is at a strong negative voltage.


TITLE: Transfomation of one coordinate system to a another
QUESTION [0 upvotes]: I have a molecule with one coordinate system ( denote as x,y,z ) where the origin is  center of mass of the molecule. I have to define another coordinate system (p,q,r) for a local motion. (shown in the figure.) I know the unit vectors of p,q,r axises respective to x,y,z coordinates and origin of the p,q,r coordinate system respect to x,y,z. Hence know the r vector. I know the point C respect to x,y,z coordinate system. Now I want to find the coordinate of point C respect to p,q,r coordinate system.
Appreciate very much if someone can help me to solve this problem.
Thank you.

REPLY [0 votes]: It looks like you used the symbol $\mathbf{r}$ twice. So I'm going to use $\mathbf{v}$ to denote the origin of the $\mathbf{p}$-$\mathbf{q}$-$\mathbf{r}$ coordinate system.
The coordinates of $\mathbf{c}$ in the $\mathbf{p}$-$\mathbf{q}$-$\mathbf{r}$ coordinate system are $(\mathbf{c} -\mathbf{v})\cdot \mathbf{p}$, $(\mathbf{c} -\mathbf{v})\cdot \mathbf{q}$, $(\mathbf{c} -\mathbf{v})\cdot \mathbf{r}$.
This easy to prove: suppose $\alpha$, $\beta$, $\gamma$ are the desired coordinates. Then we know that
$$
\mathbf{c} = \mathbf{v} + \alpha\mathbf{p} + \beta\mathbf{q} + \gamma\mathbf{r}
$$
and so
$$
\alpha\mathbf{p} + \beta\mathbf{q} + \gamma\mathbf{r} = \mathbf{c} - \mathbf{v}
$$
taking dot products with $\mathbf{p}$, $\mathbf{q}$, $\mathbf{r}$ in turn gives
$$
\alpha = (\mathbf{c} -\mathbf{v})\cdot \mathbf{p} \quad ; \quad
\beta  = (\mathbf{c} -\mathbf{v})\cdot \mathbf{q} \quad ; \quad
\gamma = (\mathbf{c} -\mathbf{v})\cdot \mathbf{r}.
$$
So, the short answer is that you should just calculate these three dot products. When you do it, make sure that you have expressed all the vectors ($\mathbf{c}$, $\mathbf{v}$, $\mathbf{p}$, $\mathbf{q}$, $\mathbf{r}$) in the original $x$-$y$-$z$ coordinate system.
You can write this using a transformation matrix, if you want to, but I don't think it makes anything any clearer.


text:
\chapter{Connection between Young diagrams and $S_k$-orbits of $\mathbb{Z}_N^k$} \label{S:ydo}

\section{Main theorem and results }

Let $\lambda=a_1\lambda_1+a_2\lambda_2+...+a_{N-1}\lambda_{N-1}$ be a dominant integral weight for $\mathfrak{g}=sl_N$ of
type $A_{N-1}$. The orbit in standard form associated to $\lambda$ is given by \eqref{E:orb} and the partition is given by
\eqref{E:tab}. These two points of view are related as the following lemma shows.
\begin{lemma} \label{L:conj}
 The orbit in standard form \eqref{E:orb} is a partition whose conjugate is given by \eqref{E:tab}.
\end{lemma}
\begin{proof}
Consider the diagram

\vskip10pt

 \begin{xy}
<0.7cm,0cm>:
(-2.88,0); (0,0) **{ };
(0,0); (0,6) **@{-}, (1,0) **@{-};
(1,6); (0,6) **@{-}, (1,0) **@{-};
(0,1); (1,1) **@{-},
(0,2); (1,2) **@{-},
(0,4); (1,4) **@{-},
(0,5); (1,5) **@{-},
(1,0); (2.5,0) **@{-},
(1,6); (2.5,6) **@{-},
(1.75,5) *{\dots};
(1.75,1) *{\dots};
(0.5,3.1) *{\vdots};
(3,3.1) *{\vdots};
(4,3.1) *{\vdots};
(6.5,3.1) *{\vdots};
(2.5,0); (2.5,6) **@{-}, (4.5,0) **@{-};
(3.5,6); (2.5,6) **@{-}, (3.5,0) **@{-};
(2.5,1); (4.5,1) **@{-},
(2.5,2); (4.5,2) **@{-},
(2.5,4); (4.5,4) **@{-},
(2.5,5); (4.5,5) **@{-},
(4.5,0); (4.5,5) **@{-},
(5.25,1) *{\dots};
(5.25,4) *{\dots};
(4.5,0); (6,0) **@{-},
(4.5,5); (6,5) **@{-},
(6,0); (6,5) **@{-}, (7,0) **@{-};
(7,5); (6,5) **@{-}, (7,0) **@{-};
(6,1); (7,1) **@{-},
(6,2); (7,2) **@{-},
(6,4); (7,4) **@{-},
(8,1) *{\dots};
(7,0); (9,0) **@{-},
(8,3.5) *{\ddots};
(9,0); (9,2) **@{-}, (10,0) **@{-};
(10,2); (9,2) **@{-}, (10,0) **@{-};
(9,1); (10,1) **@{-},
(10,0); (11.5,0) **@{-},
(10,2); (11.5,2) **@{-},
(10.75,1) *{\dots};
(11.5,0); (11.5,2) **@{-}, (13.5,0) **@{-};
(12.5,2); (11.5,2) **@{-}, (12.5,0) **@{-};
(11.5,1); (13.5,1) **@{-},
(13.5,0); (13.5,1) **@{-},
(13.5,0); (15,0) **@{-},
(13.5,1); (15,1) **@{-},
(14.25,0.5) *{\dots};
(15,0); (15,1) **@{-}, (16,0) **@{-};
(16,1); (15,1) **@{-}, (16,0) **@{-};
(0,6.4) *{|};
(3.5,6.4) *{|};
(0,6.4); (3.5,6.4) **@{-};
(1.75,6.62) *{a_{N-1}};
(3.6,5.4) *{|};
(7,5.4) *{|};
(3.6,5.4); (7,5.4) **@{-};
(5.3,5.62) *{a_{N-2}};
(9,2.4) *{|};
(12.5,2.4) *{|};
(9,2.4); (12.5,2.4) **@{-};
(10.8,2.62) *{a_2};
(12.6,1.4) *{|};
(16,1.4) *{|};
(12.6,1.4); (16,1.4) **@{-};
(14.35,1.62) *{a_1};
\end{xy}
\vskip10pt
\noindent
where the label $a_i$ on top equals the number of columns in that block, and the subscript i, equals the height of each
column in that block. This means that, there are $a_{N-1}$ columns of height $N-1$, $a_{N-2}$ columns of height $N-2$,...,
$a_2$ columns of height 2 and $a_1$ columns of height 1.
Reading the diagram from left to right we get the partition \eqref{E:orb}, and reading the diagram from bottom to top, we
get the following: The first row has length $a_{N-1}+a_{N-2}+...+a_1=\sum_{j=1}^{N-1} a_j$. The second row has length
$a_{N-1}+a_{N-2}+...+a_2=\sum_{j=2}^{N-1} a_j$, and the last row has length $a_{N-1}$, that is, the diagram above corresponds
to the partition \eqref{E:tab}. Thus \eqref{E:orb} and \eqref{E:tab} are conjugates of each other.
\end{proof}

\begin{remark} \label{R:tuple}
This lemma says that from a Young diagram $(\mu)\subseteq (N-1)\times k$, we can associate with $(\mu)$ a $k$-tuple
whose $j$th entry is given by the height of the $j$-th column of the diagram. This $k$-tuple is actually the representative
in standard form of the orbit in $\mathbb{Z}_N^k$ whose corresponding partition is $(\mu)$. This $k$-tuple will be denoted
by $\hat\mu$.
\end{remark}

\begin{remark} \label{R:nu'}
If $(\nu)=(\nu_1,...,\nu_N)\subseteq N\times k$ we can also associate with $(\nu)$ a $k$-tuple in $\mathbb{Z}_N^k$, by
letting the $j$-th entry of the $k$-tuple be the height of the $j$-th column of $(\nu)$ modulo $N$. This $k$-tuple is a
representative from the orbit $[\nu]$ associated to the partition $(\nu)$, but is not necessarily in standard form.
\textbf{We denote this} $\mathbf{k}$-\textbf{tuple by} $\mathbf{\bar\nu}$. The representative in standard form for the orbit
$[\nu]$ can be obtained directly as follows: Let $(\nu')=(\nu_1-\nu_N,...,\nu_{N-1}-\nu_N)$, then
$(\nu')\subseteq (N-1)\times k$, so the $k$-tuple whose $j$-th entry is the $j$-th column of the Young diagram for
 $(\nu')$ is the representative in standard form of the orbit $[\nu]$ associated to the partition $(\nu)$. Therefore
$\nu'\in [\nu]$. We also get that $(\nu)\thicksim(\bar\nu)\thicksim(\nu')$ where $\thicksim$ is the equivalence relation
defined in \eqref{E:er}.
\end{remark}

Seeing the standard form of an orbit in $\mathbb{Z}_N ^k$ as a partition will help us prove why, in some special cases, the
orbit product \eqref{E:orbprod} matches the Pieri rules. The next theorem illustrates some of these cases.

\begin{theorem} \label{T:main}
Let $\lambda=m\lambda_1$ be a multiple of the first fundamental weight for $A_{N-1}$, $m\leq k$,
$\mu=a_1\lambda_1+...+a_{N-1}\lambda_{N-1}$ any other weight of level $k$ and $[\lambda]$ and $[\mu]$ their
corresponding orbits in $\mathbb{Z}_N ^k$. Then $N_{\mu,\lambda}^{(k)\nu}=M_{[\mu],[\lambda]}^{(k)[\nu]}$ for any weight
$\nu$ of level $k$.
In other words, the product of the orbits $[\mu]\times [\lambda]$ matches Pieri rules for the multiplication $S_{(\mu)} h_m$,
 \eqref{E:p2}.
\end{theorem}
\begin{proof}
The first step of the proof is to prove the following claim

\noindent
Claim: $N_{\mu,\lambda}^{(k)\nu}=1$ if and only if $M_{[\mu],[\lambda]}^{(k)[\nu]}=1$

The theorem will follow from this claim, Corollary ~\ref{C:char} and Equation \eqref{E:tudose}.

\noindent
Proof of the claim: Let's assume that $N_{\mu,\lambda}^{(k)\nu}=1$. From Equation \eqref{E:tudose}, we know that there is a
partition $(\nu')\subseteq N\times k$ so that $(\nu')/(\mu)$ is an m-row strip, and $(\nu')\thicksim(\nu)$, then from
Remark \ref{R:nu'} we get that $[\nu]=[\nu']$.
Since  $(\nu')\subseteq N\times k$ and $(\nu')/(\mu)$ is an m-row strip, $(\nu')$ can be obtained from $(\mu)$ by adding m
boxes with no two in the same column, hence there exists $y\in [(1^m,0^{k-m})]$ so that
\[ \hat{\nu}+y=\nu'. \]
Now since $y\in [(1^m,0^{k-m})]$ and $(\nu')\in[\nu']=[\nu]$ we have that $M_{[\mu],[\lambda]}^{(k)[\nu]}\ne 0$, then from
Corollary \ref{C:char} we get $M_{[\mu],[\lambda]}^{(k)[\nu]}=1$.

In the other direction, let's assume that $M_{[\mu],[\lambda]}^{(k)[\nu]}=1$. Then from Corollary ~\ref{C:char} we have that
$\hat\nu=\left((N-1)^{a_{N-1}-m_{N-1}+m_{N-2}},...,1^{a_1-m_1+m_0},0^{a_0-m_0+m_{N-1}}\right)$, for some integers $m_0$,
$m_1$,...,$m_{N-1}$ such that $\sum_{i=0}^{N-1}m_i=m$ and $0\leq m_i\leq a_i$ for $0\leq i\leq N-1$.

Consider the $k$-tuple $\bar\nu\in\mathbb{Z}_N^k$ defined in Remark \ref{R:nu'},
\[ \bar\nu=\left(0^{m_{N-1}},(N-1)^{a_{N-1}-m_{N-1}+m_{N-2}},...,1^{a_1-m_1+m_0},0^{a_0-m_0}\right) \]
so $\bar\nu\in[\nu]$. Define the Young diagram $(\nu')$ whose first $m_{N-1}$ columns have height $N$ and for $j>m_{N-1}$,
the $j^{th}$ column has height equal to the $j^{th}$ entry of $\bar\nu$.

Now since the $k$-tuples $\hat\mu$ and $\nu'$ satisfy the equation
\[  \hat\mu +(1^{m_{N-1}},0^{a_{N-1}+{m_N-1}},...,1^{m_0},0^{a_0-m_0})=\nu' \quad\text{where}\quad \sum_{i=0}^{N-1}m_i=m, \]
then we have that $(\nu')/(\mu)$ is an m-row strip and since $(\nu')\thicksim(\bar\nu)\thicksim(\nu)$, then we get from
\eqref{E:tudose} that $N_{\mu,\lambda}^{(k)\nu}=1$.
\end{proof}

Note that in general multiplication of two orbits gives a linear combination of orbits. The orbit $[k\lambda_1]$ is special
since every product of this orbit with any other gives a single orbit as an answer. We encode this result in the  following
lemma.

\begin{lemma} \label{L:single}
 Let $[\mu]$ be any $S_k$-orbit of $\mathbb{Z}_N^k$. The product $[k\lambda_1]\times[\mu]$ equals a single orbit.
\end{lemma}
\begin{proof}
Since the $k$-tuple $(1^k)$ is fixed by the action of $S_k$, the orbit of $[k\lambda_1]=[(1^k)]$ consists of a single
$k$-tuple. The result easily follows from this fact.
\end{proof}

Although the product defined on orbits is not associative, as shown in example~\ref{E:nonassos}, we can prove associativity
in the special case when one of the orbits involved is $[(t^k)]$, $1\leq t\leq N-1$. We state the result in the following
lemma.

\begin{lemma} \label{L:ass}
Let $[a]$ and $[b]$ be $S_k$-orbits of $\mathbb{Z}_N^k$, and let $0\leq t\leq N-1$. Then we have:
\begin{equation} \label{E:assoc}
 \left( [a]\times [(t^k)]\right)\times [b] =[a]\times\left([(t^k)]\times[b]\right).
\end{equation}
\end{lemma}
\begin{proof}
From lemma \ref{L:single}, the products $[a]\times [(t^k)]$ and $[(t^k)]\times[b]$ each consists of a single orbit. If
$a=(a_1,...,a_k)$ is a representative from the orbit $[a]$, then a representative of the orbit $[a]\times [(t^k)]$ is given
by $(a_1+t,...,a_k+t)$ (where every entry is considered modulo $N$). Let us denote by $[a+t]$ the orbit of
$[a]\times [(t^k)]$, and since the same applies to the orbit $[(t^k)]\times[b]$, we denote this orbit by $[b+t]$, that is,
\begin{equation} \label{E:a+t}
[a]\times [(t^k)] = [a+t] \quad\text{and}\quad [(t^k)]\times[b] = [b+t].
\end{equation}
Then from \eqref{E:assoc} and \eqref{E:a+t} all we have to do is prove the following equation:
\[ [a+t]\times [b] = [a]\times [b+t]. \]
This is equivalent to proving that for any orbit $[c]$ of $\mathbb{Z}_N^k$ we have that:
\begin{equation} \label{E:M}
 M_{[a+t],[b]}^{(k)[c]}=M_{[a],[b+t]}^{(k)[c]} .
\end{equation}
To prove this equality, first observe that there is a one-to-one map given by:
\begin{align} \label{E:T}
  T([a+t],[b],[c]) & \longrightarrow T([a],[b+t],[c]) \\
  (x,y,z) & \longmapsto (x-t,y+t,c) \notag
\end{align}
where $x-t$ is the $k$-tuple  obtained from $x$ by subtracting $t$ from every entry of $x$ and $y+t$ is defined by adding $t$
to every entry of $y$, that is, $x-t=x-(t^k)$ and $y+t=y+(t^k)$. Let $\sigma\in S_k$. Since the action of $S_k$ on $k$-tuples
is linear, we have that  $\sigma(x-t)=\sigma (x-(t^k))=\sigma x-\sigma(t^k)$ and
$\sigma(y+t)=\sigma (y+(t^k))=\sigma y+\sigma(t^k)$. Therefore the map \eqref{E:T} is invariant under the action of $S_k$.
Thus the equality \eqref{E:M} follows.
\end{proof}

These lemmas are useful to find other orbits whose fusion product can be computed by the orbits method, and those are given
below.

\begin{theorem} \label{T:extend}
For $m\leq k$ let $[m\lambda_1]$ and $[k\lambda_1]$ be the orbits in $\mathbb{Z}_N^k$ corresponding to the weights
$m\lambda_1$ and $k\lambda_1$, respectively. For $0\leq t\leq N-1$ let $\lambda$ be the weight whose corresponding orbit in
$\mathbb{Z}_N^k$ is given by $[\lambda]=[m\lambda_1]\times[k\lambda_1]^t$, and let $\mu$ be any other weight on level k. Then
for every weight $\nu$ on level $k$ we have
\[ N_{\lambda,\mu}^{(k)\nu}=M_{[\lambda],[\mu]}^{(k)[\nu]}. \]
\end{theorem}
\begin{proof}
Since $[k\lambda_1]^t=[(t^k)]$, for an orbit $[\mu]$, we have:
\begin{equation} \label{E:associativity}
 [\lambda]\times[\mu]=([m\lambda_1]\times[k\lambda_1]^t)\times[ \mu]=[m\lambda_1]\times([k\lambda_1]^t\times[ \mu]).
\end{equation}
From Lemma~\ref{L:single} the orbits product $[k\lambda_1]^t\times[ \mu]=[\mu+t]$ gives a single orbit. Let $\mu'$ be the
weight so that $[\mu']=[\mu+t]$. Then from \eqref{E:associativity} we get
\[ [\lambda]\times[\mu]=[m\lambda_1]\times[\mu']. \]
Therefore $M_{[\lambda],[\mu]}^{(k)[\nu]}=M_{[m\lambda_1],[\mu']}^{(k)[\nu]}$, for all weights $\nu$.

From Theorem~\ref{T:main}, we have $M_{[m\lambda_1],[\mu']}^{(k)[\nu]}=N_{m\lambda_1,\mu'}^{(k)\nu}$ for all weights $\nu$.
This combined with \eqref{E:graciasadios} gives us
\[ N_{\lambda,\mu}^{(k)\nu}=M_{[m\lambda_1],[\mu']}^{(k)[\nu]}.\]
Therefore we get
\[ N_{\lambda,\mu}^{(k)\nu}=M_{[\lambda],[\mu]}^{(k)[\nu]}. \]
\end{proof}

We get the following characterization of these special level $k$ fusion coefficients.

\begin{theorem}
Let $\mu$ and $\nu$ be arbitrary weights on level $k$, for $0\leq t\leq N-1$ and $m\leq k$ let $\lambda$ be the weight
associated to the orbit $[m\lambda_1]\times[k\lambda_1]^t$, let $\mu'$ be the weight whose corresponding orbit is
$[\mu']=[\mu]\times[k\lambda_1]^t$, and assume that $\hat\mu= ((N-1)^{a_{N-1}},\dots,1^{a_1},0^{a_0})$. Then we have
\[ M_{[\lambda],[\mu]}^{(k)[\nu]}=
\begin{cases} \label{E:characterization}
1,  & \text{if } \tilde\nu=((N-1)^{b_{N-1}-m_{N-1}+m_{N-2}},\dots,1^{b_1-m_1+m_0},0^{b_0-m_0+m_{N-1}}),\\
  & \text{where }  m_0,\dots,m_{N-1} \text{ are integers such that } \displaystyle{\sum_{i=0}^{N-1}} m_i=m, \\
 &   0\leq m_i\leq b_i \text{ and } b_i=\begin{cases} a_{i-t} &\text{ if } i\geq t \\ a_{N-(t-i)} &\text{ if } i<t
\end{cases}\\
0, & \text{otherwise}
\end{cases} \]
\end{theorem}

As a summary of the results in this section, more precisely, from Theorem~\ref{T:extend}, we get an algorithm to compute
fusion coefficients via orbits for Young diagrams of the form

\vskip10pt

\begin{xy}
<0.7cm,0cm>:
(-7.18,0); (0,0) **{ };
(0,0); (6.5,0) **@{-}, (0,5) **@{-};
(6.5,4); (6.5,0) **@{-}, (0,4) **@{-};
(4,5); (4,0) **@{-}, (0,5) **@{-};
(1,0); (1,5) **@{-};
(3,0); (3,5) **@{-};
(5.5,0); (5.5,4) **@{-};
(0,1); (6.5,1) **@{-};
(0,3); (6.5,3) **@{-};
(2,.5) *{\dots};
(4.75,.5) *{\dots};
(2,3.5) *{\dots};
(2,4.5) *{\dots};
(4.75,3.5) *{\dots};
(.5,2.2) *{\vdots};
(2,2.2) *{\vdots};
(4.75,2.2) *{\vdots};
(6,2.2) *{\vdots};
(3.5,2.2) *{\vdots};
(0,-0.5) *{|};
(6.5,-0.5) *{|};
(0,-0.5); (6.5,-0.5) **@{-};
(3.25,-0.9) *{k};
(0,5.5) *{|};
(4,5.5) *{|};
(0,5.5); (4,5.5) **@{-};
(2.2,5.9) *{m};
(7,0); (7,4) **@{-};
(7.05,0) *{\_};
(7.05,4) *{\_};
(6.9,0) *{\_};
(6.9,4) *{\_};
(7.3,2.25) *{t};
\end{xy}
\vskip10pt
\noindent
whose corresponding weights are
\begin{equation} \label{E:weight}
 \lambda=
\begin{cases}
m\lambda_1,                       & t=0, \\
(k-m)\lambda_t + m\lambda_{t+1},  & 1\leq t\leq N-2, \\
(k-m)\lambda_{N-1},               & t=N-1 ,
\end{cases}
\end{equation}
for $0\leq m\leq k$. The corresponding orbits are
\begin{equation} \label{E:orbits}
 [\lambda]=
\begin{cases}
[((t+1)^m,t^{k-m})],              &  0\leq t\leq N-2, \\
[((N-1)^{k-m},0^m)],  & t=N-1.
\end{cases}
\end{equation}

\begin{example}
For $A_3$ level 3 ($N=4$ and $k=3$), let $\lambda=2\lambda_3+\lambda_2$ and let $\mu=2\lambda_1+\lambda_2$. The weight
$\lambda$ has the form \eqref{E:weight} with $t=2$ and $m=2$. Theorem~\ref{T:extend} says that we can compute the fusion
product $V^{\lambda}\otimes_3 V^{\mu}$ via orbits of $\mathbb{Z}_4^3$. The orbits associated to $\lambda$ and $\mu$ are
$[\lambda]=[(3,3,2)]$ and $[\mu]=[(2,1,1)]$. To compute their product, we have to remove the redundant equation from the list
\begin{align}
(3,3,2)+& (2,1,1)= (1,0,3), \notag\\
(3,3,2)+& (1,2,1)= (0,1,3), \notag\\
(3,3,2)+& (1,1,2)= (0,0,0). \notag
\end{align}
The second equation on this list is redundant, therefore we get
\[ [\lambda]\times[\mu]= [(3,1,0)] +[(0,0,0)]. \]
The weights associated to $[(3,1,0)]$ and $[(0,0,0)]$ are $\nu_1=\lambda_1+\lambda_3$ and $\nu_2=0$, so we get
\[ V^{\lambda}\otimes_3 V^{\mu}=V^{\lambda_1+\lambda_3}\oplus V^{0}. \]
We can verify this result using the characterization \eqref{E:characterization}. Note that
\[ a_3=0,\quad a_2=1,\quad a_1=2,\quad a_0=0, \]
so
\[ b_3=a_1=2,\quad b_2=a_0=0,\quad b_1=a_3=0,\quad b_0=a_2=1. \]
There are two different sets of integers $\{m_0,m_1,m_2,m_3\} $ satisfying the conditions of Theorem
\eqref{E:characterization}, namely:
\[ \{m_0=1,m_1=0,m_2=0,m_3=1\}\quad\text{and}\quad \{m'_0=0,m'_1=0,m'_2=0,m'_3=2\}. \]
For the set on the left, $\{m_0=1,m_1=0,m_2=0,m_3=1\}$, we get
\[ \hat\nu_1=(3^{b_3-m_3+m_2},2^{b_2-m_2+m_1},1^{b_1-m_1+m_0},0^{b_0-m_0+m_3})=(3,1,0),\]
and for the set $\{m'_0=0,m'_1=0,m'_2=0,m'_3=2\}$, we get
\[ \hat\nu_2=(3^{b_3-m'_3+m'_2},2^{b_2-m'_2+m'_1},1^{b_1-m'_1+m'_0},0^{b_0-m'_0+m'_3})=(0,0,0),\]
which are the representatives in standard form of the orbits we got, and Theorem \eqref{E:characterization} predicts
coefficient zero for the rest of the orbits, which matches the result found in this example.
\end{example}

\section{What goes wrong with orbits }

The orbits product $[a]\times [b]=\sum_{[c]\in\mathcal{O}}M_{[a],[b]}^{(k)[c]}[c]$ does not match Pieri rules for all cases,
as we show in this section.
\begin{example}
Consider the weight $\lambda=\lambda_1+\lambda_2$ of $A_2$ on level 3. The partition associated to $\lambda$ is
$(\lambda)=(2,1,0)$. By applying iterative Pieri rules (Theorem~\ref{T:prules}) to compute
$S_{(\lambda )} S_{(\lambda)}$ and the fact that $S_{(\lambda)}=h_1h_2-h_3$, we get:
\begin{align}
S_{(\lambda )} S_{(\lambda)} & =S_{3}+ S_{(3,3)}+2S_{(\lambda)}+ S_{(0)} \notag\\
& =h_3+ S_{(3,3)}+ 2S_{(\lambda)}+1.\notag
\end{align}
From the Dictionary \eqref{E:dict}, this translates into the fusion product
\begin{equation} \label{E:exa}
V^{\lambda }\otimes_3 V^{\lambda}=V^{3\lambda_1}\oplus V^{3\lambda_2}\oplus2V^{\lambda_1+\lambda_2}\oplus V^{0}.
\end{equation}
This result does not match the result gotten from the orbits point of view. To see this, first note that the orbit
corresponding to $\lambda=\lambda_1+\lambda_2$ in $\mathbb{Z}_3^3$ is the orbit of $[(2,1,0)]$, and by a simple calculation
of orbits we get that:
\[ [(2,1,0)]\times [(2,1,0)]=[(1,1,1)]+ [(2,2,2)]+ 3[(2,1,0)]+ [(0,0,0)]. \]
The orbits in this product represent respectively the weights $3\lambda_1$, $3\lambda_2$, $\lambda_1+\lambda_2$ and $0$,
which are exactly the same weights we got in \eqref{E:exa}, however multiplicities do not all match.
\end{example}

\begin{example}
Consider the weights $\lambda=\lambda_1+\lambda_2$ and $\mu=2\lambda_2$ of $A_3$ on level 3. The partitions associated to
$\lambda$ and $\mu$ are $(\lambda)=(2,1,0)$ and $(\mu)=(2,2)$. Using theorem~\ref{T:prules} to compute the fusion product
between the Schur polynomials $S_{(\lambda)}$ and $S_{(\mu)}$ and the fact that $S_{(\mu)}=h_2^2-h_1h_3$, we get:
\[ S_{(\lambda )} S_{(\mu)}=S_{(3,2,2)}+S_{(3,3,1)}+S_{(2,1)}+ S_{(1,1,1)}. \]
Using the correspondence between orbits and partitions defined in the last section of Chapter \ref{S:pre} and given more
explicitly below in \eqref{E:opart}  we get
\[ V^{\lambda}\otimes_3 V^{\mu}=V^{\lambda_1+2\lambda_3}\oplus V^{2\lambda_2+\lambda_3}\oplus V^{\lambda_1+\lambda_2}\oplus
  V^{\lambda_3}. \]
Now performing the orbit computation $[\lambda ]=[(2,1,0)]$ times $[\mu ]=[(2,2,0)]$ in $\mathbb{Z}_4^3$, we get:
\[ [(2,1,0)]\times [(2,1,0)]=[(3,2,2)]\oplus [(2,1,0)]\oplus [(3,0,0)]. \]
The orbits in this product represent, respectively, the weights $2\lambda_2+\lambda_3$, $\lambda_1+\lambda_2$ and $\lambda_3$.
Observe that the orbit corresponding to the weight $\lambda_1+2\lambda_3$ is missing in the orbit computation.
\end{example}

\section{How the orbits method can be fixed }

Note that the Schur polynomial corresponding to weight $m\lambda_1$ is $S_{(m,0,...,0)}=h_m$, that is, weights that are
multiples of the first fundamental weight $\lambda_1$ correspond to the homogeneous symmetric polynomials. According to the
Jacobi-Trudi determinant \eqref{E:schur}, these polynomials, generate the quotient ring
$\Lambda_N/I^{(N,k)}=\mathbb{Q}[x_1,x_2,...,x_N]^{S_N}/I^{(N,k)}$. Therefore for the rest of the weights of level $k$ whose
Young diagram is not of the form \eqref{E:weight}, we can compute the fusion products via orbits by alternating iteration
using the information from the Jacobi-Trudi determinant. In the following example we show how this process can be done.

\begin{example} \label{E:extention}
Consider the weight $\lambda=\lambda_1+\lambda_2$ of $A_2$ on level 3, note that this weight is not of the form
\eqref{E:weight}. If we want to compute the fusion product of $V^{\lambda}$ with itself on level 3
($V^{\lambda}\otimes_3 V^{\lambda}$), we may use the fact that $S_{\lambda}=h_1h_2-h_3$ and compute:
\begin{align}
 V^{\lambda}\otimes_3 V^{\lambda} & =V^{\lambda}\otimes_3\left( V^{\lambda_1}\otimes_3 V^{2\lambda_1}-V^{3\lambda_1} \right)
\notag \\ &=V^{\lambda}\otimes_3\left( V^{\lambda_1}\otimes_3 V^{2\lambda_1}\right)-V^{\lambda}\otimes_3V^{3\lambda_1} \notag
\\ &= \left( V^{\lambda}\otimes_3 V^{\lambda_1}\right)\otimes_3 V^{2\lambda_1}-V^{\lambda}\otimes_3V^{3\lambda_1} \notag
\end{align}

Now from Theorem~\ref{T:main} this can be done iteratively via orbits.
\end{example}

To ``fix" the orbits method, we construct an algebra $\mathcal{A}(\mathcal{O}(N,k))$ over $\mathbb{Q}$ whose basis is
$\mathcal{O}(N,k)$ where the addition is formal addition and we define a new product of orbits $[a]\cdot[b]$ by using the
information from the Jacobi-Trudi determinant \eqref{E:schur}. We define this ``new product" as follows.

Let $\hat a$, $\hat b$ be the standard form of two orbits $[a],[b]\in \mathcal{O}$. Let $(\lambda)=\tilde a$ and
$(\mu)=\tilde b=(\tilde b_1,\dots,\tilde b_{N-1})$ be the conjugates of $\hat a$, $\hat b$ considered as partitions. The
product $S_{(\lambda)}S_{(\mu)}$ can be computed using Pieri rules iteratively with the help of the Jacobi-Trudi determinant,
\eqref{E:schur}. Let $H=(h_{\tilde b_i -i+j})_{i,j=1}^{N-1}=(h_{i,j})_{i,j=1}^{N-1}$ then
$S_{(\mu)}=\det(H)\in\Lambda_N/I^{(N,k)}$, so
\begin{equation} \label{E:altite}
  S_{(\lambda)}S_{(\mu)} =S_{(\lambda)}\det(H).
\end{equation}
By Theorem \ref{T:main} we know that each individual product $S_{(\lambda)}h_{\tilde b_i -i+j}$ can be computed via orbits by
performing the product $[\lambda]\times [(1^{\tilde b_i -i+j},0^{k-\tilde b_i +i-j})]$, provided that $\tilde b_i -i+j\leq k$.
Therefore, we get that we can multiply any two Schur polynomials via orbits and by the results of this chapter, product
\eqref{E:altite} is equivalent to compute the following orbit product and then translating the results via the Dictionary
\ref{E:dict1}
\begin{equation} \label{E:fixing}
 [a]\cdot[b]=
\begin{cases}
[a]\times[b], &\text{ if } [b] \text{ is an orbit}\\&\text{of the form \eqref{E:orbits}, }\\
\displaystyle{\sum_{\sigma\in S_{N-1}}}\text{sign}(\sigma)((([a]\cdot [h_{1,\sigma 1}])\cdot [h_{2,\sigma 2}])\cdots
[h_{N-1,\sigma(N-1)}])  &\text{ otherwise,}
\end{cases}
\end{equation}
where $[h_{i,j}]=[h_{\tilde b _i -i+j}]$, $\tilde b=(\tilde b_1,\dots,\tilde b_{N-1})$ is the conjugate of $\hat b$
considered as partition, and
\[ [h_{\tilde b _i -i+j}]= \begin{cases}
[(1^{\tilde b_i -i+j},0^{k-\tilde b_i -i+j})] &\text{ if } 0\leq \tilde b_i -i+j\leq k \\
0 &\text{ otherwise,}
\end{cases}\]
is of the form \eqref{E:orbits}. We extend this product linearly to all $\mathcal{A}(\mathcal{O}(N,k))$.

From Lemma \ref{L:conj} we know that the the standard form of an $S_k$-orbit is a partition whose conjugate is a partition
contained in the $(N-1)\times k$ rectangle. The explicit correspondence between these two objects is given by
\begin{equation} \label{E:opart}
 [((N-1)^{a_N-1},\dots,1^{a_1},0^{a_0})]\longleftrightarrow \left(\sum_{i=1}^{N-1}a_i,\sum_{i=2}^{N-1}a_i,\dots,a_1\right).
\end{equation}
This gives a dictionary between the algebras $\mathcal{A}(\mathcal{O}(N,k))$ and $\Lambda_N/I^{(N,k)}$ as follows
\begin{align} \label{E:dict1}
\mathcal{A}(\mathcal{O}(N,k))& \longleftrightarrow \Lambda_N/I^{(N,k)} \\
[\lambda] & \longleftrightarrow S_{(\lambda)},\notag\\
[h_m]=[(1^m,0^{k-m})]& \longleftrightarrow h_m,\notag\\
[\lambda]\cdot[\mu]& \longleftrightarrow S_{(\lambda)}S_{(\mu)},\notag
\end{align}
where the left hand side is indexed by orbits and the right hand side is indexed by partitions and the correspondence
\eqref{E:opart} allows us to move from left to right.

According to the results in this chapter, we get the product \eqref{E:fixing} after translating to Schur functions using
Dictionary \ref{E:dict1}, matching the associative product $S_{(\lambda)}S_{(\mu)}$. Therefore \eqref{E:fixing} is an
associative product. Thus \eqref{E:fixing} gives a structure of associative algebra to $\mathcal{A}(\mathcal{O}(N,k))$ and
this algebra is isomorphic to $\Lambda_N/I^{(N,k)}\cong\mathcal{F}(A_{N-1},k)$.

\begin{example}
Continuing with Example \ref{E:extention} we want to compute the fusion product $V^{\lambda}\otimes_3 V^{\lambda}$ where
$\lambda=\lambda_1+\lambda_2$ of $A_2$ on level 3.

The orbit corresponding to $\lambda$ is $[\lambda]=[(2,1,0)]$ and the conjugate of $\hat{\lambda}$ is $\tilde b=(2,1)$. Hence
Equation \eqref{E:fixing} gives
\[  [(2,1,0)]\cdot[(2,1,0)]=[(2,1,0)]\cdot \begin{vmatrix}
    [h_{\tilde b_1}] & [h_{\tilde b_1 +1}]  \\
[h_{\tilde b_2 -1}] & [h_{\tilde b_2 }]  \end{vmatrix}. \]

Since $\tilde b_1=2$ and $\tilde b_2=1$, we get
\begin{align}
[h_{\tilde b_1}] &=[(1,1,0)], \notag\\
[h_{\tilde b_1+1}] &=[(1,1,1)], \notag\\
[h_{\tilde b_2}] &=[(1,0,0)], \notag\\
[h_{\tilde b_-1}] &=[(0,0,0)]. \notag
\end{align}

Therefore we get
\begin{align} [(2,1,0)]\cdot[(2,1,0)]&=[(2,1,0)]\cdot\begin{vmatrix}
    [(1,1,0)] & [(1,1,1)] \\
   [(0,0,0)]   & [(1,0,0)]
 \end{vmatrix} \notag\\
&=[(2,1,0)]\cdot([(1,1,0)] \cdot [(1,0,0)] ) - [(2,1,0)]\cdot[(1,1,1)] \notag.
\end{align}
From Example \ref{E:or1} we know that
\[ [(2,1,0)]\cdot[(1,1,0)]= [(2,1,0)]\times [(1,1,0)]=  [(2,2,1)]+[(1,1,0)]+[(2,0,0)] \]
and it is readily checked that
\begin{align}
[(2,2,1)]& \cdot [(1,0,0)]=[(2,2,1)] \times [(1,0,0)]= [(2,2,2)] + [(2,1,0)],\notag\\
[(1,1,0)]& \cdot [(1,0,0)]=[(1,1,0)] \times [(1,0,0)]= [(1,1,1)] + [(2,1,0)],\notag\\
[(2,0,0)]& \cdot [(1,0,0)]=[(2,0,0)] \times [(1,0,0)]= [(2,1,0)] + [(0,0,0)]\notag
\end{align}
and
\[ [(2,1,0)]\cdot[(1,1,1)]=[(2,1,0)]\times[(1,1,1)]=[(2,1,0)]. \]
Therefore we get
\[ [(2,1,0)]\cdot[(2,1,0)]=[(2,2,2)]+[(1,1,1)]+2[(2,1,0)]+[(0,0,0)], \]
which translates into the fusion product
\[ V^{\lambda_1+\lambda_2}\otimes_3V^{\lambda_1+\lambda_2}= V^{3\lambda_2}\oplus V^{3\lambda_1} \oplus
2V^{\lambda_1+\lambda_2} \oplus V^0. \]
\end{example}

\section{Rank-level duality from the orbits point of view }

The sub-algebra of simple currents of $\mathcal{F}(A_{N-1},k)$ is the sub-algebra with basis $\{ h_k^t \mid 0\leq t\leq N-1\}$.
The orbit corresponding to the partition $(k,0,...,0)$ is the orbit $[(1^k)]$ and by multiplying this orbit by itself
iteratively we get that $[(1^k)]^t=[(t^k)]$. Therefore the orbits corresponding to the simple currents of
$\mathcal{F}(A_{N-1},k)$ have the form $[(t^k)]$. Now, let $[b]=[(t^k)]$ be the orbit of a simple current and
$[a]=[(m_1,...,m_k)]\in\mathcal{O}(N,k)$. Then the product $[a]\cdot [b]$ can be easily described as
\[ [a]\cdot [b]=[(m_1+t,...,m_k+t)], \]
where every entry is considered modulo $N$. By abuse of notation we are going to denote the orbit on the right hand side by
$[a+t]$.

 This product gives an action of $\mathbb{Z}_N$ on $\mathcal{O}(N,k)$. This action breaks the set $\mathcal{O}(N,k)$ into
``orbits", that we call SC-orbits, to avoid confusion with $S_k$-orbits of $\mathbb{Z}_N^k$ and as an abbreviation for simple
current orbits.

Note that for $0\leq m\leq k$ the product of any element in the SC-orbit of $[(1^m,0^{k-m})]$ by any SC-orbit is independent of the choice of
representative. In fact, let $0\leq t,t_1\leq N-1$ and $[a]\in \mathcal{O}(N,k)$, then $[a+t_1]$ is in the SC-orbit of
$[a]$
and $[((t+1)^m,t^{k-m})]$ is in the SC-orbit of $[(1^m,0^{k-m})]$ and is one of the orbits of the form \eqref{E:orbits},
therefore
\begin{align} \label{E:simplecurrentproduct}
[a+t_1]\cdot [((t+1)^m,t^{k-m})]=& [a]\cdot [(t_1^k)]\cdot [(1^m,0^{k-m})] \cdot [(t^k)] \\
=& [a]\cdot [(1^m,0^{k-m})]\cdot [((t+t_1)^k)]. \notag
\end{align}
This defines a product on the set of SC-orbits of $\mathcal{O}(N,k)$, and it is equivalent to the product in the algebra
$\mathcal{A}'(\mathcal{O}(N,k))=\mathcal{A}(\mathcal{O}(N,k))/SC$, where SC is the ideal of
$\mathcal{A}(\mathcal{O}(N,k))$ generated by $[(t^k)]-[(0^k)]$. This algebra is isomorphic to $\mathcal{F}'(A_{N-1},k)$.

To see the rank-level duality from the orbits point of view, first observe that any SC-orbit of $\mathcal{O}(N,k)$ has
a representative of the form $[((N-1)^{a_{N-1}},...,0^{a_0})]$ where $a_0>0$, since for any orbit
$[(m_1,...,m_k)]\in\mathcal{O}(N,k)$ we can add $(t^k)$ enough times to make one of the entries zero.

\begin{example}
Consider the set $\mathcal{O}(4,3)$. The SC-orbit of the element $[(2,2,1)]$ is the set $\{[(2,2,1)],[(3,3,2)],[(3,0,0)],
[(1,1,0)]\} $. Note that in fact this SC-orbit contains two elements with at least one zero entry.
\end{example}

Let $\mathcal{O}'(N,k)=\{[a]=[(a_1,\dots,a_k)]\in\mathcal{O}(N,k)\mid a_i=0\text{ for some } i, 1\leq i\leq k\}$, the set of
$S_k$-orbits of $\mathbb{Z}_k^N$ with at least one zero entry. We have a one-to-one correspondence given by
\begin{align}
\mathcal{O}'(N,k) &\longrightarrow \mathcal{O}'(k,N)\notag\\
[((N-1)^{a_{(N-1)}},...,1^{a_1},0^{a_0})]&\longmapsto \left[\left( \sum_{i=1}^{N-1}a_i,\sum_{i=2}^{N-1}a_i,..., a_{(N-1)},0
\right)\right],
\notag
\end{align}
where $a_0>0$ and $\sum_{i=0}^{N-1}a_i=k$.

This map sends SC-orbits of $\mathcal{O}(N,k)$ to SC-orbits of $\mathcal{O}(k,N)$, and since the map is defined by
conjugation of the orbits considered as partitions, it follows that the map is just a different way of defining the
rank-level duality map defined in Section \ref{S:ranklevel} and Equation \eqref{E:ranklevelduality}.

config: arxiv