動物と人間像のレリーフで密に装飾されたいくつかのアーチヴォールトとキャピタル建築（円柱装飾）を除き、ロマネスク様式の原型をとどめる大聖堂西ファサードが全体を引き締める。あるアーチヴォールトは鶏、狐、ロマン・デ・レナルトやフランス伝統のような道徳的な歌を語っていたのだろう、吟遊詩人の彫刻レリーフがある。1486年から1501年にかけ、後期ゴシック様式の入り口歩廊（ガリレ）が主回廊を引き継ぎ建てられた。ガリレは畝模様のヴォールト、ガーゴイルと像で飾られていた。美しいマヌエル様式の金属製門は大聖堂内装の原型だが、18世紀に門はガリレから移動された。16世紀初頭、ディオゴ・デ・ソウサ大司教が、内部アーチヴォールトを犠牲にして、ロマネスク様式の主出入り口を修正した。ファサード上部と塔は18世紀に全体を現代風にしたが目を引く物ではない。南ファサードは興味深いロマネスクの出入り口がある。アプスの主礼拝堂で有名なのは、ソウサ大司教時代にバスク人建築家ジョアン・デ・カスティーリョにより1509年に再建されたことである。礼拝堂外部は美しい後期ゴシック様式で、ガーゴイルと小尖塔のついたマヌエル様式のトラセリーを持つ。畝模様のヴォールトが入り組んだ礼拝堂内装と合致している。主礼拝堂の外壁には、キリストに母乳を与える聖母マリア像（16世紀初頭）が、マヌエル様式に修繕した際の後援者、ポルトガル国家とソウサ大司教の紋章の間に立つ。
3世紀頃から司教座のあったブラガは、イベリア半島で最も古くにキリスト教化された町であり、ガラエキア（北西イベリア）のキリスト教布教の中心地であった。古代ローマ帝国が衰え、ゲルマン民族の侵入を受けると、ブラガ（当時はブラカラ・アウグスタと呼ばれた）はスエビ王国（409年-584年）の首都となった。その時代の偉大な信仰者マルティン・デ・ドゥミオ（のちの聖マルティン・デ・ブラガ）は、550年頃にスエビ族をアリウス派からカトリックに改宗させた。ブラガの重要性は、その後の西ゴート王国、716年のムーア人支配で衰退し司教座を失った。キリスト教徒がブラガを奪回したあと、司教座が復活したのは1071年頃だった。ペドロ司教が大聖堂建設を開始し、1089年に献堂された（東礼拝堂のみの完成であった）。エンリケ・デ・ボルゴーニャがポルトゥカーレ伯として支配を始めた1093年から、彼はゲラルド・デ・モイサク司教とともにローマ教皇を説得して1107年にブラガを大司教座にした。ブラガ大司教の権力は、現在のスペイン・ガリシア地方の一部とポルトガルの大部分を含む、イベリア半島北西部分の広大な地域に広がった。大聖堂建設が再開され、13世紀半ばまで続いたが、細部は人目を引かなかった。12世紀に建てられた原型部分は、クリュニー修道院のブルグンド風ロマネスク建築様式で建てられた。この建物は、同時代のポルトガル国内にある他の教会施設に影響を与えた。後世、大聖堂は極端に修正され、今日の姿はロマネスク、ゴシック、マヌエル、バロックの各様式の混合である。特に重要なものは、新礼拝堂の追加と、ゴシック様式の入り口歩廊、マヌエル様式の主礼拝堂、バロック時代の塔や礼拝堂、内部装飾のほとんどが多種付け加えられたことである。
四引数のappendの定義ができたところで、これを使って二文字以上の要素が昇順に並ぶリストを検索する。この探索は、対象がアトムではなくリストになる点で、member/2,append/3,select/3のそれに比べで強力である。二文字以上の要素が昇順に並ぶリストを検索する(_文字リスト,_前リスト,_二文字以上の要素が昇順に並ぶリスト,_後リスト) :-        append(_前リスト,_二文字以上の要素が昇順に並ぶリスト,_後リスト,_文字リスト),        要素が昇順に並んでいる(_二文字以上の要素が昇順に並ぶリスト).要素が昇順に並んでいる([A,B]) :-        A @=< B.要素が昇順に並んでいる([A,B|R]) :-        A @=< B,        要素が昇順に並んでいる([B|R]).append([],L2,L3,L4) :-        append(L2,L3,L4).append([U|L1],L2,L3,[U|L4]) :-        append(L1,L2,L3,L4).第二引数のリストが単純な性格を持ち、その性質が完結しているか検査する述語を書くような場合であるが、その程度の難度の検索ではappend/4は強力である。次に二文字以上の要素が昇順に並ぶのだが、各昇順文字リストのグループとしては最長の文字リストを検索する。二文字以上の要素が昇順に並ぶリストを検索する(_文字リスト,_前リスト,_二文字以上の要素が昇順に並ぶリスト,_後リスト) :-        append(L1,L2,L3,_文字リスト),        \+((last(_前リスト,A),_二文字以上の要素が昇順に並ぶリスト=[B|_],A @< B)),        \+((last(_二文字以上の要素が昇順に並ぶリスト,C),_後リスト=[D|_],C @< D)),        要素が昇順に並んでいる(_二文字以上の要素が昇順に並ぶリスト).last([A],A) :- !.last([A|R],B) :-        last(R,B).要素が昇順に並んでいる([A,B]) :-        A @=< B.要素が昇順に並んでいる([A,B|R]) :-        A @=< B,        要素が昇順に並んでいる([B|R]).last/2は第一引数のリストの最終要素が第二引数と単一化される。ここでは最後の要素と次のリストの先頭要素を比較している。検索文字列が先頭からだったり、末尾まで続いている場合には、第一引数や第三引数が[]になる。last/2は偽となりそれぞれ、        \+((last(_前リスト,A),_二文字以上の要素が昇順に並ぶリスト=[B|_],A @< B)),        \+((last(_二文字以上の要素が昇順に並ぶリスト,C),_後リスト=[D|_],C @< D)),それを否定しているから、ここの検査条件は真になる。