Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

guessing k-regular sequences #21204

Closed
dkrenn opened this issue Aug 10, 2016 · 61 comments · Fixed by #35682
Closed

guessing k-regular sequences #21204

dkrenn opened this issue Aug 10, 2016 · 61 comments · Fixed by #35682

Comments

@dkrenn
Copy link
Contributor

dkrenn commented Aug 10, 2016

Code for guessing the parameters of k-regular sequences from the first few entries of a list/sequence/etc.

See also Meta ticket #21202.

Depends on #21319

CC: @rwst

Component: combinatorics

Author: Daniel Krenn

Branch/Commit: u/cheuberg/sequences/k-regular-guess @ ae06d17

Reviewer: Clemens Heuberger

Issue created by migration from https://trac.sagemath.org/ticket/21204

@dkrenn
Copy link
Contributor Author

dkrenn commented Aug 10, 2016

Branch: u/dkrenn/sequences/k-regular-guess

@mantepse
Copy link
Contributor

Commit: 11c7ec4

@mantepse
Copy link
Contributor

comment:2

Is it correct that (the generating function f of) every k-regular sequence satisfies a Mahler-type functional equation? That is, a polynomial p such that p(f(x), f(x<sup>2),...,f(x</sup>k)) = 0?

If so, then you could reuse the guessing functionality in FriCAS. Of course, FriCAS is not a standard package, although I think it should be, for many reasons. In any case, the guessing package within is fast and well tested, and covers a lot of ground - essentially everything which is available for 1-dimensional guessing. For example:

sage: l = [0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0]
sage: fricas.guessFE(l)
      n         3        2        2                             3      4
  [[[x ]f(x): (x  - x)f(x ) + (- x  + 1)f(x) - x= 0,f(x)= x + 2x  + O(x )]]

@dkrenn
Copy link
Contributor Author

dkrenn commented Aug 10, 2016

comment:3

Replying to @mantepse:

Is it correct that (the generating function f of) every k-regular sequence satisfies a Mahler-type functional equation? That is, a polynomial p such that p(f(x), f(x<sup>2),...,f(x</sup>k)) = 0?

I've found in the book of Allouche and Shallit:

"It is known that k-regular power series satisfy Mahler functional equations; see Rand ́e [1992], Dumas [1993a], and Becker [1994]."

so I believe the answer to your question is affirmative.

If so, then you could reuse the guessing functionality in FriCAS. Of course, FriCAS is not a standard package, although I think it should be, for many reasons. In any case, the guessing package within is fast and well tested, and covers a lot of ground - essentially everything which is available for 1-dimensional guessing.

I didn't know about this feature of FriCAS, but looks good :)

