Skip to content

CSP-8-Temporal-Csharp : la table de composition d'Allen couvre 19/169 paires et son repli invente {Equals, During} sur les 150 autres #14609

Description

@myia-ai-01

CSP-8-Temporal-Csharp.ipynb demontre l'algebre d'intervalles d'Allen avec une table de composition qui couvre 19 paires sur 169 (11,2 %), et dont le repli renvoie une valeur arbitraire que la sortie committee presente comme un resultat.

Decouvert en reviewant #14164 (PR d'enrichissement markdown-only : la cellule code est byte-identique a main, le defaut est pre-existant, sur main depuis #5276).

Mesure

Table extraite du notebook et rejouee ; le modele reproduit exactement les deux nombres que la cellule committee affiche (169 et 154) -- controle que c'est bien le meme objet :

Mesure Valeur
entrees reelles dans COMPOSITION 19 / 169 (11,2 %)
paires qui tombent dans le repli 150 / 169 (88,8 %)
paires affichees par la cellule 154
... dont la sentinelle {Equals, During} 150
... dont une vraie composition de la table 4
// Compose avec fallback : si pas dans la table, on retourne {Equals, During}
// (approximation conservatrice pour les cas non-encore implementes)
return COMPOSITION.TryGetValue((r1, r2), out var result)
    ? new HashSet<AllenRelation>(result)
    : new HashSet<AllenRelation> { AllenRelation.Equals, AllenRelation.During };

Le commentaire dit « approximation conservatrice ». Elle ne l'est pas : en algebre d'Allen, l'approximation conservatrice d'une composition inconnue est la relation universelle (les 13), qui n'affirme rien. {Equals, During} affirme que deux relations precises sont possibles et que les onze autres ne le sont pas, sans aucune base. Consequence directe et visible dans la sortie committee :

Before          | Equals          | Equals, During

R o equals = R est une identite de l'algebre d'Allen. Elle est fausse pour 12 R sur 13 dans cette implementation : la table encode (Equals, R) mais jamais (R, Equals), sauf (Equals, Equals).

Le jumeau Python fait deja la bonne chose -- c'est une divergence de parite

