0% found this document useful (0 votes)
8 views

1.5 Fundamentals of Programming

Unit I covers the fundamentals of programming, including the importance and history of programming languages, programming paradigms, and the impact of machine architectures. It introduces logic and rule-based programming, particularly focusing on declarative programming and the Prolog language, which is used for AI and problem-solving through resolution and unification. The unit also discusses the structure and features of Prolog, including terms, rules, and examples, while highlighting the advantages and deficiencies of using Prolog.

Uploaded by

hetavimodi2005
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
8 views

1.5 Fundamentals of Programming

Unit I covers the fundamentals of programming, including the importance and history of programming languages, programming paradigms, and the impact of machine architectures. It introduces logic and rule-based programming, particularly focusing on declarative programming and the Prolog language, which is used for AI and problem-solving through resolution and unification. The unit also discusses the structure and features of Prolog, including terms, rules, and examples, while highlighting the advantages and deficiencies of using Prolog.

Uploaded by

hetavimodi2005
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 22

UNIT I

Fundamentals of Programming

1
Unit I Contents (06 Hours)

• Importance of Studying Programming Languages, History of Programming


Languages, Impact of Programming Paradigms, Role of Programming
Languages, Programming Environments. Impact of Machine Architectures:
The operation of a computer, Virtual Computers and Binding Times.
• Programming paradigms- Introduction to programming paradigms,
Introduction to four main Programming paradigms- procedural, object
oriented, functional, and logic and rule based.
Logic and Rule based Programming
Paradigm
Logic and rule based
• We now examine a radically different paradigm for programming: declarative
programming
– rather than writing control constructs (loops, selection statements,
subroutines)
– you specify knowledge and how that knowledge is to be applied through a
series of rules
– the programming language environment uses one or more built-in methods
to reason over the knowledge and prove things (or answer questions)
• in logic programming, the common approach is to apply the methods of
resolution and unification
• While these languages have numerous flaws, they can build powerful problem
solving systems with little programming expertise
– they have been used extensively in AI research
Terminology
• Logic Programming is a specific type of a more general class: production systems (also
called rule-based systems)
– a production system is a collection of facts (knowledge), rules (which are another
form of knowledge) and control strategies
– we often refer to the collection of facts (what we know) as working memory
– the rules are simple if-then statements where the condition tests values stored in
working memory and the action (then clause) manipulates working memory (adds
new facts, deletes old facts, modifies facts)
– the control strategies help select among a set of rules that match – that is, if multiple
rules have matching conditions, the control strategies can help decide which rule we
select this time through
– there are other control strategies as well – whether we work from conditions to
conclusions or from conclusions to conditions (forward, backward chaining
respectively)
Logic Programming
• Also known as declarative programming.
• Mostly synonymous with the Prolog language because it is the only widely used
language for logic programming.
• A declarative program does not have code, instead it defines two pieces of
knowledge
– facts – statements that are true.
– rules – if-then statements that are truth preserving.
• We use the program to prove if a statement is true and/or answer questions.
• The reason this works is that Prolog has built-in problem solving processes
called resolution and unification
– in fact Prolog is not so much a programming language as it is a tool, but it
does have some programming language features that make it mildly
programmable
Background for Logic
• A proposition is a logical statement that is only made if it is true
– Today is Tuesday
– The Earth is round
• Symbolic logic uses propositions to express ideas, relationships between ideas and to generate new
ideas based on the given propositions
• Two forms of propositions are
– Atomic propositions
– Compound terms (multiple propositions connected through the logical operators of and, or, not,
and implies)
• Propositions will either be true (if stated) or something to prove or disprove (determine if it is true) – we
do not include statements which are false
• For symbolic logic, we use 1st order predicate calculus
– statements include predicates like round(x) where this is true if we can find an x that makes it true
such as round(Earth) or round(x) when x = Earth
– you might think of a predicate as a Boolean function except that rather than returning T or F, it finds
an x that makes it true
– Equivalence means that both
Logic Operators expressions have identical
truth tables
Name Symbol Example Meaning
– Implication is like an if-then
negation ¬ ¬a not a statement

conjunction ∩ a∩b a and b • if a is true then b is true


• note that this does not
disjunction ∪ a∪b a or b necessarily mean that if a
equivalence ≡ a≡b a is equivalent is false that b must also be
to b false

implication ⊃ a⊃b a implies b – Universal quantifier says that


this is true no matter what x is
⊂ a⊂b b implies a
– Existential quantifier says that
universal ∀ X.P For all X, P is there is an X that fulfills the
true statement

existential ∃ X.P There exists a ∀X.(woman(X) ⊃ human(X))