Are there any plans to make FriCAS standard (I tried with sage -i fricas, but installation fails :(

@mantepse
Copy link
Contributor

comment:4

Replying to @dkrenn:

Are there any plans to make FriCAS standard (I tried with sage -i fricas, but installation fails :(

How does it fail? That's very bad indeed!

@dkrenn
Copy link
Contributor Author

dkrenn commented Aug 10, 2016

comment:5

Replying to @mantepse:

Are there any plans to make FriCAS standard (I tried with sage -i fricas, but installation fails :(

How does it fail? That's very bad indeed!

Posted on https://groups.google.com/forum/#!topic/sage-devel/6_rBQvKdGPo

@dimpase
Copy link
Member

dimpase commented Aug 10, 2016

comment:6

this is to update FriCAS: #21209

probably the current version of FriCAS (1.2.7) should compile with current ECL just fine.

@mantepse
Copy link
Contributor

comment:8

The new fricas interface is #21231. It would be very easy to add a dedicated command for guessing k-regular sequences to FriCAS. If this is interesting, I could probably further improve the interface to avoid pexpect and communicate with FriCAS more directly, Waldek Hebisch has already done the work on the FriCAS-side.

(Currently, passing long lists to FriCAS is very very slow. But I would like to have at least some confirmation of interest before I spend more time on the interface)

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented Aug 21, 2016

Branch pushed to git repo; I updated commit sha1. Last 10 new commits:

4a1db0ereorder imports
62ebcdacomplete documentation
4331957Merge branch 'u/dkrenn/sequences/recognizable' into u/dkrenn/sequences/k-regular
dab4db8complete docstrings and 100% coverage
9afc4accross-references
fd4f541move "transpose" in docstring to correct place
4eb1544Merge branch 'u/dkrenn/sequences/recognizable' into u/dkrenn/sequences/k-regular
cf1b8cccorrect one link
73ad7bdMerge branch 'u/dkrenn/sequences/k-regular' into u/dkrenn/sequences/k-regular-guess
c349170fix code and doctests to adapt with upstream recognizable series

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented Aug 21, 2016

Changed commit from 11c7ec4 to c349170

@dkrenn
Copy link
Contributor Author

dkrenn commented Aug 21, 2016

comment:10

Replying to @mantepse:

The new fricas interface is #21231. It would be very easy to add a dedicated command for guessing k-regular sequences to FriCAS.

You mean guessing the Mahler functional equation, right?

If this is interesting, I could probably further improve the interface to avoid pexpect and communicate with FriCAS more directly, Waldek Hebisch has already done the work on the FriCAS-side.

I think having this would be interesting and good. I am still not sure how exactly I would get the k-regular sequence out of it; I have to dig into this topic a bit further, I guess. (At the moment, I do not see directly, where the parameter k comes into play, as the FriCAS guessing works without this parameter.)
This is not my top priority at the moment (as the simple implementation of guessing of this ticket satisfies my needs and gives exactly the kind of representation I need.

As FriCAS is an optional package, I would guess, when having the interface you speak about, would be used as an alternative choice which guessing-algorithm was used. (Maybe even if FriCAS was a standard package...not sure at the moment...)

(Currently, passing long lists to FriCAS is very very slow. But I would like to have at least some confirmation of interest before I spend more time on the interface)

From what you can suggest by reading the above, I am not sure what the implications for this ticket are. However, having such a functionality of guessing the functional equation would definitely something nice to have in SageMath.

@mantepse
Copy link
Contributor

comment:11

Replying to @dkrenn:

Replying to @mantepse:

The new fricas interface is #21231. It would be very easy to add a dedicated command for guessing k-regular sequences to FriCAS.

You mean guessing the Mahler functional equation, right?

Hm. I actually meant to add a command that guesses the equation for the k-regular sequence. But I just found out that I was slightly mistaken about the nature of k-regular sequences: apparently there is no single equation determining it, but rather a bunch of them, right? It should still be possible to reuse the machinery.

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented Aug 22, 2016

Branch pushed to git repo; I updated commit sha1. New commits:

863d57aremove None-sense to simplify code
aec95ceextend element constructor
9e12383add experimental warning
69289feMerge branch 'u/dkrenn/sequences/recognizable' into u/dkrenn/sequences/k-regular
71aef7ffix doctests
15e4008Merge branch 'u/dkrenn/sequences/k-regular' into u/dkrenn/sequences/k-regular-guess
1b34c92put conversion code n --> index/word into separat method
eaf8df2Merge branch 'u/dkrenn/sequences/k-regular' into u/dkrenn/sequences/k-regular-guess
355d24dsimplify code by using features of recognizable series better (and adapting to removing None-sense)

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented Aug 22, 2016

Changed commit from c349170 to 355d24d

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented Aug 22, 2016

Changed commit from 355d24d to 348fcff

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented Aug 22, 2016

Branch pushed to git repo; I updated commit sha1. New commits:

348fcffsolve transpositioning problem

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented Aug 22, 2016

Branch pushed to git repo; I updated commit sha1. New commits:

2e99c5canother example

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented Aug 22, 2016

Changed commit from 348fcff to 2e99c5c

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented Aug 25, 2016

Changed commit from 2e99c5c to a68e20d

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented Aug 25, 2016

Branch pushed to git repo; I updated commit sha1. Last 10 new commits:

b060652minor rewrite in minimized
31e2fcfMerge branch 'u/dkrenn/sequences/recognizable' into u/dkrenn/sequences/k-regular
893bd5cexperimental warning in k_regular_sequence
189ce50pass keywords to coefficient_of_word
5919120doctesting all parameters in coefficient_of_word
c7243a6Merge tag '7.4.beta1' into t/21295/sequences/recognizable
4012778Merge branch 't/21295/sequences/recognizable' into t/21203/sequences/k-regular
5dbedabfix doctests (experimental warning)
143ea73fix building of docs (no idea why it failed)
a68e20dMerge branch 't/21203/sequences/k-regular' into t/21204/sequences/k-regular-guess

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented Aug 25, 2016

Branch pushed to git repo; I updated commit sha1. Last 10 new commits:

3023233rewrite to make subsequence more efficient (dynamically add kernel)
51e7d72minor rewrite
9311636allow b to be a dict
624e6c0forward/backward difference
45d9e67minor rewrites
c430158partial sums
7eb93e1minor rewrites to use existing stuff better
6247a7fMerge branch 't/21203/sequences/k-regular' into t/21318/sequences/rec-basic-arith
0f89159Merge branch 't/21318/sequences/rec-basic-arith' into t/21325/sequences/k-regular-subseq
816fcfdMerge branch 't/21325/sequences/k-regular-subseq' into t/21204/sequences/k-regular-guess

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented Aug 25, 2016

Changed commit from a68e20d to 816fcfd

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented Aug 25, 2016

Branch pushed to git repo; I updated commit sha1. Last 10 new commits:

a8e6334MatrixSpace.some_elements
520aaf1FreeModule_generic.some_elements
5afda8eMerge branch 'u/dkrenn/matrices-some-elements' into t/21319/sequences/rec-hash
1e5754ban_element and some_elements
becce48pickling support
a4ccbecTestSuite
c2f9c62Merge branch 't/21325/sequences/k-regular-subseq' into t/21319/sequences/rec-hash
9818d94Merge branch 't/21319/sequences/rec-hash' into t/21204/sequences/k-regular-guess
90e4ed5doctests
899e56efinish .guess (docstrings etc)

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented Aug 25, 2016

Changed commit from 816fcfd to 899e56e

@dkrenn
Copy link
Contributor Author

dkrenn commented Aug 25, 2016

Changed dependencies from #21203 to #21203, #21325, #21319

@dkrenn
Copy link
Contributor Author

dkrenn commented Aug 25, 2016

comment:18

@cheuberg
Copy link
Contributor

cheuberg commented Oct 2, 2022

Changed commit from 3c634df to 5cab567

@cheuberg
Copy link
Contributor

cheuberg commented Oct 2, 2022

comment:38

Sorry, that was a wrong push. I'll fix it soon.

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented Oct 2, 2022

Changed commit from 5cab567 to 8ee2328

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented Oct 2, 2022

Branch pushed to git repo; I updated commit sha1. This was a forced push. Last 10 new commits:

bde8e67Merge branch 't/21319/sequences/rec-hash' into t/21204/sequences/k-regular-guess
622c3f6Merge branch 'u/dkrenn/sequences/rec-hash' into u/dkrenn/sequences/k-regular-guess
4e7f615Merge branch 'u/dkrenn/sequences/rec-hash' into u/dkrenn/sequences/k-regular-guess
e726278Merge branch 't/21319/sequences/rec-hash' into t/21204/sequences/k-regular-guess
dcc7cd1Trac #21204: cherry-pick to avoid merge conflict
c0519f0Trac #21204: fixup code and tests
5ce5276Merge branch 't/21319/sequences/rec-hash' into t/21204/sequences/k-regular-guess
00047ceTrac #21204: fix punctuation
3c634dfMerge branch 't/21319/sequences/rec-hash' into t/21204/sequences/k-regular-guess
8ee2328Merge tag '9.8.beta1' into u/cheuberg/sequences/k-regular-guess

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented Oct 2, 2022

Changed commit from 8ee2328 to 4337bd3

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented Oct 2, 2022

Branch pushed to git repo; I updated commit sha1. New commits:

4337bd3Fix pycodestyle issue E306

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented Oct 11, 2022

Branch pushed to git repo; I updated commit sha1. New commits:

ae06d17Trac #21204: Fix typo

@sagetrac-git
Copy link
Mannequin

sagetrac-git mannequin commented Oct 11, 2022

Changed commit from 4337bd3 to ae06d17

@cheuberg
Copy link
Contributor

Reviewer: Clemens Heuberger

@cheuberg
Copy link
Contributor

cheuberg commented Oct 11, 2022

comment:42

I started reading this and have a lot of questions. I might then have to reread the code because I am not yet confident that I understand everything, so I apologise in advance if some further questions pop up at a later iteration.

While reading the code, I tried to make some notes on what the various routines are doing; I pushed those notes to branch u/cheuberg/sequences/k-regular-guess-documentation; after polishing those, it might be worthwhile to include these.
Due to my question 16 below, these notes might still require substantial rewrite (I am not sure about left/right).

  1. k_regular_sequence.value in the docstring: the \operator does not yield the desired output in the HTML documentation.

  2. k_regular_sequence.split_interlace: from the description, I do not understand what "split a digit into p parts" shall mean. Instead of the many examples (which might be moved to TESTS) I'd prefer to see fewer examples with an explanation what the output means. Perhaps "split into p parts" could be made explicit into saying that it will be expanded as a k/p-ary expansion? And also say that "value of the expansion" means expansion in base k/p?

  3. kRegularSequenceSpace.guess: One-sentence description: perhaps "Guess a k-regular sequence whose first terms coincide with ..."?

  4. kRegularSequenceSpace.guess: it is unclear to me what "bootstrapping this guessing" means.

  5. kRegularSequenceSpace.guess: please use the "new" method linear_representation for all examples

  6. kRegularSequenceSpace.guess: In the first example, it may be helpful to explain what "variant 1" and "variant 2" are (variant 1: without a bootstrapping sequence; variant 2: with the constant sequence as a bootstrapping sequence).

  7. kRegularSequenceSpace.guess: I suggest to compare the outputs of Variant 1 and Variant 2 (that they yield the same sequence).

  8. kRegularSequenceSpace.guess: it would be helpful to indicate the vector valued sequences used in the various examples (Sum of digits, variant 1: (s(n), s(2n+1)); variant 2: (1, s(n)), all natural numbers: (n, 2n+1), indicator function of even integers: ([n even], 1), indicator function of odd integers: )

  9. kRegularSequenceSpace.guess: I suggest to rename all functions containing linear_dependence in their name to linear_combination (we are actually interested in the coefficients, not the existence of coefficients)

  10. kRegularSequenceSpace.guess: I suggest to rename guess_linear_dependence to linear_combination_candidate: we are not guessing here, but we are deriving the only candidate and are checking it in the next step.

  11. kRegularSequenceSpace.guess: I am surprised that verify_linear_dependence has (n_max - r_L) // k**t_L + 1 as an upper bound for the loop. I think that the code does not guarantee that it will never evaluate f for some higher values than n_max, that might happen in some_inverse_U_matrix. On the other hand, something might be considered to be linearly dependent on the available functions while in truth it is not; this should not cause real problems.

  12. kRegularSequenceSpace.guess: I do not understand the if seq(0): part: Why does it make a difference whether the zeroth element of the given sequence vanishes or not? I do not know whether it is related, but the following is not what I expect:

    sage: def s(k):
    sage:     return k
    sage: Seq2 = kRegularSequenceSpace(2, ZZ)
    sage: S1 = Seq2.guess(s)
    sage: S2 = Seq2.guess(s, sequence=S1)
    sage: S1
    2-regular sequence 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ...
    sage: S2
    2-regular sequence 0, -2, -2, -6, -2, -6, -10, -14, -2, -6, ...
    
  13. kRegularSequenceSpace.guess: I am surprised by if t_R >= max_dimension:: I thought that max_dimension will be the dimension of the matrices of the resulting regular sequence, but it seems to be the exponent? Shouldn't it be called like that in this case?

  14. kRegularSequenceSpace.guess: I do not understand why the parameter s is actually stored into lines, I do not think it is ever used.

  15. I do not understand why k_regular_sequence.split_interlace is defined in this ticket, it do not see a usage of it.

  16. I find it puzzling that the values function contains seq which in turn has the left vector of the given sequence times the matrix product, and this at the very end ends up in right.

@mkoeppe mkoeppe removed this from the sage-9.8 milestone Jan 29, 2023
dkrenn added a commit to dkrenn/sage that referenced this issue May 25, 2023
dkrenn added a commit to dkrenn/sage that referenced this issue May 25, 2023
dkrenn added a commit to dkrenn/sage that referenced this issue May 25, 2023
cheuberg added a commit to cheuberg/sage that referenced this issue May 25, 2023
cheuberg added a commit to cheuberg/sage that referenced this issue May 25, 2023
dkrenn added a commit to dkrenn/sage that referenced this issue May 26, 2023
…-guess-documentation' into u/dkrenn/sequences/k-regular-guess

* cheuberg/u/cheuberg/sequences/k-regular-guess-documentation:
  Add some further comments
  Add ALGORITHM section to docstring
  Trac sagemath#21204: Fix typo
  Fix pycodestyle issue E306
dkrenn added a commit to dkrenn/sage that referenced this issue Jul 4, 2023
…ar-warning

* t/21204/sequences/k-regular-guess: (11522 commits)
  Trac sagemath#21204: fixup code and tests
  Trac sagemath#21204: cherry-pick to avoid merge conflict
  Trac sagemath#21319: fixup due to changes in dependencies
  Trac sagemath#21318: fixup due to recent changes in dependencies
  Updated SageMath version to 9.3
  build/pkgs/fplll/spkg-install.in: Configure --without-qd if we use gcc from spkg
  build/pkgs/fplll/spkg-configure.m4: Add depcheck on gcc
  build/pkgs/ppl/spkg-configure.m4: Add depcheck on gcc
  build/pkgs/brial/spkg-configure.m4: Add depcheck on gcc
  build/pkgs/{freetype,libgd}/spkg-configure.m4: Add depcheck for gcc
  build/pkgs/zeromq/spkg-configure.m4: Add depcheck for gcc
  build/pkgs/ntl/spkg-configure.m4: Add depcheck for gcc
  Trac sagemath#21295 review issue 29: notice minimize vs field
  Trac sagemath#21295 review issue 7: document accessing coefficients
  Trac sagemath#21295 review issue 33: rename to number_of_zeros (as it should be)
  Trac sagemath#21203 review issue 4: rename to coefficient ring
  Trac sagemath#21295: rename to coefficient_ring
  Trac sagemath#21203 review issue 3: example for __getitem__ and __iter__
  Trac sagemath#21203 review issue 2: extend odds in Pascal's triangle
  Trac sagemath#21203 review issue 1: better binary sum of digits
  ...
dkrenn added a commit to dkrenn/sage that referenced this issue Jul 4, 2023
…ar-warning

* t/21204/sequences/k-regular-guess:
  Trac sagemath#21204: fix punctuation
  Trac sagemath#21319: fix punctuation
  Trac sagemath#21318: rmul/lmul preserve identity for multiplying by 1
  Trac sagemath#21325: fixup test .subsequence being identity
  Trac sagemath#21318: rmul/lmul preserve identity for multiplying by 1
  Trac sagemath#21325: use (new) decorator minimize_result
  Trac sagemath#21325: remove empty lines, fix punctuation
  Trac sagemath#21325: remove iteritems
  Trac sagemath#21318: fix rmul/lmul issues
  Trac sagemath#21318: use "correct" 1
  Trac sagemath#21318: use tensor_product in method hadamard_product
  Trac sagemath#21318: use is_trivial_zero in doctest of _neg_
  Trac sagemath#21318: use (new) .linear_representation in doctests
  Trac sagemath#21318: fix empty lines and punctuation
  Trac sagemath#21318: decorator minimize_result
  Trac sagemath#21203 review issue 10: use "raise ... from None" where approriate
@vbraun vbraun closed this as completed in fba3ecf Jul 20, 2023
@mkoeppe mkoeppe added this to the sage-10.1 milestone Jul 20, 2023
vbraun pushed a commit that referenced this issue Jul 30, 2023
gh-35896: deal with bad chosen representations of k-regular sequences
    
### 📚 Description

It deals with the situation when mu[0]*right != right in k-regular
sequences.

Fixes #21343. This PR is created from the branch/code that has been on
the corresponding trac ticket + merging in a current SageMath version.

See also meta issue #21202.

### 📝 Checklist

- [x] The title is concise, informative, and self-explanatory.
- [x] The description explains in detail what this PR is about.
- [x] I have linked a relevant issue or discussion.
- [x] I have created tests covering the changes.
- [x] I have updated the documentation accordingly.

### ⌛ Dependencies

- #21204: guessing k-regular sequences from the first few values

No formal dependencies, but there are trivial merge conflicts---in both
branches, methods are inserted at the same position in the code---
between:
- #21343: deal with mu[0]*right != right in k-regular sequences
- #35894: Regular sequences: implement convolution / ring structure
    
URL: #35896
Reported by: Daniel Krenn
Reviewer(s): cheuberg, Daniel Krenn
dkrenn added a commit to dkrenn/sage that referenced this issue Aug 3, 2023
* t/21343/k-regular-warning: (11523 commits)
  Trac sagemath#21343: adapt to removed transpose-property in dependency
  Trac sagemath#21204: fixup code and tests
  Trac sagemath#21204: cherry-pick to avoid merge conflict
  Trac sagemath#21319: fixup due to changes in dependencies
  Trac sagemath#21318: fixup due to recent changes in dependencies
  Updated SageMath version to 9.3
  build/pkgs/fplll/spkg-install.in: Configure --without-qd if we use gcc from spkg
  build/pkgs/fplll/spkg-configure.m4: Add depcheck on gcc
  build/pkgs/ppl/spkg-configure.m4: Add depcheck on gcc
  build/pkgs/brial/spkg-configure.m4: Add depcheck on gcc
  build/pkgs/{freetype,libgd}/spkg-configure.m4: Add depcheck for gcc
  build/pkgs/zeromq/spkg-configure.m4: Add depcheck for gcc
  build/pkgs/ntl/spkg-configure.m4: Add depcheck for gcc
  Trac sagemath#21295 review issue 29: notice minimize vs field
  Trac sagemath#21295 review issue 7: document accessing coefficients
  Trac sagemath#21295 review issue 33: rename to number_of_zeros (as it should be)
  Trac sagemath#21203 review issue 4: rename to coefficient ring
  Trac sagemath#21295: rename to coefficient_ring
  Trac sagemath#21203 review issue 3: example for __getitem__ and __iter__
  Trac sagemath#21203 review issue 2: extend odds in Pascal's triangle
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

7 participants