text:
cancel
Showing results for
Did you mean:
Highlighted
Ruby

High CPU utilization during process fwk0_dev_0 (UMFW vs. KMFW)

What can be the problem on a 16 core open server R80.30 if the following process fwk0_dev_0 is at 300%-400% high CPU utilization. This prozess "fwk0_dev" indicates VSX in older versions. VSX is not enabled on this system.

What does this prozess do?

Who can help here?

# top

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
19437 admin      0 -20 18.402g 0.015t 538544 S 309.9  1.0   8626:21 fwk0_dev_0
19831 admin     20   0  755376 186344  41628 S   5.6  0.0 459:42.51 fw_full

# pstree -l |grep -A 15 -B 15 fwk0_dev_0

-cprid_wd---cprid
|-cpwd-+-AutoUpdaterServ-+-AutoUpdater---22*[{AutoUpdater}]
|      |                 -sleep
|      |-DAService_scrip-+-DAService---5*[{DAService}]
|      |                 -sleep
|      |-avi_del_tmp_fil---sleep
|      |-ci_http_server
|      |-cpd---4*[{cpd}]
|      |-cphamcset
|      |-cpview_services
|      |-cpviewd---{cpviewd}
|      |-4*[dlpu]
|      |-fw_full-+-in.acapd---{in.acapd}
|      |         |-in.asessiond---{in.asessiond}
|      |         |-in.msd---3*[{in.msd}]
|      |         |-stormd
|      |         |-ted---temain---46*[{temain}]
|      |         |-usrchkd
|      |         |-vpnd---3*[{vpnd}]
|      |         -10*[{fw_full}]
|      |-fwk_forker---fwk0_dev_0---33*[{fwk0_dev_0}]
|      |-fwk_wd
|      |-lpd

Tags (2)
2 Solutions

Accepted Solutions
Highlighted
Ruby

Tags (1)
Highlighted
Ruby

Re: High CPU utilization during process fwk0_dev_0 (UMFW vs. KMFW)

thanks for your answer. I have also a couple of follow-up questions:

For my tests I switched a LAB firewall R80.30 kernel 3.10 with 4 cores under VMWare to a UMFW.

1) Is this really the process fwd_dev you describe? I can't find anything here to process fwd_dev with "top" and "ps" on the firewall. I think this is the process "fwk0_dev_0". Here I can find more threads with top if USFM is enabled (see CLI commands).

2) What are the following processes responsible for and what is the function?

- fwk0_X
- fwk0_dev_X
- fwk0_kissd
- fwk0_hp

I think out loud:

If I use cpconfig to change the CoreXL cores, the number of processes fwk0_X and fwk0_dev_X (X stands for the CoreXL instance)  will also change. I think those are our firewall workers processes at a USFW. If this is the case, I can use the following command "top -Hbn1 -p <prozess ID fwk0_dev_0>to see how the firewall worker threads are being utilized. When I look at the process fwk0_dev_0 with top I see a very high load in sum. This could be the sum of all thread utilizations from process fwk0_dev_0.

A small calculation sample for the utilization of process fwk0_dev_0:

max_CoreXL_number            max_CoreXL_number
fwk0_dev_0      =      ∑       fwk0_x                    +                fwk0_dev_x          +        fwk0_kissd        +          fwk0_hp
x=0                                              x=0

This would explain the high process utilization of the process. Should that be the case, I answered one of my questions myself 🙂

I'd appreciate it if we could work this out. Thanks in advance.

CLI commands:

-------------------------------------------------------------------------

[Expert@GW2:0]# cpprod_util FwIsUsermode
1                                                                                >>> USFW is enabled

[Expert@GW2:0]# top

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
10219 admin 0 -20 1070m 449m 134m S 2 24.0 0:17.19 fwk0_dev_0          >>> fwk0_dev_0 process id 10219

[Expert@GW2:0]# top -Hbn1 -p 10219                                                              >>> threads for process 10219 (fwk0_dev_0)

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
10219 admin 0 -20 1070m 449m 134m S 0 24.0 0:03.49 fwk0_dev_0
10220 admin 0 -20 1070m 449m 134m S 0 24.0 0:00.00 fwk0_kissd
10436 admin 0 -20 1070m 449m 134m S 0 24.0 0:00.57 fwk0_0
10437 admin 0 -20 1070m 449m 134m S 0 24.0 0:00.64 fwk0_1
10438 admin 0 -20 1070m 449m 134m S 0 24.0 0:00.67 fwk0_2
10439 admin 0 -20 1070m 449m 134m S 0 24.0 0:00.80 fwk0_3
10440 admin RT -20 1070m 449m 134m S 0 24.0 0:00.76 fwk0_hp
10441 admin 0 -20 1070m 449m 134m S 0 24.0 0:00.15 fwk0_dev_1
10442 admin 0 -20 1070m 449m 134m S 0 24.0 0:00.09 fwk0_dev_2
10443 admin 0 -20 1070m 449m 134m S 0 24.0 0:00.09 fwk0_dev_3

# pstree -p 10219
fwk0_dev_0(10219)-+-{fwk0_dev_0}(10220)
|-{fwk0_dev_0}(10436)
|-{fwk0_dev_0}(10437)
|-{fwk0_dev_0}(10438)
|-{fwk0_dev_0}(10439)
|-{fwk0_dev_0}(10440)
|-{fwk0_dev_0}(10441)
|-{fwk0_dev_0}(10442)
-{fwk0_dev_0}(10443)

Tags (1)
51 Replies
Highlighted

UM FW enabled?

Highlighted
Ruby

Re: High CPU utilization during process fwk0_dev_0

Looks like USFW is enabled due to the presence of the fwk_forker process.

Edit: My guess as to the purpose of the fwk0_dev_0 is that it acts as the liaison between the multiple fwk Firewall Worker processes and the single fwmod kernel driver instance; note that its process priority is jacked up to the maximum possible (-20).

I use the lsmod command to determine if USFW is enabled like this, which also provides insight as to the implementation of USFW:

Book "Max Power 2020: Check Point Firewall Performance Optimization" Third Edition
Now Available at www.maxpowerfirewalls.com
Highlighted
Ruby

Re: High CPU utilization during process fwk0_dev_0

I think someone from R&D should take a look at this.

The problem is that this process generates a very high CPU load. 300%-400% of 1600% (16 cores *100%) are used by this process. This is very high for me!

On the firewall, the CPU load of the firewall workers  is otherwise very low 1-5% utilization per core.

Is that normal for fwk0_dev_0 process?

Alternatively I can also open a TAC case.

Tags (1)
Highlighted
Ruby

Re: High CPU utilization during process fwk0_dev_0

I was able to clear up some of the issue.

The open server was installed incorrectly. During the installation 64 cores were visible on the gateway because HT was activated. I think the person who installed the FW didn't know that HT is not supported on an open server:-)

Due to the many cores, the FW was activated in "User Mode". When I do this in the lab, I see a very high utilization of the process fwk0_dev_0 in "User Mode". If I switch the same firewall to "Kernel Mode" I can't find this process anymore.

