# Logical English, [LE](https://github.com/LogicalContracts/LogicalEnglish/blob/main/le_handbook.pdf)
```eval
:- welcome(M), format("<p><i>~a</i></p>",[M]).
```
## the British Nationality Act Example
:- module('citizenship+https://www.legislation.gov.uk/ukpga/1981/61/section/1',[]).
en("the target language is: prolog.
the templates are:
*a person* acquires British citizenship on *a date*.
*a person* is born in *a place* on *a date*,
*a date* is after commencement,
*a person* is the mother of *a person*,
*a person* is the father of *a person*,
*a person* is a British citizen on *a date*,
*a person* is settled in the UK on *a date*,
*a person* says that *a sentence*,
*a person* is authorised to determine fatherhood.
the knowledge base citizenship includes:
a person acquires British citizenship on a date
if the person is born in the UK on the date
and the date is after commencement
and an other person is the mother of the person
or the other person is the father of the person
and the other person is a British citizen on the date
or the other person is settled in the UK on the date.
scenario alice is:
John is born in the UK on 2021-10-09.
2021-10-09 is after commencement.
Alice is the mother of John.
Alice is a British citizen on 2021-10-09.
query one is:
which person acquires British citizenship on which date.
").
SWISH -- LogicalEnglish.swinb (logicalcontracts.com
answer one with alice.
But it can also be queried directly, like this:
answer('which person acquires British citizenship on which date', with(alice)).
Or it can be queried in Prolog with extra arguments for features like explanations:
answer(one, with(alice), le(E), R).
# Introduction to the Syntax of LE
The parser of LE assumes a document with the following structure. One declaration title like:
the templates are:
followed by the declarations of all the corresponding predicates mentioned in the knowledge base.
Each declarations define a template with the variables and other words required to describe a relevant relation.
It is a comma separated list of templates which ends
with a period.
After that period, one of the following statement introduces the knowledge base:
the knowledge base includes:
or
the knowledge base [name of the kb] includes:
And it is followed by the rules and facts written in Logical English syntax.
Each rule must end with a period.
Indentation is used to organize the and/or list of conditions by strict observance
of one condition per line with a level of indentation that corresponds to each operator and corresponding conditions.
Similarly, there may be sections for scenarios and queries, like:
scenario test is:
borrower pays an amount to lender on 2015-06-01.
and
query one is:
for which event:
the small business restructure rollover applies to the event.
query two is:
which tax payer is a party of which event.
query three is:
A first time is after a second time
and the second time is immediately before the first time.
which can then be used on the new command interface of LE on SWISH (e.g. answer/1 and others querying predicates)
? answer 'query one with scenario test'.
A first example is the one shown above, as part of this notebook. More examples linked below. They could all be used as separated programs as well
## Other recommended examples
1. [Citizenship with trust](https://le.logicalcontracts.com/p/citizenship.pl)
2. [Grandparent and ancestor](https://le.logicalcontracts.com/p/impossible%20ancestor.pl)
3. [Subset](https://le.logicalcontracts.com/p/subset%20with%20lists.pl)
4. [OECD Convention on double taxation](https://le.logicalcontracts.com/p/oecd_test.pl)
5. On LPS: the [rock paper scissors](https://demo.logicalcontracts.com/example/RockPaperScissorsBaseEN.pl) example.
## More information
For more information on Logical English, see [the Handbook](https://github.com/LogicalContracts/LogicalEnglish/blob/main/le_handbook.pdf).
The open source code is at [https://github.com/LogicalContracts/LogicalEnglish](https://github.com/LogicalContracts/LogicalEnglish)