rusty-bidding-bot reference: engine 0.1.0, API 1, rules ad8ad4046d1e36b5 ======================================================================== A rule-based bridge bidding engine (Rust, compiled to WebAssembly) bidding all four hands of a deal in the browser, seat by seat, with the convention cards you choose. Generated from the page's own vocabulary and the engine it ships, so it describes exactly the tool served beside it. Page: https://bridge-craftwork.com/rusty-bidding-bot/ Source: https://github.com/bridge-craftwork/rusty-bidding-bot Engine: 46 convention modules, 2101 rules PAGE ---- Pick a deal (a Practice-Bidding-Scenarios scenario, a random deal, a dealer3 script or a deal of your own), the two partnerships' convention cards, and let the engine bid: one call at a time or to the end. Undo takes back the last call; the bidding box makes a call of your own, and the engine carries on from it. Alerted and announced calls are marked; the meanings of all calls can be shown. The x-ray shows, under the auction, every rule the engine weighed for a call (its priority, descriptiveness and why it lost), what each seat had shown and each side's forcing state before it, and how the engine reads BBA's auction. When the auction ends every hand is shown with the double-dummy table, par and the contract's result. For a scenario, BBA's auction of the same deal is shown beside ours. Settings a card switches on that no rule reads (conventions and treatments the engine does not play) are flagged. DEEP LINKS ---------- The page's state is in the URL fragment (never the query string), as key=value pairs joined by &, values URI-encoded: every INPUT field and every PARAMS field below whose value is text, a number or true/false. Examples: #scenario=Stayman&board=12 #random=true&seed=42&board=3&view=S #deal=N%3AAK52.KJ7.Q94.K83%20QJ3.Q95.KJ3.QJ74%20T64.AT832.A2.T62%20987.64.T8765.A95&dealer=N&vul=None&auction=1NT%20Pass&ns=21GF-DEFAULT&ew=Precision #scenario=Jacoby_2N&board=4&rotate=2&stop=3 #scenarioScript=Stayman&seed=7 #scenario=Stayman&board=12&xray=1 stop=N shows the position after N calls (the engine is deterministic, so the link reproduces them). xray=1 opens the x-ray under the auction (the rules the engine weighed for a call, what each seat had shown, the forcing state); xray=all shows it for every call. set is written path=value;path=value. An uploaded card cannot travel in a link. JAVASCRIPT API -------------- window.rustyBiddingBot = { run, validate, getInput, setInput, getOutput } run(input, params) Promise of the output. Loads input (null keeps the current deal), applies params, bids to params.stop and solves the deal when it ends. The page shows the result. validate(input, params) Promise of {ok, diagnostics}: checks without bidding (the deal, dealer, auction legality, cards, params; a dealer3 script's syntax). getInput() The input that reproduces the page's position. setInput(input) Promise: load input into the page (the calls in input.auction; the engine does not bid). getOutput() The page's state as data (below). input: an object with the fields below, or a string (a PBN deal "N: ", or PBN text of one board). scenario PBS scenario name, e.g. "Stayman" Deal a board from the Practice-Bidding-Scenarios corpus for this scenario (500 boards each, with BBA's own auction for comparison). Its convention cards become the default cards. board integer 1-500 Which corpus board (scenario), or the board number for dealer and vulnerability (random, script). Default 1. scenarioScriptPBS scenario name Deal fresh boards with that scenario's own dealer script (dealer3), from `seed`, instead of its corpus; its cards as for scenario. script dealer3 script text Deal with dealer3 (the dealer.exe language): the first deal the script produces from `seed`. `# convention-card-ns:` / `-ew:` lines in the script choose the cards. random true A random deal from `seed`. seed integer Seed for random and script deals, so a link reproduces the deal. Default 1. pbn PBN text of one board Its [Deal], [Dealer], [Vulnerable] and [Board] are read; its [Auction] is not. deal PBN deal "N: " (hands S.H.D.C) or {"N": hand, ...} The deal itself. dealer N | E | S | W Overrides the source's dealer. vul None | NS | EW | All Overrides the source's vulnerability. auction calls from the dealer, e.g. "1NT Pass 2C" (P, X, XX; 1N or 1NT) Calls already made: kept as they are (forced); the engine bids from there. params: ns card default: the scenario's card, else 21GF-DEFAULT North-South's convention card: a built-in card name (see "Cards"), "scenario", {"bbsa": "<.bbsa file text>"} or {"json": }. ew card default: the scenario's card, else 21GF-GIB East-West's card, the same forms. set ["path=value", ...] default: [] Card changes for both sides, e.g. "general.style=bba" or "notrump.stayman.play=false" (field paths: the conventions reference, `card:` lines). scoring MP | IMP default: the board's, else MP Matchpoints or IMPs; some rules judge by it. rotate 0 | 1 | 2 | 3 default: 0 Turn the deal this many seats clockwise (dealer and vulnerability turn with it). With odd turns the scenario's cards change sides too, so each hand keeps its system. stop "end" or an integer default: "end" How many calls to have on the table when run() returns: "end" bids the auction out. dd true | false default: true Solve the double-dummy table, par and the contract's result when the auction ends. view all | N | E | S | W default: all The page: show all four hands, or only this seat's until the auction ends. meanings true | false default: false The page: show what every call means, not only alerts. xray 0 | 1 | all default: 0 X-ray: every rule the engine weighed for each call (priority, descriptiveness, why each lost), what every seat had shown and each side's forcing state before the call, and how the engine read the call; for a scenario, how it read BBA's auction. 1: the page shows the selected call's x-ray under the auction (the last call when none is selected); all: every call's. With 1 or all the output carries `xray` (true and false are read as 1 and 0). output: ok false when a diagnostic is an error source "scenario" | "random" | "script" | "deal" scenario, board deal PBN deal, after rotation; hands {N, E, S, W} dealer, vul, scoring, rotate cards {ns, ew}: the names of the cards in play calls [{seat, call, by, why, meaning, alert, rule, noRule, shows}] by: "engine" | "you" | "forced" (from input.auction); why: the engine's reason for its call; meaning: what the call shows to the table; alert: null or {kind: "alert" | "announce", text}; noRule: no rule explains the call (a gap in the engine's system); shows: the caller's hand as known after the call complete, next, contract, declarer dd null, or {tricks: {N: {C, D, H, S, NT}, E, S, W}, par: {score_ns, contracts}, result: {contract, declarer, tricks, score_ns}} bba for a scenario, BBA's auction of the deal: {auction: [{seat, call, note}]} coverage {ns, ew}: of the settings each card switches on, read (the rules use them), ignored (no rule reads them: not played), unmapped (settings with no card field: .bbsa keys, card JSON paths), other (carding, leads), score = read / (read + ignored) xray null unless params.xray is 1 or "all"; then {calls: [{index, seat, call, by, hand, engineCall, engineWhy, offered, candidates, warnings, before, reading}], now, bba}. For each call: candidates are every rule the engine weighed for the caller's hand there, best-ranked first: {call, explanation, priority, descriptiveness, prefer, outcome, rule: {module, file, line}}, outcome "chosen", "outranked", "partner's call is forcing" or why the hand fails ("hand fails `shows hcp>=17`"); engineCall is what the engine bids with that hand there (for a call it did not make, too) and offered whether any rule offers the call actually made; before is the table before the call: {knowledge: {N, E, S, W: {hcp: {min, max}, lengths: {S, H, D, C}, balanced, summary, shown}}, sides: {ns, ew: {trump, forcing: "none" | "round" | "game", forcing_by, ask, answered, summary}}}; reading is how the table reads the call: {explanation, alert, rule, artificial, knowledge (the caller's, after it)}. now is the table after the last call, in the shape of before. bba (a scenario) is BBA's auction as the engine reads it: [{seat, call, note, reading, engineCall}]. diagnostics [{severity, message, line?, col?, hint?}] DIAGNOSTICS ----------- {severity: "error" | "warning" | "info", message, line?, col?, hint?}. message starts with the field it concerns (deal.N:, auction:, cards.ns:, params.scoring:, script:). line and col are 1-based: the column of a call in an auction string, the line of a key in a .bbsa card, the line and column in a dealer script. The page lists them under the table. CARDS ----- Built in (the Practice-Bidding-Scenarios .bbsa cards): 21GF-DEFAULT, 21GF-Flannery, 21GF-GIB-Bergen, 21GF-GIB, 21GF-Gazzilli, 21GF-MSS, 21GF-MSTandMSS, 21GF-Multi, 21GF-NoInvertedMinor, 21GF-Ogust, 21GF-PolishTwoSuiters, 21GF-Puppet, 21GF-SPECIALS, 21GF-SPECIALS2, 21GF-WJS-MSS, Basic-Bridge, Precision-14-16, Precision Also: a BBA .bbsa file ({"bbsa": text}), or a Bridge-Classroom convention card ({"json": card_data}, or the editor's export {"json": {schema, name, card_data}}: keys such as _bbo_raw are ignored); BC-21-Intermediate is Bridge-Classroom's 2/1 Intermediate card, built in. The page converts any card to either format (its JSON download is Bridge-Classroom's export). CONVENTIONS ----------- The engine's rules, module by module: the card fields that switch each module on, and every call it knows with what the call shows. # rusty-bidding-bot conventions reference # rbb 0.1.0 rules ad8ad4046d1e36b5 # 46 modules, 2101 rules # # Calls: P pass, X double, XX redouble; (..) the opponents' calls. # x/y any suit, M a major, m a minor. Text in {..} is filled in when bidding. == base: Natural opening bids file: conventions/base/base.bid after (any auction) when opening 1S 5+ spades shows hcp>=10, hcp+length_points>=min_open, hcp<=21, S>=5, S>=H, S>=D, S>=C when style is standard 1H 5+ hearts shows hcp>=10, hcp+length_points>=min_open, hcp<=21, H>=5, H>S, H>=D, H>=C when style is standard 1D 3+ diamonds shows hcp>=10, hcp+length_points>=min_open, hcp<=21, D>=3, D>C | D>=4, D>=C, H<=4 | H=10, hcp+length_points>=min_open, hcp<=21, C>D | (C=3, D=3), H<=4 | H=10, hcp+length_points>=min_open, hcp<=21, S>=5, S>=H, S>=D, S>=C, hcp>=11 | S<=5 | H<=3 | controls>=3 | (controls=2, !has(A,S), !has(A,H), !has(A,D), !has(A,C)) when style is not standard 1H 5+ hearts shows hcp>=10, hcp+length_points>=min_open, hcp<=21, H>=5, H>S, H>=D, H>=C, hcp>=11 | H<=5 | S<=3 | controls>=3 | (controls=2, !has(A,S), !has(A,H), !has(A,D), !has(A,C)) when style is not standard 1D 3+ diamonds shows hcp>=10, hcp+length_points>=min_open, hcp<=21, D>=3, D>C | D>=4, D>=C, H<=4 | H=11 | D<=5 | (H<=3, S<=3) | controls>=3 | (controls=2, !has(A,S), !has(A,H), !has(A,D), !has(A,C)) when style is not standard 1C 3+ clubs shows hcp>=10, hcp+length_points>=min_open, hcp<=21, C>D | (C=3, D=3), H<=4 | H=11 | C<=5 when style is not standard P No opening bid shows hcp<=min_open-1, hcp+length_points<=min_open-1 | hcp<=9 P No opening bid: ten HCP and a six-card suit that does not open shows hcp=10, longest=6 when style is not standard after (any auction) when opening, seat=3 1S Third seat: 10-11 with a good four-card spade suit shows S>=4, hcp=10..11, quality(S)>=good 1H Third seat: 10-11 with a good four-card heart suit shows H>=4, hcp=10..11, quality(H)>=good, S<=3 after (any auction) when opening, seat=4 P Fourth seat: the rule of 15 says pass shows hcp<=14 when hcp+S<=14 after (any auction) when game_reached P Game reached: nothing more to say after (any auction) when we.forcing=game, !game_reached 4{trump} Game in the agreed suit when we.trump is H | we.trump is S 5{trump} Game in the agreed suit when we.trump is C | we.trump is D 3N Game in notrump when we.trump is none 4S Game in the spade fit shows S+partner.S.min>=8 when we.trump is none 4H Game in the heart fit shows H+partner.H.min>=8 when we.trump is none 5D Game in the diamond fit shows D+partner.D.min>=8 when we.trump is none 5C Game in the club fit shows C+partner.C.min>=8 when we.trump is none == inverted-minors: Inverted minor raises file: conventions/base/inverted-minors.bid card: minor_openings.inverted_minors.play needs: responses after 1m (P) 2m Inverted raise: 10+, 4+ {m}, no 4-card major, forcing shows m>=4, hcp>=10, H<=3, S<=3 3m Weak raise: 5-9, 5+ {m}, no 4-card major shows m>=5, hcp=5..9, H<=3, S<=3 after 1C (P) 2C (P) 2N 12-14 balanced shows balanced, hcp<=14 3N 18-19 balanced shows balanced, hcp>=18 3C Minimum, unbalanced shows !balanced, hcp<=14 2D Extras or shape, a diamond stopper shows stop(D), hcp>=15 | !balanced 2H Extras or shape, a heart stopper shows stop(H), hcp>=15 | !balanced, !stop(D) 2S Extras or shape, a spade stopper shows stop(S), hcp>=15 | !balanced, !stop(H), !stop(D) 3H Splinter: heart shortness, four clubs shows H<=1, C>=4, hcp>=13 3S Splinter: spade shortness, four clubs shows S<=1, C>=4, hcp>=13 4C Slam try, extras and a fit shows C>=4, hcp>=16, !balanced after 1C (P) 2C (P) 2N (P) 3N Game values shows hcp>=13 3C Minimum, to play shows hcp<=12, !balanced P Minimum, balanced: 2NT is enough shows hcp<=12, balanced after 1C (P) 2C (P) 3C (P) 3N Game values, the majors held shows hcp>=13, stop(S), stop(H) 5C Game values shows hcp>=13 P Minimum shows hcp<=12 after 1C (P) 2C (P) 2D (P) | 1C (P) 2C (P) 2H (P) | 1C (P) 2C (P) 2S (P) 2N 10-12, balanced shows hcp<=12, balanced 3N Game values shows hcp>=13 3C 10-12, unbalanced shows hcp<=12 after 1C (P) 2C (P) 2D (P) 2N (P) | 1C (P) 2C (P) 2H (P) 2N (P) | 1C (P) 2C (P) 2S (P) 2N (P) 3N Game shows hcp>=15 3C Minimum, unbalanced shows hcp<=14 after 1C (P) 2C (P) 3H (P) 3N Hearts held shows hcp>=10, stop(H) 5C Game in clubs shows hcp>=12 4C Minimum shows hcp<=11 after 1C (P) 2C (P) 3S (P) 3N Spades held shows hcp>=10, stop(S) 5C Game in clubs shows hcp>=12 4C Minimum shows hcp<=11 after 1D (P) 2D (P) 2N 12-14 balanced shows balanced, hcp<=14 3N 18-19 balanced shows balanced, hcp>=18 3D Minimum, unbalanced shows !balanced, hcp<=14 2H Extras or shape, a heart stopper shows stop(H), hcp>=15 | !balanced 2S Extras or shape, a spade stopper shows stop(S), hcp>=15 | !balanced, !stop(H) 3H Splinter: heart shortness, four diamonds shows H<=1, D>=4, hcp>=13 3S Splinter: spade shortness, four diamonds shows S<=1, D>=4, hcp>=13 4D Slam try, extras and a fit shows D>=4, hcp>=16, !balanced after 1D (P) 2D (P) 2N (P) 3N Game values shows hcp>=13 3D Minimum, to play shows hcp<=12, !balanced P Minimum, balanced: 2NT is enough shows hcp<=12, balanced after 1D (P) 2D (P) 3D (P) 3N Game values, the majors held shows hcp>=13, stop(S), stop(H) 5D Game values shows hcp>=13 P Minimum shows hcp<=12 after 1D (P) 2D (P) 2H (P) | 1D (P) 2D (P) 2S (P) 2N 10-12, balanced shows hcp<=12, balanced 3N Game values shows hcp>=13 3D 10-12, unbalanced shows hcp<=12 after 1D (P) 2D (P) 2H (P) 2N (P) | 1D (P) 2D (P) 2S (P) 2N (P) 3N Game shows hcp>=15 3D Minimum, unbalanced shows hcp<=14 after 1D (P) 2D (P) 3H (P) 3N Hearts held shows hcp>=10, stop(H) 5D Game in diamonds shows hcp>=12 4D Minimum shows hcp<=11 after 1D (P) 2D (P) 3S (P) 3N Spades held shows hcp>=10, stop(S) 5D Game in diamonds shows hcp>=12 4D Minimum shows hcp<=11 == new-minor-forcing: New Minor Forcing file: conventions/base/new-minor-forcing.bid card: other_conventions.new_minor_forcing.play needs: responder-rebids after 1C (P) 1M (P) 1N (P) 2D New Minor Forcing: invitational+, 5+ {M} or both majors [alert] [artificial] shows M>=4, points>=11 after 1D (P) 1M (P) 1N (P) 2C New Minor Forcing: invitational+, 5+ {M} or both majors [alert] [artificial] shows M>=4, points>=11 after (any auction) when asked nmf 2H Three hearts shows H=3 when partner.H>=4 2S Three spades shows S=3 when partner.S>=4 2H Four hearts, not three spades shows H>=4, S<=2 when partner.S>=4 2N Minimum (12-13), no fit shows hcp<=13 3N Maximum (14), no fit shows hcp>=14 after (any auction) when answered nmf 4H Game in the heart fit shows points>=13, H>=5 | (H>=4, partner.H.min>=4) when partner.H>=3 3H Invitational, heart fit shows points=11..12, H>=5 | (H>=4, partner.H.min>=4) when partner.H>=3 4S Game in the spade fit shows points>=13, S>=5 when partner.S>=3 3S Invitational, spade fit shows points=11..12, S>=5 when partner.S>=3 3N Game, no fit shows points>=13 2N Invitational, no fit shows points=11..12 P Accepts the notrump game when partner.last=3N P No game: opener is minimum shows points<=12 when partner.last=2N == preempts: Weak two-bids and preempts file: conventions/base/preempts.bid needs: base after (any auction) when opening, seat<=2 2D Weak two: six diamonds, 4-9 shows D=6, hcp=4..9, H<=3, S<=3 when two_d is weak, style is standard, !vul 2D Weak two: six diamonds, 4-9, a good suit shows D=6, hcp=4..9, H<=3, S<=3, quality(D)>=good | top5(D)>=3 when two_d is weak, style is standard, vul 2H Weak two: six hearts, 4-10 shows H=6, hcp=4..10, S<=3 when two_h is weak, style is standard, !vul 2H Weak two: six hearts, 4-10, a good suit shows H=6, hcp=4..10, S<=3, quality(H)>=good | top5(H)>=3 when two_h is weak, style is standard, vul 2S Weak two: six spades, 4-10 shows S=6, hcp=4..10 when two_s is weak, style is standard, !vul 2S Weak two: six spades, 4-10, a good suit shows S=6, hcp=4..10, quality(S)>=good | top5(S)>=3 when two_s is weak, style is standard, vul 2D Weak two: six diamonds, 4-10 shows D=6, hcp=4..10, H<=3 | (!has(A,H), !has(K,H), !has(Q,H), !has(J,H)), S<=3 | (!has(A,S), !has(K,S), !has(Q,S), !has(J,S)), hcp<=9 | !has(A,D) | (!has(A,S), !has(A,H), !has(A,C)) when two_d is weak, style is not standard, !vul 2D Weak two: six diamonds, 4-10, a good suit shows D=6, hcp=4..10, quality(D)>=good | top5(D)>=3, H<=3 | (!has(A,H), !has(K,H), !has(Q,H), !has(J,H)), S<=3 | (!has(A,S), !has(K,S), !has(Q,S), !has(J,S)), hcp<=9 | !has(A,D) | (!has(A,S), !has(A,H), !has(A,C)) when two_d is weak, style is not standard, vul 2H Weak two: six hearts, 4-10 shows H=6, hcp=4..10, S<=3 | (!has(A,S), !has(K,S), !has(Q,S), !has(J,S)), hcp<=9 | !has(A,H) | (!has(K,H), !has(A,S), !has(A,D), !has(A,C)) when two_h is weak, style is not standard, !vul 2H Weak two: six hearts, 4-10, a good suit shows H=6, hcp=4..10, quality(H)>=good | top5(H)>=3, S<=3 | (!has(A,S), !has(K,S), !has(Q,S), !has(J,S)), hcp<=9 | !has(A,H) | (!has(K,H), !has(A,S), !has(A,D), !has(A,C)) when two_h is weak, style is not standard, vul 2S Weak two: six spades, 4-10 shows S=6, hcp=4..10, H<=3 | (!has(A,H), !has(K,H), !has(Q,H), !has(J,H)), hcp<=9 | !has(A,S) | (!has(K,S), !has(A,H), !has(A,D), !has(A,C)) when two_s is weak, style is not standard, !vul 2S Weak two: six spades, 4-10, a good suit shows S=6, hcp=4..10, quality(S)>=good | top5(S)>=3, H<=3 | (!has(A,H), !has(K,H), !has(Q,H), !has(J,H)), hcp<=9 | !has(A,S) | (!has(K,S), !has(A,H), !has(A,D), !has(A,C)) when two_s is weak, style is not standard, vul after (any auction) when opening, seat=3 2D Weak two, third seat: a good five-card suit will do shows D>=5, D<=6, hcp=4..9, H<=3, S<=3 when two_d is weak, D>=6 | quality(D)>=good 2H Weak two, third seat: a good five-card suit will do shows H>=5, H<=6, hcp=4..9, S<=3 when two_h is weak, H>=6 | quality(H)>=good 2S Weak two, third seat: a good five-card suit will do shows S>=5, S<=6, hcp=4..9 when two_s is weak, S>=6 | quality(S)>=good after (any auction) when opening, seat=4 2D Fourth seat: six diamonds, opening values shows D>=6, hcp>=12, hcp<=21 when two_d is weak 2H Fourth seat: six hearts, opening values shows H>=6, hcp>=12, hcp<=21 when two_h is weak 2S Fourth seat: six spades, opening values shows S>=6, hcp>=12, hcp<=21 when two_s is weak after (any auction) when opening, seat<=3 3C Preempt: seven clubs, 4-9 shows C=7, hcp=4..9, H<=3, S<=3 when !vul | quality(C)>=good | top5(C)>=3 3D Preempt: seven diamonds, 4-9 shows D=7, hcp=4..9, H<=3, S<=3 when !vul | quality(D)>=good | top5(D)>=3 3H Preempt: seven hearts, 4-9 shows H=7, hcp=4..9, S<=3 when !vul | quality(H)>=good | top5(H)>=3 3S Preempt: seven spades, 4-9 shows S=7, hcp=4..9 when !vul | quality(S)>=good | top5(S)>=3 4H Preempt: eight hearts shows H>=8, hcp=4..10, S<=3 4S Preempt: eight spades shows S>=8, hcp=4..10 5C Preempt: eight clubs shows C>=8, hcp=4..10, H<=3, S<=3 5D Preempt: eight diamonds shows D>=8, hcp=4..10, H<=3, S<=3 3D Preempt: six diamonds and four clubs, 4-8 shows D=6, C=4, hcp=4..8 when !vul, seat<=2, style is bba 3C Preempt: six clubs and four diamonds, 4-8 shows C=6, D=4, hcp=4..8 when !vul, seat<=2, style is bba after 3H (P) 4H Raise to game shows H>=4 | (H=3, tp(H)>=9) | (H=2, hcp>=15) after 3S (P) 4S Raise to game shows S>=4 | (S=3, tp(S)>=9) | (S=2, hcp>=15) after 3C (P) 5C Game in clubs: 17+ and a doubleton shows C>=2, hcp>=17 5C Game in clubs shows C>=4, shortest<=1 | hcp>=12 | (C>=3, hcp>=15, shortest<=1) when !vul 4C Preemptive raise shows C>=3, hcp<=11 when !vul 5C Game in clubs shows C>=3, hcp>=15 | (C>=4, hcp>=12, shortest<=1) when vul 4C Invitational raise shows C>=2, hcp=9..14 when vul after 3D (P) 5D Game in diamonds: 17+ and a doubleton shows D>=2, hcp>=17 5D Game in diamonds shows D>=4, shortest<=1 | hcp>=12 | (D>=3, hcp>=15, shortest<=1) when !vul 4D Preemptive raise shows D>=3, hcp<=11 when !vul 5D Game in diamonds shows D>=3, hcp>=15 | (D>=4, hcp>=12, shortest<=1) when vul 4D Invitational raise shows D>=2, hcp=9..14 when vul == rebids: Opener's rebid file: conventions/base/rebids.bid needs: responses after 1x (P) 1y (P) 2y Raise: 4+ {y}, minimum shows y>=4, tp(y)<=15 when style is not bba 3y Jump raise: 4+ {y}, 16-18 shows y>=4, tp(y)=16..18 when y is H | y is S, style is not bba 2y Raise (BBA): 4+ {y}, minimum shows y>=4, hcp+length_points<=14 when style is bba 3y Jump raise (BBA): 4+ {y}, 15-17 shows y>=4, hcp+length_points>=15, hcp<=17, hcp<=16 | tp(y)<=18 when y is H | y is S, style is bba 3y Jump raise: 4+ {y}, 16+ shows y>=4, tp(y)>=16 when y is C | y is D 2x Rebids {x}: 6+, minimum shows x>=6, suit_points<=15 3x Jump rebid: 6+ {x}, 16-18 shows x>=6, suit_points=16..18 when style is not bba 3x Jump rebid (BBA): 6+ {x}, 15-18 shows x>=6, hcp=15..18 when style is bba 2x Rebids {x}: five or more, too weak to reverse shows x>=5, suit_points<=18 when x is C | x is D 1N 12-14 HCP, balanced shows balanced | shape 5-4-2-2, hcp=12..14, y<=3 2N 18+ HCP, balanced shows balanced | shape 5-4-2-2, hcp>=18, y<=3 2N 18-19 HCP, balanced shows balanced, hcp=18..19, y<=3 1N Minimum, no better rebid shows hcp<=14, y<=3 3x Jump rebid: 6+ {x}, too good for a simple rebid shows x>=6, suit_points>=16 2N 15-17 balanced, no other rebid shows balanced, hcp=15..17, y<=3 after 1x (P) 1M (P) 4M Game raise: 4+ {M}, 19+ shows M>=4, tp(M)>=19 when style is not bba 4M Game raise (BBA): 4+ {M}, 18 HCP, or 17 and 19 support points shows M>=4, hcp>=18 | (hcp>=17, tp(M)>=19) when style is bba after 1C (P) 1D (P) 1N 12-14 HCP, balanced (Walsh: a major may be hidden) shows balanced | shape 5-4-2-2, hcp=12..14 when style is not bba, style is not standard 1N 12-14 HCP, balanced, no four-card major shows balanced | shape 5-4-2-2, hcp=12..14, H<=3, S<=3 when style is standard 1H 4+ hearts, up to 18 shows H>=4, suit_points<=18, H>=S when style is not bba | S>=4 1S 4+ spades, up to 18 shows S>=4, suit_points<=18, S>H when style is not bba 2H Jump shift: 4+ hearts, 19+ shows H>=4, suit_points>=19 when style is not bba 2S Jump shift: 4+ spades, 19+ shows S>=4, suit_points>=19 when style is not bba 1N BBA: 12-17, no six clubs, not both majors shows hcp=12..17, H<=4, S<=4, H<=3 | S<=3, C<=5, D<=4, shortest>=2 | C=5 when style is bba 2H Jump shift (BBA): 4+ hearts, 18+ shows H>=4, hcp>=18, H>=S when style is bba 2S Jump shift (BBA): 4+ spades, 18+ shows S>=4, hcp>=18, S>H when style is bba after 1C (P) 1H (P) 1S 4+ spades, up to 18 shows S>=4, suit_points<=18 when H<=3 2D Reverse: 4+ diamonds, longer clubs, 17+ shows D>=4, C>D, suit_points>=17 2S Jump shift: 4+ spades, 19+ shows S>=4, suit_points>=19 3D Jump shift: 4+ diamonds, 19+ shows D>=4, suit_points>=19 after 1C (P) 1S (P) 2D Reverse: 4+ diamonds, longer clubs, 17+ shows D>=4, C>D, suit_points>=17 2H Reverse: 4+ hearts, longer clubs, 17+ shows H>=4, C>H, suit_points>=17 3D Jump shift: 4+ diamonds, 19+ shows D>=4, suit_points>=19 3H Jump shift: 4+ hearts, 19+ shows H>=4, suit_points>=19 after 1D (P) 1H (P) 1S 4+ spades, up to 18 shows S>=4, suit_points<=18 when H<=3 1N 12-14 HCP, balanced shows balanced, hcp=12..14, H<=3 when style is not bba 1N 12-13 HCP, balanced: four clubs too (BBA) shows balanced, hcp=12..13, H<=3, C=4 when style is bba 2C 4+ clubs, up to 18 shows C>=4, suit_points<=18, D>=C 2S Jump shift: 4+ spades, 19+ shows S>=4, suit_points>=19 3C Jump shift: 4+ clubs, 19+ shows C>=4, suit_points>=19 after 1D (P) 1S (P) 2C 4+ clubs, up to 18 shows C>=4, suit_points<=18, D>=C 1N 12-14 HCP, balanced shows balanced, hcp=12..14, S<=3 when style is not bba 1N 12-13 HCP, balanced: four clubs too (BBA) shows balanced, hcp=12..13, S<=3, C=4 when style is bba 2H Reverse: 4+ hearts, longer diamonds, 17+ shows H>=4, D>H, suit_points>=17 3C Jump shift: 4+ clubs, 19+ shows C>=4, suit_points>=19 3H Jump shift: 4+ hearts, 19+ shows H>=4, suit_points>=19 after 1H (P) 1S (P) 2C 4+ clubs, up to 18 shows C>=4, suit_points<=18 2D 4+ diamonds, up to 18 shows D>=4, suit_points<=18, D>=C | C<=3 3C Jump shift: 4+ clubs, 19+ shows C>=4, suit_points>=19 3D Jump shift: 4+ diamonds, 19+ shows D>=4, suit_points>=19 after 1x (P) 1N (P) P Minimum, nothing more to show shows suit_points<=15 P Balanced, no game opposite 6-10 shows balanced, hcp<=17 2x Rebids {x}: five or more, too good to pass and no reverse shows x>=5, suit_points=16..18 2x Rebids {x}: 6+, minimum shows x>=6, suit_points<=15 3x Jump rebid: 6+ {x}, 16-18 shows x>=6, suit_points=16..18 when style is not bba 2N 18-19 HCP, balanced shows balanced, hcp=18..19 3N 18+: game, no better description shows hcp>=18 3x Jump rebid (BBA): 6+ {x}, 15-18 shows x>=6, hcp=15..18 when style is bba after 1S (P) 1N (P) 2C 4+ clubs, up to 18 shows C>=4, suit_points<=18 2D 4+ diamonds, up to 18 shows D>=4, suit_points<=18, D>=C | C<=3 2H 4+ hearts, up to 18 shows H>=4, suit_points<=18 3C Jump shift: 4+ clubs, 19+ shows C>=4, suit_points>=19 3D Jump shift: 4+ diamonds, 19+ shows D>=4, suit_points>=19 3H Jump shift: 4+ hearts, 19+ shows H>=4, suit_points>=19 3H Jump shift (BBA): 4+ hearts, 17+ shows H>=4, suit_points>=17 when style is bba 3C Jump shift (BBA): 4+ clubs, 18+ shows C>=4, suit_points>=18 when style is bba 3D Jump shift (BBA): 4+ diamonds, 18+ shows D>=4, suit_points>=18 when style is bba 4H 5-5 in the majors, 16+ (BBA) shows H>=5, hcp>=16 when style is bba after 1H (P) 1N (P) 2C 4+ clubs, up to 18 shows C>=4, suit_points<=18 2D 4+ diamonds, up to 18 shows D>=4, suit_points<=18, D>=C | C<=3 2S Reverse: 4+ spades, longer hearts, 17+ shows S>=4, H>S, suit_points>=17 3C Jump shift: 4+ clubs, 19+ shows C>=4, suit_points>=19 3D Jump shift: 4+ diamonds, 19+ shows D>=4, suit_points>=19 3C Jump shift (BBA): 4+ clubs, 18+ shows C>=4, suit_points>=18 when style is bba 3D Jump shift (BBA): 4+ diamonds, 18+ shows D>=4, suit_points>=18 when style is bba after 1D (P) 1N (P) 2C 4+ clubs, up to 18 shows C>=4, suit_points<=18 2H Reverse: 4+ hearts, longer diamonds, 17+ shows H>=4, D>H, suit_points>=17 2S Reverse: 4+ spades, longer diamonds, 17+ shows S>=4, D>S, suit_points>=17 after 1C (P) 1N (P) 2D Reverse: 4+ diamonds, longer clubs, 17+ shows D>=4, C>D, suit_points>=17 2H Reverse: 4+ hearts, longer clubs, 17+ shows H>=4, C>H, suit_points>=17 2S Reverse: 4+ spades, longer clubs, 17+ shows S>=4, C>S, suit_points>=17 after 1m (P) 1y (P) | 1m (P) 2y (P) 3N 18-21 with six or more {m}: to play shows m>=6, hcp=18..21 when y is not m after 1M (P) 1y (P) | 1M (P) 2y (P) 4M 19+ with six or more {M}: game shows M>=6, hcp+length_points>=19 when y is not M, style is not bba 4M Game (BBA): seven {M} and 13+, or six and 19+ shows M>=6, (M>=7, hcp>=13) | hcp>=19 when y is not M, style is bba after 1m (P) 1N (P) 3N 18-21 with six or more {m}: to play shows m>=6, hcp=18..21 after 1M (P) 1N (P) 4M 19+ with six or more {M}: game shows M>=6, hcp+length_points>=19 when style is not bba 4M Game (BBA): seven {M} and 13+, or six and 19+ shows M>=6, (M>=7, hcp>=13) | hcp>=19 when style is bba after 1x (P) 2x (P) P Minimum: no game shows tp(x)<=16 when style is not bba | x is C | x is D 3x Invitation: 17-18 with the fit shows tp(x)=17..18 when style is not bba | x is C | x is D after 1M (P) 2M (P) 4M Game: 19+ with the fit shows tp(M)>=19 when style is not bba P Minimum (BBA): up to 15 HCP shows hcp<=15, M<=5 | hcp<=13 when style is bba 3M Invitation (BBA): 16 HCP, or 14-15 with six trumps shows (hcp=16, M<=5, tp(M)<=18) | (hcp=14..15, M>=6) when style is bba 4M Game (BBA): 17+, or 16 with six trumps or shortness shows hcp>=17 | (hcp=16, M>=6 | tp(M)>=19) when style is bba after 1m (P) 2m (P) 2N 18-19 HCP, balanced shows balanced, hcp=18..19 3N 20-21 HCP, balanced shows balanced, hcp>=20 3N Nine tricks: a running {m}, the other suits stopped shows m>=6, quality(m)>=2, hcp>=16, stop(C) | m is C, stop(D) | m is D, stop(H), stop(S) 5{m} Game: 19+ support points, no notrump shows tp(m)>=19 after 1M (P) 3M (P) 4M Accepts the limit raise shows tp(M)>=15 P Declines: minimum shows tp(M)<=14 after 1m (P) 3m (P) 3N Accepts, balanced: 14+ shows hcp>=14, balanced | semibalanced 5m Accepts, unbalanced: game in the minor shows hcp>=14 P Declines: minimum shows hcp<=13 after 1m (P) 2N (P) 3N Accepts: 14+ shows hcp>=14 P Declines: 12-13 shows hcp<=13 after 1M (P) 2x (P) when x is not M 2M Rebids {M}: 5+, minimum shows M>=5, suit_points<=15 2M Rebids {M}: five or more, too weak to reverse shows M>=5, suit_points<=18 3M Jump rebid: 6+ {M}, 16-18 shows M>=6, suit_points=16..18 3x Raise: 4+ {x} shows x>=4 2N 15-17 HCP, balanced shows balanced, hcp=15..17 3N 18-19 HCP, balanced shows balanced, hcp=18..19 after 1S (P) 2C (P) 2D 4+ diamonds shows D>=4 2H 4+ hearts shows H>=4 after 1S (P) 2D (P) 2H 4+ hearts shows H>=4 3C 4+ clubs, extras shows C>=4, suit_points>=16 after 1S (P) 2H (P) 3H Raise: 3+ hearts shows H>=3 4H Game raise: 3+ hearts, 14-17 shows H>=3, suit_points=14..17 3C 4+ clubs, extras shows C>=4, suit_points>=16 3D 4+ diamonds, extras shows D>=4, suit_points>=16 after 1H (P) 2C (P) 2D 4+ diamonds shows D>=4 2S Reverse: 4+ spades, longer hearts, 17+ shows S>=4, H>S, suit_points>=17 after 1H (P) 2D (P) 2S Reverse: 4+ spades, longer hearts, 17+ shows S>=4, H>S, suit_points>=17 3C 4+ clubs, extras shows C>=4, suit_points>=16 after 1D (P) 2C (P) 2D Rebids diamonds: minimum shows D>=5, suit_points<=15 3D Jump rebid: 6+ diamonds, 16-18 shows D>=6, suit_points=16..18 2D Rebids diamonds: five or more, no better rebid shows D>=5, suit_points<=18 3C Raise: 4+ clubs shows C>=4 2H 4+ hearts shows H>=4 2S 4+ spades shows S>=4 2N 12-14 HCP, balanced shows balanced, hcp=12..14 3N 18-19 HCP, balanced shows balanced, hcp=18..19 after 1x (P) 1N (P) 2z (P) 3x (P) when z is not x 4x Game in the fit: 19+ shows suit_points>=19 when x is H | x is S 5x Game in {x}: 19+ with six shows x>=6, suit_points>=20 when x is C | x is D 3N Game in notrump: 19+ shows hcp>=19 when x is C | x is D P Minimum for the reverse: play three shows suit_points<=19 after 1x (P) 3y (P) when y is not x, we.trump is none P Minimum, no fit shows hcp<=13 3N Accepts: 14+, to play notrump shows hcp>=14, y<=2 | y is C | y is D 4y Accepts in the fit: 14+ shows y>=2, suit_points>=14 when y is H | y is S 4x Accepts in my own suit: seven, or six with four top honours shows x>=7 | (x>=6, top5(x)>=4), hcp>=14, y<=1 | y is C | y is D when x is H | x is S after 1x (P) 1y (P) 1z (P) 1M (P) 2M Raise: 4+ {M}, minimum shows M>=4, tp(M)<=15 3M Jump raise: 4+ {M}, 16-18 shows M>=4, tp(M)=16..18 4M Game raise: 4+ {M}, 19+ shows M>=4, tp(M)>=19 1N Minimum, no fit for {M} shows M<=3, hcp<=15 2N 16-18, no fit for {M} shows M<=3, hcp=16..18 2x Six or more {x} shows x>=6, suit_points<=15 after (any auction) when asked signoff, !partner.opened P Nothing to add: partner is limited 2x Six or more {x}: a better spot shows x>=6, suit_points<=15 when maybe partner.x<=2 3x Six or more {x}, 16-18: one more try shows x>=6, suit_points=16..18 3x Raise: 16-18 with the fit shows x>=3, suit_points=16..18 when partner.x>=5 2y Preference: three or more {y} shows y>=3 when partner.y>=5 4M Game: 6+ {M}, 19+ shows M>=6, suit_points>=19 4M Game in the fit: 19+ shows M>=3, suit_points>=19 when partner.M>=4 after (any auction) when asked signoff, partner.opened P Nothing to add: partner's rebid was a minimum after (any auction) when asked invite(m) P Declines: no more than a minimum 3N Accepts, in notrump: 14+ and a shape for it shows hcp>=14, balanced | semibalanced 5m Accepts in {m}: 18+ with the fit shows hcp>=18, m>=5 after 1x (*) 1z (*) when they.bid, z is not x cheapest(z) Raise: four or more {z}, minimum shows z>=4, tp(z)<=15 when partner.z>=4 jump(z) Jump raise: four or more {z}, 16-18 shows z>=4, tp(z)=16..18 when partner.z>=4, z is H | z is S jump(z) Jump raise: four or more {z}, 16+ shows z>=4, tp(z)>=16 when partner.z>=4, z is C | z is D 4{z} Game raise: four or more {z}, 19+ shows z>=4, tp(z)>=19 when partner.z>=4, z is H | z is S cheapest(x) Rebids {x}: six or more, minimum shows x>=6, suit_points<=15 jump(x) Jump rebid: six or more {x}, 16-18 shows x>=6, suit_points=16..18 4{x} Game: six or more {x}, 19+ shows x>=6, suit_points>=19 when x is H | x is S P Nothing to say: they have bid again after 1x (*) 1z (P) when they.bid, z is not x 1H Four or more hearts, up to 18 shows H>=4, suit_points<=18 when x is not H, z is not H, maybe lho.H<=4, maybe rho.H<=4 1S Four or more spades, up to 18 shows S>=4, suit_points<=18 when x is not S, z is not S, maybe lho.S<=4, maybe rho.S<=4 cheapest(C) Four or more clubs, up to 18 shows C>=4, suit_points<=18 when x is not C, z is not C, maybe lho.C<=4, maybe rho.C<=4 cheapest(D) Four or more diamonds, up to 18 shows D>=4, suit_points<=18 when x is H | x is S, z is not D, maybe lho.D<=4, maybe rho.D<=4 2H Reverse: four or more hearts, longer {x}, 17+ shows H>=4, x>H, suit_points>=17 when x is C | x is D, z is not H, maybe lho.H<=4, maybe rho.H<=4 2S Reverse: four or more spades, longer {x}, 17+ shows S>=4, x>S, suit_points>=17 when x is not S, z is not S, maybe lho.S<=4, maybe rho.S<=4 2D Reverse: four or more diamonds, longer clubs, 17+ shows D>=4, C>D, suit_points>=17 when x is C, z is not D, maybe lho.D<=4, maybe rho.D<=4 cheapest(x) Rebids {x}: five or more, nothing better to say shows x>=5, suit_points<=18 cheapest(x) Partner's free bid needs an answer after 1x (1y) 1z (P) | 1x (2y) 1z (P) when y is not x, z is not x, z is not y cheapest(N) 12-14 balanced with a stopper in {y} shows balanced | shape 5-4-2-2, hcp=12..14, z<=3 when stop(y) jump(N) 18-19 balanced with a stopper in {y} shows balanced, hcp=18..19, z<=3 when stop(y) 3N Game: 19+ with a stopper in {y} shows hcp>=19, stop(y), z<=3 cheapest(y) Cue bid: 19+, forcing to game [alert] [artificial] shows suit_points>=19 after 1x (X) 1z (P) when z is not x cheapest(N) 12-14 balanced shows balanced | shape 5-4-2-2, hcp=12..14, z<=3 jump(N) 18-19 balanced shows balanced, hcp=18..19, z<=3 after 1x (X) 1z (1y) when z is not x, y is not x, y is not z X 18+: a strong hand, more to say shows hcp>=18 when !support_x | z is C | z is D | !((support_through is none, rho.last<=2{z}) | rho.last<=support_through) after 1x (X) 1z (1y) X (P) * (P) when z is not x, y is not x, y is not z, !answered support cheapest(N) 18-19 balanced with a stopper in {y} shows balanced, hcp=18..19, stop(y) 3N 20+ balanced with a stopper in {y} shows balanced, hcp>=20, stop(y) cheapest(x) Six or more {x}, the strong hand shows x>=6 P Partner's answer is as far as we go after 1x (*) 2z (*) | 1x (*) 3z (*) | 1x (*) 4z (*) when they.bid, z is not x cheapest(z) Raise: three or more {z} for partner's five shows z>=3, tp(z)<=17 when partner.z>=5 cheapest(z) Raise: four or more {z}, minimum shows z>=4, tp(z)<=17 when partner.z>=4, maybe partner.z<=4 4{z} Game raise: 18+ with the fit shows z>=3, tp(z)>=18 when partner.z>=4, z is H | z is S cheapest(x) Rebids {x}: six or more, minimum shows x>=6, suit_points<=15 jump(x) Jump rebid: six or more {x}, 16-18 shows x>=6, suit_points=16..18 4{x} Game: six or more {x}, 19+ shows x>=6, suit_points>=19 when x is H | x is S P Minimum with no fit: partner's bid was limited shows suit_points<=15 cheapest(x) Rebids {x}: five or more, nothing better to say shows x>=5 cheapest(S) Four or more spades shows S>=4, suit_points<=18 when x is not S, z is not S, maybe lho.S<=4, maybe rho.S<=4, we.forcing=round, partner.z>=5 cheapest(H) Four or more hearts shows H>=4, suit_points<=18 when x is not H, z is not H, maybe lho.H<=4, maybe rho.H<=4, we.forcing=round, partner.z>=5 cheapest(z) Raise with extras: 18+, forcing to game shows z>=3, tp(z)>=18 when partner.z>=5, new_suit_forcing cheapest(x) Forced to bid: nothing better to say when we.forcing=round, partner.z>=5 P Nothing to say after 1x (1y) 2z (P) | 1x (2y) 2z (P) | 1x (2y) 3z (P) | 1x (3y) 3z (P) when y is not x, z is not x, z is not y cheapest(N) Balanced with a stopper in {y}, minimum shows balanced | shape 5-4-2-2, hcp<=15, z<=3 when stop(y) jump(N) 16-18 balanced with a stopper in {y} shows balanced, hcp=16..18, z<=3 when stop(y) 3N Game: 17+ with a stopper in {y} shows hcp>=17, stop(y) cheapest(y) Cue bid: 18+, forcing to game [alert] [artificial] shows suit_points>=18 after 1x (X) 2z (P) when z is not x cheapest(N) Balanced, minimum shows balanced | shape 5-4-2-2, hcp<=15, z<=3 after 1x (*) 2x (*) when they.bid P Minimum: no game shows tp(x)<=16 cheapest(x) Invitation: 17-18 with the fit shows tp(x)=17..18 4{x} Game: 19+ with the fit shows tp(x)>=19 when x is H | x is S 3N Game: 19+ balanced, nowhere else to play shows balanced, hcp>=19 when x is C | x is D P Nothing to say after 1x (*) 3x (*) when they.bid 4{x} Game: 19+ opposite a preemptive raise shows tp(x)>=19 when x is H | x is S 5{x} Game: 19+ opposite a preemptive raise shows tp(x)>=19 when x is C | x is D P Nothing to add to a preemptive raise after 1x (2y) 3x (P) when y is not x, !partner.jumped 3N Game: 16+ with a stopper in {y} shows hcp>=16, stop(y) when x is C | x is D 4{x} Game: 17+ support points shows tp(x)>=17 when x is H | x is S 5{x} Game in the minor: 18+ shows hcp>=18 when x is C | x is D after 1x (*) 4x (*) when they.bid, x is C | x is D 5{x} Game: 16+ with the fit shows hcp>=16 P No game shows hcp<=15 after 1x (*) 1N (*) when they.bid P Minimum: partner is limited shows suit_points<=15 cheapest(x) Rebids {x}: six or more, minimum shows x>=6, suit_points<=15 jump(x) Jump rebid: six or more {x}, 16-18 shows x>=6, suit_points=16..18 jump(N) 18-19 balanced shows balanced, hcp=18..19 4{x} Game: six or more {x}, 19+ shows x>=6, suit_points>=19 when x is H | x is S cheapest(N) 16-17: invites 3NT shows hcp=16..17 when !lho.last=X jump(N) 18+: game opposite 6-10 shows hcp>=18 when !lho.last=X P Nothing to say after 1x (X) XX (*) cheapest(x) Rebids {x}: six or more shows x>=6, suit_points<=18 cheapest(S) Five or more spades shows S>=5, suit_points<=18 when x is not S, maybe lho.S<=4, maybe rho.S<=4 cheapest(H) Five or more hearts shows H>=5, S<=4, suit_points<=18 when x is not H, maybe lho.H<=4, maybe rho.H<=4 cheapest(D) Five or more diamonds shows D>=5, S<=4, H<=4, suit_points<=18 when x is not D, maybe lho.D<=4, maybe rho.D<=4 cheapest(C) Five or more clubs shows C>=5, S<=4, H<=4, suit_points<=18 when x is not C, maybe lho.C<=4, maybe rho.C<=4 P Partner has the values: over to him after 1x (*) P (*) when they.bid, maybe lho.hcp<=14, maybe rho.hcp<=14 cheapest(x) Rebids {x}: six or more, a free bid with extras shows x>=6, suit_points=13..18 after 1x (*) P (*) when they.bid P Partner has nothing: let them have it after 1x (1y) P (P) | 1x (2y) P (P) | 1x (3y) P (P) when y is not x X Reopening double: short in {y}, support for the other suits shows y<=2, hcp>=12, (S>=3 | x is S | y is S, H>=3 | x is H | y is H, D>=3 | x is D | y is D, C>=3 | x is C | y is C) | hcp>=16 cheapest(S) Five or more spades, 14+ shows S>=5, suit_points>=14 when x is not S, y is not S cheapest(H) Five or more hearts, 14+ shows H>=5, S<=4, suit_points>=14 when x is not H, y is not H cheapest(D) Five or more diamonds, 14+ shows D>=5, S<=4, H<=4, suit_points>=14 when x is not D, y is not D cheapest(C) Five or more clubs, 14+ shows C>=5, S<=4, H<=4, D<=4, suit_points>=14 when x is not C, y is not C cheapest(N) 18-19 balanced with a stopper in {y} shows balanced, hcp=18..19 when stop(y) after (any auction) when asked nt_invite, !partner.opened 3S Six or more spades: not a maximum shows S>=6, strength<=invite 4S Six or more spades: accepts shows S>=6, strength>=game 3H Six or more hearts: not a maximum shows H>=6, S<=3, strength<=invite 4H Six or more hearts: accepts shows H>=6, S<=3, strength>=game == responder-rebids: Responder's second call file: conventions/base/responder-rebids.bid needs: rebids after 1x (P) 1y (P) 1N (P) P Weak: no game shows points<=10 2y Weak: 6+ {y} shows y>=6, points<=10 when y is H | y is S 3y Invitational: 6+ {y}, 11-12 shows y>=6, points=11..12 2N Invitational: 11-12 shows points=11..12, y<=5 3N Game: 13+ shows points>=13, y<=5 | y is C | y is D 2x Weak: 5+ {x} shows x>=5, points<=10 after 1x (P) 1M (P) 1N (P) 4M Game: 6+ {M} shows M>=6, points>=13 after 1M (P) 1y (P) 1N (P) 3M Invitational: 3 {M}, 11-12 support points shows M=3, tp(M)=11..12 after 1C (P) 1D (P) 1N (P) 2H Responder's reverse: 4+ hearts, 5+ diamonds, game forcing shows H>=4, D>=5, points>=13 2S Responder's reverse: 4+ spades, 5+ diamonds, game forcing shows S>=4, D>=5, points>=13 after 1C (P) 1H (P) 1N (P) 2D 4+ diamonds, 5+ hearts, not forcing shows D>=4, H>=5, points<=12 when !nmf 2S Responder's reverse: 4+ spades, 5+ hearts, game forcing shows S>=4, H>=5, points>=13 after 1C (P) 1S (P) 1N (P) 3H Four hearts, five spades, game forcing shows H>=4, S>=5, points>=13 2D 4+ diamonds, 5+ spades, not forcing shows D>=4, S>=5, points<=12 when !nmf 2H 4+ hearts, 5+ spades, not forcing shows H>=4, S>=5, points<=12 after 1D (P) 1H (P) 1N (P) 2C 4+ clubs, 5+ hearts, not forcing shows C>=4, H>=5, points<=12 when !nmf 2S Responder's reverse: 4+ spades, 5+ hearts, game forcing shows S>=4, H>=5, points>=13 after 1D (P) 1S (P) 1N (P) 3H Four hearts, five spades, game forcing shows H>=4, S>=5, points>=13 2C 4+ clubs, 5+ spades, not forcing shows C>=4, S>=5, points<=12 when !nmf 2H 4+ hearts, 5+ spades, not forcing shows H>=4, S>=5, points<=12 after 1H (P) 1S (P) 1N (P) 2C 4+ clubs, 5+ spades, not forcing shows C>=4, S>=5, points<=12 2D 4+ diamonds, 5+ spades, not forcing shows D>=4, S>=5, points<=12 after 1x (P) 1y (P) 2x (P) P Weak: no game shows points<=10 2y Weak: 6+ {y} shows y>=6, points<=10 3y Invitational: 6+ {y}, 11-12 shows y>=6, points=11..12 3x Raise: 2+ {x}, 10-12 shows x>=2, points=10..12 3x Raise (BBA): 3+ {x}, 7-9, to compete shows x>=3, points=7..9 when style is bba, x is C | x is D 2N Invitational: 11-12 shows points=11..12, x<=1, y<=5 3N Game: 13+ shows points>=13, x<=2 | x is C | x is D after 1M (P) 1y (P) 2M (P) 4M Game: 2+ {M}, 13+ shows M>=2, points>=13 after 1x (P) 1y (P) 2y (P) P Weak: no game shows tp(y)<=10 3y Invitational: 11-12 shows tp(y)=11..12 after 1x (P) 1M (P) 2M (P) 4M Game: 13+ shows tp(M)>=13 after 1C (P) 1D (P) 2D (P) 3N Game: 13+ shows points>=13 after 1C (P) 1D (P) 1H (P) 1S 4+ spades shows S>=4, H<=3 after 1x (P) 1y (P) 1z (P) 1N 6-10, no fit shows points<=10, z<=3 2x Preference: 3+ {x}, weak shows x>=3, points<=10, z<=3 2z Raise: 4+ {z}, weak shows z>=4, points<=10 3z Invitational raise: 4+ {z}, 11-12 shows z>=4, points=11..12 2y Weak: 6+ {y} shows y>=6, points<=10 3y Invitational: 6+ {y}, 11-12 shows y>=6, points=11..12 2N Invitational: 11-12 shows points=11..12, z<=3 3N Game: 13+ shows points>=13, z<=3 after 1x (P) 1y (P) 1M (P) 4M Game raise: 4+ {M}, 13+ shows M>=4, points>=13 after 1D (P) 1H (P) 1S (P) 2C 5+ clubs, 8-10 shows C>=5, points=8..10, S<=3 when !fsf after 1x (P) 1y (P) 2z (P) when z is not x, z is not y P Weak: passes {z} shows points<=10, z>=4 | z>x 2x Preference: weak shows x>=2, points<=10, x>=z | (z<=3, x is H) | (z<=3, x is S) 2y Weak: 6+ {y} shows y>=6, points<=10 3z Invitational raise: 4+ {z} shows z>=4, points=11..12 3x Invitational: 3+ {x} shows x>=3, points=11..12 2N Invitational: 11-12 shows points=11..12, z<=3 3N Game: 13+ shows points>=13, z<=3 | z is C | z is D 2N Forced to bid: minimum, no fit shows points<=10 when we.forcing=round after 1x (P) 1y (P) 3x (P) P Weak: no game shows points<=8 3N Game: 9+ shows points>=9, x<=1 | x is C | x is D after 1M (P) 1y (P) 3M (P) 4M Game: 2+ {M}, 8+ shows M>=2, points>=8 after 1x (P) 1y (P) 3y (P) P Weak: no game shows points<=8 3N Game: 8+ shows points>=8 when y is not H, y is not S after 1x (P) 1M (P) 3M (P) 4M Game: 9+ shows points>=9 after 1x (P) 1y (P) 2N (P) P Weak: no game shows points<=6 3N Game: 7+ shows points>=7, y<=5 | y is C | y is D after 1x (P) 1M (P) 2N (P) 4M Game: 6+ {M} shows M>=6, points>=7 after 1x (P) 1N (P) 2z (P) when z is not x P Passes: {z} at least as long, or a four-card {z} shows z>=4 | z>x 3m Six or more {m}, short in both of opener's suits: to play shows m>=6, x<=1, z<=2 when m is not x, m is not z 2x Preference: 2+ {x} shows x>=2, x>=z | (z<=3, x is H) | (z<=3, x is S) 3z Raise: 4+ {z}, 9-10 shows z>=4, points=9..10 after 1x (P) 1N (P) 2x (P) P No game shows hcp<=10 3x Raise: 3+ {x}, maximum for the 1NT response shows x>=3, points>=10 3x Raise: 2+ {x}, 8-10: invites game shows x>=2, hcp>=8 when x is H | x is S after 1x (P) 1N (P) 3x (P) P No game shows points<=8 3N Game, no fit shows points>=9, x<=1 | x is C | x is D after 1M (P) 1N (P) 3M (P) 4M Game: 2+ {M}, 8+ shows M>=2, points>=8 after 1x (P) 1N (P) 2N (P) P No game shows points<=6 3N Game: 7+ shows points>=7 after 1y (P) 2x (P) 2z (P) when x is not y 2N Invitational, no fit: 11-12 shows points=11..12, y<=2 | y is C | y is D 3N Game, no fit shows points>=13, y<=2 | y is C | y is D 3x Invitational: 6+ {x}, 11-12 shows x>=6, suit_points=11..12, y<=2 | y is C | y is D 2y Preference: 2+ {y}, nothing better to say shows y>=2, suit_points<=12 P Minimum for the two-over-one: no game shows suit_points<=12 after 1M (P) 2x (P) 2z (P) when x is not M 4M Game with support shows tp(M)>=11, M>=3 | (M>=2, partner.M>=6) after 1y (P) 2x (P) 3x (P) when x is not y 4x Game in the fit shows suit_points>=11 when x is H | x is S 3N Game shows points>=12, y<=2 | y is C | y is D when x is H | x is S | (x is C | y is C | stop(C) | partner.cued(C) | partner.C.min>=4 | shown.C.min>=4, x is D | y is D | stop(D) | partner.cued(D) | partner.D.min>=4 | shown.D.min>=4, x is H | y is H | stop(H) | partner.cued(H) | partner.H.min>=4 | shown.H.min>=4, x is S | y is S | stop(S) | partner.cued(S) | partner.S.min>=4 | shown.S.min>=4) P Minimum for the two-over-one shows suit_points<=12 after 1y (P) 2x (P) 3x (P) when x is C | x is D, x is not y cheapest(C) Stopper in C, looking for 3NT when x is not C, y is not C, cheapest_rank(C)<19, points>=12, stop(C), !(x is C | y is C | stop(C) | partner.cued(C) | partner.C.min>=4 | shown.C.min>=4, x is D | y is D | stop(D) | partner.cued(D) | partner.D.min>=4 | shown.D.min>=4, x is H | y is H | stop(H) | partner.cued(H) | partner.H.min>=4 | shown.H.min>=4, x is S | y is S | stop(S) | partner.cued(S) | partner.S.min>=4 | shown.S.min>=4) cheapest(D) Stopper in D, looking for 3NT when x is not D, y is not D, cheapest_rank(D)<19, points>=12, stop(D), !(x is C | y is C | stop(C) | partner.cued(C) | partner.C.min>=4 | shown.C.min>=4, x is D | y is D | stop(D) | partner.cued(D) | partner.D.min>=4 | shown.D.min>=4, x is H | y is H | stop(H) | partner.cued(H) | partner.H.min>=4 | shown.H.min>=4, x is S | y is S | stop(S) | partner.cued(S) | partner.S.min>=4 | shown.S.min>=4) cheapest(H) Stopper in H, looking for 3NT when x is not H, y is not H, cheapest_rank(H)<19, points>=12, stop(H), !(x is C | y is C | stop(C) | partner.cued(C) | partner.C.min>=4 | shown.C.min>=4, x is D | y is D | stop(D) | partner.cued(D) | partner.D.min>=4 | shown.D.min>=4, x is H | y is H | stop(H) | partner.cued(H) | partner.H.min>=4 | shown.H.min>=4, x is S | y is S | stop(S) | partner.cued(S) | partner.S.min>=4 | shown.S.min>=4) cheapest(S) Stopper in S, looking for 3NT when x is not S, y is not S, cheapest_rank(S)<19, points>=12, stop(S), !(x is C | y is C | stop(C) | partner.cued(C) | partner.C.min>=4 | shown.C.min>=4, x is D | y is D | stop(D) | partner.cued(D) | partner.D.min>=4 | shown.D.min>=4, x is H | y is H | stop(H) | partner.cued(H) | partner.H.min>=4 | shown.H.min>=4, x is S | y is S | stop(S) | partner.cued(S) | partner.S.min>=4 | shown.S.min>=4) cheapest(y) No stopper to show below 3NT: over to you when cheapest_rank(y)<19, points>=12, !(x is C | y is C | stop(C) | partner.cued(C) | partner.C.min>=4 | shown.C.min>=4, x is D | y is D | stop(D) | partner.cued(D) | partner.D.min>=4 | shown.D.min>=4, x is H | y is H | stop(H) | partner.cued(H) | partner.H.min>=4 | shown.H.min>=4, x is S | y is S | stop(S) | partner.cued(S) | partner.S.min>=4 | shown.S.min>=4) 5x Game in the minor: a suit unstopped shows points>=12 when !(x is C | y is C | stop(C) | partner.cued(C) | partner.C.min>=4 | shown.C.min>=4, x is D | y is D | stop(D) | partner.cued(D) | partner.D.min>=4 | shown.D.min>=4, x is H | y is H | stop(H) | partner.cued(H) | partner.H.min>=4 | shown.H.min>=4, x is S | y is S | stop(S) | partner.cued(S) | partner.S.min>=4 | shown.S.min>=4) after 1M (P) 2x (P) 3x (P) when x is not M 4M Game with support shows tp(M)>=11, M>=3 after 1y (P) 2x (P) 3z (P) when x is not y, z is not y, z is not x 3N Game, no fit shows points>=10, y<=2 | y is C | y is D after 1M (P) 2x (P) 3z (P) when x is not M, z is not M, z is not x 4M Game with support shows tp(M)>=11, M>=3 after 1y (P) 2x (P) 2N (P) when x is not y 3N Game: the two-over-one was 11+ shows points>=11 P Nothing: a minimum two-over-one after 1y (P) 2x (P) 3y (P) when x is not y 3N Game, no fit shows points>=11, y<=1 | y is C | y is D P Nothing: a minimum two-over-one after 1M (P) 3M (P) 3N (P) 4M Prefers the major: four trumps shows M>=4 after 1M (P) 2M (P) 3M (P) 4M Accepts: top of the raise shows tp(M)>=9 when style is not bba P Declines shows tp(M)<=8 when style is not bba 4M Accepts (BBA): 10 HCP, or four trumps and a singleton shows hcp>=10 | (M>=4, shortest<=1) when style is bba P Declines (BBA) when style is bba after 1M (P) 2x (P) 3M (P) when x is not M 4M Game shows points>=11 after 1x (P) 1N (P) 2y (P) when y is not x, we.forcing=round 3N Game: a maximum for the 1NT response shows hcp>=9 3{y} Raise: four or more {y} shows y>=4 3{x} Preference to {x} shows x>=2 after 1x (*) X (*) 1z (*) | 1x (*) X (*) 2z (*) | 1x (*) X (*) 3z (*) when they.bid P Minimum for the double: nothing more to say shows hcp+length_points<=10 cheapest(z) Raise: four or more {z}, 11-12 shows z>=4, hcp+length_points=11..12 when partner.z>=3 4{z} Game in {z}: 13+ with the fit shows z>=4, hcp+length_points>=13 when partner.z>=3, z is H | z is S 4{z} Game opposite opener's jump: 8+ with the fit shows z>=4, hcp+length_points>=8 when partner.z>=3, z is H | z is S, partner.jumped cheapest(N) Invitational: 11-12 balanced shows balanced, hcp+length_points=11..12 jump(N) Game: 13+ balanced shows balanced, hcp+length_points>=13 P Nothing more to say after 1x (1y) X (P) 1z (P) | 1x (1y) X (P) 2z (P) | 1x (1y) X (P) 3z (P) | 1x (2y) X (P) 2z (P) | 1x (2y) X (P) 3z (P) when y is not x, y is not z 3N Game: 13+, a stopper in {y} shows hcp+length_points>=13, stop(y) when partner.z<=3 | z is C | z is D cheapest(y) Cue bid: 13+, no stopper in {y}, forcing to game [alert] [artificial] shows hcp+length_points>=13 after 1x (X) XX (1y) P (P) | 1x (X) XX (2y) P (P) | 1x (X) XX (3y) P (P) when y is not x X Penalty: four good {y} behind the bidder shows y>=4 when quality(y)>=good | top5(y)>=3 cheapest(x) Back to partner's suit: three or more, 10-11 shows x>=3, hcp<=11 3N Game: 12+ with a stopper in {y} shows hcp>=12, stop(y) 4{x} Game: 12+ with three-card support shows x>=3, hcp>=12 when x is H | x is S cheapest(y) Cue bid: 12+, no stopper, forcing to game [alert] [artificial] shows hcp>=12 when !stop(y), cheapest_rank(y)<=18 cheapest(S) Five or more spades shows S>=5 when x is not S, y is not S cheapest(H) Five or more hearts shows H>=5, S<=4 when x is not H, y is not H P Nothing to say over their escape after 1x (1y) P (P) X (P) | 1x (2y) P (P) X (P) | 1x (3y) P (P) X (P) when y is not x P Passes the reopening double: four or more {y} shows y>=4 cheapest(S) Four or more spades for the reopening double shows S>=4, S>=H, S>=D, S>=C when x is not S, y is not S cheapest(H) Four or more hearts for the reopening double shows H>=4, H>S, H>=D, H>=C when x is not H, y is not H cheapest(D) Four or more diamonds for the reopening double shows D>=4, D>S, D>H, D>=C when x is not D, y is not D cheapest(C) Four or more clubs for the reopening double shows C>=4, C>S, C>H, C>D when x is not C, y is not C cheapest(x) Back to partner's suit shows x>=3 cheapest(N) Balanced with a stopper in {y} shows balanced when stop(y) P Nothing better than defending after 1x (*) P (*) P (P) when they.bid P Partner had no reopening bid either: let them play it after 1x (*) 1y (*) 1z (*) when they.bid, y is not x, z is not x, z is not y cheapest(N) 6-10, no fit shows points<=10, z<=3 cheapest(x) Preference: three or more {x}, weak shows x>=3, points<=10, z<=3 cheapest(z) Raise: four or more {z}, weak shows z>=4, points<=10 jump(z) Invitational raise: four or more {z}, 11-12 shows z>=4, points=11..12 cheapest(y) Weak: six or more {y} shows y>=6, points<=10 jump(y) Invitational: six or more {y}, 11-12 shows y>=6, points=11..12 jump(N) Game: 13+ shows points>=13, z<=3 4{z} Game raise: four or more {z}, 13+ shows z>=4, points>=13 when z is H | z is S P Nothing to say after 1x (*) 1y (*) 2z (*) when they.bid, y is not x, z is not x, z is not y cheapest(x) Preference: two or more {x} shows x>=2, points<=12 cheapest(z) Raise: four or more {z} shows z>=4, points>=10 cheapest(y) Weak: six or more {y} shows y>=6, points<=10 cheapest(N) No fit, forced to bid shows points<=12 jump(N) Game: 13+ shows points>=13, z<=3 P Weak, and partner may pass shows points<=10 P Nothing to say after 1x (*) 1z (*) P (P) | 1x (*) 2z (*) P (P) when they.bid, z is not x cheapest(z) Six or more {z}: worth one more shows z>=6, points>=8 cheapest(x) Preference: three or more {x}, worth one more shows x>=3, points>=10 when partner.x>=5 P Minimum: they have bought it after 1x (*) X (*) 1N (*) | 1x (*) X (*) 2N (*) when they.bid P Minimum for the double: no game shows points<=10 cheapest(S) Weak: six or more spades shows S>=6, points<=10 cheapest(H) Weak: six or more hearts shows H>=6, S<=5, points<=10 cheapest(N) Invitational: 11-12 shows points=11..12 jump(N) Game: 13+ shows points>=13 P Nothing more to say after 1x (*) X (*) P (P) when they.bid cheapest(S) Five or more spades and 11+: worth competing shows S>=5, points>=11 cheapest(H) Five or more hearts and 11+: worth competing shows H>=5, S<=4, points>=11 cheapest(x) Preference to partner's suit with 11-12 shows x>=3, points=11..12 P Partner had nothing to say either after 1x (1y) X (1y) P (P) | 1x (1y) X (2y) P (P) | 1x (1y) X (3y) P (P) | 1x (2y) X (3y) P (P) when y is not x 3N Game: 13+ with a stopper in {y} shows points>=13, stop(y) 4{x} Game in partner's major: 13+ with three shows x>=3, points>=13 when x is H | x is S 5{x} Game in partner's minor: 13+ with three shows x>=3, points>=13 when x is C | x is D after 1C (P) 1S (P) 1N (P) 3H (P) | 1D (P) 1S (P) 1N (P) 3H (P) 4H Four hearts shows H>=4 4S Three spades shows S=3, H<=3 3N Neither fit shows S<=2, H<=3 after (any auction) when asked stoppers, trump is C | trump is D 3N Every suit stopped: 3NT when trump is C | stop(C) | partner.cued(C) | me.cued(C) | partner.C.min>=4 | shown.C.min>=4, trump is D | stop(D) | partner.cued(D) | me.cued(D) | partner.D.min>=4 | shown.D.min>=4, trump is H | stop(H) | partner.cued(H) | me.cued(H) | partner.H.min>=4 | shown.H.min>=4, trump is S | stop(S) | partner.cued(S) | me.cued(S) | partner.S.min>=4 | shown.S.min>=4 cheapest(C) Stopper in C, looking for 3NT when trump is not C, cheapest_rank(C)<19, stop(C), !partner.cued(C), !me.cued(C), !partner.C.min>=4, !shown.C.min>=4 cheapest(D) Stopper in D, looking for 3NT when trump is not D, cheapest_rank(D)<19, stop(D), !partner.cued(D), !me.cued(D), !partner.D.min>=4, !shown.D.min>=4 cheapest(H) Stopper in H, looking for 3NT when trump is not H, cheapest_rank(H)<19, stop(H), !partner.cued(H), !me.cued(H), !partner.H.min>=4, !shown.H.min>=4 cheapest(S) Stopper in S, looking for 3NT when trump is not S, cheapest_rank(S)<19, stop(S), !partner.cued(S), !me.cued(S), !partner.S.min>=4, !shown.S.min>=4 5{trump} A suit unstopped: game in the minor after 1m (P) 2m (P) 3m (P) 3N Accepts: the top of the raise shows hcp>=9 P Declines: 6-8 shows hcp<=8 after 1x (1y) P (P) 1N (P) | 1x (2y) P (P) 2N (P) when y is not x 3N Game opposite 18-19: 7+ shows hcp>=7 P No game shows hcp<=6 after 1x (1z) 1y (P) 2x (P) when z is not x, z is not y, y is not x 3x Invitational: 3+ {x}, 11-12 shows x>=3, points=11..12 4x Game: 3+ {x}, 13+ shows x>=3, points>=13 when x is H | x is S 3y Invitational: 6+ {y}, 11-12 shows y>=6, points=11..12 2N Invitational: 11-12, {z} stopped shows points=11..12, stop(z), x<=2 3N Game: 13+, {z} stopped shows points>=13, stop(z), x<=2 | x is C | x is D cheapest(z) Cue bid: 13+, no stopper in {z}, forcing to game [alert] [artificial] shows points>=13 when cheapest_rank(z)<=18 after 1x (1z) 1y (P) 2y (P) when z is not x, z is not y, y is not x 3y Invitational: 11-12 with the fit shows tp(y)=11..12 4y Game: 13+ with the fit shows tp(y)>=13 when y is H | y is S 3N Game: 13+, {z} stopped shows points>=13, stop(z) when y is C | y is D after 1x (1z) 1y (P) 1N (P) when z is not x, z is not y, y is not x 2N Invitational: 11-12 shows points=11..12, y<=5 3N Game: 13+ shows points>=13, y<=5 | y is C | y is D 3y Invitational: 6+ {y}, 11-12 shows y>=6, points=11..12 4y Game: 6+ {y}, 13+ shows y>=6, points>=13 when y is H | y is S after 1x (1y) 2z (P) 2M (P) | 1x (1y) 2z (P) 3M (P) | 1x (2y) 2z (P) 2M (P) | 1x (2y) 2z (P) 3M (P) | 1x (2y) 3z (P) 3M (P) when y is not x, z is not x, z is not y, M is not x, M is not y, M is not z 4M Game: four {M}, 13+ shows M>=4, points>=13 cheapest(M) Raise: four {M}, 11-12 shows M>=4, points=11..12 3N Game: 13+, {y} stopped shows points>=13, stop(y), M<=3 cheapest(x) Preference: 11-12 shows x>=3, points=11..12, M<=3 cheapest(y) Cue bid: 13+, no stopper, forcing to game [alert] [artificial] shows points>=13 when cheapest_rank(y)<=18 P Minimum: no game shows points<=10 cheapest(x) Preference: two or more {x} shows x>=2 after 1x (1y) 2z (P) 2x (P) | 1x (1y) 2z (P) 3x (P) | 1x (2y) 2z (P) 3x (P) | 1x (2y) 3z (P) 3x (P) when y is not x, z is not x, z is not y 4x Game: 3+ {x}, 13+ shows x>=3, points>=13 when x is H | x is S 3N Game: 13+, {y} stopped shows points>=13, stop(y) cheapest(x) Invitational raise: 3+ {x}, 11-12 shows x>=3, points=11..12 cheapest(y) Cue bid: 13+, no stopper, forcing to game [alert] [artificial] shows points>=13 when cheapest_rank(y)<=18 after 1x (1y) 2z (P) 3z (P) | 1x (2y) 2z (P) 3z (P) when y is not x, z is not x, z is not y 4z Game in the fit: 13+ shows points>=13 when z is H | z is S 3N Game: 13+, {y} stopped shows points>=13, stop(y) when z is C | z is D cheapest(y) Cue bid: 13+, no stopper, forcing to game [alert] [artificial] shows points>=13 when z is C | z is D, cheapest_rank(y)<=18 after 1x (2y) 3z (P) 4z (P) when y is not x, z is not x, z is not y, z is C | z is D 5{z} Game in the minor: 13+ shows points>=13 P No game shows points<=12 after 1x (X) XX (1y) 2x (P) | 1x (X) XX (2y) 2x (P) | 1x (X) XX (1y) 3x (P) | 1x (X) XX (2y) 3x (P) when y is not x 4{x} Game: 12+ with a doubleton or better shows x>=2, hcp>=12 when x is H | x is S 3N Game: 12+ with a stopper in {y} shows hcp>=12, stop(y) when x is C | x is D | x<=1 5{x} Game in the minor: 13+ shows x>=2, hcp>=13 when x is C | x is D 3{x} Invitational: 10-11 with a doubleton shows x>=2, hcp=10..11 when partner.last=2{x} P Minimum for the redouble: no game after (any auction) when partner.last=1N | partner.last=2N, me.has_bid | style is not bba, partner.balanced, !they.bid | lho.last=P, we.trump is none, !asked 3N Game: 25+ between us, partner at his minimum shows points+partner.points.min>=25 2N Invitation: game if partner is at the top shows points+partner.points.max>=25 when partner.last=1N P No game: under 25 between us shows points+partner.points.max<=26 after 1x (X) 1z (1y) X (P) when z is not x, y is not x, y is not z, !asked support cheapest(N) A stopper in {y}, nothing more to show shows stop(y), z<=5 cheapest(z) Five or more {z} shows z>=5 cheapest(x) Three or more of partner's {x} shows x>=3 cheapest(z) Nothing else to say: {z} again == responses: Responses to one-level suit openings file: conventions/base/responses.bid needs: base after 1C (P) when over_1c is up_the_line 1D 4+ diamonds, 6+ HCP shows D>=4, hcp>=6, D>=H, D>H | D=4, D>=S, D>S | D=4 1H 4+ hearts, 6+ HCP shows H>=4, hcp>=6, H>=D, H>D | H>=5, H>=S, H>S | H=4 1S 4+ spades, 6+ HCP shows S>=4, hcp>=6, S>=D, S>D | S>=5, S>H | S>=5, S>=H after 1C (P) when over_1c is walsh 1D 4+ diamonds, 6+ HCP: no four-card major, or game forcing (12+ HCP) shows D>=4, hcp>=6, (H<=3, S<=3) | hcp>=12, D>=H, D>=S 1H 4+ hearts, 6+ HCP shows H>=4, hcp>=6, H>=S, H>S | H=4, hcp<=11 | H>D 1S 4+ spades, 6+ HCP shows S>=4, hcp>=6, S>H | S>=5, S>=H, hcp<=11 | S>D after 1C (P) 1N 6-10 HCP, balanced, no 4-card major or diamonds shows hcp=6..10, H<=3, S<=3, D<=3 when !inverted | C<=4 2D Strong jump shift: 15+, 5+ diamonds shows D>=5, hcp>=15 when strong_js, !passed_hand after 1D (P) 1H 4+ hearts, 6+ HCP shows H>=4, hcp>=6, H>=S, H>S | H=4 when hcp<=10 | H>=C 1S 4+ spades, 6+ HCP shows S>=4, hcp>=6, S>H | S>=5, S>=H when hcp<=10 | S>=C 1N 6-10 HCP, no 4-card major shows hcp=6..10, H<=3, S<=3 when !inverted | D<=4 2C 11+ points, 4+ clubs shows C>=4, points>=11 | C>=6, suit_points>=10, H<=3 | C>H, S<=3 | C>S 3C Invitational jump shift: 10-12, 6+ clubs shows C>=6, points=10..12, H<=3, S<=3 when inv_js after 1m (P) 2m Raise: 6-9, 5+ {m}, no 4-card major shows m>=5, hcp>=6, points<=9, H<=3, S<=3 when !inverted 3m Limit raise: 10-12 HCP, 5+ {m}, no 4-card major shows m>=5, hcp=10..12, H<=3, S<=3 when !inverted 3N Game values, no 4-card major shows hcp>=13, H<=3, S<=3 when !inverted 2N 11-12, balanced, no 4-card major shows balanced, points=11..12, H<=3, S<=3 when nt2 is invitational 3N 13-15, balanced, no 4-card major shows balanced, points=13..15, H<=3, S<=3 when nt2 is invitational 2N 13-15, balanced, no 4-card major: game forcing shows balanced, points=13..15, H<=3, S<=3 when nt2 is game_forcing 3N 16-17, balanced, no 4-card major shows balanced, points=16..17, H<=3, S<=3 when nt2 is game_forcing 2H Strong jump shift: 15+, 5+ hearts shows H>=5, hcp>=15 when strong_js, !passed_hand 2S Strong jump shift: 15+, 5+ spades shows S>=5, hcp>=15 when strong_js, !passed_hand after 1D (P) when nt2 is game_forcing 2C 11-12, balanced, no 4-card major: 2NT next shows balanced, points=11..12, C>=3, H<=3, S<=3 after 1C (P) when nt2 is game_forcing 1D 11-12, balanced, no 4-card major: 2NT next shows balanced, points=11..12, D>=3, H<=3, S<=3 after 1H (P) 1S 4+ spades, 6+ HCP shows S>=4, hcp>=6 when H<=2 | (style is not bba, (H=3, tp(H)>=11) | tp(H)>=13 | !limit_raise) | (style is bba, H=3, hcp>=11 | S>=6 | (hcp>=10, S>=5 | shortest<=2)), hcp<=10 | (S>=C, S>=D) | (hcp<=12, C<=5, D<=5) 1N 6-10 HCP, no heart fit, no 4 spades shows hcp=6..10, H<=2, S<=3 2S Strong jump shift: 15+, 5+ spades shows S>=5, hcp>=15 when strong_js, !passed_hand 2C 11+ points, 4+ clubs shows C>=4, points>=11 | C>=6 | (H>=3, tp(H)>=11), suit_points>=10, C>=D, S<=3 | (C>S, hcp>=13 | C>=6) when !passed_hand | (!drury, !drury_rev), H<=2 | (style is not bba, H=3 | tp(H)>=13) | (style is bba, hcp>=13 | (hcp>=12, shortest<=2) | (hcp>=11, H>=4)) 2D 11+ points, 4+ diamonds shows D>=4, points>=11 | D>=6 | (H>=3, tp(H)>=11), suit_points>=10, D>C, S<=3 | (D>S, hcp>=13 | D>=6) when H<=2 | (style is not bba, H=3 | tp(H)>=13) | (style is bba, hcp>=13 | (hcp>=12, shortest<=2) | (hcp>=11, H>=4)) 3H Limit raise: 11-12 support points, 3+ hearts shows H>=3, tp(H)=11..12 | (H>=4, tp(H)=10, shortest<=2), hcp<=12 when !passed_hand | (!drury, !drury_rev), limit_raise, H>=4 | S<=3, style is not bba 3C Invitational jump shift: 10-12, 6+ clubs shows C>=6, points=10..12, H<=2 when inv_js 3D Invitational jump shift: 10-12, 6+ diamonds shows D>=6, points=10..12, H<=2 when inv_js after 1S (P) 1N 6-10 HCP, no spade fit shows hcp=6..10, S<=2 2C 11+ points, 4+ clubs shows C>=4, points>=11 | C>=6 | (S>=3, tp(S)>=11), suit_points>=10, C>=D, C>=H when !passed_hand | (!drury, !drury_rev), S<=2 | (style is not bba, S=3 | tp(S)>=13) | (style is bba, hcp>=13 | (hcp>=12, shortest<=2) | (hcp>=11, S>=4)) 2D 11+ points, 4+ diamonds shows D>=4, points>=11 | D>=6 | (S>=3, tp(S)>=11), suit_points>=10, D>C, D>=H when S<=2 | (style is not bba, S=3 | tp(S)>=13) | (style is bba, hcp>=13 | (hcp>=12, shortest<=2) | (hcp>=11, S>=4)) 2H 11+ points, 5+ hearts shows H>=5, points>=11 | H>=6 | (S>=3, tp(S)>=11), suit_points>=10 when S<=2 | (style is not bba, S=3 | tp(S)>=13) | (style is bba, hcp>=13 | (hcp>=12, shortest<=2) | (hcp>=11, S>=4)) 3S Limit raise: 11-12 support points, 3+ spades shows S>=3, tp(S)=11..12 | (S>=4, tp(S)=10, shortest<=2), hcp<=12 when !passed_hand | (!drury, !drury_rev), limit_raise, style is not bba 2H 10+ HCP, 5+ hearts (BBA) shows H>=5, hcp>=10, S<=2 | hcp>=13 | (hcp>=12, shortest<=2) | (hcp>=11, S>=4) when style is bba 3C Invitational jump shift: 10-12, 6+ clubs shows C>=6, points=10..12, S<=2 when inv_js 3D Invitational jump shift: 10-12, 6+ diamonds shows D>=6, points=10..12, S<=2 when inv_js 3H Invitational jump shift: 10-12, 6+ hearts shows H>=6, points=10..12, S<=2 when inv_js after 1M (P) 2M Raise: 6-10 support points, 3+ {M} shows M>=3, tp(M)=6..10, hcp>=6, M=3 | tp(M)<=9 | shortest>=3 when style is not bba 4M Preemptive raise: 5+ {M}, weak shows M>=5, hcp=5..9 when style is not bba 2C Game values with a fit: a three-card minor to start shows M>=3, tp(M)>=13, C>=3 when !passed_hand | (!drury, !drury_rev), style is not bba 2D Game values with a fit: a three-card minor to start shows M>=3, tp(M)>=13, D>=3, C<=2 when style is not bba 2M Raise (BBA): 3+ {M}, 6-10 HCP flat or 6-8 with shortness shows M>=3, hcp>=5, tp(M)<=11, (M=3, hcp>=6, hcp<=10, hcp<=8 | shortest>=3) | (M>=4, hcp<=8, tp(M)+M<=14) when style is bba 3M Limit raise (BBA): three {M} and 11-12 flat or 9-11 with shortness, or four and 9-10 shows M>=3, (M=3, hcp=11..12, shortest>=3) | (M=3, hcp=9..11, shortest<=2, tp(M)<=13) | (M>=4, hcp=9..10, shortest>=2, shortest>=3 | controls<=3, shortest>=3 | longest<=4), M is S | S<=3 | hcp<=9 when !passed_hand | (!drury, !drury_rev), limit_raise, style is bba 4M Raise to game (BBA): four {M} and shortness, not the values to force shows M>=4, (shortest<=1, hcp<=10, tp(M)+M>=15) | (shortest=2, hcp=9..10, controls>=4 | longest>=5) when style is bba 2C Game values with a fit: a three-card minor to start shows M>=3, hcp>=13 | (hcp>=12, shortest<=2) | (hcp>=11, M>=4), C>=3 when !passed_hand | (!drury, !drury_rev), style is bba 2D Game values with a fit: a three-card minor to start shows M>=3, hcp>=13 | (hcp>=12, shortest<=2) | (hcp>=11, M>=4), D>=3, C<=2 when style is bba 4M Game in the fit: 13+ support points shows M>=3, tp(M)>=13 2N 11-12, balanced, no fit shows balanced, points=11..12, M<=2 3N 13-15, balanced shows balanced, points=13..15, M<=3 after 1x (P) P Fewer than 6 HCP shows hcp<=5 == strong-openings: 2♣ and 2NT openings file: conventions/base/strong-openings.bid needs: base after (any auction) when opening 2N {two_nt_min}-{two_nt_max} HCP, balanced shows hcp=two_nt_min..two_nt_max, balanced 3N {three_nt_min}-{three_nt_max} HCP, balanced shows hcp=three_nt_min..three_nt_max, balanced when !gambling 2C Strong, artificial: 22+ HCP [alert] [artificial] shows hcp>=22, !balanced | hcp<=25 | hcp>=28 when two_c is strong | two_c is very_strong 2C Strong: nine tricks with a major [alert] [artificial] shows hcp>=17, losers<=4, hcp+length_points>=23, (H>=6, quality(H)>=good) | (S>=6, quality(S)>=good) | (H>=5, S>=5) when two_c is strong | two_c is very_strong 2C Strong: ten tricks with a long suit [alert] [artificial] shows hcp>=17, losers<=3, hcp+length_points>=23, (C>=6, quality(C)>=good) | (D>=6, quality(D)>=good) | (H>=6, quality(H)>=good) | (S>=6, quality(S)>=good) | shape 5-5-x-x when two_c is strong | two_c is very_strong after 2C (P) 2D Waiting [artificial] when two_d_resp is waiting | two_d_resp is negative 2H Positive: five or more hearts, 8+ shows H>=5, hcp>=8 when !bust_2h, (H>=6, top5(H)>=3) | quality(H)>=good 2S Positive: five or more spades, 8+ shows S>=5, hcp>=8 when (S>=6, top5(S)>=3) | quality(S)>=good 3C Positive: five or more clubs, 8+ shows C>=5, hcp>=8 when (C>=6, top5(C)>=3) | quality(C)>=good 3D Positive: five or more diamonds, 8+ shows D>=5, hcp>=8 when (D>=6, top5(D)>=3) | quality(D)>=good 2N Positive: balanced, 8+ shows balanced, hcp>=8 2H Bust: fewer than 3 HCP [artificial] shows hcp<=2 when bust_2h after 2C (P) 2D (P) 2N 22-23 HCP, balanced shows hcp=22..23, balanced 3N 24-25 HCP, balanced shows hcp=24..25, balanced 4N 28+ HCP, balanced shows hcp>=28, balanced 2H 5+ hearts shows H>=5 2S 5+ spades shows S>=5 3C 5+ clubs shows C>=5 3D 5+ diamonds shows D>=5 after 2C (P) 2N (P) 3S (P) | 2C (P) 3C (P) 3S (P) | 2C (P) 3D (P) 3S (P) 4S Support for spades: slam values opposite 2C shows S>=3 after 2C (P) 2N (P) 3H (P) | 2C (P) 3C (P) 3H (P) | 2C (P) 3D (P) 3H (P) 4H Support for hearts: slam values opposite 2C shows H>=3 after 2C (P) 2y (P) | 2C (P) 3y (P) when y is not D | partner.D>=5 cheapest(y) Raise: three or more {y} shows y>=3 cheapest(S) Five or more spades shows S>=5 when y is not S cheapest(H) Five or more hearts shows H>=5 when y is not H cheapest(D) Five or more diamonds shows D>=5 when y is not D cheapest(C) Five or more clubs shows C>=5 when y is not C cheapest(N) Balanced, no fit for {y} shows balanced after 2C (P) 2N (P) 3S Five or more spades shows S>=5 3H Five or more hearts shows H>=5 3D Five or more diamonds shows D>=5 3C Five or more clubs shows C>=5 3N Balanced, no suit to show shows balanced 6N Slam: the values are there shows hcp>=25, balanced after 2C (P) 2D (P) 2H (P) 3C Second negative: fewer than 3 HCP [artificial] shows hcp<=2 after 2C (P) 2D (P) 2S (P) 3C Second negative: fewer than 3 HCP [artificial] shows hcp<=2 after 2C (P) 2D (P) 3C (P) 3D Second negative: fewer than 3 HCP [artificial] shows hcp<=2 == weak-two-responses: Responses to a weak two file: conventions/base/weak-two-responses.bid needs: preempts after 2x (P) when x is not N, x is not C | two_c is natural, style is standard 2N Asks: how good is the weak two? [alert] [artificial] shows hcp>=15 3x Preemptive raise: four-card support shows x>=4, hcp<=14 4x Game in the fit shows x>=4, hcp>=14 when x is H | x is S P No interest shows hcp<=14 after 2x (P) when x is not N, x is not C | two_c is natural, style is not standard 2N Asks: how good is the weak two? [alert] [artificial] shows hcp>=13 when hcp>=20 | (x>=2, hcp>=15) | (x<=1, hcp>=18) | (x is H | x is S, x=2, hcp>=14, vul | !they.vul) | (x is H | x is S, x>=3, vul) | (x is H | x is S, x>=4, !they.vul) 3x Preemptive raise: four-card support, up to 11 shows x>=4, hcp<=11, hcp>=5 | shortest<=1 3x Preemptive raise: four-card support, weak (love all) shows x>=4, hcp<=4 when !vul, !they.vul 4x Preemptive game raise: four trumps and a singleton shows x>=4, shortest<=1, hcp<=9 when !vul 4x Game in the fit shows x>=3, hcp=15..19 when x is H | x is S, vul | (!they.vul, hcp>=16 | x>=4) | hcp>=18 4x Game with five-card support shows x>=5, hcp=13..19 when x is H | x is S 3N To play: 16+, help in diamonds, the side suits stopped shows hcp>=16, x>=2, stop(S), stop(H), stop(C), H<=5, S<=5 when x is D 5x Game in diamonds: three-card support, 18-20 shows x>=3, hcp=18..20 when x is D 2H Natural and forcing: six hearts from 13, five from 14 shows H>=5, hcp>=13 when x is D, H>=6 | hcp=14 2S Natural and forcing: six spades from 13, five from 14 shows S>=5, hcp>=13 when x is D, S>=6 | hcp=14 2S Natural and forcing: five spades, 13+, at most one heart shows S>=5, hcp>=13, H<=1 when x is H P No interest shows hcp<=19 after 2x (P) 2y (P) when x is not C | two_c is natural, style is not standard 4y Three-card support: game (BBA, any strength) shows y>=3 when y is H | y is S 3y Three-card support shows y>=3 3x No fit: rebid the suit shows y<=2 after 2x (P) 2y (P) 3x (P) when x is not C | two_c is natural, style is not standard, y is H | y is S 4y Seven-card suit: game facing a doubleton shows y>=7 4y Six-card suit, four top honours: game shows y>=6, top5(y)>=4, hcp>=16 3y Six-card suit, 19+: forcing, asks for a doubleton shows y>=6, hcp>=19 4x Game in opener's major: 20+, no fit for mine shows hcp>=20 when x is H | x is S 3N Game in notrump: 20+, no fit shows hcp>=20 when x is D P No game facing a minimum weak two shows hcp<=19 after 2x (P) 2y (P) 3x (P) 3y (P) when x is not C | two_c is natural, style is not standard, y is H | y is S 4y A doubleton: game in partner's suit shows y>=2 3N A singleton or void: 3NT shows y<=1 after (any auction) when asked weak_two(t), ask2nt is feature, style is not bba 3N Solid suit: AKQ shows has(A,t), has(K,t), has(Q,t) 3C Feature: the club ace or king, maximum shows has(A,C) | has(K,C), hcp>=8 when t is not C 3D Feature: the diamond ace or king, maximum shows has(A,D) | has(K,D), hcp>=8 when t is not D 3H Feature: the heart ace or king, maximum shows has(A,H) | has(K,H), hcp>=8 when t is not H 3S Feature: the spade ace or king, maximum shows has(A,S) | has(K,S), hcp>=8 when t is not S 3C Maximum: the club queen, no side ace or king shows has(Q,C), hcp>=8 when t is not C 3D Maximum: the diamond queen, no side ace or king shows has(Q,D), hcp>=8 when t is not D 3H Maximum: the heart queen, no side ace or king shows has(Q,H), hcp>=8 when t is not H 3S Maximum: the spade queen, no side ace or king shows has(Q,S), hcp>=8 when t is not S 3C Maximum: AK of the suit and the club jack shows has(A,t), has(K,t), has(J,C), hcp>=8 when t is not C 3D Maximum: AK of the suit and the diamond jack shows has(A,t), has(K,t), has(J,D), hcp>=8 when t is not D 3H Maximum: AK of the suit and the heart jack shows has(A,t), has(K,t), has(J,H), hcp>=8 when t is not H 3S Maximum: AK of the suit and the spade jack shows has(A,t), has(K,t), has(J,S), hcp>=8 when t is not S 3{t} Minimum, or nothing outside the suit shows hcp<=10 after (any auction) when asked weak_two(t), ask2nt is feature, style is bba 3C Maximum, 8-10, with a club honour (A, Kx, Qxx) shows hcp>=8, has(A,C) | (has(K,C), C>=2) | (has(Q,C), C>=3) when t is not C 3D Maximum, 8-10, with a diamond honour (A, Kx, Qxx) shows hcp>=8, has(A,D) | (has(K,D), D>=2) | (has(Q,D), D>=3) when t is not D 3H Maximum, 8-10, with a heart honour (A, Kx, Qxx) shows hcp>=8, has(A,H) | (has(K,H), H>=2) | (has(Q,H), H>=3) when t is not H 3S Maximum, 8-10, with a spade honour (A, Kx, Qxx) shows hcp>=8, has(A,S) | (has(K,S), S>=2) | (has(Q,S), S>=3) when t is not S 3N Maximum, 8-10, no side honour to show shows hcp>=8 3{t} Minimum, 5-7 shows hcp<=7 after (any auction) when asked weak_two(t), ask2nt is ogust 3C Ogust: minimum, poor suit [artificial] shows hcp<=6, quality(t)<=1 3D Ogust: minimum, good suit [artificial] shows hcp<=6, quality(t)>=2 3H Ogust: maximum, poor suit [artificial] shows hcp>=7, quality(t)<=1 3S Ogust: maximum, good suit [artificial] shows hcp>=7, quality(t)>=2 3N Ogust: the top three honours shows quality(t)=3 after 2x (P) 2N (P) 3N (P) 4x (P) when x is C | x is D, style is bba 5x A shortness: game in the minor shows shortest<=1 P No shortness: play four shows shortest>=2 after (any auction) when answered weak_two(t), style is bba, !partner.last=3{t} 4{t} Game: partner has a maximum shows hcp>=13 when t is H | t is S 3N Game: partner has a maximum shows hcp>=13 when t is C | t is D, !partner.last=3N P Partner's 3NT is game shows hcp>=17 when t is C | t is D, partner.last=3N 4{t} Doubt about 3NT: 15-16 shows hcp<=16 when t is C | t is D, partner.last=3N after (any auction) when answered weak_two(t) 4N Keycard ask in {t} [artificial] shows t>=2, hcp+partner.hcp.min>=33 when k1430 | k0314 4N Blackwood: aces, {t} agreed [artificial] shows t>=2, hcp+partner.hcp.min>=33 when aces, !k1430, !k0314 4{t} Game in the weak two suit shows hcp>=17 when t is H | t is S 3N Game in notrump shows hcp>=17 when t is C | t is D 4{t} Game: partner showed a maximum shows hcp+partner.hcp.min>=21 when t is H | t is S 3N Game in notrump: partner showed a maximum shows hcp+partner.hcp.min>=21 when t is C | t is D P Sign off: the answer is our suit when partner.last=3{t} 4{t} Corrects 3NT to our suit shows hcp<=16 when partner.last=3N, t is H | t is S 3{t} Sign off in {t} shows hcp<=16 3N To play: the answer was higher than our suit shows hcp<=16 4{t} Sign off in our major shows hcp<=16 when t is H | t is S P No game shows hcp<=16 after 2x (P) 2N (P) 3y (P) 3x (P) when x is not C | two_c is natural, y is not x P Partner signed off in our suit after 2x (P) 3x (P) when x is not C | two_c is natural P Partner's raise is preemptive == advances: Advancing partner's overcall file: conventions/competitive/advances.bid needs: base, overcalls after (1x) 1y (P) 2{y} Raise: 7-11 total points, three-card support shows y>=3, hcp+length_points>=7, hcp+length_points<=11 3{y} Preemptive raise: four-card support, less than 8 total points shows y>=4, hcp+length_points<=7 when jump_raise is weak 1S 8+ total points, four or more spades shows S>=4, hcp+length_points>=8 when x is not S, y is not S 1N 8-11 total points, balanced, a stopper in {x} shows balanced, hcp+length_points>=8, hcp+length_points<=11 when stop(x), S<=3 | x is S | y is S, H<=3 | x is H | y is H, y<=2 | y is C | y is D cheapest(C) 9+ total points, five or more clubs shows C>=5, hcp+length_points>=9 when x is not C, y is not C cheapest(D) 9+ total points, five or more diamonds shows D>=5, hcp+length_points>=9 when x is not D, y is not D cheapest(H) 9+ total points, five or more hearts shows H>=5, hcp+length_points>=9 when x is not H, y is not H 2{x} Cue bid: limit raise or better in {y} [alert] [artificial] shows y>=3, hcp+length_points>=12 2N 12-15 total points, balanced, a stopper in {x} shows balanced, hcp+length_points>=12, hcp+length_points<=15 when stop(x), y<=2 P Not enough to advance after (1x) P (P) 1y (P) 2{y} Raise: 9-11 total points, three-card support shows y>=3, hcp+length_points>=9, hcp+length_points<=11 3{y} Preemptive raise: four-card support, less than 9 total points shows y>=4, hcp+length_points<=8 when jump_raise is weak 1S 7+ total points, four or more spades shows S>=4, hcp+length_points>=7 when x is not S, y is not S 1N 10-11 total points, balanced, a stopper in {x} shows balanced, hcp+length_points>=10, hcp+length_points<=11 when stop(x), S<=3 | x is S | y is S, H<=3 | x is H | y is H, y<=2 | y is C | y is D cheapest(C) 11+ total points, five or more clubs shows C>=5, hcp+length_points>=11 when x is not C, y is not C cheapest(D) 11+ total points, five or more diamonds shows D>=5, hcp+length_points>=11 when x is not D, y is not D cheapest(H) 11+ total points, five or more hearts shows H>=5, hcp+length_points>=11 when x is not H, y is not H 2{x} Cue bid: limit raise or better in {y} [alert] [artificial] shows y>=3, hcp+length_points>=13 2N 13-15 total points, balanced, a stopper in {x} shows balanced, hcp+length_points>=13, hcp+length_points<=15 when stop(x), y<=2 P Not enough to advance a reopening bid after (1x) 1y (X) | (1x) P (P) 1y (X) 2{y} Raise: 7-11 total points, three-card support shows y>=3, hcp+length_points>=7, hcp+length_points<=11 3{y} Preemptive raise: four-card support, less than 8 total points shows y>=4, hcp+length_points<=7 P Nothing to say over their double after (1x) 1y (1z) | (1x) P (P) 1y (1z) 2{y} Raise: 7-11 total points, three-card support shows y>=3, hcp+length_points>=7, hcp+length_points<=11 3{y} Preemptive raise: four-card support, less than 8 total points shows y>=4, hcp+length_points<=7 1N 8-11 total points, balanced, a stopper in {x} shows balanced, hcp+length_points>=8, hcp+length_points<=11 when stop(x), y<=2 cheapest(S) Free bid: 9+ total points, five or more spades shows S>=5, hcp+length_points>=9 when x is not S, y is not S, z is not S cheapest(H) Free bid: 9+ total points, five or more hearts shows H>=5, S<=4, hcp+length_points>=9 when x is not H, y is not H, z is not H P Nothing to say over their bid after (1x) 1y (2z) | (1x) P (P) 1y (2z) 2{y} Raise: 7-11 total points, three-card support shows y>=3, hcp+length_points>=7, hcp+length_points<=11 3{y} Raise to the three level: four-card support, 8-11 total points shows y>=4, hcp+length_points>=8, hcp+length_points<=11 P Nothing to say over their bid after (1x) 2y (*) | (1x) P (P) 2y (*) when y is not x P Not enough to advance after (1x) 2y (P) | (1x) 2y (X) | (1x) 2y (2x) when y is not x, x is C | (x is D, y is not C) | (x is H, y is S) 4{y} Raise to game: four-card support and 11+, with no cue bid to make shows y>=4, hcp+length_points>=11 when y is H | y is S 3{y} Preemptive raise: three-card support for a major, less than 11 shows y>=3, hcp+length_points<=10 when y is H | y is S 3{y} Preemptive raise: four-card support for a minor, less than 11 shows y>=4, hcp+length_points<=10 when y is C | y is D after (1x) 2y (P) | (1x) 2y (X) | (1x) 2y (2x) when y is not x, x is S | (x is H, y is not S) | (x is D, y is C) 4{y} Raise to game in partner's major: four-card support, 13+ shows y>=4, hcp+length_points>=13 when y is H | y is S 3{y} Raise: 7-10 total points, four-card support shows y>=4, hcp+length_points>=7, hcp+length_points<=10 cheapest(x) Cue bid: limit raise or better in {y} [alert] [artificial] shows y>=3, hcp+length_points>=11 2N 11-12 total points, balanced, a stopper in {x} shows balanced, hcp+length_points>=11, hcp+length_points<=12 when stop(x), y<=2 3N 13+ total points, balanced, a stopper in {x} shows balanced, hcp+length_points>=13 when stop(x), y<=2 cheapest(S) 10+ total points, five or more spades shows S>=5, hcp+length_points>=10 when x is not S, y is not S cheapest(H) 10+ total points, five or more hearts shows H>=5, S<=4, hcp+length_points>=10 when x is not H, y is not H cheapest(D) 12+ total points, five or more diamonds shows D>=5, S<=4, H<=4, hcp+length_points>=12 when x is not D, y is not D cheapest(C) 12+ total points, five or more clubs shows C>=5, S<=4, H<=4, hcp+length_points>=12 when x is not C, y is not C after (1x) 1y (1N) | (1x) P (P) 1y (1N) 2{y} Raise: 9-11 total points, three-card support shows y>=3, hcp+length_points>=9, hcp+length_points<=11 cheapest(x) Cue bid: limit raise or better in {y} [alert] [artificial] shows y>=3, hcp+length_points>=12 P Nothing to say over their notrump after (any auction) when asked cue_raise(t) 4{t} Accepts: game in {t} shows hcp+length_points>=13 when t is H | t is S 3N Accepts: 13+ balanced, game in notrump shows balanced, hcp+length_points>=13 when t is C | t is D cheapest(t) Minimum overcall: no game opposite a limit raise after (1x) 1y (P) 1z (P) 2{z} Four-card support shows z>=4 2{y} Six or more {y} shows y>=6, z<=3 1N 11-14 balanced, {x} held shows balanced, hcp>=11, hcp<=14, stop(x), z<=3 P Nothing more to say after (1x) 1y (P) 2z (P) 3{z} Four-card support shows z>=4, hcp>=11 2{y} Six or more {y} shows y>=6, z<=3 when y is not C P Nothing more to say after (1x) 1y (2x) P (P) 3{y} Six or more {y}, sound shows y>=6, hcp>=12 P Nothing more after (1N) 2y (*) | (1N) 3y (*) P Not enough to advance after (any auction) when lho.opened | rho.opened P Defending: nothing more to say == after-interference: Our side once the opponents come in file: conventions/competitive/after-interference.bid needs: base after 1x (1y) when neg X Negative double: 6+ total points, four or more in each unbid major [alert] [artificial] shows hcp+length_points>=6, S>=4 | x is S | y is S, H>=4 | x is H | y is H, (D>=4 | x is D | y is D, C>=4 | x is C | y is C) | S>=4 | H>=4 when S<=4 | x is S | y is S, H<=4 | x is H | y is H | (y is S, hcp<=7), x<=2 | x is C | x is D after 1x (1y) | 1x (2y) when y is not x, neg P Trap pass: length and strength in {y} when y>=4, quality(y)>=good | top5(y)>=3, hcp>=8, x<=2 after 1x (1y) 1S 6+ total points, four or more spades shows S>=4, hcp+length_points>=6 when x is not S, y is not S, S>=5 | (x is not H, y is not H, H<=3) 1H 6+ total points, four or more hearts shows H>=4, hcp+length_points>=6 when x is not H, y is not H, y is not S, H>=5 | (x is not S, y is not S, S<=3) 1N 6-10 total points, balanced, a stopper in {y} shows balanced, hcp+length_points>=6, hcp+length_points<=10 when stop(y), S<=3 | x is S | y is S, H<=3 | x is H | y is H 2{x} Raise: 6-9 total points, support for partner's suit shows x>=3, hcp+length_points>=6, hcp+length_points<=9 when x is H | x is S | x>=5, S<=3 | x is S | y is S, H<=3 | x is H | y is H jump(x) Preemptive raise: five-card support, less than 8 shows x>=5, hcp+length_points<=7 cheapest(C) 8+ total points, five or more clubs shows C>=5, hcp+length_points>=8 when x is not C, y is not C, new_suit_forcing cheapest(D) 8+ total points, five or more diamonds shows D>=5, hcp+length_points>=8 when x is not D, y is not D, new_suit_forcing 2H 8+ total points, five or more hearts shows H>=5, hcp+length_points>=8 when y is S, x is not H, new_suit_forcing cheapest(C) 8-12 total points, five or more clubs, not forcing shows C>=5, hcp+length_points>=8, hcp<=12 when x is not C, y is not C, !new_suit_forcing cheapest(D) 8-12 total points, five or more diamonds, not forcing shows D>=5, hcp+length_points>=8, hcp<=12 when x is not D, y is not D, !new_suit_forcing 2H 8-12 total points, five or more hearts, not forcing shows H>=5, hcp+length_points>=8, hcp<=12 when y is S, x is not H, !new_suit_forcing jump(C) 13+ total points, five or more clubs: forcing to game shows C>=5, hcp>=13 when x is not C, y is not C, !new_suit_forcing, H<=4 | y is not S | x is H jump(D) 13+ total points, five or more diamonds: forcing to game shows D>=5, hcp>=13 when x is not D, y is not D, !new_suit_forcing, H<=4 | y is not S | x is H 3H 13+ total points, five or more hearts: forcing to game shows H>=5, hcp>=13 when y is S, x is not H, !new_suit_forcing cheapest(y) Cue bid: limit raise or better in {x} [alert] [artificial] shows x>=3, hcp+length_points>=11 when cue_raise, x is H | x is S | x>=4 2N 11-12 total points, balanced, a stopper in {y} shows balanced, hcp+length_points>=11, hcp+length_points<=12 when stop(y), S<=3 | x is S | y is S, H<=3 | x is H | y is H 3N 13+ total points, balanced, a stopper in {y} shows balanced, hcp+length_points>=13 when stop(y), S<=3 | x is S | y is S, H<=3 | x is H | y is H P Nothing to say over the overcall after 1x (1y) 2y (3y) when y is not x 4{x} Game: 16+ opposite the limit raise shows hcp>=16 when x is H | x is S 3N Game: 16+ with a stopper in {y} shows hcp>=16, stop(y) when x is C | x is D 5{x} Game: 16+, no stopper in {y} shows hcp>=16 when x is C | x is D 4{x} Competes: five or more {x}, nine trumps shows x>=5 when x is C | x is D P They competed: no game after 1x (1y) 2y (3y) P (P) when y is not x 4{x} Game: 13+ opposite opener's minimum shows hcp+length_points>=13 when x is H | x is S 3N Game: 13+ with a stopper in {y} shows hcp+length_points>=13, stop(y) when x is C | x is D 5{x} Game in the minor: 14+ shows hcp+length_points>=14 when x is C | x is D P The limit raise: they have bought it after 1x (1y) 2y (3y) 4x (P) when x is C | x is D, y is not x 5{x} Game in the minor: 13+ opposite the fifth trump shows hcp+length_points>=13 P The limit raise: no game after 1x (2y) | 1x (3y) when y is not x X Negative double: 8+ total points, four or more in each unbid major [alert] [artificial] shows hcp+length_points>=8, S>=4 | x is S | y is S, H>=4 | x is H | y is H, (D>=4 | x is D | y is D, C>=4 | x is C | y is C) | S>=4 | H>=4 when S<=4 | x is S | y is S, H<=4 | x is H | y is H, neg cheapest(y) Cue bid: limit raise or better in {x} [alert] [artificial] shows x>=3, hcp+length_points>=11 when cue_raise cheapest(x) Raise: 7-10 total points, three-card support shows x>=3, hcp+length_points>=7, hcp+length_points<=10 cheapest(S) 10+ total points, five or more spades shows S>=5, hcp+length_points>=10 when x is not S, y is not S, new_suit_forcing cheapest(H) 10+ total points, five or more hearts shows H>=5, S<=4, hcp+length_points>=10 when x is not H, y is not H, new_suit_forcing cheapest(D) 10+ total points, five or more diamonds shows D>=5, S<=4, H<=4, hcp+length_points>=10 when x is not D, y is not D, new_suit_forcing cheapest(C) 10+ total points, five or more clubs shows C>=5, S<=4, H<=4, hcp+length_points>=10 when x is not C, y is not C, new_suit_forcing after 1x (2y) | 1x (3y) when y is not x, !new_suit_forcing cheapest(S) 10+ total points, five or more spades, not forcing shows S>=5, hcp+length_points>=10, hcp<=12 when x is not S, y is not S cheapest(H) 10+ total points, five or more hearts, not forcing shows H>=5, S<=4, hcp+length_points>=10, hcp<=12 when x is not H, y is not H cheapest(D) 10+ total points, five or more diamonds, not forcing shows D>=5, S<=4, H<=4, hcp+length_points>=10, hcp<=12 when x is not D, y is not D cheapest(C) 10+ total points, five or more clubs, not forcing shows C>=5, S<=4, H<=4, hcp+length_points>=10, hcp<=12 when x is not C, y is not C jump(S) 13+ total points, five or more spades: forcing to game shows S>=5, hcp>=13 when x is not S, y is not S jump(H) 13+ total points, five or more hearts: forcing to game shows H>=5, S<=4, hcp>=13 when x is not H, y is not H jump(D) 13+ total points, five or more diamonds: forcing to game shows D>=5, S<=4, H<=4, hcp>=13 when x is not D, y is not D jump(C) 13+ total points, five or more clubs: forcing to game shows C>=5, S<=4, H<=4, hcp>=13 when x is not C, y is not C after 1x (1y) 2z (P) | 1x (1y) 3z (P) | 1x (2y) 3z (P) when partner.jumped, z is not x, z is not y, we.forcing=game 4{z} Three-card support: game shows z>=3 when z is H | z is S 3N No fit, a stopper in {y} shows stop(y) after 1x (2y) | 1x (3y) when y is not x 2N 11-12 total points, balanced, a stopper in {y} shows balanced, hcp+length_points>=11, hcp+length_points<=12 when stop(y) 3N 13+ total points, balanced, a stopper in {y} shows balanced, hcp+length_points>=13 when stop(y) P Nothing to say over their overcall after 1x (X) XX Redouble: 10+ total points, we own the hand [alert] [artificial] shows hcp+length_points>=10 when S<=4 | x is S | hcp>=12, H<=4 | x is H | x is S | hcp>=12 cheapest(S) 6-9 total points, four or more spades (10-11 with five) shows S>=4, S>H, hcp+length_points>=6, hcp+length_points<=9 | (S>=5, hcp<=11) when x is not S cheapest(H) 6-9 total points, four or more hearts (10-11 with five) shows H>=4, H>=S, hcp+length_points>=6, hcp+length_points<=9 | (H>=5, hcp<=11) when x is not H, x is not S cheapest(D) 6-9 total points, four or more diamonds shows D>=4, S<=3, H<=3, hcp+length_points>=6, hcp+length_points<=9 when x is not D, x is not H, x is not S 2{x} Raise: 4-9 total points, support for partner's suit shows x>=3, hcp+length_points>=4, hcp+length_points<=9 when x is H | x is S | x>=5, S<=3 | x is S | x is H, H<=3 | x is H | x is S 3{x} Preemptive raise: five-card support for a major, less than 8 shows x>=5, hcp+length_points<=7 when x is H | x is S 1N 6-9 total points, balanced shows balanced, hcp+length_points>=6, hcp+length_points<=9 when S<=3 | x is S, H<=3 | x is H, x<=2 | x is C | x is D P Nothing to say over the double after 1x (1y) X (P) | 1x (2y) X (P) | 1x (3y) X (P) cheapest(S) Four spades for partner's double, minimum shows S>=4, tp(S)<=15 when x is not S, y is not S cheapest(H) Four hearts for partner's double, minimum shows H>=4, tp(H)<=15 when x is not H, y is not H jump(S) Four spades, 16-18 shows S>=4, tp(S)=16..18 when x is not S, y is not S jump(H) Four hearts, 16-18 shows H>=4, tp(H)=16..18 when x is not H, y is not H cheapest(N) 12-14 balanced with a stopper in {y} shows balanced, hcp<=14 when stop(y) jump(N) 18-19 balanced with a stopper in {y} shows balanced, hcp=18..19 when stop(y) cheapest(x) Six cards in {x}, minimum shows x>=6, hcp<=15 jump(x) Six cards in {x}, 16-18 shows x>=6, hcp=16..18 4S Four spades, 19+: game in the fit partner promised shows S>=4, tp(S)>=19 when x is not S, y is not S 4H Four hearts, 19+: game in the fit partner promised shows H>=4, tp(H)>=19 when x is not H, y is not H cheapest(D) Four diamonds, minimum shows D>=4, hcp<=15 when x is not D, y is not D, S<=3 | x is S | y is S, H<=3 | x is H | y is H cheapest(C) Four clubs, minimum shows C>=4, C>=D, hcp<=15 when x is not C, y is not C, S<=3 | x is S | y is S, H<=3 | x is H | y is H cheapest(S) Three spades for partner's four, minimum shows S>=3, hcp<=15 when x is not S, y is not S, partner.S>=4 cheapest(H) Three hearts for partner's four, minimum shows H>=3, hcp<=15 when x is not H, y is not H, partner.H>=4 cheapest(x) Five cards in {x} shows x>=5, hcp<=18 3N Game: 17+ with a stopper in {y} shows hcp>=17, stop(y) when lho.last=1{y} | lho.last=2{y} cheapest(y) Cue bid: 17+, forcing to game [alert] [artificial] shows hcp>=17 when lho.last=1{y} | lho.last=2{y} cheapest(x) Nothing better to say over partner's double after 1x (1y) 2y (P) | 1x (2y) 3y (P) | 1x (3y) 4y (P) when y is not x 4{x} Accepts: game in {x} shows tp(x)>=14 when x is H | x is S 3N Accepts: 14+ with a stopper in {y} shows hcp>=14 when stop(y), x is C | x is D 5{x} Accepts: 16+, no stopper in {y} shows hcp>=16 when x is C | x is D cheapest(x) No game opposite a limit raise after 1x (1y) 2y (P) 3x (P) | 1x (2y) 3y (P) 3x (P) | 1x (2y) 3y (P) 4x (P) when x is C | x is D, y is not x 3N Game: 13+ with a stopper in {y} shows hcp+length_points>=13, stop(y) 5{x} Game in the minor: 14+ shows hcp+length_points>=14 P The limit raise: no game after 1x (2y) 3y (P) 4x (P) when x is H | x is S, y is not x P Game reached after 1x (1y) 2y (P) 2x (P) | 1x (1y) 2y (P) 3x (P) | 1x (2y) 3y (P) 3x (P) when x is H | x is S, y is not x 4{x} Game: 13+ opposite the sign-off shows hcp+length_points>=13 P The limit raise: no game after 1x (1y) X (2z) | 1x (2y) X (3z) when y is not x cheapest(S) Four spades, competing over their bid shows S>=4, tp(S)<=15 when x is not S, y is not S cheapest(H) Four hearts, competing over their bid shows H>=4, tp(H)<=15 when x is not H, y is not H jump(S) Four spades, 16-18 shows S>=4, tp(S)=16..18 when x is not S, y is not S jump(H) Four hearts, 16-18 shows H>=4, tp(H)=16..18 when x is not H, y is not H cheapest(N) 12-15 balanced with a stopper in {y} shows balanced, hcp<=15 when stop(y) jump(N) 18-19 balanced with a stopper in {y} shows balanced, hcp=18..19 when stop(y) cheapest(x) Six cards in {x} and the values to bid again shows x>=6, hcp>=13 P Minimum: they have bought it after 1x (1y) X (3z) | 1x (1y) X (4z) | 1x (2y) X (4z) | 1x (3y) X (4z) when y is not x cheapest(S) Four spades and 13+: worth competing over their jump shows S>=4, hcp>=13 when x is not S, y is not S cheapest(H) Four hearts and 13+: worth competing over their jump shows H>=4, hcp>=13 when x is not H, y is not H cheapest(N) 13+ balanced with a stopper in {y} shows balanced, hcp>=13 when stop(y) P They jumped over the double: no room to describe the hand after (any auction) when they.bid, !lho.opened, !rho.opened, me.last=P P Passed last time, nothing new to say after (any auction) when they.bid, !lho.opened, !rho.opened, partner.last=P P Partner passed: nothing new to say after 1x (1y) P (P) X (P) 2z (P) | 1x (1y) P (P) X (P) 3z (P) | 1x (2y) P (P) X (P) 2z (P) | 1x (2y) P (P) X (P) 3z (P) | 1x (3y) P (P) X (P) 3z (P) | 1x (3y) P (P) X (P) 4z (P) when y is not x, z is not y 3N Game: 18+ with a stopper in {y} shows hcp>=18, stop(y) P Partner's forced answer: no game == balancing: The balancing seat file: conventions/competitive/balancing.bid needs: base, overcalls after (1x) P (P) X Reopening double: 8+ total points and the unbid suits shows hcp+length_points>=8, (S>=3 | x is S, H>=3 | x is H, D>=3 | x is D, C>=3 | x is C) | hcp+length_points>=oc_max+1 1S Reopening: five spades, 8-15 total points shows S>=5, S>=H, S>=D, S>=C, hcp+length_points>=one_min, hcp+length_points<=15 when x is not S 1H Reopening: five hearts, 8-15 total points shows H>=5, H>S, H>=D, H>=C, hcp+length_points>=one_min, hcp+length_points<=15 when x is not H 1D Reopening: five diamonds, 8-15 total points shows D>=5, D>S, D>H, D>=C, hcp+length_points>=one_min, hcp+length_points<=15 when x is not D 2C Reopening: five clubs, 10-15 total points shows C>=5, C>S, C>H, C>D, hcp+length_points>=two_min-2, hcp+length_points<=15 when x is not C 2D Reopening: five diamonds, 10-15 total points shows D>=5, D>S, D>H, D>=C, hcp+length_points>=two_min-2, hcp+length_points<=15 when x is not D, x is not C 2H Reopening: five hearts, 10-15 total points shows H>=5, H>S, H>=D, H>=C, hcp+length_points>=two_min-2, hcp+length_points<=15 when x is not H, x is not D, x is not C 1N Balancing notrump: {nt_min}-{nt_max} balanced with a stopper in {x} shows balanced, hcp>=nt_min, hcp<=nt_max when stop(x) 2N 19-21 balanced with a stopper in {x} shows balanced, hcp=19..21 when stop(x) P Nothing to reopen with == cappelletti: Cappelletti and Modified Cappelletti over their 1NT file: conventions/competitive/cappelletti.bid needs: vs-1nt after (1N) | (1N) P (P) when def is cappelletti | def is modified_cappelletti X Penalty: 15+ HCP shows hcp>=15 2D Cappelletti: both majors, 5-4 or longer [alert] shows H>=4, S>=4, H+S>=9, hcp+length_points>=10, hcp<=17 2N Cappelletti: both minors, 5-5 or longer [alert] shows C>=5, D>=5, hcp+length_points>=8, hcp<=17 after (1N) | (1N) P (P) when def is cappelletti 2C Cappelletti: one long suit, six or more [alert] shows longest>=6, second_longest<=4, hcp+length_points>=12, hcp<=17 2H Cappelletti: five hearts and a four-card minor [alert] shows H>=5, S<=3, (C>=4, quality(C)>=fair) | (D>=4, quality(D)>=fair), hcp+length_points>=10, hcp<=17 2S Cappelletti: five spades and a four-card minor [alert] shows S>=5, H<=3, (C>=4, quality(C)>=fair) | (D>=4, quality(D)>=fair), hcp+length_points>=10, hcp<=17 after (any auction) when asked capp_one, rho.last=P | rho.last=X 2D Relay: bid your suit [alert] P Long clubs: to play shows C>=6 2H Six or more hearts: to play shows H>=6, hcp<=12 2S Six or more spades: to play shows S>=6, hcp<=12 after (any auction) when asked capp_relay, rho.last=P | rho.last=X P My suit is diamonds shows D>=6 2H My suit is hearts shows H>=6 2S My suit is spades shows S>=6 3C My suit is clubs shows C>=6 after (1N) | (1N) P (P) when def is modified_cappelletti 2C Modified Cappelletti: a long minor, or a major and a minor [alert] shows (C>=6 | D>=6, second_longest<=4, hcp+length_points>=12) | ((H>=5, S<=3) | (S>=5, H<=3), C>=4 | D>=4, hcp+length_points>=10), hcp<=17 2H Modified Cappelletti: six or more hearts [alert] shows H>=6, second_longest<=4, hcp+length_points>=12, hcp<=17 2S Modified Cappelletti: six or more spades [alert] shows S>=6, second_longest<=4, hcp+length_points>=12, hcp<=17 after (any auction) when asked mcapp_one, rho.last=P | rho.last=X 2D Relay: show your hand [alert] after (any auction) when asked mcapp_relay, rho.last=P | rho.last=X P Long diamonds shows D>=6 2H Hearts and a minor shows H>=5, C>=4 | D>=4 2S Spades and a minor shows S>=5, C>=4 | D>=4 3C Long clubs shows C>=6 == dont: DONT over their 1NT file: conventions/competitive/dont.bid needs: vs-1nt after (1N) | (1N) P (P) when def is dont | (dont_play, def is other) X DONT: one long suit (clubs, diamonds or hearts) [alert] shows C>=6 | D>=6 | H>=6, second_longest<=3, hcp+length_points>=10, hcp<=15 2C DONT: clubs and a higher suit [alert] shows (C>=5, D>=4 | H>=4 | S>=4) | (C>=4, D>=5 | H>=5 | S>=5), hcp+length_points>=10, hcp<=15 2D DONT: diamonds and a major [alert] shows (D>=5, H>=4 | S>=4) | (D>=4, H>=5 | S>=5), hcp+length_points>=10, hcp<=15 2H DONT: hearts and spades [alert] shows H>=4, S>=4, H+S>=9, hcp+length_points>=10, hcp<=15 2S DONT: six or more spades shows S>=6, second_longest<=4, hcp+length_points>=10, hcp<=15 after (any auction) when asked dont_one, rho.last=P | rho.last=X | rho.last=XX 2C Relay: bid your suit [alert] 2D Six or more diamonds: to play shows D>=6 2H Six or more hearts: to play shows H>=6 2S Six or more spades: to play shows S>=6 after (any auction) when asked dont_relay, rho.last=P | rho.last=X P My suit is clubs shows C>=6 2D My suit is diamonds shows D>=6 2H My suit is hearts shows H>=6 == meckwell: Meckwell over their 1NT file: conventions/competitive/meckwell.bid needs: vs-1nt after (1N) | (1N) P (P) when def is meckwell X Meckwell: a long minor, or both majors [alert] shows (C>=6 | D>=6, second_longest<=3, hcp+length_points>=12) | (H>=4, S>=4, H+S>=9, hcp+length_points>=10), hcp<=17 2C Meckwell: clubs and a major [alert] shows (C>=5, H>=4 | S>=4) | (C>=4, H>=5 | S>=5), hcp+length_points>=10, hcp<=17 2D Meckwell: diamonds and a major [alert] shows (D>=5, H>=4 | S>=4) | (D>=4, H>=5 | S>=5), hcp+length_points>=10, hcp<=17 2H Natural: six or more hearts, or a good five shows H>=6 | (H>=5, quality(H)>=good, C<=3, D<=3), S<=3, hcp+length_points>=11, hcp<=17 2S Natural: six or more spades, or a good five shows S>=6 | (S>=5, quality(S)>=good, C<=3, D<=3), H<=3, hcp+length_points>=11, hcp<=17 2N Meckwell: both minors, 5-5 or longer [alert] shows C>=5, D>=5, hcp+length_points>=8, hcp<=17 after (any auction) when asked meck_one, rho.last=P | rho.last=X | rho.last=XX 2C Relay: bid your suit [alert] after (any auction) when asked meck_relay, rho.last=P | rho.last=X P My suit is clubs shows C>=6 2D My suit is diamonds shows D>=6 2H Both majors [alert] shows H>=4, S>=4 == multi-landy: Landy and Multi-Landy over their 1NT file: conventions/competitive/multi-landy.bid needs: vs-1nt after (1N) | (1N) P (P) when def is multi_landy | def is landy 2C Landy: both majors, 5-4 or longer [alert] shows H>=4, S>=4, H+S>=9, hcp+length_points>=10, hcp<=17 after (1N) | (1N) P (P) when def is multi_landy X Multi-Landy: a four-card major and a longer minor [alert] shows H=4 | S=4, C>=5 | D>=5, hcp+length_points>=12, hcp<=17 2D Multi-Landy: six or more in one major [alert] shows H>=6 | S>=6, second_longest<=4, hcp+length_points>=11, hcp<=17 2H Multi-Landy: five hearts and a four-card minor [alert] shows H>=5, S<=3, (C>=4, quality(C)>=fair) | (D>=4, quality(D)>=fair), hcp+length_points>=10, hcp<=17 2S Multi-Landy: five spades and a four-card minor [alert] shows S>=5, H<=3, (C>=4, quality(C)>=fair) | (D>=4, quality(D)>=fair), hcp+length_points>=10, hcp<=17 2N Multi-Landy: both minors, 5-5 or longer [alert] shows C>=5, D>=5, hcp+length_points>=8, hcp<=17 after (any auction) when asked ml_x, rho.last=P | rho.last=X | rho.last=XX 2C Pass or correct: bid your minor [alert] after (any auction) when asked ml_minor, rho.last=P | rho.last=X P My minor is clubs shows C>=5 2D My minor is diamonds shows D>=5 after (any auction) when asked ml_multi, rho.last=P | rho.last=X 2H Pass or correct: bid your major [alert] after (any auction) when asked ml_major, rho.last=P | rho.last=X P My major is hearts shows H>=6 2S My major is spades shows S>=6 == overcalls: Suit and notrump overcalls file: conventions/competitive/overcalls.bid needs: base after (1x) 1S Overcall: five spades, {one_min}-{one_max} total points shows S>=5, S>=H, S>=D, S>=C, hcp+length_points>=one_min, hcp<=one_max when x is not S, quality(S)>=good | top5(S)>=3 | hcp+length_points>=12 1H Overcall: five hearts, {one_min}-{one_max} total points shows H>=5, H>S, H>=D, H>=C, hcp+length_points>=one_min, hcp<=one_max when x is not H, quality(H)>=good | top5(H)>=3 | hcp+length_points>=12 1D Overcall: five diamonds, {one_min}-{one_max} total points shows D>=5, D>S, D>H, D>=C, hcp+length_points>=one_min, hcp<=one_max when x is not D, quality(D)>=good | top5(D)>=3 | hcp+length_points>=12 2C Overcall: five clubs, {two_min}-{two_max} total points shows C>=5, C>S, C>H, C>D, hcp+length_points>=two_min, hcp+length_points<=two_max when x is not C, C>=6 | quality(C)>=good | top5(C)>=4 2D Overcall: five diamonds, {two_min}-{two_max} total points shows D>=5, D>S, D>H, D>=C, hcp+length_points>=two_min, hcp+length_points<=two_max when x is not D, x is not C, D>=6 | quality(D)>=good | top5(D)>=4 2H Overcall: five hearts, {two_min}-{two_max} total points shows H>=5, H>S, H>=D, H>=C, hcp+length_points>=two_min, hcp+length_points<=two_max when x is not H, x is not D, x is not C, H>=6 | quality(H)>=good | top5(H)>=4 1N {nt_min}-{nt_max} balanced with a stopper in {x} shows balanced, hcp>=nt_min, hcp<=nt_max, S<=4, H<=4 when stop(x) after (1x) 1N (2x) 2S To play: five or more spades shows S>=5, hcp<=8 when x is H 3C To play: six or more clubs shows C>=6, hcp<=8, H<=3 | x is H, S<=3 | x is S 3D To play: six or more diamonds shows D>=6, D>C, hcp<=8, H<=3 | x is H, S<=3 | x is S 3N Game: 9+, {x} held shows hcp>=9, stop(x) P Nothing to say shows hcp>=0 after (1N) when (nt_def is other, !dont_play) | nt_def is landy 2S Natural: five spades, 12+ total points shows S>=5, S>=H, S>=D, S>=C, hcp+length_points>=12, hcp<=17 2H Natural: five hearts, 12+ total points shows H>=5, H>S, H>=D, H>=C, hcp+length_points>=12, hcp<=17 2D Natural: five diamonds, 12+ total points shows D>=5, D>S, D>H, D>=C, hcp+length_points>=12, hcp<=17 after (1N) when nt_def is other, !dont_play 2C Natural: five clubs, 12+ total points shows C>=5, C>S, C>H, C>D, hcp+length_points>=12, hcp<=17 3S Preemptive: seven spades, 4-10 shows S>=7, hcp=4..10 3H Preemptive: seven hearts, 4-10 shows H>=7, hcp=4..10 3D Preemptive: seven diamonds, 4-10 shows D>=7, hcp=4..10 3C Preemptive: seven clubs, 4-10 shows C>=7, hcp=4..10 after (1x) when jump is weak 2D Weak jump overcall: six diamonds, 4-10 shows D=6, hcp=4..10, H<=3, S<=3 when x is not D, x is not H, x is not S, !vul | quality(D)>=good | top5(D)>=3 2H Weak jump overcall: six hearts, 4-10 shows H=6, hcp=4..10, S<=3 when x is not H, x is not S, !vul | quality(H)>=good | top5(H)>=3 2S Weak jump overcall: six spades, 4-10 shows S=6, hcp=4..10 when x is not S, !vul | quality(S)>=good | top5(S)>=3 3C Jump overcall: seven clubs, 4-10 shows C=7, hcp=4..10, H<=3, S<=3 when x is not C, !vul | quality(C)>=good | top5(C)>=3 3D Jump overcall: seven diamonds, 4-10 shows D=7, hcp=4..10, H<=3, S<=3 when x is not D, !vul | quality(D)>=good | top5(D)>=3 3H Jump overcall: seven hearts, 4-10 shows H=7, hcp=4..10, S<=3 when x is not H, !vul | quality(H)>=good | top5(H)>=3 3S Jump overcall: seven spades, 4-10 shows S=7, hcp=4..10 when x is not S, !vul | quality(S)>=good | top5(S)>=3 after (1x) P No overcall == responsive-doubles: Responsive doubles file: conventions/competitive/responsive-doubles.bid card: doubles.responsive.play needs: base after (1x) X (2x) when x is C | x is D X Responsive: both majors, 6+ total points [alert] [artificial] shows S>=4, H>=4, hcp+length_points>=6 after (1x) X (3x) when x is C | x is D X Responsive: both majors, 8+ total points [alert] [artificial] shows S>=4, H>=4, hcp+length_points>=8 after (1x) X (4x) when x is C | x is D X Responsive: both majors, 10+ total points [alert] [artificial] shows S>=4, H>=4, hcp+length_points>=10 after (1x) X (2x) when x is H | x is S X Responsive: both minors, 6+ total points [alert] [artificial] shows D>=4, C>=4, hcp+length_points>=6 after (1x) X (3x) when x is H | x is S X Responsive: both minors, 8+ total points [alert] [artificial] shows D>=4, C>=4, hcp+length_points>=8 after (1x) X (4x) when x is H | x is S X Responsive: both minors, 10+ total points [alert] [artificial] shows D>=4, C>=4, hcp+length_points>=10 after (1x) 1y (2x) | (1x) 2y (3x) | (1x) P (P) 1y (2x) X Responsive: the two unbid suits, 6+ total points [alert] [artificial] shows S>=4 | x is S | y is S, H>=4 | x is H | y is H, D>=4 | x is D | y is D, C>=4 | x is C | y is C, y=2, x<=3, hcp+length_points>=10 after (1x) 1y (3x) | (1x) 2y (4x) X Responsive: the two unbid suits, 8+ total points [alert] [artificial] shows S>=4 | x is S | y is S, H>=4 | x is H | y is H, D>=4 | x is D | y is D, C>=4 | x is C | y is C, y=2, x<=3, hcp+length_points>=11 after (any auction) when asked responsive cheapest(S) Spades, partner's choice taken shows S>=3, S>=H when partner.S>=4 cheapest(H) Hearts, partner's choice taken shows H>=3, H>S when partner.H>=4 cheapest(D) Diamonds, partner's choice taken shows D>=3, D>=C when partner.D>=4 cheapest(C) Clubs, partner's choice taken shows C>=3, C>D when partner.C>=4 == support-doubles: Support doubles and redoubles file: conventions/competitive/support-doubles.bid card: doubles.support.play needs: rebids after 1x (*) 1M (1z) | 1x (*) 1M (2z) | 1x (*) 1M (3z) when M is not x, z is not M when (through is none, rho.last<=2{M}) | rho.last<=through X Support double: exactly three {M} [alert] [artificial] shows M=3 jump(N) 18-19 balanced with a stopper in {z} shows balanced, hcp=18..19, M<=2, stop(z) when lho.last=X 3N 20+ with a stopper in {z} shows hcp>=20, M<=2, stop(z) when lho.last=X cheapest(z) Cue bid: 18+, forcing to game [alert] [artificial] shows hcp>=18, M<=2 when lho.last=X after 1x (*) 1M (X) when M is not x, rdbl XX Support redouble: exactly three {M} [alert] [artificial] shows M=3 after (any auction) when asked support(M,x,z), rho.last=P, partner.last=X cheapest(M) Five or more {M}, minimum: the eight-card fit shows M>=5, points<=9 jump(M) Five or more {M}, 10-11: invitational shows M>=5, points=10..11 4M Five or more {M}, 12+: game shows M>=5, points>=12 1N Four {M}, 6-10 balanced with a stopper in {z} shows M=4, balanced, points=6..10, stop(z) 2N Four {M}, 11-12 with a stopper in {z}: invitational shows M=4, semibalanced, points=11..12, stop(z) 3N Four {M}, 13+ with a stopper in {z} shows M=4, semibalanced, points>=13, stop(z) cheapest(x) Four or more {x}, minimum: raises opener's minor shows x>=4, M=4, points<=10 when x is C | x is D, z is not x, cheapest_rank(x)<=14 cheapest(D) Four or more diamonds, minimum shows D>=4, M=4, points<=10 when x is C, z is not D, cheapest_rank(D)<=14, maybe lho.D<=4 cheapest(C) Four or more clubs, minimum shows C>=4, M=4, points<=10 when x is not C, z is not C, cheapest_rank(C)<=14, maybe lho.C<=4 cheapest(z) Cue bid: four {M}, 13+ without a stopper: forcing to game [alert] [artificial] shows M=4, points>=13 jump(M) Four {M}, 11-12: invitational in the 4-3 fit shows M=4, points=11..12 P Penalty: four or more {z} with two of the top five shows z>=4, top5(z)>=2, M<=4, hcp>=7 cheapest(M) Nothing better to say: {M} in the 4-3 fit shows M>=4 after (any auction) when asked support(M), rho.last=P, partner.last=XX P Plays one {M} redoubled 4M Five or more {M}, 13+: game shows M>=5, points>=13 after (any auction) when asked support(M), rho.last!=P cheapest(M) Five or more {M}: competes in the eight-card fit shows M>=5, points<=11 4M Five or more {M}, 12+: game shows M>=5, points>=12 P They have bid again: nothing more to say after (any auction) when asked support_cue(M,z) 3N A stopper in {z} shows stop(z) 4M No stopper in {z}: game in the 4-3 fit == takeout-double: Takeout doubles file: conventions/competitive/takeout-double.bid needs: base, overcalls after (1x) X Takeout: 12+ total points and the unbid suits, or 18+ with any shape shows hcp+length_points>=12, (S>=3 | x is S, H>=3 | x is H, D>=3 | x is D, C>=3 | x is C) | hcp>=oc_max+1, hcp+length_points>=13 | x>=3 | has(A,x) | has(K,x) | (!has(Q,x), !has(J,x)) | !vul | they.vul after (1x) X (P) | (1x) P (P) X (P) 1H 0-8 total points, four or more hearts shows H>=4, H>=S | x is S, hcp+length_points<=8 | (H=4, hcp<=9) when x is not H, x is not S 1S 0-8 total points, four or more spades shows S>=4, S>H | x is H, hcp+length_points<=8 | (S=4, hcp<=9) when x is not S 1D 0-8 total points, four or more diamonds shows D>=4, D>C, S<=3 | x is S, H<=3 | x is H, hcp+length_points<=8 | (D=4, hcp<=9) when x is not D, x is not H, x is not S 2C 0-8 total points, four or more clubs shows C>=4, C>=D, S<=3 | x is S, H<=3 | x is H, hcp+length_points<=8 | (C=4, hcp<=9) when x is not C 2D 0-8 total points, four or more diamonds shows D>=4, D>C, S<=3 | x is S, H<=3 | x is H, hcp+length_points<=8 | (D=4, hcp<=9) when x is not D, x is not C 2H 0-8 total points, four or more hearts shows H>=4, H>=S | x is S, hcp+length_points<=8 | (H=4, hcp<=9) when x is not H, x is not D, x is not C 1N 7-10 HCP, balanced, a stopper in {x} shows balanced, hcp>=7, hcp<=10 when stop(x) 2H 9-11 total points, four or more hearts shows H>=4, H>=S | x is S, hcp+length_points=9..11, H>=5 | hcp>=10 when x is not H, x is not S 2S 9-11 total points, four or more spades shows S>=4, S>H | x is H, hcp+length_points=9..11, S>=5 | hcp>=10 when x is not S 3C 9-11 total points, four or more clubs shows C>=4, C>=D, S<=3 | x is S, H<=3 | x is H, hcp+length_points=9..11, C>=5 | hcp>=10 when x is not C 3D 9-11 total points, four or more diamonds shows D>=4, D>C, S<=3 | x is S, H<=3 | x is H, hcp+length_points=9..11, D>=5 | hcp>=10 when x is not D, x is not C 3H 9-11 total points, four or more hearts shows H>=4, H>=S | x is S, hcp+length_points=9..11, H>=5 | hcp>=10 when x is not H, x is not D, x is not C 2N 11-12 total points, balanced, a stopper in {x} shows balanced, hcp+length_points=11..12 when stop(x) 3N Game: 12+, a stopper in {x} shows hcp>=12, stop(x), H<=3 | x is H, S<=3 | x is S 1D 0-8, no four-card suit to show: three diamonds shows D>=3, H<=3, S<=3, hcp<=8 when x is C 1H 0-8, no four-card suit to show: three hearts shows H>=3, S<=3, hcp<=8 when x is not H, x is not S 2C 0-8, no four-card suit to show: three clubs shows C>=3, H<=3, S<=3, hcp<=8 when x is not C 2D 0-8, no four-card suit to show: three diamonds shows D>=3, H<=3, S<=3, hcp<=8 when x is not D, x is not C 2{x} Cue bid: 12+ total points, asking partner to describe his hand [alert] [artificial] shows hcp+length_points>=12 after (1x) X (P) 1y (P) | (1x) P (P) X (P) 1y (P) P Minimum takeout double: partner has chosen shows hcp<=16 2{y} 18-19 total points, four-card support shows y>=4, hcp+length_points=17..19 3{y} 20-21 total points, four-card support shows y>=4, hcp+length_points=20..21 4{y} 22+ total points, four-card support for partner's major shows y>=4, hcp+length_points>=22 when y is H | y is S 1N 18-19 balanced with a stopper in {x} shows balanced, hcp=17..19 when stop(x) cheapest(S) 18+ total points and a five-card spade suit shows S>=5, hcp+length_points>=18 | hcp>=17 when x is not S, y is not S cheapest(H) 18+ total points and a five-card heart suit shows H>=5, hcp+length_points>=18 | hcp>=17 when x is not H, y is not H cheapest(D) 18+ total points and a five-card diamond suit shows D>=5, hcp+length_points>=18 | hcp>=17 when x is not D, y is not D cheapest(C) 18+ total points and a five-card club suit shows C>=5, hcp+length_points>=18 | hcp>=17 when x is not C, y is not C after (1x) X (P) 2y (P) | (1x) P (P) X (P) 2y (P) P Minimum takeout double: partner has chosen shows hcp<=16 3{y} 18+ total points, four-card support shows y>=4, hcp+length_points>=18 | hcp>=17 3{y} 20+ and three-card support shows y=3, hcp>=20 cheapest(S) 18+ total points and a five-card spade suit shows S>=5, hcp+length_points>=18 | hcp>=17 when x is not S, y is not S cheapest(H) 18+ total points and a five-card heart suit shows H>=5, hcp+length_points>=18 | hcp>=17 when x is not H, y is not H cheapest(D) 18+ total points and a five-card diamond suit shows D>=5, hcp+length_points>=18 | hcp>=17 when x is not D, y is not D cheapest(C) 18+ total points and a five-card club suit shows C>=5, hcp+length_points>=18 | hcp>=17 when x is not C, y is not C 2N 18-19 balanced with a stopper in {x} shows balanced, hcp=17..19 when stop(x) after (1x) X (2x) P (P) cheapest(S) 16+ and five spades shows S>=5, hcp>=16 when x is not S cheapest(H) 16+ and five hearts shows H>=5, S<=4, hcp>=16 when x is not H X Takeout again: short in {x} shows x<=1, hcp>=12 P Nothing more after (1x) X (2x) P (P) X (P) cheapest(S) Takeout: four or more spades shows S>=4, S>=H, S>=D, S>=C when x is not S cheapest(H) Takeout: four or more hearts shows H>=4, H>=D, H>=C when x is not H cheapest(D) Takeout: my longest, diamonds shows D>=C when x is not D cheapest(C) Takeout: my longest, clubs shows C>=3 when x is not C P Penalty: five of their suit shows x>=5, hcp>=5 after (1x) X (P) 1y (2x) | (1x) X (P) 2y (2x) 3{y} 16+, four-card support shows y>=4, hcp+length_points>=16 cheapest(C) 16+ and five clubs shows C>=5, hcp>=16, y<=3 when x is not C, y is not C cheapest(D) 16+ and five diamonds shows D>=5, D>C, hcp>=16, y<=3 when x is not D, y is not D P Nothing more after (1x) X (1y) P (*) | (1x) X (2y) P (*) when y is not x, !rho.last=P cheapest(S) 18+ total points and five spades shows S>=5, hcp+length_points>=18 | hcp>=17 when x is not S, y is not S cheapest(H) 18+ total points and five hearts shows H>=5, S<=4, hcp+length_points>=18 | hcp>=17 when x is not H, y is not H cheapest(D) 18+ total points and five diamonds shows D>=5, S<=4, H<=4, hcp+length_points>=18 | hcp>=17 when x is not D, y is not D cheapest(C) 18+ total points and five clubs shows C>=5, D<=4, S<=4, H<=4, hcp+length_points>=18 | hcp>=17 when x is not C, y is not C after (1x) X (P) 2x (*) when !rho.last=P X Power double: 17+ HCP shows hcp>=17 P No extras: 16 or less shows hcp<=16 cheapest(S) Four or more spades, no extras shows S>=4, hcp<=16 when x is not S cheapest(H) Four or more hearts, no extras shows H>=4, S<=3, hcp<=16 when x is not H cheapest(N) A stopper in {x}, no extras shows stop(x), hcp<=16 cheapest(D) Four or more diamonds, no extras shows D>=4, D>C | x is C, hcp<=16 when x is not D cheapest(C) Four or more clubs, no extras shows C>=4, C>=D | x is D, hcp<=16 when x is not C after (1x) X (1y) | (1x) P (P) X (1y) 1S Free bid: 6+ total points, four or more spades shows S>=4, hcp+length_points>=6 when x is not S, y is not S cheapest(H) Free bid: 6+ total points, five or more hearts shows H>=5, hcp+length_points>=6 when x is not H, y is not H cheapest(D) Free bid: 6+ total points, five or more diamonds shows D>=5, S<=3, H<=4, hcp+length_points>=6 when x is not D, y is not D cheapest(C) Free bid: 6+ total points, five or more clubs shows C>=5, S<=3, H<=4, hcp+length_points>=6 when x is not C, y is not C 1N 8-11 total points, balanced, a stopper in both their suits shows balanced, hcp+length_points>=8, hcp+length_points<=11 when stop(x), stop(y) 2{x} Cue bid: 12+ total points [alert] [artificial] shows hcp+length_points>=12 P No free bid after (1x) X (2y) | (1x) P (P) X (2y) cheapest(S) Free bid: 8+ total points, five or more spades shows S>=5, hcp+length_points>=8 when x is not S, y is not S cheapest(H) Free bid: 8+ total points, five or more hearts shows H>=5, S<=4, hcp+length_points>=8 when x is not H, y is not H cheapest(D) Free bid: 8+ total points, five or more diamonds shows D>=5, S<=4, H<=4, hcp+length_points>=8 when x is not D, y is not D cheapest(C) Free bid: 8+ total points, five or more clubs shows C>=5, S<=4, H<=4, hcp+length_points>=8 when x is not C, y is not C 2N 11-12 total points, balanced, a stopper in {x} shows balanced, hcp+length_points>=11, hcp+length_points<=12 when stop(x) P No free bid after (1x) X (XX) | (1x) P (P) X (XX) cheapest(S) Four or more spades shows S>=4, S>H when x is not S cheapest(H) Four or more hearts shows H>=4, H>=S when x is not H cheapest(D) Four or more diamonds shows D>=4, D>C, S<=3 | x is S, H<=3 | x is H when x is not D cheapest(C) Four or more clubs shows C>=4, C>=D, S<=3 | x is S, H<=3 | x is H when x is not C P No four-card suit to name after (1x) X (XX) P (P) cheapest(C) Rescue: four or more clubs, the cheapest shows C>=4 when x is not C cheapest(D) Rescue: four or more diamonds, the cheapest shows D>=4, C<=3 | x is C when x is not D cheapest(H) Rescue: four or more hearts, the cheapest shows H>=4, C<=3 | x is C, D<=3 | x is D when x is not H cheapest(S) Rescue: four or more spades shows S>=4, C<=3 | x is C, D<=3 | x is D, H<=3 | x is H when x is not S P Leaves it in: four or more of their suit shows x>=4 == their-1nt-overcall: Responder over their 1NT overcall file: conventions/competitive/their-1nt-overcall.bid needs: base after 1x (1N) X Penalty: 10+ total points, no long suit of our own shows hcp+length_points>=10 when S<=4 | x is S, H<=4 | x is H, C<=5, D<=5 2{x} Raise: 6-9 total points, support for partner's suit shows x>=3, tp(x)>=6, tp(x)<=9 when x is H | x is S | x>=5 2H 9+ total points, five or more hearts shows H>=5, hcp+length_points>=9 when x is not H 2S 9+ total points, five or more spades shows S>=5, hcp+length_points>=9 when x is not S 2C 9+ total points, six or more clubs shows C>=6, hcp+length_points>=9 when x is not C 2D 9+ total points, six or more diamonds shows D>=6, hcp+length_points>=9 when x is not D 3C Preemptive: seven or more clubs, 5-9 total points shows C>=7, hcp+length_points>=5, hcp+length_points<=9 when x is not C 3D Preemptive: seven or more diamonds, 5-9 total points shows D>=7, hcp+length_points>=5, hcp+length_points<=9 when x is not D P Nothing to say over their notrump after 1x (1N) X (P) 2{x} Pulls: six or more {x}, a minimum with a singleton or void shows x>=6, hcp<=13, shortest<=1 P Sits for partner's penalty double after 1x (1N) X (*) when !rho.last=P P Partner doubled: his move next after 1x (1N) 3z (P) when z is C | z is D, z is not x 5{z} Game in partner's suit: 19+ and support shows z>=2, hcp>=19 P Partner preempted: his suit, and no game == total-tricks: The Law of Total Tricks file: conventions/competitive/total-tricks.bid needs: base after (any auction) when they.bid, !lho.last=P | !rho.last=P, !game_reached 2x Total tricks: eight trumps between us: the two level shows x+partner.x.min=8 when !((lho.H>=5 | rho.H>=5, partner.S>=3, partner.D>=3, partner.C>=3) | (lho.S>=5 | rho.S>=5, partner.H>=3, partner.D>=3, partner.C>=3), partner.x.min=3), !vul | they.vul, partner.x>=3, hcp>=5, hcp+partner.hcp.min<=24 2x Total tricks: eight trumps between us, a trick hedged vulnerable: the two level shows x+partner.x.min-1=8 when !((lho.H>=5 | rho.H>=5, partner.S>=3, partner.D>=3, partner.C>=3) | (lho.S>=5 | rho.S>=5, partner.H>=3, partner.D>=3, partner.C>=3), partner.x.min=3), vul, !they.vul, partner.x>=3, hcp>=5, hcp+partner.hcp.min<=24 2x Total tricks: eight trumps between us, partner's double counted as four: the two level shows x+partner.x.min+1=8 when (lho.H>=5 | rho.H>=5, partner.S>=3, partner.D>=3, partner.C>=3) | (lho.S>=5 | rho.S>=5, partner.H>=3, partner.D>=3, partner.C>=3), partner.x.min=3, !vul | they.vul, partner.x>=3, hcp>=5, hcp+partner.hcp.min<=24 2x Total tricks: eight trumps between us, partner's double counted as four, a trick hedged vulnerable: the two level shows x+partner.x.min+1-1=8 when (lho.H>=5 | rho.H>=5, partner.S>=3, partner.D>=3, partner.C>=3) | (lho.S>=5 | rho.S>=5, partner.H>=3, partner.D>=3, partner.C>=3), partner.x.min=3, vul, !they.vul, partner.x>=3, hcp>=5, hcp+partner.hcp.min<=24 3x Total tricks: nine trumps between us: the three level shows x+partner.x.min=9 when !((lho.H>=5 | rho.H>=5, partner.S>=3, partner.D>=3, partner.C>=3) | (lho.S>=5 | rho.S>=5, partner.H>=3, partner.D>=3, partner.C>=3), partner.x.min=3), !vul | they.vul, partner.x>=3, hcp>=5, hcp+partner.hcp.min<=24 3x Total tricks: nine trumps between us, a trick hedged vulnerable: the three level shows x+partner.x.min-1=9 when !((lho.H>=5 | rho.H>=5, partner.S>=3, partner.D>=3, partner.C>=3) | (lho.S>=5 | rho.S>=5, partner.H>=3, partner.D>=3, partner.C>=3), partner.x.min=3), vul, !they.vul, partner.x>=3, hcp>=5, hcp+partner.hcp.min<=24 3x Total tricks: nine trumps between us, partner's double counted as four: the three level shows x+partner.x.min+1=9 when (lho.H>=5 | rho.H>=5, partner.S>=3, partner.D>=3, partner.C>=3) | (lho.S>=5 | rho.S>=5, partner.H>=3, partner.D>=3, partner.C>=3), partner.x.min=3, !vul | they.vul, partner.x>=3, hcp>=5, hcp+partner.hcp.min<=24 3x Total tricks: nine trumps between us, partner's double counted as four, a trick hedged vulnerable: the three level shows x+partner.x.min+1-1=9 when (lho.H>=5 | rho.H>=5, partner.S>=3, partner.D>=3, partner.C>=3) | (lho.S>=5 | rho.S>=5, partner.H>=3, partner.D>=3, partner.C>=3), partner.x.min=3, vul, !they.vul, partner.x>=3, hcp>=5, hcp+partner.hcp.min<=24 4x Total tricks: ten+ trumps between us: the four level shows x+partner.x.min>=10 when !((lho.H>=5 | rho.H>=5, partner.S>=3, partner.D>=3, partner.C>=3) | (lho.S>=5 | rho.S>=5, partner.H>=3, partner.D>=3, partner.C>=3), partner.x.min=3), !vul | they.vul, partner.x>=3, hcp>=5, hcp+partner.hcp.min<=24 4x Total tricks: ten+ trumps between us, a trick hedged vulnerable: the four level shows x+partner.x.min-1>=10 when !((lho.H>=5 | rho.H>=5, partner.S>=3, partner.D>=3, partner.C>=3) | (lho.S>=5 | rho.S>=5, partner.H>=3, partner.D>=3, partner.C>=3), partner.x.min=3), vul, !they.vul, partner.x>=3, hcp>=5, hcp+partner.hcp.min<=24 4x Total tricks: ten+ trumps between us, partner's double counted as four: the four level shows x+partner.x.min+1>=10 when (lho.H>=5 | rho.H>=5, partner.S>=3, partner.D>=3, partner.C>=3) | (lho.S>=5 | rho.S>=5, partner.H>=3, partner.D>=3, partner.C>=3), partner.x.min=3, !vul | they.vul, partner.x>=3, hcp>=5, hcp+partner.hcp.min<=24 4x Total tricks: ten+ trumps between us, partner's double counted as four, a trick hedged vulnerable: the four level shows x+partner.x.min+1-1>=10 when (lho.H>=5 | rho.H>=5, partner.S>=3, partner.D>=3, partner.C>=3) | (lho.S>=5 | rho.S>=5, partner.H>=3, partner.D>=3, partner.C>=3), partner.x.min=3, vul, !they.vul, partner.x>=3, hcp>=5, hcp+partner.hcp.min<=24 == two-suited-overcalls: Michaels cue bids and the Unusual 2NT file: conventions/competitive/two-suited-overcalls.bid needs: base, overcalls after (1m) when mich_minors | mich_quasi | mich_play 2{m} Michaels: five or more in each major [alert] shows H>=5, S>=5, hcp+length_points>=9, hcp<=17 when strength is wide_range, !vul 2{m} Michaels: five or more in each major [alert] shows H>=5, S>=5, hcp+length_points>=11, hcp<=17 when strength is wide_range, vul 2{m} Michaels, weak: five or more in each major [alert] shows H>=5, S>=5, hcp+length_points>=9, hcp<=11 when strength is weak_or_strong, !vul 2{m} Michaels, weak: five or more in each major [alert] shows H>=5, S>=5, hcp+length_points>=11, hcp<=11 when strength is weak_or_strong, vul 2{m} Michaels, strong: five or more in each major, 16+ [alert] shows H>=5, S>=5, hcp>=16 when strength is weak_or_strong after (1H) when mich_majors | mich_play 2H Michaels: five or more spades and a five-card minor [alert] shows S>=5, C>=5 | D>=5, hcp+length_points>=9, hcp<=17 when strength is wide_range, !vul 2H Michaels: five or more spades and a five-card minor [alert] shows S>=5, C>=5 | D>=5, hcp+length_points>=11, hcp<=17 when strength is wide_range, vul 2H Michaels, weak: five or more spades and a five-card minor [alert] shows S>=5, C>=5 | D>=5, hcp+length_points>=9, hcp<=11 when strength is weak_or_strong, !vul 2H Michaels, weak: five or more spades and a five-card minor [alert] shows S>=5, C>=5 | D>=5, hcp+length_points>=11, hcp<=11 when strength is weak_or_strong, vul 2H Michaels, strong: five or more spades and a five-card minor, 16+ [alert] shows S>=5, C>=5 | D>=5, hcp>=16 when strength is weak_or_strong after (1S) when mich_majors | mich_play 2S Michaels: five or more hearts and a five-card minor [alert] shows H>=5, C>=5 | D>=5, hcp+length_points>=9, hcp<=17 when strength is wide_range, !vul 2S Michaels: five or more hearts and a five-card minor [alert] shows H>=5, C>=5 | D>=5, hcp+length_points>=11, hcp<=17 when strength is wide_range, vul 2S Michaels, weak: five or more hearts and a five-card minor [alert] shows H>=5, C>=5 | D>=5, hcp+length_points>=9, hcp<=11 when strength is weak_or_strong, !vul 2S Michaels, weak: five or more hearts and a five-card minor [alert] shows H>=5, C>=5 | D>=5, hcp+length_points>=11, hcp<=11 when strength is weak_or_strong, vul 2S Michaels, strong: five or more hearts and a five-card minor, 16+ [alert] shows H>=5, C>=5 | D>=5, hcp>=16 when strength is weak_or_strong after (1H) | (1S) when u2n_play | u2n_jump 2N Unusual 2NT: five or more in each minor [alert] shows C>=5, D>=5, hcp+length_points>=9 after (1C) when u2n_play | u2n_jump 2N Unusual 2NT: five or more diamonds and hearts [alert] shows D>=5, H>=5, hcp+length_points>=9 after (1D) when u2n_play | u2n_jump 2N Unusual 2NT: five or more clubs and hearts [alert] shows C>=5, H>=5, hcp+length_points>=9 after (1m) 2m (P) | (1m) 2m (X) when partner.H>=5, partner.S>=5 2H Preference: more hearts than spades shows H>S 2S Preference: spades, at least as many as hearts shows S>=H 3H Jump preference: invitational, 10-12 with three hearts shows H>S, H>=3, hcp>=10, hcp<=12 3S Jump preference: invitational, 10-12 with three spades shows S>=H, S>=3, hcp>=10, hcp<=12 4H Game in hearts: to play (a preempt with four, or 13-15) shows H>S, (H>=4, hcp<=9) | (H>=3, hcp>=13, hcp<=15) 4S Game in spades: to play (a preempt with four, or 13-15) shows S>=H, (S>=4, hcp<=9) | (S>=3, hcp>=13, hcp<=15) 3{m} Cue bid: 16+, game or slam interest; describe your hand [alert] shows hcp>=16 3N To play: 13+, their suit held, no major fit shows hcp>=13, H<=2, S<=2, stop(m) 2D Natural: six or more diamonds, no major fit shows D>=6, H<=2, S<=2, hcp<=12 when m is C after (1m) 2m (*) when partner.H>=5, partner.S>=5 cheapest(H) Competes: three or more hearts, more than spades shows H>=3, H>S, hcp<=12 cheapest(S) Competes: three or more spades shows S>=3, S>=H, hcp<=12 4H Game in hearts over their bid shows H>=4, H>S 4S Game in spades over their bid shows S>=4, S>=H P No fit worth competing with after (1H) 2H (P) | (1H) 2H (X) when partner.S>=5 2S Preference: three or more spades shows S>=3 2N Asks for your minor: at most two spades [alert] shows S<=2 3S Jump preference: invitational, 10-12 with three spades shows S>=3, hcp>=10, hcp<=12 4S Game in spades: to play (a preempt with four, or 13-15) shows (S>=4, hcp<=9) | (S>=3, hcp>=13, hcp<=15) 3H Cue bid: 16+, game or slam interest; describe your hand [alert] shows hcp>=16 3N To play: 13+, hearts held, no spade fit shows hcp>=13, S<=2, stop(H) after (1S) 2S (P) | (1S) 2S (X) when partner.H>=5 3H Preference: three or more hearts shows H>=3 2N Asks for your minor: at most two hearts [alert] shows H<=2 4H Game in hearts: to play (a preempt with four, or 13-15) shows (H>=4, hcp<=9) | (H>=3, hcp>=13, hcp<=15) 3S Cue bid: 12+, game interest; describe your hand [alert] shows hcp>=12 3N To play: 13+, spades held, no heart fit shows hcp>=13, H<=2, stop(S) after (1M) 2M (*) when partner.S>=5 | partner.H>=5 cheapest(S) Competes: three or more spades shows S>=3, hcp<=12 when M is H cheapest(H) Competes: three or more hearts shows H>=3, hcp<=12 when M is S P No fit worth competing with after (1M) 2M (P) 2N (P) 3C My minor is clubs shows C>=5, C>=D 3D My minor is diamonds shows D>=5, D>C after (1M) 2M (P) 2N (P) 3m (P) P To play in partner's minor shows hcp<=12 3N Game: 13+, {M} held shows hcp>=13, stop(M) 5{m} Game in partner's minor: 13+, three-card support shows hcp>=13, m>=3 after (1M) 2N (P) | (1M) 2N (X) when partner.C>=5, partner.D>=5 3C Preference: more clubs than diamonds shows C>D 3D Preference: diamonds, at least as many as clubs shows D>=C 4C Preemptive: four or more clubs, up to 8 shows C>=4, C>D, hcp<=8 4D Preemptive: four or more diamonds, up to 8 shows D>=4, D>=C, hcp<=8 5C Game in clubs: 12+ with four-card support shows C>=4, C>D, hcp>=12 5D Game in diamonds: 12+ with four-card support shows D>=4, D>=C, hcp>=12 3N To play: 13+, both majors held shows hcp>=13, stop(H), stop(S) 3{M} Cue bid: 16+, game or slam interest [alert] shows hcp>=16 after (1C) 2N (P) | (1C) 2N (X) when partner.D>=5, partner.H>=5 3D Preference: more diamonds than hearts shows D>H 3H Preference: hearts, at least as many as diamonds shows H>=D 4D Preemptive: four or more diamonds, up to 8 shows D>=4, D>H, hcp<=8 4H Game in hearts: to play (a preempt with four, or 12-15) shows H>=D, (H>=4, hcp<=8) | (H>=3, hcp>=12, hcp<=15) 3N To play: 13+, clubs and spades held shows hcp>=13, stop(C), stop(S) 3C Cue bid: 16+, game or slam interest [alert] shows hcp>=16 after (1D) 2N (P) | (1D) 2N (X) when partner.C>=5, partner.H>=5 3C Preference: more clubs than hearts shows C>H 3H Preference: hearts, at least as many as clubs shows H>=C 4C Preemptive: four or more clubs, up to 8 shows C>=4, C>H, hcp<=8 4H Game in hearts: to play (a preempt with four, or 12-15) shows H>=C, (H>=4, hcp<=8) | (H>=3, hcp>=12, hcp<=15) 3N To play: 13+, diamonds and spades held shows hcp>=13, stop(D), stop(S) 3D Cue bid: 16+, game or slam interest [alert] shows hcp>=16 after (1x) 2N (*) when partner.longest>=5, partner.second_longest>=5 P No fit worth competing with after (1x) 2x (P) 2y (P) | (1x) 2x (P) 3y (P) when y is not x, y is H | y is S, !partner.jumped P Minimum: partner has chosen 3{y} Strong two-suiter: invites game shows hcp>=15, hcp<=16 4{y} Strong two-suiter: game shows hcp>=17 after (1x) 2x (P) 3y (P) when y is not x, y is H | y is S, partner.jumped 4{y} Accepts the invitation shows hcp>=11 P Declines: a minimum after (1x) 2x (P) 3x (P) cheapest(S) Minimum: spades shows S>=H, hcp<=12 cheapest(H) Minimum: hearts shows H>S, hcp<=12 4S Maximum: game in spades shows S>=H, hcp>=13 4H Maximum: game in hearts shows H>S, hcp>=13 after (1x) 2N (P) 3y (P) when y is not x P Minimum: partner has chosen 4{y} Strong: game in hearts shows hcp>=17 when y is H 3N Strong: 17+, {x} held shows hcp>=17, stop(x) after (1x) 2N (P) 3x (P) cheapest(C) Minimum: clubs shows C>=5, C>=D, hcp<=12 when x is H | x is S cheapest(D) Minimum: diamonds shows D>=5, D>C, hcp<=12 when x is H | x is S 3N Maximum: 13+, {x} held shows hcp>=13, stop(x) cheapest(H) Hearts shows H>=5 when x is C | x is D after 1H (2H) when rho.S>=5 2S Cue bid: limit raise or better in hearts [alert] shows H>=3, hcp+length_points>=10 3H Competitive raise: 6-9, three or more hearts shows H>=3, hcp+length_points>=6, hcp+length_points<=9 4H Preemptive raise: four or more hearts, under 10 shows H>=4, hcp+length_points<=9 2N 11-12, spades held, no fit shows hcp>=11, hcp<=12, stop(S), H<=2 3N 13+, spades held, no fit shows hcp>=13, stop(S), H<=2 3C Natural: five or more clubs, 12+, forcing shows C>=5, H<=2, hcp>=12 3D Natural: five or more diamonds, 12+, forcing shows D>=5, H<=2, hcp>=12 P Nothing to say over their Michaels after 1S (2S) when rho.H>=5 3H Cue bid: limit raise or better in spades [alert] shows S>=3, hcp+length_points>=10 3S Competitive raise: 6-9, three or more spades shows S>=3, hcp+length_points>=6, hcp+length_points<=9 4S Preemptive raise: four or more spades, under 10 shows S>=4, hcp+length_points<=9 2N 11-12, hearts held, no fit shows hcp>=11, hcp<=12, stop(H), S<=2 3N 13+, hearts held, no fit shows hcp>=13, stop(H), S<=2 3C Natural: five or more clubs, 12+, forcing shows C>=5, S<=2, hcp>=12 3D Natural: five or more diamonds, 12+, forcing shows D>=5, S<=2, hcp>=12 P Nothing to say over their Michaels after 1m (2m) when rho.H>=5, rho.S>=5 2H Cue bid: limit raise or better in {m} [alert] shows m>=4, hcp+length_points>=11 3{m} Competitive raise: 6-9, four or more {m} shows m>=4, hcp+length_points>=6, hcp+length_points<=9 2D Natural: five or more diamonds, 8+ shows D>=5, hcp+length_points>=8 when m is C 3C Natural: five or more clubs, 10+ shows C>=5, hcp+length_points>=10 when m is D 2N 11-12, both majors held shows hcp>=11, hcp<=12, stop(H), stop(S) 3N 13+, both majors held shows hcp>=13, stop(H), stop(S) P Nothing to say over their Michaels after 1M (2N) when rho.C>=5, rho.D>=5 3{M} Competitive raise: 7-10, three or more {M} shows M>=3, hcp+length_points>=7, hcp+length_points<=10 4{M} Preemptive raise: four or more {M}, under 10 shows M>=4, hcp+length_points<=9 3N 13+, both minors held, no fit shows hcp>=13, stop(C), stop(D), M<=2 P Nothing to say over their 2NT after 1M (2N) when rho.C>=5, rho.D>=5, !uvu 3C Cue bid: limit raise or better in {M} [alert] shows M>=3, hcp+length_points>=10 3D Cue bid: game force without a fit [alert] shows hcp>=13, M<=2 3S Natural: five or more spades, 12+, forcing shows S>=5, H<=2, hcp>=12 when M is H after 1M (2N) when rho.C>=5, rho.D>=5, uvu 3D Unusual vs Unusual: limit raise or better in {M} [alert] shows M>=3, hcp+length_points>=10 3C Unusual vs Unusual: game force with five of the other major [alert] shows hcp>=13, M<=2, S>=5 | M is S, H>=5 | M is H 3S Natural: five or more spades, 7-10 shows S>=5, H<=2, hcp+length_points>=7, hcp+length_points<=10 when M is H after 1C (2N) when rho.D>=5, rho.H>=5 3D Cue bid: limit raise or better in clubs [alert] shows C>=5, hcp+length_points>=10 3C Competitive raise: 6-9, five or more clubs shows C>=5, hcp+length_points>=6, hcp+length_points<=9 3S Natural: five or more spades, 10+, forcing shows S>=5, hcp+length_points>=10 3N 13+, diamonds and hearts held shows hcp>=13, stop(D), stop(H) P Nothing to say over their 2NT after 1D (2N) when rho.C>=5, rho.H>=5 3C Cue bid: limit raise or better in diamonds [alert] shows D>=4, hcp+length_points>=10 3D Competitive raise: 6-9, four or more diamonds shows D>=4, hcp+length_points>=6, hcp+length_points<=9 3S Natural: five or more spades, 10+, forcing shows S>=5, hcp+length_points>=10 3N 13+, clubs and hearts held shows hcp>=13, stop(C), stop(H) P Nothing to say over their 2NT after 1m (2m) 3m (P) | 1M (2M) 3M (P) | 1M (2N) 3M (P) when they.bid 4{M} Game: 17+ opposite the competitive raise shows tp(M)>=17 P The raise was competitive: no game after 1x (2x) 2N (P) when they.bid 3N Accepts: 14+ shows hcp>=14 P Minimum: 2NT is enough after 1x (2x) 3x (*) | 1x (2x) 4x (*) | 1x (2N) 3x (*) | 1x (2N) 4x (*) | 1x (2x) 2N (*) | 1x (2x) 3N (*) | 1x (2N) 3N (*) when they.bid X Penalty: 15+ HCP, they have bid over partner's raise shows hcp>=15 P Partner has raised: nothing more to say after 1x (2x) 3x (*) X (P) | 1x (2x) 4x (*) X (P) | 1x (2N) 3x (*) X (P) | 1x (2N) 4x (*) X (P) | 1x (2x) 2N (*) X (P) | 1x (2x) 3N (*) X (P) | 1x (2N) 3N (*) X (P) when they.bid P Partner doubled for penalty: leave it in after (any auction) when asked limit_raise(t) 4{t} Accepts: game in {t} shows tp(t)>=14 when t is H | t is S 3N Accepts: 14+, game in notrump shows hcp>=14 when t is C | t is D 5{t} Accepts: 16+, game in {t} shows hcp>=16, t>=5 when t is C | t is D cheapest(t) Minimum: no game opposite a limit raise == vs-1nt: Over their 1NT: what every defence shares file: conventions/competitive/vs-1nt.bid needs: base after (1N) when !def is other | dont_play 3S Preemptive: seven spades shows S>=7, hcp>=4, hcp+length_points<=11 3H Preemptive: seven hearts shows H>=7, hcp>=4, hcp+length_points<=11 3D Preemptive: seven diamonds shows D>=7, hcp>=4, hcp+length_points<=11 3C Preemptive: seven clubs shows C>=7, hcp>=4, hcp+length_points<=11 after (1N) | (1N) P (P) P Nothing to say over their 1NT after (any auction) when asked nt_majors, rho.last=P | rho.last=X P Hearts: to play shows H>=S when partner.last=2H 2H Preference: hearts shows H>=S 2S Preference: spades shows S>H 3H Invitational: four hearts shows H>=4, H>=S, tp(H)=10..12 3S Invitational: four spades shows S>=4, S>H, tp(S)=10..12 4H Game in hearts shows H>=3, H>=S, tp(H)>=13 4S Game in spades shows S>=3, S>H, tp(S)>=13 P Long clubs: to play shows C>=6, H<=2, S<=2 when partner.last=2C P Long diamonds: to play shows D>=6, H<=2, S<=2 when partner.last=2D 3C Long clubs: to play shows C>=6, H<=2, S<=2 when !partner.last=2C 3D Long diamonds: to play shows D>=6, H<=2, S<=2 when !partner.last=2D after (any auction) when asked nt_mm(M), rho.last=P | rho.last=X P {M} to play shows M>=2 3{M} Invitational raise shows M>=3, tp(M)=10..12 4{M} Game in {M} shows M>=3, tp(M)>=13 2N Which is your minor? [alert] [artificial] shows M<=1 2S Six or more spades: to play shows S>=6, M<=2 when M is H 3H Six or more hearts: to play shows H>=6, M<=2 when M is S 3C Six or more clubs: to play shows C>=6, M<=1 3D Six or more diamonds: to play shows D>=6, M<=1 after (any auction) when asked nt_which_minor, rho.last=P | rho.last=X 3C My minor is clubs shows C>=4, C>=D 3D My minor is diamonds shows D>=4, D>C after (any auction) when asked nt_minors, rho.last=P | rho.last=X 3C Preference: clubs shows C>D 3D Preference: diamonds shows D>=C 5C Game in clubs shows C>=4, C>D, tp(C)>=14 5D Game in diamonds shows D>=4, D>=C, tp(D)>=14 3H Six or more hearts: to play shows H>=6, C<=2, D<=2 3S Six or more spades: to play shows S>=6, C<=2, D<=2 after (any auction) when asked nt_pc(x), rho.last=P | rho.last=X P Support for {x}: to play shows x>=3 2D Which is your other suit? [alert] shows x<=2 when x is C 2H Which is your other suit? (pass or correct) [alert] shows x<=2 when x is D after (any auction) when asked nt_other, rho.last=P | rho.last=X P My other suit is diamonds shows D>=4 when partner.last=2D P My other suit is hearts shows H>=4 when partner.last=2H 2H My other suit is hearts shows H>=4 2S My other suit is spades shows S>=4 after (any auction) when asked nt_one(x), rho.last=P | rho.last=X 3{x} Invitational raise shows x>=2, hcp=11..12 when x is H | x is S 4{x} Game in {x} shows x>=2, hcp>=13 when x is H | x is S P Nothing more to say after (any auction) when asked nt_penalty, rho.last=P | rho.last=XX P Sitting for the penalty double 2C Weak: five or more clubs shows C>=5, hcp<=4 2D Weak: five or more diamonds shows D>=5, hcp<=4 2H Weak: five or more hearts shows H>=5, hcp<=4 2S Weak: five or more spades shows S>=5, hcp<=4 == vs-preempts: Defence against preempts file: conventions/competitive/vs-preempts.bid needs: base after (2x) when x is not N, rho.hcp.max<=12 X Takeout: 12+ total points and the unbid suits, or 17+ with any shape shows hcp+length_points>=12, (S>=3 | x is S, H>=3 | x is H, D>=3 | x is D, C>=3 | x is C, x<=2) | (hcp>=17, x<=3) cheapest(S) Overcall: five or more spades, 12-16 shows S>=5, S>=H, S>=D, S>=C, hcp+length_points>=12, hcp<=16 when x is not S, quality(S)>=good | top5(S)>=3 | S>=6 | hcp+length_points>=13, cheapest_rank(S)<=13 | hcp+length_points>=13 cheapest(H) Overcall: five or more hearts, 12-16 shows H>=5, H>S, H>=D, H>=C, hcp+length_points>=12, hcp<=16 when x is not H, quality(H)>=good | top5(H)>=3 | H>=6 | hcp+length_points>=13, cheapest_rank(H)<=13 | hcp+length_points>=13 cheapest(D) Overcall: five or more diamonds, 12-16 shows D>=5, D>S, D>H, D>=C, hcp+length_points>=12, hcp<=16 when x is not D, quality(D)>=good | top5(D)>=3 | D>=6 | hcp+length_points>=13, cheapest_rank(D)<=13 | hcp+length_points>=13 cheapest(C) Overcall: five or more clubs, 12-16 shows C>=5, C>S, C>H, C>D, hcp+length_points>=12, hcp<=16 when x is not C, quality(C)>=good | top5(C)>=3 | C>=6 | hcp+length_points>=13, cheapest_rank(C)<=13 | hcp+length_points>=13 jump(S) Strong jump overcall: six or more spades, 15-16 shows S>=6, hcp=15..16 when x is not S jump(H) Strong jump overcall: six or more hearts, 15-16 shows H>=6, H>S, hcp=15..16 when x is not H, x is not S cheapest(N) 15-17 balanced, {x} stopped, no five-card major shows balanced, hcp=15..17, S<=4, H<=4 when stop(x) 4S Seven or more spades: game shows S>=7, hcp+length_points>=13 when x is not S 4H Seven or more hearts: game shows H>=7, H>S, hcp+length_points>=13 when x is not H P Nothing to say over their weak two after (2x) P (P) when x is not N, lho.hcp.max<=12 X Reopening double: 12+, short in {x}, the unbid suits shows hcp+length_points>=12, (S>=3 | x is S, H>=3 | x is H, D>=3 | x is D, C>=3 | x is C, x<=2) | (hcp>=17, x<=3) cheapest(S) Balancing: five or more spades shows S>=5, S>=H, S>=D, S>=C, hcp+length_points>=9, hcp<=16 when x is not S, cheapest_rank(S)<=13 | hcp+length_points>=11 cheapest(H) Balancing: five or more hearts shows H>=5, H>S, H>=D, H>=C, hcp+length_points>=9, hcp<=16 when x is not H, cheapest_rank(H)<=13 | hcp+length_points>=11 cheapest(D) Balancing: five or more diamonds shows D>=5, D>S, D>H, D>=C, hcp+length_points>=9, hcp<=16 when x is not D, cheapest_rank(D)<=13 | hcp+length_points>=11 cheapest(C) Balancing: five or more clubs shows C>=5, C>S, C>H, C>D, hcp+length_points>=9, hcp<=16 when x is not C, cheapest_rank(C)<=13 | hcp+length_points>=11 jump(S) Six or more spades, 15-16 shows S>=6, hcp=15..16 when x is not S, cheapest_rank(S)<=13 jump(H) Six or more hearts, 15-16 shows H>=6, H>S, hcp=15..16 when x is not H, cheapest_rank(H)<=13 cheapest(N) 16-18 balanced, {x} stopped shows balanced, hcp=16..18, S<=4, H<=4 when stop(x) P Nothing to reopen with after (3x) when x is not N, rho.hcp.max<=12 X Takeout: 12+, short in {x}, the unbid suits, or 17+ shows hcp+length_points>=12, (S>=3 | x is S, H>=3 | x is H, D>=3 | x is D, C>=3 | x is C, x<=2) | (hcp>=17, x<=3) cheapest(S) Overcall: five or more spades shows S>=5, S>=H, S>=D, S>=C, hcp+length_points>=12, hcp<=17 when x is not S, quality(S)>=good | top5(S)>=3 | S>=6 | hcp+length_points>=14, cheapest_rank(S)<=18 | hcp+length_points>=14 cheapest(H) Overcall: five or more hearts shows H>=5, H>S, H>=D, H>=C, hcp+length_points>=12, hcp<=17 when x is not H, quality(H)>=good | top5(H)>=3 | H>=6 | hcp+length_points>=14, cheapest_rank(H)<=18 | hcp+length_points>=14 cheapest(D) Overcall: five or more diamonds shows D>=5, D>S, D>H, D>=C, hcp+length_points>=12, hcp<=17 when x is not D, quality(D)>=good | top5(D)>=3 | D>=6 | hcp+length_points>=14, cheapest_rank(D)<=18 | hcp+length_points>=14 cheapest(C) Overcall: five or more clubs shows C>=5, C>S, C>H, C>D, hcp+length_points>=12, hcp<=17 when x is not C, quality(C)>=good | top5(C)>=3 | C>=6 | hcp+length_points>=14, cheapest_rank(C)<=18 | hcp+length_points>=14 3N 17-21 with {x} stopped shows hcp=17..21, S<=4, H<=4 when stop(x) 4S Seven or more spades: game shows S>=7, hcp+length_points>=13 when x is not S 4H Seven or more hearts: game shows H>=7, H>S, hcp+length_points>=13 when x is not H P Nothing to say over their preempt after (3x) P (P) when x is not N, lho.hcp.max<=12 X Reopening double: 12+, short in {x}, the unbid suits shows hcp+length_points>=12, (S>=3 | x is S, H>=3 | x is H, D>=3 | x is D, C>=3 | x is C, x<=1) | (hcp>=17, x<=3) cheapest(S) Balancing: five or more spades shows S>=5, S>=H, S>=D, S>=C, hcp+length_points>=11, hcp<=17 when x is not S, cheapest_rank(S)<=18 | hcp+length_points>=13 cheapest(H) Balancing: five or more hearts shows H>=5, H>S, H>=D, H>=C, hcp+length_points>=11, hcp<=17 when x is not H, cheapest_rank(H)<=18 | hcp+length_points>=13 cheapest(D) Balancing: five or more diamonds shows D>=5, D>S, D>H, D>=C, hcp+length_points>=11, hcp<=17 when x is not D, cheapest_rank(D)<=18 | hcp+length_points>=13 cheapest(C) Balancing: five or more clubs shows C>=5, C>S, C>H, C>D, hcp+length_points>=11, hcp<=17 when x is not C, cheapest_rank(C)<=18 | hcp+length_points>=13 3N 17-20 with {x} stopped shows hcp=17..20, S<=4, H<=4 when stop(x) P Nothing to reopen with after (4x) when x is H, rho.hcp.max<=12 X Takeout: 14+, short in hearts shows hcp+length_points>=14, x<=2, S>=3 4S Five or more spades, 14+ shows S>=5, hcp+length_points>=14 cheapest(D) Five or more diamonds, 16+ shows D>=5, D>=C, hcp+length_points>=16 cheapest(C) Five or more clubs, 16+ shows C>=5, C>D, hcp+length_points>=16 P Nothing to say over their preempt after (4x) when x is S, rho.hcp.max<=12 X Values: 17+, for penalty shows hcp>=17, x>=2 cheapest(D) Five or more diamonds, 16+ shows D>=5, D>=C, hcp+length_points>=16 cheapest(H) Five or more hearts, 16+ shows H>=5, H>=D, H>=C, hcp+length_points>=16 cheapest(C) Five or more clubs, 16+ shows C>=5, C>D, hcp+length_points>=16 P Nothing to say over their preempt after (4x) P (P) when x is H, lho.hcp.max<=12 X Reopening double: 12+, no hearts shows hcp+length_points>=12, x<=1 4S Five or more spades, 13+ shows S>=5, hcp+length_points>=13 cheapest(D) Five or more diamonds, 15+ shows D>=5, D>=C, hcp+length_points>=15 cheapest(C) Five or more clubs, 15+ shows C>=5, C>D, hcp+length_points>=15 P Nothing to reopen with after (4x) X (P) | (4x) P (P) X (P) when x is H | x is S 4S Five or more spades shows S>=5 when x is H P Leaves the double in after (2x) X (P) | (3x) X (P) | (2x) P (P) X (P) | (3x) P (P) X (P) when x is not C P Penalty: five of their suit with two top honours shows x>=5, quality(x)>=good | top5(x)>=3 P Penalty: four of their suit, a flat hand and 10+ shows x=4, hcp>=10, stop(x), S<=4, H<=4, D<=4, C<=4 cheapest(x) Cue bid: 13+, forcing to game [alert] [artificial] shows hcp+length_points>=13 4S Game: four or more spades, 11+ shows S>=4, S>=H, hcp+length_points=11..12 when x is not S 4H Game: four or more hearts, 11+ shows H>=4, H>S, hcp+length_points=11..12 when x is not H jump(S) Invitational: five or more spades, 8-10 shows S>=5, S>=H, hcp+length_points=8..10 when x is not S, cheapest_rank(S)<=13 jump(H) Invitational: five or more hearts, 8-10 shows H>=5, H>S, hcp+length_points=8..10 when x is not H, cheapest_rank(H)<=13 cheapest(N) 11-12 with {x} stopped shows hcp+length_points=11..12, S<=3 | x is S, H<=3 | x is H when stop(x), cheapest_rank(x)<14 3N Game with {x} stopped, no four-card major shows hcp+length_points>=13 | (hcp+length_points>=11, cheapest_rank(x)>=14), S<=3 | x is S, H<=3 | x is H when stop(x) cheapest(S) Four or more spades, 0-10 shows S>=4, S>=H, hcp+length_points<=10 when x is not S cheapest(H) Four or more hearts, 0-10 shows H>=4, H>S, hcp+length_points<=10 when x is not H cheapest(D) Four or more diamonds, 0-10, no four-card major shows D>=4, D>=C, hcp+length_points<=10, S<=3 | x is S, H<=3 | x is H when x is not D cheapest(C) Four or more clubs, 0-10, no four-card major shows C>=4, C>D | x is D, hcp+length_points<=10, S<=3 | x is S, H<=3 | x is H when x is not C cheapest(S) Our best suit: spades when x is not S, S>=H, S>=D, S>=C cheapest(H) Our best suit: hearts when x is not H, H>=D, H>=C cheapest(D) Our best suit: diamonds when x is not D, D>=C cheapest(C) Our best suit: clubs when x is not C after (2x) X (P) 2y (P) | (2x) X (P) 3y (P) | (3x) X (P) 3y (P) | (3x) X (P) 4y (P) | (2x) P (P) X (P) 2y (P) | (2x) P (P) X (P) 3y (P) when y is not x, x is not C P Minimum double: partner has chosen shows hcp<=16 4{y} 17+ with four: game in partner's major shows y>=4, hcp>=17 when y is H | y is S cheapest(y) 17+ with four: raise shows y>=4, hcp>=17 3N 18+ with {x} stopped shows hcp>=18, stop(x) cheapest(S) 17+ and five or more spades shows S>=5, hcp>=17 when x is not S, y is not S cheapest(H) 17+ and five or more hearts shows H>=5, S<=4, hcp>=17 when x is not H, y is not H after (2x) X (P) 2N (P) when x is not C 3N Accepts the invitation: 14+ shows hcp>=14 P Declines shows hcp<=13 after (2x) 2y (P) | (2x) 3y (P) | (3x) 3y (P) | (3x) 4y (P) | (2x) P (P) 2y (P) | (2x) P (P) 3y (P) when y is not x, x is not C 4{y} Game: three-card support, 12+ shows y>=3, hcp+length_points>=12 when y is H | y is S cheapest(y) Raise: three-card support, 8-11 shows y>=3, hcp+length_points=8..11 3N Game: 12+ with {x} stopped shows hcp+length_points>=12, stop(x), y<=2 P Nothing to add after (2x) 2N (P) when x is not C 3N Game: 9+ shows hcp>=9, S<=5, H<=5 4S Game: six or more spades, 8+ shows S>=6, hcp>=8 when x is not S 4H Game: six or more hearts, 8+ shows H>=6, hcp>=8 when x is not H P No game shows hcp<=8 after 2x (X) | 2x (2y) | 2x (3y) | 2x (2N) | 3x (X) | 3x (3y) | 3x (4y) | 3x (3N) | 4x (X) | 4x (4y) | 4x (5y) when x is not N P They came in: nothing to add after 2x (X) P (*) | 2x (2y) P (*) | 2x (3y) P (*) | 2x (2N) P (*) | 3x (X) P (*) | 3x (3y) P (*) | 3x (4y) P (*) | 4x (X) P (*) | 4x (4y) P (*) | 4x (5y) P (*) when x is not N P Partner passed: the preempt said it all == drury: Drury: a passed hand's 2♣ limit raise file: conventions/majors/drury.bid needs: responses after 1M (P) when passed_hand, drury | reverse 2C Drury: 3+ {M}, limit-raise values [alert] [artificial] shows M>=3, tp(M)=10..12, hcp<=12 when !two_way 2C Drury: exactly three {M}, limit-raise values [alert] [artificial] shows M=3, tp(M)=10..12, hcp<=12 when two_way 2D Two-way Drury: 4+ {M}, limit-raise values [alert] [artificial] shows M>=4, tp(M)=10..12, hcp<=12 when two_way after 1M (X) | 1M (1x) when passed_hand, in_comp, drury | reverse 2C Drury: 3+ {M}, limit-raise values [alert] [artificial] shows M>=3, tp(M)=10..12, hcp<=12 after (any auction) when asked drury(M), rho.last=P, partner.last=2C 2M Sub-minimum: no game opposite a limit raise shows tp(M)<=12 when reverse 2D Reverse Drury: a full opening, 13-14 support points [alert] [artificial] shows tp(M)=13..14 when reverse 2D Drury: a sub-minimum opening [alert] [artificial] shows tp(M)<=12 when !reverse 2M A full opening, 13-14 support points shows tp(M)=13..14 when !reverse 4M Game: 15+ support points shows tp(M)>=15 after (any auction) when asked drury(M), rho.last=P, partner.last=2D 2M Sub-minimum: no game opposite a four-card limit raise shows tp(M)<=12 4M Game opposite a four-card limit raise shows tp(M)>=13 after (any auction) when answered drury(M), partner.last=2{M}, reverse P Partner is sub-minimum: play 2{M} after (any auction) when answered drury(M), partner.last=2D, !reverse 2M Partner is sub-minimum: play 2{M} after (any auction) when answered drury(M), partner.last=2D, reverse 4M Game facing a full opening shows tp(M)>=12 | (tp(M)=11, M>=4) 2M Sign off facing a full opening after (any auction) when answered drury(M), partner.last=2{M}, !reverse 4M Game facing a full opening shows tp(M)>=12 | (tp(M)=11, M>=4) P No game facing a full opening after 1M (P) 2C (P) 2D (P) 2M (P) P Responder signs off == impossible-2s: Impossible 2♠ file: conventions/majors/impossible-2s.bid card: major_openings.impossible_2s.play needs: responder-rebids after 1H (P) 1N (P) 2m (P) 2S Impossible 2♠: good raise of {m}, 4+ {m}, 11+ points [alert] [artificial] shows m>=4, H<=2, points>=11 after 1H (P) 1N (P) 2C (P) 2S (P) 3C Minimum: no game opposite the good raise shows tp(C)<=14 3N Game: 15+, spades and diamonds stopped shows tp(C)>=15, stop(S), stop(D) 3D Diamond stopper, not spades: looking for 3NT shows tp(C)>=15, stop(D), !stop(S) 3S Spade stopper, not diamonds: looking for 3NT shows tp(C)>=15, stop(S), !stop(D) 5C Game in clubs: 15+, neither suit stopped shows tp(C)>=15 after 1H (P) 1N (P) 2D (P) 2S (P) 3D Minimum: no game opposite the good raise shows tp(D)<=14 3N Game: 15+, spades and clubs stopped shows tp(D)>=15, stop(S), stop(C) 3C Club stopper, not spades: looking for 3NT shows tp(D)>=15, stop(C), !stop(S) 3S Spade stopper, not clubs: looking for 3NT shows tp(D)>=15, stop(S), !stop(C) 5D Game in diamonds: 15+, neither suit stopped shows tp(D)>=15 after 1H (P) 1N (P) 2m (P) 2S (P) 3m (P) P Opener is minimum: play three of {m} after 1H (P) 1N (P) 2m (P) 2S (P) 3N (P) | 1H (P) 1N (P) 2m (P) 2S (P) 5m (P) P Opener has placed the contract == jacoby-2nt: Jacoby 2NT file: conventions/majors/jacoby-2nt.bid card: major_openings.jacoby_2nt.play needs: base after 1M (P) when !passed_hand 2N Jacoby 2NT: 4+ {M}, game forcing [alert] [artificial] shows M>=4, tp(M)>=13 after 1M (P) 2N (P) 3x Singleton or void in {x} [artificial] shows x<=1 when x is not M 4x Good 5-card side suit shows x>=5, quality(x)>=good when x is not M 3M 18+, no shortness shows hcp>=18, shortest>=2 3N 15-17, no shortness shows hcp=15..17, shortest>=2 4M Minimum, no shortness shows hcp<=14, shortest>=2 == splinters: Splinters over 1♥ / 1♠ file: conventions/majors/splinters.bid card: major_openings.splinters.play needs: responses after 1H (P) when by_resp 3S Splinter: 4+ hearts, game values, at most one spade [alert] [artificial] shows H>=4, S<=1, !has(A,S), !has(K,S), !has(Q,S), !has(J,S), tp(H)>=15, hcp=12..15 | (hcp=11, S=0) when !passed_hand 3S Splinter by a passed hand: 4+ hearts, 10-11, at most one spade [alert] [artificial] shows H>=4, S<=1, !has(A,S), !has(K,S), !has(Q,S), !has(J,S), hcp=10..11, tp(H)>=13 when passed_hand after 1M (P) when by_resp 4x Splinter: 4+ {M}, game values, at most one {x} [alert] [artificial] shows M>=4, x<=1, !has(A,x), !has(K,x), !has(Q,x), !has(J,x), tp(M)>=15, hcp=12..15 | (hcp=11, x=0) when x is not M, M is S | x is not S, !passed_hand 4x Splinter by a passed hand: 4+ {M}, 10-11, at most one {x} [alert] [artificial] shows M>=4, x<=1, !has(A,x), !has(K,x), !has(Q,x), !has(J,x), hcp=10..11, tp(M)>=13 when x is not M, M is S | x is not S, passed_hand after 1m (P) 1H (P) when by_open 3S Splinter: 4 hearts, 17-21, at most one spade [alert] [artificial] shows H>=4, S<=1, !has(A,S), !has(K,S), !has(Q,S), !has(J,S), tp(H)>=19, hcp=17..21 | (hcp=16, S=0) after 1x (P) 1M (P) when by_open 4y Splinter: 4 {M}, 17-21, at most one {y} [alert] [artificial] shows M>=4, y<=1, !has(A,y), !has(K,y), !has(Q,y), !has(J,y), tp(M)>=19, hcp=17..21 | (hcp=16, y=0) when y is not M, y is not x, M is S | y is not S after 1H (P) 3S (P) 4H Game: no slam interest shows !((!has(K,S), !has(Q,S), !has(J,S), tp(H)>=14) | (!has(K,S), !has(Q,S), has(J,S), tp(H)>=15) | (!has(K,S), has(Q,S), !has(J,S), tp(H)>=16) | (!has(K,S), has(Q,S), has(J,S), tp(H)>=17) | (has(K,S), !has(Q,S), !has(J,S), tp(H)>=17) | (has(K,S), !has(Q,S), has(J,S), tp(H)>=18) | (has(K,S), has(Q,S), !has(J,S), tp(H)>=19) | (has(K,S), has(Q,S), has(J,S), tp(H)>=20)) cheapest(C) Slam try: control bid in ♣ [alert] [artificial] shows (!has(K,S), !has(Q,S), !has(J,S), tp(H)>=14) | (!has(K,S), !has(Q,S), has(J,S), tp(H)>=15) | (!has(K,S), has(Q,S), !has(J,S), tp(H)>=16) | (!has(K,S), has(Q,S), has(J,S), tp(H)>=17) | (has(K,S), !has(Q,S), !has(J,S), tp(H)>=17) | (has(K,S), !has(Q,S), has(J,S), tp(H)>=18) | (has(K,S), has(Q,S), !has(J,S), tp(H)>=19) | (has(K,S), has(Q,S), has(J,S), tp(H)>=20) when cue, H is not C, S is not C, under_game(C), has(A,C) | C<=0 | (style is first_or_second_round, has(K,C) | C<=1), (H is not C, S is not C, C>=2, !has(A,C), !has(K,C)) | (H is not D, S is not D, D>=2, !has(A,D), !has(K,D)) | (H is not H, S is not H, H>=2, !has(A,H), !has(K,H)) | (H is not S, S is not S, S>=2, !has(A,S), !has(K,S)) cheapest(D) Slam try: control bid in ♦ [alert] [artificial] shows (!has(K,S), !has(Q,S), !has(J,S), tp(H)>=14) | (!has(K,S), !has(Q,S), has(J,S), tp(H)>=15) | (!has(K,S), has(Q,S), !has(J,S), tp(H)>=16) | (!has(K,S), has(Q,S), has(J,S), tp(H)>=17) | (has(K,S), !has(Q,S), !has(J,S), tp(H)>=17) | (has(K,S), !has(Q,S), has(J,S), tp(H)>=18) | (has(K,S), has(Q,S), !has(J,S), tp(H)>=19) | (has(K,S), has(Q,S), has(J,S), tp(H)>=20) when cue, H is not D, S is not D, under_game(D), has(A,D) | D<=0 | (style is first_or_second_round, has(K,D) | D<=1), (H is not C, S is not C, C>=2, !has(A,C), !has(K,C)) | (H is not D, S is not D, D>=2, !has(A,D), !has(K,D)) | (H is not H, S is not H, H>=2, !has(A,H), !has(K,H)) | (H is not S, S is not S, S>=2, !has(A,S), !has(K,S)) cheapest(H) Slam try: control bid in ♥ [alert] [artificial] shows (!has(K,S), !has(Q,S), !has(J,S), tp(H)>=14) | (!has(K,S), !has(Q,S), has(J,S), tp(H)>=15) | (!has(K,S), has(Q,S), !has(J,S), tp(H)>=16) | (!has(K,S), has(Q,S), has(J,S), tp(H)>=17) | (has(K,S), !has(Q,S), !has(J,S), tp(H)>=17) | (has(K,S), !has(Q,S), has(J,S), tp(H)>=18) | (has(K,S), has(Q,S), !has(J,S), tp(H)>=19) | (has(K,S), has(Q,S), has(J,S), tp(H)>=20) when cue, H is not H, S is not H, under_game(H), has(A,H) | H<=0 | (style is first_or_second_round, has(K,H) | H<=1), (H is not C, S is not C, C>=2, !has(A,C), !has(K,C)) | (H is not D, S is not D, D>=2, !has(A,D), !has(K,D)) | (H is not H, S is not H, H>=2, !has(A,H), !has(K,H)) | (H is not S, S is not S, S>=2, !has(A,S), !has(K,S)) cheapest(S) Slam try: control bid in ♠ [alert] [artificial] shows (!has(K,S), !has(Q,S), !has(J,S), tp(H)>=14) | (!has(K,S), !has(Q,S), has(J,S), tp(H)>=15) | (!has(K,S), has(Q,S), !has(J,S), tp(H)>=16) | (!has(K,S), has(Q,S), has(J,S), tp(H)>=17) | (has(K,S), !has(Q,S), !has(J,S), tp(H)>=17) | (has(K,S), !has(Q,S), has(J,S), tp(H)>=18) | (has(K,S), has(Q,S), !has(J,S), tp(H)>=19) | (has(K,S), has(Q,S), has(J,S), tp(H)>=20) when cue, H is not S, S is not S, under_game(S), has(A,S) | S<=0 | (style is first_or_second_round, has(K,S) | S<=1), (H is not C, S is not C, C>=2, !has(A,C), !has(K,C)) | (H is not D, S is not D, D>=2, !has(A,D), !has(K,D)) | (H is not H, S is not H, H>=2, !has(A,H), !has(K,H)) | (H is not S, S is not S, S>=2, !has(A,S), !has(K,S)) 4N Keycard ask in {trump} [artificial] shows (!has(K,S), !has(Q,S), !has(J,S), tp(H)>=14) | (!has(K,S), !has(Q,S), has(J,S), tp(H)>=15) | (!has(K,S), has(Q,S), !has(J,S), tp(H)>=16) | (!has(K,S), has(Q,S), has(J,S), tp(H)>=17) | (has(K,S), !has(Q,S), !has(J,S), tp(H)>=17) | (has(K,S), !has(Q,S), has(J,S), tp(H)>=18) | (has(K,S), has(Q,S), !has(J,S), tp(H)>=19) | (has(K,S), has(Q,S), has(J,S), tp(H)>=20) when k1430 | k0314 after 1M (P) 4x (P) when x is not M, M is S | x is not S 4M Game: no slam interest shows !((!has(K,x), !has(Q,x), !has(J,x), tp(M)>=14) | (!has(K,x), !has(Q,x), has(J,x), tp(M)>=15) | (!has(K,x), has(Q,x), !has(J,x), tp(M)>=16) | (!has(K,x), has(Q,x), has(J,x), tp(M)>=17) | (has(K,x), !has(Q,x), !has(J,x), tp(M)>=17) | (has(K,x), !has(Q,x), has(J,x), tp(M)>=18) | (has(K,x), has(Q,x), !has(J,x), tp(M)>=19) | (has(K,x), has(Q,x), has(J,x), tp(M)>=20)) cheapest(C) Slam try: control bid in ♣ [alert] [artificial] shows (!has(K,x), !has(Q,x), !has(J,x), tp(M)>=14) | (!has(K,x), !has(Q,x), has(J,x), tp(M)>=15) | (!has(K,x), has(Q,x), !has(J,x), tp(M)>=16) | (!has(K,x), has(Q,x), has(J,x), tp(M)>=17) | (has(K,x), !has(Q,x), !has(J,x), tp(M)>=17) | (has(K,x), !has(Q,x), has(J,x), tp(M)>=18) | (has(K,x), has(Q,x), !has(J,x), tp(M)>=19) | (has(K,x), has(Q,x), has(J,x), tp(M)>=20) when cue, M is not C, x is not C, under_game(C), has(A,C) | C<=0 | (style is first_or_second_round, has(K,C) | C<=1), (M is not C, x is not C, C>=2, !has(A,C), !has(K,C)) | (M is not D, x is not D, D>=2, !has(A,D), !has(K,D)) | (M is not H, x is not H, H>=2, !has(A,H), !has(K,H)) | (M is not S, x is not S, S>=2, !has(A,S), !has(K,S)) cheapest(D) Slam try: control bid in ♦ [alert] [artificial] shows (!has(K,x), !has(Q,x), !has(J,x), tp(M)>=14) | (!has(K,x), !has(Q,x), has(J,x), tp(M)>=15) | (!has(K,x), has(Q,x), !has(J,x), tp(M)>=16) | (!has(K,x), has(Q,x), has(J,x), tp(M)>=17) | (has(K,x), !has(Q,x), !has(J,x), tp(M)>=17) | (has(K,x), !has(Q,x), has(J,x), tp(M)>=18) | (has(K,x), has(Q,x), !has(J,x), tp(M)>=19) | (has(K,x), has(Q,x), has(J,x), tp(M)>=20) when cue, M is not D, x is not D, under_game(D), has(A,D) | D<=0 | (style is first_or_second_round, has(K,D) | D<=1), (M is not C, x is not C, C>=2, !has(A,C), !has(K,C)) | (M is not D, x is not D, D>=2, !has(A,D), !has(K,D)) | (M is not H, x is not H, H>=2, !has(A,H), !has(K,H)) | (M is not S, x is not S, S>=2, !has(A,S), !has(K,S)) cheapest(H) Slam try: control bid in ♥ [alert] [artificial] shows (!has(K,x), !has(Q,x), !has(J,x), tp(M)>=14) | (!has(K,x), !has(Q,x), has(J,x), tp(M)>=15) | (!has(K,x), has(Q,x), !has(J,x), tp(M)>=16) | (!has(K,x), has(Q,x), has(J,x), tp(M)>=17) | (has(K,x), !has(Q,x), !has(J,x), tp(M)>=17) | (has(K,x), !has(Q,x), has(J,x), tp(M)>=18) | (has(K,x), has(Q,x), !has(J,x), tp(M)>=19) | (has(K,x), has(Q,x), has(J,x), tp(M)>=20) when cue, M is not H, x is not H, under_game(H), has(A,H) | H<=0 | (style is first_or_second_round, has(K,H) | H<=1), (M is not C, x is not C, C>=2, !has(A,C), !has(K,C)) | (M is not D, x is not D, D>=2, !has(A,D), !has(K,D)) | (M is not H, x is not H, H>=2, !has(A,H), !has(K,H)) | (M is not S, x is not S, S>=2, !has(A,S), !has(K,S)) cheapest(S) Slam try: control bid in ♠ [alert] [artificial] shows (!has(K,x), !has(Q,x), !has(J,x), tp(M)>=14) | (!has(K,x), !has(Q,x), has(J,x), tp(M)>=15) | (!has(K,x), has(Q,x), !has(J,x), tp(M)>=16) | (!has(K,x), has(Q,x), has(J,x), tp(M)>=17) | (has(K,x), !has(Q,x), !has(J,x), tp(M)>=17) | (has(K,x), !has(Q,x), has(J,x), tp(M)>=18) | (has(K,x), has(Q,x), !has(J,x), tp(M)>=19) | (has(K,x), has(Q,x), has(J,x), tp(M)>=20) when cue, M is not S, x is not S, under_game(S), has(A,S) | S<=0 | (style is first_or_second_round, has(K,S) | S<=1), (M is not C, x is not C, C>=2, !has(A,C), !has(K,C)) | (M is not D, x is not D, D>=2, !has(A,D), !has(K,D)) | (M is not H, x is not H, H>=2, !has(A,H), !has(K,H)) | (M is not S, x is not S, S>=2, !has(A,S), !has(K,S)) 4N Keycard ask in {trump} [artificial] shows (!has(K,x), !has(Q,x), !has(J,x), tp(M)>=14) | (!has(K,x), !has(Q,x), has(J,x), tp(M)>=15) | (!has(K,x), has(Q,x), !has(J,x), tp(M)>=16) | (!has(K,x), has(Q,x), has(J,x), tp(M)>=17) | (has(K,x), !has(Q,x), !has(J,x), tp(M)>=17) | (has(K,x), !has(Q,x), has(J,x), tp(M)>=18) | (has(K,x), has(Q,x), !has(J,x), tp(M)>=19) | (has(K,x), has(Q,x), has(J,x), tp(M)>=20) when k1430 | k0314 after 1m (P) 1H (P) 3S (P) when by_open 4H Game: no slam interest shows !((!has(K,S), !has(Q,S), !has(J,S), tp(H)>=11) | (!has(K,S), !has(Q,S), has(J,S), tp(H)>=12) | (!has(K,S), has(Q,S), !has(J,S), tp(H)>=13) | (!has(K,S), has(Q,S), has(J,S), tp(H)>=14) | (has(K,S), !has(Q,S), !has(J,S), tp(H)>=14) | (has(K,S), !has(Q,S), has(J,S), tp(H)>=15) | (has(K,S), has(Q,S), !has(J,S), tp(H)>=16) | (has(K,S), has(Q,S), has(J,S), tp(H)>=17)) cheapest(C) Slam try: control bid in ♣ [alert] [artificial] shows (!has(K,S), !has(Q,S), !has(J,S), tp(H)>=11) | (!has(K,S), !has(Q,S), has(J,S), tp(H)>=12) | (!has(K,S), has(Q,S), !has(J,S), tp(H)>=13) | (!has(K,S), has(Q,S), has(J,S), tp(H)>=14) | (has(K,S), !has(Q,S), !has(J,S), tp(H)>=14) | (has(K,S), !has(Q,S), has(J,S), tp(H)>=15) | (has(K,S), has(Q,S), !has(J,S), tp(H)>=16) | (has(K,S), has(Q,S), has(J,S), tp(H)>=17) when cue, H is not C, S is not C, under_game(C), has(A,C) | C<=0 | (style is first_or_second_round, has(K,C) | C<=1), (H is not C, S is not C, C>=2, !has(A,C), !has(K,C)) | (H is not D, S is not D, D>=2, !has(A,D), !has(K,D)) | (H is not H, S is not H, H>=2, !has(A,H), !has(K,H)) | (H is not S, S is not S, S>=2, !has(A,S), !has(K,S)) cheapest(D) Slam try: control bid in ♦ [alert] [artificial] shows (!has(K,S), !has(Q,S), !has(J,S), tp(H)>=11) | (!has(K,S), !has(Q,S), has(J,S), tp(H)>=12) | (!has(K,S), has(Q,S), !has(J,S), tp(H)>=13) | (!has(K,S), has(Q,S), has(J,S), tp(H)>=14) | (has(K,S), !has(Q,S), !has(J,S), tp(H)>=14) | (has(K,S), !has(Q,S), has(J,S), tp(H)>=15) | (has(K,S), has(Q,S), !has(J,S), tp(H)>=16) | (has(K,S), has(Q,S), has(J,S), tp(H)>=17) when cue, H is not D, S is not D, under_game(D), has(A,D) | D<=0 | (style is first_or_second_round, has(K,D) | D<=1), (H is not C, S is not C, C>=2, !has(A,C), !has(K,C)) | (H is not D, S is not D, D>=2, !has(A,D), !has(K,D)) | (H is not H, S is not H, H>=2, !has(A,H), !has(K,H)) | (H is not S, S is not S, S>=2, !has(A,S), !has(K,S)) cheapest(H) Slam try: control bid in ♥ [alert] [artificial] shows (!has(K,S), !has(Q,S), !has(J,S), tp(H)>=11) | (!has(K,S), !has(Q,S), has(J,S), tp(H)>=12) | (!has(K,S), has(Q,S), !has(J,S), tp(H)>=13) | (!has(K,S), has(Q,S), has(J,S), tp(H)>=14) | (has(K,S), !has(Q,S), !has(J,S), tp(H)>=14) | (has(K,S), !has(Q,S), has(J,S), tp(H)>=15) | (has(K,S), has(Q,S), !has(J,S), tp(H)>=16) | (has(K,S), has(Q,S), has(J,S), tp(H)>=17) when cue, H is not H, S is not H, under_game(H), has(A,H) | H<=0 | (style is first_or_second_round, has(K,H) | H<=1), (H is not C, S is not C, C>=2, !has(A,C), !has(K,C)) | (H is not D, S is not D, D>=2, !has(A,D), !has(K,D)) | (H is not H, S is not H, H>=2, !has(A,H), !has(K,H)) | (H is not S, S is not S, S>=2, !has(A,S), !has(K,S)) cheapest(S) Slam try: control bid in ♠ [alert] [artificial] shows (!has(K,S), !has(Q,S), !has(J,S), tp(H)>=11) | (!has(K,S), !has(Q,S), has(J,S), tp(H)>=12) | (!has(K,S), has(Q,S), !has(J,S), tp(H)>=13) | (!has(K,S), has(Q,S), has(J,S), tp(H)>=14) | (has(K,S), !has(Q,S), !has(J,S), tp(H)>=14) | (has(K,S), !has(Q,S), has(J,S), tp(H)>=15) | (has(K,S), has(Q,S), !has(J,S), tp(H)>=16) | (has(K,S), has(Q,S), has(J,S), tp(H)>=17) when cue, H is not S, S is not S, under_game(S), has(A,S) | S<=0 | (style is first_or_second_round, has(K,S) | S<=1), (H is not C, S is not C, C>=2, !has(A,C), !has(K,C)) | (H is not D, S is not D, D>=2, !has(A,D), !has(K,D)) | (H is not H, S is not H, H>=2, !has(A,H), !has(K,H)) | (H is not S, S is not S, S>=2, !has(A,S), !has(K,S)) 4N Keycard ask in {trump} [artificial] shows (!has(K,S), !has(Q,S), !has(J,S), tp(H)>=11) | (!has(K,S), !has(Q,S), has(J,S), tp(H)>=12) | (!has(K,S), has(Q,S), !has(J,S), tp(H)>=13) | (!has(K,S), has(Q,S), has(J,S), tp(H)>=14) | (has(K,S), !has(Q,S), !has(J,S), tp(H)>=14) | (has(K,S), !has(Q,S), has(J,S), tp(H)>=15) | (has(K,S), has(Q,S), !has(J,S), tp(H)>=16) | (has(K,S), has(Q,S), has(J,S), tp(H)>=17) when k1430 | k0314 after 1x (P) 1M (P) 4y (P) when by_open, y is not M, y is not x, M is S | y is not S 4M Game: no slam interest shows !((!has(K,y), !has(Q,y), !has(J,y), tp(M)>=11) | (!has(K,y), !has(Q,y), has(J,y), tp(M)>=12) | (!has(K,y), has(Q,y), !has(J,y), tp(M)>=13) | (!has(K,y), has(Q,y), has(J,y), tp(M)>=14) | (has(K,y), !has(Q,y), !has(J,y), tp(M)>=14) | (has(K,y), !has(Q,y), has(J,y), tp(M)>=15) | (has(K,y), has(Q,y), !has(J,y), tp(M)>=16) | (has(K,y), has(Q,y), has(J,y), tp(M)>=17)) cheapest(C) Slam try: control bid in ♣ [alert] [artificial] shows (!has(K,y), !has(Q,y), !has(J,y), tp(M)>=11) | (!has(K,y), !has(Q,y), has(J,y), tp(M)>=12) | (!has(K,y), has(Q,y), !has(J,y), tp(M)>=13) | (!has(K,y), has(Q,y), has(J,y), tp(M)>=14) | (has(K,y), !has(Q,y), !has(J,y), tp(M)>=14) | (has(K,y), !has(Q,y), has(J,y), tp(M)>=15) | (has(K,y), has(Q,y), !has(J,y), tp(M)>=16) | (has(K,y), has(Q,y), has(J,y), tp(M)>=17) when cue, M is not C, y is not C, under_game(C), has(A,C) | C<=0 | (style is first_or_second_round, has(K,C) | C<=1), (M is not C, y is not C, C>=2, !has(A,C), !has(K,C)) | (M is not D, y is not D, D>=2, !has(A,D), !has(K,D)) | (M is not H, y is not H, H>=2, !has(A,H), !has(K,H)) | (M is not S, y is not S, S>=2, !has(A,S), !has(K,S)) cheapest(D) Slam try: control bid in ♦ [alert] [artificial] shows (!has(K,y), !has(Q,y), !has(J,y), tp(M)>=11) | (!has(K,y), !has(Q,y), has(J,y), tp(M)>=12) | (!has(K,y), has(Q,y), !has(J,y), tp(M)>=13) | (!has(K,y), has(Q,y), has(J,y), tp(M)>=14) | (has(K,y), !has(Q,y), !has(J,y), tp(M)>=14) | (has(K,y), !has(Q,y), has(J,y), tp(M)>=15) | (has(K,y), has(Q,y), !has(J,y), tp(M)>=16) | (has(K,y), has(Q,y), has(J,y), tp(M)>=17) when cue, M is not D, y is not D, under_game(D), has(A,D) | D<=0 | (style is first_or_second_round, has(K,D) | D<=1), (M is not C, y is not C, C>=2, !has(A,C), !has(K,C)) | (M is not D, y is not D, D>=2, !has(A,D), !has(K,D)) | (M is not H, y is not H, H>=2, !has(A,H), !has(K,H)) | (M is not S, y is not S, S>=2, !has(A,S), !has(K,S)) cheapest(H) Slam try: control bid in ♥ [alert] [artificial] shows (!has(K,y), !has(Q,y), !has(J,y), tp(M)>=11) | (!has(K,y), !has(Q,y), has(J,y), tp(M)>=12) | (!has(K,y), has(Q,y), !has(J,y), tp(M)>=13) | (!has(K,y), has(Q,y), has(J,y), tp(M)>=14) | (has(K,y), !has(Q,y), !has(J,y), tp(M)>=14) | (has(K,y), !has(Q,y), has(J,y), tp(M)>=15) | (has(K,y), has(Q,y), !has(J,y), tp(M)>=16) | (has(K,y), has(Q,y), has(J,y), tp(M)>=17) when cue, M is not H, y is not H, under_game(H), has(A,H) | H<=0 | (style is first_or_second_round, has(K,H) | H<=1), (M is not C, y is not C, C>=2, !has(A,C), !has(K,C)) | (M is not D, y is not D, D>=2, !has(A,D), !has(K,D)) | (M is not H, y is not H, H>=2, !has(A,H), !has(K,H)) | (M is not S, y is not S, S>=2, !has(A,S), !has(K,S)) cheapest(S) Slam try: control bid in ♠ [alert] [artificial] shows (!has(K,y), !has(Q,y), !has(J,y), tp(M)>=11) | (!has(K,y), !has(Q,y), has(J,y), tp(M)>=12) | (!has(K,y), has(Q,y), !has(J,y), tp(M)>=13) | (!has(K,y), has(Q,y), has(J,y), tp(M)>=14) | (has(K,y), !has(Q,y), !has(J,y), tp(M)>=14) | (has(K,y), !has(Q,y), has(J,y), tp(M)>=15) | (has(K,y), has(Q,y), !has(J,y), tp(M)>=16) | (has(K,y), has(Q,y), has(J,y), tp(M)>=17) when cue, M is not S, y is not S, under_game(S), has(A,S) | S<=0 | (style is first_or_second_round, has(K,S) | S<=1), (M is not C, y is not C, C>=2, !has(A,C), !has(K,C)) | (M is not D, y is not D, D>=2, !has(A,D), !has(K,D)) | (M is not H, y is not H, H>=2, !has(A,H), !has(K,H)) | (M is not S, y is not S, S>=2, !has(A,S), !has(K,S)) 4N Keycard ask in {trump} [artificial] shows (!has(K,y), !has(Q,y), !has(J,y), tp(M)>=11) | (!has(K,y), !has(Q,y), has(J,y), tp(M)>=12) | (!has(K,y), has(Q,y), !has(J,y), tp(M)>=13) | (!has(K,y), has(Q,y), has(J,y), tp(M)>=14) | (has(K,y), !has(Q,y), !has(J,y), tp(M)>=14) | (has(K,y), !has(Q,y), has(J,y), tp(M)>=15) | (has(K,y), has(Q,y), !has(J,y), tp(M)>=16) | (has(K,y), has(Q,y), has(J,y), tp(M)>=17) when k1430 | k0314 == choice-of-games: Choosing between 3NT and a major-suit game file: conventions/notrump/choice-of-games.bid needs: notrump-base after (any auction) when asked choice 4H Corrects to the heart fit shows H>=8-partner.H.min when partner.H>=4 4S Corrects to the spade fit shows S>=8-partner.S.min when partner.S>=4 P Plays 3NT == jacoby-transfers: Jacoby Transfers file: conventions/notrump/jacoby-transfers.bid card: notrump.transfers.jacoby needs: notrump-base after 1N (P) | (1x) 1N (P) | (1x) P (P) 1N (P) | (1x) 1N (X) | (1x) P (P) 1N (X) when !they.bid | systems_on 2D Transfer to hearts [announce: Transfer] [artificial] shows H>=5 2H Transfer to spades [announce: Transfer] [artificial] shows S>=5 2H Transfer to spades, 5-5 in the majors [announce: Transfer] [artificial] shows S>=5, H>=5 when style is bba after 1N (P) 2D (P) | (1x) 1N (P) 2D (P) | (1x) P (P) 1N (P) 2D (P) | (1x) 1N (X) 2D (P) | (1x) P (P) 1N (X) 2D (P) 2H Completes transfer after 1N (P) 2H (P) | (1x) 1N (P) 2H (P) | (1x) P (P) 1N (P) 2H (P) | (1x) 1N (X) 2H (P) | (1x) P (P) 1N (X) 2H (P) 2S Completes transfer after (any auction) when answered transfer(M) 3M Sign off in the known fit shows suit_strength=signoff when partner.M>=4 4M Game in the known fit, opposite a maximum shows suit_strength=invite when partner.M>=4 P Weak: play here ({signoff} total points) shows strength=signoff when maybe partner.M<=3 | partner.last=3{M} 2N Invitational: {invite} total points, exactly 5 {M} shows M=5, balanced | shortest>=2, strength=invite 3M Invitational: {invite} total points, 6+ {M} shows M>=6, suit_strength=invite 3N Game: {game} total points, 5 {M}: choose the game shows M=5, balanced, strength=game when maybe partner.M<=2 4M Game: {game} total points, 6+ {M} shows M>=6, suit_strength=game when !texas 4M Mild slam interest, 6+ {M} shows M>=6, suit_points>=31-partner.points.max, suit_points<=32-partner.points.min when texas 4M Game: {game} total points, 6+ {M} shows M>=6, suit_strength=game when texas 4M Game in the known fit shows suit_strength=game when partner.M>=3 3m Second suit, game forcing shows m>=4, strength>=game 4N Quantitative, 5 {M} shows M=5, balanced, strength=slam_invite 6N Slam: {slam} total points, 5 {M} shows M=5, balanced, strength=slam P Weak in HCP: play here shows M=5, strength=invite, hcp<=24-partner.hcp.max when maybe partner.M<=3 | partner.last=3{M} 2N Invitational, exactly 5 {M}, a singleton shows M=5, strength=invite, hcp>=25-partner.hcp.max after (any auction) when asked invite(M) 4M Accepts, in the fit shows M>=8-partner.M.min, points>=24-partner.points.min 3N Accepts, no fit shows M<8-partner.M.min, strength>=game 3M Declines, in the fit shows M>=8-partner.M.min, points<=23-partner.points.min P Declines shows strength<=invite, M<8-partner.M.min | points<=23-partner.points.min after (any auction) when answered invite(M), partner.last=3{M} P Partner declined: play three of the major after (any auction) when asked quant_major(M) 6M Accepts, in the fit shows M>=3, points>=32-partner.points.min 6N Accepts, no fit shows M<=2, points>=32-partner.points.min P Declines shows points<=31-partner.points.min after (any auction) when asked new_suit(M) 3M 3+ {M}: support shows M>=3 3N No fit: 2 {M} shows M<=2 after (any auction) when asked slam_try(M) 4N Keycard ask: good fit and a maximum [artificial] shows M>=3, points>=31-partner.suit_points.min P No slam: plays game after 1N (P) 2D (P) 2H (P) 2S 5 hearts and 4 spades, invitational, not forcing shows H=5, S=4, hcp>=24-partner.hcp.max, hcp<=24-partner.hcp.min after 1N (P) 2D (P) 2H (P) 2S (P) 4H Accepts, in the heart fit shows H>=4 | (H=3, points>=24-partner.hcp.min) 3H Declines, in the heart fit shows H=3, points<=23-partner.hcp.min 4S Accepts, in the spade fit shows S>=4, H<=2, points>=23-partner.hcp.min 3S Declines, in the spade fit shows S>=4, H<=2, points<=22-partner.hcp.min P No eight-card fit: play 2S shows H<=2, S<=3 after 1N (P) 2D (P) 2H (P) 2S (P) 3H (P) 4H Game: the top of the invitation shows hcp>=25-partner.hcp.max P Minimum: play 3H shows hcp<=24-partner.hcp.max after 1N (P) 2D (P) 2H (P) 2S (P) 3S (P) 4S Game: the top of the invitation shows hcp>=25-partner.hcp.max P Minimum: play 3S shows hcp<=24-partner.hcp.max after 1N (X) when vs_double 2H Transfer to spades [announce: Transfer] [artificial] shows S>=5 when S>=H 2D Transfer to hearts [announce: Transfer] [artificial] shows H>=5 when H>S after 1N (2C) when vs_2c 2H Transfer to spades [announce: Transfer] [artificial] shows S>=5, hcp>=5 when S>=H 2D Transfer to hearts [announce: Transfer] [artificial] shows H>=5, hcp>=5 when H>S after 1N (X) 2D (P) when vs_double 2H Completes transfer after 1N (X) 2H (P) when vs_double 2S Completes transfer after 1N (2C) 2D (P) when vs_2c 2H Completes transfer after 1N (2C) 2H (P) when vs_2c 2S Completes transfer == minor-transfers: Minor-suit responses to 1NT file: conventions/notrump/minor-transfers.bid needs: notrump-base after 1N (P) | (1x) 1N (P) | (1x) P (P) 1N (P) | (1x) 1N (X) | (1x) P (P) 1N (X) when !they.bid | systems_on, style is relay 2S Relay to 3♣: a weak hand with a long minor [alert] [artificial] shows C>=6 | D>=6, H<=4, S<=4, strength=signoff after 1N (P) 2S (P) | (1x) 1N (P) 2S (P) | (1x) P (P) 1N (P) 2S (P) | (1x) 1N (X) 2S (P) | (1x) P (P) 1N (X) 2S (P) when style is relay 3C Completes the relay [artificial] after (any auction) when answered relay P Clubs: play here shows C>=6 3D Diamonds: play here shows D>=6 after 1N (P) | (1x) 1N (P) | (1x) P (P) 1N (P) | (1x) 1N (X) | (1x) P (P) 1N (X) when !they.bid | systems_on, style is four_way | style is four_way_reversed 2S Transfer to clubs [alert] [artificial] shows C>=6, H<=4, S<=4, strength<=invite 2N Transfer to diamonds [alert] [artificial] shows D>=6, H<=4, S<=4, strength<=invite after 1N (P) 2S (P) | (1x) 1N (P) 2S (P) | (1x) P (P) 1N (P) 2S (P) | (1x) 1N (X) 2S (P) | (1x) P (P) 1N (X) 2S (P) when style is four_way 2N Good club support (Kxx or better) [alert] [artificial] shows C>=3, has(A,C) | has(K,C) 3C No good club support after 1N (P) 2N (P) | (1x) 1N (P) 2N (P) | (1x) P (P) 1N (P) 2N (P) | (1x) 1N (X) 2N (P) | (1x) P (P) 1N (X) 2N (P) when style is four_way 3C Good diamond support (Kxx or better) [alert] [artificial] shows D>=3, has(A,D) | has(K,D) 3D No good diamond support after 1N (P) 2S (P) | (1x) 1N (P) 2S (P) | (1x) P (P) 1N (P) 2S (P) | (1x) 1N (X) 2S (P) | (1x) P (P) 1N (X) 2S (P) when style is four_way_reversed 3C Good club support (Kxx or better) shows C>=3, has(A,C) | has(K,C) 2N No good club support [alert] [artificial] after 1N (P) 2N (P) | (1x) 1N (P) 2N (P) | (1x) P (P) 1N (P) 2N (P) | (1x) 1N (X) 2N (P) | (1x) P (P) 1N (X) 2N (P) when style is four_way_reversed 3D Good diamond support (Kxx or better) shows D>=3, has(A,D) | has(K,D) 3C No good diamond support [alert] [artificial] after 1N (P) | (1x) 1N (P) | (1x) P (P) 1N (P) | (1x) 1N (X) | (1x) P (P) 1N (X) when !they.bid | systems_on, style is bba 2S Transfer to clubs [alert] [artificial] shows C>=6, H<=4, S<=4, strength<=invite 3C Transfer to diamonds [alert] [artificial] shows D>=6, H<=4, S<=4, strength<=invite after 1N (P) 2S (P) | (1x) 1N (P) 2S (P) | (1x) P (P) 1N (P) 2S (P) | (1x) 1N (X) 2S (P) | (1x) P (P) 1N (X) 2S (P) when style is bba 3C Completes the transfer after 1N (P) 3C (P) | (1x) 1N (P) 3C (P) | (1x) P (P) 1N (P) 3C (P) | (1x) 1N (X) 3C (P) | (1x) P (P) 1N (X) 3C (P) when style is bba 3D Completes the transfer after (any auction) when answered transfer(m) P Play here shows strength<=invite when partner.last=3{m} 3m Sign off in {m} shows strength<=invite 3N To play: {game} total points shows strength>=game 3N To play: the {m} suit should run shows strength=invite when partner.m>=3 after 1N (2C) when vs_2c, style is relay 2S Relay to 3♣: a weak hand with a long minor [alert] [artificial] shows C>=6 | D>=6, H<=4, S<=4, hcp>=5, strength=signoff after 1N (2C) 2S (P) when vs_2c, style is relay 3C Completes the relay [artificial] after 1N (2C) when vs_2c, style is four_way | style is four_way_reversed 2S Transfer to clubs [alert] [artificial] shows C>=6, H<=4, S<=4, hcp>=5, strength<=invite 2N Transfer to diamonds [alert] [artificial] shows D>=6, H<=4, S<=4, hcp>=5, strength<=invite after 1N (2C) when vs_2c, style is bba 2S Transfer to clubs [alert] [artificial] shows C>=6, H<=4, S<=4, hcp>=5, strength<=invite 3C Transfer to diamonds [alert] [artificial] shows D>=6, H<=4, S<=4, hcp>=5, strength<=invite after 1N (2C) 2S (P) when vs_2c, style is bba 3C Completes the transfer after 1N (2C) 3C (P) when vs_2c, style is bba 3D Completes the transfer == nt-interference: Our 1NT when RHO acts file: conventions/notrump/nt-interference.bid needs: notrump-base after 1N (X) when vs_double XX We own the hand: 6+ HCP and no suit to show shows hcp>=6 P Not enough to act over the double shows hcp<=5 after 1N (X) when !vs_double 2H Weak: five or more hearts, running from the double shows H>=5, H>=S, hcp<=4 2S Weak: five or more spades, running from the double shows S>=5, hcp<=4 2C Weak: six or more clubs, running from the double shows C>=6, H<=4, S<=4, hcp<=4 2D Weak: six or more diamonds, running from the double shows D>=6, H<=4, S<=4, hcp<=4 P Sitting for the double after 1N (X) 2y (P) when !vs_double, y is not N P Partner's escape: to play after 1N (X) XX (P) P Playing 1NT redoubled after 1N (X) XX (*) when !rho.last=P P Partner redoubled: his decision after 1N (X) XX (2y) P (P) X Penalty shows y>=4 | hcp>=9 P Nothing more after 1N (2y) when y is not C, rho.y>=4, maybe rho.H<=3 | maybe rho.S<=3 X Negative double: four cards in an unbid major, 5+ HCP [alert] [artificial] shows hcp>=5, S>=4 | H>=4 when y is D, S<=4, H<=4 X Negative double: four hearts (five with less than 10), 5+ HCP [alert] [artificial] shows hcp>=5, H=4 | (H=5, points<=9) when y is S X Negative double: four spades, 5+ HCP [alert] [artificial] shows hcp>=5, S=4 when y is H 2H Natural, to play: five or more hearts shows H>=5, hcp>=4, points<=9 when y is D 2S Natural, to play: five or more spades shows S>=5, hcp>=4, points<=9 when y is D | y is H cheapest(C) Natural, forcing to game: five or more clubs shows C>=5, points>=10 cheapest(D) Natural, forcing to game: five or more diamonds shows D>=5, points>=10 when y is not D 3H Natural, forcing to game: five or more hearts shows H>=5, points>=10 when y is S 4H Game: six or more hearts shows H>=6, hcp>=10 when y is not H 4S Game: six or more spades shows S>=6, hcp>=10 when y is not S 2N Invitational: 8-9 HCP, a stopper in {y} shows hcp=8..9, stop(y) 3N Game: 10+ HCP shows hcp>=10 P Nothing to say over their overcall after 1N (2y) X (P) when y is not C, lho.y>=4, maybe lho.H<=3 | maybe lho.S<=3 cheapest(H) Four hearts for partner's double shows H>=4 when y is not H cheapest(S) Four spades for partner's double shows S>=4 when y is not S 2N No four-card major, a stopper in {y} shows stop(y) P Four of their suit: defends shows y>=4 cheapest(C) No major, no stopper: four clubs shows C>=4 cheapest(D) No major, no stopper: four diamonds shows D>=4 when y is not D cheapest(N) Nothing better to say after 1N (2y) X (P) 2M (P) | 1N (2y) X (P) 3M (P) when y is not C, rho.y>=4, maybe rho.H<=3 | maybe rho.S<=3 4M Game in the fit: 10+ shows M>=4, points>=10 3M Invitational in the fit: 8-9 shows M>=4, points=8..9 when partner.last=2M 3N Game, no fit: 10+ shows M<=3, points>=10 P No game shows points<=9 after 1N (2y) X (P) 2M (P) 3M (P) when y is not C, lho.y>=4, maybe lho.H<=3 | maybe lho.S<=3 4M Accepts the invitation: a maximum shows hcp>=16 P Declines: a minimum shows hcp<=15 after 1N (2y) X (P) 2N (P) | 1N (2y) X (P) 3C (P) | 1N (2y) X (P) 3D (P) when y is not C, rho.y>=4, maybe rho.H<=3 | maybe rho.S<=3 3N Game: 10+ shows points>=10 P No game shows points<=9 after 1N (2y) 3z (P) when y is not C, z is not y, z is not N, lho.y>=4, maybe lho.H<=3 | maybe lho.S<=3 4{z} Three-card support: game in the major shows z>=3 when z is H | z is S 3N Game in notrump after 1N (2y) 2z (P) when y is not C, z is not N, lho.y>=4, maybe lho.H<=3 | maybe lho.S<=3 P Partner's suit, to play after 1N (2y) 2N (P) when y is not C, lho.y>=4, maybe lho.H<=3 | maybe lho.S<=3 3N Accepts: a maximum shows hcp>=16 P Declines: a minimum shows hcp<=15 after 1N (2y) when y is not C, rho.H>=4, rho.S>=4 X Values: 8+ HCP, we can defend shows hcp>=8 3C Natural, forcing to game: five or more clubs shows C>=5, points>=10 3D Natural, forcing to game: five or more diamonds shows D>=5, points>=10 3N Game: 10+, both majors held shows hcp>=10, stop(H), stop(S) P Nothing to say over their overcall after 1N (2y) when y is not C, maybe rho.y<=3, maybe rho.H<=3 | maybe rho.S<=3 X Values: 8+ HCP, we can defend shows hcp>=8 3N Game: 10+ HCP shows hcp>=10 P Nothing to say over their overcall after (any auction) when answered transfer(M), they.bid P Nothing more to show after 1N (2C) X (2D) when vs_2c 2H 4+ hearts shows H>=4 2S 4 spades, not 4 hearts shows S>=4, H<=3 X Penalty: four or more diamonds, no major shows D>=4, H<=3, S<=3 P No 4-card major shows H<=3, S<=3 after 1N (2y) 3z (P) when y is not C, lho.H>=4, lho.S>=4, z is C | z is D 3N Game in notrump after 1N (2y) X (P) when y is not C, (lho.H>=4, lho.S>=4) | (maybe lho.y<=3, maybe lho.H<=3 | maybe lho.S<=3) P Defending their artificial overcall after 1N (2y) X (*) when !rho.last=P, !rho.last=X P Nothing more to say after 1N (2y) X (2z) when y is not C, (lho.H>=4, lho.S>=4) | (maybe lho.y<=3, maybe lho.H<=3 | maybe lho.S<=3) X Penalty: four or more {z} shows z>=4 P Nothing more to say after 1N (2y) X (2z) X (P) when y is not C, (rho.H>=4, rho.S>=4) | (maybe rho.y<=3, maybe rho.H<=3 | maybe rho.S<=3) P Partner doubled for penalties: defend after 1N (2y) X (2z) P (P) when y is not C, (rho.H>=4, rho.S>=4) | (maybe rho.y<=3, maybe rho.H<=3 | maybe rho.S<=3) X Penalty: four or more {z} shows z>=4 3N Game: 10+, {z} held shows hcp>=10, stop(z) P Nothing more to say after 1N (2N) X Values: 8+ HCP, we can defend shows hcp>=8 3H Natural, forcing to game: five or more hearts shows H>=5, points>=10 3S Natural, forcing to game: five or more spades shows S>=5, points>=10 4H Game: six or more hearts shows H>=6, hcp>=10 4S Game: six or more spades shows S>=6, hcp>=10 3N Game: 10+ HCP shows hcp>=10 P Nothing to say over their 2NT after 1N (2N) 3z (P) when z is H | z is S 4{z} Three-card support: game in the major shows z>=3 3N Game in notrump after 1N (2y) P (P) P Partner passed: no game, let them play after 1N (3y) when y is not N 3N Game: 9+, a stopper in {y} shows hcp>=9, stop(y) 4H Game: five or more hearts, 9+ shows H>=5, hcp>=9 when y is not H 4S Game: five or more spades, 9+ shows S>=5, hcp>=9 when y is not S X Takeout: 9+, no stopper in {y} shows hcp>=9, y<=2 P Nothing to say over their preempt after 1N (3y) X (P) when y is not N P Four of their suit: defends shows y>=4 3N A stopper in {y} shows stop(y) cheapest(S) Four or more spades shows S>=4 when y is not S cheapest(H) Four or more hearts shows H>=4 when y is not H cheapest(D) Four or more diamonds shows D>=4 when y is not D cheapest(C) Four or more clubs shows C>=4 when y is not C 3N Nothing better: 3NT after 1N (3y) P (P) when y is not N P Partner passed: let them play == notrump-base: 1NT opening and natural responses file: conventions/notrump/one-nt.bid needs: base after (any auction) when opening 1N {nt_min}-{nt_max} HCP, balanced [announce: {nt_min} to {nt_max}] shows hcp=nt_min..nt_max, balanced 1N {nt_min}-{nt_max} HCP, balanced (1 HCP light with extras) [announce: {nt_min} to {nt_max}] shows hcp=nt_min-1, points>=nt_min, balanced when one_less after 1N (P) | (1x) 1N (P) | (1x) P (P) 1N (P) | (1x) 1N (X) | (1x) P (P) 1N (X) when !they.bid | systems_on 6N To play: slam values shows balanced, points>=32-partner.hcp.min, H<=4, S<=4 4N Quantitative: invites 6NT shows balanced, strength=slam_invite, points<=31-partner.hcp.min, H<=4, S<=4 when style is not bba 3N To play: {game} total points shows strength=game, H<=4, S<=4 when style is not bba 2N Invitational: {invite} total points shows strength=invite, H<=4, S<=4, C<=5, D<=5 when minors is not four_way, minors is not four_way_reversed, style is not bba 2N Invitational: {invite} total points, a long minor shows strength=invite, H<=4, S<=4, C>=6 | D>=6 when minors is relay | minors is none 3C Slam try: six or more clubs, or five and unbalanced shows C>=6 | (C>=5, !balanced), strength>=slam_invite, H<=4, S<=4 when !three_c_transfer, minors is not bba 3D Slam try: six or more diamonds, or five and unbalanced shows D>=6 | (D>=5, !balanced), strength>=slam_invite, H<=4, S<=4 when three_d is natural 3N No better call: {game} total points or more shows strength>=game P No game interest: {signoff} total points shows strength=signoff when style is not bba 4N Quantitative: invites 6NT shows balanced, strength=slam_invite, hcp>=33-partner.hcp.max, points<=31-partner.hcp.min, H<=4, S<=4 when style is bba 3N To play: {game} total points shows H<=4, S<=4, bba_nt_game_points>=10, strength<=game when matchpoints, style is bba, partner.hcp.min>=15, partner.hcp.max<=17 3N To play: game values shows H<=4, S<=4, bba_nt_imp_game_points>=10, strength<=game when imps, style is bba, partner.hcp.min>=15, partner.hcp.max<=17 3N To play: {game} total points (1NT not 15-17) shows H<=4, S<=4, (strength=game, C<=3 | D<=3 | C>=5 | D>=5) | (C=4, D=4, hcp>=25-partner.hcp.min, hcp<=32-partner.hcp.max) when matchpoints, style is bba, partner.hcp.min<=14 | partner.hcp.max>=18 3N To play: game values shows H<=4, S<=4, (points>=24-partner.hcp.min, points<=32-partner.hcp.max, C<=3 | D<=3 | C>=5 | D>=5) | (C=4, D=4, hcp>=24-partner.hcp.min, hcp<=32-partner.hcp.max) when imps, style is bba, partner.hcp.min<=14 | partner.hcp.max>=18 2N Invitational: {invite} total points shows H<=4, S<=4, C<=5, D<=5, (strength=invite, C<=3 | D<=3 | C>=5 | D>=5, !shape 4333 | hcp<=24-partner.hcp.max | hcp>=26-partner.hcp.max | has(T,S) | has(T,H) | has(T,D) | has(T,C)) | (C=4, D=4, hcp>=25-partner.hcp.max, hcp<=24-partner.hcp.min) when minors is not four_way, minors is not four_way_reversed, matchpoints, style is bba, partner.hcp.min<=14 | partner.hcp.max>=18 2N Invitational shows H<=4, S<=4, C<=5, D<=5, (points>=25-partner.hcp.max, points<=23-partner.hcp.min, C<=3 | D<=3 | C>=5 | D>=5, !shape 4333 | hcp<=24-partner.hcp.max | hcp>=26-partner.hcp.max | has(T,S) | has(T,H) | has(T,D) | has(T,C)) | (C=4, D=4, hcp>=25-partner.hcp.max, hcp<=23-partner.hcp.min) when minors is not four_way, minors is not four_way_reversed, imps, style is bba, partner.hcp.min<=14 | partner.hcp.max>=18 P No game interest shows (strength=signoff, C<=3 | D<=3 | C>=5 | D>=5) | (C=4, D=4, hcp<=24-partner.hcp.max) | (shape 4333, hcp>=25-partner.hcp.max, hcp<=25-partner.hcp.max, !has(T,S), !has(T,H), !has(T,D), !has(T,C)) when style is bba, partner.hcp.min<=14 | partner.hcp.max>=18 2N Invitational: {invite} total points shows H<=4, S<=4, C<=5, D<=5, bba_nt_points>=8, bba_nt_game_points<=9, points>=25-partner.hcp.max when minors is not four_way, minors is not four_way_reversed, matchpoints, style is bba, partner.hcp.min>=15, partner.hcp.max<=17 2N Invitational shows H<=4, S<=4, C<=5, D<=5, bba_nt_imp_points>=8, bba_nt_imp_game_points<=9, points>=24-partner.hcp.max when minors is not four_way, minors is not four_way_reversed, imps, style is bba, partner.hcp.min>=15, partner.hcp.max<=17 P No game interest shows bba_nt_points<=7 when matchpoints, style is bba, partner.hcp.min>=15, partner.hcp.max<=17 P No game interest shows bba_nt_imp_points<=7 when imps, style is bba, partner.hcp.min>=15, partner.hcp.max<=17 after 1N (P) 3C (P) when !three_c_transfer, minors is not bba 6C Accepts: a club fit and a maximum shows C>=3, hcp>=17 4C A club fit, not a maximum: responder decides shows C>=3, hcp<=16 3N Declines: no club fit shows C<=2 after 1N (P) 3D (P) when three_d is natural 6D Accepts: a diamond fit and a maximum shows D>=3, hcp>=17 4D A diamond fit, not a maximum: responder decides shows D>=3, hcp<=16 3N Declines: no diamond fit shows D<=2 after 1N (P) 3C (P) 4C (P) | 1N (P) 3D (P) 4D (P) 6{trump} Slam in the fit: 17+ shows points>=17 5{trump} Game in the fit shows points<=16 after 1N (P) 3C (P) 3N (P) | 1N (P) 3D (P) 3N (P) 6N No fit, but slam values: {slam} total points shows strength>=slam P No fit: 3NT after (any auction) when asked nt_invite 4H Accepts, in the 4-4 heart fit shows H>=4, strength>=game when partner.H>=4 4S Accepts, in the 4-4 spade fit shows S>=4, strength>=game when partner.S>=4 3H Declines, in the 4-4 heart fit shows H>=4, strength<=invite when partner.H>=4 3S Declines, in the 4-4 spade fit shows S>=4, strength<=invite when partner.S>=4 3N Accepts the invitation shows strength>=game P Declines: not a maximum shows strength<=invite after (any auction) when answered nt_invite, partner.last=3H | partner.last=3S, style is not bba P Partner declined: play three of the major after (any auction) when asked quant 6N Accepts the slam invitation shows points>=32-partner.points.min when style is not bba | shown.hcp.min>=nt_max+1 P Declines: not enough for slam shows points<=31-partner.points.min when style is not bba | shown.hcp.min>=nt_max+1 6N Accepts the slam invitation shows hcp>=33-partner.hcp.min when style is bba, shown.hcp.max<=nt_max P Declines: not enough for slam shows hcp<=32-partner.hcp.min when style is bba, shown.hcp.max<=nt_max after 1N (2C) when vs_2c 6N To play: {slam} total points shows balanced, strength=slam, H<=4, S<=4 4N Quantitative: {slam_invite} total points, invites 6NT shows balanced, strength=slam_invite 3N To play: {game} total points shows strength=game, H<=4, S<=4 2N Invitational: {invite} total points shows strength=invite, H<=4, S<=4, C<=5, D<=5 when minors is not four_way, minors is not four_way_reversed 3N No better call: {game} total points or more shows strength>=game P Nothing to say over their 2♣ == smolen: Smolen: 5-4 in the majors after Stayman's denial file: conventions/notrump/smolen.bid card: notrump.smolen.play needs: stayman after (any auction) when answered majors, partner.H<=3, partner.S<=3 3H Smolen: four hearts, five spades, game forcing [alert] [artificial] shows H=4, S=5, strength>=game when style is not bba 3S Smolen: four spades, five hearts, game forcing [alert] [artificial] shows S=4, H=5, strength>=game when style is not bba 3H Smolen: four hearts, five spades, game forcing [alert] [artificial] shows H=4, S=5, hcp>=25-partner.hcp.min when style is bba 3S Smolen: four spades, five hearts, game forcing [alert] [artificial] shows S=4, H=5, hcp>=25-partner.hcp.min when style is bba after (any auction) when asked smolen(M) 3S Three spades and a maximum: slam interest shows S>=3, hcp>=shown.hcp.max when M is S 4{M} Three {M}: game in the five-three fit shows M>=3 3N Two {M}: no fit, play 3NT shows M<=2 after (any auction) when answered smolen(M), partner.last=3N 6N No fit, but slam values shows points>=32-partner.hcp.min P No fit: 3NT == stayman: Stayman file: conventions/notrump/stayman.bid card: notrump.stayman.play needs: notrump-base after 1N (P) | (1x) 1N (P) | (1x) P (P) 1N (P) | (1x) 1N (X) | (1x) P (P) 1N (X) when !they.bid | systems_on 2C Stayman: asks for a 4-card major [alert] [artificial] shows strength>=invite, H=4 | S=4 | (minors is four_way | minors is four_way_reversed, strength=invite, C<=5, D<=5), H<=4 | S<=3 | strength>=game when !shape 4333 | (minors is four_way | minors is four_way_reversed, strength=invite), style is not bba 2C Stayman: asks for a 4-card major [alert] [artificial] shows hcp>=24-partner.hcp.max, (H=4 | S=4, H<=5, S<=5, H<=4 | hcp>=25-partner.hcp.min) | (minors is four_way | minors is four_way_reversed, strength=invite, C<=5, D<=5) when style is bba after 1N (P) 2C (P) | (1x) 1N (P) 2C (P) | (1x) P (P) 1N (P) 2C (P) | (1x) 1N (X) 2C (P) | (1x) P (P) 1N (X) 2C (P) 2H 4+ hearts shows H>=4 2S 4 spades, not 4 hearts shows S>=4, H<=3 2D No 4-card major shows H<=3, S<=3 after (any auction) when answered majors 2S Five spades, four hearts, invitational shows S=5, H=4, strength=invite when partner.last=2D, style is not bba 2S Five spades, four hearts, invitational shows S=5, H=4, hcp>=23-partner.hcp.min, hcp<=24-partner.hcp.min when partner.last=2D, style is bba 6H Slam in the heart fit shows H>=4, strength=slam when partner.H>=4 6S Slam in the spade fit shows S>=4, strength=slam when partner.S>=4 4H Game in the heart fit shows H>=4, strength>=game when partner.H>=4, style is not bba 3H Invitational raise in hearts shows H>=4, strength=invite when partner.H>=4, style is not bba 4S Game in the spade fit shows S>=4, strength>=game when partner.S>=4, style is not bba 3S Invitational raise in spades shows S>=4, strength=invite when partner.S>=4, style is not bba 6H Slam in the heart fit, counting shortness shows H>=4, tp(H)>=33-partner.points.min when partner.H>=4 6S Slam in the spade fit, counting shortness shows S>=4, tp(S)>=33-partner.points.min when partner.S>=4 4H Game in the heart fit, counting shortness shows H>=4, tp(H)>=25-partner.points.min when partner.H>=4, strength<=invite, style is not bba 4S Game in the spade fit, counting shortness shows S>=4, tp(S)>=25-partner.points.min when partner.S>=4, strength<=invite, style is not bba 4H Game in the heart fit shows H>=4, (hcp>=25-partner.hcp.min, !shape 4333) | hcp>=26-partner.hcp.min | (hcp>=24-partner.hcp.min, shortest<=0) when partner.H>=4, matchpoints, partner.hcp.min<=14 | partner.hcp.max>=18, style is bba 4H Game in the heart fit shows H>=4, (hcp>=24-partner.hcp.min, !shape 4333) | hcp>=25-partner.hcp.min | (hcp>=23-partner.hcp.min, shortest<=1) | (hcp>=22-partner.hcp.min, shortest<=0) when partner.H>=4, imps, partner.hcp.min<=14 | partner.hcp.max>=18, style is bba 3H Invitational raise in hearts shows H>=4, (hcp>=25-partner.hcp.max, !shape 4333) | hcp>=26-partner.hcp.max | (hcp>=24-partner.hcp.max, shortest<=1) | (hcp>=23-partner.hcp.max, shortest<=0), (hcp<=24-partner.hcp.min, shortest>=1) | (hcp<=25-partner.hcp.min, shape 4333) | hcp<=23-partner.hcp.min when partner.H>=4, matchpoints, partner.hcp.min<=14 | partner.hcp.max>=18, style is bba 3H Invitational raise in hearts shows H>=4, (hcp>=25-partner.hcp.max, !shape 4333) | hcp>=26-partner.hcp.max | (hcp>=24-partner.hcp.max, shortest<=1) | (hcp>=23-partner.hcp.max, shortest<=0), (hcp<=23-partner.hcp.min, shortest>=2) | (hcp<=24-partner.hcp.min, shape 4333) | (hcp<=22-partner.hcp.min, shortest=1) | hcp<=21-partner.hcp.min when partner.H>=4, imps, partner.hcp.min<=14 | partner.hcp.max>=18, style is bba P Weak with the heart fit: play here shows H>=4, (hcp<=24-partner.hcp.max, shortest>=2) | (hcp<=25-partner.hcp.max, shape 4333) | (hcp<=23-partner.hcp.max, shortest=1) | hcp<=22-partner.hcp.max when partner.H>=4, partner.hcp.min<=14 | partner.hcp.max>=18, style is bba 4S Game in the spade fit shows S>=4, (hcp>=25-partner.hcp.min, !shape 4333) | hcp>=26-partner.hcp.min | (hcp>=24-partner.hcp.min, shortest<=0) when partner.S>=4, matchpoints, partner.hcp.min<=14 | partner.hcp.max>=18, style is bba 4S Game in the spade fit shows S>=4, (hcp>=24-partner.hcp.min, !shape 4333) | hcp>=25-partner.hcp.min | (hcp>=23-partner.hcp.min, shortest<=1) | (hcp>=22-partner.hcp.min, shortest<=0) when partner.S>=4, imps, partner.hcp.min<=14 | partner.hcp.max>=18, style is bba 3S Invitational raise in spades shows S>=4, (hcp>=25-partner.hcp.max, !shape 4333) | hcp>=26-partner.hcp.max | (hcp>=24-partner.hcp.max, shortest<=1) | (hcp>=23-partner.hcp.max, shortest<=0), (hcp<=24-partner.hcp.min, shortest>=1) | (hcp<=25-partner.hcp.min, shape 4333) | hcp<=23-partner.hcp.min when partner.S>=4, matchpoints, partner.hcp.min<=14 | partner.hcp.max>=18, style is bba 3S Invitational raise in spades shows S>=4, (hcp>=25-partner.hcp.max, !shape 4333) | hcp>=26-partner.hcp.max | (hcp>=24-partner.hcp.max, shortest<=1) | (hcp>=23-partner.hcp.max, shortest<=0), (hcp<=23-partner.hcp.min, shortest>=2) | (hcp<=24-partner.hcp.min, shape 4333) | (hcp<=22-partner.hcp.min, shortest=1) | hcp<=21-partner.hcp.min when partner.S>=4, imps, partner.hcp.min<=14 | partner.hcp.max>=18, style is bba P Weak with the spade fit: play here shows S>=4, (hcp<=24-partner.hcp.max, shortest>=2) | (hcp<=25-partner.hcp.max, shape 4333) | (hcp<=23-partner.hcp.max, shortest=1) | hcp<=22-partner.hcp.max when partner.S>=4, partner.hcp.min<=14 | partner.hcp.max>=18, style is bba 6N Slam: 17 or more, no fit found shows points>=32-partner.hcp.min when style is not bba 4N Quantitative, no fit found shows balanced, strength=slam_invite, points<=31-partner.hcp.min when style is not bba 3N Game: {game} total points, no fit found shows strength=game when style is not bba 2N Invitational: {invite} total points, no fit found shows strength=invite when style is not bba 4H Game in the heart fit shows H>=4, bba_stay_game_points>=10 when partner.H>=4, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 3H Invitational raise in heart shows H>=4, bba_stay_raise_points>=8, bba_stay_game_points<=9 when partner.H>=4, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba P Weak with the heart fit: play here shows H>=4, bba_stay_raise_points<=7 when partner.H>=4, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 4H Game in the heart fit shows H>=4, bba_stay_game_imp_points>=10 when partner.H>=4, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 3H Invitational raise in heart shows H>=4, bba_stay_raise_imp_points>=8, bba_stay_game_imp_points<=9 when partner.H>=4, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba P Weak with the heart fit: play here shows H>=4, bba_stay_raise_imp_points<=7 when partner.H>=4, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 4S Game in the spade fit shows S>=4, bba_stay_sgame_points>=10 when partner.S>=4, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 3S Invitational raise in spade shows S>=4, bba_stay_sraise_points>=8, bba_stay_sgame_points<=9 when partner.S>=4, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba P Weak with the spade fit: play here shows S>=4, bba_stay_sraise_points<=7 when partner.S>=4, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 4S Game in the spade fit shows S>=4, bba_stay_sgame_imp_points>=10 when partner.S>=4, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 3S Invitational raise in spade shows S>=4, bba_stay_sraise_imp_points>=8, bba_stay_sgame_imp_points<=9 when partner.S>=4, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba P Weak with the spade fit: play here shows S>=4, bba_stay_sraise_imp_points<=7 when partner.S>=4, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 6N Slam: 17 or more, no fit found shows points>=32-partner.hcp.min when style is bba 4N Quantitative, no fit found shows balanced, strength=slam_invite, hcp>=33-partner.hcp.max, points<=31-partner.hcp.min when style is bba 3N Game: {game} total points, no major fit shows strength=game when partner.H<=3, partner.S<=3, partner.hcp.min<=14 | partner.hcp.max>=18, style is bba 2N Invitational, no major fit shows points>=24-partner.hcp.max, strength<=invite when partner.H<=3, partner.S<=3, partner.hcp.min<=14 | partner.hcp.max>=18, style is bba 3N Game, no heart fit shows H<=3, hcp>=10 | (hcp=9, tens>=2), strength<=game when partner.H>=4, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 2N Invitational, no heart fit shows H<=3, hcp>=7, hcp<=9, hcp<=8 | tens<=1, H<=2 | hcp>=8 | tens>=1 when partner.H>=4, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba P Weak, three hearts: play here shows H=3, hcp<=7, tens=0 when partner.H>=4, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 3N Game, no heart fit shows H<=3, hcp>=10 | (hcp=9, tens>=1 | shortest<=1), strength<=game when partner.H>=4, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 2N Invitational, no heart fit shows H<=3, hcp>=7, hcp<=9, hcp<=8 | (tens=0, shortest>=2), H<=2 | hcp>=8 | tens>=2 when partner.H>=4, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba P Weak, three hearts: play here shows H=3, hcp<=7, tens<=1 when partner.H>=4, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 3N Game, no spade fit shows S<=3, hcp>=10 | (hcp=9, tens>=2), strength<=game when partner.S>=4, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 2N Invitational, no spade fit shows S<=3, hcp>=7, hcp<=9, hcp<=8 | tens<=1, S<=2 | hcp>=8 | tens>=1 when partner.S>=4, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba P Weak, three spades: play here shows S=3, hcp<=7, tens=0 when partner.S>=4, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 3N Game, no spade fit shows S<=3, hcp>=10 | (hcp=9, tens>=1 | shortest<=1), strength<=game when partner.S>=4, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 2N Invitational, no spade fit shows S<=3, hcp>=7, hcp<=9, hcp<=8 | (tens=0, shortest>=2), S<=2 | hcp>=8 | tens>=2 when partner.S>=4, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba P Weak, three spades: play here shows S=3, hcp<=7, tens<=1 when partner.S>=4, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 3N Game: {game} total points, no heart fit shows strength=game, H<=3 when partner.H>=4, partner.hcp.min<=14 | partner.hcp.max>=18, style is bba 3N Game: {game} total points, no spade fit shows strength=game, S<=3 when partner.S>=4, partner.hcp.min<=14 | partner.hcp.max>=18, style is bba 2N Invitational, no heart fit shows points>=24-partner.hcp.max, strength<=invite, H<=3 when partner.H>=4, partner.hcp.min<=14 | partner.hcp.max>=18, style is bba 2N Invitational, no spade fit shows points>=24-partner.hcp.max, strength<=invite, S<=3 when partner.S>=4, partner.hcp.min<=14 | partner.hcp.max>=18, style is bba 3N Game: {game} total points, no major fit shows bba_stay_nt_points>=10, strength<=game when partner.H<=3, partner.S<=3, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 2N Invitational, no major fit shows points>=24-partner.hcp.max, bba_stay_nt_points<=9 when partner.H<=3, partner.S<=3, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 3N Game: {game} total points, no major fit shows bba_stay_nt_imp_points>=10, strength<=game when partner.H<=3, partner.S<=3, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 2N Invitational, no major fit shows points>=24-partner.hcp.max, bba_stay_nt_imp_points<=9 when partner.H<=3, partner.S<=3, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 3C Game values, five or more clubs shows C>=5, C>=D, (hcp>=9, !stop(D) | C>=6) | hcp>=12 when partner.H<=3, partner.S<=3, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 3D Game values, five or more diamonds shows D>=5, D>C, (hcp>=9, !stop(D) | D>=6) | hcp>=12 when partner.H<=3, partner.S<=3, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 3C Game values, five or more clubs, no heart fit shows C>=5, C>=D, H<=3, hcp>=10 | (C>=6, hcp>=9) when partner.H>=4, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 3D Game values, five or more diamonds, no heart fit shows D>=5, D>C, H<=3, hcp>=10 | (D>=6, hcp>=9) when partner.H>=4, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 3C Game values, five or more clubs, no spade fit shows C>=5, C>=D, S<=3, hcp>=10 | (C>=6, hcp>=9) when partner.S>=4, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 3D Game values, five or more diamonds, no spade fit shows D>=5, D>C, S<=3, hcp>=10 | (D>=6, hcp>=9) when partner.S>=4, partner.hcp.min>=15, partner.hcp.max<=17, style is bba P Six diamonds, weak: play 2D shows D>=6, hcp<=8 when partner.H<=3, partner.S<=3, partner.hcp.min>=15, partner.hcp.max<=17, style is bba P Three hearts and a six-card minor, weak: play 2H shows H=3, C>=6 | D>=6, hcp<=8 when partner.H>=4, partner.hcp.min>=15, partner.hcp.max<=17, style is bba P Three spades and a six-card minor, weak: play 2S shows S=3, C>=6 | D>=6, hcp<=8 when partner.S>=4, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 4C Slam try, six or more clubs shows C>=6, C>=D, hcp>=13 when partner.H<=3, partner.S<=3, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 4D Slam try, six or more diamonds shows D>=6, D>C, hcp>=13 when partner.H<=3, partner.S<=3, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 4C Slam try, six or more clubs shows C>=6, C>=D, hcp>=12 when partner.H<=3, partner.S<=3, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 4D Slam try, six or more diamonds shows D>=6, D>C, hcp>=12 when partner.H<=3, partner.S<=3, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 4C Slam try, six or more clubs, no heart fit shows H<=3, C>=6, C>=D, hcp>=13 when partner.H>=4, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 4D Slam try, six or more diamonds, no heart fit shows H<=3, D>=6, D>C, hcp>=13 when partner.H>=4, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 4C Slam try, six or more clubs, no heart fit shows H<=3, C>=6, C>=D, hcp>=12 when partner.H>=4, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 4D Slam try, six or more diamonds, no heart fit shows H<=3, D>=6, D>C, hcp>=12 when partner.H>=4, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 4C Slam try, six or more clubs, no spade fit shows S<=3, C>=6, C>=D, hcp>=13 when partner.S>=4, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 4D Slam try, six or more diamonds, no spade fit shows S<=3, D>=6, D>C, hcp>=13 when partner.S>=4, matchpoints, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 4C Slam try, six or more clubs, no spade fit shows S<=3, C>=6, C>=D, hcp>=12 when partner.S>=4, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba 4D Slam try, six or more diamonds, no spade fit shows S<=3, D>=6, D>C, hcp>=12 when partner.S>=4, imps, partner.hcp.min>=15, partner.hcp.max<=17, style is bba after (any auction) when asked fit_invite(M) 4M Accepts: a maximum shows points>=shown.hcp.max | (M>=5, points>=shown.hcp.max-1) P Declines: not a maximum shows points<=shown.hcp.max-1, M<=4 | points<=shown.hcp.max-2 after (any auction) when asked spades_invite 4S Accepts, three spades shows S>=3, hcp>=shown.hcp.max-1 3N Accepts, two spades shows S<=2, hcp>=shown.hcp.max-1 P Declines: a minimum shows hcp<=shown.hcp.max-2 after 1N (P) 2C (P) 2H (P) 2N (P) 3S (P) when style is bba 4S Game in the spade fit: the top of the invitation shows S>=4, hcp>=26-partner.hcp.max P Minimum: play 3S shows hcp<=25-partner.hcp.max after 1N (X) when vs_double 2C Stayman: asks for a 4-card major [alert] [artificial] shows hcp>=24-partner.hcp.max, H=4 | S=4 when H<=4, S<=4 after 1N (2C) when vs_2c X Stayman: asks for a 4-card major [alert] [artificial] shows strength>=invite, H=4 | S=4 when H<=4, S<=4 after 1N (X) 2C (P) when vs_double 2H 4+ hearts shows H>=4 2S 4 spades, not 4 hearts shows S>=4, H<=3 2D No 4-card major shows H<=3, S<=3 after 1N (2C) X (P) when vs_2c 2H 4+ hearts shows H>=4 2S 4 spades, not 4 hearts shows S>=4, H<=3 2D No 4-card major shows H<=3, S<=3 after 1N (P) 2C (P) 2D (P) 3C (P) when style is bba 5C Fit, a suit open, a maximum shows C>=4, !stop(D) | (S=2, !stop(S)) | (H=2, !stop(H)), points>=17 4C Fit, a suit open shows C>=4 | (C=3, points>=16), !stop(D) | (S=2, !stop(S)) | (H=2, !stop(H)) 4C Fit, a flat minimum shows C>=4, shortest>=3, points<=15 3D Minimum, no club fit shows C<=3, points<=15 3N To play shows hcp>=15 after 1N (P) 2C (P) 2D (P) 3D (P) when style is bba 5D Fit, a suit open, a maximum shows D>=3, !stop(C) | (S=2, !stop(S)) | (H=2, !stop(H)), points>=17 4D Fit, a suit open shows D>=4 | D=3, !stop(C) | (S=2, !stop(S)) | (H=2, !stop(H)) 4D Fit, a flat minimum shows D>=3, shortest>=3, points<=15 4C Minimum, five clubs shows D<=2, C>=5, points<=15 3N To play shows hcp>=15 after 1N (P) 2C (P) 2H (P) 3C (P) when style is bba 5C Fit, a suit open, a maximum shows C>=4, !stop(D), points>=17 4C Fit, a suit open shows C>=4 | (C=3, points>=16), !stop(D) 4C Fit, a flat minimum shows C>=3, shortest>=3, points<=15 3D Minimum, four diamonds shows D>=4, points<=15 3N To play shows hcp>=15 after 1N (P) 2C (P) 2H (P) 3D (P) when style is bba 5D Fit, a suit open, a maximum shows D>=3, !stop(C), points>=17 4D Fit, a suit open shows D>=4 | D=3, !stop(C) 4D Fit, a flat minimum shows D>=3, shortest>=3, points<=15 3N To play shows hcp>=15 after 1N (P) 2C (P) 2S (P) 3C (P) when style is bba 5C Fit, a suit open, a maximum shows C>=4, !stop(D), points>=17 4C Fit, a suit open shows C>=4 | (C=3, points>=16), !stop(D) 4C Fit, a flat minimum shows C>=3, shortest>=3, points<=15 3D Minimum, four diamonds shows D>=4, points<=15 3H Minimum, flat, three hearts shows H=3, shortest>=3, points<=15 3N To play shows hcp>=15 after 1N (P) 2C (P) 2S (P) 3D (P) when style is bba 3H Minimum, flat, three hearts shows H=3, shortest>=3, points<=15 5D Fit, a suit open, a maximum shows D>=3, !stop(C), points>=17 4D Fit, a suit open shows D>=4 | D=3, !stop(C) 4D Fit, a flat minimum shows D>=3, shortest>=3, points<=15 3N To play shows hcp>=15 after 1N (P) 2C (P) 2D (P) 3C (P) 4C (P) when style is bba 5C Game in the minor shows hcp>=11 P Too weak for game shows hcp<=10 after 1N (P) 2C (P) 2D (P) 3D (P) 4D (P) when style is bba 5D Game in the minor shows hcp>=11 P Too weak for game shows hcp<=10 after 1N (P) 2C (P) 2H (P) 3C (P) 4C (P) when style is bba 5C Game in the minor shows hcp>=11 P Too weak for game shows hcp<=10 after 1N (P) 2C (P) 2H (P) 3D (P) 4D (P) when style is bba 5D Game in the minor shows hcp>=11 P Too weak for game shows hcp<=10 after 1N (P) 2C (P) 2S (P) 3C (P) 4C (P) when style is bba 5C Game in the minor shows hcp>=11 P Too weak for game shows hcp<=10 after 1N (P) 2C (P) 2S (P) 3D (P) 4D (P) when style is bba 5D Game in the minor shows hcp>=11 P Too weak for game shows hcp<=10 after 1N (P) 2C (P) 2D (P) 3C (P) 3D (P) | 1N (P) 2C (P) 2H (P) 3C (P) 3D (P) | 1N (P) 2C (P) 2S (P) 3C (P) 3D (P) | 1N (P) 2C (P) 2S (P) 3C (P) 3H (P) | 1N (P) 2C (P) 2S (P) 3D (P) 3H (P) when style is bba 3N To play shows hcp>=9, hcp<=14 4N Quantitative shows hcp>=15 after 1N (P) 2C (P) 2D (P) 3D (P) 4C (P) when style is bba 4H Four hearts shows H>=4 4S Four spades shows S>=4 after 1N (P) 2C (P) 2D (P) 4C (P) when style is bba 4D Five diamonds, two clubs shows C<=2, D>=5 5C To play shows hcp>=15 after 1N (P) 2C (P) 2D (P) 4D (P) when style is bba 5C Five clubs, two diamonds shows D<=2, C>=5 5D To play shows hcp>=15 after 1N (P) 2C (P) 2D (P) 4C (P) 5C (P) when style is bba 6C Slam shows hcp>=14 P Game is enough shows hcp<=13 after 1N (P) 2C (P) 2D (P) 4D (P) 5D (P) when style is bba 6D Slam shows hcp>=14 P Game is enough shows hcp<=13 after 1N (P) 2C (P) 2D (P) 4C (P) 4D (P) when style is bba 6C Slam shows hcp>=14 5C Game shows hcp<=13 after 1N (P) 2C (P) 2D (P) 4D (P) 5C (P) when style is bba 6D Slam shows hcp>=14 5D Game shows hcp<=13 after 1N (P) 2C (P) 2H (P) 4C (P) when style is bba 4D Five diamonds, two clubs shows C<=2, D>=5 5C To play shows hcp>=15 after 1N (P) 2C (P) 2H (P) 4D (P) when style is bba 5C Five clubs, two diamonds shows D<=2, C>=5 5D To play shows hcp>=15 after 1N (P) 2C (P) 2H (P) 4C (P) 5C (P) when style is bba 6C Slam shows hcp>=14 P Game is enough shows hcp<=13 after 1N (P) 2C (P) 2H (P) 4D (P) 5D (P) when style is bba 6D Slam shows hcp>=14 P Game is enough shows hcp<=13 after 1N (P) 2C (P) 2H (P) 4C (P) 4D (P) when style is bba 6C Slam shows hcp>=14 5C Game shows hcp<=13 after 1N (P) 2C (P) 2H (P) 4D (P) 5C (P) when style is bba 6D Slam shows hcp>=14 5D Game shows hcp<=13 after 1N (P) 2C (P) 2S (P) 4C (P) when style is bba 4D Five diamonds, two clubs shows C<=2, D>=5 5C To play shows hcp>=15 after 1N (P) 2C (P) 2S (P) 4D (P) when style is bba 5C Five clubs, two diamonds shows D<=2, C>=5 5D To play shows hcp>=15 after 1N (P) 2C (P) 2S (P) 4C (P) 5C (P) when style is bba 6C Slam shows hcp>=14 P Game is enough shows hcp<=13 after 1N (P) 2C (P) 2S (P) 4D (P) 5D (P) when style is bba 6D Slam shows hcp>=14 P Game is enough shows hcp<=13 after 1N (P) 2C (P) 2S (P) 4C (P) 4D (P) when style is bba 6C Slam shows hcp>=14 5C Game shows hcp<=13 after 1N (P) 2C (P) 2S (P) 4D (P) 5C (P) when style is bba 6D Slam shows hcp>=14 5D Game shows hcp<=13 == super-accept: Super-accepting a Jacoby transfer file: conventions/notrump/super-accept.bid card: notrump.transfers.super_accept needs: jacoby-transfers after 1N (P) 2D (P) | (1x) 1N (P) 2D (P) | (1x) P (P) 1N (P) 2D (P) | (1x) 1N (X) 2D (P) | (1x) P (P) 1N (X) 2D (P) 3H Super-accept: 4+ hearts, a maximum shows H>=4, hcp>=16 after 1N (P) 2H (P) | (1x) 1N (P) 2H (P) | (1x) P (P) 1N (P) 2H (P) | (1x) 1N (X) 2H (P) | (1x) P (P) 1N (X) 2H (P) 3S Super-accept: 4+ spades, a maximum shows S>=4, hcp>=16 == superaccept-doubleton: Superaccept doubleton file: conventions/notrump/superaccept-doubleton.bid card: notrump.transfers.super_accept_doubleton needs: super-accept after 1N (P) 2D (P) | (1x) 1N (P) 2D (P) | (1x) P (P) 1N (P) 2D (P) | (1x) 1N (X) 2D (P) | (1x) P (P) 1N (X) 2D (P) 2S Super-accept: 4+ hearts, maximum, doubleton spade [alert] [artificial] shows H>=4, hcp>=16, S=2, !has(Q,S) 2N Super-accept: 4+ hearts, maximum, a doubleton [alert] [artificial] shows H>=4, hcp>=16, shortest=2 after 1N (P) 2H (P) | (1x) 1N (P) 2H (P) | (1x) P (P) 1N (P) 2H (P) | (1x) 1N (X) 2H (P) | (1x) P (P) 1N (X) 2H (P) 2N Super-accept: 4+ spades, maximum, a doubleton [alert] [artificial] shows S>=4, hcp>=16, shortest=2 == texas-transfers: Texas Transfers file: conventions/notrump/texas-transfers.bid card: notrump.transfers.texas needs: notrump-base after 1N (P) | (1x) 1N (P) | (1x) P (P) 1N (P) | (1x) 1N (X) | (1x) P (P) 1N (X) when !they.bid | systems_on 4D Texas: 6+ ♥, game only or slam values [announce: Transfer] [artificial] shows H>=6, suit_strength=game, suit_points<=30-partner.points.max 4D Texas: 6+ ♥, game only or slam values [announce: Transfer] [artificial] shows H>=6, suit_points>=33-partner.points.min 4H Texas: 6+ ♠, game only or slam values [announce: Transfer] [artificial] shows S>=6, suit_strength=game, suit_points<=30-partner.points.max 4H Texas: 6+ ♠, game only or slam values [announce: Transfer] [artificial] shows S>=6, suit_points>=33-partner.points.min 4D Texas: 6+ ♥, game only or slam values [announce: Transfer] [artificial] shows H>=6, tp(H)>=33-partner.points.min 4H Texas: 6+ ♠, game only or slam values [announce: Transfer] [artificial] shows S>=6, tp(S)>=33-partner.points.min after 1N (P) 4D (P) | (1x) 1N (P) 4D (P) | (1x) P (P) 1N (P) 4D (P) | (1x) 1N (X) 4D (P) | (1x) P (P) 1N (X) 4D (P) 4H Completes the transfer after 1N (P) 4H (P) | (1x) 1N (P) 4H (P) | (1x) P (P) 1N (P) 4H (P) | (1x) 1N (X) 4H (P) | (1x) P (P) 1N (X) 4H (P) 4S Completes the transfer after (any auction) when answered texas(M) 4N Keycard ask in {M} [artificial] shows suit_points>=33-partner.points.min 4N Keycard ask in {M} [artificial] shows tp(M)>=33-partner.points.min P Game reached after 1N (2C) when vs_2c 4D Texas: 6+ ♥, game only or slam values [announce: Transfer] [artificial] shows H>=6, suit_strength=game, suit_points<=30-partner.points.max 4D Texas: 6+ ♥, game only or slam values [announce: Transfer] [artificial] shows H>=6, suit_points>=33-partner.points.min 4H Texas: 6+ ♠, game only or slam values [announce: Transfer] [artificial] shows S>=6, suit_strength=game, suit_points<=30-partner.points.max 4H Texas: 6+ ♠, game only or slam values [announce: Transfer] [artificial] shows S>=6, suit_points>=33-partner.points.min 4D Preemptive: seven or more hearts, no values [announce: Transfer] [artificial] shows H>=7, hcp>=4, suit_strength=signoff 4H Preemptive: seven or more spades, no values [announce: Transfer] [artificial] shows S>=7, hcp>=4, suit_strength=signoff after 1N (2C) 4D (P) when vs_2c 4H Completes the transfer after 1N (2C) 4H (P) when vs_2c 4S Completes the transfer == two-nt-responses: Responses to a 2NT opening file: conventions/notrump/two-nt-responses.bid needs: notrump-base after 2N (P) 3C Stayman: asks for a four-card major [alert] [artificial] shows H=4 | S=4, strength>=game when stayman, !puppet, !shape 4333, style is not bba 3D Transfer to hearts [announce: Transfer] [artificial] shows H>=5 when jacoby 3H Transfer to spades [announce: Transfer] [artificial] shows S>=5 when jacoby 3N To play: {game} total points shows strength>=game, H<=4, S<=4 when style is not bba 4N Quantitative: {slam_invite} total points, invites 6NT shows balanced, strength=slam_invite when style is not bba 6N Slam: {slam} total points shows balanced, strength=slam when style is not bba P No game: {signoff}-{invite} total points shows strength<=invite when style is not bba 3C Stayman: asks for a four-card major [alert] [artificial] shows hcp>=25-partner.hcp.min, H=4 | S=4 when stayman, !puppet, style is bba 3H Transfer to spades, 5-5 in the majors [announce: Transfer] [artificial] shows S>=5, H>=5 when jacoby, style is bba 3N To play: game values shows hcp>=25-partner.hcp.min, H<=4, S<=4 when style is bba 4N Quantitative: invites 6NT shows balanced, hcp>=32-partner.hcp.max, points<=31-partner.hcp.min, H<=4, S<=4 when style is bba 6N Slam shows balanced, points>=32-partner.hcp.min, H<=4, S<=4 when style is bba P Nothing: 4 HCP or less shows hcp<=24-partner.hcp.min when style is bba after 2N (P) when style is not bba 4C Slam try: six or more clubs, or five and unbalanced shows C>=6 | (C>=5, !balanced), strength>=slam_invite, H<=4, S<=4 when !gerber 4D Slam try: six or more diamonds, or five and unbalanced shows D>=6 | (D>=5, !balanced), strength>=slam_invite, H<=4, S<=4 after 2N (P) 4x (P) when (x is C, !gerber) | x is D, style is not bba 6{x} A fit: slam shows x>=3 4N No fit shows x<=2 after 2N (P) 4x (P) 4N (P) when (x is C, !gerber) | x is D, style is not bba 6N Slam values anyway shows strength>=slam P No fit: 4NT after 2N (P) 3C (P) when !puppet 3H 4+ hearts shows H>=4 3S 4 spades, not 4 hearts shows S>=4, H<=3 3D No four-card major shows H<=3, S<=3 after 2N (P) 3D (P) 3H Completes transfer after 2N (P) 3H (P) 3S Completes transfer after 2N (P) 3D (P) 3H (P) P Weak: play here shows hcp<=24-partner.hcp.max 3N Game values, five hearts: choose the game shows H=5, hcp>=25-partner.hcp.max 4H Game, six or more hearts shows H>=6, hcp>=25-partner.hcp.max after 2N (P) 3H (P) 3S (P) P Weak: play here shows hcp<=24-partner.hcp.max 3N Game values, five spades: choose the game shows S=5, hcp>=25-partner.hcp.max 4S Game, six or more spades shows S>=6, hcp>=25-partner.hcp.max after 2N (P) | 2C (P) 2D (P) 2N (P) when puppet 3C Puppet Stayman: asks for a four- or five-card major [alert] [artificial] shows strength>=game, H<=4, S<=4, H>=3 | S>=3 when style is not bba 3C Puppet Stayman: asks for a four- or five-card major [alert] [artificial] shows hcp>=25-partner.hcp.min, H<=4, S<=4, H>=3 | S>=3 when style is bba after (any auction) when asked puppet 3H Five hearts shows H>=5 3S Five spades shows S>=5, H<=4 3D A four-card major, no five [artificial] shows H=4 | S=4, H<=4, S<=4 3N No four- or five-card major shows H<=3, S<=3 after (any auction) when answered puppet, partner.last=3D 3H Four spades, not four hearts [alert] [artificial] shows S=4, H<=3 3S Four hearts, not four spades [alert] [artificial] shows H=4, S<=3 4D Both majors, no slam interest: opener chooses [alert] [artificial] shows H=4, S=4, strength<=game 4C Both majors, slam interest: opener chooses [alert] [artificial] shows H=4, S=4, strength>=slam_invite 6N No four-card major: slam shows H<=3, S<=3, points>=32-partner.hcp.min 4N No four-card major: quantitative, invites 6NT shows H<=3, S<=3, balanced, strength=slam_invite, points<=31-partner.hcp.min 3N No four-card major: game shows H<=3, S<=3, strength>=game after (any auction) when asked puppet_fit(x) 4{x} Four {x}: game in the fit shows x=4 3N No four {x} shows x<=3 after (any auction) when asked puppet_both 4S Four spades shows S=4 4H Four hearts, not four spades shows H=4, S<=3 after 2N (P) 3C (P) 3D (P) 3N (P) | 2C (P) 2D (P) 2N (P) 3C (P) 3D (P) 3N (P) when puppet P No fit: 3NT after (any auction) when answered puppet_fit(x), partner.last=4{x} 6{x} Slam in the fit shows tp(x)>=33-partner.hcp.min P Game in the fit after (any auction) when answered puppet_both, we.trump is suit 6{trump} Slam in the fit shows tp(trump)>=33-partner.hcp.min P Game in the fit after (any auction) when answered puppet, partner.last=3H 6H Slam in the five-three fit shows H>=3, tp(H)>=33-partner.hcp.min 4H Game in the five-three fit shows H>=3 6N No fit: slam shows H<=2, points>=32-partner.hcp.min 4N No fit: quantitative, invites 6NT shows H<=2, balanced, strength=slam_invite, points<=31-partner.hcp.min 3N No fit: game shows H<=2 after (any auction) when answered puppet, partner.last=3S 6S Slam in the five-three fit shows S>=3, tp(S)>=33-partner.hcp.min 4S Game in the five-three fit shows S>=3 6N No fit: slam shows S<=2, points>=32-partner.hcp.min 4N No fit: quantitative, invites 6NT shows S<=2, balanced, strength=slam_invite, points<=31-partner.hcp.min 3N No fit: game shows S<=2 after (any auction) when answered puppet, partner.last=3N 6N No fit: slam shows points>=32-partner.hcp.min 4N No fit: quantitative, invites 6NT shows balanced, strength=slam_invite, points<=31-partner.hcp.min P No fit: 3NT after (any auction) when answered puppet_fit(x), partner.last=3N 6N No fit: slam shows points>=32-partner.hcp.min 4N No fit: quantitative, invites 6NT shows balanced, strength=slam_invite, points<=31-partner.hcp.min P No fit: 3NT == blackwood: Blackwood (standard) file: conventions/slam/blackwood.bid card: slam.blackwood.standard needs: base after (any auction) when we.trump is suit, !asked, we.forcing=none | we.forcing=round 4N Blackwood: how many aces? [artificial] when we.tp(trump).max>=33, losers<=4, !((trump is not C, C>=2, !has(A,C), !has(K,C), trump is not D, D>=2, !has(A,D), !has(K,D)) | (trump is not C, C>=2, !has(A,C), !has(K,C), trump is not H, H>=2, !has(A,H), !has(K,H)) | (trump is not C, C>=2, !has(A,C), !has(K,C), trump is not S, S>=2, !has(A,S), !has(K,S)) | (trump is not D, D>=2, !has(A,D), !has(K,D), trump is not H, H>=2, !has(A,H), !has(K,H)) | (trump is not D, D>=2, !has(A,D), !has(K,D), trump is not S, S>=2, !has(A,S), !has(K,S)) | (trump is not H, H>=2, !has(A,H), !has(K,H), trump is not S, S>=2, !has(A,S), !has(K,S))) after (any auction) when we.trump is suit, !asked, we.forcing=game 4N Blackwood: how many aces? [artificial] when tp(trump)+partner.tp(trump).min>=33 | tp(trump)>=18 after (any auction) when we.trump is suit, asked control(t) 4N Blackwood: how many aces? [artificial] when trump is C | has(A,C) | (C<=0, partner.C.min<=3) | (style is first_or_second_round, has(K,C) | (C<=1, partner.C.min<=3)) | partner.cued(C) | me.denied(C), trump is D | has(A,D) | (D<=0, partner.D.min<=3) | (style is first_or_second_round, has(K,D) | (D<=1, partner.D.min<=3)) | partner.cued(D) | me.denied(D), trump is H | has(A,H) | (H<=0, partner.H.min<=3) | (style is first_or_second_round, has(K,H) | (H<=1, partner.H.min<=3)) | partner.cued(H) | me.denied(H), trump is S | has(A,S) | (S<=0, partner.S.min<=3) | (style is first_or_second_round, has(K,S) | (S<=1, partner.S.min<=3)) | partner.cued(S) | me.denied(S) after (any auction) when we.trump is suit, answered control(t), partner.last=4{trump} 4N Blackwood: how many aces? [artificial] when trump is C | has(A,C) | (C<=0, partner.C.min<=3) | (style is first_or_second_round, has(K,C) | (C<=1, partner.C.min<=3)) | partner.cued(C), trump is D | has(A,D) | (D<=0, partner.D.min<=3) | (style is first_or_second_round, has(K,D) | (D<=1, partner.D.min<=3)) | partner.cued(D), trump is H | has(A,H) | (H<=0, partner.H.min<=3) | (style is first_or_second_round, has(K,H) | (H<=1, partner.H.min<=3)) | partner.cued(H), trump is S | has(A,S) | (S<=0, partner.S.min<=3) | (style is first_or_second_round, has(K,S) | (S<=1, partner.S.min<=3)) | partner.cued(S) after (any auction) when asked aces 5C 0 or 4 aces [artificial] shows keycards(N) in 0|4 5D 1 ace [artificial] shows keycards(N)=1 5H 2 aces [artificial] shows keycards(N)=2 5S 3 aces [artificial] shows keycards(N)=3 after (any auction) when answered aces 6{trump} Small slam: at most one ace missing when we.keycards(N)>=3 P Sign off: the answer is in our suit when partner.last=5{trump}, we.keycards(N).max<=2 5{trump} Sign off: two aces missing when we.keycards(N).max<=2 6{trump} Small slam: "0 or 4" with no aces of my own is 4 when maybe we.keycards(N)>=3 == control-bids: Control bids before the keycard ask file: conventions/slam/control-bids.bid card: slam.cue_bids.play needs: base after (any auction) when we.trump is suit, !asked, !answered control, trump is H | trump is S, we.forcing=game cheapest(C) Control bid in ♣ [alert] [artificial] when trump is not C, !partner.cued(C), !me.cued(C), under_game(C), tp(trump)+partner.tp(trump).min>=33 | tp(trump)>=18, (trump is not C, !(has(A,C) | (C<=0, partner.C.min<=3) | (style is first_or_second_round, has(K,C) | (C<=1, partner.C.min<=3)))) | (trump is not D, !(has(A,D) | (D<=0, partner.D.min<=3) | (style is first_or_second_round, has(K,D) | (D<=1, partner.D.min<=3)))) | (trump is not H, !(has(A,H) | (H<=0, partner.H.min<=3) | (style is first_or_second_round, has(K,H) | (H<=1, partner.H.min<=3)))) | (trump is not S, !(has(A,S) | (S<=0, partner.S.min<=3) | (style is first_or_second_round, has(K,S) | (S<=1, partner.S.min<=3)))), has(A,C) | (C<=0, partner.C.min<=3) | (style is first_or_second_round, has(K,C) | (C<=1, partner.C.min<=3)), trump is C | !partner.denied(C) | has(A,C) | (C<=0, partner.C.min<=3) | (style is first_or_second_round, has(K,C) | (C<=1, partner.C.min<=3)), trump is D | !partner.denied(D) | has(A,D) | (D<=0, partner.D.min<=3) | (style is first_or_second_round, has(K,D) | (D<=1, partner.D.min<=3)), trump is H | !partner.denied(H) | has(A,H) | (H<=0, partner.H.min<=3) | (style is first_or_second_round, has(K,H) | (H<=1, partner.H.min<=3)), trump is S | !partner.denied(S) | has(A,S) | (S<=0, partner.S.min<=3) | (style is first_or_second_round, has(K,S) | (S<=1, partner.S.min<=3)) cheapest(D) Control bid in ♦ [alert] [artificial] when trump is not D, !partner.cued(D), !me.cued(D), under_game(D), tp(trump)+partner.tp(trump).min>=33 | tp(trump)>=18, (trump is not C, !(has(A,C) | (C<=0, partner.C.min<=3) | (style is first_or_second_round, has(K,C) | (C<=1, partner.C.min<=3)))) | (trump is not D, !(has(A,D) | (D<=0, partner.D.min<=3) | (style is first_or_second_round, has(K,D) | (D<=1, partner.D.min<=3)))) | (trump is not H, !(has(A,H) | (H<=0, partner.H.min<=3) | (style is first_or_second_round, has(K,H) | (H<=1, partner.H.min<=3)))) | (trump is not S, !(has(A,S) | (S<=0, partner.S.min<=3) | (style is first_or_second_round, has(K,S) | (S<=1, partner.S.min<=3)))), has(A,D) | (D<=0, partner.D.min<=3) | (style is first_or_second_round, has(K,D) | (D<=1, partner.D.min<=3)), trump is C | !partner.denied(C) | has(A,C) | (C<=0, partner.C.min<=3) | (style is first_or_second_round, has(K,C) | (C<=1, partner.C.min<=3)), trump is D | !partner.denied(D) | has(A,D) | (D<=0, partner.D.min<=3) | (style is first_or_second_round, has(K,D) | (D<=1, partner.D.min<=3)), trump is H | !partner.denied(H) | has(A,H) | (H<=0, partner.H.min<=3) | (style is first_or_second_round, has(K,H) | (H<=1, partner.H.min<=3)), trump is S | !partner.denied(S) | has(A,S) | (S<=0, partner.S.min<=3) | (style is first_or_second_round, has(K,S) | (S<=1, partner.S.min<=3)) cheapest(H) Control bid in ♥ [alert] [artificial] when trump is not H, !partner.cued(H), !me.cued(H), under_game(H), tp(trump)+partner.tp(trump).min>=33 | tp(trump)>=18, (trump is not C, !(has(A,C) | (C<=0, partner.C.min<=3) | (style is first_or_second_round, has(K,C) | (C<=1, partner.C.min<=3)))) | (trump is not D, !(has(A,D) | (D<=0, partner.D.min<=3) | (style is first_or_second_round, has(K,D) | (D<=1, partner.D.min<=3)))) | (trump is not H, !(has(A,H) | (H<=0, partner.H.min<=3) | (style is first_or_second_round, has(K,H) | (H<=1, partner.H.min<=3)))) | (trump is not S, !(has(A,S) | (S<=0, partner.S.min<=3) | (style is first_or_second_round, has(K,S) | (S<=1, partner.S.min<=3)))), has(A,H) | (H<=0, partner.H.min<=3) | (style is first_or_second_round, has(K,H) | (H<=1, partner.H.min<=3)), trump is C | !partner.denied(C) | has(A,C) | (C<=0, partner.C.min<=3) | (style is first_or_second_round, has(K,C) | (C<=1, partner.C.min<=3)), trump is D | !partner.denied(D) | has(A,D) | (D<=0, partner.D.min<=3) | (style is first_or_second_round, has(K,D) | (D<=1, partner.D.min<=3)), trump is H | !partner.denied(H) | has(A,H) | (H<=0, partner.H.min<=3) | (style is first_or_second_round, has(K,H) | (H<=1, partner.H.min<=3)), trump is S | !partner.denied(S) | has(A,S) | (S<=0, partner.S.min<=3) | (style is first_or_second_round, has(K,S) | (S<=1, partner.S.min<=3)) cheapest(S) Control bid in ♠ [alert] [artificial] when trump is not S, !partner.cued(S), !me.cued(S), under_game(S), tp(trump)+partner.tp(trump).min>=33 | tp(trump)>=18, (trump is not C, !(has(A,C) | (C<=0, partner.C.min<=3) | (style is first_or_second_round, has(K,C) | (C<=1, partner.C.min<=3)))) | (trump is not D, !(has(A,D) | (D<=0, partner.D.min<=3) | (style is first_or_second_round, has(K,D) | (D<=1, partner.D.min<=3)))) | (trump is not H, !(has(A,H) | (H<=0, partner.H.min<=3) | (style is first_or_second_round, has(K,H) | (H<=1, partner.H.min<=3)))) | (trump is not S, !(has(A,S) | (S<=0, partner.S.min<=3) | (style is first_or_second_round, has(K,S) | (S<=1, partner.S.min<=3)))), has(A,S) | (S<=0, partner.S.min<=3) | (style is first_or_second_round, has(K,S) | (S<=1, partner.S.min<=3)), trump is C | !partner.denied(C) | has(A,C) | (C<=0, partner.C.min<=3) | (style is first_or_second_round, has(K,C) | (C<=1, partner.C.min<=3)), trump is D | !partner.denied(D) | has(A,D) | (D<=0, partner.D.min<=3) | (style is first_or_second_round, has(K,D) | (D<=1, partner.D.min<=3)), trump is H | !partner.denied(H) | has(A,H) | (H<=0, partner.H.min<=3) | (style is first_or_second_round, has(K,H) | (H<=1, partner.H.min<=3)), trump is S | !partner.denied(S) | has(A,S) | (S<=0, partner.S.min<=3) | (style is first_or_second_round, has(K,S) | (S<=1, partner.S.min<=3)) after (any auction) when we.trump is suit, !asked, !answered control, trump is H | trump is S, we.forcing=none | we.forcing=round cheapest(C) Control bid in ♣ [alert] [artificial] when trump is not C, !partner.cued(C), !me.cued(C), under_game(C), we.tp(trump).max>=33, losers<=4, (trump is not C, !(has(A,C) | (C<=0, partner.C.min<=3) | (style is first_or_second_round, has(K,C) | (C<=1, partner.C.min<=3)))) | (trump is not D, !(has(A,D) | (D<=0, partner.D.min<=3) | (style is first_or_second_round, has(K,D) | (D<=1, partner.D.min<=3)))) | (trump is not H, !(has(A,H) | (H<=0, partner.H.min<=3) | (style is first_or_second_round, has(K,H) | (H<=1, partner.H.min<=3)))) | (trump is not S, !(has(A,S) | (S<=0, partner.S.min<=3) | (style is first_or_second_round, has(K,S) | (S<=1, partner.S.min<=3)))), has(A,C) | (C<=0, partner.C.min<=3) | (style is first_or_second_round, has(K,C) | (C<=1, partner.C.min<=3)), trump is C | !partner.denied(C) | has(A,C) | (C<=0, partner.C.min<=3) | (style is first_or_second_round, has(K,C) | (C<=1, partner.C.min<=3)), trump is D | !partner.denied(D) | has(A,D) | (D<=0, partner.D.min<=3) | (style is first_or_second_round, has(K,D) | (D<=1, partner.D.min<=3)), trump is H | !partner.denied(H) | has(A,H) | (H<=0, partner.H.min<=3) | (style is first_or_second_round, has(K,H) | (H<=1, partner.H.min<=3)), trump is S | !partner.denied(S) | has(A,S) | (S<=0, partner.S.min<=3) | (style is first_or_second_round, has(K,S) | (S<=1, partner.S.min<=3)) cheapest(D) Control bid in ♦ [alert] [artificial] when trump is not D, !partner.cued(D), !me.cued(D), under_game(D), we.tp(trump).max>=33, losers<=4, (trump is not C, !(has(A,C) | (C<=0, partner.C.min<=3) | (style is first_or_second_round, has(K,C) | (C<=1, partner.C.min<=3)))) | (trump is not D, !(has(A,D) | (D<=0, partner.D.min<=3) | (style is first_or_second_round, has(K,D) | (D<=1, partner.D.min<=3)))) | (trump is not H, !(has(A,H) | (H<=0, partner.H.min<=3) | (style is first_or_second_round, has(K,H) | (H<=1, partner.H.min<=3)))) | (trump is not S, !(has(A,S) | (S<=0, partner.S.min<=3) | (style is first_or_second_round, has(K,S) | (S<=1, partner.S.min<=3)))), has(A,D) | (D<=0, partner.D.min<=3) | (style is first_or_second_round, has(K,D) | (D<=1, partner.D.min<=3)), trump is C | !partner.denied(C) | has(A,C) | (C<=0, partner.C.min<=3) | (style is first_or_second_round, has(K,C) | (C<=1, partner.C.min<=3)), trump is D | !partner.denied(D) | has(A,D) | (D<=0, partner.D.min<=3) | (style is first_or_second_round, has(K,D) | (D<=1, partner.D.min<=3)), trump is H | !partner.denied(H) | has(A,H) | (H<=0, partner.H.min<=3) | (style is first_or_second_round, has(K,H) | (H<=1, partner.H.min<=3)), trump is S | !partner.denied(S) | has(A,S) | (S<=0, partner.S.min<=3) | (style is first_or_second_round, has(K,S) | (S<=1, partner.S.min<=3)) cheapest(H) Control bid in ♥ [alert] [artificial] when trump is not H, !partner.cued(H), !me.cued(H), under_game(H), we.tp(trump).max>=33, losers<=4, (trump is not C, !(has(A,C) | (C<=0, partner.C.min<=3) | (style is first_or_second_round, has(K,C) | (C<=1, partner.C.min<=3)))) | (trump is not D, !(has(A,D) | (D<=0, partner.D.min<=3) | (style is first_or_second_round, has(K,D) | (D<=1, partner.D.min<=3)))) | (trump is not H, !(has(A,H) | (H<=0, partner.H.min<=3) | (style is first_or_second_round, has(K,H) | (H<=1, partner.H.min<=3)))) | (trump is not S, !(has(A,S) | (S<=0, partner.S.min<=3) | (style is first_or_second_round, has(K,S) | (S<=1, partner.S.min<=3)))), has(A,H) | (H<=0, partner.H.min<=3) | (style is first_or_second_round, has(K,H) | (H<=1, partner.H.min<=3)), trump is C | !partner.denied(C) | has(A,C) | (C<=0, partner.C.min<=3) | (style is first_or_second_round, has(K,C) | (C<=1, partner.C.min<=3)), trump is D | !partner.denied(D) | has(A,D) | (D<=0, partner.D.min<=3) | (style is first_or_second_round, has(K,D) | (D<=1, partner.D.min<=3)), trump is H | !partner.denied(H) | has(A,H) | (H<=0, partner.H.min<=3) | (style is first_or_second_round, has(K,H) | (H<=1, partner.H.min<=3)), trump is S | !partner.denied(S) | has(A,S) | (S<=0, partner.S.min<=3) | (style is first_or_second_round, has(K,S) | (S<=1, partner.S.min<=3)) cheapest(S) Control bid in ♠ [alert] [artificial] when trump is not S, !partner.cued(S), !me.cued(S), under_game(S), we.tp(trump).max>=33, losers<=4, (trump is not C, !(has(A,C) | (C<=0, partner.C.min<=3) | (style is first_or_second_round, has(K,C) | (C<=1, partner.C.min<=3)))) | (trump is not D, !(has(A,D) | (D<=0, partner.D.min<=3) | (style is first_or_second_round, has(K,D) | (D<=1, partner.D.min<=3)))) | (trump is not H, !(has(A,H) | (H<=0, partner.H.min<=3) | (style is first_or_second_round, has(K,H) | (H<=1, partner.H.min<=3)))) | (trump is not S, !(has(A,S) | (S<=0, partner.S.min<=3) | (style is first_or_second_round, has(K,S) | (S<=1, partner.S.min<=3)))), has(A,S) | (S<=0, partner.S.min<=3) | (style is first_or_second_round, has(K,S) | (S<=1, partner.S.min<=3)), trump is C | !partner.denied(C) | has(A,C) | (C<=0, partner.C.min<=3) | (style is first_or_second_round, has(K,C) | (C<=1, partner.C.min<=3)), trump is D | !partner.denied(D) | has(A,D) | (D<=0, partner.D.min<=3) | (style is first_or_second_round, has(K,D) | (D<=1, partner.D.min<=3)), trump is H | !partner.denied(H) | has(A,H) | (H<=0, partner.H.min<=3) | (style is first_or_second_round, has(K,H) | (H<=1, partner.H.min<=3)), trump is S | !partner.denied(S) | has(A,S) | (S<=0, partner.S.min<=3) | (style is first_or_second_round, has(K,S) | (S<=1, partner.S.min<=3)) after (any auction) when we.trump is suit, asked control(t), trump is H | trump is S cheapest(C) Control bid in ♣ [alert] [artificial] when trump is not C, !partner.cued(C), !me.cued(C), under_game(C), has(A,C) | (C<=0, partner.C.min<=3) | (style is first_or_second_round, has(K,C) | (C<=1, partner.C.min<=3)), trump is C | !partner.denied(C) | has(A,C) | (C<=0, partner.C.min<=3) | (style is first_or_second_round, has(K,C) | (C<=1, partner.C.min<=3)), trump is D | !partner.denied(D) | has(A,D) | (D<=0, partner.D.min<=3) | (style is first_or_second_round, has(K,D) | (D<=1, partner.D.min<=3)), trump is H | !partner.denied(H) | has(A,H) | (H<=0, partner.H.min<=3) | (style is first_or_second_round, has(K,H) | (H<=1, partner.H.min<=3)), trump is S | !partner.denied(S) | has(A,S) | (S<=0, partner.S.min<=3) | (style is first_or_second_round, has(K,S) | (S<=1, partner.S.min<=3)) cheapest(D) Control bid in ♦ [alert] [artificial] when trump is not D, !partner.cued(D), !me.cued(D), under_game(D), has(A,D) | (D<=0, partner.D.min<=3) | (style is first_or_second_round, has(K,D) | (D<=1, partner.D.min<=3)), trump is C | !partner.denied(C) | has(A,C) | (C<=0, partner.C.min<=3) | (style is first_or_second_round, has(K,C) | (C<=1, partner.C.min<=3)), trump is D | !partner.denied(D) | has(A,D) | (D<=0, partner.D.min<=3) | (style is first_or_second_round, has(K,D) | (D<=1, partner.D.min<=3)), trump is H | !partner.denied(H) | has(A,H) | (H<=0, partner.H.min<=3) | (style is first_or_second_round, has(K,H) | (H<=1, partner.H.min<=3)), trump is S | !partner.denied(S) | has(A,S) | (S<=0, partner.S.min<=3) | (style is first_or_second_round, has(K,S) | (S<=1, partner.S.min<=3)) cheapest(H) Control bid in ♥ [alert] [artificial] when trump is not H, !partner.cued(H), !me.cued(H), under_game(H), has(A,H) | (H<=0, partner.H.min<=3) | (style is first_or_second_round, has(K,H) | (H<=1, partner.H.min<=3)), trump is C | !partner.denied(C) | has(A,C) | (C<=0, partner.C.min<=3) | (style is first_or_second_round, has(K,C) | (C<=1, partner.C.min<=3)), trump is D | !partner.denied(D) | has(A,D) | (D<=0, partner.D.min<=3) | (style is first_or_second_round, has(K,D) | (D<=1, partner.D.min<=3)), trump is H | !partner.denied(H) | has(A,H) | (H<=0, partner.H.min<=3) | (style is first_or_second_round, has(K,H) | (H<=1, partner.H.min<=3)), trump is S | !partner.denied(S) | has(A,S) | (S<=0, partner.S.min<=3) | (style is first_or_second_round, has(K,S) | (S<=1, partner.S.min<=3)) cheapest(S) Control bid in ♠ [alert] [artificial] when trump is not S, !partner.cued(S), !me.cued(S), under_game(S), has(A,S) | (S<=0, partner.S.min<=3) | (style is first_or_second_round, has(K,S) | (S<=1, partner.S.min<=3)), trump is C | !partner.denied(C) | has(A,C) | (C<=0, partner.C.min<=3) | (style is first_or_second_round, has(K,C) | (C<=1, partner.C.min<=3)), trump is D | !partner.denied(D) | has(A,D) | (D<=0, partner.D.min<=3) | (style is first_or_second_round, has(K,D) | (D<=1, partner.D.min<=3)), trump is H | !partner.denied(H) | has(A,H) | (H<=0, partner.H.min<=3) | (style is first_or_second_round, has(K,H) | (H<=1, partner.H.min<=3)), trump is S | !partner.denied(S) | has(A,S) | (S<=0, partner.S.min<=3) | (style is first_or_second_round, has(K,S) | (S<=1, partner.S.min<=3)) cheapest(C) Control bid in ♣ past game: first-round control [alert] [artificial] when trump is not C, !partner.cued(C), !me.cued(C), !under_game(C), (trump is H, cheapest_rank(C)<27) | (trump is S, cheapest_rank(C)<28), has(A,C) | (C<=0, partner.C.min<=3), trump is C | !partner.denied(C) | has(A,C) | (C<=0, partner.C.min<=3), trump is D | !partner.denied(D) | has(A,D) | (D<=0, partner.D.min<=3), trump is H | !partner.denied(H) | has(A,H) | (H<=0, partner.H.min<=3), trump is S | !partner.denied(S) | has(A,S) | (S<=0, partner.S.min<=3) cheapest(D) Control bid in ♦ past game: first-round control [alert] [artificial] when trump is not D, !partner.cued(D), !me.cued(D), !under_game(D), (trump is H, cheapest_rank(D)<27) | (trump is S, cheapest_rank(D)<28), has(A,D) | (D<=0, partner.D.min<=3), trump is C | !partner.denied(C) | has(A,C) | (C<=0, partner.C.min<=3), trump is D | !partner.denied(D) | has(A,D) | (D<=0, partner.D.min<=3), trump is H | !partner.denied(H) | has(A,H) | (H<=0, partner.H.min<=3), trump is S | !partner.denied(S) | has(A,S) | (S<=0, partner.S.min<=3) cheapest(H) Control bid in ♥ past game: first-round control [alert] [artificial] when trump is not H, !partner.cued(H), !me.cued(H), !under_game(H), (trump is H, cheapest_rank(H)<27) | (trump is S, cheapest_rank(H)<28), has(A,H) | (H<=0, partner.H.min<=3), trump is C | !partner.denied(C) | has(A,C) | (C<=0, partner.C.min<=3), trump is D | !partner.denied(D) | has(A,D) | (D<=0, partner.D.min<=3), trump is H | !partner.denied(H) | has(A,H) | (H<=0, partner.H.min<=3), trump is S | !partner.denied(S) | has(A,S) | (S<=0, partner.S.min<=3) cheapest(S) Control bid in ♠ past game: first-round control [alert] [artificial] when trump is not S, !partner.cued(S), !me.cued(S), !under_game(S), (trump is H, cheapest_rank(S)<27) | (trump is S, cheapest_rank(S)<28), has(A,S) | (S<=0, partner.S.min<=3), trump is C | !partner.denied(C) | has(A,C) | (C<=0, partner.C.min<=3), trump is D | !partner.denied(D) | has(A,D) | (D<=0, partner.D.min<=3), trump is H | !partner.denied(H) | has(A,H) | (H<=0, partner.H.min<=3), trump is S | !partner.denied(S) | has(A,S) | (S<=0, partner.S.min<=3) 4{trump} No further control: game in {trump} 5{trump} No further control, and the dialogue is past game after (any auction) when we.trump is suit, answered control(t), partner.last=4{trump}, trump is H | trump is S cheapest(C) Control bid in ♣ past game: first-round control [alert] [artificial] when trump is not C, !partner.cued(C), !me.cued(C), (trump is H, cheapest_rank(C)<27) | (trump is S, cheapest_rank(C)<28), tp(trump)+partner.tp(trump).min>=33 | tp(trump)>=18, has(A,C) | (C<=0, partner.C.min<=3), trump is C | !partner.denied(C) | has(A,C) | (C<=0, partner.C.min<=3), trump is D | !partner.denied(D) | has(A,D) | (D<=0, partner.D.min<=3), trump is H | !partner.denied(H) | has(A,H) | (H<=0, partner.H.min<=3), trump is S | !partner.denied(S) | has(A,S) | (S<=0, partner.S.min<=3) cheapest(D) Control bid in ♦ past game: first-round control [alert] [artificial] when trump is not D, !partner.cued(D), !me.cued(D), (trump is H, cheapest_rank(D)<27) | (trump is S, cheapest_rank(D)<28), tp(trump)+partner.tp(trump).min>=33 | tp(trump)>=18, has(A,D) | (D<=0, partner.D.min<=3), trump is C | !partner.denied(C) | has(A,C) | (C<=0, partner.C.min<=3), trump is D | !partner.denied(D) | has(A,D) | (D<=0, partner.D.min<=3), trump is H | !partner.denied(H) | has(A,H) | (H<=0, partner.H.min<=3), trump is S | !partner.denied(S) | has(A,S) | (S<=0, partner.S.min<=3) cheapest(H) Control bid in ♥ past game: first-round control [alert] [artificial] when trump is not H, !partner.cued(H), !me.cued(H), (trump is H, cheapest_rank(H)<27) | (trump is S, cheapest_rank(H)<28), tp(trump)+partner.tp(trump).min>=33 | tp(trump)>=18, has(A,H) | (H<=0, partner.H.min<=3), trump is C | !partner.denied(C) | has(A,C) | (C<=0, partner.C.min<=3), trump is D | !partner.denied(D) | has(A,D) | (D<=0, partner.D.min<=3), trump is H | !partner.denied(H) | has(A,H) | (H<=0, partner.H.min<=3), trump is S | !partner.denied(S) | has(A,S) | (S<=0, partner.S.min<=3) cheapest(S) Control bid in ♠ past game: first-round control [alert] [artificial] when trump is not S, !partner.cued(S), !me.cued(S), (trump is H, cheapest_rank(S)<27) | (trump is S, cheapest_rank(S)<28), tp(trump)+partner.tp(trump).min>=33 | tp(trump)>=18, has(A,S) | (S<=0, partner.S.min<=3), trump is C | !partner.denied(C) | has(A,C) | (C<=0, partner.C.min<=3), trump is D | !partner.denied(D) | has(A,D) | (D<=0, partner.D.min<=3), trump is H | !partner.denied(H) | has(A,H) | (H<=0, partner.H.min<=3), trump is S | !partner.denied(S) | has(A,S) | (S<=0, partner.S.min<=3) P Partner stopped in game over my control bid == gerber: Gerber: 4♣ asks for aces over partner's notrump file: conventions/slam/gerber.bid card: slam.gerber.play needs: notrump-base after 1N (P) when !texas_4c 4C Gerber: how many aces? [alert] [artificial] shows balanced, points>=32-partner.hcp.min, H<=4, S<=4 when style is not bba 4C Gerber: how many aces? [alert] [artificial] shows balanced, hcp>=31-partner.hcp.min, H<=4, S<=4 when style is bba after 2N (P) | 2C (P) 2D (P) 2N (P) 4C Gerber: how many aces? [alert] [artificial] shows H<=4, S<=4, (balanced, strength>=slam) | (C>=6 | (C>=5, !balanced), strength>=slam_invite) when style is not bba 4C Gerber: how many aces? [alert] [artificial] shows H<=4, S<=4, (balanced, hcp>=31-partner.hcp.min) | (C>=6, hcp>=29-partner.hcp.min) when style is bba after 1x (P) 1y (P) 1N (P) | 1x (P) 1y (P) 2N (P) when !only_openings 4C Gerber: how many aces? [alert] [artificial] shows balanced, points>=32-partner.hcp.min after (any auction) when asked gerber 4D 0 or 4 aces [artificial] shows keycards(N) in 0|4 4H 1 ace [artificial] shows keycards(N)=1 4S 2 aces [artificial] shows keycards(N)=2 4N 3 aces [artificial] shows keycards(N)=3 after (any auction) when answered gerber 7N Grand slam: all the aces and 35 between us when we.keycards(N)=4, points+partner.hcp.min>=35 5C Gerber: how many kings? [alert] [artificial] when we.keycards(N)=4, points+partner.hcp.min>=33, points+partner.hcp.min<=34, C<=5 6C Slam in clubs: at most one ace missing when we.keycards(N)>=3, C>=6, imps 6N Small slam: at most one ace missing when we.keycards(N)>=3 4N Sign off: two aces missing when we.keycards(N).max<=2 6N Small slam: "0 or 4" with no aces of my own is 4 when maybe we.keycards(N)>=3 after (any auction) when asked gerber_kings 5D 0 or 4 kings [artificial] shows controls-keycards(N)-keycards(N)=0 | controls-keycards(N)-keycards(N)=4 5H 1 king [artificial] shows controls-keycards(N)-keycards(N)=1 5S 2 kings [artificial] shows controls-keycards(N)-keycards(N)=2 5N 3 kings [artificial] shows controls-keycards(N)-keycards(N)=3 after (any auction) when answered gerber_kings 7N Grand slam: all the aces and kings when (partner.last=5N, controls-keycards(N)-keycards(N)>=1) | (partner.last=5S, controls-keycards(N)-keycards(N)>=2) | (partner.last=5H, controls-keycards(N)-keycards(N)>=3) | (partner.last=5D, controls-keycards(N)-keycards(N)>=4) 6N Small slam: a king missing == over-3nt: Slam after partner's 3NT file: conventions/slam/over-3nt.bid needs: base after (any auction) when partner.last=3N, !they.bid, we.trump is none 6N Slam: 34 or more between us (partner at his minimum) shows hcp+partner.hcp.min>=34 4N Quantitative: 32-33 between us shows hcp+partner.hcp.min>=32, hcp+partner.hcp.max<=35 4C Slam try: six or more clubs shows C>=6, hcp+partner.hcp.min>=31 4D Slam try: six or more diamonds shows D>=6, hcp+partner.hcp.min>=31 4S A standalone spade suit, and a short suit unguarded shows (S>=6, quality(S)=3, top5(S)>=4) | (S>=7, quality(S)=3), (H<=2, !stop(H)) | (D<=2, !stop(D)) | (C<=2, !stop(C)) 4H A standalone heart suit, and a short suit unguarded shows (H>=6, quality(H)=3, top5(H)>=4) | (H>=7, quality(H)=3), (S<=2, !stop(S)) | (D<=2, !stop(D)) | (C<=2, !stop(C)) after (any auction) when asked slam_try(m), partner.last=4{m}, we.trump is none 6{m} A fit: slam shows m>=3 4N No fit shows m<=2 after (any auction) when answered slam_try(m), partner.last=4N 6N Slam values without the fit: 34+ shows hcp+partner.hcp.min>=34 P No fit: 4NT after 1x (P) 1y (P) 2z (P) when z is not x, z is not y 6N Slam: 33+ points between us (partner at his minimum) shows points+partner.points.min>=33, !shortest<=1 4N Quantitative: 31-32 points between us shows points+partner.points.min>=31, points+partner.points.max<=36, !shortest<=1 after 1x (P) 1y (P) 1z (P) 6N Slam: 33+ points between us (partner at his minimum) shows points+partner.points.min>=33, !shortest<=1 4N Quantitative: 31-32 points between us shows points+partner.points.min>=31, points+partner.points.max<=36, !shortest<=1 after 1x (P) 2y (P) 2z (P) when z is not x, z is not y 6N Slam: 33+ points between us (partner at his minimum) shows points+partner.points.min>=33, !shortest<=1 4N Quantitative: 31-32 points between us shows points+partner.points.min>=31, points+partner.points.max<=36, !shortest<=1 == rkcb-1430: Roman Keycard Blackwood (1430; 0314 as a treatment) file: conventions/slam/rkcb-1430.bid needs: base after (any auction) when k1430 | k0314, we.trump is suit, !asked, we.forcing=none | we.forcing=round 4N Keycard ask in {trump} [artificial] when we.tp(trump).max>=33, losers<=4, !((trump is not C, C>=2, !has(A,C), !has(K,C), trump is not D, D>=2, !has(A,D), !has(K,D)) | (trump is not C, C>=2, !has(A,C), !has(K,C), trump is not H, H>=2, !has(A,H), !has(K,H)) | (trump is not C, C>=2, !has(A,C), !has(K,C), trump is not S, S>=2, !has(A,S), !has(K,S)) | (trump is not D, D>=2, !has(A,D), !has(K,D), trump is not H, H>=2, !has(A,H), !has(K,H)) | (trump is not D, D>=2, !has(A,D), !has(K,D), trump is not S, S>=2, !has(A,S), !has(K,S)) | (trump is not H, H>=2, !has(A,H), !has(K,H), trump is not S, S>=2, !has(A,S), !has(K,S))) after (any auction) when k1430 | k0314, we.trump is suit, !asked, we.forcing=game 4N Keycard ask in {trump} [artificial] when tp(trump)+partner.tp(trump).min>=33 | tp(trump)>=18 after (any auction) when k1430 | k0314, we.trump is suit, asked control(t) 4N Keycard ask in {trump} [artificial] when trump is C | has(A,C) | (C<=0, partner.C.min<=3) | (style is first_or_second_round, has(K,C) | (C<=1, partner.C.min<=3)) | partner.cued(C) | me.denied(C), trump is D | has(A,D) | (D<=0, partner.D.min<=3) | (style is first_or_second_round, has(K,D) | (D<=1, partner.D.min<=3)) | partner.cued(D) | me.denied(D), trump is H | has(A,H) | (H<=0, partner.H.min<=3) | (style is first_or_second_round, has(K,H) | (H<=1, partner.H.min<=3)) | partner.cued(H) | me.denied(H), trump is S | has(A,S) | (S<=0, partner.S.min<=3) | (style is first_or_second_round, has(K,S) | (S<=1, partner.S.min<=3)) | partner.cued(S) | me.denied(S) after (any auction) when k1430 | k0314, we.trump is suit, answered control(t), partner.last=4{trump} 4N Keycard ask in {trump} [artificial] when trump is C | has(A,C) | (C<=0, partner.C.min<=3) | (style is first_or_second_round, has(K,C) | (C<=1, partner.C.min<=3)) | partner.cued(C), trump is D | has(A,D) | (D<=0, partner.D.min<=3) | (style is first_or_second_round, has(K,D) | (D<=1, partner.D.min<=3)) | partner.cued(D), trump is H | has(A,H) | (H<=0, partner.H.min<=3) | (style is first_or_second_round, has(K,H) | (H<=1, partner.H.min<=3)) | partner.cued(H), trump is S | has(A,S) | (S<=0, partner.S.min<=3) | (style is first_or_second_round, has(K,S) | (S<=1, partner.S.min<=3)) | partner.cued(S) after (any auction) when k1430 | k0314, asked keycards(t) 5C 1 or 4 keycards [artificial] shows keycards(t) in 1|4 when gstyle is not bba, !m0314 | t is H | t is S 5D 0 or 3 keycards [artificial] shows keycards(t) in 0|3 when gstyle is not bba, !m0314 | t is H | t is S 5C 0 or 3 keycards [artificial] shows keycards(t) in 0|3 when gstyle is not bba, m0314, t is C | t is D 5D 1 or 4 keycards [artificial] shows keycards(t) in 1|4 when gstyle is not bba, m0314, t is C | t is D 5C 1 or 4 keycards [artificial] shows keycards(t) in 1|4 when gstyle is bba, !k0314 5D 0 or 3 keycards [artificial] shows keycards(t) in 0|3 when gstyle is bba, !k0314 5C 0 or 3 keycards [artificial] shows keycards(t) in 0|3 when gstyle is bba, k0314 5D 1 or 4 keycards [artificial] shows keycards(t) in 1|4 when gstyle is bba, k0314 5H 2 keycards, no {t} queen [artificial] shows keycards(t)=2, !has(Q,t) 5S 2 keycards and the {t} queen [artificial] shows keycards(t)=2, has(Q,t) after (any auction) when k1430 | k0314, answered keycards(t) 7{t} Grand slam when we.keycards(t)=5, has(Q,t) | partner.has(Q,t), grand_try 6{t} Small slam: at most one keycard missing when we.keycards(t)>=4 P Sign off: partner's answer is in our suit when partner.last=5{t}, we.keycards(t).max<=3 5{t} Sign off: two keycards missing when we.keycards(t).max<=3 5{t} Sign off: partner corrects to 6 with the higher count when maybe we.keycards(t)>=4 after (any auction) when k1430 | k0314, asked keycard_correct(t) 6{t} Corrects to six: the higher count shows keycards(t)>=3 P Accepts the sign-off == slam-catch: Game or slam once a trump suit is agreed file: conventions/slam/slam-catch.bid needs: base after (any auction) when we.trump is suit, we.forcing=game, !asked 4{trump} Game in {trump}: nothing more to show when trump is H | trump is S