I will set the productive firewall in "Kernel Mode" in the maintenance window.

But the question is , why does the process generate such high CPU utilization in "User Mode FW"?

Tags (1)
Highlighted

Re: High CPU utilization during process fwk0_dev_0

Most probably it was configured incorrectly in the first place. I see no case for support here.

Highlighted
Ruby

Correct 👍

Thanks to all

Tags (1)
Highlighted
Ruby

Re: High CPU utilization during process fwk0_dev_0

To make sure that USFW is activated, run the following command:

# cpprod_util FwIsUsermode

1 = User Mode Firewall
0 = Kernel Mode Firewall

If necessary, you can also add it to the third edition of your book.

Tags (1)
Highlighted
Ruby

Re: High CPU utilization during process fwk0_dev_0

Yeah but I like the lsmod way better. 😁

Book? Not familiar with that obscure word...

Book "Max Power 2020: Check Point Firewall Performance Optimization" Third Edition
Now Available at www.maxpowerfirewalls.com
Highlighted
Ruby

👍

Highlighted
Gold

Re: High CPU utilization during process fwk0_dev_0

Hello @all,

I can see the same behaviour on a customer system ( open server )  with 8 cores.

"cpprod_util FwIsUsermode" shows "1"

I don't know how about of hyperthreading at the install (customer did this).

Can we change usermode to kernel mode on the fly with only changing "cpprod_util FwIsUsermode" ?

Does it work on ClusterXL without interruption ?

Wolfgang

Highlighted
Ruby

Re: High CPU utilization during process fwk0_dev_0

Generally I don't recommend changing the state of USFW from its default without consulting TAC.  If it is enabled by default I'd leave it enabled as Check Point must feel that it would provide a tangible benefit.  It seems that if the 3.10 kernel is present and you are using R80.30, USFW will generally be enabled, but the rules about when USFW is enabled vs. disabled by default seem to be pretty complex.  I think the complexity concerning USFW being enabled/disabled by default stems from the dual kernels (2.6.18 vs. 3.10) available for R80.30, hopefully this will get clarified in R80.40 which supposedly will require use of the 3.10 kernel.

To sum up, I don't think there is any cause for alarm about fwk0_dev_0 eating lots of CPU, it is just a side effect of USFW being enabled, which causes most firewall CPU utilization to occur in process/user space instead of in the kernel.

Changing the state of USFW requires a reboot, the instructions are here: sk149973: How to enable USFW (User-Space Firewall) on a 23900 appliance

Book "Max Power 2020: Check Point Firewall Performance Optimization" Third Edition
Now Available at www.maxpowerfirewalls.com
Highlighted
Gold

Re: High CPU utilization during process fwk0_dev_0

I'll be waiting for response from TAC.....

The behaviour is really strange. We had 4 open servers, all installed with R80.30.

2 have USFW on, 2 not. Same hardware model, only different CPU cores.

We did the same install routine on all servers.

Why is it on on 2 of the servers and on the others not ? (I'll hope, TAC has an answer)

Wolfgang

Highlighted
Ruby

Re: High CPU utilization during process fwk0_dev_0

I've seen the same, to date I have not been able to get a clear answer other than "it depends" as far as whether USFW will be enabled by default or not.  What I've been able to figure out so far is that if kernel 2.6.18 is in use, USFW will not be enabled by default upon install or upgrade, but it can be manually enabled.  If the 3.10 kernel is in use it definitely seems to get enabled on firewalls with 40+ cores, and possibly on smaller ones.  Beyond that I'm not sure...so if you could get a straight answer from TAC on this it would be appreciated...

How are the cores different between your firewalls that have USFW enabled vs. those that do not?

Book "Max Power 2020: Check Point Firewall Performance Optimization" Third Edition
Now Available at www.maxpowerfirewalls.com
Highlighted
Ruby

Re: High CPU utilization during process fwk0_dev_0

According to SK the UMFW is enabled from R80.30 by default. I'm afraid I noticed that a little differently. To confirm this I called a friend (He's a HP dealer.) and asked him if he had a HP DL380 with more then 40 cores in his company:-) Two hours later we were sitting in his LAB and installed R80.30 on this system.

R80.30 kernel 3.10 more then 40 cores -> UMFW is enabled    (checked on HP DL 380 G10 2 * Platinum 8180MProcessor 28 cores = 56 cores)
R80.30 kernel 3.10 less then 40 cores   -> UMFW is disabled    (checked on HP DL 380 G10 1 * Platinum 8180MProcessor 28 cores)

Unfortunately I was not allowed to take the server with 56 cores home with me 🤣.

The installation under R80.30 (UMFW/KMFW) depends on how many cores the system has.
The licensed cores do not play a role for UMFW/KMFW.

R80.30 kernel 2.6                                         -> UMFW is disabled                                                (checked on VMWare with 30 cores and with 46 cores)

Now we have generated traffic on a FW in the UMFW with a traffic generator. Approx. 500 MBit throughput (100 connections) and see there, the process fwk0_dev_0 generates 321% CPU utilization. I see this as problematic, because some cores with 80% CPU load were seen during the tests.

I think the R&D should say something about this topic if it is a problem or not ...so if you could get a straight answer from TAC on this it would be appreciated too...

Tags (1)
Highlighted
Ruby

Tags (1)
Highlighted
Gold

Re: High CPU utilization during process fwk0_dev_0

I agree with @HeikoAnkenbrand . These high CPU utilization could be a problem.

We had around 500 - 700Mbit Throughput on a 8 core machine, all workers are everytime utilized around 40-70%.

If we disable all blades ( ThreatPrevention, APCL, AV, AB etc.) except firewall, changes are only to 35-65%.
Same system with R77.30 and USFW off was on 10-20% CPU utilization.

I‘m really awaiting an answer from TAC.

Wolfgang

Highlighted
Iron

Re: High CPU utilization during process fwk0_dev_0

Same problem:

-HP DL 360 G10

- R80.30 kernel 3.10

- 8 core FW

- 600MBit throughput

- ThreatPrevention, IA, AV, AB, IPS

- USFW enabled

> process fwk0_dev_0 with high CPU  utilization 300%-400%

I‘m really awaiting also an answer from TAC:-)

Highlighted
Ruby

Re: High CPU utilization during process fwk0_dev_0

Right, I don't get how USFW was enabled on your 8-core firewall unless you manually enabled it yourself.  Edit: Are you only licensed for 8 cores but there are more than 40 cores on the system?  The thing is that there WILL be a performance penalty when USFW is enabled due to processing having to come up through the kernel to a fwk process then back down into the kernel, whereas with USFW disabled almost everything except security server process space "trips" are handled down in the kernel which is more efficient.  So unless there are more than 40 cores I don't understand why USFW would get enabled.   If there are more than 40 cores, USFW makes sense as utilizing the extra cores beyond 40 would offset the performance penalty vs. being limited to 40 cores in the kernel with USFW disabled.

