#C16.txt, March 21, 2022; Starting Social Choice theory Help16:=proc(): print(`RP(n,v), inv(pi) , Cij(P,i,j), RandP(n,v), Tour(P), SV(T) `): end: with(combinat): #inv(pi): the inverse of the permutation pi inv:=proc(pi) local T,i: for i from 1 to nops(pi) do T[pi[i]]:=i: od: [seq(T[i],i=1..nops(pi))]: end: #RandP(n,v) RandP:=proc(n,v) local i: [seq(randperm(n),i=1..v)]: end: #RP(n,v): all the possible voting profiles with n candidates {1,...n} #[[1,3,2],[2,1,3]], [1,3,2]-> [[1,3,2]] RP:=proc(n,v) local S,P1,p,s: option remember: S:=permute(n): if v=1 then RETURN( {seq([s] , s in S)}): fi: P1:=RP(n,v-1): {seq(seq([op(p),s],s in S),p in P1)}: end: #Cij(P,i,j): inputs a voting profile P and candidates i and j how many #voters pefer i to j? Cij:=proc(P,i,j) local k1,co,pi: co:=0: for k1 from 1 to nops(P) do pi:=inv(P[k1]): if pi[i]Cij(P,j,i) then T[i,j]:=1: T[j,i]:=-1: else T[i,j]:=-1: T[j,i]:=1: fi: od: od: [seq([seq(T[i,j],j=1..n)],i=1..n)]: end: #SV(T): inputs a tournament (as a list of lists) with n players #n=nops(T), and outputs the vector V[i]: how many other candiates did #candidate i beat SV:=proc(T) local n, S,i,j: n:=nops(T): for i from 1 to n do S[i]:=0: od: for i from 1 to n do for j from i+1 to n do if T[i][j]=1 then S[i]:=S[i]+1: elif T[i][j]=0 then S[i]:=S[i]+1/2: S[j]:=S[j]+1/2: else S[j]:=S[j]+1: fi: od: od: [seq(S[i],i=1..n)]: end: