Informations initiales 

Liste des leçons. 

> lecons := {$101..109, $120..126, $140..144, $150..162, 170, 171, $180..183, 190,
$201..209, $213..221, 223, 224, 226, $228..230, 232, $234..236, $239..241, $243..247, 249, $253..255, $260..264}:nops(%);
 

86 (1.1)
 

 

Correspondances développements–leçons. 

> dev_lecons := {["Decomposition_Dunford", {153, 155, 157, 218, 226}], ["Theoreme_Rothstein_Trager", {122, 140, 143, 144, 236}],
["Exponentielle_MnC_GLnC_surjective", {153, 156}], ["Algorithme_Faddeev", {144, 153, 226}], ["Composantes_connexes_fq_non_degen", {158, 170, 171, 204}], ["Sous_algebre_reduite", {108, 153, 154, 155, 157}], ["Borne_Bezout", {142, 143, 152}], ["Theoreme_Kronecker", {102, 142, 144}],
["An_simple", {101, 103, 105, 108}], ["Classification_groupes_ordre_8", {103, 104}], ["Theoreme_Burnside", {104, 106, 153, 157}],
["Table_caracteres_S4", {105, 107, 109}], ["Partition_entier_parts_fixees", {124, 126, 140, 190}], ["Reduction_endo_normaux", {150, 154, 155, 157, 160, 161}], ["Theoreme_Hahn_Banach_geometrique", {159, 181, 253}], ["Theoreme_Molien", {101, 104, 107, 109, 124, 142, 151}],
["Irreductibilite_pol_cyclo", {102, 120, 121, 141, 144}], ["Generateurs_groupe_orthogonal", {106, 108, 159, 160, 161, 162}],
["Primalite_nombres_Mersenne", {120, 121, 123, 141}], ["Theoreme_Lie_Kolchin", {103, 106, 154, 157, 204}], ["Comptage_racines_forme_quadratique", {144, 170, 171}], ["Endomorphismes_MnC_stabilisent_GLnC", {150, 151, 157}],
["Ellipse_Steiner", {180, 181, 182, 183}], ["Suite_polygones_converge", {102, 152, 181, 182}], ["Sous_groupes_finis_SO3", {101, 104, 161, 183}], ["expu_diago_ssi_u_diago", {153, 155, 156}], ["Theoreme_Sophie_Germain", {120, 121, 126}], ["Theoreme_Chevalley_Warning", {123, 142}],
["Nombres_Bell", {190, 224, 230, 243, 244, 247}], ["Nombre_matrices_diago_Fq", {101, 104, 123, 150, 155, 190}], ["Action_SOn_Sn-1", {101, 103, 106, 183}],
["Automorphismes_KX", {125, 140, 151}], ["Cardinal_SO2q", {104, 106, 170, 190}], ["Theoreme_deux_carres", {121, 122, 126}],
["Points_extremaux_BLE", {160, 161, 181}], ["Existence_corps_finis", {123, 125, 141, 144}], ["Definition_bifocale_coniques", {180}],
["Groupes_distingues_table_caracteres", {107, 109}], ["Theoreme_Frobenius_Zolotarev", {105, 106, 120, 121, 123, 152}],
["Isometries_cube_tetraedre", {105, 160, 161, 183}], ["Reciprocite_quadratique", {101, 104, 120, 121, 123, 150, 159, 170, 190}], ["Algo_facteurs_invariants", {122, 162}],
["Lemme_Morse", {150, 158, 170, 171, 214, 215, 217, 218, 219}], ["Extrema_lies", {159, 215, 217, 219}],
["Theoreme_Cartan_vonNeumann", {156, 214, 215, 217}], ["Calcul_integrale_Fresnel", {236, 245}], ["Formule_complements", {236, 245}],
["Theoreme_Brouwer", {202, 206, 215}], ["TIL", {206, 214, 215}], ["Theoreme_Riesz_Fischer", {201, 205, 208, 234, 241, 262}],
["Theoreme_Cauchy_Lipschitz", {205, 206, 220}], ["Inegalite_isoperimetrique", {216, 219, 246}], ["Theoreme_Grothendieck", {201, 205, 234}],
["Polynomes_orthogonaux", {201, 202, 207, 213, 234, 240, 245}], ["Theoreme_Muntz", {202, 209, 241, 245}],
["Loi_even_rares", {249, 261, 264}], ["Galton_Watson", {223, 226, 229, 260, 261, 264}], ["Lp_inclus_Lq", {201, 234}],
["Methode_Newton", {215, 218, 223, 226, 232, 253}], ["Theoreme_Frechet_Kolmogorov", {203, 234}], ["Lemme_Borel", {207, 228, 241}],
["Theoreme_Chudnovsky", {203, 209}], ["Semi_normes_invariantes_similitude", {150, 208}], ["Sev_C01_normsup_2", {201}], ["Sev_dim_finie_C01_CVS_CVU", {151, 152}],
["Ensembles_Julia", {204, 245}], ["Geodesique_IH", {219, 220, 239}], ["Operateur_algebrique_Banach", {205, 208}],
["Densite_C01_fonctions_continues_nullepart_der", {202, 228}], ["Theoreme_Browder_Goehde", {205, 206, 213, 253}],
["Theoreme_boule_chevelue", {206, 215}], ["Simplicite_SOn", {215}], ["Pendule_amorti", {220}], ["Simplicite_SO3", {103, 106, 108, 150, 160, 161, 204}],
["Operateur_hypercyclique", {202, 205}], ["Prolongement_appl_lipsch", {205, 207, 208, 213}], ["Reduction_sym_cpct", {203, 205, 208, 213}],
["Sev_fermes_Cab", {201, 203, 205}], ["Operateurs_et_adjoint", {201, 205, 208}], ["Theoreme_Jordan_C1", {203, 204, 217, 239}], ["Prolongement_dzeta_Re_pos", {207, 230, 241, 245}], ["Theoreme_Abel_angulaire", {207, 223, 230, 241, 243, 244, 247}], ["Theoreme_Bernstein", {202, 209, 228, 249, 260, 264}], ["Formule_Poisson", {230, 240, 246, 254, 255}], ["Inversion_Fourier_distrib", {239, 240, 254, 255, 261}], ["Inversion_Fourier_L1", {239, 240, 247, 263}], ["Couronnes_biholomorphes", {203, 207, 219, 223, 245}], ["Equation_Hill_Mathieu", {155, 220, 221}], ["Prolongement_gamma", {207, 223, 235, 239, 241, 245}], ["Nombres_normaux", {249, 264}],
["Theoreme_lacunes_Hadamard", {207, 241, 243, 244}], ["Etude_asymptotique_suite_polynomes", {220, 221, 224, 228}],
["Theoreme_Fejer", {202, 209, 235, 240, 246}], ["Transformee_Fourier_gaussienne", {236, 239, 240, 245, 261}], ["Algorithme_Wiedemann", {123, 153, 159, 162, 226, 264}], ["Theoreme_Plancherel", {201, 207, 234, 239, 240}], ["Methode_gradient_conjugue", {158, 162, 170, 229, 232, 253}], ["Etude_astroide", {216}], ["Serie_harmonique", {224, 230, 247}], ["TCL", {224, 235, 241, 245, 262, 263}], ["LGN", {201, 230, 235, 241, 260, 262}], ["Courbe_brachistochrone", {216, 219, 220, 229, 253}], ["Loi_Gamma", {236, 239, 240, 261, 263}]}:
 

 