Obviously we are waiting for TAC here, but once again in my opinion I don't think the high CPU utilization by fwk0_dev_0 is necessarily a problem.  That process is clearly multi-threaded which explains CPU utilization over 100%.  I've speculated earlier that when USFW is enabled this process may be the liaison between all the fwk Firewall Worker processes, and the state tables which are still stored in the kernel.  When USFW is disabled, everything is down in the kernel and it all just gets lumped in under si or sy CPU cycles and you can't see the individual kernel elements consuming CPU.

When USFW is enabled everything except state table storage and SecureXL is mostly outside the kernel and visible as individual processes, so seeing high CPU utilization by a process may look alarming but I don't think it is an actual problem.  I don't believe the high CPU being consumed by fwk0_dev_0 is a bottleneck, it is just a side effect of fwk process to kernel interaction.  If throughput does seem to be heavily impacted with USFW enabled, there may need to be some usual tuning performed based on the "Super Seven" and such.

Or I could be wrong...

Book "Max Power 2020: Check Point Firewall Performance Optimization" Third Edition
Now Available at www.maxpowerfirewalls.com
Highlighted
Ruby

Re: High CPU utilization during process fwk0_dev_0

I agree with @Timothy_Hall  here. UMFW should only be enabled automatically if more than 40 cores were active during installation on a R80.30 3.10 kernel.

But maybe your system has more then 40 cores on board.

For a firewall with only 8 active cores (according to license), I would recommend to change the firewall to "Kernel Mode Firewall" otherwise this will produce a performance issue.

Tags (1)
Highlighted
Ruby

Re: High CPU utilization during process fwk0_dev_0

Small note to enable and disable the UMFW!

Switch to Kernel Mode Firewall, do the following:

1) Run the following clish commands:
# cpprod_util FwSetUsFwmachine 0
# cpprod_util FwSetUsermode 0
2) Edit the boot.conf file (vi $FWDIR/boot/boot.conf) with the following: KERN_INSTANCE_NUM 40 3) Reboot. Switch to User Mode Firewall, do the following: 1) Run the following clish commands: # cpprod_util FwSetUsFwmachine 1 # cpprod_util FwSetUsermode 1 2) Edit the boot.conf file (vi$FWDIR/boot/boot.conf) with the following:
KERN_INSTANCE_NUM 62
3) Reboot.

Tags (1)
Highlighted
Ruby

Re: High CPU utilization during process fwk0_dev_0

Quoting @HeikoAnkenbrand here:

> For a firewall with only 8 active cores (according to license), I would recommend to change the firewall to "Kernel Mode Firewall" otherwise this will produce a performance issue.

I'd be careful with that, generally I don't recommend changing whatever the default state of USFW is on your firewall without consulting TAC.  If it is justified to disable USFW because it got mistakenly enabled on an 8-core firewall that is fine, but TAC needs to be involved so they can see how it ended up in that state incorrectly and fix it for future customers.  Same thing if USFW doesn't seem to be enabled when it should be, work with TAC first to make sure you won't do more harm than good by enabling it.

Book "Max Power 2020: Check Point Firewall Performance Optimization" Third Edition
Now Available at www.maxpowerfirewalls.com
Highlighted
Ruby

Re: High CPU utilization during process fwk0_dev_0

Hi @PhoneBoy@Val_Loukine

Otherwise, I'll open a ticket for tis topic!

Tags (1)
Highlighted
Gold

Re: High CPU utilization during process fwk0_dev_0

I had a ticket open since Monday and I did an update with our findings from here yesterday. Today I pushed the escalation button, but no answer from TAC right now.

Wolfgang

Highlighted

Re: High CPU utilization during process fwk0_dev_0

@HeikoAnkenbrand I do not quite understand what kind of response you expect. UMFW is not supposed to run with less than 40 cores. End of story.

Highlighted
Ruby

Re: High CPU utilization during process fwk0_dev_0

@Val_Loukine @PhoneBoy @Moti @Dorit_Dor

We have many customers who use systems with more than 40 cores. If we generate 300-500% for the mentioned process here at firewalls, we only have 35 cores left. If that's not a problem, I'll give this information to all our customers and write "end of stroy":-)

Very nice solution >>> End of story <<<

Thanks

---

 The original problem

- Customer installed a firewall on a open server with more than 40 cores. This makes the UMFW active during the installation.
- Now he installed the license with 8 cores and use only 8 cores.
- The problem now is, he has a firewall in UMFW (USFM) mode with 8 cores.
- In this situation the process utilization of the process fwk0_dev_0 is 300-500%.

This is a beautiful bug in the installation script for me:-)

When I looked at the customer firewall, I wondered why there is a process with 300-500% CPU usage. Thereupon I have here in the forum asked, what the problem can be? Now @Timothy_Hall answered (thanks to Timothy) and I noticed that the firewall works in User Mode Firewall.Upssssssss!!!

So we had a shredded system, which according to your statement (@Val_Loukine) has no support or is not supported! (Commented and stroke out by VAL: Sorry Heiko, I did not say that)
(Inserted after @Val_Loukine  changes in my text: I actually want to solve the technical problem and not discuss formulations in the forum. To make it clear from my point of view, I was referring to the formulation of VAL: >>>"@HeikoAnkenbrand I do not quite understand what kind of response you expect. UMFW is not supposed to run with less than 40 cores. End of story."<<< Sorry, I accidentally read "not supposed" as "not supported." in VAL's comment. So I've caused some confusion here.)

Unfortunately I did not find this statement in the readme, in the documentation or in a sk of R80.30. Hmmmm!!!

 Solution

Since I didn't get any information from Check Point here in the forum, the customer now has set the firewall to the correct "Kernel Mode FW" in a maintenance window with the following steps:

1) Run the following clish commands:
# cpprod_util FwSetUsFwmachine 0
# cpprod_util FwSetUsermode 0
2) Edit the boot.conf file (vi \$FWDIR/boot/boot.conf) with the following:
KERN_INSTANCE_NUM 40
3) Reboot.

We have composed these commands on the inverted parameters from sk149973.

 But the exciting question is still this

1) Why is the firewall not changed to a Kernel Mode Firewall when a 8 core license is installed. This must be intercepted by the installation script. At least there should be a warning here.

2) Is it possible to use the firewall as UMFW in this situation or is it better to switch the mode to KMFW?

3) If the firewall now works in the wrong mode UMFM "according to your statement unsupported". What should we do at our customers?

4) If we keep running it in the wrong mode! Is that a problem with the prosess fwk0_dev_0.

PS:

- My mistake I should have opened a TAC ticket immediately.

Tags (1)
Highlighted

Re: High CPU utilization during process fwk0_dev_0

@HeikoAnkenbrand Heiko, you state something I did not say.

Please make sure you are either using a correct statement from another comment or a direct quote (doing it for you):

- UMFW is not supposed to run with less than 40 cores

In other words, the system was misconfigured. There is no "not supported" statement in the sentence. BTW, I still do not see any support case here, other than the fact, you are supposed to configure UMFW according to the total amount of licensed cores on you security GW.

Highlighted
Ruby

Re: High CPU utilization during process fwk0_dev_0

@Val_Loukine  sorry, I accidentally read "not supposed" as "not supported." in VAL's comment. So I've caused some confusion here.

