<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel rdf:about="https://community.wolfram.com">
    <title>Community RSS Feed</title>
    <link>https://community.wolfram.com</link>
    <description>RSS Feed for Wolfram Community showing any discussions tagged with Symbolic Computations sorted by most viewed.</description>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/1106375" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/1296252" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/1063480" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/1241479" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/1008112" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/546818" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/1032663" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/823320" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/415820" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/1056910" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/1057642" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/1024712" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/911604" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/855400" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/826533" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/1863194" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/1395518" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/1164210" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/1575783" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/1664846" />
      </rdf:Seq>
    </items>
  </channel>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/1106375">
    <title>Use Solve with a condition of a limit  x  is much less than D?</title>
    <link>https://community.wolfram.com/groups/-/m/t/1106375</link>
    <description>Greetings,&#xD;
I am working on a very complicated equation that needs to be solved.  To simplify the function I use a limit in which x is much less than D or  ( x&amp;lt;&amp;lt;D).  I cannot find much less/greater condition in Mathematica.   I need to solve that equation symbolically and I know that I should get  four solutions. By taking a limit manually I got something like A*x^4-B*x^2+C=0.   Then using solve I was able to get  four solution, but with coefficients that were very long. (In manual calculations,  I was able to get shorter coefficients)&#xD;
How do I solve equation with much less condition? &#xD;
Just for the sake of example let say I want to solve        &#xD;
&#xD;
f(x)= sqrt( D^2 - ( x - z )^2 ) + x * cos(a) + x  + z &#xD;
&#xD;
after limit &#xD;
&#xD;
f(x)=  sqrt( D^2 - ( z )^2 ) + x * cos(a) + x  + z &#xD;
&#xD;
Is there a command in Mathematica to selectively simplify/factor/expand some terms instead all terms in equations?</description>
    <dc:creator>Adam Szewczyk</dc:creator>
    <dc:date>2017-05-25T01:56:46Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/1296252">
    <title>Keep only positive and real solutions from Solve?</title>
    <link>https://community.wolfram.com/groups/-/m/t/1296252</link>
    <description>Hi people,&#xD;
&#xD;
I have a problem where I get four solutions to an equation system. Two imaginary, one negative and one positive. Can I somehow automatically tell Mathematica to only keep the real and positive answer?&#xD;
&#xD;
Sort of:&#xD;
&#xD;
    Solve[equation1==equation2, x]//Real//Positive&#xD;
&#xD;
Thanks!&#xD;
//Freddy, Sweden</description>
    <dc:creator>Fredrik Erling</dc:creator>
    <dc:date>2018-03-05T15:24:25Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/1063480">
    <title>Formula for computing sqrt(2) of binary numbers</title>
    <link>https://community.wolfram.com/groups/-/m/t/1063480</link>
    <description>&amp;amp;[Wolfram Notebook][1]&#xD;
&#xD;
&#xD;
  [1]: https://www.wolframcloud.com/obj/373ccb1d-e97f-40ec-aa0a-0d3001c4728d</description>
    <dc:creator>Mariusz Iwaniuk</dc:creator>
    <dc:date>2017-04-16T22:38:51Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/1241479">
    <title>Solve a system of equations?</title>
    <link>https://community.wolfram.com/groups/-/m/t/1241479</link>
    <description>I need to solve this apparently simple system of equations in Mathematica, but it gives me an error message, that Equations may not give solutions for all &amp;#034;solve&amp;#034; variables. The command is &#xD;
&#xD;
    sol = Solve[{x1 == x A1/(x A1 + y A3), x2 == x A2/(x A2 + y A4), &#xD;
       x3 == y A3/(x A1 + y A3), x4 == y A4/(x A2 + y A4), &#xD;
       x1 + x2 + x3 + x4 == 2, x + y == 1}, {x1, x2, x3, x4, x, y}]&#xD;
&#xD;
Any help is appreciated.</description>
    <dc:creator>Alex Token</dc:creator>
    <dc:date>2017-12-08T08:28:45Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/1008112">
    <title>Get the Dot product of two vectors with complex components?</title>
    <link>https://community.wolfram.com/groups/-/m/t/1008112</link>
    <description>I am trying to obtain the scalar product of two vectors whose components are complex valued. I can do the maths (as I understand it) by hand for my first simple examples but struggle with Mathematica 11. The simplest task which is to establish the Norm of these vectors works fine, but when I then try to get the Dot product, I get an error from Mathematica. I am sure that I have the syntax wrong somewhere or that I need to use the INNER function rather than Dot but I cannot get that to work either based on my reading of the Mathematica Help. I have attached a very simple Notebook to illustrate my problem.&#xD;
&#xD;
Any help will be gratefully received.&#xD;
&#xD;
Thanks David</description>
    <dc:creator>David Mackay</dc:creator>
    <dc:date>2017-02-04T17:36:50Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/546818">
    <title>Given an exact formula get probability distribution with matching PDF?</title>
    <link>https://community.wolfram.com/groups/-/m/t/546818</link>
    <description>[Crossposting][1] here to get a wider opinion. So, given some data, *Mathematica* 10.2 can now attempt to figure out what probability distribution might have produced it. Cool! But suppose that, instead of having data, we have something that is in some ways better -- a formula. Let&amp;#039;s call it $f$. We suspect -- perhaps because $f$ is non-negative over some domain and because the integral of $f$ over that domain is 1 --  that $f$ is actually the PDF of some distribution (Normal, Lognormal, Gamma, Weibull, etc.) or some relatively simple transform of that distribution. &#xD;
&#xD;
Is there any way that *Mathematica* can help figure out the distribution (or simple transform) whose PDF is the same as $f$?&#xD;
&#xD;
Example: Consider the following formula:&#xD;
&#xD;
    1/(2*E^((-m + Log[5])^2/8)*Sqrt[2*Pi])&#xD;
&#xD;
$$\frac{e^{-\frac{1}{8} (\log (5)-m)^2}}{2 \sqrt{2 \pi }}$$&#xD;
&#xD;
As it happens -- and as I discovered with some research and guesswork -- this formula is the PDF of `NormalDistribution[Log[5], 2]` evaluated at $m$. But is there a better way than staring or guessing to discover this fact?  That is, help me write `FindExactDistribution[f_, params_]`.&#xD;
&#xD;
Notes&#xD;
---&#xD;
&#xD;
 - The motivation for the problem comes from thinking about Conjugate Prior distributions but I suspect it might have a more general application. &#xD;
&#xD;
 - One could start with mapping PDF evaluated at $m$ over a variety of continuous distributions.  And if I did this I would at some point get to what I will call $g$, which is the PDF or the `NormalDistribution` with parameters $a$ and $b$ evaluated at $m$.&#xD;
&#xD;
        1/(b*E^((-a + m)^2/(2*b^2))*Sqrt[2*Pi])&#xD;
&#xD;
$$\frac{e^{-\frac{(m-a)^2}{2 b^2}}}{\sqrt{2 \pi } b}$$&#xD;
&#xD;
But unless I knew that if I replaced $a$ by `Log[5]` and $b$ by $2$ that I would get $f$, this fact would not mean a lot to me. I suppose I could look at the `TreeForm` of $f$ and $g$ and I would notice certain similarities, and that might be a hint, but I am not sure how to make much progress beyond that observation. Ultimately, the problem looks to be about finding substitutions in parts of a tree ($g$) which, after evaluation, yield a tree that matches a target $f$. I have the suspicion that this is a difficult problem with an NKS flavor but one for which *Mathematica* and its ability to transform expressions might be well suited.&#xD;
&#xD;
&#xD;
  [1]: http://mathematica.stackexchange.com/q/91408/13</description>
    <dc:creator>Seth Chandler</dc:creator>
    <dc:date>2015-08-12T18:27:19Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/1032663">
    <title>Code puzzles: turning docs into educational games</title>
    <link>https://community.wolfram.com/groups/-/m/t/1032663</link>
    <description>Teaching programing and assessing learning progress is often a very custom task. I wanted to create a completely automated &amp;#034;practically&amp;#034; infinite stream of random puzzles that guide a leaner towards improving programing skills. I think the major problem is content creation. To test whether the learner knows a programming concept, an exercise needs to be wisely designed. And it is better to have a randomized set of such exercises to definitely test the knowledge and exclude guesses and cheating and so on. Often creating such educational materials is very tedious, time consuming, and manual. Exactly like creating good documentation. I will explain one simple idea of using docs to make an educational game. This is just a barebone prototype to clearly follow the inner workings (try it out &amp;amp; share: https://wolfr.am/bughunter ). Please comment with feedback on how we can develop this idea further. &#xD;
