Hello! I am new to FET and in some manner I am also also new to timetabling. I am trying to figure out how FET can help me in solving my problem. It is a two stage problem. I'll try to explain it.
Consider a given year in FET. In my institution, in Spain, there are four sections: 1.- Ordinary spanish section, 2.-British program section, 3.-Bilingual English section and 4.- Bilingual French section. Each have three subjects not share with the other sections, but there are a good quantity of optional subjects that are common and elligible for all the students, no matter which section they pertain to. There are also optional subjects exclusive of each section. We have to form a maximum of 6 groups with a maximum of 30 students. Minimum number of students to teach a course is 10. If the number of students is under 10 they are encouraged to change their options. Usually, all groups are full or almost full. As a consequence we need to find a distribution of students among the groups in such a way some subjects run simultaneously and this requires that the subjects involved have no students in commmon. Up to my poor knownledge of FET details, I could do that with the FET-BP custom version. An additional "constraint" is that groups have to be as uniform as possible in the sense that students in each group should follow the common lectures (subjects) at the same time with the same teacher and separate only for optional subjects.
Up to now this hard work is done manually, spending weeks to find the appropiate distribution of students in the six different groups.
Do you think is it possible to solve this whitin FET?
Once the groups are established FET Official version could be use in the normal way to find a timetable, with teachers and room constraints and all this kind of things. Of course, this is a formidable problem, but the required previous problem that I have tried to describe is not a trivial one when the number optional subjects increase.
Thanks a lot.
Sounds like a problem that can be solved with FET-bp but also with StElTo.
Not 100% sure, since some information is missing.
I thinh you should just try, or sent us (old) data so we can have a closer look.
Of course, there are missing data. I will have a look at StEITo (I was not aware of their existence until now) and then I'll tell you all the details.
Thanks.
Maybe the first phase is possible with FET-BP, as Darren McDonald does. The students will not be placed in the same moment for two activities.
a) You have constraints for min/max students per block and teacher (constraint activities min/max simultaneous in selected time slots). The teachers are FET days and the blocks (time slots) are FET hours. You can use a progressive approach, strengthening the constraints as you find timetables.
I am not sure about:
1) If number of students is less than 10, they are encouraged to change their option - this should be done before inputting data to FET-BP?
2) Additional "constraint" - it is of course possible to say: same starting FET time (which means same teacher and same block) for some activities. But do you know which?
As Volker said, some pdf timetables of the previous years might help.
Hi,
thank you for your answers.
Next, I try to answer your questions:
1) If number of students is less than 10 they should change the option before inputting date in FET-BP, yes.
2) One of the problems is this: I don´t know which activities (one student, one subject) should go in a given block with a given teacher before solving the problem of partitioning the students set.
As a matter of fact I have tried FET-BP (I like it very much, specially speed) with some artificial, simple data. It solve very well the non-overlapping problem, but I can´t find a way to force the following: If a set of students meet in Spanish they should also meet in maths if possible. Remember a don't know weather students will meet in Spanish "a priori" . This is part of the problem to be solved.
Thanks a lot.
I attach a file with one unreal simple example. 20 students, 2 sections. In the Excel file I set the problem and one example of a feasible but not optimal solution. TXT file is a summary of the problem with some comments.
This is just to inform you that I am working on it. I like the way you explained things - it is very clear now. I'll let you know if I can think of something.
It is a very interesting and difficult situation.
I have some ideas:
Suppose: 4 groups GA, GB, GC, GD (like in your situation).
Then schedule the activities in a table with days = these 4 groups and hours = Spanish1, 2, 3, 4, Math1, 2, 3, ....
All activities of a student must be on the same day (existing constraint).
Say (unlike your example) we have 2 French and 3 Literature subgroups.
And activities: A1(Student1, French), A2(Student3, French), A3(Student1, Literature), A4(Student3, Literature).
If we place A1 on day GA hour French1, then if we place A2 on day GA it will be preferred 95% (or something like that) to be placed on hour French1, otherwise it goes to French2. If we place A2 on days GB, GC, or GD, it can go to any French (1 or 2).
Hmm, but what about the 30 hours per week constraint?
It is not going to be easy.
A quote from you:
"If we place A1 on day GA hour French1, then if we place A2 on day GA it will be preferred 95% (or something like that) to be placed on hour French1, otherwise it goes to French2. If we place A2 on days GB, GC, or GD, it can go to any French (1 or 2).
Hmm, but what about the 30 hours per week constraint? "
Yes, that's the question. Some Activities in GA will certainly go at the same time in the real timetable. In order to place A2(Student 3, French) in GA we have to be sure that all their other activities can run without overlappings.
My approach is as follows:
The table now have 4 columns (groups GA,GB,GC,GD) and 8 rows (Time slots for subjects, each with its own duration corresponding with different hours per week ). Subjects placed in a given column and row must to be planned together in the final timetable.
Consider now the activities for Student 1: A1(Student 1, French) A2( Student 1, Literature).......A8 (Student 1, Philoshophy) with no (Student 1, Chemistry)
Similar for Students 2 and 3 , A9(Student 2, French), A10 (Student 2, Chemistry).....A16(Student 2, Philosophy) with no (Student 1, Literature) and the rest as Student 1
A17(Student 3, French), A18(Student 3, Chemistry), A19(Student 3, Literature),.....A24(Student 3, Philosophy) and the rest equal to Student 1, for instance.
Now we place all the activities for Student 1 in column GA. For Student 2 we can place all but activity A10 in the same positions than for Student 1. For A10 we can choose among all slots with the same duration, for instance slot occupied by A2 (Student 1, Literature) because they share the same duration and could be planned together. These activities have no students in common.
When Student 3 arrives we cannot place it in the same column because she has activities A18 and A19 which were placed in the same slot before. She can´t attend Chemistry and Literature at the same time. So we can place Student 3 in another column (GB,GC,GD) or try to change our previous decisions in order to allocate all the activities of Student 3 in column GA. This is a kind of recursive algorithm, as yours in FET.
Another question is the order to visit activities. If we want forming groups as homogeneous as possible we can visit activities based in a kind of student's affinity. A measure of this affinity could be the number of subjects they have in common.
But I don´t know if this approach fits FET features or probably there is a much better and simple way to do it. I suspect it should.
Your approach enlightened me.
I think we can use the official FET, with the modification below:
From your example before: First, let's say we put A2, A10, and A18 on day GA hour 4. Then we need to put A19. Displace all activities of Student3 from the other days. Then, in the same day, search for subject Literature of A19 on this day. If it exists, we need to put it there and displaces A18. Otherwise if we put Literature A19 on other hour on day GA (say H1), all Literature activities from the same day GA and other hours than H1 are displaced.
I hope it will work.
Then we will see about other constraints, but this is the first step.
Please let me know what you think. I might begin some work on this, but I would also like your feed-back.
In the above method, how can we ensure your important condition that students from the same group should go together preferably? I think that we could use a progressive approach: on each hour (from 1 to 8) we can have a single subject? So add a constraint activities occupy max time slots from selection, activities with that subject, selected slots = say hour 5 (4 slots: GA 5, GB 5, GC 5, GD 5), max occupied = a progressive approach to minimize this value for all subjects.
Or try with StElTo, since it will fit all your needs.
If you want to keep the groups of the 3 subjects of SCIENCES, then don't add that 3 subjects separated. just add "SCIENCES" as subject name. Similar to HUMANITIES.
Enter all other subjects pretty normal.
By that you will get perfect results very fast.
It will generate a FET file and so you can set the correct 3 subjects to group SCIENCES (and HUMANITIES).
It sounds pretty good your method. I don't know the internals of FET, so I don't know what modifications are needed in order to solve this situation.
What do you think when you say "Displace all activities of Student3 from the other days" ? Do you mean trying to place all the activities of Student 3 in time slots corresponding to GA? I think this is correct. By definition a Student is in group GA if all its activities are in the column corresponding to GA. This doesn't mean that all the activities have to be held together with the group, but at least simultaneously with other activities of its classmates. I think your method should work.
I 'm not sure wether I understand the constraint "activities occupy max time slots from selection". You select a set of actvities, for instance all the activities involving Maths, and try to allocate them only in the selected slots. It will work as long as you can mantain all the selected activities in the same group they pertaint to.(column).
Thanks a lot for the interest you hace taken in this problem.
I am reading the manual from StEITo. I'll tell you.
Thanks
Quote from: josemgs on June 02, 2020, 07:23:54 PM
What do you think when you say "Displace all activities of Student3 from the other days" ? Do you mean trying to place all the activities of Student 3 in time slots corresponding to GA? I think this is correct. By definition a Student is in group GA if all its activities are in the column corresponding to GA.
Yes, this is what I mean.
Quote
I 'm not sure wether I understand the constraint "activities occupy max time slots from selection". You select a set of actvities, for instance all the activities involving Maths, and try to allocate them only in the selected slots. It will work as long as you can mantain all the selected activities in the same group they pertaint to.(column).
You can read that constraint's help. Select slots (GA,2), (GB,2), (GC,2), and (GD,2), and all activities of Math, and say max occupied slots = 3.
Please tell me: each subject can be on a single FET hour in our notation (a table row)?
Also please tell me: duration 5 activities are on different FET hours (from 1 to 8) than duration 3 activities?
"Please tell me: each subject can be on a single FET hour in our notation (a table row)? "
Yes, it can.
Also please tell me: duration 5 activities are on different FET hours (from 1 to 8) than duration 3 activities?
Yes.They must be in different FET hours.
Quote from: josemgs on June 02, 2020, 09:34:06 PM
"Please tell me: each subject can be on a single FET hour in our notation (a table row)? "
Yes, it can.
No, I meant: "it must?" I mean it is mandatory for an optional subject to be on say line 7? Or it can be on lines 6, 7, or 8? Or only 7 or 8?
Up to my understanding any optional subject can go to any slot
with subjects of same duration. This is because subjects in same slot and same group have to be
planned same day and same hour in the final timetable.
Slots 1 to 8 correspond to the 8 subjects every student has to choose. In reference to our example I posted before this means 3 slots for three subjects with duration 5 hours per week, and 5 slots for subjects with 3 hours duration (in a real problem you have, for instance, 10 slots with durations 4,4,4,4,3,3,2,2,2).
So, in a given slot you must place only activities attached to subjects of same duration.
I hope this can answer your question. This is the way I understand it.
Do you mean 10 slots with durations 5,4,4,4,4,3,3,2,2,2? (you forgot the 5?)
May I assume hours 1..3 are for mandatory, and hours 4..8 for the optionals?
I'm sorry, I missed a number.
Yes, you can safely assume that 1..3 are for mandatory and 4..8 for optionals. In a general case this is dictated by the durations (in hours per week) of the different subjects. Ideally you don't want to mixed subjects in slots 1..3 unless it is unavoidable. What is really important, I think, is that time slots received only subjects with same duration.
Do you think is it possible to do it in Official FET with minor modifications or is it a major change?
Hmm, if we can mix duration 5 with duration 3 activities, our approach with 8 FET hours will not work, because we will end up with more than 30 hours per week. Can we assume that on each FET hour we must have same duration activities?
I am not sure from your answer, each FET hour has same duration activities? Please confirm.
Not with the official FET, but maybe the changes might be not so complicated. I will try soon and let you know.
Quote from: Liviu Lalescu on June 03, 2020, 01:06:14 PM
I am not sure from your answer, each FET hour has same duration activities? Please confirm.
Not with the official FET, but maybe the changes might be not so complicated. I will try soon and let you know.
I confirm: Each FET hour has same duration activities.
OK then, I will try as I said on my reply #8 (https://lalescu.ro/liviu/fet/forum/index.php?topic=4482.msg24675#msg24675)
I will let you know as soon as I have something. I think I will begin work today, but not sure if right now.
Ok, don't worry. Do not work under pressure! :)
I think I am on a good path. I have just put a test version for you here: https://lalescu.ro/liviu/fet/download/custom/josemgs/
I also attach a screenshot (view the activities timetable).
There is a file in the examples directory, you can generate some timetables and check. Please use the latest, liviu15.fet.
I added these things, as explained in the readme-josemgs.txt file:
- When placing an activity on day d, all the activities with the same subject from day d must be at the same hour.
- The comments of the subjects: "MOR=x" (without quotes) means the maximum number of occupied rows for a subject.
Please let me know how should he continue, what hard/soft constraints are not satisfied.
It looks pretty good at first sight!!! :)
I'll try to follow your instructions an perhaps testing with a little mor complex instance. I'll tell you as soon as possible wether I find room for improvement.
Thanks a lot.
There will be surely needed more constraints, either existing or newly custom made. I did not consider many of your needed requirements.
I added some more constraints activities occupy max time slots from selection and it seems that the timetables are better. Please see attached screenshot and input file.
I think we need to add constraints for min/max number of activities on a single row. But I will wait for your feedback.
I think in the solution below Applied Maths is not OK?
Wow!! This seems to be a better solution. What I am looking for is to minimise subjects that must run simultaneosly involving different groups (FET days) but at the same time trying to form courses with maximum allowed number of students.
In the case of Applied Maths for this solution is not very good as you say, this implies courses with too few students or very difficult or impossible combinations of too many groups. Also it would be better for Physics and Maths to have groups of 4 students each than having two groups of 5 students and only one with 2, but this is less important. It is a trade-off between number of students and number of different groups that meet to visit a course.
You go too fast for me. I think much more slowly
I apologize. Please only go in your speed.
I attach a file (initial and a solution) doing what you say for Math and Physics (max Math or Physics in a slot is 4). You need to be careful, this is a compulsory constraint (100%).
I'm sorry, I am a newby in FET and I am not able distinguish between the two files attached, initial and a solution, but I managed to generate another solution. In my solution I get three groups with 4 maths students and another student from history. The problem with this solutions is that force to run all three maths courses at the same time, with different teachers,which is normally not desired. Another posibility is to let a course of History with two students only, not too bad for a case with a maximum of 5 students. What I mean is that it is not always optimal to join maths and history, french and english in all three groups, say GA, GC and GD, because this implies that these courses must run simultaneously. It would be better sometimes having maths and history and other having maths and latin.
I hope I'm not confusing you.
Nevetheless in my opinion you have achieved a major advanced. Now I can design groups in a variety of ways with lots of posibilities. Normally, the only fact of partitioning students in non-overlapping sets is a very hard task.
Apart from the improvements you can implemented on this stage there are two remaining questions that I am not able to figure out how to tackle. The first one is:
Once a beatiful partitioning is achieved, how do the groups combine in order to perform all the activities?
The second one perhaps is trivial using FET, I don´t know. Once you hace a solution above, how do you get a final timetabling respecting the constraints obtained in that solution?
Finally, I am preparing a more elaborate example with all the four sections in the institution, with about 170 students, 40 subjects... I think this could shed more light about the quality of the solutions.
I'm sorry, too much words..
1) data_and_timetable.fet is a fixed file (solution).
2) Could we consider that each FET hour is a real hour?
3) There is now a constraint for max occupied rows for subjects (with "MOR=x" in the subject's comments, as I said, because I am lazy now to implement the constraint properly). Would it be useful for your problem to add a second customization, "MAR=y", max activities in a row for a subject? So we'll add this with 8 for Math.
4) Referring to your question - how do the groups combine? The groups could combine just as they are on the FET rows? I am not sure I understand.
5) I am not sure I understand "a final timetable". Couldn't we just use (2) and (4) above?
6) Maybe we could stay a bit on this simple example? So I can understand better?
7) We could also add the opposite constraint to (3) - "mAR=z" - minimum activities in a row for a subject.
Please let me know if you are interested in an implementation of (3), and if needed (7) above.
I think there is a little bit of confusion, sorry for that.
We have 20 students that have choosen their subjects. We have also how many groups we can form for this students (in this case 4: GA,GB,GC,GD). This is because we need to attach a reference Teacher for these groups. We desire they follow as much as posible all their subjects together. But we do know this is impossible for all the subjects. We also know how many hours per week for each subject is allowed and also how may subgroups we can build for them. For instance, we are allowed to form only one French subgroup, and 2 Literature subgroups but 4 Spanish subgroups.
I explain sometjhings and then I answer your questions.
These are the needed steps for me:
1) To distribute students in GA,GB,GC,GD in such a way they can visit all their subjects, and go together as much as possible. "A fortiori" some students must join another students from others groups to visit with them some subjects. (this is done with your modifications) Once the distribution is done there are usually many ways to join students from different groups. This is why we have the next step
2) Define how to join students (links between FET rows and days). For instance we can have French students in GA,GC and GD. We have only one subgroup for French, so they have to go out of class at the same time. What are doing meanwhile the rest of the students from groups GA,GC,and GD? They visit the subjects in the same slot where French is (for instance , Maths, Biology and Literature). But these can occur in the first hour of the day or in the middle. This is not fix by the distribution in 1. What it fixes are the subjects that must run simultaneously. Perhaps French Teacher is not available on mondays in the morning... So, this is "only" for forming groups, defining subgroups and establishing links between subgroups.
With this planning I go to the teachers and they choose which groups want to teach this year. They define their constraints and preferences and finally
3) I have to find a timetable in the usual way, respecting the constraints define in 1 and 2 apart from the usual constraints for teachers. I think this is easy with FET, because I define 5 days in a week, 6 hours in a day, the groups and subgroups and which groups and subjects have to run at the same time. I also include breaks and so on. In our example, for the sake of simplicity I have omitted these irrelevant details for problem in 1). As a matter of fact, and referring to our simplify example, Spanish is also unnecessary at this stage because must always ocuppy a complete slot with five students. We could design the partition of students into de 4 groups with only 7 slots and no Spanish at all.
I hope this can help. Let me know anything you don't understand, please.
Answers:
1) I don´t know why I don´t get a timetable when opening it in FET. It says I have to generate first.
2) No, FET hour are not real hours, only a trick to allocate subjects and to establish temporal relationships between students in the diferent groups and subjects. Specially simultaneity.
3) I am confortable with the comments trick "MOR=x". I believe I understand it. I'm not sure about the MAR=y second customization. I have to think of it. This would be useful perhaps if FET hours where real.... I'm not sure.
4) it is not always possible combine groups this way, because links propagate due to the limitation in number of groups for each subject. For instance we have to form only a group for students following French course.
5) Explained above, I hope.
6) Sure, probably we can make it more realistic, no more students nor subjects, but thinking in a final timetable with teachers and their avalaibility, etc...
Really I thank you.
The fixed timetable (data_and_timetable.fet) has locking constraints (activity preferred starting time), but you need to generate it once (it will be instantaneous).
I modified my post above and added point (7), but you don't have to answer, I think I got it wrong.
Please allow me more time to read your post and think.
Please let me know: can't we consider that each FET timetable row (FET hour) is a simultaneity constraint for all the 20 activities/students that are on that row? This is what I meant with real-life slots. We can then say that Math must occupy at least 2 rows, or Math must have at most 8 activities per hour/row? We can control simultaneity with custom constraints in this way.
To make the final timetable, you will use the output of this first phase of FET-josemgs.
I am tired now, not sure if I understand correctly, but tomorrow I will see your answers.
Quote from: Liviu Lalescu on June 04, 2020, 09:56:30 PM
Please let me know: can't we consider that each FET timetable row (FET hour) is a simultaneity constraint for all the 20 activities/students that are on that row? This is what I meant with real-life slots. We can then say that Math must occupy at least 2 rows, or Math must have at most 8 activities per hour/row? We can control simultaneity with custom constraints in this way.
I have studied josemgs-file-by-liviu-19_data_and_timetable and I think it is a good planning. I think you were right and as I said before I think slowlier... So yes, you can consider each FET row as a simultaneity constraint. I'm sorry. Some comments from you, because of my slowness lead me to think we were not in synchrony
Things that could probably be improved:
a) English is taught at the same time for all four groups.
b) Some subjects in a row are scattered over all the 4 or 3 groups. This could be unavoidable but perhaps can be minimised.
Quote from: Liviu Lalescu on June 04, 2020, 08:37:26 PM
Please let me know if you are interested in an implementation of (3), and if needed (7) above.
I agree this two new customization constraints could be very useful
I just put the latest version on https://lalescu.ro/liviu/fet/download/custom/josemgs/
For (a), you can add MAR=11 for the comments of subject English. For (b), you can use a constraint activities occupy max time slots from selection: select all activities of that subject, select all slots, max occupied = you do a progressive approach. I used this in the example file provided in the archive above for Math and Physics. Please see the example file in the directory "examples".
So, as a conclusion:
1) Activities occupy max time slots from selection, will constrain the total number of slots (column x row) for that subject. You need a progressive approach on this.
2) Comments of subject contain "MOR=x" -> max occupied rows (max sessions for a subject? Is that correct? Maybe only correct for subjects with less students?).
3) "MAR=y" -> max activities in a row (I added for Maths and English in that example file).
4) "mAR=z" -> min activities in a row (I added for Literature and Applied Maths)
I hope these are all that are needed.
Thank you very much. I've had a lot of work this morning, but in the evening I will try and let you know.
The "mAR=z" does not work as needed, I made many bugs in this part. Please allow me to correct them and put a new version. The other constraints seem to be OK.
I hope now it is correct: https://lalescu.ro/liviu/fet/download/custom/josemgs/ (get this latest version, josemgs4, please.)
Please inform me if it does not work as expected (crashes, locks, wrong results, impossible to finish timetables when they should be possible).
Quote from: Liviu Lalescu on June 05, 2020, 12:18:48 PM
2) Comments of subject contain "MOR=x" -> max occupied rows (max sessions for a subject? Is that correct? Maybe only correct for subjects with less students?).
Yes, it is max sessions for a subject per week (or maximum groups of students you can form for that subject). It applies to all subjects, but perhaps unnecesary for subjects like Spanish in the example, that must follow all the students.
In the week-end I'll try with your latest version.
Thanks.
Quote from: josemgs on June 05, 2020, 06:50:45 PM
Quote from: Liviu Lalescu on June 05, 2020, 12:18:48 PM
2) Comments of subject contain "MOR=x" -> max occupied rows (max sessions for a subject? Is that correct? Maybe only correct for subjects with less students?).
Yes, it is max sessions for a subject per week (or maximum groups of students you can form for that subject). It applies to all subjects, but perhaps unnecesary for subjects like Spanish in the example, that must follow all the students.
In the week-end I'll try with your latest version.
Thanks.
Be careful, in FET-josemgs "MOR" means literally max occupied rows (a row = a FET hour). So it might not be exactly what you need for activities with more students. We can talk about it if you have problems with it.
You are welcome! :)
I added a special custom version information here: https://lalescu.ro/liviu/fet/custom.html (it is number 4 for now). Let me know if you want any changes / have suggestions.
I think I've found a little 'bug'. When a comment is added to a subject, like mAR=5, for instance, it remains there forever even if it is delete afterwards.
If you want to verify it I've found it in this way:
In the example-josemgs.fet
1) I added the following restrictions Spanish MAR=10, History mAR=3, Latin mAR=3.
2) This in turn, seems to be impossible. Excecution stops after allocating 59 activities.
3) I deleted Spanish MAR=10 and the run had exactly the same behaviour.
4) I quit after saving (with another filename and letting constraints for Latin and History) and I restarted. I opened the new created file. Every thing was OK.
Great catch! You are a good collaborator!
Expect a quick fix in say about 30 minutes (to compile Windows and to check).
I have just put the new version (5): https://lalescu.ro/liviu/fet/download/custom/josemgs/
:) It works fine.
That's good!
I forgot to tell you that you also have the constraint "activities min simultaneous in selected time slots", select "Allow empty slots", and it might be useful.
Quote from: Liviu Lalescu on June 06, 2020, 11:03:14 AM
That's good!
I forgot to tell you that you also have the constraint "activities min simultaneous in selected time slots", select "Allow empty slots", and it might be useful.
Yes, I realized about that constraint yesterday. It is also useful in case you don't have groups (FET days in our case) with same number of students.
I'll tell you when testing with a real case. Probably I will have some questions...
Thanks a lot for your fantastic work ( I can not expected less from a person cited in one of Knuth's book)
Note:
I don't know if it is of interest for other fet users. This morning I managed to compile fet-josemgs5 under Linux Mint LMDE4 Debbie successfully, cleanly and fastly.
You are welcome! Thank you for your nice words! :)
Yes, it should compile OK on any platform Qt supports.
I want to ask you how did you find that I am cited in Knuth's books? I wrote on my CV only that I have some reward checks. Are you reading the books yourself, also? Also, I think I am in two books, vol. 2 (with a minor improvement to the old random number generator used in FET) and vol. 4A with a simpler solution to a simple problem.
Yes, I have used "The Art of Computer Programming" in the past, but I found you were cited there here https://lalescu.ro/liviu/fet/doc/en/other-algorithms-references.html (https://lalescu.ro/liviu/fet/doc/en/other-algorithms-references.html), and a search in google about this topic. I didn't know you had also contributed in other problems. Congratulations!!
And remember that a problem always seems to be very simple when you find a solution!
Or as Feynman liked to say, "mathematicians can prove only trivial theorems, because every theorem that's proved is trivial".
Thank you! :)