Sorry guys! I think I have to bring the beer again.

Highlighted


text:
Course

Home

Syllabus

Lecture Topics

Homework

Policies

Problem of the Month

Math Club (QED)

Putnam Competition (Dr. Wise)

Math Department Tutor List

## Homework

 Assignment Assigned Due Problems HW1 9/6/18 9/12/18 Read Sections 1.1-1.3. 1. Show that the coimage of a function is a partition of the domain of the function. 2. Do Exercise 1.2.13. 3. Do Exercise 1.3.2. HW2 9/13/18 9/19/18 1. Do Exercise 1.3.3. 2. Do Exercise 1.3.6. (a), (b), (c). 3. Do Exercise 1.3.9. HW3 9/20/18 9/26/18 Read Sections 1.4-1.5. 1. Does the non-Archimedean field $\mathbb R(t)$ satisfy the Nested Interval Property? Explain. 2. Show that if $S\subseteq [0,1]$ is uncountable, then there is a real number $r\in[0,1]$ such that both $[0,r]\cap S$ and $[r,1]\cap S$ are uncountable. 3. Do Exercise 1.5.8. HW4 9/27/18 10/3/18 Read Sections 2.1-2.4. 1. Do Exercise 2.2.4. 2. Do Exercise 2.3.7 (a), (b), (c). 3. Do Exercise 2.4.4(a). 10/7/18 Read Sections 2.5-2.7. Please read and think about the following exercises. (No need to write up the solutions.) Exercises 2.4.2, 2.5.1, 2.5.2, 2.5.5, 2.5.8, 2.6.2, 2.6.3(a), 2.7.4. HW5 10/18/18 10/24/18 Read Sections 2.8, 3.1-3.2. 1. Do Exercise 2.7.14(a). 2. (a) Let $\theta$ be an arbitrary angle. Show that the partial sums of $\sum_{k=1}^{\infty} \sin(k\theta)$ are bounded. Hint: You may want to first prove and use the equality $$2\sin(k\theta)\sin(\theta/2)=\cos((k-1/2)\theta)-\cos((k+1/2)\theta).$$ (b) Show that $\sum_{k=1}^{\infty} \sin(k\theta)/k$ converges. 3. Do Exercise 3.2.3. HW6 10/14/18 10/31/18 Read Sections 2.8, 3.3-3.4. 1. Do Exercise 3.3.4. 2. Do Exercise 3.3.6. 3. For each part below, give an example of a subset $A\subseteq \mathbb R$ or $A\subseteq \mathbb R^2$ such that (a) $A$ is connected, but $A^{\circ}$ and $\partial A$ are not connected. (b) $A$ is not connected, but $A^{\circ}$ and $\partial A$ are connected. HW7 11/2/18 11/7/18 Read Sections 4.1-4.4. Read Exercises 4.3.11, 4.3.13, 4.4.11. 1. Do Exercise 4.3.6(a)(b)(c). 2. Show that a nonempty subset $C\subseteq \mathbb R$ is closed iff there is a continuous function $g:\mathbb R\to \mathbb R$ such that $C = g^{-1}(0)$. (Hint for the proof of $\Leftarrow$: explain why the inverse image of a closed set is closed. Hint for the proof of $\Rightarrow$: you may cite parts of Exercise 4.3.12 if needed.) 3. A function $f:\mathbb R\to \mathbb R$ is periodic if there is a number $p$ such that $f(x+p) = f(x)$ for every $x$. (For example, $\sin(x)$ is periodic with $p=2\pi$, since $\sin(x+2\pi)=\sin(x)$.) Prove that a continuous periodic function is uniformly continuous. HW8 11/7/18 11/14/18 Read Sections 4.5, 5.1, 5.2. Read Exercise 4.5.2(d). 1. Do Exercise 4.5.3. 2. Do Exercise 4.5.4. 3. Do Exercise 4.5.7. HW9 11/15/18 11/28/18 Read Sections 5.3, 5.4, 5.5. Read Exercise 5.3.7. 1. Do Exercise 5.2.2. 2. Do Exercise 5.2.9. 3. Do Exercise 5.3.2. HW10 Last one! 11/28/18 12/5/18 Read Sections 6.1-6.4. Read Exercise 6.5.3. 1. Do Exercise 6.3.1. 2. Do Exercise 6.4.7(a). 3. Do Exercise 7.2.1.

format: plain


text:
New Titles  |  FAQ  |  Keep Informed  |  Review Cart  |  Contact Us Quick Search (Advanced Search ) Browse by Subject General Interest Logic & Foundations Number Theory Algebra & Algebraic Geometry Discrete Math & Combinatorics Analysis Differential Equations Geometry & Topology Probability & Statistics Applications Mathematical Physics Math Education

Ramanujan: Twelve Lectures on Subjects Suggested by His Life and Work
 SEARCH THIS BOOK:
AMS Chelsea Publishing
1991; 254 pp; hardcover
Volume: 136
Reprint/Revision History:
first AMS printing 1999; reprinted 2002
ISBN-10: 0-8218-2023-0
ISBN-13: 978-0-8218-2023-0
List Price: US$39 Member Price: US$35.10
Order Code: CHEL/136.H

Ramanujan occupies a unique place in analytic number theory. His formulas, identities, and calculations are still amazing three-quarters of a century after his death. Many of his discoveries seem to have appeared as if from the ether. His mentor and primary collaborator was the famous G. H. Hardy. Here, Hardy collects twelve of his own lectures on topics stemming from Ramanujan's life and work. The topics include partitions, hypergeometric series, Ramanujan's $$\tau$$-function and round numbers.

Hardy was the first to recognize the brilliance of Ramanujan's ideas. As one of the great mathematicians of the time, it is fascinating to read Hardy's accounts of their importance and influence. The book concludes with a chapter by chapter overview written by Bruce C. Berndt. In this overview, Berndt gives references to current literature, developments since Hardy's original lectures, and background information on Ramanujan's research, including his unpublished papers.

Graduate students and research mathematicians interested in number theory.

Reviews

"From the fact that practically all topics of analytic number theory are mentioned, briefly or extensively, in this book in connection with one or the other of Ramanujan's ideas, theorems, conjectures, we realize the far-reaching influence which his work has had on present-day mathematics ... the book is not only an homage to Ramanujan's genius; it is a survey of many branches of modern arithmetic and analysis and, altogether, a book which makes fascinating reading."

• The Indian mathematician Ramanujan
• Ramanujan and the theory of prime numbers
• Round numbers
• Some more problems of the analytic theory of numbers
• A lattice-point problem
• Ramanujan's work on partitions
• Hypergeometric series
• Asymptotic theory of partitions
• The representation of numbers as sums of squares
• Ramanujan's function $$\tau(n)$$
• Definite integrals
• Elliptic and modular functions
• Bibliography


text:
Fermion-Fermion interaction in constructive quantum field theory.
Read Online
Share

# Fermion-Fermion interaction in constructive quantum field theory.

• 528 Want to read
• ·
• 38 Currently reading

Published .
Written in English

### Subjects:

