#### 11.3.223 `subsumes_term/2`

[ISO]

#### Synopsis

`subsumes_term(`

`+General``, `

`+Specific``)`

is true when `Specific` is an instance of `General`. It
does not bind any variables.

#### Arguments

`General`- any term.

`Specific`- any term.

#### Description

True iff there is a substitution that makes `General` identical to `Specific` and that does not affect `Specific`.

The predicate is determinate and either succeeds or fails. It never binds variables.

The predicate does not take any constraints, variable attributes, or blocked goals into
account when determining whether a substitution exists. This can be seen in the last two examples.

#### Examples

| ?- `subsumes_term(a, a).`
yes
| ?- `subsumes_term(f(X,Y), f(Z,Z)).`
yes
| ?- `subsumes_term(f(Z,Z), f(X,Y)).`
no
| ?- `subsumes_term(g(X), g(f(X))).`
no
| ?- `subsumes_term(X, f(X)).`
no
| ?- `subsumes_term(X, Y), subsumes_term(Y, f(X)).`
yes
| ?- `when(nonvar(X), X=a), subsumes_term(X, b), X = a.`
X = a ?
yes
| ?- `when(nonvar(X), X=a), subsumes_term(X, b), X = b.`
no

#### Exceptions

None.

#### See Also

ref-lte-met-usu.

Send feedback on this subject.