boucles et géométrie
Balayage bloc à bloc des 95 textes de preuve, avec deux lexiques, en écartant les blocs déclarés segments_dialogue_ia — CONVENTIONS.md §7.4 interdit d'attribuer à Judge une réponse de modèle reproduite dans son texte. Le script tient en quinze lignes et il est reproduit entier, pour que la mesure soit rejouable depuis un clone nu plutôt que crue sur parole :
Les deux blocs sont [LIP-1978-systen2]§48 et [LIP-1979-implprin]§96. Ils ont été lus, pas seulement comptés, et ils disent la même chose : la forme est posée d'abord, la boucle est lue dessus ensuite. En 1979, une tenségrité icosaédrique est construite pour trente sous-projets, puis une aire étiquetée de la figure sert à nommer la circularité d'un jeu de priorités. C'est la direction géométrie → boucles de Mathieu Devuyst, attestée en 1979.
Statut des deux portées, dit sans arrondir. [LIP-1978-systen2]§48 tombe dans la portée fecond §40-§65 de sa note. [LIP-1979-implprin]§96 tombe hors de toute portée évaluée (§29-§85 opératoire, §91-§93 spéculatif) : il n'est pas étiqueté. Un renvoi n'est pas un adoubement, et il ne faut pas le laisser croire.
import re, json, pathlib
def db(t): return [b for b in t.strip("\n").split("\n\n") if b.strip()] # CONVENTIONS §7.2
IDX = {d['id']: d for d in map(json.loads, open('corpus/index/corpus.jsonl')) if d.get('id')}
GEO = re.compile(r'polyhedr|polytope|tensegrity|tesseract|icosahed|dodecahed|cuboctahed|hypercube', re.I)
LOOP = re.compile(r'feedback loop|vicious cycle|vicious circle|virtuous cycle|problem loop|'
r'interlocking loop|feedback cycle', re.I)
for nom, motifs in (('geo', [GEO]), ('loop', [LOOP]), ('geo x loop', [GEO, LOOP])):
docs, blocs = set(), []
for p in sorted(pathlib.Path('corpus/text').glob('*.txt')):
segs = IDX[p.stem].get('segments_dialogue_ia') or []
for i, b in enumerate(db(p.read_text(encoding='utf-8')), 1):
if any(a <= i <= z for a, z in segs): continue # CONVENTIONS §7.4
if all(m.search(b) for m in motifs):
docs.add(p.stem); blocs.append((p.stem, i))
print(nom, len(docs), len(blocs), blocs if len(blocs) < 15 else '')