Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
2188 views
1
'''
2
This file assumes that the conjecturing spkg is installed and that 'conjecturing.py'
3
and 'numbertheory.py' is loaded.
4
'''
5
6
def automatedSearch(objects, invariants, mainInvariant, universe, upperBound=True, steps=10, verbose=False):
7
if verbose:
8
print("Starting with these objects:")
9
for i in objects:
10
print(" {}".format(i))
11
print("")
12
print("Available invariants:")
13
for pos, invariant in enumerate(invariants):
14
if type(invariant) == tuple:
15
name, _ = invariant
16
elif hasattr(invariant, '__name__'):
17
name = invariant.__name__
18
else:
19
name = 'invariant_{}'.format(pos)
20
if pos + 1 == mainInvariant:
21
print(" * {}".format(name))
22
else:
23
print(" {}".format(name))
24
print("")
25
for step in range(steps):
26
l = conjecture(objects, invariants, mainInvariant, upperBound=upperBound)
27
if verbose:
28
print("Found the following conjectures:")
29
for c in l:
30
print(" {}".format(c))
31
print("")
32
noCounterExample = True
33
for i in universe:
34
try:
35
if any([not c.evaluate(Integer(i)) for c in l]):
36
print "Step {}: Adding {}".format(step+1, i)
37
objects.append(i)
38
universe.remove(i)
39
noCounterExample = False
40
break
41
except:
42
print("Error while checking {}".format(i))
43
raise
44
if noCounterExample:
45
print "No counterexample found"
46
break
47
if not noCounterExample:
48
l = conjecture(objects, invariants, mainInvariant, upperBound=upperBound)
49
return l
50
51
def riemann(x):
52
return abs(prime_pi(x)-li(x)+li(2))
53
54
invariants = [riemann] + invariants
55
56
objects = [Integer(3)]
57
universe = [Integer(n) for n in range(3, 1000001)]
58
59
for n in objects:
60
universe.remove(n)
61
62
invariants.remove(('Li', li))
63
invariants.remove(('_prime_pi', prime_pi))
64
invariants.remove(goldbach) #only for even numbers
65
66
mainInvariant = invariants.index(riemann)
67
68
conjectures = automatedSearch(objects, invariants, mainInvariant, universe, steps=200, verbose=True, upperBound=True)
69
#conjectures = automatedSearch(objects, invariants, mainInvariant, universe, steps=10, verbose=True, upperBound=True)
70
71
print("The conjectures are stored in the variable conjectures.")
72
73