from research import *
from algebra import Matrix
s=begin(1171,'Keep baseline equalities distinct from transformation equalities','How do the repeated MT ages and lives constrain the complete native family?',{},['File18 §2.2','C1169–C1170'])
d=json.loads((ROOT/'model/postflood_native_joint_model.json').read_text());M=Matrix(d['matrix']);C=[]
for terms in [{2:-1,3:1,4:1,5:-1},{4:1,8:-1},{4:1,12:-1},{9:1,11:-1}]:
 row=[0]*21
 for i,v in terms.items():row[i]=v
 C.append(row)
K=Matrix(C);N=Matrix([list(v) for v in K.nullspace()]).T
a=artifact('model/postflood_baseline_equalities.json',json.dumps(clean({'relations':['r_Arphaxad=r_Shelah','b_Shelah=b_Peleg','b_Shelah=b_Serug','L_Peleg=L_Reu'],'matrix':C,'rank':K.rank(),'family_rank':(M*N).rank(),'claim':'fitted named source equalities; no exhaustive minimality or historical independence claim'}),indent=2)+'\n')
finish(s,{'baseline_equalities':a,'constraint_rank':K.rank(),'family_rank':(M*N).rank()},'Four independent named baseline equalities reduce this declared native-family model to17 numeric freedoms. Baseline repetitions and shared transformation amplitudes have different explanatory roles and should remain separately costed.','Check whether minimizing rank alone would actually satisfy the Strategy’s compression goal.',{'four_independent':K.rank()==4,'source_satisfies':all(x==0 for x in K*Matrix(d['source_parameters'])),'rank17':(M*N).rank()==17})