• Fermions,
• Hamiltonian operator,
• Quantum field theory,
• Scattering (Physics),
• Physics Theses

## Book details:

Edition Notes

The Physical Object ID Numbers Contributions Prugovecki, E. (supervisor), Pugh, R. E. (supervisor) Pagination 204 p. Number of Pages 204 Open Library OL18699652M

### Download Fermion-Fermion interaction in constructive quantum field theory.

PDF EPUB FB2 MOBI RTF

In particle physics, Fermi's interaction (also the Fermi theory of beta decay or the Fermi four-fermion interaction) is an explanation of the beta decay, proposed by Enrico Fermi in The theory posits four fermions directly interacting with one another (at one vertex of the associated Feynman diagram).This interaction explains beta decay of a neutron by direct coupling of a neutron with. To see that, integrate out the scalar field. Then you have a theory with a four-fermions interaction. This interaction by itself will generate all possible interaction terms (with arbitrary number of fermionic fields and derivative terms). The same thing arises in the case of a $\phi^4$ theory. There are three different kinds of spin-1/2 particles: Dirac, Majorana, and Weyl. The first, Dirac fermions, have non-zero mass, and are represented as four component complex spinors. This is the mathematical description of fermions which emerges. Constructive quantum field theory has moved rapidly in the past few years. A continuation of this progress clearly requires the introduction of new formal ideas, methods and/or points of view.

Quantum Field Theory II Christof Wetterich Ap This is a ﬂrst draft of the script to Prof. Wetterich’s QFT II lec-ture at the university of Heidelberg in the summer semester Our theory will have no scalar-scalar or fermion-fermion interaction, only 2 fermion -.   The Dirac Lagrangian for a massless fermion f has two symmetries each of U(1) type: "vector" and "axial" (or "chiral"). For the vector symmetry, there is an associated conserved current with gamma^{m} inbetween f-bar and f, with spacetime index m; and for the axial, there is instead a gamma^{m}*gamma^{5} inbetween. Relativistic eﬀect of entanglement in fermion-fermion scattering Jinbo Fan∗1 and Xinfei Li †1 has been receiving many interests within the more fundamental framework of quantum ﬁeld theory studied. At weak coupling, we can assume the unitarity of local interaction terms to be guaranteed at lower orders of perturbation [6]. The. Fermi interaction (particle physics) The direct interaction between four Dirac fields at a single point in space-time, postulated in conventional theories of the weak interactions.