&#xD;
[![enter image description here][1]][3]&#xD;
&#xD;
# Introduction: efficient use of resources &#xD;
&#xD;
The docs are the finest wealth and depth of information and should be explored beyond their regular usage. Manual painstaking time consuming effort of creating good programing documentation should be used to its fullest potential. An automated game play would be a novel take on docs. We can use existing code examples in docs to randomly pull pieces of code and make programing exercises automatically. Being able to read code and find bugs is, in my experience, one of the most enlightening practices. The goal of the linked above game is to find a defect of the input code (bug) and fix it. Hence, the &amp;#034;bug hunter&amp;#034;. There are just 2 possible outcomes of a single game cycle, --- and after each you can &amp;#034;try again&amp;#034;: &#xD;
&#xD;
![enter image description here][4]&#xD;
&#xD;
# Core game code: making puzzles&#xD;
&#xD;
Wolfram Language (WL) documentation is one of the best I&amp;#039;ve seen. It has pages and pages of examples starting from simple ones and going though the all details of the usage. Moreover the docs are written in WL itself and furthermore, WL can access docs and even has internal self-knowledge of its structure via WolframLanguageData. For instance, this is how you can show a relationship community graph for symbols related to `GatherBy`:&#xD;
&#xD;
    WolframLanguageData[&amp;#034;GatherBy&amp;#034;, &amp;#034;RelationshipCommunityGraph&amp;#034;]&#xD;
&#xD;
![enter image description here][5]&#xD;
&#xD;
We can use `WolframLanguageData` to access docs examples and then drop some parts of the code. The puzzle is then for the learner to find what is missing. For the sake of clarity designing a small working prototype lets limit test WL functions and corresponding docs&amp;#039; pages to some small number. So out of ~5000 (and we [just released a new addition][6]):&#xD;
&#xD;
    WolframLanguageData[] // Length&#xD;
&#xD;
`4838`&#xD;
&#xD;
built in symbols I just take 30&#xD;
&#xD;
    functions = {&amp;#034;Append&amp;#034;, &amp;#034;Apply&amp;#034;, &amp;#034;Array&amp;#034;, &amp;#034;Cases&amp;#034;, &amp;#034;Delete&amp;#034;, &amp;#034;DeleteCases&amp;#034;, &amp;#034;Drop&amp;#034;, &amp;#034;Except&amp;#034;, &#xD;
    &amp;#034;Flatten&amp;#034;, &amp;#034;FlattenAt&amp;#034;, &amp;#034;Fold&amp;#034;, &amp;#034;Inner&amp;#034;, &amp;#034;Insert&amp;#034;, &amp;#034;Join&amp;#034;, &amp;#034;ListConvolve&amp;#034;, &amp;#034;Map&amp;#034;, &amp;#034;MapThread&amp;#034;, &#xD;
     &amp;#034;Nest&amp;#034;, &amp;#034;Outer&amp;#034;, &amp;#034;Partition&amp;#034;, &amp;#034;Prepend&amp;#034;, &amp;#034;ReplacePart&amp;#034;, &amp;#034;Reverse&amp;#034;, &amp;#034;RotateLeft&amp;#034;, &amp;#034;RotateRight&amp;#034;, &#xD;
    &amp;#034;Select&amp;#034;, &amp;#034;Sort&amp;#034;, &amp;#034;Split&amp;#034;, &amp;#034;Thread&amp;#034;, &amp;#034;Transpose&amp;#034;};&#xD;
    &#xD;
    functions // Length&#xD;
    30&#xD;
&#xD;
that are listed on a [very old but neat animated page][7] of some essential core-language collection. I will also add some &amp;#034;sugar syntax&amp;#034; to potential removable parts of code:&#xD;
&#xD;
    sugar = {&amp;#034;@@&amp;#034;, &amp;#034;@&amp;#034;, &amp;#034;/@&amp;#034;, &amp;#034;@@@&amp;#034;, &amp;#034;#&amp;#034;, &amp;#034;^&amp;#034;, &amp;#034;&amp;amp;&amp;#034;};&#xD;
&#xD;
So, for instance, out of the following [example in docs][8] we could remove a small part to make a puzzle:&#xD;
&#xD;
![enter image description here][9]&#xD;
&#xD;
Here is an example of &amp;#034;sugar syntax&amp;#034; removal, which for novice programmers would be harder to solve:&#xD;
&#xD;
![enter image description here][10]&#xD;
&#xD;
Next step is to define a function that can check if a string is a built-in symbol (function, all 5000) or if it is some of sugar syntax we defined above:&#xD;
&#xD;
    ClearAll[ExampleHeads];&#xD;
    ExampleHeads[e_]:=&#xD;
    Select[&#xD;
    	Cases[e,_String, Infinity],&#xD;
    	(NameQ[&amp;#034;System`&amp;#034;&amp;lt;&amp;gt;#]||MemberQ[sugar,#])&amp;amp;&amp;amp;#=!=&amp;#034;Input&amp;#034;&amp;amp;&#xD;
    ]&#xD;
&#xD;
Next function essentially makes a single quiz question. First it randomly picks a function from list of 30 symbols we defined. Then it goes to the doc page of that symbol to the section called &amp;#034;Basic Examples&amp;#034;. It finds a random example and removes a random part out of it:&#xD;
&#xD;
    ranquiz[]:=Module[&#xD;
    	{ranfun=RandomChoice[functions],ranexa,ranhead},&#xD;
    	ranexa=RandomChoice[WolframLanguageData[ranfun,&amp;#034;DocumentationBasicExamples&amp;#034;]][[-2;;-1]];&#xD;
    	ranhead=RandomChoice[ExampleHeads[ranexa[[1]]]];&#xD;
    	{&#xD;
    		ReplacePart[#,Position[#,ranhead]-&amp;gt;&amp;#034;&amp;#034;]&amp;amp;@ranexa[[1]],&#xD;
    		ranexa[[2]],&#xD;
    		ranhead,&#xD;
    		ranfun&#xD;
    	}&#xD;
    ]&#xD;
&#xD;
Now we will define a few simple variables and tools. &#xD;
&#xD;
# Image variables&#xD;
&#xD;
I keep marveling how convenient it is that Mathematica front end can make images to be part of code. This makes notebooks a great IDE:&#xD;
&#xD;
![enter image description here][11]&#xD;
&#xD;
# Databin for tracking stats&#xD;
&#xD;
It is important to have statistics of your learning game: to understand how to improve it where the education process should go. [Wolfram Datadrop][12] is an amazing tool for these purposes. &#xD;
&#xD;
[![enter image description here][13]][14]&#xD;
&#xD;
We define the databin as &#xD;
&#xD;
    bin = CreateDatabin[&amp;lt;|&amp;#034;Name&amp;#034; -&amp;gt; &amp;#034;BugHunter&amp;#034;|&amp;gt;]&#xD;
&#xD;
# Deploy game to the web&#xD;
&#xD;
To make an actual application usable by everyone with internet access I will use [Wolfram Development Platform][15] and [Wolfram Cloud][16]. First I define a function that will build the &amp;#034;result of the game&amp;#034; web page. It will check is answer is wrong or right and give differently designed pages accordingly.&#xD;
&#xD;
    quiz[answer_String,check_String,fun_String]:=&#xD;
    (&#xD;
    DatabinAdd[Databin[&amp;#034;kd3hO19q&amp;#034;],{answer,check,fun}];&#xD;
    Grid[{&#xD;
    	{If[answer===check,&#xD;
    		Grid[{{Style[&amp;#034;Right! You got the bug!&amp;#034;,40,Darker@Red,FontFamily-&amp;gt;&amp;#034;Chalkduster&amp;#034;]},{First[imgs]}}],&#xD;
    		Grid[{{Style[&amp;#034;Wrong! The bug got you!&amp;#034;,40,Darker@Red,FontFamily-&amp;gt;&amp;#034;Chalkduster&amp;#034;]},{Last[imgs]}}]&#xD;
    	]},&#xD;
    	&#xD;
    	{Row[&#xD;
    	{Hyperlink[&amp;#034;Try again&amp;#034;,&amp;#034;https://www.wolframcloud.com/objects/user-3c5d3268-040e-45d5-8ac1-25476e7870da/bughunter&amp;#034;],&#xD;
    	&amp;#034;|&amp;#034;,&#xD;
    	hyperlink[&amp;#034;Documentation&amp;#034;,&amp;#034;http://reference.wolfram.com/language/ref/&amp;#034;&amp;lt;&amp;gt;fun&amp;lt;&amp;gt;&amp;#034;.html&amp;#034;],&#xD;
    	&amp;#034;|&amp;#034;,&#xD;
    	hyperlink[&amp;#034;Fun hint&amp;#034;,&amp;#034;http://reference.wolfram.com/legacy/flash/animations/&amp;#034;&amp;lt;&amp;gt;fun&amp;lt;&amp;gt;&amp;#034;.html&amp;#034;]},&#xD;
    	Spacer[10]&#xD;
    	]},&#xD;
    	{Style[&amp;#034;====================================================&amp;#034;]},&#xD;
    	{hyperlink[&amp;#034;An Elementary Introduction to the Wolfram Language&amp;#034;,&amp;#034;https://www.wolfram.com/language/elementary-introduction&amp;#034;]},&#xD;
    	{hyperlink[&amp;#034;Fast introduction for programmers&amp;#034;,&amp;#034;http://www.wolfram.com/language/fast-introduction-for-programmers/en&amp;#034;]},&#xD;
    	{logo}&#xD;
    }]&#xD;
    )&#xD;
&#xD;
This function is used inside `CloudDeploy[...FormFunction[...]...]` construct to actually deploy the application. `FormFunction` builds a query form, a web user interface to formulate a question and to get user&amp;#039;s answer. Note for random variables to function properly `Delayed` is used as a wrapper for `FormFunction`.&#xD;
&#xD;
     CloudDeploy[Delayed[&#xD;
    	quizloc=ranquiz[];&#xD;
    	FormFunction[&#xD;
    		{{&amp;#034;code&amp;#034;,None} -&amp;gt; &amp;#034;String&amp;#034;,&#xD;
    		{&amp;#034;x&amp;#034;,None}-&amp;gt;&amp;lt;|&#xD;
    			&amp;#034;Input&amp;#034;-&amp;gt;StringRiffle[quizloc[[3;;4]],&amp;#034;,&amp;#034;],&#xD;
    			&amp;#034;Interpreter&amp;#034;-&amp;gt;DelimitedSequence[&amp;#034;String&amp;#034;],&#xD;
    			&amp;#034;Control&amp;#034;-&amp;gt;Function[Annotation[InputField[##],{&amp;#034;class&amp;#034;-&amp;gt;&amp;#034;sr-only&amp;#034;},&amp;#034;HTMLAttrs&amp;#034;]]|&amp;gt;}, &#xD;
    		quiz[#code,#x[[1]],#x[[2]]]&amp;amp;,&#xD;
    		AppearanceRules-&amp;gt; &amp;lt;|&#xD;
    			&amp;#034;Title&amp;#034; -&amp;gt; Grid[{{title}},Alignment-&amp;gt;Center],&#xD;
    			&amp;#034;MetaTitle&amp;#034;-&amp;gt;&amp;#034;BUG HUNTER&amp;#034;,&#xD;
    			&amp;#034;Description&amp;#034;-&amp;gt; Grid[{&#xD;
    			{Style[&amp;#034;Type the missing part of input code&amp;#034;,15, Darker@Red,FontFamily-&amp;gt;&amp;#034;Ayuthaya&amp;#034;]},&#xD;
    			{Rasterize@Grid[{&#xD;
    				{&amp;#034;In[1]:=&amp;#034;,quizloc[[1]]},&#xD;
    				{&amp;#034;Out[1]=&amp;#034;,quizloc[[2]]}},Alignment-&amp;gt;Left]}&#xD;
    			}]&#xD;
    		 |&amp;gt;]],&#xD;
    	&amp;#034;bughunter&amp;#034;,&#xD;
    	Permissions-&amp;gt;&amp;#034;Public&amp;#034;&#xD;
    ]&#xD;
&#xD;
The result of the deployment is a cloud object at a URL:&#xD;
&#xD;
    CloudObject[https://www.wolframcloud.com/objects/user-3c5d3268-040e-45d5-8ac1-25476e7870da/bughunter]&#xD;
&#xD;
with the short version:&#xD;
&#xD;
    URLShorten[&amp;#034;https://www.wolframcloud.com/objects/user-3c5d3268-040e-45d5-8ac1-25476e7870da/bughunter&amp;#034;, &amp;#034;bughunter&amp;#034;]&#xD;
&#xD;
https://wolfr.am/bughunter&#xD;
&#xD;
And we are done! You can go at the above URL and play.&#xD;
&#xD;
# Further thoughts&#xD;
&#xD;
Here are some key points and further thoughts.&#xD;
&#xD;
## Advantages:&#xD;
&#xD;
- Automation of content: NO new manual resource development, use existing code bases.&#xD;
- Automation of testing: NO manual labor of grading.&#xD;
- Quality of testing: NO multiple choice, NO guessing.&#xD;
- Quality of grading: almost 100% exact detection of mistakes and correct solutions.&#xD;
- Fight cheating: clear to identify question type &amp;#034;find missing code part&amp;#034; helps to ban help from friendly forums (such as this one).&#xD;
- Almost infinite variability of examples if whole docs system is engaged.&#xD;
- High range from very easy to very hard examples (exclusion of multiple functions and syntax can make this really hard).&#xD;
&#xD;
## Improvements:&#xD;
&#xD;
- Flexible scoring system based on function usage frequencies.&#xD;
- Optional placeholder as hint where the code is missing.&#xD;
- Using network of related functions (see above) to move smoothly through the topical domains.&#xD;
- Using functions frequency to feed easier or harder exercises based on test progress.&#xD;
&#xD;
***Please comment with your own thoughts and games and code!***&#xD;
&#xD;
&#xD;
  [1]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2017-03-17at10.37.46AM.png&amp;amp;userId=11733&#xD;
  [2]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2017-03-16at6.49.58PM.png&amp;amp;userId=11733&#xD;
  [3]: https://www.wolframcloud.com/objects/user-3c5d3268-040e-45d5-8ac1-25476e7870da/bughunter&#xD;
  [4]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2017-03-16at6.58.45PM.png&amp;amp;userId=11733&#xD;
  [5]: http://community.wolfram.com//c/portal/getImageAttachment?filename=sgfq354ythwrgsf.png&amp;amp;userId=11733&#xD;
  [6]: http://blog.wolfram.com/2017/03/16/the-rd-pipeline-continues-launching-version-11-1/&#xD;
  [7]: http://reference.wolfram.com/legacy/flash/&#xD;
  [8]: http://reference.wolfram.com/language/ref/Except.html&#xD;
  [9]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2017-03-16at7.21.05PM.png&amp;amp;userId=11733&#xD;
  [10]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2017-03-16at7.25.52PM.png&amp;amp;userId=11733&#xD;
  [11]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2017-03-16at7.34.59PM.png&amp;amp;userId=11733&#xD;
  [12]: https://datadrop.wolframcloud.com/&#xD;
  [13]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2017-03-16at7.41.35PM.png&amp;amp;userId=11733&#xD;
  [14]: https://datadrop.wolframcloud.com/&#xD;
  [15]: https://www.wolfram.com/development-platform/&#xD;
  [16]: http://www.wolfram.com/cloud/</description>
    <dc:creator>Vitaliy Kaurov</dc:creator>
    <dc:date>2017-03-17T01:13:24Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/823320">
    <title>Applying Norm[ ] to the trig identity Sin^2 + Cos^2 = 1?</title>
    <link>https://community.wolfram.com/groups/-/m/t/823320</link>
    <description>Hi;&#xD;
&#xD;
It doesn&amp;#039;t seem that the Norm[ ] command is applying the trig identity Sin^2 + Cos^2 = 1 to give the correct answer - please see attached.&#xD;
&#xD;
Thanks,&#xD;
&#xD;
Mitch Sandlin</description>
    <dc:creator>Mitchell Sandlin</dc:creator>
    <dc:date>2016-03-14T18:29:27Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/415820">
    <title>Happy New Palindromic Year 11111011111 !</title>
    <link>https://community.wolfram.com/groups/-/m/t/415820</link>
    <description>Very nice palindromic binary year for everybody!&#xD;
&#xD;
    IntegerDigits[2015, 2]&#xD;
&#xD;
`{1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1}`</description>
    <dc:creator>Jose Martin-Garcia</dc:creator>
    <dc:date>2015-01-02T23:57:16Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/1056910">
    <title>[FEATURE] Zero out (or replace) the diagonal of a matrix</title>
    <link>https://community.wolfram.com/groups/-/m/t/1056910</link>
    <description>There is a simple matrix operation that other scientific computing systems typically have and Mathematica sorely lacks:&#xD;
&#xD;
**Replace the diagonal of a matrix with all zeros.**&#xD;
&#xD;
Or more generally, replace the diagonal with some given values.&#xD;
&#xD;
I am not sure why this is missing from Mathematica. Perhaps it is considered trivial to implement. To show that it isn&amp;#039;t, I challenge the readers of this forum to post an implementation which is:&#xD;
&#xD;
 - As efficient as possibleit should be fast and not use too much memory&#xD;
 - As general as possibleit should work with all sorts of matrices that can be used in Mathematica&#xD;
&#xD;
Think through your submission before you post it. I expect that I will be able to point out problems in the first few submissions. If not, and I am proven wrong, then I will be happy to learn new methods of doing this.&#xD;
&#xD;
*If you agree that this functionality needs to be added to the next version of Mathematica, upvote this post!*</description>
    <dc:creator>Szabolcs Horvát</dc:creator>
    <dc:date>2017-04-08T12:12:41Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/1057642">
    <title>Get step-by-step solutions with Wolfram|Alpha Pro?</title>
    <link>https://community.wolfram.com/groups/-/m/t/1057642</link>
    <description>One of the advertised features of Wolfram Alpha Pro is that it gives access to step-by-step solutions.  I&amp;#039;ve just started using Pro, and I can&amp;#039;t seem to get them to show up consistently.  For instance, it pops up as an option for this query &#xD;
&#xD;
    Integrate[(5x+1)^2,x]&#xD;
&#xD;
http://www.wolframalpha.com/input/?i=integrate%5B(5x%2B1)%5E2,x%5D &#xD;
&#xD;
but not for &#xD;
&#xD;
    Sum[(-1)^m/((2m-1)^2-1),{m,2,infty}]&#xD;
&#xD;
https://www.wolframalpha.com/input/?i=Sum%5B(-1)%5Em%2F((2m-1)%5E2-1),%7Bm,2,infty%7D%5D&#xD;
&#xD;
I guess my question boils down to:&#xD;
&#xD;
 - When can/does wolfram know how to do step-by-step solutions?&#xD;
 - When it is possible, how can one get access to them?&#xD;
&#xD;
Thanks in advance.</description>
    <dc:creator>Grant Larsen</dc:creator>
    <dc:date>2017-04-10T00:57:33Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/1024712">
    <title>Blanagrams</title>
    <link>https://community.wolfram.com/groups/-/m/t/1024712</link>
    <description>A blanagram is an anagram for another word except for the substitution of one letter. Think of Scrabble with a blank square (blank + anagram = blanagram). For example, *phyla* is a blanagram of *glyph*; replace the &amp;#034;g&amp;#034; with an &amp;#034;a&amp;#034; and find anagrams (see [blog on Anagrams][1]).&#xD;
&#xD;
We will prototype with a simple word, glyph. We&amp;#039;ll start by getting a list of the individual characters in glyph.&#xD;
&#xD;
    In[1]:= Characters[&amp;#034;glyph&amp;#034;]&#xD;
    Out[1]= {&amp;#034;g&amp;#034;, &amp;#034;l&amp;#034;, &amp;#034;y&amp;#034;, &amp;#034;p&amp;#034;, &amp;#034;h&amp;#034;}&#xD;
&#xD;
Start by replacing the first letter in glyph with an a and then finding all anagrams. The third argument to StringReplacePart is a list of beginning and ending positions for the replacement.&#xD;
&#xD;
    In[2]:= StringReplacePart[&amp;#034;glyph&amp;#034;, &amp;#034;a&amp;#034;, {1, 1}]&#xD;
    Out[2]= &amp;#034;alyph&amp;#034;&#xD;
    In[3]:= Anagrams[%]&#xD;
    Out[3]= {&amp;#034;phyla&amp;#034;, &amp;#034;haply&amp;#034;}&#xD;
&#xD;
Now do the same for each character position in the word.&#xD;
&#xD;
    In[4]:= Map[StringReplacePart[&amp;#034;glyph&amp;#034;, &amp;#034;a&amp;#034;, {#, #}] &amp;amp;, Range[StringLength[&amp;#034;glyph&amp;#034;]]]&#xD;
    Out[4]= {&amp;#034;alyph&amp;#034;, &amp;#034;gayph&amp;#034;, &amp;#034;glaph&amp;#034;, &amp;#034;glyah&amp;#034;, &amp;#034;glypa&amp;#034;}&#xD;
    &#xD;
    In[5]:= Flatten[Map[Anagrams, %]]&#xD;
    Out[5]= {&amp;#034;phyla&amp;#034;, &amp;#034;haply&amp;#034;}&#xD;
&#xD;
Having done this for the letter a, we now repeat for all other single characters.&#xD;
&#xD;
    In[6]:= CharacterRange[&amp;#034;a&amp;#034;, &amp;#034;z&amp;#034;]&#xD;
    Out[6]= {&amp;#034;a&amp;#034;, &amp;#034;b&amp;#034;, &amp;#034;c&amp;#034;, &amp;#034;d&amp;#034;, &amp;#034;e&amp;#034;, &amp;#034;f&amp;#034;, &amp;#034;g&amp;#034;, &amp;#034;h&amp;#034;, &amp;#034;i&amp;#034;, &amp;#034;j&amp;#034;, &amp;#034;k&amp;#034;, &amp;#034;l&amp;#034;, &amp;#034;m&amp;#034;, &amp;#034;n&amp;#034;, &amp;#034;o&amp;#034;, &amp;#034;p&amp;#034;, &amp;#034;q&amp;#034;, &amp;#034;r&amp;#034;, &amp;#034;s&amp;#034;, &amp;#034;t&amp;#034;, &amp;#034;u&amp;#034;, &amp;#034;v&amp;#034;, &amp;#034;w&amp;#034;, &amp;#034;x&amp;#034;, &amp;#034;y&amp;#034;, &amp;#034;z&amp;#034;}&#xD;
&#xD;
    In[7]:= blana = Table[&#xD;
      Map[StringReplacePart[&amp;#034;glyph&amp;#034;, ch, {#, #}] &amp;amp;, &#xD;
       Range[StringLength[&amp;#034;glyph&amp;#034;]]],&#xD;
      {ch, CharacterRange[&amp;#034;a&amp;#034;, &amp;#034;z&amp;#034;]}]&#xD;
    &#xD;
    Out[7]= {{&amp;#034;alyph&amp;#034;, &amp;#034;gayph&amp;#034;, &amp;#034;glaph&amp;#034;, &amp;#034;glyah&amp;#034;, &amp;#034;glypa&amp;#034;}, {&amp;#034;blyph&amp;#034;, &amp;#034;gbyph&amp;#034;, &amp;#034;glbph&amp;#034;, &amp;#034;glybh&amp;#034;, &amp;#034;glypb&amp;#034;}, &#xD;
    {&amp;#034;clyph&amp;#034;, &amp;#034;gcyph&amp;#034;, &amp;#034;glcph&amp;#034;, &amp;#034;glych&amp;#034;, &amp;#034;glypc&amp;#034;}, {&amp;#034;dlyph&amp;#034;, &amp;#034;gdyph&amp;#034;, &amp;#034;gldph&amp;#034;, &amp;#034;glydh&amp;#034;, &amp;#034;glypd&amp;#034;},&#xD;
     {&amp;#034;elyph&amp;#034;, &amp;#034;geyph&amp;#034;, &amp;#034;gleph&amp;#034;, &amp;#034;glyeh&amp;#034;, &amp;#034;glype&amp;#034;}, {&amp;#034;flyph&amp;#034;, &amp;#034;gfyph&amp;#034;, &amp;#034;glfph&amp;#034;, &amp;#034;glyfh&amp;#034;, &amp;#034;glypf&amp;#034;}, &#xD;
    {&amp;#034;glyph&amp;#034;, &amp;#034;ggyph&amp;#034;, &amp;#034;glgph&amp;#034;, &amp;#034;glygh&amp;#034;, &amp;#034;glypg&amp;#034;}, {&amp;#034;hlyph&amp;#034;, &amp;#034;ghyph&amp;#034;, &amp;#034;glhph&amp;#034;, &amp;#034;glyhh&amp;#034;, &amp;#034;glyph&amp;#034;},&#xD;
     {&amp;#034;ilyph&amp;#034;, &amp;#034;giyph&amp;#034;, &amp;#034;gliph&amp;#034;, &amp;#034;glyih&amp;#034;, &amp;#034;glypi&amp;#034;}, {&amp;#034;jlyph&amp;#034;, &amp;#034;gjyph&amp;#034;, &amp;#034;gljph&amp;#034;, &amp;#034;glyjh&amp;#034;, &amp;#034;glypj&amp;#034;}, &#xD;
    {&amp;#034;klyph&amp;#034;, &amp;#034;gkyph&amp;#034;, &amp;#034;glkph&amp;#034;, &amp;#034;glykh&amp;#034;, &amp;#034;glypk&amp;#034;}, {&amp;#034;llyph&amp;#034;, &amp;#034;glyph&amp;#034;, &amp;#034;gllph&amp;#034;, &amp;#034;glylh&amp;#034;, &amp;#034;glypl&amp;#034;}, &#xD;
    {&amp;#034;mlyph&amp;#034;, &amp;#034;gmyph&amp;#034;, &amp;#034;glmph&amp;#034;, &amp;#034;glymh&amp;#034;, &amp;#034;glypm&amp;#034;}, {&amp;#034;nlyph&amp;#034;, &amp;#034;gnyph&amp;#034;, &amp;#034;glnph&amp;#034;, &amp;#034;glynh&amp;#034;, &amp;#034;glypn&amp;#034;}, &#xD;
    {&amp;#034;olyph&amp;#034;, &amp;#034;goyph&amp;#034;, &amp;#034;gloph&amp;#034;, &amp;#034;glyoh&amp;#034;, &amp;#034;glypo&amp;#034;},{&amp;#034;plyph&amp;#034;, &amp;#034;gpyph&amp;#034;, &amp;#034;glpph&amp;#034;, &amp;#034;glyph&amp;#034;, &amp;#034;glypp&amp;#034;}, &#xD;
    {&amp;#034;qlyph&amp;#034;, &amp;#034;gqyph&amp;#034;, &amp;#034;glqph&amp;#034;, &amp;#034;glyqh&amp;#034;, &amp;#034;glypq&amp;#034;}, {&amp;#034;rlyph&amp;#034;, &amp;#034;gryph&amp;#034;, &amp;#034;glrph&amp;#034;, &amp;#034;glyrh&amp;#034;, &amp;#034;glypr&amp;#034;},&#xD;
     {&amp;#034;slyph&amp;#034;, &amp;#034;gsyph&amp;#034;, &amp;#034;glsph&amp;#034;, &amp;#034;glysh&amp;#034;, &amp;#034;glyps&amp;#034;}, {&amp;#034;tlyph&amp;#034;, &amp;#034;gtyph&amp;#034;, &amp;#034;gltph&amp;#034;, &amp;#034;glyth&amp;#034;, &amp;#034;glypt&amp;#034;}, &#xD;
    {&amp;#034;ulyph&amp;#034;, &amp;#034;guyph&amp;#034;, &amp;#034;gluph&amp;#034;, &amp;#034;glyuh&amp;#034;, &amp;#034;glypu&amp;#034;}, {&amp;#034;vlyph&amp;#034;, &amp;#034;gvyph&amp;#034;, &amp;#034;glvph&amp;#034;, &amp;#034;glyvh&amp;#034;, &amp;#034;glypv&amp;#034;}, &#xD;
    {&amp;#034;wlyph&amp;#034;, &amp;#034;gwyph&amp;#034;, &amp;#034;glwph&amp;#034;, &amp;#034;glywh&amp;#034;, &amp;#034;glypw&amp;#034;}, {&amp;#034;xlyph&amp;#034;, &amp;#034;gxyph&amp;#034;, &amp;#034;glxph&amp;#034;, &amp;#034;glyxh&amp;#034;, &amp;#034;glypx&amp;#034;},&#xD;
     {&amp;#034;ylyph&amp;#034;, &amp;#034;gyyph&amp;#034;, &amp;#034;glyph&amp;#034;, &amp;#034;glyyh&amp;#034;, &amp;#034;glypy&amp;#034;}, {&amp;#034;zlyph&amp;#034;, &amp;#034;gzyph&amp;#034;, &amp;#034;glzph&amp;#034;, &amp;#034;glyzh&amp;#034;, &amp;#034;glypz&amp;#034;}}&#xD;
&#xD;
Because of the extra nesting of the output ( `Table[Map[...]]` ) we need to flatten the output at a deeper level. And delete duplicates.&#xD;
&#xD;
    In[8]:= Flatten[Map[Anagrams, blana, {2}]] // DeleteDuplicates&#xD;
    Out[8]= {&amp;#034;phyla&amp;#034;, &amp;#034;haply&amp;#034;, &amp;#034;glyph&amp;#034;, &amp;#034;lymph&amp;#034;, &amp;#034;sylph&amp;#034;}&#xD;
&#xD;
Finally, put all the pieces together to create a reusable function, `Blanagrams`.&#xD;
&#xD;
    In[9]:= Blanagrams[word_String] := Module[{blana},&#xD;
      blana = Table[&#xD;
        Map[StringReplacePart[word, ch, {#, #}] &amp;amp;,  &#xD;
          Range[StringLength[word]]],&#xD;
        {ch, CharacterRange[&amp;#034;a&amp;#034;, &amp;#034;z&amp;#034;]}];&#xD;
        DeleteDuplicates[Flatten[Map[Anagrams, blana, {2}]]]&#xD;
      ]&#xD;
&#xD;
This turns out to be fairly quick for small words, but it bogs down for larger words.&#xD;
&#xD;
    In[10]:= Blanagrams[&amp;#034;glyph&amp;#034;] //Timing&#xD;
    Out[10]= {1.25209, {&amp;#034;phyla&amp;#034;, &amp;#034;haply&amp;#034;, &amp;#034;glyph&amp;#034;, &amp;#034;lymph&amp;#034;, &amp;#034;sylph&amp;#034;}}&#xD;
&#xD;
    In[11]:= Blanagrams[&amp;#034;string&amp;#034;] //Timing&#xD;
&#xD;
    Out[11]= {8.85717, {&amp;#034;taring&amp;#034;, &amp;#034;rating&amp;#034;, &amp;#034;gratin&amp;#034;, &amp;#034;arsing&amp;#034;, &amp;#034;grains&amp;#034;, &amp;#034;sating&amp;#034;, &amp;#034;giants&amp;#034;, &amp;#034;grants&amp;#034;, &#xD;
    &amp;#034;gratis&amp;#034;, &amp;#034;strain&amp;#034;, &amp;#034;trains&amp;#034;, &amp;#034;brings&amp;#034;, &amp;#034;grinds&amp;#034;, &amp;#034;sering&amp;#034;, &amp;#034;singer&amp;#034;, &amp;#034;signer&amp;#034;, &amp;#034;resign&amp;#034;, &amp;#034;reigns&amp;#034;, &#xD;
    &amp;#034;ingres&amp;#034;, &amp;#034;signet&amp;#034;, &amp;#034;tinges&amp;#034;, &amp;#034;ingest&amp;#034;, &amp;#034;tigers&amp;#034;, &amp;#034;insert&amp;#034;, &amp;#034;inters&amp;#034;, &amp;#034;inerts&amp;#034;, &amp;#034;string&amp;#034;, &amp;#034;things&amp;#034;, &#xD;
    &amp;#034;nights&amp;#034;, &amp;#034;rights&amp;#034;, &amp;#034;girths&amp;#034;, &amp;#034;tiring&amp;#034;, &amp;#034;siring&amp;#034;, &amp;#034;rising&amp;#034;, &amp;#034;siting&amp;#034;, &amp;#034;tigris&amp;#034;, &amp;#034;glints&amp;#034;, &amp;#034;roting&amp;#034;, &#xD;
    &amp;#034;soring&amp;#034;, &amp;#034;signor&amp;#034;, &amp;#034;groins&amp;#034;, &amp;#034;ingots&amp;#034;, &amp;#034;strong&amp;#034;, &amp;#034;intros&amp;#034;, &amp;#034;spring&amp;#034;, &amp;#034;sprint&amp;#034;, &amp;#034;prints&amp;#034;, &amp;#034;stings&amp;#034;, &#xD;
    &amp;#034;turing&amp;#034;, &amp;#034;truing&amp;#034;, &amp;#034;strung&amp;#034;, &amp;#034;grunts&amp;#034;, &amp;#034;wrings&amp;#034;, &amp;#034;trying&amp;#034;, &amp;#034;stying&amp;#034;, &amp;#034;stingy&amp;#034;}}&#xD;
&#xD;
Because we are doing similar computations for each of the letters of the alphabet, this is a good candidate for parallelizing. But which parts do we parallelize? One way to help determine where the computational bottlenecks are is to profile the code. Integrated development environments such as Wolfram Workbench have built-in profilers, but here we will create a simple set of profiling steps to determine where our bottlenecks are.&#xD;
&#xD;
Here is a small auxiliary function that wraps [AbsoluteTiming][2] around an expression and adds a tag to make it easy to identify the various parts of what is reported.&#xD;
&#xD;
    In[12]:= timing[expr_, tag_] := Print[{NumberForm[First@AbsoluteTiming[expr], 10], tag}]&#xD;
    In[13]:= SetAttributes[timing, HoldAll];&#xD;
    In[14]:= word = &amp;#034;string&amp;#034;;&#xD;
    timing[&#xD;
      tmp = Table[Map[StringReplacePart[word, ch, {#, #}] &amp;amp;,   &#xD;
      Range[StringLength[word]]],{ch, CharacterRange[&amp;#034;a&amp;#034;, &amp;#034;z&amp;#034;]}];,&#xD;
       &amp;#034;table&amp;#034;&#xD;
      ];&#xD;
&#xD;
    timing[&#xD;
      Flatten[tmp2 = Map[Anagrams, tmp, {2}]];,&#xD;
      &amp;#034;map Anagrams&amp;#034;&#xD;
      ];&#xD;
&#xD;
    timing[&#xD;
      DeleteDuplicates[Flatten[tmp2]];,&#xD;
      &amp;#034;flatten and delete duplicates&amp;#034;&#xD;
      ]&#xD;
    Out[15]= {0.000794,table}&#xD;
    Out[16]= {8.986847,map Anagrams}&#xD;
    Out[17]= {0.000050,flatten and delete duplicates}&#xD;
&#xD;
Not surprisingly, creating the many possible letter combinations is very quick. The greatest part of this computation is spent with mapping Anagrams across the many word combinations. So we can simply try to parallelize that using [ParallelMap][3].&#xD;
&#xD;
    In[17]:= BlanagramsParallel[word_String]:=&#xD;
      Module[{blana},&#xD;
        blana = Table[Map[StringReplacePart[word,ch{#,#}]&amp;amp;, &#xD;
             Range[StringLength[word]]],{ch,CharacterRange[&amp;#034;a&amp;#034;,&amp;#034;z&amp;#034;]}];&#xD;
        DeleteDuplicates@Flatten[ParallelMap[Anagrams,blana,{2}]]&#xD;
      ]&#xD;
&#xD;
Launch kernels on our current machine and compute.&#xD;
&#xD;
    In[18]:= LaunchKernels[]&#xD;
    Out[18]= {KernelObject[1,local],KernelObject[2,local]}&#xD;
&#xD;
    In[19]:= DistributeDefinitions[Anagrams]&#xD;
    Out[19]= {Anagrams,word}&#xD;
    &#xD;
    In[20]:= BlanagramsParallel[&amp;#034;strings&amp;#034;]//AbsoluteTiming&#xD;
    Out[20]= {37.792462,&#xD;
    {ratings,gratins,staring,strains,resting,stinger,singers,signers,&#xD;
    resigns,ingress,signets,ingests,tigress,inserts,strings,tirings,risings,&#xD;
    sitings,sorting,storing,signors,tossing,springs,sprints,rusting,tryings,stringy}}&#xD;
&#xD;
For comparison, here is the computation done serially on one kernel.&#xD;
&#xD;
    In[21]:= Blanagrams[&amp;#034;strings&amp;#034;]//AbsoluteTiming&#xD;
    Out[21]= {47.756149,&#xD;
    {ratings,gratins,staring,strains,resting,stinger,singers,signers,resigns,&#xD;
    ingress,signets,ingests,tigress,inserts,strings,tirings,risings,sitings,sorting,&#xD;
    storing,signors,tossing,springs,sprints,rusting,tryings,stringy}}&#xD;
&#xD;
With the 2-kernel machine this was run on, we are getting a slight speedup. This particular computation parallelizes well and so on an 8-kernel machine, we would see substantially faster compute times.&#xD;
&#xD;
    In[22]:= First[%]/First[%%]&#xD;
    Out[22]= 1.2636422&#xD;
&#xD;
&#xD;
----------&#xD;
*NOTE: This article was [originally posted][4] on Paul Wellin&amp;#039;s blog PROGRAMMING WITH MATHEMATICA.*&#xD;
&#xD;
&#xD;
  [1]: http://programmingwithmathematica.blogspot.com/2011/12/anagrams.html&#xD;
  [2]: http://reference.wolfram.com/language/ref/AbsoluteTiming.html&#xD;
  [3]: http://reference.wolfram.com/language/ref/ParallelMap.html&#xD;
  [4]: http://programmingwithmathematica.blogspot.com/2011/12/blanagrams.html</description>
    <dc:creator>Paul Wellin</dc:creator>
    <dc:date>2017-03-03T11:10:07Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/911604">
    <title>Implementing a simple proof assistant and type system</title>
    <link>https://community.wolfram.com/groups/-/m/t/911604</link>
    <description>Inspiration and Idea&#xD;
================&#xD;
&#xD;
The prospect of internalizing some notion of pure mathematics into the Wolfram Language has been talked about at various points in the past, such as in [this post][1]. My background is in proof assistants and type theories, and I&amp;#039;ve spent several years programming in languages like Agda and Coq. These dependently typed languages have the best track record for expressing formal mathematics, but the Wolfram Language can&amp;#039;t be easily modified to replicate the behaviour of such languages. The issue, as I&amp;#039;ve come to understand it now, is that the rule-replacement computational model that the Wolfram Language uses is, at it&amp;#039;s core, incompatible with a system-wide type theory. That is to say, such a system cannot have every term be typable while maintaining usability. So, what are the alternatives?&#xD;
&#xD;
As far as I can tell, there are two major branches of dependently typed languages (and several minor ones), the &amp;#034;formal&amp;#034; type theories, such as Agda, Coq, Lean, Idris, etc., and the &amp;#034;semantic&amp;#034; type theories, being NuPRL and the more recent RedPRL. I started learning about that second branch a few months ago. Unfortunately, all current PRL implementations are largely unusable for an ordinary user, but the ideas underlying their approach to type theory was enamoring to me. The approach is as follows;&#xD;
&#xD;
 1. Start with an untyped computational model (any will do).&#xD;
 2. Use a programming logic to declare some forms from the model to be &amp;#034;canonical types&amp;#034;.&#xD;
 3. Declare other forms from the model to be &amp;#034;canonical terms&amp;#034; of the already declared type.&#xD;
 4. Declare equations which define computational behaviors for those symbols intended to interact with the type under consideration.&#xD;
&#xD;
As an example, it&amp;#039;s typical to start with an untyped lambda calculus + constants as a computational model. If we want to define the booleans, we first must choose a symbol and declare it to be a canonical type. We would use an already existing term, in this case we can use the constant &amp;#034;bool&amp;#034;, and state something like;&#xD;
&#xD;
    DeclareType bool&#xD;
&#xD;
Which adds a rule to our environment allowing us to prove that bool is a type. Similarly, we would declare the two terms in the boolean type;&#xD;
&#xD;
    DeclareTerm True bool&#xD;
    DeclareTerm False bool&#xD;
&#xD;
As before, the forms &amp;#034;True&amp;#034; and &amp;#034;False&amp;#034; existed in the language already, we are simply adding user-defined rules which allow us to reason about them as terms of a type.&#xD;
&#xD;
The last step is to declare the defining computational behaviour for the type. This basically involves declaring the constant ABT &amp;#034;if(a. A, b, T, F)&amp;#034; to follow particular sequent rules, being;&#xD;
&#xD;
![The basic typing rule for the dependent if function][2]&#xD;
&#xD;
Actual programming syntax can vary on this, but with the Wolfram Language&amp;#039;s Notation Package, I can make the declarations within the system I&amp;#039;ll describe in this post match fairly closely to the sequent calculus syntax.&#xD;
&#xD;
PRL languages expand on this idea by saying that one must define a series of partial equivalence relations (PERs) for each type. I take this approach in the third part of this post.&#xD;
&#xD;
After studying this kind of system for a few weeks, Mathematica 11 hit, and I had an epiphany. This approach is 100% compatible with the Wolfram Language, and I decided to try implementing something like this. After about 2 weeks, I feel that I&amp;#039;ve had quite a bit of success, and I figured my project could benefit from some input from others.&#xD;
&#xD;
A Very Basic Proof Assistant&#xD;
======================&#xD;
&#xD;
Rules for Reasoning&#xD;
--------------------------&#xD;
&#xD;
To start out, I want to implement the sequent calculus in such a way that it&amp;#039;s user friendly to prove basic statements. This first example will be a simple implementation of a proof assistant for (Hilbert-style) propositional logic. Starting out, I can declare the encoding I want to use to have special notations using the Notation package.&#xD;
&#xD;
![Declaring various notations][3]&#xD;
&#xD;
Using this, I can express rules like modus ponens as;&#xD;
&#xD;
    SequentRule[&#xD;
      Turnstile[Judgement[], Judgement[true[Implies[A, B]]]],&#xD;
      Turnstile[Judgement[], Judgement[true[A]]],&#xD;
      Turnstile[Judgement[], Judgement[true[B]]]]&#xD;
&#xD;
And have it display as;&#xD;
&#xD;
![modus ponens, as it apears after notations are declared][4]&#xD;
&#xD;
Thus mimicking a sequent. I&amp;#039;ll expand on this when I get to implementing an actual type system&#xD;
&#xD;
The idea I have is to first state a goal, then treat this sort of rule as a pattern. You start with a pattern like;&#xD;
&#xD;
    B true&#xD;
&#xD;
And then apply modus ponens to get  the goals&#xD;
&#xD;
    A =&amp;gt; B true&#xD;
    A true&#xD;
&#xD;
If the original goal is a theorem in our logic, then applying existing rules in the correct order will discharge all goals. Before such a system can be made, we need to process our rules into replacement rules that can actually be applied. This involves sugaring the hypotheses with context variables and turning the appropriate variables into patterns.&#xD;
&#xD;
If we were to declare modus ponens as;&#xD;
&#xD;
![the modus ponens used in my developement][5]&#xD;
&#xD;
We want to get a rule out (which will be stored as ReversePattern[ModusPonens]) which we can apply to a goal. At the end of the processing our rule looks like;&#xD;
&#xD;
![the pattern replacement rule generated for modus ponens][6]&#xD;
&#xD;
The $ExtraArgument part is added to avoid problems with variable capture during user interaction (maybe it would be a good idea to do this to the context variable as well, but for now it&amp;#039;s fine). Notice that the phi is not turned into a pattern or altered in any way. The processing algorithm notices that phi appears in the antecedent goals, but not the conclusion. This means the user has to tell the system what phi is supposed to be since there&amp;#039;s no other way to get it. All the variables required by the user are stored in the list ExtraArguments[ModusPonens]. The newly declared rule is then added to a list of known rules. After implementing this, we can declare all the rules we want;&#xD;
&#xD;
![declaring axioms for classical logic][7]&#xD;
&#xD;
Notice the DeclareSymbol command at the top. This just adds the symbols to a list called DeclaredSymbols which by default contains symbols such as true, Judgement, SequentRule, Turnstile, etc. By adding symbols to this list, they won&amp;#039;t be turned into patterns by the processor. Additionally, we want to verify the behaviour of algorithms which may try to evaluate when we don&amp;#039;t want them to during proof construction. Since I&amp;#039;m using the built-in Implies and Not, they will try to evaluate on certain arguments. For example &amp;#034;A =&amp;gt; A&amp;#034; evaluates to &amp;#034;True&amp;#034;, but I want to prove that as a theorem from the axioms. To prevent this, symbols with computational behaviour have to be rendered [Inactive][8]. I&amp;#039;ll talk about reactivating them near the end of this section.&#xD;
&#xD;
You may also notice the ImplicationFormer and NegationFormer rules. In a proper formalization of classical (and many other) logics, the axiom rules should have extra hypotheses which require one to prove that a particular variable is a well-formed formula/proposition. I decided not to use them for this post, but they should be used in a serious development.&#xD;
&#xD;
User Interaction&#xD;
--------------------&#xD;
&#xD;
&#xD;
I designed a simple interface for picking and applying declared rules. I&amp;#039;ll probably put it into a window at some point, but for now it looks like this;&#xD;
&#xD;
![the user interface for interactive theorem proving][9]&#xD;
&#xD;
The top two components are a drop-down menu showing all available rules, and an input field for filtering the drop-down menu. The second two are a preview of what the declared rule looks like, and an auto-generated list of input fields for arguments required for completely applying a rule. The apply rule button applies the selected rule, and I&amp;#039;ll explain the other two buttons in a bit. At the bottom is the current goal (in this case, I want to prove that A implies A), and below that is a (currently blank) string of text for storing error messages. Here&amp;#039;s a gif of me proving the goal;&#xD;
&#xD;
![a demo showing &amp;#039;A implies A&amp;#039; being proved][10]&#xD;
&#xD;
At the end we can get the proof we made and the rule which we proved. After the fact, we can check that this proof is correct by issuing it to CheckProof[provedRule, proof], which will return True if the proof is valid. It works by applying the rules in the proof in the same way they were applied when the proof was originally constructed, then checking if all goals have been discharged.&#xD;
&#xD;
Additionally, we can add proven rules to the environment via an AddTheorem command that adds a rule the same way that DeclareSequentRule does, but only if the proof correctly checks.&#xD;
&#xD;
![Several Proved Theorems][11]&#xD;
&#xD;
You&amp;#039;ll notice that all the theorems with non-empty antecedents have &amp;#034;LogHypothesis&amp;#034; in their proofs. This is added when the &amp;#034;Log Hypothesis&amp;#034; button is pressed in the UI. By deriving the hypothesis from the target and logging it, it will remove the hypothesis from the goal and add it to the rule being proved.&#xD;
&#xD;
Calling The System&#xD;
------------------------&#xD;
&#xD;
You may be asking yourself, &amp;#034;hey, can&amp;#039;t we already use Simplify to test when a proposition is true? If I were proving things in a more sophisticated logic that relies on classical propositional logic (Say, ZFC) it would be useful to actually utilize the built in capabilities of the Wolfram Language. We can manually add a rule that makes a call to the simplifier;&#xD;
&#xD;
![A rule for calling the simplifier][12]&#xD;
&#xD;
Using this we may have a complicated goal like;&#xD;
&#xD;
![enter image description here][13]&#xD;
&#xD;
and issue a system call to immediately get;&#xD;
&#xD;
![enter image description here][14]&#xD;
&#xD;
Which is trivially provable. Later in this post, I make use of similar rules to interface a type system with the already existing language.&#xD;
&#xD;
Tactics&#xD;
--------&#xD;
&#xD;
I&amp;#039;ve not invested very much time thinking about tactics, but the system as it stands can be extended with them. I added one called &amp;#034;BranchSearchTactic&amp;#034; which does a breadth-first search over all rules that don&amp;#039;t require user interaction. If it finds a proof, it will add it to the currently building proof and discharge the goal. Here is a usage example;&#xD;
&#xD;
![enter image description here][15]&#xD;
&#xD;
&#xD;
This is a useful tactic for proving that some term is well-formed. I use this frequently when constructing proofs in the type system. Future work should include an expanded library of tactics.&#xD;
&#xD;
Implementing Types and Formally Verifying Programs&#xD;
=======================================&#xD;
&#xD;
Rules for a Simple Dependent Type Theory&#xD;
----------------------------------------&#xD;
&#xD;
The rules for an actual type theory are similar to what you&amp;#039;d see for any logic, but they are far more complicated than propositional logic. I will take the approach of implementing type theory using PERs for defining type behaviors. Before this can be done, I first add rules for manipulating equations;&#xD;
&#xD;
![enter image description here][16]&#xD;
&#xD;
![enter image description here][17]&#xD;
&#xD;
Several of those rules are redundant or maybe undesirable, but I include them here as examples.&#xD;
&#xD;
The most typical type for a dependently typed language is the pi-type, who&amp;#039;s typing rules can be declared in the style that you&amp;#039;d see in a technical paper on type theory.&#xD;
&#xD;
![enter image description here][18]&#xD;
&#xD;
The vertical tildes mark variable bindings, representing those bindings created by the abstract binding tree we&amp;#039;re defining. The Wolfram Language doesn&amp;#039;t properly handle variable binding (you can&amp;#039;t test for alpha-equivalence, for example), but we don&amp;#039;t need it to for the examples I make in this post.&#xD;
&#xD;
Notice the presence of substitutions in the inference rules. We now are working with rules who&amp;#039;s form may be determined by an intra-rule substitution. A straightforward pattern and replace application would fail to correctly apply the given rules. As a result, we must get the pre-substitution information from the user. After that, these arguments are substituted into the pattern, then the in-pattern substitutions must be performed. This will get us a working replacement rule. Other rules, such as the typing rule for if, also have a substitution in the antecedents. This must also be performed in order to get the correct post-application goal to the user.&#xD;
&#xD;
Using the declared rules we can formally verify some basic programs, such as the S combinator;&#xD;
&#xD;
![enter image description here][19]&#xD;
&#xD;
![enter image description here][20]&#xD;
&#xD;
You&amp;#039;ll notice that we had to do this by hand. Type checking has to be done by hand since it isn&amp;#039;t decidable. This is because an arbitrary term does not have a unique type. In the future, it will probably be worth adding a tactic which can type-check a significant subset of the logic, even if it&amp;#039;s technically impossible to check everything.&#xD;
&#xD;
Sigma, Bool, and Coproduct Types&#xD;
--------------------------------------------&#xD;
&#xD;
At this stage we can add in any of the standard types we want. For example, we can add sigma types, booleans, and coproducts like so;&#xD;
&#xD;
![Sigma Types][21]&#xD;
&#xD;
![Booleans][22]&#xD;
&#xD;
![Coproducts][23]&#xD;
&#xD;
This is sufficient for specifying more interesting theorems. For example, we can prove that all booleans are either True or False;&#xD;
&#xD;
![A proof that all booleans are either True or False][24]&#xD;
&#xD;
The Natural Numbers and Formal Verification&#xD;
---------------------------------------------------------&#xD;
&#xD;
As a final example, we can define the type of natural numbers, along with it&amp;#039;s dependent eliminator which represents mathematical induction.&#xD;
&#xD;
![enter image description here][25]&#xD;
&#xD;
I had to do a bit of extra work to make it interface well with the built in representation of numbers. Also note that I declared Plus and Times in the type system. While both could have been defined in terms of induction, I would like to get the various built-in Wolfram Language functions to have their own typing rules so that the already existing system can interface with proofs. This way, we can make calls to the system using some custom rules;&#xD;
&#xD;
![enter image description here][26]&#xD;
&#xD;
These simply call Simplify on one or both arguments of an equation, but they can easily be modified to call other rule should we want to.&#xD;
&#xD;
As a usage example, I want to prove that all numbers are either even or odd, that, for all natural numbers n, there exists a number z such that n = 2 * z or n = 1 + 2 * z. This is a simple proof by mathematical induction + a bit of algebra. Our initial goal looks like.&#xD;
&#xD;
![enter image description here][27]&#xD;
&#xD;
The term makes various references to &amp;#034;sys&amp;#034;, which basically says &amp;#034;justify the equation in any way&amp;#034;, which will be some calls to simplify in this case. For example, at some point in the proof we have the goal;&#xD;
&#xD;
![enter image description here][28]&#xD;
&#xD;
which asks us to prove Succ[n3] = Succ[2 * fst[f]] given a proof that n3 = 2 * fst[f]. One way we can approach this is to call SysCallEQ, simplifying both sides algebraically, which will reduce the equation to;&#xD;
&#xD;
![enter image description here][29]&#xD;
&#xD;
which is just our assumption. Later on in the same proof we encounter a different goal;&#xD;
&#xD;
![enter image description here][30]&#xD;
&#xD;
We may consider making the same system call as before. If we do this, we get to;&#xD;
&#xD;
![enter image description here][31]&#xD;
&#xD;
Which, unlike last time, is not one of our assumptions. We can then use transitivity to get us;&#xD;
&#xD;
![enter image description here][32]&#xD;
&#xD;
The first of those goals is trivially provable as our assumption. That second goal can be approached by calling Simplify on the left-hand side, getting us;&#xD;
&#xD;
![enter image description here][33]&#xD;
&#xD;
Which is easy to justify. While these are simple use cases, they suggest a greater potential for interfacing proofs with the already existing system.&#xD;
&#xD;
In the end, the verification of the proof that all numbers are even or odd is around 500 steps. The point is to formally verify an algorithm, one which, given a number n, finds a z such that z is half of n (in the case of &amp;#034;inl&amp;#034;) or z is half of n-1 (in the case of &amp;#034;inr&amp;#034;). Can this algorithm actually be run?&#xD;
&#xD;
![enter image description here][34]&#xD;
&#xD;
Yes, yes it can.&#xD;
&#xD;
Future Work&#xD;
==========&#xD;
&#xD;
Potential Generalizations&#xD;
-------------------------------&#xD;
&#xD;
One system I implemented during testing was [MU][35].&#xD;
&#xD;
![enter image description here][36]&#xD;
&#xD;
You&amp;#039;ll notice that I had to put in the rules manually since the kind of pattern matching they use is incompatible with the processing done by DeclareSequentRule. It was this exercise which made me realize that the user interface was largely a way to systematically apply Replace on specific rules. The main thing preventing this from being strictly true is the handling of intra-rule substitutions. This suggests to me a potential generalization and even simplification of the system I&amp;#039;ve set out here. Early on, I noticed that my development was somewhat similar to [Metamath][37], a small theorem prover. It may be prudent to borrow some of its methodology when modifying this system in the future.&#xD;
&#xD;
Program Extraction&#xD;
------------------------&#xD;
&#xD;
In theory, it should be possible to start with the type without any term as a goal, and interact with the user to build up a term which witnesses the type. I&amp;#039;ve had some small success in making a system which works like this, though it isn&amp;#039;t nice enough to talk about in detail. This sort of feature is what makes dependently typed languages useful and usable in the first place. For now, my system can only verify a program, but building up a program from a specification will have to be a future project.&#xD;
&#xD;
Libraries&#xD;
-----------&#xD;
&#xD;
I mentioned that I wanted to add typing rules (and theorems) for a large number of the Wolfram Languages&amp;#039; built in functions. There are many existing mature libraries for fields like graph and group theory for languages such as Coq and Agda. Making a similar library with compatibility with the already existing faculties for calculation and manipulation would be nice.&#xD;
&#xD;
Extensions&#xD;
--------------&#xD;
&#xD;
There are many cutting-edge logics and type theories which are difficult to implement inside modern proof assistants. I think a system like the one I laid out here could be helpful for quickly setting up all the rules required to play with more speculative type theories, such as [Adjoint Logic][38], [Cubical Realizability][39], and [Directed HoTT][40]. In the future, I plan on trying to implement some of those myself.&#xD;
&#xD;
&#xD;
  [1]: http://blog.stephenwolfram.com/2014/08/computational-knowledge-and-the-future-of-pure-mathematics/&#xD;
  [2]: http://community.wolfram.com//c/portal/getImageAttachment?filename=9683ifTypingLatex.png&amp;amp;userId=137675&#xD;
  [3]: http://community.wolfram.com//c/portal/getImageAttachment?filename=NotationExam.png&amp;amp;userId=137675&#xD;
  [4]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ModusPonens.png&amp;amp;userId=137675&#xD;
  [5]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ModusPonens2.png&amp;amp;userId=137675&#xD;
  [6]: http://community.wolfram.com//c/portal/getImageAttachment?filename=MPPattern.png&amp;amp;userId=137675&#xD;
  [7]: http://community.wolfram.com//c/portal/getImageAttachment?filename=Declarations.png&amp;amp;userId=137675&#xD;
  [8]: https://reference.wolfram.com/language/ref/Inactive.html&#xD;
  [9]: http://community.wolfram.com//c/portal/getImageAttachment?filename=UserInterface.png&amp;amp;userId=137675&#xD;
  [10]: http://community.wolfram.com//c/portal/getImageAttachment?filename=UIDemo.gif&amp;amp;userId=137675&#xD;
  [11]: http://community.wolfram.com//c/portal/getImageAttachment?filename=DeclaredTheorems.png&amp;amp;userId=137675&#xD;
  [12]: http://community.wolfram.com//c/portal/getImageAttachment?filename=SystemCallRule.png&amp;amp;userId=137675&#xD;
  [13]: http://community.wolfram.com//c/portal/getImageAttachment?filename=Meredith.png&amp;amp;userId=137675&#xD;
  [14]: http://community.wolfram.com//c/portal/getImageAttachment?filename=Trivial.png&amp;amp;userId=137675&#xD;
  [15]: http://community.wolfram.com//c/portal/getImageAttachment?filename=TacticDemo.gif&amp;amp;userId=137675&#xD;
  [16]: http://community.wolfram.com//c/portal/getImageAttachment?filename=IDManipulations.png&amp;amp;userId=137675&#xD;
  [17]: http://community.wolfram.com//c/portal/getImageAttachment?filename=MoreIdentityManipulations.png&amp;amp;userId=137675&#xD;
  [18]: http://community.wolfram.com//c/portal/getImageAttachment?filename=8741PiTypes.png&amp;amp;userId=137675&#xD;
  [19]: http://community.wolfram.com//c/portal/getImageAttachment?filename=1097SGoal.png&amp;amp;userId=137675&#xD;
  [20]: http://community.wolfram.com//c/portal/getImageAttachment?filename=SComb.gif&amp;amp;userId=137675&#xD;
  [21]: http://community.wolfram.com//c/portal/getImageAttachment?filename=SigmaTypes.png&amp;amp;userId=137675&#xD;
  [22]: http://community.wolfram.com//c/portal/getImageAttachment?filename=BoolType.png&amp;amp;userId=137675&#xD;
  [23]: http://community.wolfram.com//c/portal/getImageAttachment?filename=CoProuctType.png&amp;amp;userId=137675&#xD;
  [24]: http://community.wolfram.com//c/portal/getImageAttachment?filename=TrueFalseBool.png&amp;amp;userId=137675&#xD;
  [25]: http://community.wolfram.com//c/portal/getImageAttachment?filename=NaturalNums.png&amp;amp;userId=137675&#xD;
  [26]: http://community.wolfram.com//c/portal/getImageAttachment?filename=SysCalls.png&amp;amp;userId=137675&#xD;
  [27]: http://community.wolfram.com//c/portal/getImageAttachment?filename=EvenOddGoal.png&amp;amp;userId=137675&#xD;
  [28]: http://community.wolfram.com//c/portal/getImageAttachment?filename=SysCalGoal.png&amp;amp;userId=137675&#xD;
  [29]: http://community.wolfram.com//c/portal/getImageAttachment?filename=10090SysCalGoal.png&amp;amp;userId=137675&#xD;
  [30]: http://community.wolfram.com//c/portal/getImageAttachment?filename=6302SysCalGoal.png&amp;amp;userId=137675&#xD;
  [31]: http://community.wolfram.com//c/portal/getImageAttachment?filename=9736SysCalGoal.png&amp;amp;userId=137675&#xD;
  [32]: http://community.wolfram.com//c/portal/getImageAttachment?filename=2873SysCalGoal.png&amp;amp;userId=137675&#xD;
  [33]: http://community.wolfram.com//c/portal/getImageAttachment?filename=2413SysCalGoal.png&amp;amp;userId=137675&#xD;
  [34]: http://community.wolfram.com//c/portal/getImageAttachment?filename=EvenOddClassifier.png&amp;amp;userId=137675&#xD;
  [35]: https://en.wikipedia.org/wiki/MU_puzzle&#xD;
  [36]: http://community.wolfram.com//c/portal/getImageAttachment?filename=MIU.png&amp;amp;userId=137675&#xD;
  [37]: http://us.metamath.org/index.html&#xD;
  [38]: http://dlicata.web.wesleyan.edu/pubs/ls15adjoint/ls15adjoint.pdf&#xD;
  [39]: http://www.cs.cmu.edu/~rwh/papers/chitt/draft.pdf&#xD;
  [40]: https://people.cs.kuleuven.be/~dominique.devriese/ThesisAndreasNuyts.pdf</description>
    <dc:creator>Anthony Hart</dc:creator>
    <dc:date>2016-08-23T11:31:46Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/855400">
    <title>Step-by-step solutions of indefinite integral?</title>
    <link>https://community.wolfram.com/groups/-/m/t/855400</link>
    <description>Hi guys, do you know how could I solve an indefinite integral with step-by-step solution and specifying the variable of integration? For example:&#xD;
&#xD;
    WolframAlpha[&amp;#034;cos(tw+f)cos(t*w)&amp;#034;, IncludePods -&amp;gt; {&amp;#034;Indefinite Integral&amp;#034;}, PodStates -&amp;gt; {&amp;#034;Step-by-step solution&amp;#034;, &amp;#034;Show all steps&amp;#034;}]&#xD;
&#xD;
in this case Mathematica chooses as variable of integrazion w, but I would variable of integration is t. I tried to lunch:&#xD;
&#xD;
    WolframAlpha[&amp;#034;[cos(tw+f)cos(t*w),{t}]&amp;#034;, IncludePods -&amp;gt; {&amp;#034;Indefinite Integral&amp;#034;}, PodStates -&amp;gt; {&amp;#034;Step-by-step solution&amp;#034;, &amp;#034;Show all steps&amp;#034;}]&#xD;
&#xD;
but doesn&amp;#039;t work.&#xD;
&#xD;
Thank you for your help.</description>
    <dc:creator>Gennaro Arguzzi</dc:creator>
    <dc:date>2016-05-12T16:05:30Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/826533">
    <title>Assume real values of an enxpression while using Simplify or FullSimplify?</title>
    <link>https://community.wolfram.com/groups/-/m/t/826533</link>
    <description>Hi.&#xD;
I have this number:&#xD;
&#xD;
    (e + I y - 3 (f + I z) +     3 (e + I y)^2 (f + I z) - (e + I y) (f + I z)^2 +     &#xD;
    Sqrt[5] Sqrt[(e + I (1 + y))^2 (e - f + I (y - z))^2 (f +&#xD;
           I (1 + z))^2] +     I (e + f + &#xD;
          I (y + z))^2 + (4 (-1 + 3 I e - I f + (e + I y)^2 - &#xD;
            3 y + (e + I y) (f + I z) - (f + I z)^2 + z)^2)/(e + I y - &#xD;
          3 (f + I z) + 3 (e + I y)^2 (f + I z) - (e + I y) (f + I z)^2 + &#xD;
          Sqrt[5] Sqrt[(e + I (1 + y))^2 (e - f + I (y - z))^2 (f + &#xD;
              I (1 + z))^2] + I (e + f + I (y + z))^2))/(2 (-1 + 3 I e - &#xD;
         I f + (e + I y)^2 - 3 y + (e + I y) (f + I z) - (f + I z)^2 + z))&#xD;
&#xD;
I know it is real (I proved that), but using Simplify or FullSimplify there are still imaginary units. Using ComplexExpand, too. What is commend which I should use to reduct imaginary units? I am not well-experienced, so I don&amp;#039;t know how do this.&#xD;
&#xD;
*e, f, y, z are real numbers</description>
    <dc:creator>Jan Redwi?ski</dc:creator>
    <dc:date>2016-03-20T18:59:27Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/1863194">
    <title>Convert simple Python code to Wolfram language?</title>
    <link>https://community.wolfram.com/groups/-/m/t/1863194</link>
    <description>There is a way to convert Python to Lisp.&#xD;
 Peter Norvig talked about it.&#xD;
https://norvig.com/lispy2.html</description>
    <dc:creator>ismail ali</dc:creator>
    <dc:date>2020-01-20T17:47:09Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/1395518">
    <title>Solve analytically the following partial differential equations (PDE&amp;#039;s)?</title>
    <link>https://community.wolfram.com/groups/-/m/t/1395518</link>
    <description>I have three PDE&amp;#039;s and I want to solve it analytically. But I could not find any method to solve it. Can anyone suggest me which method is suitable for these type of PDE&amp;#039;s.&#xD;
Details are given in the attached file.&#xD;
Anyone can help me it would be highly appreciated.</description>
    <dc:creator>Mirza Farrukh Baig</dc:creator>
    <dc:date>2018-08-01T13:10:47Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/1164210">
    <title>[JOB] Earn income creating a Mathematica notebook</title>
    <link>https://community.wolfram.com/groups/-/m/t/1164210</link>
    <description>I am writing a paper &amp;#034;Simple Random Walk Models of Entanglement Effects on the Elasticity and Viscoelasticity of Polymer Networks.&amp;#034; which i will be presenting at the Polymer Networks meeting in Prague.&#xD;
&#xD;
Of course, i&amp;#039;m writing it in a Mathematica notebook but it will have a bunch of equations and my physical disability makes it difficult for me to enter them (also, i am not very familiar with the use of the mathematical templates in WL / Mathematica).&#xD;
&#xD;
I have PDFs of my published articles from which i am creating this &amp;#039;tutorial&amp;#039; article . these PDFs have all the equations i will be using in the article.&#xD;
&#xD;
What  i need is someone to enter each equation into its own cell in a Mathematica notebook.&#xD;
&#xD;
I can then take that notebook and can create a notebook containing both the text which i will be composing and the equations which i will &amp;#039;copy and paste&amp;#039; from the &amp;#039;notebook of equations&amp;#039;.&#xD;
&#xD;
I can email the PDFs to the person who, after creating the notebook of equations, can email it to me.&#xD;
&#xD;
So this is is a simple straightforward job that will earn some income for someone (the pricing is negotiable, based on the time involved, the difficulty of the work, etc.) .</description>
    <dc:creator>Richard Gaylord</dc:creator>
    <dc:date>2017-08-13T09:34:53Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/1575783">
    <title>CSS Selectors 3 for Symbolic XML</title>
    <link>https://community.wolfram.com/groups/-/m/t/1575783</link>
    <description># Introduction &#xD;
&#xD;
Implementation of CSS Selectors 3 for Wolfram Language SymbolicXML expressions. This work is motivated by the Stack Exchange post [css-selectors-for-symbolic-xml](https://mathematica.stackexchange.com/questions/49052/css-selectors-for-symbolic-xml). The full package with the examples shown below can be download from [the github repo here](https://github.com/KMDaily/CSS_Selectors3_WolframLanguage). The standalone package is attached to this community post but may not remain as up to date as the repo.&#xD;
&#xD;
The [CSS Selectors 3 specification](https://www.w3.org/TR/selectors-3/) is followed as far as possible, but I make no claims to be absolutely conformant. For example, being that WL SymbolicXML is a static expression, any HTML/XML elements such as dynamic pseudo classes (e.g. active/hover/focus) and pseudo elements (e.g. before/after) are not found.&#xD;
&#xD;
## Load Package&#xD;
```&#xD;
In[] := Needs[&amp;#034;Selectors3`&amp;#034;]&#xD;
```&#xD;
&#xD;
## Testing on HTML source&#xD;
Being a little meta, let&amp;#039;s test this against the [WC3 page for Selectors Level 3](https://www.w3.org/TR/selectors-3/).&#xD;
&#xD;
```&#xD;
In[] := document = Import[&amp;#034;https://www.w3.org/TR/selectors-3/&amp;#034;, &amp;#034;XMLObject&amp;#034;];&#xD;
```&#xD;
&#xD;
### Look for elements that belong to classes that contain the letter &amp;#039;h&amp;#039;.&#xD;
```&#xD;
In[] := Position[document, Selector[&amp;#034;[class*=h]&amp;#034;]]&#xD;
Out[] = {{2, 3, 2, 3, 2}, {2, 3, 2, 3, 484}, {2, 3, 2, 3, 488}, {2, 3, 2, 3, 2, 3, 11}}&#xD;
&#xD;
In[] := Extract[document, %][[All, 1 ;; 2]] // Column&#xD;
Out[] = {&#xD;
 {XMLElement[&amp;#034;div&amp;#034;, {&amp;#034;class&amp;#034; -&amp;gt; &amp;#034;head&amp;#034;}]},&#xD;
 {XMLElement[&amp;#034;dl&amp;#034;, {&amp;#034;class&amp;#034; -&amp;gt; &amp;#034;bibliography&amp;#034;}]},&#xD;
 {XMLElement[&amp;#034;dl&amp;#034;, {&amp;#034;class&amp;#034; -&amp;gt; &amp;#034;bibliography&amp;#034;}]},&#xD;
 {XMLElement[&amp;#034;p&amp;#034;, {&amp;#034;class&amp;#034; -&amp;gt; &amp;#034;copyright&amp;#034;}]}&#xD;
}&#xD;
```&#xD;
&#xD;
### Look for elements of class &amp;#039;.no-num&amp;#039;&#xD;
```&#xD;
In[] := Extract[document, Position[document, Selector[&amp;#034;.no-num&amp;#034;]]] // Column&#xD;
Out[] = {&#xD;
 {XMLElement[&amp;#034;h2&amp;#034;, {&amp;#034;class&amp;#034; -&amp;gt; &amp;#034;no-num no-toc&amp;#034;, &amp;#034;id&amp;#034; -&amp;gt; &amp;#034;abstract&amp;#034;}, {&amp;#034;Abstract&amp;#034;}]},&#xD;
 {XMLElement[&amp;#034;h2&amp;#034;, {&amp;#034;class&amp;#034; -&amp;gt; &amp;#034;no-num no-toc&amp;#034;, &amp;#034;id&amp;#034; -&amp;gt; &amp;#034;status&amp;#034;}, {&amp;#034;Status of this document&amp;#034;}]},&#xD;
 {XMLElement[&amp;#034;h2&amp;#034;, {&amp;#034;class&amp;#034; -&amp;gt; &amp;#034;no-num no-toc&amp;#034;, &amp;#034;id&amp;#034; -&amp;gt; &amp;#034;contents&amp;#034;}, {&amp;#034;Table of contents&amp;#034;}]},&#xD;
 {XMLElement[&amp;#034;h2&amp;#034;, {&amp;#034;class&amp;#034; -&amp;gt; &amp;#034;no-num no-toc&amp;#034;}, {&amp;#034;W3C Recommendation 06 November 2018&amp;#034;}]}&#xD;
}&#xD;
```&#xD;
&#xD;
### Check specificity of the selector&#xD;
```&#xD;
In[] := Selector[document, &amp;#034;[class~=a] b &amp;gt; *:link&amp;#034;][&amp;#034;Specificity&amp;#034;]&#xD;
Out[] = {0, 2, 1}&#xD;
&#xD;
In[] := Selector[document, &amp;#034;[class~=a] b &amp;gt; :not(p)&amp;#034;][&amp;#034;Specificity&amp;#034;]&#xD;
Out[] = {0, 1, 2}&#xD;
&#xD;
In[] := Selector[document, &amp;#034;#welcome&amp;#034;][&amp;#034;Specificity&amp;#034;]&#xD;
Out[] = {1, 0, 0}&#xD;
```&#xD;
&#xD;
## Testing on XML source&#xD;
```&#xD;
In[] := str = &amp;#034;&amp;lt;html xml:lang=&amp;#039;zh&amp;#039;&amp;gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;Test&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&amp;lt;body \&#xD;
        xmlns=&amp;#039;http://www.w3.org/1999/xhtml&amp;#039;&amp;gt;&amp;lt;p lang=&amp;#039;en&amp;#039; class=&amp;#039;red&amp;#039; \&#xD;
        myid=&amp;#039;unique&amp;#039;&amp;gt;Here is some math.&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;m:math \&#xD;
        xmlns:m=&amp;#039;http://www.w3.org/1998/Math/MathML&amp;#039;&amp;gt;&amp;lt;m:mi \&#xD;
        m:title=&amp;#039;cat&amp;#039;&amp;gt;x&amp;lt;/m:mi&amp;gt;&amp;lt;m:mo&amp;gt;+&amp;lt;/m:mo&amp;gt;&amp;lt;m:mn&amp;gt;1&amp;lt;/m:mn&amp;gt;&amp;lt;/m:math&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/body&amp;gt;\&#xD;
        \n&amp;lt;/html&amp;gt;&amp;#034;;&#xD;
     &#xD;
In[] := obj = ImportString[str, &amp;#034;XML&amp;#034;];&#xD;
```&#xD;
&#xD;
### Namespace&#xD;
If the selector does not specify a namespace, then the namespace is ignored:&#xD;
&#xD;
```&#xD;
In[] := Selector[str, &amp;#034;mo&amp;#034;]&#xD;
Out[] = &amp;lt;|&amp;#034;Specificity&amp;#034; -&amp;gt; {0, 0, 1}, &amp;#034;Elements&amp;#034; -&amp;gt; {{2, 3, 2, 3, 2, 3, 1, 3, 2}}|&amp;gt;&#xD;
```&#xD;
&#xD;
If a namespace is given in the selector, then you need to provide the prefix&amp;#039;s expansion rule. Otherwise the selector won&amp;#039;t match any element.&#xD;
&#xD;
```&#xD;
In[] := Selector[str, &amp;#034;m|mo&amp;#034;]&#xD;
Out[] = &amp;lt;|&amp;#034;Specificity&amp;#034; -&amp;gt; {0, 0, 1}, &amp;#034;Elements&amp;#034; -&amp;gt; {}|&amp;gt;&#xD;
&#xD;
In[] := Selector[str, &amp;#034;m|mo&amp;#034;, &amp;#034;Namespaces&amp;#034; -&amp;gt; {&amp;#034;m&amp;#034; -&amp;gt; &amp;#034;http://www.w3.org/1998/Math/MathML&amp;#034;}]&#xD;
Out[] = &amp;lt;|&amp;#034;Specificity&amp;#034; -&amp;gt; {0, 0, 1}, &amp;#034;Elements&amp;#034; -&amp;gt; {{2, 3, 2, 3, 2, 3, 1, 3, 2}}|&amp;gt;&#xD;
```&#xD;
&#xD;
### ID&#xD;
XML can define its own unique ID tags. Use the &amp;#034;ID&amp;#034; option to indicate what tag name is in use. This is equivalent to using the attribute selector but with higher specificity.&#xD;
&#xD;
```&#xD;
In[] := Selector[str, &amp;#034;#unique&amp;#034;, &amp;#034;ID&amp;#034; -&amp;gt; &amp;#034;myid&amp;#034;]&#xD;
Out[] = &amp;lt;|&amp;#034;Specificity&amp;#034; -&amp;gt; {1, 0, 0}, &amp;#034;Elements&amp;#034; -&amp;gt; {{2, 3, 2, 3, 1}}|&amp;gt;&#xD;
&#xD;
In[] := Selector[str, &amp;#034;[myid=unique]&amp;#034;]&#xD;
Out[] = &amp;lt;|&amp;#034;Specificity&amp;#034; -&amp;gt; {0, 1, 0}, &amp;#034;Elements&amp;#034; -&amp;gt; {{2, 3, 2, 3, 1}}|&amp;gt;&#xD;
```&#xD;
&#xD;
### Case sensitivity&#xD;
XML is case-sensitive, but the Selectors3 package is not by default. Use the &amp;#034;CaseInsensitive&amp;#034; option to enforce case sensitivity.&#xD;
&#xD;
```&#xD;
In[] := Selector[str, &amp;#034;[myID=unique]&amp;#034;, &amp;#034;CaseInsensitive&amp;#034; -&amp;gt; True]&#xD;
Out[] = &amp;lt;|&amp;#034;Specificity&amp;#034; -&amp;gt; {0, 1, 0}, &amp;#034;Elements&amp;#034; -&amp;gt; {{2, 3, 2, 3, 1}}|&amp;gt;&#xD;
&#xD;
In[] := Selector[str, &amp;#034;[myID=unique]&amp;#034;, &amp;#034;CaseInsensitive&amp;#034; -&amp;gt; False]&#xD;
Out[] = &amp;lt;|&amp;#034;Specificity&amp;#034; -&amp;gt; {0, 1, 0}, &amp;#034;Elements&amp;#034; -&amp;gt; {}|&amp;gt;&#xD;
```&#xD;
&#xD;
You can specify the case-sensitivity separately for attribute name and value.&#xD;
&#xD;
```&#xD;
In[] := Selector[str, &amp;#034;[myID=Unique]&amp;#034;, &amp;#034;CaseInsensitive&amp;#034; -&amp;gt; {&amp;#034;AttributeName&amp;#034; -&amp;gt; True, &amp;#034;AttributeValue&amp;#034; -&amp;gt; False}]&#xD;
Out[] = &amp;lt;|&amp;#034;Specificity&amp;#034; -&amp;gt; {0, 1, 0}, &amp;#034;Elements&amp;#034; -&amp;gt; {}|&amp;gt;&#xD;
&#xD;
In[] := Selector[str, &amp;#034;[myID=Unique]&amp;#034;, &amp;#034;CaseInsensitive&amp;#034; -&amp;gt; {&amp;#034;AttributeName&amp;#034; -&amp;gt; False, &amp;#034;AttributeValue&amp;#034; -&amp;gt; True}]&#xD;
Out[] = &amp;lt;|&amp;#034;Specificity&amp;#034; -&amp;gt; {0, 1, 0}, &amp;#034;Elements&amp;#034; -&amp;gt; {}|&amp;gt;&#xD;
&#xD;
In[] := Selector[str, &amp;#034;[myID=Unique]&amp;#034;, &amp;#034;CaseInsensitive&amp;#034; -&amp;gt; {&amp;#034;AttributeName&amp;#034; -&amp;gt; True, &amp;#034;AttributeValue&amp;#034; -&amp;gt; True}]&#xD;
Out[] = &amp;lt;|&amp;#034;Specificity&amp;#034; -&amp;gt; {0, 1, 0}, &amp;#034;Elements&amp;#034; -&amp;gt; {{2, 3, 2, 3, 1}}|&amp;gt;&#xD;
```&#xD;
&#xD;
You can specify the case-sensitivity separately for type.&#xD;
&#xD;
```&#xD;
In[] := Selector[str, &amp;#034;P&amp;#034;, &amp;#034;CaseInsensitive&amp;#034; -&amp;gt; {&amp;#034;Type&amp;#034; -&amp;gt; True}]&#xD;
Out[] = &amp;lt;|&amp;#034;Specificity&amp;#034; -&amp;gt; {0, 0, 1}, &amp;#034;Elements&amp;#034; -&amp;gt; {{2, 3, 2, 3, 1}, {2, 3, 2, 3, 2}}|&amp;gt;&#xD;
&#xD;
In[] := Selector[str, &amp;#034;P&amp;#034;, &amp;#034;CaseInsensitive&amp;#034; -&amp;gt; {&amp;#034;Type&amp;#034; -&amp;gt; False}]&#xD;
Out[] = &amp;lt;|&amp;#034;Specificity&amp;#034; -&amp;gt; {0, 0, 1}, &amp;#034;Elements&amp;#034; -&amp;gt; {}|&amp;gt;&#xD;
```</description>
    <dc:creator>Kevin Daily</dc:creator>
    <dc:date>2018-12-20T20:53:34Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/1664846">
    <title>Famous computable theorems of geometry</title>
    <link>https://community.wolfram.com/groups/-/m/t/1664846</link>
    <description>[GeometricScene][1] and [FindGeometricConjectures][2] are  two of my favorite new functions in Wolfram Language V12. V12 provides innovative automated capabilities to draw and reason about abstractly described scenes in the plane.&#xD;
&#xD;
I also remember that I&amp;#039;d proved  famous theorems of geometry over many days when I was a junior high school student. I will show nine theorems, including those in the Documentation Center and [WOLFRAM blog][3].&#xD;
&#xD;
## Thaless Theorem ##&#xD;
If A, B, and C are distinct points on a circle where the line AC is a diameter, then the angle \[Angle]ABC is a right angle.&#xD;
&#xD;
    gs = GeometricScene[{&amp;#034;A&amp;#034;, &amp;#034;B&amp;#034;, &amp;#034;C&amp;#034;, &amp;#034;O&amp;#034;}, &#xD;
       {Triangle[{&amp;#034;A&amp;#034;, &amp;#034;B&amp;#034;, &amp;#034;C&amp;#034;}], &#xD;
        CircleThrough[{&amp;#034;A&amp;#034;, &amp;#034;B&amp;#034;, &amp;#034;C&amp;#034;}, &amp;#034;O&amp;#034;],&#xD;
        &amp;#034;O&amp;#034; == Midpoint[{&amp;#034;A&amp;#034;, &amp;#034;C&amp;#034;}],&#xD;
        Style[Line[{&amp;#034;A&amp;#034;, &amp;#034;B&amp;#034;}], Orange],&#xD;
        Style[Line[{&amp;#034;B&amp;#034;, &amp;#034;C&amp;#034;}], Orange]&#xD;
        } &#xD;
       ];&#xD;
    RandomInstance[gs]&#xD;
    FindGeometricConjectures[gs][&amp;#034;Conclusions&amp;#034;]&#xD;
&#xD;
![enter image description here][4]&#xD;
![enter image description here][5]&#xD;
&#xD;
## Napoleons Theorem ##&#xD;
If regular triangles are constructed on the sides of any triangle, either all outward or all inward, the lines connecting the centres of those regular triangles themselves form an regular triangle.&#xD;
&#xD;
    gs = GeometricScene[{&amp;#034;C&amp;#034;, &amp;#034;B&amp;#034;, &amp;#034;A&amp;#034;, &amp;#034;C&amp;#039;&amp;#034;, &amp;#034;B&amp;#039;&amp;#034;, &amp;#034;A&amp;#039;&amp;#034;, &amp;#034;Oc&amp;#034;, &amp;#034;Ob&amp;#034;, &#xD;
        &amp;#034;Oa&amp;#034;},&#xD;
       {Triangle[{&amp;#034;C&amp;#034;, &amp;#034;B&amp;#034;, &amp;#034;A&amp;#034;}],&#xD;
        TC == Triangle[{&amp;#034;A&amp;#034;, &amp;#034;B&amp;#034;, &amp;#034;C&amp;#039;&amp;#034;}],&#xD;
        TB == Triangle[{&amp;#034;C&amp;#034;, &amp;#034;A&amp;#034;, &amp;#034;B&amp;#039;&amp;#034;}],&#xD;
        TA == Triangle[{&amp;#034;B&amp;#034;, &amp;#034;C&amp;#034;, &amp;#034;A&amp;#039;&amp;#034;}],&#xD;
        GeometricAssertion[{TC, TB, TA}, &amp;#034;Regular&amp;#034;],&#xD;
        &amp;#034;Oc&amp;#034; == TriangleCenter[TC, &amp;#034;Centroid&amp;#034;],&#xD;
        &amp;#034;Ob&amp;#034; == TriangleCenter[TB, &amp;#034;Centroid&amp;#034;],&#xD;
        &amp;#034;Oa&amp;#034; == TriangleCenter[TA, &amp;#034;Centroid&amp;#034;],&#xD;
        Style[Triangle[{&amp;#034;Oc&amp;#034;, &amp;#034;Ob&amp;#034;, &amp;#034;Oa&amp;#034;}], Orange]}&#xD;
       ];&#xD;
    RandomInstance[gs]&#xD;
    FindGeometricConjectures[gs][&amp;#034;Conclusions&amp;#034;]&#xD;
&#xD;
![enter image description here][6]&#xD;
![enter image description here][7]&#xD;
&#xD;
## Finsler-Hadwiger Theorem  ##&#xD;
ABCD and A BB CC DD are two squares with common vertex A. Let Q and S be the midpoints of BB D and DD B respectively, and let R and T be the centers of the two squares. Then the quadrilateral QRST is a square as well.&#xD;
&#xD;
    gs = GeometricScene[{&amp;#034;A&amp;#034;, &amp;#034;B&amp;#034;, &amp;#034;C&amp;#034;, &amp;#034;D&amp;#034;, &amp;#034;BB&amp;#034;, &amp;#034;CC&amp;#034;, &amp;#034;DD&amp;#034;, &amp;#034;Q&amp;#034;, &amp;#034;R&amp;#034;, &amp;#034;S&amp;#034;, &amp;#034;T&amp;#034;}, &#xD;
       {GeometricAssertion[{Polygon[{&amp;#034;A&amp;#034;, &amp;#034;B&amp;#034;, &amp;#034;C&amp;#034;, &amp;#034;D&amp;#034;}], &#xD;
          Polygon[{&amp;#034;A&amp;#034;, &amp;#034;BB&amp;#034;, &amp;#034;CC&amp;#034;, &amp;#034;DD&amp;#034;}]}, &amp;#034;Regular&amp;#034;, &amp;#034;Counterclockwise&amp;#034;],&#xD;
        &amp;#034;Q&amp;#034; == Midpoint[{&amp;#034;BB&amp;#034;, &amp;#034;D&amp;#034;}],&#xD;
        &amp;#034;R&amp;#034; == Midpoint[{&amp;#034;A&amp;#034;, &amp;#034;C&amp;#034;}],&#xD;
        &amp;#034;S&amp;#034; == Midpoint[{&amp;#034;B&amp;#034;, &amp;#034;DD&amp;#034;}],&#xD;
        &amp;#034;T&amp;#034; == Midpoint[{&amp;#034;A&amp;#034;, &amp;#034;CC&amp;#034;}],&#xD;
        Style[Polygon[{&amp;#034;Q&amp;#034;, &amp;#034;R&amp;#034;, &amp;#034;S&amp;#034;, &amp;#034;T&amp;#034;}], Orange]}];&#xD;
    RandomInstance[gs]&#xD;
    FindGeometricConjectures[gs][&amp;#034;Conclusions&amp;#034;]&#xD;
&#xD;
![enter image description here][8]&#xD;
![enter image description here][9]&#xD;
&#xD;
## Echols Theorem ##&#xD;
The midpoints of AD, BE, and CF in two equilateral triangles ABC and DEF form a regular triangle.&#xD;
&#xD;
    gs = GeometricScene[{&amp;#034;A&amp;#034;, &amp;#034;B&amp;#034;, &amp;#034;C&amp;#034;, &amp;#034;D&amp;#034;, &amp;#034;E&amp;#034;, &amp;#034;F&amp;#034;, &amp;#034;L&amp;#034;, &amp;#034;M&amp;#034;, &amp;#034;N&amp;#034;},&#xD;
       {T1 == Triangle[{&amp;#034;A&amp;#034;, &amp;#034;B&amp;#034;, &amp;#034;C&amp;#034;}],&#xD;
        T2 == Triangle[{&amp;#034;D&amp;#034;, &amp;#034;E&amp;#034;, &amp;#034;F&amp;#034;}],&#xD;
        GeometricAssertion[{T1, T2}, &amp;#034;Regular&amp;#034;], &#xD;
        &amp;#034;L&amp;#034; == Midpoint[{&amp;#034;A&amp;#034;, &amp;#034;D&amp;#034;}],&#xD;
        &amp;#034;M&amp;#034; == Midpoint[{&amp;#034;B&amp;#034;, &amp;#034;E&amp;#034;}],&#xD;
        &amp;#034;N&amp;#034; == Midpoint[{&amp;#034;C&amp;#034;, &amp;#034;F&amp;#034;}],&#xD;
        Style[Triangle[{&amp;#034;L&amp;#034;, &amp;#034;M&amp;#034;, &amp;#034;N&amp;#034;}], Orange]&#xD;
        }&#xD;
       ];&#xD;
    RandomInstance[gs]&#xD;
    FindGeometricConjectures[gs][&amp;#034;Conclusions&amp;#034;]&#xD;
&#xD;
![enter image description here][10]&#xD;
![enter image description here][11]&#xD;
&#xD;
## Simson Theorem &amp;amp; Steiner Theorem ##&#xD;
Simson&amp;#039;s Theorem states that ABC and a point P on its circumcircle, the three closest points to P on lines AB, AC, and BC are collinear. Steiner&amp;#039;s Theorem states that if the vertical center of triangle ABC is H, the Simson line passes through the midpoint of PH.&#xD;
&#xD;
    gs = GeometricScene[{&amp;#034;A&amp;#034;, &amp;#034;B&amp;#034;, &amp;#034;C&amp;#034;, &amp;#034;P&amp;#034;, &amp;#034;L&amp;#034;, &amp;#034;M&amp;#034;, &amp;#034;N&amp;#034;, &amp;#034;H&amp;#034;, &amp;#034;S&amp;#034;},&#xD;
       {CircleThrough[{&amp;#034;P&amp;#034;, &amp;#034;A&amp;#034;, &amp;#034;B&amp;#034;, &amp;#034;C&amp;#034;}],&#xD;
        &amp;#034;L&amp;#034; \[Element] InfiniteLine[{&amp;#034;B&amp;#034;, &amp;#034;C&amp;#034;}],&#xD;
        &amp;#034;M&amp;#034; \[Element] InfiniteLine[{&amp;#034;C&amp;#034;, &amp;#034;A&amp;#034;}],&#xD;
        &amp;#034;N&amp;#034; \[Element] InfiniteLine[{&amp;#034;A&amp;#034;, &amp;#034;B&amp;#034;}],&#xD;
        PlanarAngle[{&amp;#034;P&amp;#034;, &amp;#034;L&amp;#034;, &amp;#034;B&amp;#034;}] == 90 \[Degree],&#xD;
        PlanarAngle[{&amp;#034;P&amp;#034;, &amp;#034;M&amp;#034;, &amp;#034;C&amp;#034;}] == 90 \[Degree],&#xD;
        PlanarAngle[{&amp;#034;P&amp;#034;, &amp;#034;N&amp;#034;, &amp;#034;A&amp;#034;}] == 90 \[Degree], &#xD;
        Style[InfiniteLine[{&amp;#034;L&amp;#034;, &amp;#034;M&amp;#034;}], Orange],&#xD;
        GeometricAssertion[{InfiniteLine[{&amp;#034;A&amp;#034;, &amp;#034;H&amp;#034;}], Line[{&amp;#034;B&amp;#034;, &amp;#034;C&amp;#034;}]}, &#xD;
         &amp;#034;Perpendicular&amp;#034;],&#xD;
        GeometricAssertion[{InfiniteLine[{&amp;#034;B&amp;#034;, &amp;#034;H&amp;#034;}], Line[{&amp;#034;A&amp;#034;, &amp;#034;C&amp;#034;}]}, &#xD;
         &amp;#034;Perpendicular&amp;#034;],&#xD;
        Style[Line[{&amp;#034;P&amp;#034;, &amp;#034;H&amp;#034;}], Orange],&#xD;
        Line[{&amp;#034;P&amp;#034;, &amp;#034;S&amp;#034;, &amp;#034;H&amp;#034;}], Line[{&amp;#034;L&amp;#034;, &amp;#034;S&amp;#034;, &amp;#034;M&amp;#034;}]&#xD;
        }&#xD;
       ];&#xD;
    RandomInstance[gs]&#xD;
    FindGeometricConjectures[gs][&amp;#034;Conclusions&amp;#034;]&#xD;
&#xD;
![enter image description here][12]&#xD;
![enter image description here][13]&#xD;
&#xD;
## Aubel Theorem ##&#xD;
Starting with a given quadrilateral (a polygon having four sides), construct a square on each side.The two line segments between the centers of opposite squares are of equal lengths and are at right angles to one another.&#xD;
&#xD;
    gs = GeometricScene[{&amp;#034;A&amp;#034;, &amp;#034;B&amp;#034;, &amp;#034;C&amp;#034;, &amp;#034;D&amp;#034;, &amp;#034;A&amp;#039;&amp;#034;, &amp;#034;A&amp;#039;&amp;#039;&amp;#034;, &amp;#034;B&amp;#039;&amp;#034;,&#xD;
        &amp;#034;B&amp;#039;&amp;#039;&amp;#034;, &amp;#034;C&amp;#039;&amp;#034;, &amp;#034;C&amp;#039;&amp;#039;&amp;#034;, &amp;#034;D&amp;#039;&amp;#034;, &amp;#034;D&amp;#039;&amp;#039;&amp;#034;, &amp;#034;Oa&amp;#034;, &amp;#034;Ob&amp;#034;, &amp;#034;Oc&amp;#034;, &amp;#034;Od&amp;#034;},&#xD;
       {GeometricAssertion[Polygon[{&amp;#034;A&amp;#034;, &amp;#034;B&amp;#034;, &amp;#034;C&amp;#034;, &amp;#034;D&amp;#034;}], &amp;#034;Convex&amp;#034;],&#xD;
        GeometricAssertion[{pa = Polygon[{&amp;#034;A&amp;#034;, &amp;#034;B&amp;#034;, &amp;#034;A&amp;#039;&amp;#034;, &amp;#034;A&amp;#039;&amp;#039;&amp;#034;}], &#xD;
          pb = Polygon[{&amp;#034;B&amp;#034;, &amp;#034;C&amp;#034;, &amp;#034;B&amp;#039;&amp;#034;, &amp;#034;B&amp;#039;&amp;#039;&amp;#034;}], &#xD;
          pc = Polygon[{&amp;#034;C&amp;#034;, &amp;#034;D&amp;#034;, &amp;#034;C&amp;#039;&amp;#034;, &amp;#034;C&amp;#039;&amp;#039;&amp;#034;}], &#xD;
          pd = Polygon[{&amp;#034;D&amp;#034;, &amp;#034;A&amp;#034;, &amp;#034;D&amp;#039;&amp;#034;, &amp;#034;D&amp;#039;&amp;#039;&amp;#034;}]}, &amp;#034;Regular&amp;#034;, &#xD;
         &amp;#034;Counterclockwise&amp;#034;],&#xD;
        &amp;#034;Oa&amp;#034; == Midpoint[{&amp;#034;A&amp;#034;, &amp;#034;A&amp;#039;&amp;#034;}],&#xD;
        &amp;#034;Ob&amp;#034; == Midpoint[{&amp;#034;B&amp;#034;, &amp;#034;B&amp;#039;&amp;#034;}],&#xD;
        &amp;#034;Oc&amp;#034; == Midpoint[{&amp;#034;C&amp;#034;, &amp;#034;C&amp;#039;&amp;#034;}],&#xD;
        &amp;#034;Od&amp;#034; == Midpoint[{&amp;#034;D&amp;#034;, &amp;#034;D&amp;#039;&amp;#034;}],&#xD;
        Style[Line[{&amp;#034;Oa&amp;#034;, &amp;#034;Oc&amp;#034;}], Orange],&#xD;
        Style[Line[{&amp;#034;Ob&amp;#034;, &amp;#034;Od&amp;#034;}], Orange]}&#xD;
       ];&#xD;
    RandomInstance[gs]&#xD;
    FindGeometricConjectures[gs][&amp;#034;Conclusions&amp;#034;]&#xD;
&#xD;
![enter image description here][14]&#xD;
![enter image description here][15]&#xD;
&#xD;
## Brahmagupta Theorem ##&#xD;
If a cyclic quadrilateral has perpendicular diagonals, then the perpendicular to a side from the point of intersection of the diagonals always bisects the opposite side.&#xD;
&#xD;
    gs = GeometricScene[{&amp;#034;A&amp;#034;, &amp;#034;B&amp;#034;, &amp;#034;C&amp;#034;, &amp;#034;D&amp;#034;, &amp;#034;E&amp;#034;, &amp;#034;M&amp;#034;},&#xD;
       {Polygon[{&amp;#034;A&amp;#034;, &amp;#034;B&amp;#034;, &amp;#034;C&amp;#034;, &amp;#034;D&amp;#034;}],&#xD;
        CircleThrough[{&amp;#034;A&amp;#034;, &amp;#034;B&amp;#034;, &amp;#034;C&amp;#034;, &amp;#034;D&amp;#034;}],&#xD;
        GeometricAssertion[{Line[{&amp;#034;A&amp;#034;, &amp;#034;C&amp;#034;}], Line[{&amp;#034;B&amp;#034;, &amp;#034;D&amp;#034;}]}, &#xD;
         &amp;#034;Perpendicular&amp;#034;],&#xD;
        Line[{&amp;#034;A&amp;#034;, &amp;#034;E&amp;#034;, &amp;#034;C&amp;#034;}], Line[{&amp;#034;B&amp;#034;, &amp;#034;E&amp;#034;, &amp;#034;D&amp;#034;}],&#xD;
        &amp;#034;M&amp;#034; == Midpoint[{&amp;#034;A&amp;#034;, &amp;#034;B&amp;#034;}],&#xD;
        Style[InfiniteLine[{&amp;#034;M&amp;#034;, &amp;#034;E&amp;#034;}], Orange],&#xD;
        Style[Line[{&amp;#034;C&amp;#034;, &amp;#034;D&amp;#034;}], Orange]&#xD;
        }&#xD;
       ];&#xD;
    RandomInstance[gs]&#xD;
    FindGeometricConjectures[gs][&amp;#034;Conclusions&amp;#034;]&#xD;
&#xD;
![enter image description here][16]&#xD;
![enter image description here][17]&#xD;
&#xD;
## Morley Theorem ##&#xD;
In any triangle, the three points of intersection of the adjacent angle trisectors form a regular triangle.&#xD;
&#xD;
    gs = GeometricScene[{&amp;#034;A&amp;#034;, &amp;#034;B&amp;#034;, &amp;#034;C&amp;#034;, &amp;#034;D&amp;#034;, &amp;#034;E&amp;#034;, &amp;#034;F&amp;#034;},&#xD;
       {Triangle[{&amp;#034;A&amp;#034;, &amp;#034;B&amp;#034;, &amp;#034;C&amp;#034;}],&#xD;
        PlanarAngle[{&amp;#034;A&amp;#034;, &amp;#034;B&amp;#034;, &amp;#034;F&amp;#034;}] == PlanarAngle[{&amp;#034;A&amp;#034;, &amp;#034;B&amp;#034;, &amp;#034;C&amp;#034;}]/3,&#xD;
        PlanarAngle[{&amp;#034;F&amp;#034;, &amp;#034;A&amp;#034;, &amp;#034;B&amp;#034;}] == PlanarAngle[{&amp;#034;C&amp;#034;, &amp;#034;A&amp;#034;, &amp;#034;B&amp;#034;}]/3,&#xD;
        PlanarAngle[{&amp;#034;C&amp;#034;, &amp;#034;B&amp;#034;, &amp;#034;D&amp;#034;}] == PlanarAngle[{&amp;#034;C&amp;#034;, &amp;#034;B&amp;#034;, &amp;#034;A&amp;#034;}]/3,&#xD;
        PlanarAngle[{&amp;#034;B&amp;#034;, &amp;#034;C&amp;#034;, &amp;#034;D&amp;#034;}] == PlanarAngle[{&amp;#034;B&amp;#034;, &amp;#034;C&amp;#034;, &amp;#034;A&amp;#034;}]/3,&#xD;
        PlanarAngle[{&amp;#034;A&amp;#034;, &amp;#034;C&amp;#034;, &amp;#034;E&amp;#034;}] == PlanarAngle[{&amp;#034;A&amp;#034;, &amp;#034;C&amp;#034;, &amp;#034;B&amp;#034;}]/3,&#xD;
        PlanarAngle[{&amp;#034;C&amp;#034;, &amp;#034;A&amp;#034;, &amp;#034;E&amp;#034;}] == PlanarAngle[{&amp;#034;C&amp;#034;, &amp;#034;A&amp;#034;, &amp;#034;B&amp;#034;}]/3,&#xD;
        &amp;#034;D&amp;#034; \[Element] Triangle[{&amp;#034;A&amp;#034;, &amp;#034;B&amp;#034;, &amp;#034;C&amp;#034;}],&#xD;
        &amp;#034;E&amp;#034; \[Element] Triangle[{&amp;#034;A&amp;#034;, &amp;#034;B&amp;#034;, &amp;#034;C&amp;#034;}],&#xD;
        &amp;#034;F&amp;#034; \[Element] Triangle[{&amp;#034;A&amp;#034;, &amp;#034;B&amp;#034;, &amp;#034;C&amp;#034;}],&#xD;
        Style[Triangle[{&amp;#034;D&amp;#034;, &amp;#034;E&amp;#034;, &amp;#034;F&amp;#034;}], Orange]&#xD;
        }&#xD;
       ];&#xD;
    RandomInstance[gs]&#xD;
    FindGeometricConjectures[gs][&amp;#034;Conclusions&amp;#034;]&#xD;
&#xD;
![enter image description here][18]&#xD;
![enter image description here][19]&#xD;
&#xD;
&#xD;
  [1]: https://reference.wolfram.com/language/ref/GeometricScene.html&#xD;
  [2]: https://reference.wolfram.com/language/ref/FindGeometricConjectures.html&#xD;
  [3]: https://blog.wolfram.com/2019/04/16/version-12-launches-today-big-jump-for-wolfram-language-and-mathematica/&#xD;
  [4]: https://community.wolfram.com//c/portal/getImageAttachment?filename=122401.jpg&amp;amp;userId=1013863&#xD;
  [5]: https://community.wolfram.com//c/portal/getImageAttachment?filename=801502.jpg&amp;amp;userId=1013863&#xD;
  [6]: https://community.wolfram.com//c/portal/getImageAttachment?filename=508803.jpg&amp;amp;userId=1013863&#xD;
  [7]: https://community.wolfram.com//c/portal/getImageAttachment?filename=222204.jpg&amp;amp;userId=1013863&#xD;
  [8]: https://community.wolfram.com//c/portal/getImageAttachment?filename=289105.jpg&amp;amp;userId=1013863&#xD;
  [9]: https://community.wolfram.com//c/portal/getImageAttachment?filename=932006.jpg&amp;amp;userId=1013863&#xD;
  [10]: https://community.wolfram.com//c/portal/getImageAttachment?filename=876507.jpg&amp;amp;userId=1013863&#xD;
  [11]: https://community.wolfram.com//c/portal/getImageAttachment?filename=184108.jpg&amp;amp;userId=1013863&#xD;
  [12]: https://community.wolfram.com//c/portal/getImageAttachment?filename=350909.jpg&amp;amp;userId=1013863&#xD;
  [13]: https://community.wolfram.com//c/portal/getImageAttachment?filename=500710.jpg&amp;amp;userId=1013863&#xD;
  [14]: https://community.wolfram.com//c/portal/getImageAttachment?filename=318711.jpg&amp;amp;userId=1013863&#xD;
  [15]: https://community.wolfram.com//c/portal/getImageAttachment?filename=254812.jpg&amp;amp;userId=1013863&#xD;
  [16]: https://community.wolfram.com//c/portal/getImageAttachment?filename=308813.jpg&amp;amp;userId=1013863&#xD;
  [17]: https://community.wolfram.com//c/portal/getImageAttachment?filename=934714.jpg&amp;amp;userId=1013863&#xD;
  [18]: https://community.wolfram.com//c/portal/getImageAttachment?filename=367015.jpg&amp;amp;userId=1013863&#xD;
  [19]: https://community.wolfram.com//c/portal/getImageAttachment?filename=16.jpg&amp;amp;userId=1013863</description>
    <dc:creator>Kotaro Okazaki</dc:creator>
    <dc:date>2019-04-20T14:42:58Z</dc:date>
  </item>
</rdf:RDF>