value of X – if X is a woman, then X is a human
such that P is
true ∃X.(mother(mary, X) ∩ male(X))
– Mary has a son (X)
Clausal Form
• To use resolution, all statements must be in clausal form
– B1 ∪ B2 ∪ … ∪ Bn ⊂ A1 ∩ A2 ∩ … ∩ Am
• B1 or B2 or … or Bn is true if A1and A2 and … and Am are all true
– the left hand side is the consequent (what we are trying to prove) and the right
hand side is the antecedent (what conditions must hold true)
– notice we have turned the if-then statement around,
– We must modify our knowledge so that:
• existential quantifiers are not required (eliminate all of them)
• universal quantifiers are implied (by replacing each with a specific variable)
• no negations (all negations must be removed)
– We break down our statements to have a single item on the left
• the above statement is broken into multiple statements such as
– B1 ⊂ A1 ∩ A2 ∩ … ∩ Am
– B2 ⊂ A1 ∩ A2 ∩ … ∩ Am …
– Bn ⊂ A1 ∩ A2 ∩ … ∩ Am
• note that propositions and predicates by themselves are already in clausal form, such
as round(Earth) and Sunny
Resolution and Unification
• Given a collection of knowledge
– we will want to prove certain statements are true or answer questions
• For instance, from the previous example, we might ask
– who is Bob’s grandfather?
– is Sue Barbara’s parent?
• How can this be done? Through backward chaining through rules
• Here is how backward chaining works
– we want to prove that A is true
– find a rule with A on its LHS and whatever is on the rule’s RHS must now be proven
to be true, so we add the items on the RHS to a list of things we are trying to prove
– repeat until
• we match something that we know is true to our list, then remove the item
• we run out of items on our list, then we are done, we have proven A is true
• To complicate matters, predicates (e.g., round(X)) need to be unified, that is, to prove
round(X) is true, we have to find some X where we know it is true, for instance,
round(Earth)
Complete Logic Example
If we want to find out what would
Assume that we know the following about pets: make a good indoor pet, we ask
poodle(COCOA) indoorpet(?)
setter(BIG)
terrier(SCOTTY) This requires finding pet(X) and small(X)
(find an X to make both predicates true)
dog(X) ⊂ poodle(X) (poodles are dogs) pet(X) is implied by dog(X),
dog(X) is implied by terrier(X),
dog(X) ⊂ setter(X) (setters are dogs) SCOTTY is a terrier so SCOTTY
dog(X) ⊂ terrier(X) (terriers are dogs) is a dog so SCOTTY is a pet
small(X) ⊂ poodle(X) (poodles are small)
small(X) ⊂ terrier(X) (terriers are small) Can we find if SCOTTY is small?
small(SCOTTY) is implied
big(X) ⊂ setter(X) (setters are big) by terrier(SCOTTY) which we
pet(X) ⊂ dog(X) (dogs are pets) already know is true, therefore,
indoorpet(X) ⊂ pet(X) and small(X) since terrier(SCOTTY) is true, small(SCOTTY)
(small pets are indoor pets) and pet(SCOTTY)
are true, so indoorpet(SCOTTY) is
outdoorpet(X) ⊂ pet(X) and big(X)
True
(big pets are outdoor pets)
Continuing with this process
will also prove that indoorpet(COCOA)
is true.
PROLOG
• PROLOG is a programming language that allows the programmer to specify
declarative statements only
– declarative statements (things you are declaring) fall into 2 categories
• predicates/propositions that are true
• clauses (truth preserving rules in clausal form)
– once specified, the programmer then introduces questions to be answered
• PROLOG uses resolution (backward chaining) and unification to perform
the problem solving automatically
• PROLOG was developed in France and England in the late 70s
– the intent was to provide a language that could accommodate logic
statements and has largely been used in AI but also to a lesser extent as a
database language or to solve database related problems
Elements of Prolog
• Terms – constant, variable, structure
– constants are atoms or integers (atoms are like those symbols found in Lisp)
– variables are not bound to types, but are bound to values when instantiated (via
unification)
– an instantiation will last as long as it takes to complete a goal
• proving something is true, or reaching a dead end with the current
instantiation
– structures are predicates and are represented as
• functor(parameter list) where functor is the name of the predicate
• All statements in Prolog consist of clauses
– headed clauses are rules
– headless clauses are statements that are always true
• in reality, a headless clause is a rule whose condition is always true
– all clauses must end with a period
Rules
• All rules are stated in Horn clause form
– the consequence comes first
• the symbol :- is used to separate the consequence from the antecedent
– And is denoted by , and Or is denoted by ; or separating the rule into two
separately rules
– variables in rules are indicated with upper-case letters
– rules end with a .
– examples:
• parent(X, Y) :- mother(X, Y).
• parent(X, Y) :- father(X, Y).
• grandparent(X, Z) :- parent(X, Y), parent(Y, Z).
• sibling(X, Y) :- mother(M, X), mother(M, Y), father(F, X), father(F, Y).
– we can use _ as a wildcard meaning this is true if we can find any clause that fits
• father(X) :- father(X, _), male(X).
– X is a father if X is male and is someone’s father
Other Language Features
• Assignment statements are available using the is operator
– A is B / 17 + C.
• this works if B and C are instantiated and A is not
• however, is does not work like a true assignment statement
– you can not do x is x + y – this can never be true!
– we might use the assignment operator in a rule such as
• distance(X,Y) :- speed(X,Speed), time(X,Time), Y is Speed * Time

• List structures are also available using [ ] marks


– as in new_list([apple, prune, grape, kumquat]).
– this is not a binding of new_list to the values, but instead new_list is
a predicate with a true instance of the predicate being the parameter
[apple, prune, grape, kumquat]
• lists can also be represented as a head and tail using | to separate the two
parts similar to how Lisp uses CAR and CDR
More Prolog Examples
predecessor(X,Y) :- parent(X,Y); parent(X,Z), predecessor(Z,Y).
// X is a predecessor of Y if X is Y’s parent or
// if X is parent of someone else whoNotice
is a predecessor of Y
the use of “not” here
– in Prolog, x != y is
Using Not: available but ~foo(x) is not
dog(X) :- poodle(X).
That is, we only declare
dog(X) :- terrier(X).
statements that are true, we
likes(X,Y) :- dog(X), dog(Y), not (X=Y). cannot declare the negation
// can also be written as X =\= Y of statements that are false

Database example: imagine we have a collection of terms:


record(name, yearborn, salary)
Successful person is someone who either makes > $50000 in salary
or was born after 1980 and is making more than $40000.
success(X) :- record(X, Y, Z), Z > 50000;
record(X, Y, Z), Y > 1980, Z > 40000.
Additional Prolog Examples
Defining Max:
max(X,Y,M) :- X > Y, M is X.
max(X,Y,M) :- Y >= X, M is Y.

Defining GCD:
gcd(X,Y,D) :- X=Y, D is X.
gcd(X,Y,D) :- X<Y, Y1 is Y - X, gcd(X, Y1, D).
gcd(X,Y,D) :- X>Y, gcd(Y, X, D).

Two List examples


Defining Length:
length([ ], 0). // empty list has a length of 0
length([ _ | Tail, N) :- length(Tail, N1), N is 1 + N1. // a list that has an
// item _ and a Tail is length N if the length of Tail is N1 where N = 1 + N1

Sum of the items in a list:


sum([ ], 0). // sum of an empty list is 0
sum([X | Tail], S) :- sum(Tail, S1), S is X + S1.
Advantages of Prolog
• There are several advantages to using Prolog
– ability to create automated problem solvers merely by listing
knowledge
– a shortcut way to build and query a database
– solving significantly difficult problems with minimal code:
Deriving the permutations of a list List:
perm(List,[H|Perm]):-delete(H,List,Rest),perm(Rest,Perm).
perm([ ],[ ]).
delete(X,[X|T],T).
delete(X,[H|T],[H|NT]):-delete(X,T,NT).
Sorting a list of values stored in List:
insert_sort(List,Sorted):-i_sort(List,[],Sorted).
i_sort([ ],Acc,Acc).
i_sort([H|T],Acc,Sorted):-insert(H,Acc,NAcc),i_sort(T,NAcc,Sorted).
insert(X,[Y|T],[Y|NT]):-X>Y,insert(X,T,NT).
insert(X,[Y|T],[X,Y|T]):-X=<Y.
insert(X,[],[X]).
A naïve sort (inefficient, but simple):
naive_sort(List,Sorted):-perm(List,Sorted),is_sorted(Sorted).
is_sorted([ ]).
is_sorted([ _ ]).
is_sorted([X,Y|T]):-X=<Y,is_sorted([Y|T]).
Deficiencies of Prolog
• Lack of control structures
– Prolog offers built-in control of resolution and unification
• you often have to force a problem into the resolution mold to solve it with Prolog (most
problems cannot or should not be solved in this way)
• Inefficiencies of resolution
– resolution, as a process, is intractable (O(2n) for n clauses)
• useful heuristics could be applied to reduce the complexity, but there is no way to apply
heuristics in Prolog
– they would just be additional rules that increases the size of n!
• Closed world assumption
– in any form of logic reasoning, if something is not known, it is assumed to be false and
everything is either true or false
• Negation is difficult to represent
– since there is no NOT in Prolog, how do we represent NOT?
• recall that anything explicitly stated must be true so we cannot specify NOT something
as something would then be false
• we can represent A != B, but we cannot represent ~dog(X).
Rule-based Approaches
• Three of Prolog’s deficiencies can be eliminated (or lessened)
– heuristics can be applied to improve efficiency
• not necessarily reduce the complexity below O(2n) but improve it
– uncertainty can be expressed by adding certainty factors or probabilities to data, rules and
conclusions
– use both forward and backward chaining
• Rule-based systems are less restrictive than the strictly logic-based approach in Prolog
– by moving away from the formal logic approach however, doubts can arise from any results
generated by such a system
• that is, we can not be sure of the truth of something proven when the system contains non-
truth-preserving rules and uncertain data
– is it useful to move away from the strict logic-based approach given this uncertainty?
• since nearly everything in the world has uncertainty, my answer is YES
• The rule-based approach is largely the same as in Prolog:
– declare knowledge, provide rules, and ask questions to be answered, but most rule-based
languages provide mechanisms for control strategies
Case Study

• A case study: Retail Sales application


Prof. S. N. Shelke
(Assistant Professor)
Department of Computer Engineering
Sinhgad Academy of Engineering,
Kondhwa, Pune

You might also like