Describing systems of interacting fermions by boson models: Mapping in arbitrary dimension and applications Article in Physical review. B, Condensed matter 82(23) January with 16 Reads. Peskin Schroeder. - Quantum field код для вставки.   Ok my understanding of the Fermion, Boson difference is this: Identical Particles carry a representation of the permutation group. Since we have not found any para statistics, this representation must be one dimensional. And there are only two one dimensional irreducible representations of.   Starting with a pair of integrodifferential Bethe-Salpeter equations for two fermions interacting mutually and with an external static potential, we obtain a pair of compatible and separable coupled Dirac equations, between which the unwanted relative time variable can be easily eliminated. We use two different adaptations of the method proposed by Sazdjian for the two-particle (without Cited by: 8.


text:
Kattis

# Even Up Solitaire

The Even Up Solitaire can be played with a stack of cards each having a numerical value from 1 to 100. The cards are laid out from left to right in a row. At every step, the player is allowed to remove two adjacent cards if the sum of their values is even. The gap is then “closed” by shifting the cards to the right of the gap. The order of the remaining cards is not changed. The game stops when all cards are removed or when no more cards can be removed. The player wins when all cards are removed. If this is not possible, the player should try to minimize the number of cards remaining.

You are given the initial list of cards, in left-to-right order. Determine the minimum number of cards that remain if the player moves optimally.

## Input

The input consists of one case. The first line contains an integer $n$ ($1 \leq n \leq 100000$) giving the number of cards to follow. The second line contains $n$ integers indicating the card values from left to right. Each card value is in the range 1 to 100.

## Output

Print the minimum number of cards that remain if the player moves optimally.

Sample Input 1 Sample Output 1
10
1 2 3 4 5 6 7 8 9 10

10

Sample Input 2 Sample Output 2
10
1 3 3 4 2 4 1 3 7 1

2


text:
# XBeta Wiki News

### xbeta

Edit this sidebar

## Linode

March 29, 2009

Since last December, xbeta has been served by a Debian Linux VPS hosted by Linode. The specs of the new server, particularly the network throughput and CPU allocation are much better than before. Additionally, there have been efficiency improvements in Instiki itself. All of this seems to have improved the performance of the wiki significantly. This is not to say that the site was slow before, only that now it should be even faster. —Jason Blevins

## New Logo, New Server, New Database

February 27, 2008

Thanks to the textext extension for Inkscape and Sam Ruby’s svgtidy, the site now has a pure SVG logo, weighing in at 517 bytes, and a favicon.

The site is now running on virtual private server hosted by A2 hosting with a fresh, streamlined installation of Ubuntu. It’s still being served by Mongrel and proxied through Apache but I’ve migrated from MySQL to SQLite just to keep things simple. —Jason Blevins

January 9, 2008

I have upgraded to the latest versions of Instiki and itexToMML (version 1.3.3). Recent revisions of Instiki are now based on Rails 2.0.2. —Jason Blevins

## LaTeX and PDF export

October 4, 2007

TeX export (via the TeX link below) has been greatly improved. The template now includes macros for just about every itex command that is not a standard (AMS)LaTeX command. In almost all cases, the generated tex file should compile as-is, as long as the AMS math packages and the txfonts package are available. These packages are widely available and are included in the standard LaTeX distributions, teTeX and TeX Live.

I have also enabled PDF export (via the PDF link below). The PDF file is simply generated on the fly by pdflatex from the exported TeX file. There are still a few minor cosmetic issues, but this is a good option for printing. —Jason Blevins

March 19, 2007

In order to establish clear licensing rules for contributed content, the content of the xbeta wiki has been released under the GNU Free Documentation License. Authors may retain their copyrights on contributed content, but by submitting new content to the wiki, also agree to release it under this license. This is the same license used by Wikipedia and allows reuse, redistribution, and even publication and resale of all content under very mild restrictions. See Copyrights for details. —Jason Blevins

## Mongrel Acceleration

March 1, 2007

xbeta is now running with Mongrel acceleration. Mongrel is a fast HTTP library and server for Ruby web applications. Pages should load significantly faster than with the previous, unaccelerated CGI dispatcher. —Jason Blevins

## xbeta Comes Alive

February 20, 2007

I registered the domain xbeta.org almost a year ago with the intention of creating an Econometrics-oriented website. I had in mind a site with information about using high performance programming languages in Econometrics and related code and packages. Instead, through a series of fortunate events, xbeta.org is now the home of the xbeta wiki.

I was recently introduced to Ruby and Rails and I had considered attempting to add some kind of LaTeX or MathML functionality to Ruse, another Ruby on Rails wiki. Luckily, the very same day I stumbled upon Jacques Distler’s MathML-enabled branch of Instiki. It was exactly what I was looking for and a perfect fit for the site. Setup is minimal. The site was up and running in about ten minutes. —Jason Blevins

category: xbeta


text:
# Proving a metric is continuous

1. Sep 26, 2010

1. The problem statement, all variables and given/known data

So, given a metric d : X x X --> R, prove that d is continuous.

3. The attempt at a solution

Let (x, y) be a point in X x X, V = <a, b> a neighborhood of d(x, y). One needs to find a neighborhood of U of (x, y) such that d(U) is contained in V. U is of the form U1 x U2, where U1 is a neighborhood of x, and U2 a neighborhood of y. I claim that every union U of two open balls B1(x, r1) and B2(y, r2), where 2(r1 + r2) = b - a, must satisfy d(U) $$\subseteq$$ <a, b>.

The diameter of B1 is 2r1, and the diameter of B2 is 2r2. The diameter of their union is b = a + 2r1 + 2r2, where a is the distance between B1 and B2.

Does this work?


text:
# Error saying attempting to reference a deleted function while using a vector list

I’m making a 2d top down shooter game and I was working on shooting bullets. Im using a vector for the bullet in my player class: std::vector b; And I have coded a shoot function which shoots the bullet and deletes it if it is out of the screen:

void Player::shoot(float timer)
{
//Getting Key Press
if (Keyboard::isKeyPressed(Keyboard::Space))
{
space = true;
}
else
{
space = false;
}

Bullet b1;
b.push_back(Bullet(b1));

if (space)
{
for (int i = 0; i < b.size(); i++)
{
b[i].setPos(pos);
}

}
else
{
for (int i = 0; i < b.size(); i++)
{
b[i].update(true);
if (b[i].getPos().y < 0.0f)
{
b.erase(b.begin() + i);
i--;
}
}
}
}

But I have encountered an error: Error C2280 'Bullet &Bullet::operator =(const Bullet &)': attempting to reference a deleted function

I don’t understand why this is happening can someone explain? Here is the bullet class Header:

#pragma once
#include <SFML/Graphics.hpp>

using namespace sf;

class Bullet
{
private:
Texture t;
Sprite bullet;
Vector2f pos;
public:
Bullet();
~Bullet();
void setPos(Vector2f pos);
void move(bool up);
Sprite getSprite();
Vector2f getPos();
};

Cpp file: #include "stdafx.h" #include "Bullet.h"

Bullet::Bullet()
{
//Setting Texture
bullet.setTexture(t);

}

Bullet::~Bullet()
{
}

void Bullet::setPos(Vector2f pos)
{

//Setting Position
this->pos = pos;
bullet.setPosition(this->pos);
}

void Bullet::move(bool up)
{
if (up)
{
bullet.move(0.0f, -10.0f);
}
else
{
//TODO
}
}

Sprite Bullet::getSprite()
{
return bullet;
}

Vector2f Bullet::getPos()
{
return pos;
}

• As a side question, is this your actual code, or did you assemble the relevant pieces of it to create a good question? – Vaillancourt Sep 27 '18 at 18:33
• @AlexandreVaillancourt Thanks for the help. I'll try and see if this works. And Yes I have only assembled the relevant pieces of my code. – Arsh Panesar Sep 28 '18 at 14:07
• How do I iterate through a vector of pointers? I want to access a function from the bullet class but I don't know how to do it. – Arsh Panesar Sep 28 '18 at 15:24
• Here is the loop: – Arsh Panesar Sep 28 '18 at 15:24
• for (auto it = b.begin(); it != b.end(); it++) { //How to call a function here } – Arsh Panesar Sep 28 '18 at 15:25

I'm going out of my usual path here with the more 'technical' c++ rules, so if there are anything wrong here, please point it out. Also, this is only based on what I understand from the provided code, the code from SFML and from knowledge available on the internet.

# Why do you get this error?

According to a popular site,

Deleted implicitly-declared copy assignment operator

A defaulted copy assignment operator for class T is defined as deleted if any of the following is true:

• T has a non-static data member of non-class type (or array thereof) that is const;

• ...

• T has a non-static data member or a direct or virtual base class that cannot be copy-assigned (overload resolution for the copy assignment fails, or selects a deleted or inaccessible function);

(Emphasis mine.)

Looking at your Bullet, it does not appear like there are any issues there, but we have to look at what it's using.

Apparently, the Sprite class that you're using is having a const Texture* which prevents it from being implicitly copy-assigned (i.e. the first bullet point).

The error you get is from the last bullet point in that quote: your Bullet class has not received an automatically copy-assignment operator because some of the classes that it uses has not received one.

C++ is great!! Although it's the greatest tool to shoot yourself in the foot, it's getting more and more 'new user friendly'!

It's preventing you from doing something you might not be aware you're doing.

# How do you fix this error?

I presume b is declared like this:

std::vector<Bullet> b;

I don't think you really intend to copy your object around.

Instead, use a vector of pointers to bullets:

std::vector<std::unique_ptr<Bullet>> b;

This way, the vector will most likely move the references instead of copying them.

Now you're having other issues with this code.

for (int i = 0; i < b.size(); i++)
{
b[i].update(true);
if (b[i].getPos().y < 0.0f)
{
b.erase(b.begin() + i);
i--;
}
}

Every time you modify a vector when you iterate over it like, [insert you favourite god(s) vs kitten quote here]. It not only makes the code hard to read, it opens up the door to shooting you in the foot.

Alternative ways are to use a while and an iterator, or better, use the remove_if function (see this answer on SO).

T of std::vector<T> must be move-assignable to call erase().

That means T needs to have either a move assignment operator or a copy assignment operator defined. Your Bullet class has neither, and thus cannot be move-assigned as needed by the vector implementation, and thus you get this error.

You should define a copy assignment (or move assignment, but I'd suggest you start with copy assignment) operator in Bullet to fix this.


text:
# What is the fastest way to read the new lines in the dynamically updatable file?

I'm writing a log to a simple .txt file and want to read the last few records using Mathematica. But there are some problems.

f = OpenRead["logs.txt"];

Skip[f, ConstantArray[Number, 2], 1];

{3, 4}

Read[f, ConstantArray[Number, 2]]

EndOfFile

Of course, I can closing file every time, open again, to do Skip and read updated data. But this is very slow for the large log file.

It should be noted that all lines in my log are aligned to have the specific size. In this example they have size 7 bytes. So I can check the number of records:

FileByteCount["logs.txt"]/7

4

SetStreamPosition is fast. But first run is slower than consequent. For example, on the real data:

f = OpenRead["all_trades.txt"];

(* first run *)
SetStreamPosition[f, 0];
SetStreamPosition[f, 3899999]; // AbsoluteTiming
(* {0.02188, Null} *)

(* second run *)
SetStreamPosition[f, 0];
SetStreamPosition[f, 3899999]; // AbsoluteTiming
{0.000301056, Null}

SetStreamPosition[f, 0];
Skip[f, ConstantArray[Number, 10], 100000]; // AbsoluteTiming
(* {0.162914, Null} *)

StreamPosition[f]
(* 3899999 *)

Close[f];

But this does not work with updatable data!

f = OpenRead["logs.txt"];

(* {1, 2} *)

StreamPosition[f]
(* 5 *)

SetStreamPosition[f, 6];
(* {3, 4} *)

StreamPosition[f]
(* 11 *)

SetStreamPosition[f, 12];
(* EndOfFile *)

It looks like a bug. Is not it?

There are no problems in Python.

f = open('logs.txt', 'r')

f.seek(14)

'05'

• I don't think C or C++ streams dynamically update to accommodate live-action file changes (not an answer, and of questionable relevancy, but perhaps worth noting) – ktm Sep 7 '18 at 21:09
• The file's initial data is likely sent to some sort of buffer as soon as the stream is opened. The buffer won't dynamically update, as the data's already been sent. I would be surprised if this were considered a bug, but who knows. – ktm Sep 7 '18 at 21:14
• @user6014 You're right - this is not a bug. See my answer. – Alexey Golyshev Sep 26 '18 at 8:23

This might be OS-dependent, but I would assume that:

oldPos = StreamPosition[f];
Close[f];
SetStreamPosition[f, p];

should be faster than Skip, since it just moves the low-level file pointer.

• Good (+1). But it does not work. Please see the updated question. – Alexey Golyshev Sep 6 '18 at 17:34
• Hm, it looks as if you're using SetStreamPosition wrong. Generally, with text files you should assume that only positions returned by StreamPosition are valid. For example, if the file is unicode-encoded, you might seek to a position "in the middle" of a character, and you will only read garbage from then on. I'm not sure why it isn't working, though. If you close the file, re-open it and seek to the previous position, you should see the new data? – Niki Estner Sep 6 '18 at 18:33
• Yes, I see the new data when close and re-open the file. First run of SetStreamPosition is 7x faster than Skip. But second run of SetStreamPosition is yet more faster than the first (73x relative to the first run or 543x relative to Skip). When I close file, first run of SetStreamPosition will be again slower that the second, even in the same kernel session. Also there are small overheads on closing and re-opening the file. The ideal solution would be to avoid closing the file as in Python. – Alexey Golyshev Sep 7 '18 at 6:29
• Can you reproduce EndOfFile error with my example? I am thinking whether should I report this case to the developers. – Alexey Golyshev Sep 7 '18 at 6:29
• And yes, I can read file in Python directly from Mathematica using ExternalEvaluate ;-) – Alexey Golyshev Sep 7 '18 at 6:44

The input stream is "buffered" by C, which is to say the file's data is read into memory when the stream is opened. Then all "read" operations work on the buffered data in memory, so if the file changes in the meantime, those changes are not reflected. This is a lot faster than constantly checking the file on disk.

You could remember the current stream position (using StreamPosition), Close the file, re-open the file again (using OpenRead), and then move back to the saved stream position (using SetStreamPosition). Closing and re-opening would get rid of the in-memory buffer.

This is, of course, not dynamic and unfortunately, there is not a documented or supported method of doing this.

However, OpenRead with the option AppendCheck->True may be able to fill the purpose. The option will reset the end of file marker in most cases allowing new information from the file to be read. This option is not documented or supported, so please consider this when using it at your discretion as we would not be able to provide further information on it.

Benchmarking

f = OpenRead["all_trades.txt", AppendCheck -> True];

AbsoluteTiming[
SetStreamPosition[f, 0];
Skip[f, ConstantArray[Number, 10], 163658];
]

{0.246617, Null}

StreamPosition[f]

6382661

AbsoluteTiming[
SetStreamPosition[f, 0];
SetStreamPosition[f, 6382661];
]

{0.00020363, Null}

Add a new line to the file and save.

Read[f, ConstantArray[Number, 10]]; // AbsoluteTiming

{0.0000380343, Null}

So OpenRead[..., AppendCheck -> True] is the fastest way.


text:
# Thread: Linear Algebra Question - Linear Operators

1. ## Linear Algebra Question - Linear Operators

Let u and v be vectors in $\displaystyle \Re^n$ and let T be a linear operator on $\displaystyle \Re^n$. Prove that T(n).T(v) = n.v if and ony if $\displaystyle A^t = A^{-1}$ where A is the standard matrix for T

2. Originally Posted by r2dee6
Let u and v be vectors in $\displaystyle \Re^n$ and let T be a linear operator on $\displaystyle \Re^n$. Prove that T(n).T(v) = n.v if and ony if $\displaystyle A^t = A^{-1}$ where A is the standard matrix for T
That is called an orthogonal operator. (i.e. a linear transformation -over the scalar field $\displaystyle \mathbb{R}$- $\displaystyle T:V \to V$ - V a vector space- such that $\displaystyle \left\langle {T\left( \bold{v} \right),T\left( \bold{u} \right)} \right\rangle = \left\langle {\bold{v},\bold{u}} \right\rangle$ , $\displaystyle \forall\bold{u},\bold{v} \in V$ )

All this would be much shorter if you knew what the traspose of a Linear Transformation is, and its properties.

The proof would go as follows. Let $\displaystyle B = \left\{ {\bold{v}_1 ,...,\bold{v}_n } \right\}$ be the standard basis for $\displaystyle \mathbb{R}^n$ (i.e. $\displaystyle \bold{v}_1 = \left( {1,0,0...,0} \right);\bold{v}_2 = \left( {0,1,0...,0} \right)...$ ). This is an orthonormal basis, so $\displaystyle \bold{v} = \sum\limits_{k = 1}^n {\left\langle {\bold{v},\bold{v}_k } \right\rangle \cdot \bold{v}_k }$ for each $\displaystyle \bold{v} \in \mathbb{R}^n$ (1)

Let us compute $\displaystyle \left[ T \right]_B$. By (1) we have: $\displaystyle \left[ T \right]_B = \left( {\begin{array}{*{20}c} {\left\langle {T(\bold{v}_1) ,\bold{v}_1 } \right\rangle } & \cdots & {\left\langle {T(\bold{v}_n) ,\bold{v}_1 } \right\rangle } \\ \vdots & \ddots & \vdots \\ {\left\langle {T(\bold{v}_1) ,\bold{v}_n } \right\rangle } & \cdots & {\left\langle {T(\bold{v}_n) ,\bold{v}_n } \right\rangle } \\ \end{array} } \right)$ thus: $\displaystyle \left( {\left[ T \right]_B } \right)^t = \left( {\begin{array}{*{20}c} {\left\langle {T(\bold{v}_1) ,\bold{v}_1 } \right\rangle } & \cdots & {\left\langle {T(\bold{v}_1) ,\bold{v}_n } \right\rangle } \\ \vdots & \ddots & \vdots \\ {\left\langle {T(\bold{v}_n) ,\bold{v}_1 } \right\rangle } & \cdots & {\left\langle {T(\bold{v}_n) ,\bold{v}_n } \right\rangle } \\ \end{array} } \right)$

We will prove that $\displaystyle \left\langle {T\left( \bold{v} \right),T\left( \bold{u} \right)} \right\rangle = \left\langle {\bold{v},\bold{u}} \right\rangle$ holds if and only if $\displaystyle \left( {\left[ T \right]_B } \right)^{ - 1} = \left( {\left[ T \right]_B } \right)^t$

Direct: $\displaystyle \left\langle {T\left( \bold{v} \right),T\left( \bold{u} \right)} \right\rangle = \left\langle {\bold{v},\bold{u}} \right\rangle ; \forall\bold{u},\bold{v} \in \mathbb{R}^n \Rightarrow \left( {\left[ T \right]_B } \right)^{ - 1} = \left( {\left[ T \right]_B } \right)^t$

Now: $\displaystyle \left[ {\left( {\left[ T \right]_B } \right) \cdot \left( {\left[ T \right]_B } \right)^t } \right]_{i,j} = \sum\limits_{k = 1}^n {\left\langle {T\left( {v_k } \right),v_i } \right\rangle \cdot \left\langle {T\left( {v_k } \right),v_j } \right\rangle }$

We have: $\displaystyle \sum\limits_{k = 1}^n {\left\langle {T\left( {v_k } \right),v_i } \right\rangle \cdot \left\langle {T\left( {v_k } \right),v_j } \right\rangle } = \sum\limits_{k = 1}^n {\left\langle {v_i ,T\left( {v_k } \right)} \right\rangle \cdot \left\langle {v_j ,T\left( {v_k } \right)} \right\rangle }$

Since $\displaystyle \left\langle {T\left( v \right),T\left( u \right)} \right\rangle = \left\langle {u,v} \right\rangle$ you can check it maps an orthonormal basis into an orthonormal basis. Thus $\displaystyle \left\{ {T\left( {\bold{v}_1 } \right);...;T\left( {\bold{v}_n } \right)} \right\}$ is an orthonormal basis.

Now: $\displaystyle \bold{v}_i = \sum\limits_{k = 1}^n {\left\langle {\bold{v}_i ,T\left( {\bold{v}_k } \right)} \right\rangle \cdot T\left( {\bold{v}_k } \right)}$ and hence $\displaystyle \left\langle {\bold{v}_i ,\bold{v}_j } \right\rangle = \sum\limits_{k = 1}^n {\left\langle {\bold{v}_i ,T\left( {\bold{v}_k } \right)} \right\rangle \cdot \left\langle {\bold{v}_j ,T\left( {\bold{v}_k } \right)} \right\rangle }$

Thus it follows that: $\displaystyle \left[ {\left( {\left[ T \right]_B } \right) \cdot \left( {\left[ T \right]_B } \right)^t } \right]_{i,j} = \left\langle {v_i ,v_j } \right\rangle = \left\{ \begin{gathered} 1{\text{ if }}i = j \hfill \\ 0{\text{ otherwise}} \hfill \\ \end{gathered} \right.$ and therefore: $\displaystyle \left( {\left[ T \right]_B } \right) \cdot \left( {\left[ T \right]_B } \right)^t = {\text{Id}}_{{\text{n}} \times {\text{n}}}$ and the proof of the direct is complete

Converse: $\displaystyle \left( {\left[ T \right]_B } \right)^{ - 1} = \left( {\left[ T \right]_B } \right)^t \Rightarrow \left\langle {T\left( \bold{v} \right),T\left( \bold{u} \right)} \right\rangle = \left\langle {\bold{v},\bold{u}} \right\rangle ; \forall\bold{u},\bold{v} \in \mathbb{R}^n$

Step 1: Since $\displaystyle \left( {\left[ T \right]_B } \right)^{ - 1}$ then $\displaystyle T^{ - 1} :\mathbb{R}^n \to \mathbb{R}^n$ exists and $\displaystyle \left[ {T^{ - 1} } \right]_B = \left( {\left[ T \right]_B } \right)^t$

Step 2: $\displaystyle \left[ T^{-1}\right]_B = \left( {\begin{array}{*{20}c} {\left\langle {T^{-1}(\bold{v}_1) ,\bold{v}_1 } \right\rangle } & \cdots & {\left\langle {T^{-1}(\bold{v}_n) ,\bold{v}_1 } \right\rangle } \\ \vdots & \ddots & \vdots \\ {\left\langle {T^{-1}(\bold{v}_1) ,\bold{v}_n } \right\rangle } & \cdots & {\left\langle {T^{-1}(\bold{v}_n) ,\bold{v}_n } \right\rangle } \\ \end{array} } \right)$, by the symmetry of the inner-products over the filed of the real numbers : $\displaystyle \left[ T^{-1}\right]_B = \left( {\begin{array}{*{20}c} {\left\langle { \bold{v}_1 ,T^{-1}(\bold{v}_1)} \right\rangle } & \cdots & {\left\langle {\bold{v}_1 ,T^{-1}(\bold{v}_n) } \right\rangle } \\ \vdots & \ddots & \vdots \\ {\left\langle { \bold{v}_n, T^{-1}(\bold{v}_1)} \right\rangle } & \cdots & {\left\langle { \bold{v}_n, T^{-1}(\bold{v}_n)} \right\rangle } \\ \end{array} } \right)$ and step 1 implies $\displaystyle \left( {\begin{array}{*{20}c} {\left\langle { \bold{v}_1 ,T^{-1}(\bold{v}_1)} \right\rangle } & \cdots & {\left\langle {\bold{v}_1 ,T^{-1}(\bold{v}_n) } \right\rangle } \\ \vdots & \ddots & \vdots \\ {\left\langle { \bold{v}_n, T^{-1}(\bold{v}_1)} \right\rangle } & \cdots & {\left\langle { \bold{v}_n, T^{-1}(\bold{v}_n)} \right\rangle } \\ \end{array} } \right)$$\displaystyle = \left( {\begin{array}{*{20}c} {\left\langle {T(\bold{v}_1) ,\bold{v}_1 } \right\rangle } & \cdots & {\left\langle {T(\bold{v}_1) ,\bold{v}_n } \right\rangle } \\ \vdots & \ddots & \vdots \\ {\left\langle {T(\bold{v}_n) ,\bold{v}_1 } \right\rangle } & \cdots & {\left\langle {T(\bold{v}_n) ,\bold{v}_n } \right\rangle } \\ \end{array} } \right)$ hence: $\displaystyle \left\langle {T\left( {v_i } \right),v_j } \right\rangle = \left\langle {v_i ,T^{ - 1} \left( {v_j } \right)} \right\rangle$ for all $\displaystyle 1 \leqslant i,j \leqslant n$ (2)

Step 3. Prove that (2) implies $\displaystyle \left\langle {T\left( v \right),u} \right\rangle = \left\langle {v,T^{ - 1} \left( u \right)} \right\rangle$ for all $\displaystyle u,v\in \mathbb{R}^n$

Step 4: $\displaystyle \left\langle {T\left( v \right),T\left( u \right)} \right\rangle = \left\langle {v,T^{ - 1} \left( {T\left( u \right)} \right)} \right\rangle = \left\langle {v,u} \right\rangle$ for all $\displaystyle u,v\in \mathbb{R}^n$ and the proof is complete