On obtient la liste des développements : 

> dev := map(x -> x[1], dev_lecons):
 

 

Procédure qui prend en argument un développement et qui retourne les leçons dans lesquelles il peut aller. 

> hash := proc(s)
  local i;
  for i in dev_lecons do
     if i[1] = s then
        return i[2];
     end if;
  end do;
end proc:
 

 

À partir de l'ensemble dev_lecons, on construit celui qui donne les correspondances leçons–développements. 

> construit_lecons_dev := proc()
  local i, devl, dev;
  global lecons_dev := op({});
  for i in lecons do
    dev := op({});
    for devl in dev_lecons do
       if i in devl[2] then
          dev := dev, devl[1];
       end if;
    end do;
    lecons_dev := lecons_dev, [i, {dev}];
  end do;
  lecons_dev := {lecons_dev};
end proc:
 

> construit_lecons_dev();
 

{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
(1.2)
 

 

Pour chaque leçon, on affiche le nombre de développements qui peuvent y entrer. 

> map(x -> [x[1], nops(x[2])], %);
 

{[101, 6], [102, 3], [103, 5], [104, 7], [105, 4], [106, 7], [107, 3], [108, 4], [109, 3], [120, 5], [121, 6], [122, 3], [123, 7], [124, 2], [125, 2], [126, 3], [140, 3], [141, 3], [142, 4], [143, 2],...
{[101, 6], [102, 3], [103, 5], [104, 7], [105, 4], [106, 7], [107, 3], [108, 4], [109, 3], [120, 5], [121, 6], [122, 3], [123, 7], [124, 2], [125, 2], [126, 3], [140, 3], [141, 3], [142, 4], [143, 2],...
{[101, 6], [102, 3], [103, 5], [104, 7], [105, 4], [106, 7], [107, 3], [108, 4], [109, 3], [120, 5], [121, 6], [122, 3], [123, 7], [124, 2], [125, 2], [126, 3], [140, 3], [141, 3], [142, 4], [143, 2],...
{[101, 6], [102, 3], [103, 5], [104, 7], [105, 4], [106, 7], [107, 3], [108, 4], [109, 3], [120, 5], [121, 6], [122, 3], [123, 7], [124, 2], [125, 2], [126, 3], [140, 3], [141, 3], [142, 4], [143, 2],...
{[101, 6], [102, 3], [103, 5], [104, 7], [105, 4], [106, 7], [107, 3], [108, 4], [109, 3], [120, 5], [121, 6], [122, 3], [123, 7], [124, 2], [125, 2], [126, 3], [140, 3], [141, 3], [142, 4], [143, 2],...
{[101, 6], [102, 3], [103, 5], [104, 7], [105, 4], [106, 7], [107, 3], [108, 4], [109, 3], [120, 5], [121, 6], [122, 3], [123, 7], [124, 2], [125, 2], [126, 3], [140, 3], [141, 3], [142, 4], [143, 2],...
{[101, 6], [102, 3], [103, 5], [104, 7], [105, 4], [106, 7], [107, 3], [108, 4], [109, 3], [120, 5], [121, 6], [122, 3], [123, 7], [124, 2], [125, 2], [126, 3], [140, 3], [141, 3], [142, 4], [143, 2],...
{[101, 6], [102, 3], [103, 5], [104, 7], [105, 4], [106, 7], [107, 3], [108, 4], [109, 3], [120, 5], [121, 6], [122, 3], [123, 7], [124, 2], [125, 2], [126, 3], [140, 3], [141, 3], [142, 4], [143, 2],...
{[101, 6], [102, 3], [103, 5], [104, 7], [105, 4], [106, 7], [107, 3], [108, 4], [109, 3], [120, 5], [121, 6], [122, 3], [123, 7], [124, 2], [125, 2], [126, 3], [140, 3], [141, 3], [142, 4], [143, 2],...
(1.3)
 

 

Puis on retient celles qui n'ont qu'un nombre < 2 de développements (si l'on n'obtient pas {} cela veut dire que, à moins de faire des impasses, on doit rajouter des développements dans notre ensemble dev_lecons). 

> select(x -> evalb(x[2] <= 1), %);
 

(1.4)
 

À venir 

On rentre ici les développements que l'on connaît. 

> dev_connus := {"Methode_Newton", "Theoreme_Riesz_Fischer", "Polynomes_orthogonaux", "Couronnes_biholomorphes", "Theoreme_Bernstein", "Galton_Watson", "Prolongement_gamma", "Etude_asymptotique_suite_polynomes", "Extrema_lies", "Reduction_sym_cpct", "Nombres_normaux", "Densite_C01_fonctions_continues_nullepart_der", "Theoreme_Jordan_C1", "Theoreme_Fejer", "Decomposition_Dunford", "Theoreme_Rothstein_Trager", "Equation_Hill_Mathieu", "Simplicite_SO3", "Transformee_Fourier_gaussienne", "Sous_algebre_reduite", "Borne_Bezout", "Theoreme_Kronecker", "Irreductibilite_pol_cyclo", "Nombre_matrices_diago_Fq", "expu_diago_ssi_u_diago", "Reduction_endo_normaux", "Reciprocite_quadratique", "Theoreme_Frobenius_Zolotarev", "Partition_entier_parts_fixees", "Table_caracteres_S4", "Theoreme_Molien", "Lemme_Morse", "Existence_corps_finis", "Theoreme_deux_carres", "Exponentielle_MnC_GLnC_surjective", "Automorphismes_KX", "Suite_polygones_converge", "Action_SOn_Sn-1", "Ellipse_Steiner", "Composantes_connexes_fq_non_degen", "Algo_facteurs_invariants", "Nombres_Bell"}:
 

 

Cette ligne a pour but de vérifier que l'on ne s'est pas trompé dans l'écriture des développements (teste si dev_connus est un sous-ensemble de dev) ; donne également le nombre de développements connus. 

> evalb(dev_connus subset dev), nops(dev_connus);
 

true, 42 (2.1)
 

 

Retourne la correspondance leçons–développements avec seulement les développements connus. 

> lecons_dev_connus := map(x -> [x[1], x[2] intersect dev_connus], lecons_dev):
 

 

Retourne les couplages d'ores et déjà prêts. 

> construit_lecons_dev_pret := proc()
  local i, res := op({});
  global lecons_dev_pret := lecons_dev_connus;
  for i in lecons_dev_connus do
    if nops(i[2]) >= 2 then
      res := res, i;
    end if;
  end do;
  lecons_dev_pret := {res};
end proc:
 

> construit_lecons_dev_pret();
 

{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
{[101, {
(2.2)
 

 

Retourne l'ensemble puis le nombres des leçons apparaissant ci-dessus, i.e. les leçons qui possèdent au moins deux développements connus. 

> lecons_pret := map(x -> x[1], lecons_dev_pret): %, nops(%);
 

{101, 102, 103, 104, 105, 106, 107, 108, 109, 120, 121, 122, 123, 124, 125, 126, 140, 141, 142, 143, 144, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 170, 171, 181, 182, 183, 190, 201,...
{101, 102, 103, 104, 105, 106, 107, 108, 109, 120, 121, 122, 123, 124, 125, 126, 140, 141, 142, 143, 144, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 170, 171, 181, 182, 183, 190, 201,...
{101, 102, 103, 104, 105, 106, 107, 108, 109, 120, 121, 122, 123, 124, 125, 126, 140, 141, 142, 143, 144, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 170, 171, 181, 182, 183, 190, 201,...
{101, 102, 103, 104, 105, 106, 107, 108, 109, 120, 121, 122, 123, 124, 125, 126, 140, 141, 142, 143, 144, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 170, 171, 181, 182, 183, 190, 201,...
(2.3)
 

 

Les leçons qui restent :-) 

> lecons_restantes := lecons minus lecons_pret:
 

 

Génère les couples leçon–développement qui ne possèdent pour l'instant qu'un seul développement connu. 

> lecons_dev_presque_pret := proc()
local i, res := op({});
  for i in lecons_dev_connus do
    if nops(i[2]) = 1 then
      res := res, i;
    end if;
  end do;
  return nops([res]), res;
end proc:
 

> lecons_dev_presque_pret();
 

12, [162, {
12, [162, {
12, [162, {
12, [162, {
(2.4)
 

 

Génère le nombre de leçons, le nombre de leçons presque prêtes (i.e. celles ci-dessus) et le nombre de leçons prêtes (i.e. avec au moins deux développements connus). 

> nops(lecons), %[1], nops(lecons_dev_pret);
 

86, 12, 69 (2.5)
 

 

Génère la liste des couples développements–nombre de leçons pas du tout ou presques prêtes associées. 

> prochain_devs := proc()
  local i, dev_lecons_restant := dev_lecons;
  for i in dev_lecons do
      if i[1] in dev_connus then
         dev_lecons_restant := subs(i = NULL, dev_lecons_restant);
      else
         dev_lecons_restant := subs(i = [i[1], i[2] intersect lecons_restantes], dev_lecons_restant);
      end if;
  end do;
  return sort([op(map(x -> [x[1], nops(x[2])], dev_lecons_restant))], (x, y) -> (x[2] > y[2]));
end proc:
 

> prochain_devs();
 

[[
[[
[[
[[
[[
[[
[[
[[
[[
[[
[[
[[
[[
[[
[[
[[
[[
[[
[[
[[
[[
[[
(2.6)
 

 

Le principe est le suivant : on décide d'apprendre les développements qui ont le nombre associé le plus élevé (stratégie gloutonne). Attention, une fois un développement choisi il faut modifier dev_connus et relancer les calculs. En particulier, la ligne de code suivante retourne les développements avec le nombre associé le plus élevé. 

> select(x -> evalb(x[2] = max(map(y -> y[2], [[
[[
[[
[[
[[
[[
[[
[[
[[
[[
[[
[[
[[
[[
[[
[[
[[
[[
[[
[[
[[
[[))), %);
 

[[ (2.7)
 

 

La ligne suivante retourne les mêmes développements que précédemment mais avec l'ensemble des leçons qui lui sont associées (il peut y avoir des leçons déjà prêtes, ainsi on peut penser à changer des couplages déjà prêts). 

> map(x -> [x[1], hash(x[1])], %);
 

[[
[[
(2.8)
 

 

La même chose mais en enlevant les leçons prêtes. 

> map(x -> [x[1], `minus`(x[2], lecons_pret)], %);
 

[[
[[
(2.9)