Skip to content

Latest commit

 

History

History
457 lines (436 loc) · 34.5 KB

AST.adoc

File metadata and controls

457 lines (436 loc) · 34.5 KB

AsciiMath Grammar and AST

Grammar

The AsciiMath grammar is defined as

v ::= [A-Za-z] | greek letters | numbers | other constant symbols
u ::= sqrt | text | bb | other unary symbols for font commands
b ::= frac | root | stackrel | other binary symbols
l ::= ( | [ | { | (: | {: | other left brackets
r ::= ) | ] | } | :) | :} | other right brackets
S ::= v | lEr | uS | bSS             Simple expression
I ::= S_S | S^S | S_S^S | S          Intermediate expression
E ::= IE | I/I                       Expression

syntax in EBNF style notation is

asciimath = expr*
expr = intermediate fraction?
fraction = '/' intermediate
intermediate = simp sub? super?
super = '^' simp
sub =  '_' simp
simp = constant | paren_expr | unary_expr | binary_expr | text
paren_expr = lparen asciimath rparen
lparen = '(' | '[' | '{' | '(:' | '{:'
rparen = ')' | ']' | '}' | ':)' | ':}'
unary_expr = unary_op simp
unary_op = 'sqrt' | 'text'
binary_expr = binary_op simp simp
binary_op = 'frac' | 'root' | 'stackrel'
text = '"' [^"]* '"'
constant = number | symbol | identifier
number = '-'? [0-9]+ ( '.' [0-9]+ )?
symbol = /* any string in the symbol table */
identifier = [A-z]

Abstract Syntax Tree

The parser returns an abstract syntax tree consisting of AsciiMath::AST::Node objects. Each expression 'node' of the AST is one of the following forms:

AsciiMath

asciimath is converted to a AsciiMath::AST::Sequence. An empty Array is converted to nil by the parser. A single element AsciiMath::AST::Sequence is unwrapped to just the element.

Sequences of expressions are returned as `AsciiMath::AST::Sequence`s as well.

Parentheses

lparen asciimath rparen is converted to AsciiMath::AST::Paren. When a paren expression is used to group the operands of unary or binary operators a AsciiMath::AST::Group is used instead. The group node retains the parentheses, but these are not rendered in the final output.

Super and Sub Script

simp sub, simp super and simp sub super are converted to AsciiMath::AST::SubSup.

Unary Expressions

unary_op simp is converted to AsciiMath::AST::UnaryOp.

Binary Expressions

binary_op simp simp is converted to AsciiMath::AST::BinaryOp.

intermediate / intermediate is converted to AsciiMath::AST::InfixOp.

Symbols

symbol (mathematical operators, function names, arrows, accents, greek letters, etc.) is converted to AsciiMath::AST::Symbol. The Symbol Table below list all the symbols that are recognized by the parser.

Identifiers

identifier is converted to AsciiMath::AST::Identifier.

Text

text is converted to AsciiMath::AST::Text.

Numbers

number is converted to AsciiMath::AST::Number.

Colors

The first operand of the color binary operator is converted to AsciiMath::AST::Color.

Matrices

Matrices in AsciiMath are a special case of nested paren_expr. The matrix itself can be any paren_expr. Inside this outer matrix paren_expr each row should be represented as a paren_expr using either () or []. Rows must be separated by commas (,). The elements of each row must also be separated by commas. Each row must contain the same number of elements.

When the parser detects a well-formed matrix expression it will strip away the paren_expr representation of the matrix and each row. Instead it returns a AsciiMath::AST::Matrix. The matrix node contains a AsciiMath::AST::MatrixRow for each row of the matrix. Each AsciiMath::AST::MatrixRow contains a child node per column. Empty matrix cells are represented as AsciiMath::AST::Empty.

Symbol Table

AsciiMath Symbol MathML Value LaTeX Value

+

:plus

+ (U+002B)

+

-

:minus

− (U+2212)

-

*

:cdot

⋅ (U+22C5)

\cdot

cdot

:cdot

⋅ (U+22C5)

\cdot

**

:ast

* (U+002A)

*

ast

:ast

* (U+002A)

*

***

:star

⋆ (U+22C6)

\star

star

:star

⋆ (U+22C6)

\star

//

:slash

/ (U+002F)

/

\\

:backslash

\ (U+005C)

\backslash

backslash

:backslash

\ (U+005C)

\backslash

setminus

:setminus

\ (U+005C)

\setminus

xx

:times

× (U+00D7)

\times

times

:times

× (U+00D7)

\times

|><

:ltimes

⋉ (U+22C9)

\ltimes

ltimes

:ltimes

⋉ (U+22C9)

\ltimes

><|

:rtimes

⋊ (U+22CA)

\rtimes

rtimes

:rtimes

⋊ (U+22CA)

\rtimes

|><|

:bowtie

⋈ (U+22C8)

\bowtie

bowtie

:bowtie

⋈ (U+22C8)

\bowtie

-:

:div

÷ (U+00F7)

\div

div

:div

÷ (U+00F7)

\div

divide

:div

÷ (U+00F7)

\div

@

:circ

⚬ (U+26AC)

\circ

circ

:circ

⚬ (U+26AC)

\circ

o+

:oplus

⊕ (U+2295)

\oplus

oplus

:oplus

⊕ (U+2295)

\oplus

ox

:otimes

⊗ (U+2297)

\otimes

otimes

:otimes

⊗ (U+2297)

\otimes

o.

:odot

⊙ (U+2299)

\odot

odot

:odot

⊙ (U+2299)

\odot

sum

:sum

∑ (U+2211)

\sum

prod

:prod

∏ (U+220F)

\prod

^^

:wedge

∧ (U+2227)

\wedge

wedge

:wedge

∧ (U+2227)

\wedge

^^^

:bigwedge

⋀ (U+22C0)

\bigwedge

bigwedge

:bigwedge

⋀ (U+22C0)

\bigwedge

vv

:vee

∨ (U+2228)

\vee

vee

:vee

∨ (U+2228)

\vee

vvv

:bigvee

⋁ (U+22C1)

\bigvee

bigvee

:bigvee

⋁ (U+22C1)

\bigvee

nn

:cap

∩ (U+2229)

\cap

cap

:cap

∩ (U+2229)

\cap

nnn

:bigcap

⋂ (U+22C2)

\bigcap

bigcap

:bigcap

⋂ (U+22C2)

\bigcap

uu

:cup

∪ (U+222A)

\cup

cup

:cup

∪ (U+222A)

\cup

uuu

:bigcup

⋃ (U+22C3)

\bigcup

bigcup

:bigcup

⋃ (U+22C3)

\bigcup

=

:eq

= (U+003D)

=

!=

:ne

≠ (U+2260)

\neq

ne

:ne

≠ (U+2260)

\neq

:=

:assign

≔ (U+2254)

:=

<

:lt

< (U+003C)

<

lt

:lt

< (U+003C)

<

>

:gt

> (U+003E)

>

gt

:gt

> (U+003E)

>

<=

:le

≤ (U+2264)

\le

le

:le

≤ (U+2264)

\le

>=

:ge

≥ (U+2265)

\ge

ge

:ge

≥ (U+2265)

\ge

-<

:prec

≺ (U+227A)

\prec

-lt

:prec

≺ (U+227A)

\prec

prec

:prec

≺ (U+227A)

\prec

>-

:succ

≻ (U+227B)

\succ

succ

:succ

≻ (U+227B)

\succ

-<=

:preceq

⪯ (U+2AAF)

\preceq

preceq

:preceq

⪯ (U+2AAF)

\preceq

>-=

:succeq

⪰ (U+2AB0)

\succeq

succeq

:succeq

⪰ (U+2AB0)

\succeq

in

:in

∈ (U+2208)

\in

!in

:notin

∉ (U+2209)

\notin

notin

:notin

∉ (U+2209)

\notin

sub

:subset

⊂ (U+2282)

\subset

subset

:subset

⊂ (U+2282)

\subset

sup

:supset

⊃ (U+2283)

\supset

supset

:supset

⊃ (U+2283)

\supset

sube

:subseteq

⊆ (U+2286)

\subseteq

subseteq

:subseteq

⊆ (U+2286)

\subseteq

supe

:supseteq

⊇ (U+2287)

\supseteq

supseteq

:supseteq

⊇ (U+2287)

\supseteq

-=

:equiv

≡ (U+2261)

\equiv

equiv

:equiv

≡ (U+2261)

\equiv

~=

:cong

≅ (U+2245)

\cong

cong

:cong

≅ (U+2245)

\cong

~~

:approx

≈ (U+2248)

\approx

approx

:approx

≈ (U+2248)

\approx

prop

:propto

∝ (U+221D)

\propto

propto

:propto

∝ (U+221D)

\propto

and

:and

and (U+0061 U+006E U+0064)

\operatorname{and}

or

:or

or (U+006F U+0072)

\operatorname{or}

not

:not

¬ (U+00AC)

\not

neg

:not

¬ (U+00AC)

\not

=>

:implies

⇒ (U+21D2)

\Rightarrow

implies

:implies

⇒ (U+21D2)

\Rightarrow

if

:if

if (U+0069 U+0066)

\operatorname{if}

<=>

:iff

⇔ (U+21D4)

\Leftrightarrow

iff

:iff

⇔ (U+21D4)

\Leftrightarrow

AA

:forall

∀ (U+2200)

\forall

forall

:forall

∀ (U+2200)

\forall

EE

:exists

∃ (U+2203)

\exists

exists

:exists

∃ (U+2203)

\exists

_|_

:bot

⊥ (U+22A5)

\bot

bot

:bot

⊥ (U+22A5)

\bot

TT

:top

⊤ (U+22A4)

\top

top

:top

⊤ (U+22A4)

\top

|--

:vdash

⊢ (U+22A2)

\vdash

vdash

:vdash

⊢ (U+22A2)

\vdash

|==

:models

⊨ (U+22A8)

\models

models

:models

⊨ (U+22A8)

\models

(

:lparen

( (U+0028)

(

left(

:lparen

( (U+0028)

(

)

:rparen

) (U+0029)

)

right)

:rparen

) (U+0029)

)

[

:lbracket

[ (U+005B)

[

left[

:lbracket

[ (U+005B)

[

]

:rbracket

] (U+005D)

]

right]

:rbracket

] (U+005D)

]

{

:lbrace

{ (U+007B)

\{

}

:rbrace

} (U+007D)

\}

|

:vbar

| (U+007C)

|

:|:

:vbar

| (U+007C)

|

|:

:vbar

| (U+007C)

|

:|

:vbar

| (U+007C)

|

(:

:langle

〈 (U+2329)

\langle

<<

:langle

〈 (U+2329)

\langle

langle

:langle

〈 (U+2329)

\langle

:)

:rangle

〉 (U+232A)

\rangle

>>

:rangle

〉 (U+232A)

\rangle

rangle

:rangle

〉 (U+232A)

\rangle

int

:integral

∫ (U+222B)

\int

dx

:dx

dx (U+0064 U+0078)

dx

dy

:dy

dy (U+0064 U+0079)

dy

dz

:dz

dz (U+0064 U+007A)

dz

dt

:dt

dt (U+0064 U+0074)

dt

oint

:contourintegral

∮ (U+222E)

\oint

del

:partial

∂ (U+2202)

\del

partial

:partial

∂ (U+2202)

\del

grad

:nabla

∇ (U+2207)

\nabla

nabla

:nabla

∇ (U+2207)

\nabla

+-

:pm

± (U+00B1)

\pm

pm

:pm

± (U+00B1)

\pm

O/

:emptyset

∅ (U+2205)

\emptyset

emptyset

:emptyset

∅ (U+2205)

\emptyset

oo

:infty

∞ (U+221E)

\infty

infty

:infty

∞ (U+221E)

\infty

aleph

:aleph

ℵ (U+2135)

\aleph

...

:ellipsis

… (U+2026)

\ldots

ldots

:ellipsis

… (U+2026)

\ldots

:.

:therefore

∴ (U+2234)

\therefore

therefore

:therefore

∴ (U+2234)

\therefore

:'

:because

∵ (U+2235)

\because

because

:because

∵ (U+2235)

\because

/_

:angle

∠ (U+2220)

\angle

angle

:angle

∠ (U+2220)

\angle

/_\

:triangle

△ (U+25B3)

\triangle

triangle

:triangle

△ (U+25B3)

\triangle

'

:prime

′ (U+2032)

'

prime

:prime

′ (U+2032)

'

tilde

:tilde

~ (U+007E)

\~

\

:nbsp

  (U+00A0)

\;

frown

:frown

⌢ (U+2322)

\frown

quad

:quad

   (U+00A0 U+00A0)

\quad

qquad

:qquad

     (U+00A0 U+00A0 U+00A0 U+00A0)

\qquad

cdots

:cdots

⋯ (U+22EF)

\cdots

vdots

:vdots

⋮ (U+22EE)

\vdots

ddots

:ddots

⋱ (U+22F1)

\ddots

diamond

:diamond

⋄ (U+22C4)

\diamond

square

:square

□ (U+25A1)

\square

|__

:lfloor

⌊ (U+230A)

\lfloor

lfloor

:lfloor

⌊ (U+230A)

\lfloor

__|

:rfloor

⌋ (U+230B)

\rfloor

rfloor

:rfloor

⌋ (U+230B)

\rfloor

|~

:lceiling

⌈ (U+2308)

\lceil

lceiling

:lceiling

⌈ (U+2308)

\lceil

~|

:rceiling

⌉ (U+2309)

\rceil

rceiling

:rceiling

⌉ (U+2309)

\rceil

CC

:dstruck_captial_c

ℂ (U+2102)

\mathbb{C}

NN

:dstruck_captial_n

ℕ (U+2115)

\mathbb{N}

QQ

:dstruck_captial_q

ℚ (U+211A)

\mathbb{Q}

RR

:dstruck_captial_r

ℝ (U+211D)

\mathbb{R}

ZZ

:dstruck_captial_z

ℤ (U+2124)

\mathbb{Z}

f

:f

f (U+0066)

f

g

:g

g (U+0067)

g

lim

:lim

lim (U+006C U+0069 U+006D)

\lim

Lim

:Lim

Lim (U+004C U+0069 U+006D)

\operatorname{Lim}

min

:min

min (U+006D U+0069 U+006E)

\min

max

:max

max (U+006D U+0061 U+0078)

\max

sin

:sin

sin (U+0073 U+0069 U+006E)

\sin

Sin

:Sin

Sin (U+0053 U+0069 U+006E)

\operatorname{Sin}

cos

:cos

cos (U+0063 U+006F U+0073)

\cos

Cos

:Cos

Cos (U+0043 U+006F U+0073)

\operatorname{Cos}

tan

:tan

tan (U+0074 U+0061 U+006E)

\tan

Tan

:Tan

Tan (U+0054 U+0061 U+006E)

\operatorname{Tan}

sinh

:sinh

sinh (U+0073 U+0069 U+006E U+0068)

\sinh

Sinh

:Sinh

Sinh (U+0053 U+0069 U+006E U+0068)

\operatorname{Sinh}

cosh

:cosh

cosh (U+0063 U+006F U+0073 U+0068)

\cosh

Cosh

:Cosh

Cosh (U+0043 U+006F U+0073 U+0068)

\operatorname{Cosh}

tanh

:tanh

tanh (U+0074 U+0061 U+006E U+0068)

\tanh

Tanh

:Tanh

Tanh (U+0054 U+0061 U+006E U+0068)

\operatorname{Tanh}

cot

:cot

cot (U+0063 U+006F U+0074)

\cot

Cot

:Cot

Cot (U+0043 U+006F U+0074)

\operatorname{Cot}

sec

:sec

sec (U+0073 U+0065 U+0063)

\sec

Sec

:Sec

Sec (U+0053 U+0065 U+0063)

\operatorname{Sec}

csc

:csc

csc (U+0063 U+0073 U+0063)

\csc

Csc

:Csc

Csc (U+0043 U+0073 U+0063)

\operatorname{Csc}

arcsin

:arcsin

arcsin (U+0061 U+0072 U+0063 U+0073 U+0069 U+006E)

\arcsin

arccos

:arccos

arccos (U+0061 U+0072 U+0063 U+0063 U+006F U+0073)

\arccos

arctan

:arctan

arctan (U+0061 U+0072 U+0063 U+0074 U+0061 U+006E)

\arctan

coth

:coth

coth (U+0063 U+006F U+0074 U+0068)

\coth

sech

:sech

sech (U+0073 U+0065 U+0063 U+0068)

\operatorname{sech}

csch

:csch

csch (U+0063 U+0073 U+0063 U+0068)

\operatorname{csch}

exp

:exp

exp (U+0065 U+0078 U+0070)

\exp

abs

:abs

abs (U+0061 U+0062 U+0073)

\abs

Abs

:abs

abs (U+0061 U+0062 U+0073)

\abs

norm

:norm

norm (U+006E U+006F U+0072 U+006D)

\norm

floor

:floor

floor (U+0066 U+006C U+006F U+006F U+0072)

\floor

ceil

:ceil

ceil (U+0063 U+0065 U+0069 U+006C)

\ceil

log

:log

log (U+006C U+006F U+0067)

\log

Log

:Log

Log (U+004C U+006F U+0067)

\operatorname{Log}

ln

:ln

ln (U+006C U+006E)

\ln

Ln

:Ln

Ln (U+004C U+006E)

\operatorname{Ln}

det

:det

det (U+0064 U+0065 U+0074)

\det

dim

:dim

dim (U+0064 U+0069 U+006D)

\dim

mod

:mod

mod (U+006D U+006F U+0064)

\mod

gcd

:gcd

gcd (U+0067 U+0063 U+0064)

\gcd

lcm

:lcm

lcm (U+006C U+0063 U+006D)

\operatorname{lcm}

lub

:lub

lub (U+006C U+0075 U+0062)

\operatorname{lub}

glb

:glb

glb (U+0067 U+006C U+0062)

\operatorname{glb}

uarr

:uparrow

↑ (U+2191)

\uparrow

uparrow

:uparrow

↑ (U+2191)

\uparrow

darr

:downarrow

↓ (U+2193)

\downarrow

downarrow

:downarrow

↓ (U+2193)

\downarrow

rarr

:rightarrow

→ (U+2192)

\rightarrow

rightarrow

:rightarrow

→ (U+2192)

\rightarrow

->

:to

→ (U+2192)

\rightarrow

to

:to

→ (U+2192)

\rightarrow

>->

:rightarrowtail

↣ (U+21A3)

\rightarrowtail

rightarrowtail

:rightarrowtail

↣ (U+21A3)

\rightarrowtail

->>

:twoheadrightarrow

↠ (U+21A0)

\twoheadrightarrow

twoheadrightarrow

:twoheadrightarrow

↠ (U+21A0)

\twoheadrightarrow

>->>

:twoheadrightarrowtail

⤖ (U+2916)

\twoheadrightarrowtail

twoheadrightarrowtail

:twoheadrightarrowtail

⤖ (U+2916)

\twoheadrightarrowtail

|->

:mapsto

↦ (U+21A6)

\mapsto

mapsto

:mapsto

↦ (U+21A6)

\mapsto

larr

:leftarrow

← (U+2190)

\leftarrow

leftarrow

:leftarrow

← (U+2190)

\leftarrow

harr

:leftrightarrow

↔ (U+2194)

\leftrightarrow

leftrightarrow

:leftrightarrow

↔ (U+2194)

\leftrightarrow

rArr

:Rightarrow

⇒ (U+21D2)

\Rightarrow

Rightarrow

:Rightarrow

⇒ (U+21D2)

\Rightarrow

lArr

:Leftarrow

⇐ (U+21D0)

\Leftarrow

Leftarrow

:Leftarrow

⇐ (U+21D0)

\Leftarrow

hArr

:Leftrightarrow

⇔ (U+21D4)

\Leftrightarrow

Leftrightarrow

:Leftrightarrow

⇔ (U+21D4)

\Leftrightarrow

sqrt

:sqrt

sqrt ()

\sqrt

root

:root

root ()

\root

frac

:frac

frac ()

\frac

/

:frac

frac ()

\frac

stackrel

:stackrel

stackrel ()

\stackrel

overset

:overset

overset ()

\overset

underset

:underset

underset ()

\underset

color

:color

color ()

\color

_

:sub

_ (U+005F)

\text{–}

^

:sup

^ (U+005E)

\text{^}

hat

:hat

^ (U+005E)

\hat

bar

:overline

¯ (U+00AF)

\overline

vec

:vec

→ (U+2192)

\vec

dot

:dot

. (U+002E)

\dot

ddot

:ddot

.. (U+002E U+002E)

\ddot

overarc

:overarc

⏜ (U+23DC)

\overarc

overparen

:overarc

⏜ (U+23DC)

\overarc

ul

:underline

_ (U+005F)

\underline

underline

:underline

_ (U+005F)

\underline

ubrace

:underbrace

⏟ (U+23DF)

\underbrace

underbrace

:underbrace

⏟ (U+23DF)

\underbrace

obrace

:overbrace

⏞ (U+23DE)

\overbrace

overbrace

:overbrace

⏞ (U+23DE)

\overbrace

cancel

:cancel

cancel ()

\cancel

bb

:bold

bold ()

\mathbf

bbb

:double_struck

double_struck ()

\mathbb

ii

:italic

italic ()

\mathit

bii

:bold_italic

bold_italic ()

\mathbf

cc

:script

script ()

\mathscr

bcc

:bold_script

bold_script ()

\mathscr

tt

:monospace

monospace ()

\mathtt

fr

:fraktur

fraktur ()

\mathfrak

bfr

:bold_fraktur

bold_fraktur ()

\mathfrak

sf

:sans_serif

sans_serif ()

\mathsf

bsf

:bold_sans_serif

bold_sans_serif ()

\mathsf

sfi

:sans_serif_italic

sans_serif_italic ()

\mathsf

sfbi

:sans_serif_bold_italic

sans_serif_bold_italic ()

\mathsf

alpha

:alpha

α (U+03B1)

\alpha

Alpha

:Alpha

Α (U+0391)

\Alpha

beta

:beta

β (U+03B2)

\beta

Beta

:Beta

Β (U+0392)

\Beta

gamma

:gamma

γ (U+03B3)

\gamma

Gamma

:Gamma

Γ (U+0393)

\Gamma

delta

:delta

δ (U+03B4)

\delta

Delta

:Delta

Δ (U+0394)

\Delta

epsi

:epsilon

ε (U+03B5)

\epsilon

epsilon

:epsilon

ε (U+03B5)

\epsilon

Epsilon

:Epsilon

Ε (U+0395)

\Epsilon

varepsilon

:varepsilon

ɛ (U+025B)

\varepsilon

zeta

:zeta

ζ (U+03B6)

\zeta

Zeta

:Zeta

Ζ (U+0396)

\Zeta

eta

:eta

η (U+03B7)

\eta

Eta

:Eta

Η (U+0397)

\Eta

theta

:theta

θ (U+03B8)

\theta

Theta

:Theta

Θ (U+0398)

\Theta

vartheta

:vartheta

ϑ (U+03D1)

\vartheta

iota

:iota

ι (U+03B9)

\iota

Iota

:Iota

Ι (U+0399)

\Iota

kappa

:kappa

κ (U+03BA)

\kappa

Kappa

:Kappa

Κ (U+039A)

\Kappa

lambda

:lambda

λ (U+03BB)

\lambda

Lambda

:Lambda

Λ (U+039B)

\Lambda

mu

:mu

μ (U+03BC)

\mu

Mu

:Mu

Μ (U+039C)

\Mu

nu

:nu

ν (U+03BD)

\nu

Nu

:Nu

Ν (U+039D)

\Nu

xi

:xi

ξ (U+03BE)

\xi

Xi

:Xi

Ξ (U+039E)

\Xi

omicron

:omicron

ο (U+03BF)

\omicron

Omicron

:Omicron

Ο (U+039F)

\Omicron

pi

:pi

π (U+03C0)

\pi

Pi

:Pi

Π (U+03A0)

\Pi

rho

:rho

ρ (U+03C1)

\rho

Rho

:Rho

Ρ (U+03A1)

\Rho

sigma

:sigma

σ (U+03C3)

\sigma

Sigma

:Sigma

Σ (U+03A3)

\Sigma

tau

:tau

τ (U+03C4)

\tau

Tau

:Tau

Τ (U+03A4)

\Tau

upsilon

:upsilon

υ (U+03C5)

\upsilon

Upsilon

:Upsilon

Υ (U+03A5)

\Upsilon

phi

:phi

φ (U+03C6)

\phi

Phi

:Phi

Φ (U+03A6)

\Phi

varphi

:varphi

ϕ (U+03D5)

\varphi

chi

:chi

χ (U+03C7)

\chi

Chi

:Chi

Χ (U+03A7)

\Chi

psi

:psi

ψ (U+03C8)

\psi

Psi

:Psi

Ψ (U+03A8)

\Psi

omega

:omega

ω (U+03C9)

\omega

Omega

:Omega

Ω (U+03A9)

\Omega