CSP-8-Temporal.ipynb (jumeau Python, meme paire enregistree au registre twin-parity, cf #10561) a une table encore plus petite (5 entrees) mais un repli correct :

def compose(r1, r2):
    return COMPOSITION.get((r1, r2), set(AllenRelation))  # Par defaut : toutes relations

Le jumeau Python annonce aussi honnetement sa lacune (# ... table complete serait beaucoup plus grande). Le C# ne l'annonce pas : il titre sa section « Table de composition complete d'Allen ».

Acceptance

  1. Repli sain dans le C# : Compose renvoie la relation universelle (les 13) pour toute paire absente de la table -- alignement sur le jumeau Python. Aucune paire ne doit plus renvoyer silencieusement une reponse a 2 relations qu'elle n'a pas calculee.
  2. Ou bien : completer la table 13x13 d'apres Allen (1983). Plus couteux, et pas necessaire pour clore le defaut.
  3. Re-execution + outputs committes (C.2) : la cellule d'exemple change de sortie, elle doit etre re-executee (kernel .NET Interactive, local -- regle F, pas de contournement).
  4. Prose reconciliee : retirer « complete » du titre de section ; la lecture des « 154 » doit dire ce que le nombre compte.
  5. Critere de sortie verifiable : pour les 13 relations R, Compose(R, Equals) rend {R} (si la table est completee) ou la relation universelle (si c'est le repli qui est corrige) -- dans les deux cas, plus aucune paire non calculee ne se fait passer pour un resultat a 2 relations.

Hors scope

La correction de la prose de md#19 (trois « cas interessants » faux, dont deux citent des symboles OVERLAPS_OR_* qui n'existent dans aucune cellule code) est demandee dans #14164, qui est la PR qui les a introduits. Cette issue-ci ne porte que le defaut code pre-existant.

Voir #14164 -- #14164 (comment)

Activity

  1. added a commit that references this issue on Sep 4, 2026
  2. jsboige commented on Sep 4, 2026

    @jsboige
    Owner

    Extension de scope : le jumeau Python porte le meme defaut, avec une sentinelle plus large.

    J'ai ouvert cette issue sur le cote C# (CSP-8-Temporal-Csharp.ipynb). En re-auditant la paire twin avant d'attester la parite sur #14164, j'ai regarde le cote Python (CSP-8-Temporal.ipynb), que la PR ne touche pas : il a la meme structure de defaut, et son repli est plus permissif.

    C# CSP-8-Temporal-Csharp.ipynb Python CSP-8-Temporal.ipynb
    entrees reelles dans COMPOSITION 19 / 169 (11,2 %) 5
    valeur de repli {Equals, During} (2 relations) set(AllenRelation) -- les 13 relations
    commentaire du repli dans le code // Compose avec fallback # Par defaut : toutes relations
    ce que la prose annonce corrige par #14164 : « table pedagogique partielle » « Table de composition complete d'Allen », « on la genere automatiquement par enumeration » au lieu de « hard-coder les 169 entrees »

    Le cote Python est donc le plus trompeur des deux : il annonce explicitement qu'il genere la table complete la ou il encode cinq paires derriere un repli qui retourne l'univers. Un repli qui rend les 13 relations est vrai au sens de la correction (c'est le sur-ensemble conservateur) mais vide au sens informatif -- et la prose le presente comme un resultat calcule.

    Ce que ca change pour cette issue : l'acceptance doit couvrir les deux notebooks de la paire, pas seulement le C#. Sinon la reparation du seul cote C# creuse une divergence entre jumeaux au lieu de la resorber.

    Ce que ca ne change pas : le defaut est pre-existant sur main des deux cotes, il demande une re-execution (donc il n'entre pas dans une tranche markdown-only), et il reste hors du scope de #14164 -- la lane po-2026 n'a pas a l'attraper dans cette PR. L'asymetrie de prose que #14164 introduit volontairement (C# honnete, Python pas encore) est consignee en tete de known_differences de twin_pairs.d/csp-8-temporal.yaml, pour qu'elle ne se lise pas plus tard comme une derive non expliquee.

    Mesure faite a ad7f75fc8, cote Python byte-identique a origin/main (content_python_sha inchange dans l'attestation afa62caae).

  3. added a commit that references this issue on Sep 4, 2026
  4. jsboige commented on Sep 4, 2026

    @jsboige
    Owner

    [CLAIMED] #14609 — myia-po-2026:CoursIA 2026-09-04T13:56Z (dispatch ai-01 c.msg-20260904T133806)

    Grain MED/notebook-python : table de composition d'Allen generee par enumeration (13x13 = 169 paires) sur les DEUX jumeaux dans la meme PR, repli -> assertion, controle positif (les 19 paires manuelles C# + 5 Python reproduites), controle negatif (les « 154 paires » changent), retrait de l'entree known_differences du registre twin, re-attestation de parite en dernier commit.

    paths: MyIA.AI.Notebooks/Search/Part2-CSP/CSP-8-Temporal.ipynb, MyIA.AI.Notebooks/Search/Part2-CSP/CSP-8-Temporal-Csharp.ipynb, scripts/notebook_tools/twin_pairs.d/csp-8-temporal.yaml

  5. jsboige commented on Sep 4, 2026

    @jsboige
    Owner

    [MCLAIM-UPDATE] paths complete (PR #14626) — myia-po-2026:CoursIA

    paths: MyIA.AI.Notebooks/Search/Part2-CSP/CSP-8-Temporal.ipynb, MyIA.AI.Notebooks/Search/Part2-CSP/CSP-8-Temporal-Csharp.ipynb, scripts/notebook_tools/twin_pairs.d/csp-8-temporal.yaml, scripts/execute_dotnet_notebook.py (filtre parent msg_id : course qui decalait les sorties d'une cellule -- necessaire a la re-exec honnete du jumeau C#)

  6. added a commit that references this issue on Sep 4, 2026
  7. jsboige commented on Sep 30, 2026

    @jsboige
    Owner

    Verification G.9 de fermeture (tranche 8 de #15258, lane myia-po-2024:CoursIA) : fermeture legitime, aucune reouverture.

    • Fermee par myia-ai-01 a 2026-09-04T22:58:01Z, commit_id: none (fermeture manuelle).
    • PR livrante : fix(csp,#14609): CSP-8 Temporal twins -- Allen composition table generated by enumeration (169 paires, repli -> assertion) #14626 fix(csp,#14609): CSP-8 Temporal twins -- Allen composition table generated by enumeration (169 paires, repli -> assertion) — MERGED a 2026-09-04T22:58:00Z (ecart 1 s) — Grain: MED/notebook-python — lane myia-po-2026:CoursIA.
    • Substance : l'objet exact de l'issue (la table de composition d'Allen de CSP-8-Temporal-Csharp couvrait 19/169 paires et inventait un repli {Equals, During} sur les 150 autres — table desormais generee par enumeration sur les 169 paires, repli remplace par une assertion), sur les deux jumeaux.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions