Logic and Logic Programming Logic Propositional Logic First





















































![Example: S = q( [ a , b | _3] , _3 ) ? Example: S = q( [ a , b | _3] , _3 ) ?](https://slidetodoc.com/presentation_image/0323a6f36d37a9d0af6abb7a26c5f188/image-54.jpg)
![More examples T = q( [ b | _3 ] , _3 ) ? More examples T = q( [ b | _3 ] , _3 ) ?](https://slidetodoc.com/presentation_image/0323a6f36d37a9d0af6abb7a26c5f188/image-55.jpg)
![wrapup( q( [ ] , [ ] ) ) returns empty list ? - wrapup( q( [ ] , [ ] ) ) returns empty list ? -](https://slidetodoc.com/presentation_image/0323a6f36d37a9d0af6abb7a26c5f188/image-56.jpg)




![In plain English example s = { V -> [b, c] , Y->[a, b, In plain English example s = { V -> [b, c] , Y->[a, b,](https://slidetodoc.com/presentation_image/0323a6f36d37a9d0af6abb7a26c5f188/image-61.jpg)



![s = { Y -> [a] , Z -> L }, X = variable s = { Y -> [a] , Z -> L }, X = variable](https://slidetodoc.com/presentation_image/0323a6f36d37a9d0af6abb7a26c5f188/image-65.jpg)

![Find rule for append and get: append( [ H|X ] , Y , [ Find rule for append and get: append( [ H|X ] , Y , [](https://slidetodoc.com/presentation_image/0323a6f36d37a9d0af6abb7a26c5f188/image-67.jpg)

![Example: -? Suffix( [b], L ) , prefix( L, [a, b, c] ) rule: Example: -? Suffix( [b], L ) , prefix( L, [a, b, c] ) rule:](https://slidetodoc.com/presentation_image/0323a6f36d37a9d0af6abb7a26c5f188/image-69.jpg)
![Now we have: append( [b] , _2 , [a, b, c] ), but can’t Now we have: append( [b] , _2 , [a, b, c] ), but can’t](https://slidetodoc.com/presentation_image/0323a6f36d37a9d0af6abb7a26c5f188/image-70.jpg)


![Example: ? - append( [ ] , E , [ a, b | E Example: ? - append( [ ] , E , [ a, b | E](https://slidetodoc.com/presentation_image/0323a6f36d37a9d0af6abb7a26c5f188/image-73.jpg)







- Slides: 80

Logic and Logic Programming

Logic • Propositional Logic • First Order Predicate Logic

Propositions • A proposition is a declarative sentence. • e. g. Woff is a dog. • e. g. Jim is the husband of Mary. • A proposition is represented by a logical symbol. • P: Woff is a dog. • R: Jim is the husband of Mary.

Sentences • True and False are both logical constants. • Logical constants are sentences. • e. g. True is a propositional logic sentence. • Logical symbols are sentences. • e. g. P is a propositional logic sentence.

Logical Connectives • Logical Connectives are • Ù (and) • Ú (or) • Þ (implication) • Û (bi-conditional) • Negation • Ø (not)

Formal Grammar • Sentence : : = Atomic. Sentence | Complex. Sentence • Atomic. Sentence : : = True | False | P | Q | … • Complex. Sentence : : = (Sentence) | Sentence Connective Sentence | ØSentence • Connective : : = Ù | Ú | Þ | Û

Truth Values • P Q ØP P Ù Q P Ú Q P Þ Q P Û Q • • F F T T T F F F T T T F F T

Validity • A sentence is valid if and only if it is true under all possible interpretations in all possible worlds. (Russell, AI: a modern approach) • Valid sentences are also called tautologies.

Some Useful Tautologies • • • Ø(P Ù Q) Û ØP Ú ØQ Ø(P Ú Q) Û ØP Ù ØQ P Þ Q Û ØP Ú Q P Ù Ø P Û False True Þ Q Û Q

Some Inference Rules • • • Modus Pones P Þ Q, P Q Syllogism P Þ Q, Q Þ R PÞR

Horn Clauses • A Horn Clause is a sentence in the following form • P 1 Ù P 2 Ù … Ù Pn Þ Q • Prolog only works with logical sentences which are Horn Clauses

First Order Predicate Logic • Allows the following to be modeled • objects • properties of objects • relations among the objects • Like propositional logic, FOL has sentences • Additionally it has terms which allow the representation of objects

Terms • A term is a logical expression which refers to an object. (Russel, 188) • Elements of a term • Constant Symbols - A, B, John • Predicate Symbols - refer to a relation • Function Symbols - refer to a relation which is a function

Sentences • Atomic Sentences - state a fact • e. g. company(gordon). • e. g. location(gordon, usa) • Complex Sentences - formed from: • atomic sentences • logical connectives • quantifiers

Quantifiers • Universal Quantifier (") • "x is read “For all x …” • All cats are mammals. • "x (Cat(x) Þ Mammal(x)) • Extensile Quantifier ($) • $x is read “There exists an x. . ” • Spot has a sister who is a cat. • $x ( Sister(x, Spot) Ù Cat(x))


Other Paradigms : Logic Programming refers loosely to • The use of facts and rules to represent information. • The use of deduction to answer queries. An Example of a rule is overlap(X, Y) : - member(M, X), member(M, Y) Here lists X and Y overlap if there is some member M that is a member of both X and Y. In order to deduce this we need Prolog to answer queries.

How Prolog came into Existence ? • The concept of logic programming is linked historically to Prolog (Programming Logic). • Prolog was first applied to natural language Processing. Later it has been used for specifying algorithms, searching databases, writing compilers. It can do all applications for which Lisp might be used. • Prolog is effective for applications involving pattern matching, backtrack searching or incomplete information. • In short, labor in Logic Programming is denoted by algorithm = logic + control We supply logic part, Prog. Lang supplies control part.

Prolog has various dialects, Here we will talk about Edinburgh Prolog. Control In Edinburgh Prolog proceeds from left to right. The rule: P if Q 1 and Q 2 and …. And Qk. K>= 0 can be read as to deduce P, deduce Q 1, deduce Q 2 …. Deduce Qk Computing with Relations : • Logic Programming deals with relations rather than functions. It is based on the premise that programming with relations is more flexible than with functions. • Prolog deals with lists. Lists are written between brackets [ and ] , so [ ] is an empty list. [b, c] is a list with two symbols b and c. here b is head and c is tail.

Relations : • Relation append is a set of tuples of the form (X, Y, Z) where Z consists of elements of X followed by elements of Y. • Relations are specified by rules written in pseudo code as P if Q 1 and Q 2 and …. And Qk. K>= 0. Such rules are called as Horn clauses. • A fact is a special case of rule, in which k = 0 and P holds without any conditions, written simply as P Rules append( x, y, z) ----> append x and y to get z. append( [ ], y, y ) ----> append [ ] and y to get y.

Queries : Logic Prog. is driven by queries about relations. Horn clauses cannot represent negative information, Hence queries are answered as yes / fail rather than yes / no answers. ? - append( [a, b], [c, d], [a, b, c, d] ) ----> Yes ? - append( [a, b], [c, d], Z ) ----> Yes when Z = [a, b, c, d] ? - append( [a, b], Y, [a, b, c, d]) ----> Yes when Y = [c, d] ? - append( X, [c, d], [a, b, c, d]) ----> Yes when X = [a, b] ? - append( X, [d, c], [a, b, c, d]) ----> Fail Informally, Relations has no sense of direction, no prejudice who is computed from whom. Relations treat arguments and results uniformly.

Introduction To Prolog : • Facts, rules and queries are specified using terms. Facts, rules, queries number : 0 , 1972 variable : X, Source atom : lisp, algol 60 TERMS Simple Term Compound Term atom(subterms) link(bcpl, c)

Introduction to Prolog • Prolog is a logic programming language • Prolog is based upon First Order Logic (FOL) • A Prolog program consists of a Knowledge Base composed of: • facts • rules • All facts and rules must be expressed as Horn Clauses

Syntax Rules • Predicates (functors) must start with lowercase letter. • Constants begin with a lower-case letter or number. • Variables begin with an upper-case letter or an (_). • All sentences (clauses) must end with a period.

Clauses • • • All clauses have a head and a body. head : - body. The symbol : - is read if

Facts • A fact is stated as a functor using constants. • e. g. dog(woff). • A fact has only a head • A fact may be a functor without an argument list. • A single constant. • e. g. woff.

Rules • A rule has both head and body • dog(X) : - barks(X), wags_tail(X) • head is: dog(X) • body is: barks(X), wags_tail(X) • FOL form: if body then head • "X (barks(X) Ù wags_tain(X) Þ dog(X))

A Prolog Program • Knowledge Base • dog(X) : - barks(X), wags_tail(X)barks(woff)barks(spot)wags_tail( woff) • Queries • ? - dog(woff) => yes • ? - dog(spot) => no • Means no more matches found.

Using Variables • Knowledge Base • dog(X) : - barks(X), wags_tail(X)barks(woff)barks(spot)wags_ta il(woff) • Query • ? - dog(Y) => Y = woff

Prolog’s Search Algorithm • Prolog uses a goal directed search of the KB • Depth first search is used • Query clauses are used as goals and searched left to right • KB clauses are searched in the order they occur in the KB • Goals are matched to the head of clauses • Terms must unify based upon variable substitution before they match

Unification • Idea substitute terms for variables so that facts that match a predicate with a variable can be found. • A substitution is a function from variables to terms. • {V ® [a, b], Y® [a, b, c]} is a substitution. • Y {V ® [a, b], Y® [a, b, c]} = [a, b, c]

Facts and Rules in file links : link(fortran, algol 60) link(algol 60, cpl) link(cpl, bcpl) link(bcpl, c) link(c, c++) link(algol 60, simula 67) link(simula 67, c++) link(simula 67, smalltalk 80) Queries are also called goals. ? - link(cpl, bcpl) , link(bcpl, c) -----> yes

? - link(algol 60, L) and link(L, M)? A solution to query is a binding of variable to makes the query true. A query with solution is satisfiable. The system responds to a satisfiable query. L = cpl , M = bcpl ; L = simula 67 , M = c++ ; L = simula 67 , M = smalltalk 80 ; Universal Facts and Rules : A rule <term> : - <term>1, <term>2, ……<term>k head conditions

A fact is a special case of a rule. A fact has no head and conditions. path(L, L) ---> fact. We take a path of zero links to be from L to itself. Path(L, M) : - link(L, X), path(X, M) A path from L to M begins with a link to some X and continues along the path from X to M. Unification : Deduction in Prolog is based on concept of unification. ? - f(X, b) = f(a, Y) Here, f(a, b) is an instance of f(X, b) because it is obtained by substituting subterm ‘a’ for variable X in f(X, b). Similarly

f(a, b) is an instance of f(a, Y) because it is obtained by replacing subterm ‘b’ for variable Y in f(a, Y) X=a Y=b For Example, g(a, a) is an instance of g(x, x). However, g(a, b) is not an instance of g(x, x) because we cannot substitute ‘a’ for one occurrence of x and ‘b’ for another occurrence of x. Arithmetic • X = 2+3 ---> simply binds variable X to term 2+3 • X is 2+3 ---> The Infix operator evaluates expression and binds 5 to X.

? - X is 2+3 , X = 5 yes ? - X is 2+3 , X = 2+3 no fails because 2+3 does not unify with 5. Term 2+3 is the application of operator + to the arguments 2 and 3, whereas 5 is simply the integer 5. Hence, 2+3 does not unify with 5. Data Structures In Prolog supports several notations for writing Lisp-like lists. They sweeten the syntax without adding any new capabilities.

Lists in Prolog : • The simplest way to write a list is to enumerate its elements • The list containing three atoms a, b and c is written as [a, b, c] • Empty List is written as [ ] • Unification can be used to extract the components of a list. for example : ? - [H | T] = [a, b, c] ---> H = a , T = [b, c]. • In Prolog any tree can be written as term, any term can be written as tree. Example : Term node (K, S, T) can be represented as tree.

K S T • Let atom empty represent binary search tree (K, S, T) with an integer value K at the root, left subtree S, and right subtree T. Terms for representing Binary trees leaf nonleaf(leaf, leaf)

nonleaf(leaf, leaf), nonleaf(leaf, leaf) Member(k, node(k, _, _ ) represent a binary search tree with k at the root and some unnamed left and right subtrees. Beyond trees, variables in Prolog allow terms to represent data structures with sharing. Terms can also represent graphs with cycles.

5. 4 Programming Techniques How does Prolog process queries ? -by backtracking and unification backtracking unification - find solution if exist - place holder variable gets filled in later with value

Guess and Verify Query query: conclusion if guess(…, S, …) and verify(…, S, …); ? - conclusion( ) : - guess( ) , verify( ) find solution to guess( ) and match them against verify( ). If match then conclusion( ).

Example: ? - overlap(X, Y) : - member(M, X) , member(M, Y) find M from list X, and verify M also appears in list Y. If so, then overlap(X, Y).

Prolog processes from left to right. - Watch out for efficiency and unexpected. example: ? - X = [1, 2, 3] , member(a, X). X is a list of [1, 2, 3]. Is ‘a’ a member of X ? ? - member(a, X) , X = [1, 2, 3]. find all solution where a is member of X. ‘a’ can be anywhere in X, so finds infinite possibilities for a, but doesn’t find match in X.

Variable as place holders. open list - list with variable at end closed list - no variable at end Example: [ a, b | X ] ==> open list [ a , b ] ==> closed list

Prolog uses machine generated variables to represent variable at the end of list. Uses underscore + integer. example: ? - L = [ a , b | X ] L = [ a , b | _1] X = _1 variable _1 now corresponds to end marker X

Expand on previous example: ? - L = [ a , b | X ] , X = [ c , Y ] X = _1 L = [ a , b | _1 ] X = _1 = [ c , Y ] = [ c | _2 ] L = [ a , b | _1] = [ a , b | [ c | 2 ] ] = [ a , b , c | _2] _1 unifies with [ c | _2 ] -- like assignment

Example: Queue Manipulation enter( a, Q , R ) ==> when element ‘a’ enters queue Q, we get queue R leave( a , Q , R ) ==> when element ‘a’ leaves queue Q, we get queue R in queue q( L, E ) L = open list E = end marker ( some suffix of L ) content = elements of L, but not in E

Queue Manipulation Cont. Rules: setup( q( X , X ) ). enter( A , q( X , Y ) , q( X , Z ) : - Y = [ A | Z ]. leave( A , q( X , Z ) , q( X , Y ) : - Y = [ A | Y ]. wrapup( q( [ ] , [ ] ) ). What do these mean ?

setup( q( X , X ) ) returns q( open list , end marker ) Example: ? - setup( Q ) Q = q( X , X ) Q = q( _1 , _1 )

enter( A , q ( X, Y) , q(X, Z) ) : - Y = [A | Z]. In plain English: To enter element ‘A’ into queue q( X, Y) bind/unify/assign Y to list [ A | Z ] where Z is new end marker, and return resulting query q( X, Z)

Example: ? - setup(Q) Q = q( X , X ) Q = q( _1 , _1 ) ? - enter( a , Q , R ) rule: enter( a , q( X, Y) , q( X, Z ) ) : - Y = [ a | Z ] enter( a , q( _1 , _1) , q( X, Z ) ) X = _1 , Y = _1 Y binds to [ a | Z ] , Z = new marker _2 X = _1 = Y = [ a | _ 2 ] R = q ( X , Z ) --> q ( [ a | _2 ] , _2 )


Leave( A , q( X , Z ) , q( Y , Z ) ) : - X = [ A | Y ]. In plain English: To leave element ‘A’ from queue q( X , Z ) bind X to list [ A | Y ] and return q( Y , Z )
![Example S q a b 3 3 Example: S = q( [ a , b | _3] , _3 ) ?](https://slidetodoc.com/presentation_image/0323a6f36d37a9d0af6abb7a26c5f188/image-54.jpg)
Example: S = q( [ a , b | _3] , _3 ) ? - leave( X , S , T ) leave( elem. X , q( X, Z) , q(Y, Z) ) : - X = [elem. X | Y ] leave( elem. X , q( [a, b | _3] , _3 ) , q( Y, Z )) X = [a, b | _3 ] , Z = _3 X = [ elem. X | Y ] = [ a, b | _3] elem. X = a , Y = [ b | _3 ] T = q( Y, Z ) = q( [b |_3] , _3 )
![More examples T q b 3 3 More examples T = q( [ b | _3 ] , _3 ) ?](https://slidetodoc.com/presentation_image/0323a6f36d37a9d0af6abb7a26c5f188/image-55.jpg)
More examples T = q( [ b | _3 ] , _3 ) ? - leave( Y , T , U ) leave( elem. Y , q( X, Z ) , q( Y, Z) ) : - X = [ elem. Y | Y] leave( elem. Y , q( [ b | _3 ] , _3) , q( Y, Z ) ) X = [ b | _3 ] = [ elem. Y | Y ] elem. Y = b Y = _3 U = q( _3 , _3 )
![wrapup q returns empty list wrapup( q( [ ] , [ ] ) ) returns empty list ? -](https://slidetodoc.com/presentation_image/0323a6f36d37a9d0af6abb7a26c5f188/image-56.jpg)
wrapup( q( [ ] , [ ] ) ) returns empty list ? - wrapup( U ) assigns empty list to U U was q( _3 , _3 ) wrapup( U ) U = q( [ ] , [ ] ) _3 = [ ]

Difference List - made up of two lists L , E - content is elements in L but not in E - written as dl( L , E ) example: [ a, b ] can be written as - dl( [ a, b] , [ ] ) - dl( [ a, b, c] , [c] ) - dl( [ a, b | E ] , E ), …, etc

Control in Prolog algorithm = logic + control Prolog’s “flow” or search path is controlled by - Goal Order - Rule Order Goal order - left to right Rule order - top to bottom, first rule that fits

What effect does goal order and rule order have ? - might give you unexpected results if used inappropriately. i. e. infinite computation more on this later

Substitutions Substitution is a function that takes in a variable and returns terms. X --> T means variable X gets mapped to term T. Ts means result of applying a set of substitution s on T
![In plain English example s V b c Ya b In plain English example s = { V -> [b, c] , Y->[a, b,](https://slidetodoc.com/presentation_image/0323a6f36d37a9d0af6abb7a26c5f188/image-61.jpg)
In plain English example s = { V -> [b, c] , Y->[a, b, c] } What is Ys ? Substitute [ a, b, c] for Y answer: Ys = [ a, b, c] What is Zs ? Zs = Z , because no substitution

general unifier -You have terms T 1, T 2 - substitution that unifies T 1 with T 2 is a general unifier. Example: T 1 = append( [ ] , Y) T 2 = append( [ ] , [a | V] , [a, b, c] ) general unifier = { V-> [ b, c] , Y->[ a, b, c] }

Rules for Searching Path - without backtracking 1. Look at the left most goal 2. Find first rule that applies 3. Substitute 4. Replace with the conditional part 5. Repeat until all the goals are gone

example 11. 7 - search path see rules listed in Fig 11. 13 query: ? - suffix( [a] , L ) , prefix( L , [a, b, c] ) 1. Consider the left most goal, suffix() 2. Find the first rule that applies to this found rule: suffix( Y, Z ) : - append( X, Y, Z ) find substitution: suffix( [a] , L ) : - append( X, Y, Z)
![s Y a Z L X variable s = { Y -> [a] , Z -> L }, X = variable](https://slidetodoc.com/presentation_image/0323a6f36d37a9d0af6abb7a26c5f188/image-65.jpg)
s = { Y -> [a] , Z -> L }, X = variable _1 3. replace goal suffix with condition append: append( _1, [a] , L ) , prefix( L, [a, b, c] ) 4. look for rule that applies to append() found rule: append( [ ] , Y ) find substitution: append( _1 , [a] , L ) = append( [ ] , Y, Y) _1 = [ ] Y = [ a ] , Y = L , so L = [a]

Done with suffix() part, so now have only prefix( L , [ a, b, c] ), but L = [a] from previous, so we have prefix( [a] , [a, b, c] ) Find rule for this and found: prefix( X, Z ) : - append(X, Y, Z) find substitution and get: X = [a] , Y = _2 , Z = [a, b, c] replace prefix() with its condition append( [a] , _2 , [a, b, c])
![Find rule for append and get append HX Y Find rule for append and get: append( [ H|X ] , Y , [](https://slidetodoc.com/presentation_image/0323a6f36d37a9d0af6abb7a26c5f188/image-67.jpg)
Find rule for append and get: append( [ H|X ] , Y , [ H|Z ] : - append(X, Y, Z) find substitution for: append( [a] , _2 , [a, b, c]) : - append( X, Y, Z) X=[] Y = _2 Z = [ b, c] replace with condition to get: append( [ ] , _2 , [ b, c] ) apply rule append( [ ] , Y ) to get: _2 = Y , Y = [b, c] , so _2 = [b, c]

How backtracking works. When there’s no applicable rule for the term, we go back to the point where there were more than one way to apply rules, and take different path.
![Example Suffix b L prefix L a b c rule Example: -? Suffix( [b], L ) , prefix( L, [a, b, c] ) rule:](https://slidetodoc.com/presentation_image/0323a6f36d37a9d0af6abb7a26c5f188/image-69.jpg)
Example: -? Suffix( [b], L ) , prefix( L, [a, b, c] ) rule: suffix( Y, Z) : - append( X , Y , Z ) Y = [b] , Z = L , X = _1 replace: suffix() with append() append( _1 , [b] , L) , prefix( L , [a, b, c] ) rule: append( [ ] , Y ) Y = [b] prefix( [b] , [a, b, c] ) rule: prefix( X, Z) : - append( X, Y, Z) X = [b] , Z = [a, b, c] , Y = _2
![Now we have append b 2 a b c but cant Now we have: append( [b] , _2 , [a, b, c] ), but can’t](https://slidetodoc.com/presentation_image/0323a6f36d37a9d0af6abb7a26c5f188/image-70.jpg)
Now we have: append( [b] , _2 , [a, b, c] ), but can’t find applicable rule. At this point, we go back to append( _1 , [b] , L) , prefix( L , [a, b, c] ) try rule: append( [H|X] , Y , [H|Z) : append( X, Y, Z) so we get, _1 = [ _3 | _4] , X = _4 Y = [b] L = [ _3 | _5 ] , Z = _5 append( _4, [b], _5) , prefix( [ _3|_5 ], [a, b, c] ) and solve for this.

Obviously, goal order and rule order changes the way Prolog process.

Occurs-Check Problem. - substitution problem. Prolog does not check when substituting X --> T, that X occurs in T
![Example append E a b E Example: ? - append( [ ] , E , [ a, b | E](https://slidetodoc.com/presentation_image/0323a6f36d37a9d0af6abb7a26c5f188/image-73.jpg)
Example: ? - append( [ ] , E , [ a, b | E ] ) rule: append( [ ] , Y ) so , Y = E and Y = [ a , b | E ] E=Y=[a, b|E] = [ a , b | E ] ] =. . . goes on forever !

Cuts - basically telling the Prolog to stop backtracking after the cut is applied.

Example: having following rules: b: - c b: - d means: if b: -c does not yield success, then backtracks, and b: - d rule is used. b: - !, c ( ! means cut here ) b: - d this means if b: - c fail do not try b: - d rule.

Another example: conclusion(s) : - ! , cond 1(s) , cond 2(2) , … only checks for cond 1(s) , if this fail then conclusion fails. conclusion(s) : - cond 1(s) , ! , cond 2(2) , check for cond 1 check for cond 2, if fail stops

Application of Cut Using cut in not( ) operation rule: not( X ) : - X , ! , fail not( _ ).

Example: ? - X = 2 , not ( X=1 ) - do X = 2 , so X unifies with 2. - left with not ( 2 = 1 ) - use rule to get: 2 = 1 , ! , fail - 2 = 1 fails, not reaching the cut ! - so tries next rule not( _ ) and succeeds

? - not( X = 1 ) , X = 2 - apply rule and get: X=1 , ! , fail , X = 2 - X=1 succeeds - reaches the cut ! - reaches fail , because of cut no more condition processed and fails. so these would also fail ? - not( X=1 ) , X = 1

Prolog Key points. 1. Goal order, Rule order determines the search path 2. Substitution ( Unification ) 3. Backtracking allows to search all the paths 4. Cuts cut away unnecessary search path How do I program in Prolog ? • You “program” by supplying the rules. • You “run” the program by querying. Now you have learned to “program” and “run” the “program” in Prolog !!!
First order logic vs propositional logic
First order logic vs propositional logic
Third order logic
Biconditional proposition examples
Pros and cons of propositional logic
Translation
Propositional logic examples and solutions
Arguments in logic
Xor in propositional logic
Conditional proposition
Xor in propositional logic
Propositional logic notation
Implies in propositional logic
Prolog propositional logic
Contoh propositional logic
Implies in propositional logic
Contradiction formula
Biconditional
Discrete math propositional logic
Application of propositional logic
Components of a mathematical system
The proposition ~p ν (p ν q) is a
Predicate logic example
Fluent7
Valid arguments in propositional logic
Parse tree propositional logic
Tautology contingency or contradiction
Propositional logic symbols
Propositional logic exercises
Propositional logic exercises
Logical equivalence cheat sheet
Logic in mathematics
___________ is the limitation of propositional logic
Propositional logic in ai ppt
Examples of propositions
Proposition examples sentences
Logical connectives symbols
What is word
Propositional equivalences
Propositional network
Propositional functions examples
Generic knowledge
Propositional network
How a predicate function become a propositional function?
Mathematical logic formula
Propositional calculus
Definite clause in ai
Perbedaan linear programming dan integer programming
Greedy algorithm vs dynamic programming
What is in system programming
Integer programming vs linear programming
Definisi integer
Logic programming tutorial
Loop logic programming
Slidetodoc.com
Prolog design
Logic programming example
Automated logic programming
Abductive logic programming alp
What is visual logic
Programming logic exercises
Logic programming
Difference between code first and database first approach
Breadth first vs depth first
Maturity continuum model victories correct order
Sdl first vs code first
Put first things first activities
Habit 3 put first things first
First to file vs first to invent
First in first out
Dilakukan perintah top(push(b,s))
First in first out
First come first serve
Put first things first definition
First come first serve gantt chart
See do get model 7 habits
Habit 3 activities
Put first things first video
Put first things first activities
First aid merit badge first aid kit
Objectives of first aid